diff --git a/app.js b/app.js
index 2eff18bbc97c75456865691d71ce0b0662c18c4b..78466f64192a09ffac7b6cb56e8f15c32acd9e09 100644
--- a/app.js
+++ b/app.js
@@ -1,18 +1,8 @@
//app.js
const API = require('utils/api.js');
const AJAX = require('utils/ajax.js');
-// 引入腾讯地图
-var QQMapWx = require('utils/qqmap-wx-jssdk.js')
-var qqmapsdk;
App({
onLaunch: function () {
- console.log('onLaunch......初始化腾讯地图控件')
- // 进行初始化腾讯地图
- // 实例化API核心类
- qqmapsdk = new QQMapWx({
- key: API.api.qqMapKey
- })
- this.globalData.qqmapsdk = qqmapsdk
let that = this
wx.clearStorage();
// 展示本地存储能力
@@ -40,8 +30,10 @@ App({
userLoginCode: function (code) {
let that = this
return new Promise((resolve,reject) => {
- let requestUrl = API.api.users + '?code=' + code;
- AJAX.getRequest(requestUrl,false).then(function(response) {
+ let requestUrl = API.api.users;
+ let params = {}
+ params.code = code
+ AJAX.getRequest(requestUrl,params).then(function(response) {
if (response.code == 200) {
// 存储openId信息、用户信息
wx.setStorageSync('openId', response.data.openId)
@@ -54,42 +46,7 @@ App({
})
})
},
- getSetting:function() {
- return new Promise((resolve, reject) => {
- wx.getSetting({
- success: res => {
- if (res.authSetting['scope.userInfo']) {
- // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
- wx.getUserInfo({
- success: res => {
- wx.setStorageSync('nickName', res.userInfo.nickName)
- wx.setStorageSync('avatarUrl', res.userInfo.avatarUrl)
- // 可以将 res 发送给后台解码出 unionId
- return resolve(res.userInfo)
- }
- })
- }else{
- return reject()
- }
- }
- })
- })
- },
- updateUserInfo:function(userId,userInfo) {
- // 如果用户没有授权信息,则不作任何操作,等到用户需要在提示
- console.log(`获取到的数据信息是:` + userId + JSON.stringify(userInfo))
- userInfo.nickName
- let requestData = {}
- requestData.nickName = userInfo.nickName
- requestData.avatarUrl = userInfo.avatarUrl;
- let requestUrl = API.api.users + '/' + Number(userId)
- AJAX.postRequest(requestUrl,requestData,false).then(function(response) {
- console.log('用户信息更新成功啦')
- })
- },
globalData: {
- token: '',
- userInfo: null,
- qqmapsdk: '',
+ token: ''
}
})
\ No newline at end of file
diff --git a/app.json b/app.json
index c725798ed57513cfff41e7a33ba6b675cc547273..b79ca5e34c54f7352d95edcb8797401ac231ea6d 100644
--- a/app.json
+++ b/app.json
@@ -2,17 +2,19 @@
"pages": [
"pages/index/authoriztion/authoriztion",
"pages/consume/consume",
+ "pages/me/myBillDetail/myBillDetail",
"pages/me/me",
"pages/index/address/address",
"pages/me/myBill/myBill",
"pages/index/bookkeepingdetail/bookkeepingdetail",
- "pages/index/index"
-
+ "pages/index/index",
+ "pages/me/officialaccount/officialAccount",
+ "pages/me/feedback/feedback"
],
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#1E95F1",
- "navigationBarTitleText": "消费明细君",
+ "navigationBarTitleText": "优享记账",
"navigationBarTextStyle": "black"
},
"tabBar": {
@@ -42,5 +44,11 @@
"desc": "您的位置信息将用于寻找附近的检测点"
}
},
- "sitemapLocation": "sitemap.json"
+ "sitemapLocation": "sitemap.json",
+ "plugins": {
+ "chooseLocation": {
+ "version": "1.0.2",
+ "provider": "wx76a9a06e5b4e693e"
+ }
+ }
}
\ No newline at end of file
diff --git a/app.wxss b/app.wxss
index 304f1108b1b97614c3a288fa9b9e2db851aa11a3..6738b4acab8460842c31f7784703cc12947e8593 100644
--- a/app.wxss
+++ b/app.wxss
@@ -22,6 +22,9 @@
justify-content: space-between;
box-sizing: border-box;
} */
+page {
+ font-family:"DFKai-SB";
+}
.loading {
width: 100%;
height: 100%;
diff --git a/image/gongzhonghao.png b/image/gongzhonghao.png
new file mode 100644
index 0000000000000000000000000000000000000000..71cbf7c981b02f32b8fb5985e008e53c034be07a
Binary files /dev/null and b/image/gongzhonghao.png differ
diff --git a/image/icon/beizhu.png b/image/icon/beizhu.png
new file mode 100644
index 0000000000000000000000000000000000000000..8868d9c7e241d5c7e83021e5ba84199b193d0ec6
Binary files /dev/null and b/image/icon/beizhu.png differ
diff --git a/image/icon/bianji.png b/image/icon/bianji.png
new file mode 100644
index 0000000000000000000000000000000000000000..080aad588e916cc5a4b69eae857eac82bfe8092a
Binary files /dev/null and b/image/icon/bianji.png differ
diff --git a/image/icon/xiala.png b/image/icon/xiala.png
new file mode 100644
index 0000000000000000000000000000000000000000..8de6bdc78e8458a181c1102fbd464975c09a291c
Binary files /dev/null and b/image/icon/xiala.png differ
diff --git a/pages/consume/consume.js b/pages/consume/consume.js
index 9601676dc691dbe3664038325a457fff8d58ba70..face4efaaa79724eae502e3b1d218eb8010a6c6c 100644
--- a/pages/consume/consume.js
+++ b/pages/consume/consume.js
@@ -1,310 +1,106 @@
-// pages/consume/consume.js
+// pages/consume_test/consume_test.js
const API = require('../../utils/api.js');
const TOAST = require('../../utils/toast.js');
const AJAX = require('../../utils/ajax.js');
+const UTILS = require('../../utils/util.js')
// 引入腾讯地图
const qqMapWxUtil = require('../../utils/qqMapWxUtil.js')
+const chooseLocation = requirePlugin('chooseLocation');
Page({
+
/**
* 页面的初始数据
*/
data: {
- // 金额
- money: 0,
- isShow: false,
- //保存消费类型数据
- consumeTypeList: [],
- //服务器图片地址
- imageHost: API.api.imageHost,
- //点击的保存id
- consumeTypeId: 1,
- //要显示的图标信息
- consumeType: {},
- //地理位置
- address: '',
- // 详情地址
- addressDetail: '',
- // 省 市 区
- region: [],
- // 上传保存的图片
- imagePathList: [],
- //导航栏显示颜色
- showType: true,
- // 计算器集合
- calculatorList:[
+ current: '0', // tabs标签
+ // money: '0.00', // 金额
+ tmplIds: [API.api.bookkeepingSuccess, API.api.accountingBudget], // 模板id
+ consumeTypeList: [], //保存消费类型数据
+ imageHost: API.api.imageHost, //服务器图片地址
+ addCountTypeIcon: '/images/consume/icon/type/tianjia.png', // 添加默认类型
+ imagePathList: [], //上传保存的图片
+ imageDefault: '/images/consume/icon/add_upload.png',// 上传默认图片
+ loading: false, // 加载动画
+ showPriceModel: false, // 显示上传图片模态框
+ animationData: {}, //动画内容
+ region: ['广东省', '广州市', '海珠区'], //位置信息
+ date: UTILS.formatTime(new Date(),'mm.dd'), // 记账时间
+ start_time: '1997-02-09', // 记录开始时间
+ end_time: new Date(), // 记录结束时间
+ latitude : 0, // 经度
+ longitude : 0, // 纬度
+ /**
+ * 点击后的类型表
+ */
+ consumeType:{
+ backgroundColor: 'white', // 消费类型颜色
+ },
+ /**
+ * 临时记账数据存储
+ */
+ tempBookkeepingObj: {
+ remarks: '', // 备注
+ money: '0.00', // 金额
+ address: '', //地址信息
+ addressDetail: '', // 地址详情
+ },
+ /**
+ * 计算器集合
+ */
+ calculatorList: [
[{ "value": "7" }, { "value": "8" }, { "value": "9" }],
[{ "value": "4" }, { "value": "5" }, { "value": "6" }],
[{ "value": "1" }, { "value": "2" }, { "value": "3" }],
- [{ "value": "C" }, { "value": "0" }, { "value": "." }]],
- current: '0',
- loading: false,
- isShowImage: false, // 显示图片弹框
- isUploadFile: false, // 判断页面是跳转还是上传图片
- swiperHeight: 450, // 初始化的swiper高度
- imgheights: [], //所有图片的高度
- current: 0,//默认
- isShowContent: false, // 显示内容弹框
- remarks: '', // 备注
- tmplIds: [API.api.bookkeepingSuccess,API.api.accountingBudget], // 模板id
+ [{ "value": "C" }, { "value": "0" }, { "value": "." }]]
},
/**
* 生命周期函数--监听页面加载
*/
- onLoad: function(options) {
- console.log(`这里是onLoad`, options)
- console.log(`这里是onLoad,地址来哪里` + options.form)
- console.log(`这里是onLoad,地址来哪里` + options.address)
- console.log(`这里是onLoad,详情地址来哪里` + options.addressDetail)
- if (options.form === 'address') {
- this.setData({
- address: options.address,
- addressDetail: options.addressDetail
- })
+ onLoad: function (options) {
+ console.log("consume onLoad被触发了:",options)
+ console.log(options.form === 'edit' && options.bookkeepingid)
+ console.log(options.form === 'edit')
+ console.log(options.bookkeepingid)
+ if (options.form === 'edit' && options.bookkeepingid) {
+ // 来自修改页面
+ this.getBookkeepingObj(options.bookkeepingid)
+ this.setData({bookkeepingid:options.bookkeepingid})
} else {
// 获取到微信地理位置
this.getWxLocation()
}
- // 获取消费类型数据,默认值为0
- this.getConsumeType(0);
+ // 隐藏掉tabBar
+ TOAST.hideTabBar()
},
/**
- * 获取当前位置信息
- */
- getWxLocation() {
- console.log(`我要去获取位置信息`)
- let that = this
- wx.getLocation({
- type: 'gcj02',
- success: function(res) {
- // 调用腾讯地图显示位置信息
- that.reverseGeocoder(res.latitude, res.longitude)
- },
- })
- },
- /**
- *调用腾讯地图显示位置信息
- * latitude:纬度
- * longitude:经度
- */
- reverseGeocoder(latitude, longitude) {
- console.log(`reverseGeocoder------latitude:` + latitude + `longitude:` + longitude)
- let that = this
- let location = {}
- location.latitude = latitude;
- location.longitude = longitude;
- qqMapWxUtil.reverseGeocoder(location).then(response => {
- //当前位置信息
- that.setData({
- address: response.address,
- region: response.region,
- addressDetail: response.addressDetail
- })
- })
- },
- /**
- * 上传图片
+ * 生命周期函数--监听页面显示
*/
- uploadFile(event) {
- if (this.data.imagePathList.length > 0 && event.currentTarget.dataset.upload == undefined) {
+ onShow: function () {
+ const location = chooseLocation.getLocation(); // 如果点击确认选点按钮,则返回选点结果对象,否则返回null
+ if (location) {
+ console.log("这里是从地图来的呢????", location.address)
+ let tempBookkeepingObj = this.data.tempBookkeepingObj
+ tempBookkeepingObj.address = location.address
+ tempBookkeepingObj.addressDetail = location.addressDetail
this.setData({
- isShowImage: true
+ tempBookkeepingObj:tempBookkeepingObj,
+ latitude: location.latitude,
+ longitude: location.longitude
})
- return;
}
- let that = this
- wx.chooseImage({
- count: 2,
- sizeType: ['compressed'],
- success: function(res) {
- const tempFiles = res.tempFiles;
- let requestUrl = API.api.uploadFile + '/bookkeeping/bookkeeping'
- var imagePathListObj = that.data.imagePathList
- for (var i = 0; i < tempFiles.length; i++) {
- if (tempFiles[i].size > 1048576) {
- TOAST.showToastSuccess('图片大于1M')
- continue;
- }
- that.setData({
- loading: true
- })
- wx.uploadFile({
- url: requestUrl,
- filePath: tempFiles[i].path,
- name: 'file',
- header: {
- "Authorization": wx.getStorageSync('token')
- },
- success: function(res) {
- let resData = JSON.parse(res.data)
- if (resData.code == 200) {
- switch (imagePathListObj.length) {
- case 0:
- imagePathListObj.push(resData.data)
- break;
- default:
- imagePathListObj[1] = imagePathListObj[0]
- imagePathListObj[0] = resData.data
- break;
- }
- that.setData({
- imagePathList: imagePathListObj
- })
- TOAST.showToastSuccess('上传成功')
- }
- },
- complete() {
- that.setData({
- loading: false
- })
- }
- })
- }
- }
- })
- },
- /**
- * 上传指定图片
- * @param {*} event
- */
- uploadOneFile(event) {
- let that = this
- wx.chooseImage({
- count: 1,
- sizeType: ['original', 'compressed'],
- success: function(res) {
- const tempFiles = res.tempFiles[0];
- let requestUrl = API.api.uploadFile + '/bookkeeping/bookkeeping'
- var imagePathListObj = that.data.imagePathList
- console.log(tempFiles)
- if (tempFiles.size > 1048576) {
- TOAST.showToastSuccess('图片大于1M')
- }
- that.setData({
- loading: true
- })
- wx.uploadFile({
- url: requestUrl,
- filePath: tempFiles.path,
- name: 'file',
- header: {
- "Authorization": wx.getStorageSync('token')
- },
- success: function(res) {
- let resData = JSON.parse(res.data)
- if (resData.code == 200) {
- imagePathListObj[event.currentTarget.dataset.index] = resData.data
- that.setData({
- imagePathList: imagePathListObj
- })
- TOAST.showToastSuccess('上传成功')
- }
- },
- complete() {
- that.setData({
- loading: false
- })
- }
- })
- }
- })
- },
- /**
- * 跳转定位
- */
- gotoAddress() {
- wx.navigateTo({
- url: '../index/address/address?form=consume&address=' + this.data.address + '&addressDetail=' + this.data.addressDetail,
- })
- },
- /**
- * 支出收入类型转换
- */
- tabTap: function(event) {
- let showType = event.currentTarget.dataset.type == 1 ? false : true
- this.setData({
- showType: showType
- })
- this.getConsumeType(event.currentTarget.dataset.type)
+
},
- handleChange({
- detail
- }) {
+ handleChange({ detail }) {
+ if (detail.key === '-1') {
+ wx.reLaunch({ url: '/pages/index/index' })
+ return
+ }
this.setData({
current: detail.key
});
+ console.log("这个是我选择的分支信息:" + detail.key)
this.getConsumeType(detail.key)
- },
- getConsumeType: function(type) {
- let that = this;
- let requestUrl = API.api.consumeTypes + '/type?type=' + type;
- AJAX.getRequest(requestUrl).then(response => {
- that.setData({
- consumeTypeList: response.data,
- consumeType: response.data[0]
- })
- })
- },
- /**
- * 生命周期函数--监听页面初次渲染完成
- */
- onReady: function() {
-
- },
- submitInfo: function(e) {
- if (e.detail.formId) {
- AJAX.saveFormId(e.detail.formId)
- }
- },
- btnIcon: function(event) {
- let that = this
- console.log('你是不是点击了icon' + JSON.stringify(event.currentTarget.dataset.type))
- this.data.consumeTypeList.forEach(item => {
- if (item.id == event.currentTarget.dataset.type) {
- // 进行保存数据信息
- console.log('匹配到了。。。。。。' + item.id)
- that.setData({
- consumeType: item,
- consumeTypeId: event.currentTarget.dataset.type
- })
- return;
- }
- })
- },
- /**
- * 生命周期函数--监听页面显示
- */
- onShow: function() {},
-
- /**
- * 生命周期函数--监听页面隐藏
- */
- onHide: function() {},
-
- /**
- * 生命周期函数--监听页面卸载
- */
- onUnload: function() {},
-
- /**
- * 页面相关事件处理函数--监听用户下拉动作
- */
- onPullDownRefresh: function() {
-
- },
-
- /**
- * 页面上拉触底事件的处理函数
- */
- onReachBottom: function() {
-
- },
-
- /**
- * 用户点击右上角分享
- */
- onShareAppMessage: function() {
-
},
/**
* 添加数据
@@ -322,7 +118,7 @@ Page({
case '8':
case '9':
//常规数字
- this.addMunber(event)
+ this.addMunber(event.currentTarget.dataset.type)
break;
case '.':
// 添加小数点
@@ -332,198 +128,443 @@ Page({
// 删除
this.deleteNumber(event)
break;
- // 归零
+ // 归零
case 'C':
this.reset();
break;
+ // 再记一笔
+ case 'do_it_again':
+ this.saveBookkeeping('doItAgain');
+ break;
default:
console.log(`键盘` + event.currentTarget.dataset.type + `匹配不到对于的类型`)
}
},
- addMunber: function(event) {
+ addMunber: function (numberValue) {
+ let tempBookkeepingObj = this.data.tempBookkeepingObj
// 先判断是否有小数点
- let message = String(this.data.money);
+ let message = String(tempBookkeepingObj.money);
+ if (message === '0.00') {
+ tempBookkeepingObj.money = numberValue
+ this.setData({ tempBookkeepingObj: tempBookkeepingObj})
+ return
+ }
let index = message.lastIndexOf('.');
- if (index != -1) {
- if (message.length - index > 2) {
+ if (index != -1 && message.length - index > 2) {
return
- }
}
- if (message != 0 || index != -1) {
- message += event.currentTarget.dataset.type
- } else {
- message = event.currentTarget.dataset.type
- }
- this.setData({
- money: message
- })
+ message = message != 0 || index != -1 ? (message + numberValue) : numberValue
+ tempBookkeepingObj.money = message
+ this.setData({tempBookkeepingObj: tempBookkeepingObj})
},
- deleteNumber: function() {
- let message = this.data.money;
- if (message != 0 && message != '') {
+ deleteNumber: function () {
+ let tempBookkeepingObj = this.data.tempBookkeepingObj
+ let message = tempBookkeepingObj.money;
+ console.log('message:' + message.length)
+ if (message.length > 1 && message != 0 && message != '') {
message = message.substring(0, message.length - 1)
} else {
- message = '0'
+ message = '0.00'
}
+ tempBookkeepingObj.money = message
this.setData({
- money: message
+ tempBookkeepingObj: tempBookkeepingObj
})
},
- addSpot: function() {
- let money = this.data.money + "";
+ addSpot: function () {
+ let tempBookkeepingObj = this.data.tempBookkeepingObj
+ let money = tempBookkeepingObj.money + "";
console.log(money)
let index = money.lastIndexOf('.');
if (index != -1) {
return
}
+ tempBookkeepingObj.money = money + '.'
this.setData({
- money: money + '.'
+ tempBookkeepingObj: tempBookkeepingObj
})
},
- reset: function() {
+ reset: function () {
+ let tempBookkeepingObj = this.data.tempBookkeepingObj
+ tempBookkeepingObj.money = '0.00'
this.setData({
- money: 0,
- isShow: false,
+ tempBookkeepingObj: tempBookkeepingObj
+ })
+ },
+ /**
+ * 获取一次性订阅信息
+ */
+ requestSubscribeMessage() {
+ let that = this;
+ // 用户想接收到模板消息
+ if (wx.getStorageSync('sendMessage') == 0) {
+ that.saveBookkeeping();
+ return;
+ }
+ console.log("看下模板消息IDS:",that.data.tmplIds)
+ wx.requestSubscribeMessage({
+ tmplIds: that.data.tmplIds,
+ success(success) {
+ // 保存用户提交信息
+ that.saveWxUserSubscribe(success);
+ },
+ fail(error) {
+ console.error(`调用接口失败`);
+ },
+ complete() {
+ that.saveBookkeeping()
+ }
+ })
+ },
+ /**
+ * 保存一次性订阅信息
+ */
+ saveWxUserSubscribe(resData) {
+ let that = this
+ this.data.tmplIds.forEach(item => {
+ console.log(`resData[item]` + resData[item])
+ let requestObj = {};
+ requestObj.userId = wx.getStorageSync('userId');
+ if (resData[item] == 'accept') {
+ requestObj.type = 1;
+ } else if (resData[item] == 'reject') {
+ requestObj.type = 0;
+ } else {
+ requestObj.type = 2;
+ }
+ requestObj.subscribeId = item;
+ console.log('保存的数据来着', requestObj)
+ let requestUrl = API.api.wxusersubscribes;
+ AJAX.postRequest(requestUrl, requestObj).then(response => {
+ console.log(`保存成功`)
+ })
})
},
/**
* 保存按钮
*/
- saveBookkeeping() {
+ saveBookkeeping(params) {
let that = this
// 进行loaing
if (this.data.loading) {
return;
}
- this.setData({
- loading: true
- })
- let money = Number(this.data.money);
+ this.setData({loading: true})
+ let money = Number(this.data.tempBookkeepingObj.money);
if (money == 0) {
- TOAST.showToastSuccess('金额不能为0')
- this.setData({
- loading: false
- })
+ TOAST.showToast('保存失败:金额不能为0')
+ this.setData({loading: false})
return
}
-
+
// 进行金额转换
- money = money * 100;
- let requestObj = {};
+ let requestObj = that.data.tempBookkeepingObj;
+ requestObj.consumeTypeId = requestObj.comsumeTypeId ? requestObj.comsumeTypeId : this.data.consumeType.id;
+ requestObj.money = requestObj.money * 100;
requestObj.userId = wx.getStorageSync('userId');
- requestObj.consumeTypeId = this.data.consumeTypeId;
- requestObj.money = money;
- requestObj.address = this.data.address;
- requestObj.addressDetail = this.data.addressDetail;
requestObj.imageUrl = JSON.stringify(this.data.imagePathList);
- requestObj.remarks = this.data.remarks
console.log('保存的数据来着', requestObj)
let requestUrl = API.api.bookkeepings;
- AJAX.postRequest(requestUrl, requestObj).then(response => {
+ if (requestObj.id) {
+ // 更新操作
+ AJAX.postRequest(requestUrl,requestObj).then(Response => {
+ TOAST.showToast("更新成功")
+ })
+ } else {
+ // 保存操作
+ AJAX.postRequest(requestUrl, requestObj).then(response => {
+ TOAST.showToast("保存成功")
+ })
+ }
+ that.setData({loading: false})
+ if (params === 'doItAgain') {
+ requestObj.money = '0.00'
+ requestObj.remarks = ''
+ // 再记一笔
+ that.setData({
+ imagePathList: [],
+ tempBookkeepingObj:requestObj
+ })
+ } else {
+ wx.reLaunch({url: '/pages/index/index'})
+ }
+ },
+ /**
+ * 获取记账信息
+ */
+ getBookkeepingObj:function(bookkeepingId) {
+ let that = this;
+ let requestUrl = API.api.bookkeepings + '/' + bookkeepingId;
+ this.setData({loading: true})
+ AJAX.getRequest(requestUrl).then(response => {
+ let tempBookkeepingObj = response.data
+ // 获取记账类型
+ that.getConsumeType(tempBookkeepingObj.consumeType.type,tempBookkeepingObj.consumeType)
+ // 获取经纬度
+ that.geocoder(tempBookkeepingObj.address)
+ // 进行金额转换
+ tempBookkeepingObj.money = tempBookkeepingObj.money / 100
+ that.setData({
+ loading: false,
+ tempBookkeepingObj: tempBookkeepingObj,
+ current: response.data.consumeType.type + "",
+ imagePathList: tempBookkeepingObj.imageUrl ? JSON.parse(tempBookkeepingObj.imageUrl) : []
+ })
+ })
+ },
+ /**
+ * 开启动画
+ */
+ clickPup: function () {
+ // 用that取代this,防止不必要的情况发生
+ var that = this;
+ // 创建一个动画实例
+ var animation = wx.createAnimation({
+ // 动画持续时间
+ duration: 100,
+ // 定义动画效果,当前是匀速
+ timingFunction: 'linear'
+ })
+ // 将该变量赋值给当前动画
+ that.animation = animation
+ // 先在y轴偏移,然后用step()完成一个动画
+ animation.translateY(200).step()
+ // 用setData改变当前动画
+ that.setData({
+ // 通过export()方法导出数据
+ animationData: animation.export(),
+ // 改变view里面的Wx:if
+ showPriceModel: true
+ })
+ // 设置setTimeout来改变y轴偏移量,实现有感觉的滑动
+ setTimeout(function () {
+ animation.translateY(0).step()
that.setData({
- loading: false
+ animationData: animation.export()
})
- wx.switchTab({
- url: '/pages/index/index'
+ }, 200)
+ },
+ /**
+ * 关闭动画
+ */
+ hideModal: function (e) {
+ var that = this;
+ var animation = wx.createAnimation({
+ duration: 1000,
+ timingFunction: 'linear'
+ })
+ that.animation = animation
+ animation.translateY(200).step()
+ that.setData({
+ animationData: animation.export()
+
+ })
+ setTimeout(function () {
+ animation.translateY(0).step()
+ that.setData({
+ animationData: animation.export(),
+ showPriceModel: false
})
+ }, 200)
+ },
+ /**
+ * 上传图片
+ */
+ uploadFile(event) {
+ let that = this
+ wx.chooseImage({
+ count: 2,
+ sizeType: ['compressed'],
+ success: function (res) {
+ const tempFiles = res.tempFiles;
+ let requestUrl = API.api.uploadFile + '/bookkeeping/wx_' + wx.getStorageSync('userId');
+ var imagePathListObj = that.data.imagePathList
+ for (var i = 0; i < tempFiles.length; i++) {
+ if (tempFiles[i].size > 1048576) {
+ TOAST.showToast('上传图片失败:图片大于1M')
+ continue;
+ }
+ that.setData({
+ loading: true
+ })
+ wx.uploadFile({
+ url: requestUrl,
+ filePath: tempFiles[i].path,
+ name: 'file',
+ header: {
+ "Authorization": wx.getStorageSync('token')
+ },
+ success: function (res) {
+ console.log("获取到上传信息:", res.data)
+ let resData = JSON.parse(res.data)
+
+ switch (imagePathListObj.length) {
+ case 0:
+ imagePathListObj.push(resData.file)
+ break;
+ default:
+ imagePathListObj[1] = imagePathListObj[0]
+ imagePathListObj[0] = resData.file
+ break;
+ }
+ that.setData({
+ imagePathList: imagePathListObj
+ })
+ TOAST.showToast('上传成功')
+ },
+ complete() {
+ that.setData({loading: false})
+ }
+ })
+ }
+ }
})
},
- hideModel() {
+ /**
+ * 选择地理位置
+ */
+ bindRegionChange: function (e) {
+ console.log("我进来了")
+ let that = this
+ const key = 'GSUBZ-UACKQ-NXJ5Z-GL47V-CIVU2-7YB4X'; //使用在腾讯位置服务申请的key
+ const referer = '优享记账'; //调用插件的app的名称
+ const location = JSON.stringify({
+ latitude: that.data.latitude,
+ longitude: that.data.longitude
+ });
+ console.log("准备跳转到地图那边过去了:" , location)
+ // POI分类关键词
+ // const category = '生活服务,娱乐休闲';
+ wx.navigateTo({
+ url: `plugin://chooseLocation/index?key=${key}&referer=${referer}&location=${location}`
+ });
+ },
+ /**
+ * 选择消费时间
+ */
+ bindDateChange: function (e) {
+ console.log('picker发送选择改变,携带值为', e.detail.value)
+ let dateTmp = e.detail.value.split('-')
this.setData({
- isShowImage: false,
- isShowContent:false
+ date: dateTmp[1] + '.' + dateTmp[2]
})
},
+ /**
+ * 记录备注信息
+ */
+ bindKeyInput: function (e) {
+ let tempBookkeepingObj = this.data.tempBookkeepingObj
+ tempBookkeepingObj.remarks = e.detail.value
+ this.setData({
+ tempBookkeepingObj:tempBookkeepingObj
+ })
+ },
+ /**
+ * 获取当前位置信息
+ */
+ getWxLocation() {
+ let that = this
+ wx.getLocation({
+ type: 'gcj02',
+ altitude: 'true',
+ isHighAccuracy: true,
+ success: function (res) {
+ console.log("我的坐标位置" + JSON.stringify(res))
+ // 调用腾讯地图显示位置信息
+ that.reverseGeocoder(res.latitude, res.longitude)
+ },
+ })
+ },
+ /**
+ *调用腾讯地图显示位置信息
+ * latitude:纬度
+ * longitude:经度
+ */
+ reverseGeocoder(latitude, longitude) {
+ qqMapWxUtil.reverseGeocoder(latitude, longitude).then(response => {
+ let tempBookkeepingObj = this.data.tempBookkeepingObj
+ tempBookkeepingObj.address = response.address
+ //当前位置信息
+ this.setData({
+ tempBookkeepingObj:tempBookkeepingObj,
+ region: response.region,
+ latitude: latitude,
+ longitude: longitude
+ })
+ })
+ },
+ /**
+ * 点击tab触发操作
+ */
onTabItemTap(item) {
this.setData({
- money: 0,
- addorDel: '+',
- isShow: false,
+ money: '0.00',
imagePathList: [],
- current: 0,
- isShowImage: false,
- isShowContent:false,
- loading:false
+ current: '0',
+ loading: false,
+ showPriceModel:false
})
// 获取消费类型数据,默认值为0
this.getConsumeType(0);
},
- // 设置高度
- imageLoad: function(e) { //获取图片真实宽度
- var imgwidth = e.detail.width;
- var imgheight = e.detail.height;
- //宽高比
- var ratio = imgwidth / imgheight;
- console.log(imgwidth, imgheight)
- //计算的高度值
- var viewHeight = 750 / ratio;
- imgheight = viewHeight;
- var imgheights = this.data.imgheights;
- //把每一张图片的对应的高度记录到数组里
- imgheights[e.target.dataset.index] = imgheight;
- this.setData({
- imgheights: imgheights
+
+ /**
+ * 获取消费类型
+ * type:类型
+ * editConsumeType:修改传过来的参数
+ */
+ getConsumeType: function (type,editConsumeType) {
+ let that = this;
+ let params = {};
+ params.type = Number(type);
+ params.userId = wx.getStorageSync('userId');
+ let requestUrl = API.api.consumeTypes + '/type';
+ AJAX.getRequest(requestUrl, params).then(response => {
+ that.setData({
+ consumeTypeList: response.data,
+ consumeType: editConsumeType !== undefined ? editConsumeType : response.data[0]
+ })
})
},
- bindchange: function(e) {
- this.setData({
- current: e.detail.current
+ /**
+ * 点击icon
+ */
+ onClickIcon: function (event) {
+ console.log("这里点击获取到value值:", event.currentTarget.dataset.type)
+ let that = this;
+ this.data.consumeTypeList.forEach(item => {
+ if (item.id == event.currentTarget.dataset.type) {
+ // 进行保存数据信息
+ console.log('匹配到了。。。。。。' + item.id)
+ that.setData({
+ consumeType: item
+ })
+ return;
+ }
})
},
- showContent() {
- this.setData({isShowContent: true})
- },
/**
- * 填写备注
+ * 添加icon
*/
- textareaRemark:function(e) {
- console.log(`获取到数据了`,e.detail.value)
- this.setData({ remarks:e.detail.value })
+ addCountTypeIcon:function() {
+ TOAST.showToast("该功能暂未上线")
},
/**
- * 获取一次性订阅信息
+ * 调用腾讯地图进行定位
+ * address:地址信息
*/
- requestSubscribeMessage() {
- let that = this;
- // 用户想接收到模板消息
- if(wx.getStorageSync('sendMessage') == 0) {
- that.saveBookkeeping();
+ geocoder: function (address) {
+ if (!address) {
+ console.log(`地址为空,重新调用接口信息` + address)
+ this.getWxLocation()
return;
}
- console.log(that.data.tmplIds)
- wx.requestSubscribeMessage({
- tmplIds: that.data.tmplIds,
- success(success) {
- // 保存用户提交信息
- that.saveWxUserSubscribe(success);
- },
- fail(error) {
- console.error(`调用接口失败`);
- },
- complete() {
- that.saveBookkeeping()
- }
- })
- },
- saveWxUserSubscribe(resData) {
- let that = this
- this.data.tmplIds.forEach(item => {
- console.log(`resData[item]` + resData[item])
- let requestObj = {};
- requestObj.userId = wx.getStorageSync('userId');
- if(resData[item] == 'accept') {
- requestObj.type = 1;
- } else if (resData[item] == 'reject') {
- requestObj.type = 0;
- } else {
- requestObj.type = 2;
- }
- requestObj.subscribeId = item;
- console.log('保存的数据来着', requestObj)
- let requestUrl = API.api.wxusersubscribes;
- AJAX.postRequest(requestUrl, requestObj).then(response => {
- console.log(`保存成功`)
+
+ qqMapWxUtil.geocoder(address).then(response => {
+ this.setData({
+ latitude : response.lat, // 经度
+ longitude :response.lng // 纬度
})
})
- }
+ },
})
\ No newline at end of file
diff --git a/pages/consume/consume.json b/pages/consume/consume.json
index 7885d684465f8e8ee9cd7f521cf66dc21ee1e44d..393590aec94e0c60c48ca8a68f49cd9e4bf27ced 100644
--- a/pages/consume/consume.json
+++ b/pages/consume/consume.json
@@ -1,20 +1,21 @@
{
- "navigationBarBackgroundColor": "#1E95F1",
- "navigationBarTextStyle": "white",
- "navigationBarTitleText": "消费记账",
- "backgroundColor": "#ffffff",
- "backgroundTextStyle": "light",
- "usingComponents": {
- "i-tabs": "../../template/dist/tabs/index",
- "i-tab": "../../template/dist/tab/index",
- "i-row": "../../template/dist/row/index",
- "i-col": "../../template/dist/col/index",
- "i-avatar": "../../template/dist/avatar/index",
- "i-button": "../../template/dist/button/index",
- "i-grid": "../../template/dist/grid/index",
- "i-grid-item": "../../template/dist/grid-item/index",
- "i-grid-icon": "../../template/dist/grid-icon/index",
- "i-grid-label": "../../template/dist/grid-label/index",
- "i-spin": "../../template/dist/spin/index"
- }
+ "navigationBarBackgroundColor": "#1E95F1",
+ "navigationBarTextStyle": "white",
+ "navigationBarTitleText": "消费记账",
+ "backgroundColor": "#ffffff",
+ "backgroundTextStyle": "light",
+ "usingComponents": {
+ "i-tabs": "../../template/dist/tabs/index",
+ "i-tab": "../../template/dist/tab/index",
+ "i-row": "../../template/dist/row/index",
+ "i-col": "../../template/dist/col/index",
+ "i-avatar": "../../template/dist/avatar/index",
+ "i-button": "../../template/dist/button/index",
+ "i-grid": "../../template/dist/grid/index",
+ "i-grid-item": "../../template/dist/grid-item/index",
+ "i-grid-icon": "../../template/dist/grid-icon/index",
+ "i-grid-label": "../../template/dist/grid-label/index",
+ "i-spin": "../../template/dist/spin/index",
+ "i-input": "../../template/dist/input/index"
+ }
}
\ No newline at end of file
diff --git a/pages/consume/consume.wxml b/pages/consume/consume.wxml
index 63866c21f77447cd7ba14062d3033d6aa3c0fe0c..a09206ce2654e25b233116fe8f6d0c7b19932b91 100644
--- a/pages/consume/consume.wxml
+++ b/pages/consume/consume.wxml
@@ -1,86 +1,98 @@
- 加载中
+ 加载中
-
-
+
+
+
-
-
-
-
-
- {{consumeType.name}}
-
- {{money}} 元
-
+
+
+ {{consumeType.name}}
+ {{tempBookkeepingObj.money}}元
-
-
-
-
-
- {{item.name}}
-
-
-
-
+
+
+
+
+
+ {{item.name}}
+
+
+
+ 添加
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 备注
-
+
+
+
+ {{date}}
+
+
+
+
+
+
+
+
+
+ 现金
+
+
+
+
+ 我(待上线)
+
+
+
+
+ 照片({{imagePathList.length}})
+
+
+ 照片
+
+
+
+
+
+ 位置
+
+
+
+
+
+
+
+
+
+
+
+
+ 再记一笔
+
+ 保存
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 上传图片
+
+
+
+
+
+ 最多可添加2张图片
+
+
+
+
+
+
+
+
+ 完成
-
\ No newline at end of file
diff --git a/pages/consume/consume.wxss b/pages/consume/consume.wxss
index 4fbfed3b8603e6e520a3016117edb1b9b2c3dc38..ec6f06e4c50f45c80a715e3f1a43070cb6f31f39 100644
--- a/pages/consume/consume.wxss
+++ b/pages/consume/consume.wxss
@@ -1,196 +1,288 @@
-/* pages/consume/consume.wxss */
-page {
- background-color: #FFFFFF
-}
-/* 表头 */
-.table {
- border: 0px solid #FFFFFF;
-}
-.tr {
+/* pages/consume_test/consume_test.wxss */
+
+.bookkeeping {
display: flex;
+ position: relative;
+ height: 104rpx;
width: 100%;
- justify-content: center;
- height: 2.5rem;
- align-items: center;
+ margin-top: 4rpx;
}
-.th {
- width: 50%;
- justify-content: center;
- background: #1E95F1;
- color: #000000;
+
+/* 分类 */
+
+.consume_type {
+ text-align: center;
+ padding: 25rpx 10rpx;
+}
+
+.bookkeeping_value {
+ padding: 28rpx 28rpx;
+ font-family: 'PingFang SC';
+ font-size: 36rpx;
+ font-weight: bold;
+ color: #333;
+}
+
+.bookkeeping_data {
+ font-family: 'DIN-Bold';
+ font-weight: bold;
+ font-size: 44rpx;
+ color: #ff2121;
+ position: absolute;
+ right: 15rpx;
+ margin: 28rpx 0rpx;
display: flex;
- height: 2.5rem;
- align-items: center;
- /* border-right: 1rpx solid #aae6f9 */
- /* border: 1rpx solid rgba(49, 48, 48, 0.322) */
}
-.th_show {
- background: #FFFFFF
+
+.bookkeeping_data view {
+ font-size: 30rpx;
+ margin: 11rpx 5rpx;
}
+/* 计算器 */
+
+.section {
+ margin: 10rpx 10rpx;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+}
-.consume-type-icon {
+.flex-wrp_one {
display: flex;
flex-direction: row;
- flex-wrap:wrap;
- position: relative;
- border-bottom:1rpx solid #ccc;
}
-.consume-type-icon .consume-icon {
- width: 8%;
- padding: 21rpx 40rpx;
-}
-.consume-type-icon span {
+
+.section_btn {
display: flex;
- align-items: center;
- padding: 0rpx;
- font-size: 35rpx;
+ flex-direction: row;
+ height: 80rpx;
+ border: 2rpx solid #eee;
+ background-color: #f7f7f7;
}
-.consume-type {
+.section_btn image {
+ width: 60rpx;
+ height: 60rpx;
+ padding: 10rpx 5rpx;
+}
+
+.section_btn_left {
+ flex: 8;
+}
+
+.section_btn_right {
+ flex: 1;
+}
+
+.container {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+}
+
+.container_function {
+ /* display: flex;
+ flex-direction: row; */
+ background-color: #f7f7f7;
+ height: 70rpx;
+}
+
+.container_function_one {
+ /* display: flex; *//* flex-direction: row; */
+ background-color: rgb(255, 255, 255);
+ border-top: 1rpx solid #f7f7f7;
+ line-height: 60rpx;
+ font-size: 23rpx;
+ height: 70rpx;
+ /* padding: 10rpx 10rpx; */
+}
+
+.container_calculator {
display: flex;
flex-direction: row;
- flex-wrap:wrap;
- position: relative;
+ height: 400rpx;
}
-.consume-type .consume-icon {
- width: 16%;
- padding: 20rpx 15rpx;
- margin-top: 5rpx;
-
+
+.left {
+ flex: 3;
+ height: 100%;
}
-.consume-icon image {
- width: 100%;
+.right {
+ flex: 1;
height: 100%;
}
-.consume-type center {
+
+.tr {
+ width: 100%;
+ height: 25%;
display: flex;
- padding: 0rpx 15rpx;
+ align-items: center;
+ justify-content: center;
+}
+
+.tr button {
+ height: 100%;
+ background-color: #fff;
+ flex: 1;
+ vertical-align: middle;
text-align: center;
+ border: 1px solid #f7f7f7;
}
-.consume-money {
- position: absolute;
- right: 28rpx;
- margin-top: 28rpx;
+
+.tr picker {
+ height: 100%;
+ flex: 1;
+ vertical-align: middle;
+ text-align: center;
+ border: 0rpx;
+ /* border:1px solid #fff; */
+ border-right: 1rpx solid black;
+ font-size: 23rpx;
+ padding: 5rpx;
+ margin-top: 17rpx;
}
+.tr view {
+ height: 100%;
+ flex: 1;
+ vertical-align: middle;
+ text-align: center;
+ border: 0rpx;
+ border-right: 1rpx solid black;
+ font-size: 23rpx;
+ padding: 5rpx;
+ margin-top: 17rpx;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+#tr_icon{
+ width: 16rpx;
+ height: 16rpx;
+}
-/* 计算器 */
-.section {
- margin: 10rpx 10rpx;
- position: absolute;
- bottom: 0;
- left: 0;
+.remove {
width: 100%;
+ height: 25%;
+ vertical-align: middle;
+ background-color: #fff;
+ text-align: center;
+ background-size: 30% 50%;
+ background-image: url(https://be.yangyoki.top/images/consume/icon/delete.png);
+ background-repeat: no-repeat;
+ background-position: center;
}
-.flex-wrp_one {
- display: flex;
- flex-direction: row;
+
+.do_it_again {
+ width: 100%;
+ height: 25%;
+ vertical-align: middle;
+ background-color: #fff;
+ text-align: center;
+ background-size: 30% 50%;
+ background-image: url(https://be.yangyoki.top/images/consume/icon/jilu.png);
+ background-repeat: no-repeat;
+ background-position: center;
}
+
.fix-item {
- background-color: #FFFFFF;
width: 100%;
- height: 75%;
+ height: 25%;
+ vertical-align: middle;
+ background-color: #fff;
+ text-align: center;
+ background-size: 30% 50%;
+ background-image: url(https://be.yangyoki.top/images/consume/icon/save_bookkeeping.png);
+ background-repeat: no-repeat;
+ background-position: center;
+}
+
+.save_value {
+ text-align: center;
+ font-size: 20rpx;
+}
+
+.do_it_again_value {
+ text-align: center;
+ font-size: 16rpx;
+}
+
+.col-class input {
display: flex;
- /*使子项目水平居中 */
- justify-content: center;
- /*使子项目垂直居中*/
align-items: center;
+ padding: 10rpx 20rpx;
}
-.section_btn {
+
+.col-class picker {
display: flex;
- flex-direction: row;
- height: 80rpx;
- border: 2rpx solid #eeeeee;
+ justify-content: center;
+ align-items: center;
}
-.section_btn image {
- width: 60rpx;
- height: 60rpx;
- padding: 10rpx 5rpx;
+
+.col-class image {
+ width: 56rpx;
+ height: 56rpx;
}
-.section_btn_left{
- flex:8;
-}
-.section_btn_right{
- flex:2;
-}
-.container{
- position: absolute;
- bottom: 0;
- left: 0;
- width: 100%;
-}
-.container1{
- display:flex;
- flex-direction: row;
- height:400rpx;
-}
-.left{
- flex: 3;
- height: 100%;
-}
-.right{
- flex: 1;
- height: 100%;
-}
-.tr{
- width:100%;
- height:25%;
- display:flex;
- align-items: center;
- justify-content: center;
-}
-.tr button{
- height:100%;
- background-color:#FFFFFF;
- flex:1;
- vertical-align:middle;
- text-align:center;
- border:0rpx;
- /* border:1px solid #fff; */
-}
-.remove{
- width:100%;
- height:25%;
- vertical-align:middle;
- background-color: #FFFFFF;
- text-align: center;
- background-size: 30% 50%;
- background-image:url(https://be.yangyoki.top/images/consume/icon/delete.png);
- background-repeat: no-repeat;
- background-position: center;
-
-}
-
-
-.model {
+
+.type_icon {
+ height: 100rpx;
+ width: 100rpx;
+ margin-bottom: 40rpx;
+}
+
+.type_icon view {
+ font-size: 25rpx;
+ margin-top: 15rpx;
+}
+
+/* 模态框 */
+
+.choose {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
background-color: rgba(0, 0, 0, 0.5);
- z-index: 0;
- color: #333;
}
-.ruleModel {
- width: 600rpx;
- background-color: #fff;
- margin: 120rpx 75rpx;
- border-radius: 20rpx;
- padding: 20rpx 15rpx;
+.choose_value {
+ height: 400rpx;
+ width: 100%;
+ position: fixed;
+ bottom: 0;
+ background-color: white;
}
-.close {
- width: 80rpx;
- height: 80rpx;
- position: absolute;
- top: 80rpx;
- right: 20rpx;
+.upload_value {
+ text-align: center;
+ padding: 10rpx;
+ font-size: 30rpx;
+}
+
+.upload_data {
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+}
+
+.upload_show {
+ width: 160rpx;
+ height: 160rpx;
+ margin: 30rpx 5rpx;
}
-.swiper-image {
+
+.upload_show view {
+ font-size: 16rpx;
+ display: flex;
+ justify-content: center;
+}
+
+.upload_show image {
width: 100%;
height: 100%;
-}
\ No newline at end of file
+}
diff --git a/pages/consumeOld/consume.js b/pages/consumeOld/consume.js
new file mode 100644
index 0000000000000000000000000000000000000000..d4102876c72f8afb707eb5d9c576d68cb1d9bdba
--- /dev/null
+++ b/pages/consumeOld/consume.js
@@ -0,0 +1,500 @@
+// pages/consume/consume.js
+const API = require('../../utils/api.js');
+const TOAST = require('../../utils/toast.js');
+const AJAX = require('../../utils/ajax.js');
+// 引入腾讯地图
+const qqMapWxUtil = require('../../utils/qqMapWxUtil.js')
+Page({
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ // 金额
+ money: 0,
+ isShow: false,
+ //保存消费类型数据
+ consumeTypeList: [],
+ //服务器图片地址
+ imageHost: API.api.imageHost,
+ //点击的保存id
+ consumeTypeId: 1,
+ //要显示的图标信息
+ consumeType: {},
+ //地理位置
+ address: '',
+ // 详情地址
+ addressDetail: '',
+ // 省 市 区
+ region: [],
+ // 上传保存的图片
+ imagePathList: [],
+ // 计算器集合
+ calculatorList: [
+ [{ "value": "7" }, { "value": "8" }, { "value": "9" }],
+ [{ "value": "4" }, { "value": "5" }, { "value": "6" }],
+ [{ "value": "1" }, { "value": "2" }, { "value": "3" }],
+ [{ "value": "C" }, { "value": "0" }, { "value": "." }]],
+ current: '0',
+ loading: false,
+ isShowImage: false, // 显示图片弹框
+ isUploadFile: false, // 判断页面是跳转还是上传图片
+ swiperHeight: 450, // 初始化的swiper高度
+ imgheights: [], //所有图片的高度
+ isShowContent: false, // 显示内容弹框
+ remarks: '', // 备注
+ tmplIds: [API.api.bookkeepingSuccess, API.api.accountingBudget], // 模板id
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ // 获取到微信地理位置
+ this.getWxLocation()
+ // 获取消费类型数据,默认值为0
+ // this.getConsumeType(0);
+ },
+ /**
+ * 获取当前位置信息
+ */
+ getWxLocation() {
+ let that = this
+ wx.getLocation({
+ type: 'gcj02',
+ altitude: 'true',
+ isHighAccuracy: true,
+ success: function (res) {
+ console.log("我的坐标位置" + JSON.stringify(res))
+ // 调用腾讯地图显示位置信息
+ that.reverseGeocoder(res.latitude, res.longitude)
+ },
+ })
+ },
+ /**
+ *调用腾讯地图显示位置信息
+ * latitude:纬度
+ * longitude:经度
+ */
+ reverseGeocoder(latitude, longitude) {
+ qqMapWxUtil.reverseGeocoder(latitude, longitude).then(response => {
+ //当前位置信息
+ this.setData({
+ address: response.address,
+ region: response.region,
+ addressDetail: response.addressDetail
+ })
+ })
+ },
+ /**
+ * 上传图片
+ */
+ uploadFile(event) {
+ if (this.data.imagePathList.length > 0 && event.currentTarget.dataset.upload == undefined) {
+ this.setData({
+ isShowImage: true
+ })
+ return;
+ }
+ let that = this
+ wx.chooseImage({
+ count: 2,
+ sizeType: ['compressed'],
+ success: function (res) {
+ const tempFiles = res.tempFiles;
+ let requestUrl = API.api.uploadFile + '/bookkeeping/bookkeeping'
+ var imagePathListObj = that.data.imagePathList
+ for (var i = 0; i < tempFiles.length; i++) {
+ if (tempFiles[i].size > 1048576) {
+ TOAST.showToast('上传图片失败:图片大于1M')
+ continue;
+ }
+ that.setData({
+ loading: true
+ })
+ wx.uploadFile({
+ url: requestUrl,
+ filePath: tempFiles[i].path,
+ name: 'file',
+ header: {
+ "Authorization": wx.getStorageSync('token')
+ },
+ success: function (res) {
+ let resData = JSON.parse(res.data)
+ if (resData.code == 200) {
+ switch (imagePathListObj.length) {
+ case 0:
+ imagePathListObj.push(resData.data)
+ break;
+ default:
+ imagePathListObj[1] = imagePathListObj[0]
+ imagePathListObj[0] = resData.data
+ break;
+ }
+ that.setData({
+ imagePathList: imagePathListObj
+ })
+ TOAST.showToast('上传成功')
+ }
+ },
+ complete() {
+ that.setData({
+ loading: false
+ })
+ }
+ })
+ }
+ }
+ })
+ },
+ /**
+ * 上传指定图片
+ * @param {*} event
+ */
+ uploadOneFile(event) {
+ let that = this
+ wx.chooseImage({
+ count: 1,
+ sizeType: ['original', 'compressed'],
+ success: function (res) {
+ const tempFiles = res.tempFiles[0];
+ let requestUrl = API.api.uploadFile + '/bookkeeping/bookkeeping'
+ var imagePathListObj = that.data.imagePathList
+ console.log(tempFiles)
+ if (tempFiles.size > 1048576) {
+ TOAST.showToast('上传图片失败:图片大于1M')
+ }
+ that.setData({
+ loading: true
+ })
+ wx.uploadFile({
+ url: requestUrl,
+ filePath: tempFiles.path,
+ name: 'file',
+ header: {
+ "Authorization": wx.getStorageSync('token')
+ },
+ success: function (res) {
+ let resData = JSON.parse(res.data)
+ if (resData.code == 200) {
+ imagePathListObj[event.currentTarget.dataset.index] = resData.data
+ that.setData({
+ imagePathList: imagePathListObj
+ })
+ TOAST.showToast('上传成功')
+ }
+ },
+ complete() {
+ that.setData({
+ loading: false
+ })
+ }
+ })
+ }
+ })
+ },
+
+ handleChange({detail}) {
+ this.setData({
+ current: detail.key
+ });
+ this.getConsumeType(detail.key)
+ },
+ /**
+ * 获取消费类型
+ */
+ getConsumeType: function (type) {
+ let that = this;
+ let params = {};
+ params.type = Number(type);
+ params.userId = wx.getStorageSync('userId');
+ let requestUrl = API.api.consumeTypes + '/type';
+ AJAX.getRequest(requestUrl,params).then(response => {
+ that.setData({
+ consumeTypeList: response.data,
+ consumeType: response.data[0],
+ consumeTypeId:response.data[0].id
+ })
+ })
+ },
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+ submitInfo: function (e) {
+ if (e.detail.formId) {
+ AJAX.saveFormId(e.detail.formId)
+ }
+ },
+ btnIcon: function (event) {
+ let that = this
+ console.log('你是不是点击了icon' + JSON.stringify(event.currentTarget.dataset.type))
+ this.data.consumeTypeList.forEach(item => {
+ if (item.id == event.currentTarget.dataset.type) {
+ // 进行保存数据信息
+ console.log('匹配到了。。。。。。' + item.id)
+ that.setData({
+ consumeType: item,
+ consumeTypeId: event.currentTarget.dataset.type
+ })
+ return;
+ }
+ })
+ },
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () { },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () { },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () { },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+
+ },
+ /**
+ * 添加数据
+ */
+ calculationType(event) {
+ switch (event.currentTarget.dataset.type) {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ //常规数字
+ this.addMunber(event)
+ break;
+ case '.':
+ // 添加小数点
+ this.addSpot()
+ break;
+ case 'DEL':
+ // 删除
+ this.deleteNumber(event)
+ break;
+ // 归零
+ case 'C':
+ this.reset();
+ break;
+ default:
+ console.log(`键盘` + event.currentTarget.dataset.type + `匹配不到对于的类型`)
+ }
+ },
+ addMunber: function (event) {
+ // 先判断是否有小数点
+ let message = String(this.data.money);
+ let index = message.lastIndexOf('.');
+ if (index != -1) {
+ if (message.length - index > 2) {
+ return
+ }
+ }
+ if (message != 0 || index != -1) {
+ message += event.currentTarget.dataset.type
+ } else {
+ message = event.currentTarget.dataset.type
+ }
+ this.setData({
+ money: message
+ })
+ },
+ deleteNumber: function () {
+ let message = this.data.money;
+ if (message != 0 && message != '') {
+ message = message.substring(0, message.length - 1)
+ } else {
+ message = '0'
+ }
+ this.setData({
+ money: message
+ })
+ },
+ addSpot: function () {
+ let money = this.data.money + "";
+ console.log(money)
+ let index = money.lastIndexOf('.');
+ if (index != -1) {
+ return
+ }
+ this.setData({
+ money: money + '.'
+ })
+ },
+ reset: function () {
+ this.setData({
+ money: 0,
+ isShow: false,
+ })
+ },
+ /**
+ * 保存按钮
+ */
+ saveBookkeeping() {
+ let that = this
+ // 进行loaing
+ if (this.data.loading) {
+ return;
+ }
+ this.setData({
+ loading: true
+ })
+ let money = Number(this.data.money);
+ if (money == 0) {
+ TOAST.showToast('保存失败:金额不能为0')
+ this.setData({
+ loading: false
+ })
+ return
+ }
+
+ // 进行金额转换
+ money = money * 100;
+ let requestObj = {};
+ requestObj.userId = wx.getStorageSync('userId');
+ requestObj.consumeTypeId = this.data.consumeTypeId;
+ requestObj.money = money;
+ requestObj.address = this.data.address;
+ requestObj.addressDetail = this.data.addressDetail;
+ requestObj.imageUrl = JSON.stringify(this.data.imagePathList);
+ requestObj.remarks = this.data.remarks
+ console.log('保存的数据来着', requestObj)
+ let requestUrl = API.api.bookkeepings;
+ AJAX.postRequest(requestUrl, requestObj).then(response => {
+ that.setData({
+ loading: false
+ })
+ wx.switchTab({
+ url: '/pages/index/index'
+ })
+ })
+ },
+ hideModel() {
+ this.setData({
+ isShowImage: false,
+ isShowContent: false
+ })
+ },
+ onTabItemTap(item) {
+ this.setData({
+ money: 0,
+ addorDel: '+',
+ isShow: false,
+ imagePathList: [],
+ current: 0,
+ isShowImage: false,
+ isShowContent: false,
+ loading: false
+ })
+ // 获取消费类型数据,默认值为0
+ this.getConsumeType(0);
+ },
+ // 设置高度
+ imageLoad: function (e) { //获取图片真实宽度
+ var imgwidth = e.detail.width;
+ var imgheight = e.detail.height;
+ //宽高比
+ var ratio = imgwidth / imgheight;
+ console.log(imgwidth, imgheight)
+ //计算的高度值
+ var viewHeight = 750 / ratio;
+ imgheight = viewHeight;
+ var imgheights = this.data.imgheights;
+ //把每一张图片的对应的高度记录到数组里
+ imgheights[e.target.dataset.index] = imgheight;
+ this.setData({
+ imgheights: imgheights
+ })
+ },
+ bindchange: function (e) {
+ this.setData({
+ current: e.detail.current
+ })
+ },
+ showContent() {
+ this.setData({ isShowContent: true })
+ },
+ /**
+ * 填写备注
+ */
+ textareaRemark: function (e) {
+ console.log(`获取到数据了`, e.detail.value)
+ this.setData({ remarks: e.detail.value })
+ },
+ /**
+ * 获取一次性订阅信息
+ */
+ requestSubscribeMessage() {
+ let that = this;
+ // 用户想接收到模板消息
+ if (wx.getStorageSync('sendMessage') == 0) {
+ that.saveBookkeeping();
+ return;
+ }
+ console.log(that.data.tmplIds)
+ wx.requestSubscribeMessage({
+ tmplIds: that.data.tmplIds,
+ success(success) {
+ // 保存用户提交信息
+ that.saveWxUserSubscribe(success);
+ },
+ fail(error) {
+ console.error(`调用接口失败`);
+ },
+ complete() {
+ that.saveBookkeeping()
+ }
+ })
+ },
+ saveWxUserSubscribe(resData) {
+ let that = this
+ this.data.tmplIds.forEach(item => {
+ console.log(`resData[item]` + resData[item])
+ let requestObj = {};
+ requestObj.userId = wx.getStorageSync('userId');
+ if (resData[item] == 'accept') {
+ requestObj.type = 1;
+ } else if (resData[item] == 'reject') {
+ requestObj.type = 0;
+ } else {
+ requestObj.type = 2;
+ }
+ requestObj.subscribeId = item;
+ console.log('保存的数据来着', requestObj)
+ let requestUrl = API.api.wxusersubscribes;
+ AJAX.postRequest(requestUrl, requestObj).then(response => {
+ console.log(`保存成功`)
+ })
+ })
+ }
+})
\ No newline at end of file
diff --git a/pages/consumeOld/consume.json b/pages/consumeOld/consume.json
new file mode 100644
index 0000000000000000000000000000000000000000..7885d684465f8e8ee9cd7f521cf66dc21ee1e44d
--- /dev/null
+++ b/pages/consumeOld/consume.json
@@ -0,0 +1,20 @@
+{
+ "navigationBarBackgroundColor": "#1E95F1",
+ "navigationBarTextStyle": "white",
+ "navigationBarTitleText": "消费记账",
+ "backgroundColor": "#ffffff",
+ "backgroundTextStyle": "light",
+ "usingComponents": {
+ "i-tabs": "../../template/dist/tabs/index",
+ "i-tab": "../../template/dist/tab/index",
+ "i-row": "../../template/dist/row/index",
+ "i-col": "../../template/dist/col/index",
+ "i-avatar": "../../template/dist/avatar/index",
+ "i-button": "../../template/dist/button/index",
+ "i-grid": "../../template/dist/grid/index",
+ "i-grid-item": "../../template/dist/grid-item/index",
+ "i-grid-icon": "../../template/dist/grid-icon/index",
+ "i-grid-label": "../../template/dist/grid-label/index",
+ "i-spin": "../../template/dist/spin/index"
+ }
+}
\ No newline at end of file
diff --git a/pages/consumeOld/consume.wxml b/pages/consumeOld/consume.wxml
new file mode 100644
index 0000000000000000000000000000000000000000..11cf38e5d3ab0b1532fda9e8368f86acc3927ff2
--- /dev/null
+++ b/pages/consumeOld/consume.wxml
@@ -0,0 +1,86 @@
+
+
+ 加载中
+
+
+
+
+
+
+
+
+
+
+
+ {{consumeType.name}}
+
+ {{money}} 元
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 备注
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 上传图片
+
+
+
\ No newline at end of file
diff --git a/pages/consumeOld/consume.wxss b/pages/consumeOld/consume.wxss
new file mode 100644
index 0000000000000000000000000000000000000000..a89c4248883507c66400ca01b57619aebb3ef3a9
--- /dev/null
+++ b/pages/consumeOld/consume.wxss
@@ -0,0 +1,196 @@
+/* pages/consume/consume.wxss */
+page {
+ background-color: #FFFFFF
+}
+/* 表头 */
+.table {
+ border: 0px solid #FFFFFF;
+}
+.tr {
+ display: flex;
+ width: 100%;
+ justify-content: center;
+ height: 2.5rem;
+ align-items: center;
+}
+.th {
+ width: 50%;
+ justify-content: center;
+ background: #1E95F1;
+ color: #000000;
+ display: flex;
+ height: 2.5rem;
+ align-items: center;
+ /* border-right: 1rpx solid #aae6f9 */
+ /* border: 1rpx solid rgba(49, 48, 48, 0.322) */
+}
+.th_show {
+ background: #FFFFFF
+}
+
+
+.consume-type-icon {
+ display: flex;
+ flex-direction: row;
+ flex-wrap:wrap;
+ position: relative;
+ border-bottom:1rpx solid #ccc;
+}
+.consume-type-icon .consume-icon {
+ width: 8%;
+ padding: 21rpx 40rpx;
+}
+.consume-type-icon span {
+ display: flex;
+ align-items: center;
+ padding: 0rpx;
+ font-size: 35rpx;
+}
+
+.consume-type {
+ display: flex;
+ flex-direction: row;
+ flex-wrap:wrap;
+ position: relative;
+}
+.consume-type .consume-icon {
+ width: 16%;
+ padding: 20rpx 15rpx;
+ margin-top: 5rpx;
+
+}
+
+.consume-icon image {
+ width: 100%;
+ height: 100%;
+}
+.consume-type center {
+ display: flex;
+ padding: 0rpx 15rpx;
+ text-align: center;
+}
+.consume-money {
+ position: absolute;
+ right: 28rpx;
+ margin-top: 28rpx;
+}
+
+
+/* 计算器 */
+.section {
+ margin: 10rpx 10rpx;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+}
+.flex-wrp_one {
+ display: flex;
+ flex-direction: row;
+}
+.fix-item {
+ background-color: #FFFFFF;
+ width: 100%;
+ height: 75%;
+ display: flex;
+ /*使子项目水平居中 */
+ justify-content: center;
+ /*使子项目垂直居中*/
+ align-items: center;
+}
+.section_btn {
+ display: flex;
+ flex-direction: row;
+ height: 80rpx;
+ border: 2rpx solid #eeeeee;
+}
+.section_btn image {
+ width: 60rpx;
+ height: 60rpx;
+ padding: 10rpx 5rpx;
+}
+.section_btn_left{
+ flex:8;
+}
+.section_btn_right{
+ flex:1;
+}
+.container{
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+}
+.container1{
+ display:flex;
+ flex-direction: row;
+ height:400rpx;
+}
+.left{
+ flex: 3;
+ height: 100%;
+}
+.right{
+ flex: 1;
+ height: 100%;
+}
+.tr{
+ width:100%;
+ height:25%;
+ display:flex;
+ align-items: center;
+ justify-content: center;
+}
+.tr button{
+ height:100%;
+ background-color:#FFFFFF;
+ flex:1;
+ vertical-align:middle;
+ text-align:center;
+ border:0rpx;
+ /* border:1px solid #fff; */
+}
+.remove{
+ width:100%;
+ height:25%;
+ vertical-align:middle;
+ background-color: #FFFFFF;
+ text-align: center;
+ background-size: 30% 50%;
+ background-image:url(https://be.yangyoki.top/images/consume/icon/delete.png);
+ background-repeat: no-repeat;
+ background-position: center;
+
+}
+
+
+.model {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ background-color: rgba(0, 0, 0, 0.5);
+ z-index: 0;
+ color: #333;
+}
+
+.ruleModel {
+ width: 600rpx;
+ background-color: #fff;
+ margin: 120rpx 75rpx;
+ border-radius: 20rpx;
+ padding: 20rpx 15rpx;
+}
+
+.close {
+ width: 80rpx;
+ height: 80rpx;
+ position: absolute;
+ top: 80rpx;
+ right: 20rpx;
+}
+.swiper-image {
+ width: 100%;
+ height: 100%;
+}
\ No newline at end of file
diff --git a/pages/index/address/address.js b/pages/index/address/address.js
index a3ad511cb61b8dff18fd47ef0d32d77be4724a37..c9b91ed4ae60ee839f200b56b93fb4b245334921 100644
--- a/pages/index/address/address.js
+++ b/pages/index/address/address.js
@@ -85,32 +85,11 @@ Page({
let that = this
if (!address) {
console.log(`地址为空,不进行操作了!!!!` + address)
- retrun;
+ return;
}
qqMapWxUtil.geocoder(address).then(response => {
- that.reverseGeocoder(response.result.location.lat, response.result.location.lng)
- let region = [];
- region.push(response.result.address_components.province)
- region.push(response.result.address_components.city)
- region.push(response.result.address_components.district)
- that.setData({
- region: region
- })
- })
- },
- /**
- *调用腾讯地图显示位置信息
- * latitude:纬度
- * longitude:经度
- */
- reverseGeocoder: function (latitude, longitude) {
- let that = this
- let location = {}
- location.latitude = latitude;
- location.longitude = longitude;
- qqMapWxUtil.reverseGeocoder(location).then(response => {
- console.log(`从腾讯文档中获取到的地图坐标是:`, response)
that.setData({
+ region: response.region,
markers: response.markers
})
})
diff --git a/pages/index/bookkeepingdetail/bookkeepingdetail.js b/pages/index/bookkeepingdetail/bookkeepingdetail.js
index ca806ef0b08172bba3448488b96e688cf08582c9..7c4c50e391113759902d0af493a7b44319c2c672 100644
--- a/pages/index/bookkeepingdetail/bookkeepingdetail.js
+++ b/pages/index/bookkeepingdetail/bookkeepingdetail.js
@@ -1,199 +1,74 @@
+// pages/other/income_detail.js
const API = require('../../../utils/api.js');
const FormatUtil = require('../../../utils/util.js');
const TOAST = require('../../../utils/toast.js');
const AJAX = require('../../../utils/ajax.js')
-// 引入腾讯地图
-const qqMapWxUtil = require('../../../utils/qqMapWxUtil.js')
Page({
/**
* 页面的初始数据
*/
data: {
- bookkeepingId: '',
- bookkeepingObj: {},
- updateShow: false,
- // 标记点
- markers: [],
- imageHost: API.api.imageHost,
- tempFilePaths: '',
- loading:false
+ bookkeepingId: '', // 记账id
+ bookkeepingObj: {}, // 记账对象
+ loading: false, // 加载动画
+ imageHost: API.api.imageHost, //服务器图片地址
+ /**
+ * 删除异步提示框
+ */
+ actions2: [
+ {name: '删除',color: '#ed3f14'}
+ ],
+ showActionsheet: false // 是否删除
},
-
/**
* 生命周期函数--监听页面加载
*/
- onLoad: function(options) {
+ onLoad: function (options) {
// 获取到记账id,判断是从哪个页面跳转过来的
if (options.form === 'index') {
console.log(`从记账页面跳转过来的!!!携带的id为:`, options.bookkeepingid)
- this.setData({
- bookkeepingId: options.bookkeepingid
- })
// 获取用户记账信息
this.getBookkeepingById(options.bookkeepingid);
- } else if(options.form === 'address'){
- let bookkeepingObj = wx.getStorageSync('bookkeepingObj')
- bookkeepingObj.address = options.address
- bookkeepingObj.addressDetail = options.addressDetail
- this.setData({
- bookkeepingObj: bookkeepingObj,
- updateShow: true
- })
- this.geocoder(options.address + options.addressDetail)
- } else{
- console.log(`来自其他消息` + options.form)
- }
- },
- /**
- * 显示保存
- */
- updateShowData: function() {
- let bookkeepingObj = this.data.bookkeepingObj;
- if (!this.data.updateShow) {
- // 格式化金额信息Int
- let money = FormatUtil.intFormatMoney(this.data.bookkeepingObj.moneyView)
- console.log(money)
- bookkeepingObj.moneyView = money
} else {
- // 格式化金额信息String
- let money = FormatUtil.formatMoney(this.data.bookkeepingObj.moneyView)
- bookkeepingObj.moneyView = money
- console.log(money)
+ console.log(`来自其他消息`, options)
}
-
- this.setData({
- updateShow: !this.data.updateShow,
- bookkeepingObj:bookkeepingObj
- })
},
/**
- * 填写备注
- */
- textareaRemark:function(e) {
- console.log(`获取到数据了`,e.detail.value)
- let bookkeepingObj = this.data.bookkeepingObj;
- bookkeepingObj.remarks = e.detail.value
- this.setData({
- bookkeepingObj:bookkeepingObj
- })
- },
- inputMoney:function(e) {
- console.log(`获取到数据了`, e.detail.value)
- let bookkeepingObj = this.data.bookkeepingObj;
- bookkeepingObj.moneyView = e.detail.value
- this.setData({
- bookkeepingObj: bookkeepingObj
- })
- },
- /**
- * 更新保存数据
- */
- updateData: function() {
- let that = this
- console.log('这里是保存数据的')
- let requestUrl = API.api.bookkeepings + '/' + this.data.bookkeepingObj.id;
- // 金额格式化
- let requestData = this.data.bookkeepingObj
- requestData.money = Number(requestData.moneyView) * 100;
- requestData.imageUrl = JSON.stringify(requestData.imageUrl)
- this.setData({
- loading:true
- })
- AJAX.putRequest(requestUrl,requestData).then(response => {
- // that.updateShowData()
- that.setData({
- loading:false
- })
- wx.switchTab({
- url: '/pages/index/index'
- })
- });
-
- },
- /**
- * 删除数据
+ * 获取用户记账信息
*/
- deleteData: function() {
- console.log(`准备删除一条数据`)
- let that = this
- let requestUrl = API.api.bookkeepings + '/' + this.data.bookkeepingObj.id
+ getBookkeepingById: function (bookkeepingId) {
+ let that = this;
+ let requestUrl = API.api.bookkeepings + '/' + bookkeepingId;
this.setData({
- loading:true
+ loading: true
})
- AJAX.delRequest(requestUrl).then(response => {
- console.log(`删除成功,返回主页面`)
+ AJAX.getRequest(requestUrl).then(response => {
+ let resultData = response.data
+ resultData.createTimeView = FormatUtil.formatTime(new Date(resultData.createTime),"mm月dd日 mm:yy")
+ resultData.moneyView = FormatUtil.formatMoney(resultData.money / 100)
+ resultData.imageUrl = resultData.imageUrl ? JSON.parse(resultData.imageUrl) : []
+ resultData.addressDetail = resultData.addressDetail ? resultData.addressDetail : ''
+ if (new Date().getTime() - 720000 < resultData.createTime) {
+ // 小于半个小时
+ resultData.existsTimeView = '刚刚'
+ } else if (resultData.consumeTimeDay + 86309000 >= new Date().getTime()) {
+ // 今天
+ resultData.existsTimeView = '今天'
+ } else {
+ resultData.existsTimeView = FormatUtil.formatTime(new Date(resultData.createTime), "mm月dd日")
+ }
that.setData({
- loading:false
- })
- wx.switchTab({
- url: '/pages/index/index'
+ bookkeepingObj: resultData,
+ loading: false,
+ bookkeepingId: bookkeepingId
})
})
},
/**
- * 上传图片
- */
- uploadImag: function(e) {
- let that = this
- let imagePath = "";
- wx.chooseImage({
- count: 1,
- sizeType: ['compressed'],
- success: function(res) {
- console.log(`获取到list`, res.tempFiles)
- const tempFiles = res.tempFiles;
- that.setData({
- tempFilePaths: tempFiles[0].path
- })
- let requestUrl = API.api.uploadFile + '/bookkeeping/bookkeeping'
- for (var i = 0; i < tempFiles.length;i++) {
- if (tempFiles[i].size > 1048576) {
- TOAST.showToastSuccess('图片大于1M')
- continue;
- }
- that.setData({
- loading:true
- })
- wx.uploadFile({
- url: requestUrl,
- filePath: tempFiles[i].path,
- name: 'file',
- header: {
- "Authorization": wx.getStorageSync('token')
- },
- success: function (res) {
- console.log(`这边是小程序上传文件返回回来的数据信息`)
- let resData = JSON.parse(res.data)
- let bookkeepingObj = that.data.bookkeepingObj;
- if (resData.code == 200) {
- console.log(`index:` + e.currentTarget.dataset.index)
- let index = e.currentTarget.dataset.index
- console.log(`imageUrl:` + bookkeepingObj.imageUrl.length)
- if(bookkeepingObj.imageUrl.length >= 2) {
- index > bookkeepingObj.imageUrl ? bookkeepingObj.imageUrl.push(resData.data) : bookkeepingObj.imageUrl[index] = resData.data
- } else{
- bookkeepingObj.imageUrl.push(resData.data)
- }
- that.setData({
- bookkeepingObj: bookkeepingObj
- })
- }
- console.log(`bookkeepingObj:`, that.data.bookkeepingObj)
- },complete() {
- that.setData({
- loading:false
- })
- }
- })
- }
- }
- })
- },
- /**
- * 预览图片
- */
- previewImage:function(e) {
+ * 预览图片
+ */
+ previewImage: function (e) {
let imageUrl = [];
this.data.bookkeepingObj.imageUrl.forEach(item => {
imageUrl.push(this.data.imageHost + item)
@@ -207,139 +82,46 @@ Page({
})
},
/**
- * 跳转到gps定位
+ * 取消删除
*/
- gotoAddress: function(e) {
- // 缓存对于的数据信息
- wx.setStorageSync('bookkeepingObj', this.data.bookkeepingObj)
- wx.navigateTo({
- url: '../address/address?form=bookkeepingDetail&address=' + this.data.bookkeepingObj.address + '&addressDetail=' + this.data.bookkeepingObj.addressDetail,
- })
+ handleCancel2() {
+ this.setData({
+ showActionsheet: false
+ });
},
- /**
- * 生命周期函数--监听页面初次渲染完成
- */
- onReady: function() {
-
+ handleOpen2() {
+ this.setData({
+ showActionsheet: true
+ });
},
-
- /**
- * 生命周期函数--监听页面显示
- */
- onShow: function() {},
-
/**
- * 获取用户记账信息
- */
- getBookkeepingById: function(bookkeepingId) {
- let that = this;
- let requestUrl = API.api.bookkeepings + '/' + bookkeepingId;
+ * 删除数据
+ */
+ deleteData: function () {
+ console.log(`准备删除一条数据`)
+ let that = this
+ let requestUrl = API.api.bookkeepings + '/' + this.data.bookkeepingObj.id
this.setData({
- loading:true
+ loading: true
})
- AJAX.getRequest(requestUrl).then(response => {
- let resultData = response.data
- resultData.createTimeView = FormatUtil.formatTime(new Date(resultData.createTime))
- resultData.moneyView = FormatUtil.formatMoney(resultData.money / 100)
- resultData.imageUrl = resultData.imageUrl ? JSON.parse(resultData.imageUrl) : []
+ AJAX.delRequest(requestUrl).then(response => {
+ TOAST.showToast("删除成功")
that.setData({
- bookkeepingObj: resultData,
- loading:false
+ loading: false,
+ showActionsheet: false
})
- // TODO 这里后期加判断,如果位置为空则重新定位还是什么的 通过位置定位信息
- that.geocoder(resultData.address + resultData.addressDetail)
- })
- },
- /**
- *调用腾讯地图显示位置信息
- * latitude:纬度
- * longitude:经度
- */
- reverseGeocoder: function(latitude, longitude) {
- let that = this
- let location = {}
- location.latitude = latitude;
- location.longitude = longitude;
- qqMapWxUtil.reverseGeocoder(location).then(response => {
- console.log(`从腾讯文档中获取到的地图坐标是:`, response)
- that.setData({
- markers: response.markers
+ wx.switchTab({
+ url: '/pages/index/index'
})
})
},
/**
- * 调用腾讯地图进行定位
- * address:地址信息
+ * 修改
*/
- geocoder: function(address) {
- let that = this
- if (!address) {
- console.log(`地址为空,不进行操作了!!!!` + address)
- return;
- }
- qqMapWxUtil.geocoder(address).then(response => {
- that.reverseGeocoder(response.result.location.lat, response.result.location.lng)
+ editConsume:function() {
+ console.log("我准备跳转到记账页")
+ wx.reLaunch({
+ url: '/pages/consume/consume?form=edit&bookkeepingid=' + this.data.bookkeepingId
})
- },
- /**
- * 下拉触发
- */
- bindRegionChange: function(e) {
- let that = this
- console.log('picker发送选择改变,携带值为', e.detail.value)
- this.setData({
- region: e.detail.value
- })
- let address = e.detail.value[0] + e.detail.value[1] + e.detail.value[2]
- console.log(`获取到的地址是:` + address)
-
- that.geocoder(address)
- },
- /**
- * 图片预览
- */
- queryImg: function(e) {
- let urls = [];
- urls.push(e.target.dataset.list)
- wx.previewImage({
- urls: urls,
- success: function(res) {
- console.log("成功了")
- }
- })
- },
- /**
- * 生命周期函数--监听页面隐藏
- */
- onHide: function() {
-
- },
-
- /**
- * 生命周期函数--监听页面卸载
- */
- onUnload: function() {
-
- },
-
- /**
- * 页面相关事件处理函数--监听用户下拉动作
- */
- onPullDownRefresh: function() {
-
- },
-
- /**
- * 页面上拉触底事件的处理函数
- */
- onReachBottom: function() {
-
- },
-
- /**
- * 用户点击右上角分享
- */
- onShareAppMessage: function() {
-
}
})
\ No newline at end of file
diff --git a/pages/index/bookkeepingdetail/bookkeepingdetail.json b/pages/index/bookkeepingdetail/bookkeepingdetail.json
index f95124734fad88627a5ee88785c817b47cf34aad..fc56bdb29a0d59091bf42c972360741d0d72ddf7 100644
--- a/pages/index/bookkeepingdetail/bookkeepingdetail.json
+++ b/pages/index/bookkeepingdetail/bookkeepingdetail.json
@@ -1,5 +1,11 @@
{
+ "navigationBarTitleText": "收入详情",
+ "enablePullDownRefresh": true,
+ "backgroundTextStyle": "dark",
+ "navigationBarBackgroundColor": "#15ace3",
"usingComponents": {
- "i-spin": "../../template/dist/spin/index"
+ "i-spin": "../../template/dist/spin/index",
+ "i-button": "../../template/dist/button/index",
+ "i-action-sheet": "../../template/dist/action-sheet/index"
}
}
\ No newline at end of file
diff --git a/pages/index/bookkeepingdetail/bookkeepingdetail.wxml b/pages/index/bookkeepingdetail/bookkeepingdetail.wxml
index 558ad22e9ffa835e49475c99f536de637a6a1857..5cfc83ca39a52bdf8799cef2ae01bdcc70efe7a2 100644
--- a/pages/index/bookkeepingdetail/bookkeepingdetail.wxml
+++ b/pages/index/bookkeepingdetail/bookkeepingdetail.wxml
@@ -1,78 +1,80 @@
-
-
- 加载中
+ 加载中
-
-
- 消费时间
- {{bookkeepingObj.createTimeView}}
-
-
- 消费金额
- {{bookkeepingObj.moneyView}} 元
-
-
- 消费地点 {{bookkeepingObj.address}}{{bookkeepingObj.addressDetail}}
-
-
+
+
+
+
+
+
+ {{bookkeepingObj.consumeType.name}}
+
+ ¥{{bookkeepingObj.moneyView}}
-
-
- 消费记录
-
-
-
+
+
+
+ 编辑
-
-
+
+ {{bookkeepingObj.existsTimeView}}
-
- 备注
- {{bookkeepingObj.remarks}}
-
-
-
-
-
- 消费时间
- {{bookkeepingObj.createTimeView}}
-
-
- 消费金额
-
-
+
+
+ 收款人
-
-
- 消费地点 {{bookkeepingObj.address}}{{bookkeepingObj.addressDetail}}
-
-
+
+
+
+ {{bookkeepingObj.wxUser.nickName}}
+
+
+ ¥{{bookkeepingObj.moneyView}}
+
-
- 消费记录
-
-
-
+
+ 描述
+
+ {{bookkeepingObj.remarks}}
+
+
+
+
-
-
+
+
+
+
+
+ {{bookkeepingObj.address}}
+ {{bookkeepingObj.addressDetail}}
+
-
- 备注
-
+
+
+
+
+ {{bookkeepingObj.wxUser.nickName}}
+
+
+ {{bookkeepingObj.createTimeView}}
+
+
+
+ 删除
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+ 确定吗?
+ 删除后无法恢复哦
+
+
\ No newline at end of file
diff --git a/pages/index/bookkeepingdetail/bookkeepingdetail.wxss b/pages/index/bookkeepingdetail/bookkeepingdetail.wxss
index 92c7b47a181c454d4ebef36ccbf7e6c0e34ffbf4..0388e6a7016f5cf80dd10ed292a39258013138c6 100644
--- a/pages/index/bookkeepingdetail/bookkeepingdetail.wxss
+++ b/pages/index/bookkeepingdetail/bookkeepingdetail.wxss
@@ -1,123 +1,170 @@
-/* pages/index/bookkeepingdetail/bookkeepingdetail.wxss */
-/* 地图样式 */
-.map-style {
- width: 100%;
- height: 240rpx;
- margin-bottom: 20rpx;
- padding: 10rpx 0rpx;
- margin-right: 1.5rem;
-}
-
-.add-growers {
- width: 100%;
- min-height: 100vh;
-}
-
-.add-growers-form-group {
- width: 100%;
- height: 3rem;
- background: rgba(255, 255, 255, 1);
+.main{
+ background-color: #fff;
+}
+.income_info{
+ display: flex;
+ border-bottom: 10rpx solid #f5f4f9;
+ padding: 40rpx 40rpx 80rpx 40rpx;
+}
+.icome_cate{
+ flex: 5;
+}
+icome_date{
+ flex: 3;
+}
+.icome_cate_wrap{
display: flex;
align-items: center;
- border-bottom: 0.05rem solid rgba(235, 235, 235, 1);
- padding: 0 0.75rem;
}
-
-.add-growers-form-group .add-growers-form-label {
- width: 20%;
+.icome_cate_wrap image{
+ width:70rpx;
+ margin-right: 15rpx;
}
-
-.add-growers-form-label_more {
- width: 30%;
+.icome_edit image{
+ width:40rpx;
+ margin-right: 15rpx;
}
-
-.add-growers-form-input {
- width: 70%;
+.icome_edit{
display: flex;
align-items: center;
- margin-left: 1.5rem;
-}
-
-.add-growers-form-input input {
- width: 13rem;
- height: 1.55rem;
- border-radius: 0.15rem;
- font-size: 0.9rem;
- font-family: PingFangSC-Medium;
- font-weight: 500;
- background-color: #fff;
}
-
-.add-id-form-group {
- height: 10rem;
+.icome_cate_text{
+ color: #7e7e7e;
+ font-size: 35rpx;
+}
+.icome_edit{
+ font-size: 35rpx;
+ color:#19374f;
+}
+.icome_cate_num{
+ font-size: 60rpx;
+ color:#00335b;
+ padding-top: 30rpx;
+ font-weight: bold;
+ font-family: 'PingFang SC';
+}
+.icome_date_info{
+ text-align: right;
+ color:#767676;
+ font-size: 30rpx;
+ padding-top: 74rpx;
+}
+.income_people{
+ border-bottom: 18rpx solid #f5f4f9;
+}
+.icome_people_info{
+ display: flex;
+ justify-content: space-between;
+ padding:15rpx 40rpx;
+ border-bottom: 2rpx solid #f3f3f3;
+}
+.icome_people_title{
+ font-size: 30rpx;
+ color: #2f5268;
+ padding: 35rpx 40rpx;
+ border-bottom: 2rpx solid #f3f3f3;
+}
+.icome_people_wrap{
+ display: flex;
+
+ align-items: center;
+}
+.icome_people_num{
+ color:#777777;
+ font-size: 30rpx;
+ align-items: center;
+ display: flex;
+}
+.icome_people_wrap image{
+ width: 80rpx;
+ margin-right: 20rpx;
+ border-radius: 50%;
+ height: 40rpx;
+}
+.icome_people_name{
+ font-size: 30rpx;
+ color:#2f5268;
+}
+.icome_detail_info{
+ display: flex;
+ padding:50rpx 40rpx 60rpx 40rpx;
+ border-bottom: 20rpx solid #f3f3f3;
+}
+.detail_info_title{
+ flex: 1;
+ color:#0e304b;
+ font-size: 30rpx;
+}
+.detail_info_content{
+ flex: 8;
+}
+.detail_info_text{
+ color:#8c8c8c;
+ font-size: 30rpx;
+}
+.detail_info_img{
display: flex;
- flex-flow: column wrap;
- padding: 1.25rem 0.75rem;
+ align-items: center;
+ padding:20rpx 0 40rpx 0;
+}
+.detail_info_itemImg{
+ /* flex: 1; */
+ height: 150rpx;
+ width: 150rpx;
+ padding: 0rpx 15rpx 0rpx 0rpx;
+}
+.detail_info_img image{
+ width: 100%;
+ height: 100%;
}
-
-.upload-wrap {
+.detail_address{
+ display: flex;
align-items: center;
+}
+.address_icon image{
+ width:50rpx;
+ margin-right: 20rpx;
+}
+.address_detail{
+ font-size: 25rpx;
+ color:#0e304b;
+}
+.address_quyu{
+ font-size: 32rpx;
+ color:#737373;
+}
+.more_info{
+ display: flex;
justify-content: space-between;
+ padding-bottom: 90rpx;
+}
+.info_text{
display: flex;
- flex-flow: row wrap;
- width: 100%;
- height: 7rem;
-}
-.upload-address {
- width: 100%;
- height: 2.5rem;
-}
-.cert-front-upload {
- width: 41%;
- height: 100%;
- margin-top: 0.5rem;
- margin-right: 1.5rem;
-}
-
-.cert-front-upload image {
- width: 100%;
- height: 100%;
-}
-
-.add-growers-form-group_more {
- width: 100%;
- height: 8rem;
- background: rgba(255, 255, 255, 1);
-}
-
-.add-growers-form-group_more .add-growers-form-label {
- padding: 0.5rem 0.5rem;
-}
-
-textarea {
- display: inline-block;
- width: 100%;
- padding: 0.75rem;
- font-size: 0.7rem;
- font-family: PingFangSC-Medium;
- font-weight: 500;
- border-radius: 0.15rem;
-}
-/* 底层按钮 */
-.detail-button {
- z-index: 9999;
+ align-items: center;
+}
+.info_text image{
+ width: 35rpx;
+ margin-right: 20rpx;
+}
+.user_name,.create_time{
+ font-size: 25rpx;
+ color: #737373;
+}
+.more_info_wrap{
display: flex;
+ align-items: center;
}
-.detail-button .btn-left {
- width: 45%;
- padding: 10rpx 0rpx;
- line-height: 60rpx;
- position: fixed;
- left: 4%;
- bottom: 0;
- margin-bottom: 20rpx;
-}
-.detail-button .btn-right {
- width: 45%;
- padding: 10rpx 0rpx;
- line-height: 60rpx;
- position: fixed;
- right: 4%;
- bottom: 0;
- margin-bottom: 20rpx;
+.more_info_wrap image{
+ width: 23rpx;
+ margin-left: 50rpx;
+}
+button{
+ width:90%!important;
+ border:1rpx solid #4bb6c8;
+ color: #4bb6c8;
+ font-weight: lighter!important;
+ background-color: #fff;
}
+.icome_active{
+ padding:50rpx 40rpx 70rpx 40rpx;
+}
\ No newline at end of file
diff --git a/pages/index/bookkeepingdetailOld/bookkeepingdetail.js b/pages/index/bookkeepingdetailOld/bookkeepingdetail.js
new file mode 100644
index 0000000000000000000000000000000000000000..53f831cca4c437999ba7176939acf758a9fe77d2
--- /dev/null
+++ b/pages/index/bookkeepingdetailOld/bookkeepingdetail.js
@@ -0,0 +1,334 @@
+const API = require('../../../utils/api.js');
+const FormatUtil = require('../../../utils/util.js');
+const TOAST = require('../../../utils/toast.js');
+const AJAX = require('../../../utils/ajax.js')
+// 引入腾讯地图
+const qqMapWxUtil = require('../../../utils/qqMapWxUtil.js')
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ bookkeepingId: '',
+ bookkeepingObj: {},
+ updateShow: false,
+ // 标记点
+ markers: [],
+ imageHost: API.api.imageHost,
+ tempFilePaths: '',
+ loading: false
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ // 获取到记账id,判断是从哪个页面跳转过来的
+ if (options.form === 'index') {
+ console.log(`从记账页面跳转过来的!!!携带的id为:`, options.bookkeepingid)
+ this.setData({
+ bookkeepingId: options.bookkeepingid
+ })
+ // 获取用户记账信息
+ this.getBookkeepingById(options.bookkeepingid);
+ } else if (options.form === 'address') {
+ let bookkeepingObj = wx.getStorageSync('bookkeepingObj')
+ bookkeepingObj.address = options.address
+ bookkeepingObj.addressDetail = options.addressDetail
+ this.setData({
+ bookkeepingObj: bookkeepingObj,
+ updateShow: true
+ })
+ this.geocoder(options.address + options.addressDetail)
+ } else {
+ console.log(`来自其他消息` + options.form)
+ }
+ },
+ /**
+ * 显示保存
+ */
+ updateShowData: function () {
+ let bookkeepingObj = this.data.bookkeepingObj;
+ if (!this.data.updateShow) {
+ // 格式化金额信息Int
+ let money = FormatUtil.intFormatMoney(this.data.bookkeepingObj.moneyView)
+ console.log(money)
+ bookkeepingObj.moneyView = money
+ } else {
+ // 格式化金额信息String
+ let money = FormatUtil.formatMoney(this.data.bookkeepingObj.moneyView)
+ bookkeepingObj.moneyView = money
+ console.log(money)
+ }
+
+ this.setData({
+ updateShow: !this.data.updateShow,
+ bookkeepingObj: bookkeepingObj
+ })
+ },
+ /**
+ * 填写备注
+ */
+ textareaRemark: function (e) {
+ console.log(`获取到数据了`, e.detail.value)
+ let bookkeepingObj = this.data.bookkeepingObj;
+ bookkeepingObj.remarks = e.detail.value
+ this.setData({
+ bookkeepingObj: bookkeepingObj
+ })
+ },
+ inputMoney: function (e) {
+ console.log(`获取到数据了`, e.detail.value)
+ let bookkeepingObj = this.data.bookkeepingObj;
+ bookkeepingObj.moneyView = e.detail.value
+ this.setData({
+ bookkeepingObj: bookkeepingObj
+ })
+ },
+ /**
+ * 更新保存数据
+ */
+ updateData: function () {
+ let that = this
+ console.log('这里是保存数据的')
+ let requestUrl = API.api.bookkeepings + '/' + this.data.bookkeepingObj.id;
+ // 金额格式化
+ let requestData = this.data.bookkeepingObj
+ requestData.money = Number(requestData.moneyView) * 100;
+ requestData.imageUrl = JSON.stringify(requestData.imageUrl)
+ this.setData({
+ loading: true
+ })
+ AJAX.putRequest(requestUrl, requestData).then(response => {
+ // that.updateShowData()
+ that.setData({
+ loading: false
+ })
+ wx.switchTab({
+ url: '/pages/index/index'
+ })
+ });
+
+ },
+ /**
+ * 删除数据
+ */
+ deleteData: function () {
+ console.log(`准备删除一条数据`)
+ let that = this
+ let requestUrl = API.api.bookkeepings + '/' + this.data.bookkeepingObj.id
+ this.setData({
+ loading: true
+ })
+ AJAX.delRequest(requestUrl).then(response => {
+ console.log(`删除成功,返回主页面`)
+ that.setData({
+ loading: false
+ })
+ wx.switchTab({
+ url: '/pages/index/index'
+ })
+ })
+ },
+ /**
+ * 上传图片
+ */
+ uploadImag: function (e) {
+ let that = this
+ let imagePath = "";
+ wx.chooseImage({
+ count: 1,
+ sizeType: ['compressed'],
+ success: function (res) {
+ console.log(`获取到list`, res.tempFiles)
+ const tempFiles = res.tempFiles;
+ that.setData({
+ tempFilePaths: tempFiles[0].path
+ })
+ let requestUrl = API.api.uploadFile + '/bookkeeping/wx_' + wx.getStorageSync('userId')
+ for (var i = 0; i < tempFiles.length; i++) {
+ if (tempFiles[i].size > 1048576) {
+ TOAST.showToast('上传图片失败:图片大于1M')
+ continue;
+ }
+ that.setData({
+ loading: true
+ })
+ wx.uploadFile({
+ url: requestUrl,
+ filePath: tempFiles[i].path,
+ name: 'file',
+ header: {
+ "Authorization": wx.getStorageSync('token')
+ },
+ success: function (res) {
+ console.log(`这边是小程序上传文件返回回来的数据信息`,res)
+ let resData = JSON.parse(res.data)
+ let bookkeepingObj = that.data.bookkeepingObj;
+ console.log(`index:` + e.currentTarget.dataset.index)
+ let index = e.currentTarget.dataset.index
+ console.log(`imageUrl:` + bookkeepingObj.imageUrl.length)
+ if (bookkeepingObj.imageUrl.length >= 2) {
+ index > bookkeepingObj.imageUrl ? bookkeepingObj.imageUrl.push(resData.file) : bookkeepingObj.imageUrl[index] = resData.file
+ } else {
+ bookkeepingObj.imageUrl.push(resData.file)
+ }
+ that.setData({
+ bookkeepingObj: bookkeepingObj
+ })
+ console.log(`bookkeepingObj:`, that.data.bookkeepingObj)
+ },
+ complete() {
+ that.setData({
+ loading: false
+ })
+ }
+ })
+ }
+ }
+ })
+ },
+ /**
+ * 预览图片
+ */
+ previewImage: function (e) {
+ let imageUrl = [];
+ this.data.bookkeepingObj.imageUrl.forEach(item => {
+ imageUrl.push(this.data.imageHost + item)
+ })
+ console.log(e.currentTarget.dataset.imageUrl)
+ console.log(e.currentTarget.dataset.imageurl)
+ console.log(`这个是当前的url:` + this.data.imageHost + e.currentTarget.dataset.imageurl)
+ wx.previewImage({
+ current: this.data.imageHost + e.currentTarget.dataset.imageurl,
+ urls: imageUrl,
+ })
+ },
+ /**
+ * 跳转到gps定位
+ */
+ gotoAddress: function (e) {
+ // 缓存对于的数据信息
+ this.setData({
+ loading:true
+ })
+ wx.setStorageSync('bookkeepingObj', this.data.bookkeepingObj)
+ wx.navigateTo({
+ url: '../address/address?form=bookkeepingDetail&address=' + this.data.bookkeepingObj.address + '&addressDetail=' + this.data.bookkeepingObj.addressDetail,
+ })
+ },
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+ this.setData({
+ loading:false
+ })
+ },
+
+ /**
+ * 获取用户记账信息
+ */
+ getBookkeepingById: function (bookkeepingId) {
+ let that = this;
+ let requestUrl = API.api.bookkeepings + '/' + bookkeepingId;
+ this.setData({
+ loading: true
+ })
+ AJAX.getRequest(requestUrl).then(response => {
+ let resultData = response.data
+ resultData.createTimeView = FormatUtil.formatTime(new Date(resultData.createTime))
+ resultData.moneyView = FormatUtil.formatMoney(resultData.money / 100)
+ resultData.imageUrl = resultData.imageUrl ? JSON.parse(resultData.imageUrl) : []
+ that.setData({
+ bookkeepingObj: resultData,
+ loading: false
+ })
+ that.geocoder(resultData.address + resultData.addressDetail)
+ })
+ },
+ /**
+ * 调用腾讯地图进行定位
+ * address:地址信息
+ */
+ geocoder: function (address) {
+ if (!address) {
+ console.log(`地址为空,不进行操作了!!!!` + address)
+ return;
+ }
+ qqMapWxUtil.geocoder(address).then(response => {
+ this.setData({
+ markers: response.markers
+ })
+ })
+ },
+ /**
+ * 下拉触发
+ */
+ bindRegionChange: function (e) {
+ let that = this
+ console.log('picker发送选择改变,携带值为', e.detail.value)
+ this.setData({
+ region: e.detail.value
+ })
+ let address = e.detail.value[0] + e.detail.value[1] + e.detail.value[2]
+ console.log(`获取到的地址是:` + address)
+
+ that.geocoder(address)
+ },
+ /**
+ * 图片预览
+ */
+ queryImg: function (e) {
+ let urls = [];
+ urls.push(e.target.dataset.list)
+ wx.previewImage({
+ urls: urls,
+ success: function (res) {
+ console.log("成功了")
+ }
+ })
+ },
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+
+ }
+})
\ No newline at end of file
diff --git a/pages/index/bookkeepingdetailOld/bookkeepingdetail.json b/pages/index/bookkeepingdetailOld/bookkeepingdetail.json
new file mode 100644
index 0000000000000000000000000000000000000000..f95124734fad88627a5ee88785c817b47cf34aad
--- /dev/null
+++ b/pages/index/bookkeepingdetailOld/bookkeepingdetail.json
@@ -0,0 +1,5 @@
+{
+ "usingComponents": {
+ "i-spin": "../../template/dist/spin/index"
+ }
+}
\ No newline at end of file
diff --git a/pages/index/bookkeepingdetailOld/bookkeepingdetail.wxml b/pages/index/bookkeepingdetailOld/bookkeepingdetail.wxml
new file mode 100644
index 0000000000000000000000000000000000000000..01b2303fa69c093a3eba49ec7679347d02df538f
--- /dev/null
+++ b/pages/index/bookkeepingdetailOld/bookkeepingdetail.wxml
@@ -0,0 +1,81 @@
+
+
+
+
+ 加载中
+
+
+
+ 消费时间
+ {{bookkeepingObj.createTimeView}}
+
+
+ 消费金额
+ {{bookkeepingObj.moneyView}} 元
+
+
+ 消费地点
+ {{bookkeepingObj.address}}{{bookkeepingObj.addressDetail}}
+
+
+
+
+
+ 消费记录
+
+
+
+
+
+
+
+
+
+
+ 备注
+ {{bookkeepingObj.remarks}}
+
+
+
+
+
+ 消费时间
+ {{bookkeepingObj.createTimeView}}
+
+
+ 消费金额
+
+
+
+
+
+ 消费地点
+ {{bookkeepingObj.address}}{{bookkeepingObj.addressDetail}}
+
+
+
+
+
+ 消费记录
+
+
+
+
+
+
+
+
+
+
+ 备注
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/bookkeepingdetailOld/bookkeepingdetail.wxss b/pages/index/bookkeepingdetailOld/bookkeepingdetail.wxss
new file mode 100644
index 0000000000000000000000000000000000000000..a05fd4ae32fa235ad16cca97dfd9ba9ac9df6bf8
--- /dev/null
+++ b/pages/index/bookkeepingdetailOld/bookkeepingdetail.wxss
@@ -0,0 +1,123 @@
+/* pages/index/bookkeepingdetail/bookkeepingdetail.wxss */
+/* 地图样式 */
+.map-style {
+ width: 100%;
+ height: 240rpx;
+ margin-bottom: 20rpx;
+ padding: 10rpx 10rpx;
+ margin-right: 3rpx;
+}
+
+.add-growers {
+ width: 100%;
+ min-height: 100vh;
+}
+
+.add-growers-form-group {
+ width: 100%;
+ height: 3rem;
+ background: rgba(255, 255, 255, 1);
+ display: flex;
+ align-items: center;
+ border-bottom: 0.05rem solid rgba(235, 235, 235, 1);
+ padding: 0 0.75rem;
+}
+
+.add-growers-form-group .add-growers-form-label {
+ width: 20%;
+}
+
+.add-growers-form-label_more {
+ width: 30%;
+}
+
+.add-growers-form-input {
+ width: 70%;
+ display: flex;
+ align-items: center;
+ margin-left: 1.5rem;
+}
+
+.add-growers-form-input input {
+ width: 13rem;
+ height: 1.55rem;
+ border-radius: 0.15rem;
+ font-size: 0.9rem;
+ font-family: PingFangSC-Medium;
+ font-weight: 500;
+ background-color: #fff;
+}
+
+.add-id-form-group {
+ height: 10rem;
+ display: flex;
+ flex-flow: column wrap;
+ padding: 1.25rem 0.75rem;
+}
+
+.upload-wrap {
+ align-items: center;
+ justify-content: space-between;
+ display: flex;
+ flex-flow: row wrap;
+ width: 100%;
+ height: 7rem;
+}
+.upload-address {
+ width: 100%;
+ height: 2.5rem;
+}
+.cert-front-upload {
+ width: 41%;
+ height: 100%;
+ margin-top: 0.5rem;
+ margin-right: 1.5rem;
+}
+
+.cert-front-upload image {
+ width: 100%;
+ height: 100%;
+}
+
+.add-growers-form-group_more {
+ width: 100%;
+ height: 8rem;
+ background: rgba(255, 255, 255, 1);
+}
+
+.add-growers-form-group_more .add-growers-form-label {
+ padding: 0.5rem 0.5rem;
+}
+
+textarea {
+ display: inline-block;
+ width: 100%;
+ padding: 0.75rem;
+ font-size: 0.7rem;
+ font-family: PingFangSC-Medium;
+ font-weight: 500;
+ border-radius: 0.15rem;
+}
+/* 底层按钮 */
+.detail-button {
+ z-index: 9999;
+ display: flex;
+}
+.detail-button .btn-left {
+ width: 45%;
+ padding: 10rpx 0rpx;
+ line-height: 60rpx;
+ position: fixed;
+ left: 4%;
+ bottom: 0;
+ margin-bottom: 20rpx;
+}
+.detail-button .btn-right {
+ width: 45%;
+ padding: 10rpx 0rpx;
+ line-height: 60rpx;
+ position: fixed;
+ right: 4%;
+ bottom: 0;
+ margin-bottom: 20rpx;
+}
diff --git a/pages/index/index.js b/pages/index/index.js
index 43badb61af81b83cefd8a691ef256c2dcff9e5f6..5d099770f1839e4648e68dc75d72bb79b225a10f 100644
--- a/pages/index/index.js
+++ b/pages/index/index.js
@@ -15,26 +15,14 @@ Page({
bookkeepingList: [],
assetsDetail: {},
totalElements: 0,
- },
-
- /**
- * 生命周期函数--监听页面加载
- */
- onLoad: function(options) {
-
- },
-
- /**
- * 生命周期函数--监听页面初次渲染完成
- */
- onReady: function() {
-
+ showScrollTop: false, // 判断是否隐藏tab
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function() {
+ console.log("主页面的onShow触发了...")
// 初始化数据信息
this.setData({
bookkeepingList: [],
@@ -45,23 +33,58 @@ Page({
this.getBookkeeping();
// 获取用户本月消费情况
this.getAssetsDetail();
+ // 显示tab标签
+ TOTAS.showTabBar();
},
/**
- * 跳转到记账详情页
+ * 页面上拉触底事件的处理函数
*/
- gotoDetail: function(e) {
+ onReachBottom: function() {
+ // 触发到底部。进行加载数据信息
+ this.getBookkeeping();
+ },
+
+ //监听屏幕滚动 判断上下滚动
+ onPageScroll: function (ev) {
+ var _this = this;
+ //当滚动的top值最大或者最小时,为什么要做这一步是由于在手机实测小程序的时候会发生滚动条回弹,所以为了解决回弹,设置默认最大最小值
+ if (ev.scrollTop <= 0) {
+ ev.scrollTop = 0;
+ } else if (ev.scrollTop > wx.getSystemInfoSync().windowHeight) {
+ ev.scrollTop = wx.getSystemInfoSync().windowHeight;
+ }
+ //判断浏览器滚动条上下滚动
+ if (ev.scrollTop > 150 && !(_this.data.showScrollTop)) {
+ TOTAS.hideTabBar();
+ _this.setData({ showScrollTop:true})
+ } else if(ev.scrollTop <= 150 && _this.data.showScrollTop){
+ TOTAS.showTabBar();
+ _this.setData({ showScrollTop: false })
+ }
+ },
+
+
+ /**
+ * 用户点击右上角分享 待定
+ */
+ onShareAppMessage: function() {
+ },
+ /**
+ * 跳转到记账详情页
+ */
+ gotoDetail: function (e) {
let bookkeepingId = e.currentTarget.dataset.id
console.log(`当前获取到的id是:` + bookkeepingId)
wx.navigateTo({
url: '/pages/index/bookkeepingdetail/bookkeepingdetail?form=index&bookkeepingid=' + bookkeepingId
})
-
},
- getAssetsDetail: function() {
+
+ getAssetsDetail: function () {
let that = this
let userId = wx.getStorageSync('userId');
let requestUrl = API.api.assetsDetails + '/' + userId
- AJAX.getRequest(requestUrl).then(function(response) {
+ AJAX.getRequest(requestUrl).then(function (response) {
let resData = response.data;
// 金额转换
resData.monthTotalExpenditure = FormatUtil.formatMoney(resData.monthTotalExpenditure / 100);
@@ -70,22 +93,24 @@ Page({
that.setData({
assetsDetail: resData
})
+ }).catch(err => {
+ // no doing
})
},
- getBookkeeping: function() {
- console.log(`pageNumber:` + this.data.pageNumber)
+
+ getBookkeeping: function () {
if ((this.data.pageNumber * this.data.pageSize) > this.data.totalElements && this.data.pageNumber != 0) {
- TOTAS.showToastSuccess("已经加载到底了....")
+ TOTAS.showToast("已经加载到底了....")
return
}
let that = this;
- let userId = wx.getStorageSync('userId');
- let pageNumber = this.data.pageNumber;
- let pageSize = this.data.pageSize;
- let requestUrl = API.api.bookkeepings + '?userId=' + userId + '&pageNumber=' + pageNumber + '&pageSize=' + pageSize;
- AJAX.getRequest(requestUrl).then(response => {
+ let params = {};
+ params.userId = wx.getStorageSync('userId');
+ params.pageNumber = this.data.pageNumber;
+ params.pageSize = this.data.pageSize;
+ AJAX.getRequest(API.api.bookkeepings, params).then(response => {
if (response.data.content.length == 0 && this.data.pageNumber != 0) {
- TOTAS.showToastSuccess("已经加载到底了....")
+ TOTAS.showToast("已经加载到底了....")
return
}
// 格式化数据
@@ -105,45 +130,11 @@ Page({
}
that.setData({
bookkeepingList: bookkeepingList,
- pageNumber: pageNumber + 1,
+ pageNumber: params.pageNumber + 1,
totalElements: response.data.totalElements
})
+ }).catch(err => {
+ // no doing
})
},
-
- /**
- * 生命周期函数--监听页面隐藏
- */
- onHide: function() {
-
- },
-
- /**
- * 生命周期函数--监听页面卸载
- */
- onUnload: function() {
-
- },
-
- /**
- * 页面相关事件处理函数--监听用户下拉动作
- */
- onPullDownRefresh: function() {
-
- },
-
- /**
- * 页面上拉触底事件的处理函数
- */
- onReachBottom: function() {
- // 触发到底部。进行加载数据信息
- this.getBookkeeping();
- },
-
- /**
- * 用户点击右上角分享
- */
- onShareAppMessage: function() {
-
- }
})
\ No newline at end of file
diff --git a/pages/index/index.wxml b/pages/index/index.wxml
index 09de6b924fff30b833cff910c01cbeb3fa2e326f..6ee5883a15a11c58e23400254f9a55b047d44551 100644
--- a/pages/index/index.wxml
+++ b/pages/index/index.wxml
@@ -2,17 +2,17 @@
- {{assetsDetail.monthTotalMoney}}
- 本月收支结余
+ {{assetsDetail.monthTotalMoney}}
+ 本月收支结余
- {{assetsDetail.monthTotalIncome}}
- 本月收入
+ {{assetsDetail.monthTotalIncome}}
+ 本月收入
- {{assetsDetail.monthTotalExpenditure}}
- 本月支出
+ {{assetsDetail.monthTotalExpenditure}}
+ 本月支出
@@ -25,10 +25,13 @@
{{item.consumeType.name}}
- {{item.money}} 元
+ {{item.money}}
+ {{item.money}}
-
+
+
+ 优享记账
diff --git a/pages/index/index.wxss b/pages/index/index.wxss
index f73117d5679181135201ef572308a32fd61ec77d..bbbb06dfa76ef439e4609e54caad565dea81f98e 100644
--- a/pages/index/index.wxss
+++ b/pages/index/index.wxss
@@ -12,9 +12,6 @@ page {
height: 300rpx;
background: #1E95F1;
}
-.head view{
- color: #FFFFFFFF;
-}
.profit {
height: 150rpx;
display: flex;
@@ -38,18 +35,21 @@ page {
flex-direction: column;
font-size: 28rpx;
}
+.income_white {
+ color: white;
+}
.total {
position: relative;
margin: 15rpx 0rpx
}
.total .expenditure_time {
- font-size: 30rpx;
+ font-size: 24rpx;
padding: 20rpx 20rpx;
color: #979797
}
.total .expenditure_money {
float: right;
- font-size: 30rpx;
+ font-size: 24rpx;
padding: 8rpx 20rpx;
color: #979797
}
@@ -70,10 +70,30 @@ page {
margin-left: 10rpx;
color: #020202;
}
-.expenditure_type .money {
+.te_money {
+ position: absolute;
+ right: 30rpx;
+ font-size: 32rpx;
+ padding-top: 30rpx;
+ color: red;
+}
+.ti_money {
position: absolute;
right: 30rpx;
font-size: 32rpx;
padding-top: 30rpx;
-
+ color: green;
+}
+.logo {
+ min-height: 500rpx;
+ display: flex;
+ /*使子项目水平居中 */
+ justify-content: center;
+ /*使子项目垂直居中*/
+ align-items: center;
+ color: #979797;
+ font-size: 40rpx;
+ font-weight: 300;
+ font-style: oblique;
+ font-family: SimSun;
}
\ No newline at end of file
diff --git a/pages/me/feedback/feedback.js b/pages/me/feedback/feedback.js
new file mode 100644
index 0000000000000000000000000000000000000000..3492a607cf7f9a2d1c5b7e1b96d95a169c63e200
--- /dev/null
+++ b/pages/me/feedback/feedback.js
@@ -0,0 +1,92 @@
+// pages/me/feedback/feedback.js
+const API = require('../../../utils/api.js');
+const AJAX = require('../../../utils/ajax.js');
+const Totst = require('../../../utils/toast.js');
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ textareaValue: '',
+ value:''
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+
+ },
+ textareablur:function(e) {
+ this.setData({
+ textareaValue:e.detail.value
+ })
+ },
+ submit: function (e) {
+ let that = this;
+ if (this.data.textareaValue == '') {
+ Totst.showToast("抱歉,您好像并没有说什么话");
+ }
+ let params = {};
+ params.content = this.data.textareaValue;
+ params.userId = wx.getStorageSync("userId")
+ let url = API.api.feedbacks;
+
+ AJAX.postRequest(url,params).then(response => {
+ Totst.showToast("反馈成功,感谢您的反馈");
+ that.setData({
+ value:''
+ })
+ })
+ }
+})
\ No newline at end of file
diff --git a/pages/me/feedback/feedback.json b/pages/me/feedback/feedback.json
new file mode 100644
index 0000000000000000000000000000000000000000..8835af0699ccec004cbe685ef938cd2d63ea7037
--- /dev/null
+++ b/pages/me/feedback/feedback.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/me/feedback/feedback.wxml b/pages/me/feedback/feedback.wxml
new file mode 100644
index 0000000000000000000000000000000000000000..c93f1dae266c14ebc45f7307ba9e6a0c0137fb8e
--- /dev/null
+++ b/pages/me/feedback/feedback.wxml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/pages/me/feedback/feedback.wxss b/pages/me/feedback/feedback.wxss
new file mode 100644
index 0000000000000000000000000000000000000000..83b03fce5d21a4d379ee3003b9e8b7695fbc432f
--- /dev/null
+++ b/pages/me/feedback/feedback.wxss
@@ -0,0 +1,11 @@
+.feedback .section {
+ width: 93%;
+ min-height: 300rpx;
+ border: 1rpx solid blue;
+ margin: 3% 3%;
+}
+.section textarea {
+ width: 93%;
+ min-height: 150px;
+ margin: 3% 3%;
+}
\ No newline at end of file
diff --git a/pages/me/me.js b/pages/me/me.js
index adf293a82d13ee981ae7d19bdae5f36889a405d0..dbf9ad1314bb9199462cf85c5258ec1a244d4856 100644
--- a/pages/me/me.js
+++ b/pages/me/me.js
@@ -9,19 +9,21 @@ Page({
* 页面的初始数据
*/
data: {
- userInfo: {},
- tempUserInfo: {},
- // 显示用户修改信息
- isShow: false,
- switch1:false,
- loading: false,
+ userInfo: {}, // 用户信息
+ tempUserInfo: {}, // 临时用户信息
+ isShow: false, // // 显示用户修改信息
+ isShowTemplMessage: false, // 是否开启模板消息
+ loading: false, // 加载动画
+ showPosterModel: false, // 显示海报模态框
+ posterPath: '', // 海报路径
+ animationData: {}, //动画内容
},
/**
* 生命周期函数--监听页面加载
*/
- onLoad: function(options) {
- if(options.form == 'authoriztion') {
+ onLoad: function (options) {
+ if (options.form == 'authoriztion') {
wx.setStorageSync('userId', options.userId)
}
},
@@ -29,22 +31,26 @@ Page({
/**
* 生命周期函数--监听页面初次渲染完成
*/
- onReady: function() {
+ onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
- onShow: function() {
+ onShow: function () {
this.getUserInfo();
+ this.setData({
+ isShow: false,
+ showPosterModel: false
+ })
},
- getUserInfo: function() {
+ getUserInfo: function () {
let that = this
let userId = wx.getStorageSync('userId');
let requestUrl = API.api.users + '/' + userId;
this.setData({
- loading:true
+ loading: true
})
AJAX.getRequest(requestUrl).then(response => {
console.log(response.data)
@@ -54,21 +60,13 @@ Page({
that.setData({
userInfo: userInfo,
isShow: false,
- switch1: sendMessageResult,
- loading:false
+ isShowTemplMessage: sendMessageResult,
+ loading: false
})
wx.setStorageSync('sendMessage', response.data.sendMessage)
})
},
- /**
- * 跳转到我的账单
- */
- gotoMyBill:function() {
- wx.navigateTo({
- url: '/pages/me/myBill/myBill?userid=' + wx.getStorageSync('userId')
- })
- },
- updateUserInfo: function (userId,userInfo) {
+ updateUserInfo: function (userId, userInfo) {
let requestData = {}
requestData.nickName = userInfo.nickName
requestData.avatarUrl = userInfo.avatarUrl;
@@ -79,10 +77,10 @@ Page({
AJAX.putRequest(requestUrl, requestData, false).then(response => {
console.log('用户信息更新成功啦')
this.getUserInfo()
- })
+ })
},
// 判断用户是否进行授权操作
- bindUserInfo: function(eventhandle) {
+ bindUserInfo: function (eventhandle) {
console.log('来到了bindgetUserInfo')
let that = this
if (eventhandle.detail.rawData) {
@@ -95,10 +93,10 @@ Page({
that.updateUserInfo(userId, res.userInfo)
}
})
-
+
}
},
- modalConfirm: function() {
+ modalConfirm: function () {
let that = this
console.log(this.data.tempUserInfo.monthBudget)
let tempUserInfo = this.data.tempUserInfo;
@@ -112,12 +110,12 @@ Page({
that.getUserInfo();
})
},
- modalCancel: function() {
+ modalCancel: function () {
this.setData({
isShow: false
})
},
- saveUsertell: function(e) {
+ saveUsertell: function (e) {
console.log('触发了!!!!' + e.detail.value)
let userInfo = {};
userInfo.monthBudget = e.detail.value * 100;
@@ -125,44 +123,17 @@ Page({
tempUserInfo: userInfo
})
},
- showModel: function() {
+ showModel: function () {
console.log('显示月预算')
this.setData({
isShow: true
})
},
- /**
- * 生命周期函数--监听页面隐藏
- */
- onHide: function() {
-
- },
-
- /**
- * 生命周期函数--监听页面卸载
- */
- onUnload: function() {
-
- },
-
- /**
- * 页面相关事件处理函数--监听用户下拉动作
- */
- onPullDownRefresh: function() {
-
- },
-
- /**
- * 页面上拉触底事件的处理函数
- */
- onReachBottom: function() {
-
- },
/**
* 用户点击右上角分享
*/
- onShareAppMessage: function() {
+ onShareAppMessage: function () {
},
/**
@@ -180,11 +151,130 @@ Page({
AJAX.putRequest(requestUrl, requestData, false).then(response => {
console.log('用户信息更新成功啦')
this.getUserInfo()
- })
- // console.log(detail)
- // this.setData({
- // 'switch1': detail.value
- // })
+ })
+ },
+ /**
+ * 生成海报
+ */
+ createPoster() {
+ // 隐藏tab
+ TOAST.hideTabBar();
+ if(this.data.posterPath !== '') {
+ this.setData({showPosterModel:true})
+ return
+ }
+ let that = this
+ let requestUrl = API.api.posters + '/' + wx.getStorageSync('userId')
+ let requestData = {}
+ AJAX.postRequest(requestUrl, requestData, true).then(response => {
+ console.log("请求成功啦!返回来的数据是:" + JSON.stringify(response))
+ if (response.code != 200) {
+ TOAST.showToast("生成海报图异常:" + response.msg)
+ return
+ }
+ that.setData({
+ posterPath: API.api.imageHost + response.data
+ })
+ console.log("that.data.posterPath:" + that.data.posterPath)
+ that.clickPup();
+ })
+ },
+ hideModel() {
+ this.setData({
+ showPosterModel: false,
+ })
+ },
+ // 预览图片
+ lockPic() {
+ let urls = []
+ urls.push(this.data.posterPath)
+ wx.previewImage({
+ urls: urls,
+ current: this.data.posterPath
+ })
+ },
+ // 保存图片
+ savePic() {
+ let that = this
+ wx.downloadFile({
+ url: this.data.posterPath,
+ success(res) {
+ console.log("文件保存到本地啦!!!")
+ wx.saveImageToPhotosAlbum({
+ filePath: res.tempFilePath,
+ success(response) {
+ TOAST.showToast("保存成功")
+ },
+ fail: function (err) {
+ TOAST.showToast("保存文件失败")
+ },
+ complete:function() {
+ that.hideModal()
+ //开启tab
+ TOAST.showTabBar()
+ }
+ })
+ }
+ })
+ },
+ clonePic() {
+ this.setData({
+ showPosterModel:false
+ })
+ },
+ /**
+ * 开启动画
+ */
+ clickPup: function () {
+ // 用that取代this,防止不必要的情况发生
+ var that = this;
+ // 创建一个动画实例
+ var animation = wx.createAnimation({
+ // 动画持续时间
+ duration: 100,
+ // 定义动画效果,当前是匀速
+ timingFunction: 'linear'
+ })
+ // 将该变量赋值给当前动画
+ that.animation = animation
+ // 先在y轴偏移,然后用step()完成一个动画
+ animation.translateY(200).step()
+ // 用setData改变当前动画
+ that.setData({
+ // 通过export()方法导出数据
+ animationData: animation.export(),
+ // 改变view里面的Wx:if
+ showPosterModel: true
+ })
+ // 设置setTimeout来改变y轴偏移量,实现有感觉的滑动
+ setTimeout(function () {
+ animation.translateY(0).step()
+ that.setData({
+ animationData: animation.export()
+ })
+ }, 200)
+ },
+ /**
+ * 关闭动画
+ */
+ hideModal: function (e) {
+ var that = this;
+ var animation = wx.createAnimation({
+ duration: 1000,
+ timingFunction: 'linear'
+ })
+ that.animation = animation
+ animation.translateY(200).step()
+ that.setData({
+ animationData: animation.export()
- }
+ })
+ setTimeout(function () {
+ animation.translateY(0).step()
+ that.setData({
+ animationData: animation.export(),
+ showPosterModel: false
+ })
+ }, 200)
+ },
})
\ No newline at end of file
diff --git a/pages/me/me.json b/pages/me/me.json
index 35adee289b9cd9fd9ce10579db92f77646de4e95..d258d16030a670a62571ce6cd00d57646840660a 100644
--- a/pages/me/me.json
+++ b/pages/me/me.json
@@ -11,6 +11,8 @@
"i-cell-group": "../../template/dist/cell-group/index",
"i-cell": "../../template/dist/cell/index",
"i-spin": "../../template/dist/spin/index",
- "i-switch": "../../template/dist/switch/index"
+ "i-switch": "../../template/dist/switch/index",
+ "i-button": "../../template/dist/button/index",
+ "i-icon": "../../template/dist/icon/index"
}
}
\ No newline at end of file
diff --git a/pages/me/me.wxml b/pages/me/me.wxml
index fe4e1aab4672fed4ca169e9e0051fe47f539b832..d6514fb9ac86be24b88d2e5568176eb3dbe2a7cf 100644
--- a/pages/me/me.wxml
+++ b/pages/me/me.wxml
@@ -1,46 +1,70 @@
- 加载中
+ 加载中
-
-
- {{userInfo.nickName}}
-
-
-
-
-
-
- 开启
- 关闭
-
+
+
+ {{userInfo.nickName}}
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+ 开启
+ 关闭
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ 保存图片
+
\ No newline at end of file
diff --git a/pages/me/me.wxss b/pages/me/me.wxss
index cfbcec0b8a4a64a5d8947707abad8dc86a4cccb6..c9548e4e889f3f5773767a43f9e80a2182323d7c 100644
--- a/pages/me/me.wxss
+++ b/pages/me/me.wxss
@@ -6,12 +6,12 @@
}
.wx_avatar {
- width: 96%;
+ width: 100%;
height: 300rpx;
- margin: 2% 2%;
+ /* margin: 2% 2%; */
background: #1E95F1;
text-align: center;
- border-radius: 3%
+ /* border-radius: 3% */
}
.wx_avatar button {
width: 120rpx;
@@ -20,7 +20,8 @@
margin-top: 30rpx;
margin-bottom: 30rpx;
border: 0rpx;
-
+ background-size: 100%;
+ background-repeat: no-repeat;
}
.wx_avatar button image {
width: 100%;
@@ -66,20 +67,102 @@
padding: 40rpx 0rpx;
height: 32rpx;
}
-button {
- width: 80%;
- background: rgb(226, 26, 60);
- line-height:64rpx;
- color: white
+
+/* 模态框 */
+.tellsection input {
+ color: #000;
+ width: 100%;
+}
+
+.model {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ background-color: #A0A0A0;
+ z-index: 0;
+}
+
+.ruleModel {
+ margin: 30rpx 13%;
+ width: 536rpx;
+ height: 873rpx;
+}
+.swiper-image {
+ width: 100%;
+ height: 100%;
+}
+.savepic {
+ width: 400rpx;
+ height: 70rpx;
+ background-color: #9ACEFE;
+ color: #FFFFFF;
+ font-size: 25rpx;
+ text-align: center;
+ margin-top: 70rpx;
}
/* 模态框 */
-.tellinput {
- /* border: 1px solid #efeff4; */
+
+.choose {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ background-color: rgba(0, 0, 0, 0.5);
}
-.tellsection input {
- color: #000;
+.choose_value {
+ height: 75%;
width: 100%;
+ position: fixed;
+ bottom: 0;
+ background-color: white;
+}
+.choose_value i-button {
+ position: fixed;
+ bottom: 0;
+ right: 35%;
+
+}
+
+.upload_value {
+ text-align: center;
+ padding: 10rpx;
+ font-size: 30rpx;
+}
+
+.upload_data {
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+}
+
+.upload_show {
+ width:60%;
+ height: 700rpx;
+ padding: 40rpx;
+}
+
+.upload_show image {
+ width: 100%;
+ height: 100%;
+ border-radius: 5%;
+ border: 1rpx solid rgb(177, 177, 177);
+}
+
+.upload_close {
+ width: 100rpx;
+ height: 100rpx;
+ position: absolute;
+ right: 0rpx;
+ top: -50rpx;
+}
+
+.upload_close image{
+ width: 100%;
+ height: 100%;
}
\ No newline at end of file
diff --git a/pages/me/myBill/myBill.js b/pages/me/myBill/myBill.js
index 4bb9107ec8164001e8cb53844b2be442c5805311..2f98f91188a0a7e27e5858bb891953043ebe9531 100644
--- a/pages/me/myBill/myBill.js
+++ b/pages/me/myBill/myBill.js
@@ -2,7 +2,7 @@
import * as echarts from '../../../template/ec-canvas/echarts';
const API = require('../../../utils/api.js');
const AJAX = require('../../../utils/ajax.js');
-const DateUtils = require('../../../utils/date.js')
+const DateUtils = require('../../../utils/util.js')
/**
* 初始化图表
diff --git a/pages/me/myBillDetail/myBillDetail.js b/pages/me/myBillDetail/myBillDetail.js
new file mode 100644
index 0000000000000000000000000000000000000000..796664542ddf59fc262c8cccbef37e2446399d00
--- /dev/null
+++ b/pages/me/myBillDetail/myBillDetail.js
@@ -0,0 +1,111 @@
+// pages/me/myBillDetaill/myBillDetaill.js
+const API = require('../../../utils/api.js');
+const AJAX = require('../../../utils/ajax.js');
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ nowDate: '2020',
+ starYear: '1997',
+ endYear: '2090',
+ yearBillMap:{
+ 'totalMoney':'0',
+ 'income': '0',
+ 'pay': '0'
+ },
+ yearBillDetailMap: [
+ { "categorie": "12月", "income": "0", "pay": "0", "totalMoney": "0" },
+ { "categorie": "11月", "income": "0", "pay": "0", "totalMoney": "0" },
+ { "categorie": "10月", "income": "0", "pay": "0", "totalMoney": "0" },
+ { "categorie": "10月", "income": "0", "pay": "0", "totalMoney": "0" },
+ { "categorie": "10月", "income": "0", "pay": "0", "totalMoney": "0" },
+ { "categorie": "10月", "income": "0", "pay": "0", "totalMoney": "0" },
+ { "categorie": "9月", "income": "0", "pay": "0", "totalMoney": "0" },
+ { "categorie": "8月", "income": "0", "pay": "0", "totalMoney": "0" },
+ { "categorie": "7月", "income": "0", "pay": "0", "totalMoney": "0" },
+ { "categorie": "6月", "income": "0", "pay": "0", "totalMoney": "0" },
+ { "categorie": "4月", "income": "0", "pay": "0", "totalMoney": "0" },
+ { "categorie": "3月", "income": "0", "pay": "0", "totalMoney": "0" },
+ { "categorie": "2月", "income": "0", "pay": "0", "totalMoney": "0" },
+ { "categorie": "1月", "income": "0", "pay": "0", "totalMoney": "0" },
+ ]
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+ this.getTimeResult(new Date().getFullYear());
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+
+ },
+ bindDateChange: function (e) {
+ console.log('picker发送选择改变,携带值为', e.detail.value)
+ this.setData({
+ nowDate: e.detail.value
+ })
+ this.getTimeResult(e.detail.value)
+ },
+ getTimeResult: function (valueTime) {
+ console.log("这里是时间点:" + valueTime)
+ var that = this;
+ let params = {}
+ params.yearTime = valueTime;
+ let resultUrl = API.api.assetsDetails + '/yeartime/' + wx.getStorageSync('userId');
+ AJAX.getRequest(resultUrl,params).then(response => {
+ console.log(response.data)
+ that.setData({
+ yearBillDetailMap: response.data.yearBillDetailMap,
+ yearBillMap: response.data.yearBillMap
+ })
+ })
+ },
+})
\ No newline at end of file
diff --git a/pages/me/myBillDetail/myBillDetail.json b/pages/me/myBillDetail/myBillDetail.json
new file mode 100644
index 0000000000000000000000000000000000000000..3d67f7495de84b2ffa3a3975d23ac94b2ec7f8a4
--- /dev/null
+++ b/pages/me/myBillDetail/myBillDetail.json
@@ -0,0 +1,7 @@
+{
+ "navigationBarBackgroundColor": "#1E95F1",
+ "navigationBarTextStyle": "white",
+ "navigationBarTitleText": "消费账单",
+ "backgroundColor": "#ffffff",
+ "backgroundTextStyle": "light"
+}
\ No newline at end of file
diff --git a/pages/me/myBillDetail/myBillDetail.wxml b/pages/me/myBillDetail/myBillDetail.wxml
new file mode 100644
index 0000000000000000000000000000000000000000..11dd01affe6786b031734d8d2f2841dfa60bba8a
--- /dev/null
+++ b/pages/me/myBillDetail/myBillDetail.wxml
@@ -0,0 +1,44 @@
+
+
+
+
+
+ {{nowDate}} 年
+
+
+
+
+ {{yearBillMap.pay}}
+ 支出
+
+
+ {{yearBillMap.income}}
+ 收入
+
+
+ {{yearBillMap.totalMoney}}
+ 结余
+
+
+
+
+
+
+ 月份
+ 收入
+ 支出
+ 结余
+
+
+
+ {{item.categorie}}
+ {{item.income}}
+ {{item.pay}}
+ {{item.totalMoney}}
+ {{item.totalMoney}}
+ {{item.totalMoney}}
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/me/myBillDetail/myBillDetail.wxss b/pages/me/myBillDetail/myBillDetail.wxss
new file mode 100644
index 0000000000000000000000000000000000000000..d4495e4f16c7559ca554a6992789f0d6690ab3c6
--- /dev/null
+++ b/pages/me/myBillDetail/myBillDetail.wxss
@@ -0,0 +1,74 @@
+page {
+ background: #F8FCFF
+}
+.consume {
+ display: flex;
+ flex-direction: column;
+
+}
+.head {
+ width: 100%;
+ height: 260rpx;
+ background: #1E95F1;
+}
+.profit {
+ height: 130rpx;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ color: #FFFFFFFF;
+ flex-direction: column;
+ font-size: 32rpx;
+}
+.inc_exp {
+ height: 130rpx;
+ display: flex;
+ width: 100%;
+}
+.inc_exp .income {
+ width: 50%;
+ display: flex;
+ color: #FFFFFFFF;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+ font-size: 28rpx;
+}
+.income_white {
+ color: white;
+}
+
+/** 表格 **/
+.table {
+ border: 0px solid darkgray;
+}
+.tr {
+ display: flex;
+ width: 100%;
+ justify-content: center;
+ height: 70rpx;
+ align-items: center;
+ border: 1rpx solid #F5F4F9;
+}
+.td {
+ width:40%;
+ justify-content: center;
+ text-align: center;
+ color: #010101;
+ font-size: 24rpx;
+}
+.th {
+ width: 40%;
+ justify-content: center;
+ background: #F8FCFF;
+ color: #ADABB1;
+ display: flex;
+ align-items: center;
+ font-size: 25rpx;
+}
+.td_green{
+ color: green;
+}
+.td_red{
+ color: red;
+}
\ No newline at end of file
diff --git a/pages/me/officialaccount/officialAccount.js b/pages/me/officialaccount/officialAccount.js
new file mode 100644
index 0000000000000000000000000000000000000000..bdde6d63799cb2c05473d041df024a3d8b4c05f2
--- /dev/null
+++ b/pages/me/officialaccount/officialAccount.js
@@ -0,0 +1,31 @@
+// pages/me/officialaccount/officialAccount.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+
+ },
+})
\ No newline at end of file
diff --git a/pages/me/officialaccount/officialAccount.json b/pages/me/officialaccount/officialAccount.json
new file mode 100644
index 0000000000000000000000000000000000000000..8835af0699ccec004cbe685ef938cd2d63ea7037
--- /dev/null
+++ b/pages/me/officialaccount/officialAccount.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/me/officialaccount/officialAccount.wxml b/pages/me/officialaccount/officialAccount.wxml
new file mode 100644
index 0000000000000000000000000000000000000000..0691288fd12143de9ae85fe1430fb5f26b307bf8
--- /dev/null
+++ b/pages/me/officialaccount/officialAccount.wxml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/pages/me/officialaccount/officialAccount.wxss b/pages/me/officialaccount/officialAccount.wxss
new file mode 100644
index 0000000000000000000000000000000000000000..39164b2e3b8994c35833a8eab44481bab3efc320
--- /dev/null
+++ b/pages/me/officialaccount/officialAccount.wxss
@@ -0,0 +1,13 @@
+/* pages/me/officialaccount/officialAccount.wxss */
+page {
+ color: white;
+}
+.official_img {
+ display: flex;
+ /*使子项目水平居中 */
+ justify-content: center;
+ padding: 10rpx 10rpx;
+}
+.official {
+ margin-top: 10rpx;
+}
\ No newline at end of file
diff --git a/project.config.json b/project.config.json
index 483df2202b1d3a305ed6fff19c90ae109d080346..69a136ccc59da7be57d5574bfa188267731e7184 100644
--- a/project.config.json
+++ b/project.config.json
@@ -83,6 +83,33 @@
"pathName": "pages/index/authoriztion/authoriztion",
"query": "form=bookkeepingDetail&bookkeepingid=296",
"scene": null
+ },
+ {
+ "id": -1,
+ "name": "pages/me/myBillDetail/myBillDetail",
+ "pathName": "pages/me/myBillDetail/myBillDetail",
+ "query": "",
+ "scene": null
+ },
+ {
+ "id": -1,
+ "name": "pages/me/officialaccount/officialAccount",
+ "pathName": "pages/me/officialaccount/officialAccount",
+ "query": "",
+ "scene": null
+ },
+ {
+ "id": -1,
+ "name": "pages/me/feedback/feedback",
+ "pathName": "pages/me/feedback/feedback",
+ "query": "",
+ "scene": null
+ },
+ {
+ "id": -1,
+ "name": "pages/consume_test/consume_test",
+ "pathName": "pages/consume_test/consume_test",
+ "scene": null
}
]
}
diff --git a/template/dist/cell/index.wxml b/template/dist/cell/index.wxml
index c3683e34d17b7f4b0f6ff020e478529816e2fa0d..30703449d09fd099f228a52e3aa0bacc0b7d3eb6 100644
--- a/template/dist/cell/index.wxml
+++ b/template/dist/cell/index.wxml
@@ -1,5 +1,5 @@
-
+
diff --git a/template/dist/icon/index.wxss b/template/dist/icon/index.wxss
index b18dcbba5b61dd7be503431bee3e836b4fd8a9ab..96c5c67b58db5918dee0ba7a08065a5b7efa053f 100644
--- a/template/dist/icon/index.wxss
+++ b/template/dist/icon/index.wxss
@@ -1 +1,44 @@
-@font-face{font-family:iconfont;src:url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff')}.i-icon{display:inline-block;font-family:iconfont;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-rendering:auto;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle}.i-icon-accessory:before{content:"\e6dd"}.i-icon-activity:before{content:"\e6de"}.i-icon-activity_fill:before{content:"\e6df"}.i-icon-add:before{content:"\e6e0"}.i-icon-addressbook_fill:before{content:"\e6e2"}.i-icon-addressbook:before{content:"\e6e3"}.i-icon-barrage_fill:before{content:"\e6e4"}.i-icon-barrage:before{content:"\e6e5"}.i-icon-browse_fill:before{content:"\e6e6"}.i-icon-browse:before{content:"\e6e7"}.i-icon-brush:before{content:"\e6e8"}.i-icon-brush_fill:before{content:"\e6e9"}.i-icon-businesscard_fill:before{content:"\e6ea"}.i-icon-businesscard:before{content:"\e6eb"}.i-icon-camera_fill:before{content:"\e6ec"}.i-icon-camera:before{content:"\e6ed"}.i-icon-clock_fill:before{content:"\e6ee"}.i-icon-clock:before{content:"\e6ef"}.i-icon-close:before{content:"\e6f0"}.i-icon-collection_fill:before{content:"\e6f1"}.i-icon-collection:before{content:"\e6f2"}.i-icon-computer_fill:before{content:"\e6f3"}.i-icon-computer:before{content:"\e6f4"}.i-icon-coordinates_fill:before{content:"\e6f5"}.i-icon-coordinates:before{content:"\e6f6"}.i-icon-coupons_fill:before{content:"\e6f7"}.i-icon-coupons:before{content:"\e6f8"}.i-icon-createtask_fill:before{content:"\e6f9"}.i-icon-createtask:before{content:"\e6fa"}.i-icon-customerservice_fill:before{content:"\e6fb"}.i-icon-customerservice:before{content:"\e6fc"}.i-icon-delete_fill:before{content:"\e6fd"}.i-icon-delete:before{content:"\e6fe"}.i-icon-document:before{content:"\e6ff"}.i-icon-document_fill:before{content:"\e700"}.i-icon-dynamic_fill:before{content:"\e701"}.i-icon-dynamic:before{content:"\e702"}.i-icon-editor:before{content:"\e703"}.i-icon-eit:before{content:"\e704"}.i-icon-emoji_fill:before{content:"\e705"}.i-icon-emoji:before{content:"\e706"}.i-icon-enter:before{content:"\e707"}.i-icon-enterinto:before{content:"\e708"}.i-icon-enterinto_fill:before{content:"\e709"}.i-icon-feedback_fill:before{content:"\e70a"}.i-icon-feedback:before{content:"\e70b"}.i-icon-flag_fill:before{content:"\e70c"}.i-icon-flag:before{content:"\e70d"}.i-icon-flashlight:before{content:"\e70e"}.i-icon-flashlight_fill:before{content:"\e70f"}.i-icon-fullscreen:before{content:"\e710"}.i-icon-group:before{content:"\e711"}.i-icon-group_fill:before{content:"\e712"}.i-icon-homepage_fill:before{content:"\e713"}.i-icon-homepage:before{content:"\e714"}.i-icon-integral_fill:before{content:"\e715"}.i-icon-integral:before{content:"\e716"}.i-icon-interactive_fill:before{content:"\e717"}.i-icon-interactive:before{content:"\e718"}.i-icon-keyboard:before{content:"\e719"}.i-icon-label:before{content:"\e71a"}.i-icon-label_fill:before{content:"\e71b"}.i-icon-like_fill:before{content:"\e71c"}.i-icon-like:before{content:"\e71d"}.i-icon-live_fill:before{content:"\e71e"}.i-icon-live:before{content:"\e71f"}.i-icon-lock_fill:before{content:"\e720"}.i-icon-lock:before{content:"\e721"}.i-icon-mail:before{content:"\e722"}.i-icon-mail_fill:before{content:"\e723"}.i-icon-message:before{content:"\e724"}.i-icon-message_fill:before{content:"\e725"}.i-icon-mine:before{content:"\e726"}.i-icon-mine_fill:before{content:"\e727"}.i-icon-mobilephone_fill:before{content:"\e728"}.i-icon-mobilephone:before{content:"\e729"}.i-icon-more:before{content:"\e72a"}.i-icon-narrow:before{content:"\e72b"}.i-icon-offline_fill:before{content:"\e72c"}.i-icon-offline:before{content:"\e72d"}.i-icon-other:before{content:"\e72e"}.i-icon-picture_fill:before{content:"\e72f"}.i-icon-picture:before{content:"\e730"}.i-icon-play:before{content:"\e731"}.i-icon-play_fill:before{content:"\e732"}.i-icon-playon_fill:before{content:"\e733"}.i-icon-playon:before{content:"\e734"}.i-icon-praise_fill:before{content:"\e735"}.i-icon-praise:before{content:"\e736"}.i-icon-prompt_fill:before{content:"\e737"}.i-icon-prompt:before{content:"\e738"}.i-icon-redpacket_fill:before{content:"\e739"}.i-icon-redpacket:before{content:"\e73a"}.i-icon-refresh:before{content:"\e73b"}.i-icon-remind_fill:before{content:"\e73c"}.i-icon-remind:before{content:"\e73d"}.i-icon-return:before{content:"\e73e"}.i-icon-right:before{content:"\e73f"}.i-icon-scan:before{content:"\e740"}.i-icon-send:before{content:"\e741"}.i-icon-service_fill:before{content:"\e742"}.i-icon-service:before{content:"\e743"}.i-icon-setup_fill:before{content:"\e744"}.i-icon-setup:before{content:"\e745"}.i-icon-share_fill:before{content:"\e746"}.i-icon-share:before{content:"\e747"}.i-icon-success_fill:before{content:"\e748"}.i-icon-success:before{content:"\e749"}.i-icon-suspend:before{content:"\e74a"}.i-icon-switch:before{content:"\e74b"}.i-icon-systemprompt_fill:before{content:"\e74c"}.i-icon-systemprompt:before{content:"\e74d"}.i-icon-tailor:before{content:"\e74e"}.i-icon-task:before{content:"\e74f"}.i-icon-task_fill:before{content:"\e750"}.i-icon-tasklist_fill:before{content:"\e751"}.i-icon-tasklist:before{content:"\e752"}.i-icon-time_fill:before{content:"\e753"}.i-icon-time:before{content:"\e754"}.i-icon-translation_fill:before{content:"\e755"}.i-icon-translation:before{content:"\e756"}.i-icon-trash:before{content:"\e757"}.i-icon-trash_fill:before{content:"\e758"}.i-icon-undo:before{content:"\e759"}.i-icon-video:before{content:"\e75a"}.i-icon-video_fill:before{content:"\e75b"}.i-icon-warning_fill:before{content:"\e75c"}.i-icon-warning:before{content:"\e75d"}.i-icon-search:before{content:"\e75e"}.i-icon-searchfill:before{content:"\e75f"}.i-icon-publishgoods_fill:before{content:"\e760"}.i-icon-shop_fill:before{content:"\e761"}.i-icon-transaction_fill:before{content:"\e762"}.i-icon-packup:before{content:"\e763"}.i-icon-unfold:before{content:"\e764"}.i-icon-financial_fill:before{content:"\e765"}.i-icon-commodity:before{content:"\e766"}
\ No newline at end of file
+@font-face{font-family:iconfont;src:url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAADscAAsAAAAAdLQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAAQwAAAFZW7klYY21hcAAAAYAAAAORAAAI/nDS68xnbHlmAAAFFAAAL68AAF2IQcM2EGhlYWQAADTEAAAALwAAADYRc1XVaGhlYQAANPQAAAAcAAAAJAfeBAxobXR4AAA1EAAAABcAAAIsK+kAAGxvY2EAADUoAAABGAAAARhydooIbWF4cAAANkAAAAAfAAAAIAGeAKBuYW1lAAA2YAAAAUUAAAJtPlT+fXBvc3QAADeoAAADdAAABqJtuHD2eJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkYWCcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGBwYKp6nMTf8b2CIYW5gaAAKM4LkANrfC9wAeJzF1Xd3VHUYxPHvJiG00HvvvfdOKKH33jsEu9gQBQU78h5RDupvVIpSLKAQ5+74D6+Azflk797sZu+553lmgE5Ao023Jmi4SM1H1C74bK1+vpFu9fNNtTa/7uKfBj9fKrfU3tFRP7pZbteP6h+sv6Nn/ajBn23yNzTT2ee6+v90p4Ue/msvetOHvvSjPwMYyCAGM4ShDGM4IxjJKEYzhrGMYzwTmMgkJjOFqUzz9cxgJrOYzRzmMo/5LGAhi1jMEpayjOWsYCWtrGI1a1hLG+tYzwY2sonNbGEr29jODnayi93sYS/72M8BDnKIwxzhKMc4zglOcorTnOEs52jnPK/wKq/xOm/wJm/xNhd4h3d5j/f5gIt8yCU+4mMuc4VP+JSrXOMzPucLvuQrvuYbrvMtN3xTmnlpj9rL++oXHy3Vr+br/7/yXfHdC19iuRnVlJXvoprQ8n1UU1puRTW95XZ4yig/hOeN8mN48ig/hWeQUqKa6qLwXFJ+jurqyi/hWaX8GtVMlzvh+aXcDU8y5V54pin3w9NN+S0855TfwxNPeRCefcrD8BZQHoX3gfI4vBmUP8I7QvkzvC2Uv8J7Q/k7vEGUJ+FdojwNbxXln/B+Uf4NbxrlWXjnKM/D20fpCO8h1W2qeCNRLbybqCG8pagxvK+oKby5qFN4h1FzeJtR5/Beoy5RJZG6hncddQtvPeoe3n/UEk4C1COcCahnOB1Qr3BOoN7hxEB9wtmB+oZTBPUL5wnqH04WNCCcMWhgOG3QoHDuoMHhBEJDwlmEhoZTCQ0L5xMaHk4qNCKcWWhkOL3QqHCOodHhRENjwtmGxoZTDo0L5x0aH04+NCGcgWhiOA3RpHAuosnhhERTwlmJpoZTE00L5yeaHk5SNCOcqWhmOF3RrHDOotnhxEVzwtmL5oZTGM0L5zGaH05mtCCc0WhhOK3RonBuo8XhBEdLwlmOloZTHS0L5ztaHk56tCKc+WhlOP1Ra7gH0KpwI6DV4W5Aa8ItgdaG+wK1hZsDrQt3CFofbhO0IdwraGO4YdCmcNegzeHWQVvC/YO2hpsIbQt3Etoebie0I9xTaGe4sdCucHeh3eEWQ3vCfYb2RpXL2hfuOLQ/3HboQLj30MFwA6JD4S5Eh8OtiI6E+xEdDTclOhbuTHQ83J7oRLhH0clwo6JT4W5Fp8Mti86E+xadDTcvOhfuYNQe3PgPppG6SwAAAHicnXwJnFxlle89391vrffW1rV1V3V1VaXT6e50V1dVSEh3ZSEhJAQSSAIJTBoigbCqLMEo0G5sKqIMLijYiCs/QXGGGYaRsXAW1Ke+GXFGcWRsH46KT+eh4sy8N9M375zv3lt9q5eIQvrudb9zzvd95/zP8l1BFoSTPxK/JPYIMWGVMCZsFc4VBFCGoD/M8lCsToywIUgU5UQqHharpWpRLfWPiBsh1a/Ek+ONiUpKUZUIhKEXasXxRnWEVaE+Mck2wHgyD5DOZs6zyjlLvBeMnmrvO+2z2Mch0VfKRSaH7R1rpuLjhZh2PGhZact6t6bIssaYFAnDNamkLuuGYn9CjmQSX+obZH0QTFczuy4MFbLWJXdOXJsvp3SAmRmIZQvhT0+ZGRP/vSWTjFlpNRrSejKh0kAcjv840BML5isvCfgf0EY8weaELXgyAqWxfkV1SB9vAvLSr4LSX5nA49rYeDJOZ9URmGh4N8MQ72XjdNpsNCcq4s7U+kJxfdJ+IRFIrc1XeqFixDKG/X0jE9OhmltVXZe1nx+bGUv19KRgjRFPG/Z3Cv39U3sP7u2DdTLLQZq9hW7a30+saxZyUNXxl/YLOr4FKrl15+Tt74yOJje01tPP6dbzhT0H90719xegKSuD44X1xBL14SvitFgQVKFPmBJ2CgcEoazUiv11s1ieGKslqKs2QmePPVMsl+rIk5KHzj4MqtkLqeIkNM0RgCL1bqlI/ZzyHYsFgPlngbXm2zNWzmrj320w32Yt72wmOwAwkGUtvrfPACFsWeGTfOs7rokivPigGKULUWcL7OLZrvNKbv72fBmgnGcn8mX7Enw7/pt1doIgdfhOC2VhXNiIvbocV4lifQRE7FAFWahMNGoq/hW9cyh2uBYLfiZYGwb+coH2gp98mJuf9phkrywi+uKLcxX7YYfKdpi2Fuy2S7kK4E140R2HLdYWcthP4w3sJUe+JtGcMLmca0UznmTUlNsovsYTotXi29zie4Ijk/8WZ3GMB4SUUBLOIpnQ+3BCYhtV/3GNtjjT8UpsBKo0qFFq1QqXGcoEd2HIQ8qZ2lOAI35mhhrs3tzTOcqpbzjHChWh0j+y/qzXMRgo7DymJPNMLSXZ6ZkBEXLQdsQy4+xazs6ekVab4djIacdWn5XpZ0d2HhvanjZXifrq9DvkRLqQvjU1hLwpi3irCZuEy7r5U1fir4gDotHETu4lfhJQdw4TyOMIyMj9JGxElVD9Q1kPz3+FqbL6+OHDj2uSal/BpkbXTgFMrR2dgk+gWPqIrWVlkmetLpm4Epp/5rhsMPl0STpdZoYMsWOjLYDWqLP7kDhkprevOrbzCFtOXD0kLhoLOM5m2LMorx5hQJhAWTkTgA9+eaJBWjpOyr6SqnlHEw0odqsCVvDNXvvbC/wXOuyzkXlv3jt7r6OnnfG/1zkDnFJZW3CfxD3pLqTxrZxG6tOq0EQqfT2X6urFBT2E07ZYX0QoFJbpI7/SITLZzGJSu+XPJxYNyjYTWovJFRin9w1sVggJKOTucVTGAeSMIfynxFNIPd7DJyah3piAm9mZjcYOgDObjTPhl1CtDr336NF71lQrYGjVwaF7Lr/8nqHVFQ0uOJOe2tFwdnfIW9eM72Zs9/iaLXJsxBTPHB3bydjOsdHtLD6y0M9Ek4kSHOV6MKkgPdVKo4n/kIZkvOkQhlQpSSSp2piQw9jbVWRgPJnyxj3SSrpyGO75zKffwxiI8McPz97HxCZ7rN1+DOlkj371q48yzf4qDDRILLhpNc5kHmdwXfhPQ8En4oqpRp4MBb+YkK1a8vlw5NsJpNz8XiTy3WhsFJXmQPZM2sx0uKTdAi9vE0EQ0ZoZQj/yUm2moAopqOPOMcMp1OxIba0x7lhudvKJLU/Y53wBWk/Y4QtY8wmrHrPPDejIwUB2VtKlTBy+EINvfgGfOvcJeurLF1wAP/xCjJ7KRSR5lvo4Bl+I16j5Dg0BIS5kiIJKfwSbSzWxF0cZCaoWq+qsKl73RLwW2zoM/7IlNv834aPj2NwDnx622xCAqTVsIzawZfhftsRr9qrQ5fWPkrEYx7v2b2FqVFgy9reT3UZtVvEmprrCcbmKymwKUQjvvmajRiMwriZT+H8exUPTeMkkniNTFG4vM0FoM/8qs8KRYCKIhj8bjlTGIZDNxDWJpa2fRFLswsVzZq5rzrg7S25Gswji1HjP6t5hVFq1yupUXAvoCc0Yt3pMeHHJfNIWyWCVsE5oCbuEq1fW6/7jFGqB9GJW0fg7g3qSg9A4YrpqqlJtkIJHxJdIpjhi5eqdXkNW73eIZ+8yesN+Z9tsjDfMWyCcDEdQAzyYyQZgfFcNAOUYCVtMTkV+YqWZxQrLSWuWCbbAFqsY+7yEEo2oHwtEIoHVRiRiTAa0eGp1pYay7ImrKNy0uU6KmD3WeDTj6aMZbhOHUWaO7eL2rIxaE9URqc4IyhJ1UgIhRQqRxTgpJAQbLLr1IGMHt/ItvEPTjuWNwVQ7NWjkj2laMpNNaBqb5kdM8J7D7dVsSzKbTW5hSn/SPjNVVBgdwVPJ/o7NmUP9WBXWCqcLQtOsYXs0cvuglobSAk2Luo2gNg1vUkaOLhqBuftGwJDakgEj9/moc+U17XTEk4ONxt5GY9DHzQ3w1JWiqkhX2mfCf25NELUk6DOdH8JTKOj7gX60t3HSxxnHT78Vb0UVEBHqfCSijiey8qRElf5RqMQc8pABpRdoFvbSGELmyB/C+1VOuNwkn4E/U0b1ocSd+3ziXKrH0sbVeuH+5yQ4fUJVNgT1Uni9Bmsuu+qS1UzZoGdjxnpJaZwO0nN2/0F6+hA+wv7HIfIPaANXPxeyrNDTlxrpmH6VDjdKz91/9jvGmLI+VDJC6/VAb19vzlDXkz+yXhLXvnP3/c9dc5AePogPbD9EHsZB3cpy3+E/Ob8BRNCbhbOFCxGT8vHT5GNJXOAWvYcV2RVdvO2yWYXl2WfCiUdE8ZETzrbDP5HTxb+le/zfiPLSr+Z+UX05SZzXeduJR9gtHTGgt4RvDC4jBvvRp0l0z4VRbvg62LmcWFyMvh3HMZ7oaGJGQNWhEmbodSJP403d4ZMVIE+vsV+yf2xkLNAhb7+kg4UOXA7vICPwHsjxO/ZLeIHu2D+2X6I2+aP42wXf9J3YD4N40qiM4mxA4faToqK/PpzZKM0U74JxFGYD7zaa4rVJs/BXSkjcF1kX2cfC8pcLZupuSYailAxkw4/KUeXR/LBcAFmCP0/VlRzoymP5/GOKDjmlnrpDiir4C02l4R8pFr6sRCVPpxAtPTgiBN46t4BNogvn8hRpzj72mqlkfx6JSNn3xEfj78mK4cj1DyUrxrbtRiX50NbXTv4fRYeTD51lGGc9lByOvj4l5WL33hvLSamUw5b8eD7/uHwqtly+prFPM4iGhViJDHkx4TMnQ1AnZVQXuUUpolJ6cSP0Z0A6REPmVdocAinTDxvnn8Yteoj9MLELdcqEo9InULfsgs+RpvkOrCH7JnbaJDxTRW1YLybQYpnljtFahgBqmG2bf5r+sJ1lSYD+n+3aBU9RQy1PtfnIIBXX4bnA53cR+9Kb1mgiYmPO1CaTMDbe5N4RamHCZA4ka+y4DWcW2zXWmLSyWWuyMbaLiY/AnHcXt7AfJ97kR7bv2ZlI7Nyz/SOTJx7xMJzTZg4987GlGiVpuY1apDuWU/xMWP+Qxm47fPg2pj20HukI/V2BqOh7LoRNInhsIH70UXLe1t/sx2fxF/teZcdIHdhz/YlEP/S9+cQj9iOEVPHfl33MdWzns0jhHpSN4wElCC9s9GBY3d1XcYsDutmgAe76SolyDcFylToygRCMMFrCNWf1EvHEpo1g0DgrGA+exQ/4ttVSQpbaaulpVW+1+HU4q4A9xuFFAU3ZYMEDGXQGrVAsFKPncBeq4V9LtUIKvkBN63SvNjvrWLVZMmjgP/HG3wxrC1G0xpdiTySKdS7gKg7EMMSTzd/BhOqMy2ZjBDl3Vbk7Yr2R68WV3BEstuZn1m0H2HYamzlt27YLT8Hcdx2JcFZcthYktSC4l44cCe7fsH5/6MiR0P4b9r+yIsNXk3gcyXIpuxJbEB+JQ+3MSQdzrkFLPynsfm3Ym3vI/CIKZxL8B0sg92fnCD/O0Zxd5sh+1PGNwyHTzHZ28MX5dlcEjQldYS935zmts2hQLPAfMC5u3ztcjE38SujPFJDfdcIm4SzhPBwNy+HnlcC2/xi8+K+65IAV0HVuLeLi/a9NFF27aXoLm1nEzsdOKY5FIUKyqyfnxGmcBjUeHXRDPF6Iq2Y6Wsnk3Vii+ZAap0BYo15zfeFCy9FCDh/ZGQct1upar0UurJnTzx0abbleUctRQaSQOckzDrC0Z2rDLGpxdzkaZtXV5zgP8Pnp0kf2YQP2SKlek/Gv/IfR2rKFVosJr53muXa73fq9yfZ0J9KdJasGDjZWKXw+hVpikjm6Mh7xAKSj1O9GhKUfOUKx7CNHOBjCHZ1UH3lBkl54hG+hpDv33WcRO3kPwwnvIdwKHV99htuaFEW4lsGuvGmVUIqrvlRCcAhiHATbJFh655Oi+OSdztZHStpYntwjeqvz+J1Psmd8VP2r7pC+8KjLhuvvU1/rQtCdh+gdjRWd3hVL9RT6RqWu2Yjzyg0H8znmO54DikDPrr7pK58ID8Xt9/qmm/k/l4TbneMWmyFtaU/D3MwNX4zEPMVMeOGh+NCD3bNH6tCrCJbQi/aDIiHVRI3o6IQR/cexErcrPgbEzZ8IWl+X/m4Fgr49R+TM+mhna74Y0p5Xf7poeuPtOR+1PiyXQIQh0MjrDD/HUCM9scUK+b/frWf1o3dQvzyIPXv5Ddiz2UWaCj70LsM4+k7qtY/q+uU3GvE0oqZFKrUL18UIszeXUaSiymGzEic/0QHF6BTNLVGO19xwuZ4xPqrj+Lr9qJE23o2NL6/87J/ceLmufwS9B9DfeVTX32Wk4z5ZBIVVNBcXslnxMk8oeAmG7pEFLxvopqylsWr/vQ7TYWu+DQXqG3vOR58Fx3Qd1vL8098bmWG6zWPWPtroZy4d16Fo4sLFSMfaCFNUpdRfrdQnmmONVCOVBIrkqp2rjdo4wk9+Ss/EGnQ7gj4lXkJQURvHedxElFifqFZK/XQtRRdR5bH9TEsGSpVyMRabGJ3Km1FIiEpDEQfPOOfY3efv+/w737xrG8DEyOqQYmxjqjymiVq+ddGW7Wdv3lrXBxNnb9l64KIHPn3t1Vcee/TmSw/XRfhHvXh+pbeQSlYv2rgBoCdpvyJL6wdWnbPn3tu/sGPbsQu2NHUl0Yeuhq5l6wDn7jm+eX+zkIS9F1x5+4GLr73qwU9f/rrxtQcUX+wdZRET+oQhHtXm8dYKQoUUd6En0VkqO6EFgpx1/3GX0vxq39ETR/sUpSetJncc2JFUe3oU+/3d0eppv/6MTmzYMBFMh5RgeWioHFBCPT+mXp3u3sD0Il0qd+nSNcJpwraV9WmsoqicoRGKx3KGGpUywUA3EJAs+k9W1LCZoMdVukdROKeqaj/lps1cJLCisrVbisNkUAmlg8R2ILNzCafTPDXm+NjsWcT7UfLpK2HsCZ2HNXgM+c/stuPBr7K/Z1BkoGXAPTCoQzyt27+0f4RTTYeGkV1kc6qnsjnkEquUYaapX11RCN8K96uh2+/QAZudNQIrsvvjYLAUuvlWmv7aB4yc7rfDEYpUoAocgQa3wNhyMt41jm6a5fzdcXtYK4VmAzP+IXPhB5DPjH7rzaGBQPBePQcPdg+OBZ5Ljt3y/CSeVavWnciqc8lNiSQV1cPKXWRQMDRsTCQZxxU0hrlPJuWucNGfn671EerAciAqpsfEsWQ+n+QXImObATaPjcr7/toZ/2zRYF6Yf1GkeJewD3vJHa6Lu6oX0BN1vV/RxVyOQ8OjyMSHwrOB3kVieAHttldfesWlqzdsBafTYOt/IRlwxYE1l9Rql6w5cAVIL5QcDrnKpKxJKBcxAyE87asYIRlmHL7fWigWC2vecY7T8+e8g52HzFz9WC2D/9UeuxoH+ysO144ESBZjrJQMqMwMlPml6ICV7mcveuDXiSlV0S7EeBalUeFununwgUZAjF93XSxTsGtZpx++iSbskg9/ODsG3NTSO1+FMXeMVbn/0INvMotqqrnM66AAj99887al7zwfdn3qU6GlL3Zw5Ml/F7eKDOdSP/YRDzHFVCWJJpyCTeh1KmjHkg5oo9ILeLkiRsPPv1qm7bQa++UGpsUTmv2eYCj2i42iHk+ocDz4rj8O97AMBO8Pp1imZEr5XwTihqjZxyIDonsMH4w4/oHTfhJPlm9RnFzaSixJrcDTpti7wpu9uXkJyi3Hc6+qFyNNKRR0cTKb1RKPlHoutepEWROkUEl7wof/gqQoBiTJyvPsxCNfR4MNtz5Lx/fRsfE1sLLWABx4+u107VlZjgZFFqOL8DW02kD5BjrQv34fz3EQfqE49695Lj2KyG6L8AaUfX+p/IckyWsOopgCZK+cRFcEkcYIcM3AUYczn7ynndGCKorA4TTA/Fd8afMZf9r83co1uypDbtp8Vf/5t6hoHcWBDDs9WVJZfv5fGRA7+Wo1T/t1O8GMrN2um0kSGEiZ6+o1uKkrh57vyqF/XBw007uHvRz68Fk90RFJH+q5racAkE7I7+gZ2g9citX8+fkqH807Tzs/PWRFSrLeH7uIWj0kMhYdFvk4duRZFfZ6FoELq99THj55OUUFJK8G1UzhgxU0n9URWEZYU9QNaD7Eaz15VLamk8llBPLlCWaJgRAEwwykqOETCKp9gEx/qvrvCzz35XtOL3Rx7fC8x4xErNq6o+IalclaYDHL0aAUTm9KGAFvfFOeVKdceLnYdAdMrOqOdErXyo756+DOVHISKmzGfnS/uL3R2C7+ag8K9lt6TLNnA3IkHUQtnWFKph/CgXREPgZvqm9nbHsdxuuXU8xg4x2y/BMtnVQ03T6e6gPoS8FduqYk0768bQi9gib3pT0f2izLopvrht9JnSi4QdAZQAXRnnG09tipCT3epDR48yb47Gc+Y++Hm3IDAzmo/06ihYWagjbqwMHuKFQT/S0Kw1HNg1pKUBYGGUimxlAvTQK73Img4OY36ySZBYuW3W8Vg0yW1ulaGJoUMIVmRPWqMbbdqaki/URUtTuTay37jgTgPD9hjS740m/gscKKMI4YiY0ATVRy7hBNIDUOJd1UlH1hIXG1/U37mzgnTgNDghdFg61jbMM6YzBl96cGjW6q7H/vkA/ftd8NN0hh6S5JUcW7pPDQnclcLtlNY9Q1bBQzOcltu4H9fAWv5UNlM8ajlwuH5TFXblQGVnNdH3Q4aH4RuVwF1RrNUq2KEm7WOXc1dDEoK9xL8KlGngYqK54kbtTNCfaFeC4Xx78/dfdwQE1H7dXRtCrP1pO9AL3JSSaKUrQHktENkqL8OhUFeOs/nFcRAZgZ3MeUrPVrRZE2RJNaPKSKbNLKKgzmILsqC92bkyScQPAuHCz27Tho2IhkyAnrNFEHMN+knif/sygFo7/SVCsJungaGglTC4ywpKWpcCLYwfNvRTk1hB3C64W3CHeSlqdwJnYh+lSUiDXdqK1fPjw274hnnEtgotIseSioWnF+V2x64k2YfplRVN8vM7mfyiYpOIxC9h2zdsAUfxYrBvolfSBeC9A8SXZEqEbTrgAjaVWx3ljrSciSqvVLciAX+Sm0N3Tk7pNoOuoJ1L43lAzhv3gOsu9eOPx8yIhFiiFNNZNwBenzjmgDmiPZaFgLKGHrsxAVJTWihYqyjBr1ioLTF/btHWknHFmrGsr6/lAykwzlsN+8A9SIJPs1bNqNMY8KG4TtwnnCYeEqdAlXqG9qvobrXp6IjtUVrqf8YaIWkd69efyU1xaO3r/MtYPz36FDtgb7y6traJ9it8zJTFd86Qj7EcqogJqvjhpHHG/UxslBbvLMYokqdJV4isc0xhuy51D4M0Vi3v4T+xU4WymVNp9QRLYBStnNk1vOGJTtx2IxiMTqMThPN2w7ns0OZrOJ0SnmwQy4x/4TiMBuJsGBj/yGok9M1ezH4rW4/auYBecflekXg9lZBA0uLml5+tqjuyunVl6OaviVH9ZcsTx58J8ONuHPfWcZUjw8T7kcwqr9bhRYjSedhiYBrR2bHdlbKOwdOXwby2agNzYRg0I6w25j7VKxWGIz09WzCvb3sd1VfTuq0zOdHFgbNekaR+OTESd9j0CQoB16b8s3hXL/sf1jK8YObh3cRvUg26gAw7pneQLghP0CDCTruTMOsUr/4GB/hR06IzcB46eia1oUBYssEeLiSrXSJH+zyV3bXoiVOFSP8IIS8rNJ6v5g3/WzgYymy4xJ0XRgNgSzX1ol6+keZWJPXenp0eVVn+yO+43fpIqBcESR25IU7pHU1xsFmLog2BPQQm98Y0gL9AQvKGftghvwmsuWF+I8RCdDCaaF06heBL2jilOkRlCfO/8VoPjg7yAZ5nbsQKIjEmOyrmWIaPsS1npm8JR0J47Vsq9X5VRYktqKHAkHRPUmo2CfhDm7wAq/gwGxE+PVhDivIHIxfynm+ffjyUR3MsJP8d1sW72+Df7vB7xw1MXsynPPvYpd2Z3D2lLfDrC9fsSe65RVzR7Bx9hV5x6h5LUXRmy5volLk4RIrkKZG4qSmx3SiiuRIzvBJsd1mmMt+0qXPPjAsnTZf+tmmqBlt+Ell8gVCLttoR5sIa/6rKAIQV7HXTTlZHMYxooJeXhJILg1PwOjpgmjVEdmt+32kmqyGbj9WcN49sTIN75x7ZIqOcE3T8M4ynD2V8ud98tO5jEhl0kBCLpmv897r/0+DZpOSzP4/wC05JftvS5Pj78s07Ws/NtXFWpF5rhqGtsICasRM2yinGg5wdGCZ/OLHZyQ7GNJDhI2gCd8dNtTjgNY5naeAiU8bouXx/mJWHgqNRjI5wODqadYS57/s3QRoJh+Rg6wKrMa1iALyM/wa7YVC0UhErZQa8Mu3FRDEbTOX3GulvlJ20rHG414Gr7dQixur0IsrkpnSsnkLkmlmonvZfpPBiND4eACsAqGhyJBfo0fcT/Y4VkTTCFP9WqdOjS1c9DPU7w8PQ7dEkAM7JcBAsQsNpP9G3cXSoXwXzyTgWcX8YoYeIFZmCbiPCI5nalMyiH7cBdrAD7muuJcVOO9TthKCK/SCXFRuMvxetCJF7k2d4oDm/UuP97R+l3lF6dfNzx0fKL+pqHha08fbABPtUNj8M4nxd589pLmwCA4WUUYLDWm87ne7ohma2gwkgPIR1YNzeGvpinzjxv4GD42/keDRs5Ibl8z7aQZp9dsS+KFwYvH73xyyynyexwh+LkTvQBFPEJalf5RgZ7zrx5biZ0fOISLoESZmWarpgchbbKoAuLs8hzAGYccSg9Hw3IuLfaYgIPS7BHTOTkSgduWpbnA42VRjhCKZtH0FxEsSUzN2S1otzsg64u2m7kFR/9AAWbsmVkv1LkkG9WpueH5KI1X+6NGqhdRHZnFJfWxPtjotLzw19Ws/a8diqZn8O4Mr9/3Nz3/8IJPRmtaoI3aMM0zchU3Q03qoFlxgL9z4joBdAyFiEkZaXrLryMletcAbr7tvBXvwJ/r3Ps28wN5TaetubChOx3duAd1cYrnKDuhtF7mj6RRKs71/J26Xzf4Bs86sbSf8wTvy04w7SojY7zg5Lh41O2+7+twL56/zEPoP/cCabBK17/PT57NDlCo6AUj44vJE/bH3ic94iRIuwLht3uJUITS9/mD3keJBnrbh7tGVnfeobRy3kF0V22RhFfMOeR9ra+cX3mUyCByBL7+xufTFNy6GVpTsmyCulMi4l8+trRcRAzat3BC3k4eoO94/qeOcX6z786buwpEYLbLu4DuVUXd62kWsA7OEUWICH28FmqsBCno5Um3iUZ5sdku2FcchLM/ac84Bcbw2UWJ28d3w9QHoOkWEj+8zLyUO22KHCeUhRGKcqcSqBP4YobS4tkp0zghalKTPHsWT8Kdv/kkrbC7x8jo9td2L0kf25eFYrFMzAo7VE7/5pP4jH3Fe3V8ekkG+Yf4ZCxrzbg0L2ALgf0tHoUFYZiJ5iRKhS+ArCBCWGN/pwWlKMwEg/ZMtHTvT382/wrbE7OC9veMPsP+bsD0fBN6R4Dn1jiu5Wm1V+k34Pwe3gergmZ8/vNxMwCDRp8/f0UVBsvh/K4pg5g+rXNMH+HwuCuHdeAmTQqEorJCAD4la9chgP/YIt0sdc2hDCHeFWfRsjh+xfn014Td01Efdl95Vk0iZL9O8yB7NBSQNITsC31xHOnL87oagl0NvqyIoG4pEacwjElDJdYglOVAEVO8NNgf/2REk6TA2r5qXYS41dMPM+mqskvS5l3AN81YOFo/GJTzJahVEz1D0aQ8b0NfGi6NDwwT6OTLHoUFG0Z09KGm2YaUiLRc0qyRyXUQRS2pqO7iWcRC5ZpZ8lFb5dTSxje6kWSxtktm9oy49QDjBWtMkTKqpEYNVXk+EJi/e3qafXwRK+g23+uO34LDEHzVfghd9hnQLzkjGjLNUHZfTo1ZATEUQhv1cZfJfiAuyZ92OXM57dKjcW6fec7d5K6OuGLOEv8VlslQthYKW+zpZZOR/lxkEed/szPmuBz5wIvxBKqvSZkKN0hD0kKNaifbKPAU44bVl1556Sqec1y35pIrpod4mvERnni0X+7SkS2eS1xTKPb38dwiuyuTyaZ5PlHi+cW/8BfkeKEZz56LgN7XZr4mPBlfKHytvaZS2fFqt5cSc7wUdAW4ozKtrFDt2VUmq1oXpmL2z11XCOyfx152fKO1CoLxtYiNZlVfoaceCumL6mSVzdqb5//RHUHDt2jQgweROxi7K9TBTugDtESqDCW7gNyWTV6uk4YELyyqL7EMr6ko1lcTC8I/xUZi//QKEv0KrftZ8O5w/5enrIJNJp19i0UOa9rh+V+xmSFyUIdavoIo8vbs+ArVr6FgMORWv0LHHo3wGFLCWy3UxJHYCeR7dRuO1nGGJFpqHOqd1RbjF1X3cTeeD7O1b5y8/zlJeu5+3JIdDneWeRT7+GCkx8J7qqudR3DbqRdy6ssQMZaxkVIvlHltsuud4F+KKoFStXoxgYixPsGE8unWT2Ib4RYWGWHiw29608MiG4wzJRaZhf23R2Im9OfyxXtZ7urKQ9c/IIoPXP9w4WgZNCNESTCwQsaCfpvmdRNJPiOLjmLj/gT+UbqzFl6JGl7v4tBzmX2v2QfsLRdd9BYGfab921ivfoPeC9uX0PdM8IzpM4LPRGJPlC4oPXzBTYzddMFDAxcOTIMZDpvnLkvx6np9tUdzV/1KWe/UeKGpRqjA/sz+HqwyaH1J26DilbR1AA1oTM/Edfu7Rtawv071Jd57xE3srbwuAE21N4J58B5fKzY0RBofe1LPWNo3aUbBcY0d18GwD/+jEc8E/k8gAH8ZyC7I8RJeS13kdSE+BMiXUbi1FEV3PwIxGlnFDhJ3Ss1pdDmFAYy2IxyykCp1Cs1kqk1z4Lhbk+avDOSDa9bZ4jTY5DsB57YvF5/llcCchkW5D48Qdxq4lUEdB4KG/3y77SH/DinDD9Ol6+1/559t0B3/oYUPLS6Sw59ysu3/4B+IMK53afSPx4JgohxHvWqVSsMtFkOTtNhpLJPld0YmjkS3Sky3ygYvp9LL1jmLceLfogPecpzfFjReoXKpaBGiVD8VLfBQkF8xXQLeirrBRicmV0BKDaSwwSseTeq/0iTIJdfiL9KSy9WIUVhuDglpQwN2uJXJ3d+MuHW5krAWXy05izQNNg47ZC1eOfng0lqwDr6k+pJreQ2e6sE9yl8pVZIxlbLw/4nc0hgnWHXyXUg1HVEWX6EsV62R6qWqRr7WNpVseCacMoUU4RrhR7wue6LKZn1LC58XrYCu5SLY8QpTe0uNqUBc0XpjsV5NiQemGqVelSk4fiI5TQ9YYiTCn4/2hETd/3xlpcfhXVsPARzauuUQY4cqgSBCq3R0IGIktd7UQFQ0jGgsFjUMMTqQ6tWSRmQgmlYYBAMTV9UCIWBivLcvbCT03mQ5ynTDtCzT0Fm0nOzVE0a0ZKZlBqFA7araAp5hwqBwq3CHcB/JVUxRZAnFVKk2Rhhi+Emx6q0VTKEnnkpyeY8AlzatTe+MDZVXO6AQw+CTcy9wMdMCpQUpO8VXI4D+iSNiebm1Q+Jp+bV5yRifsiZOn7Cmxg0Jz8Ph/Ghv18Xe0Xx4NUo5VrB4n1QumvCJeOKiCpdwrC/mdQcenuJBq+A8aL936XJU2CEVa6fl1iRS6XQqsSZ3Wq0obd6E19Znh51rw9n1eG3TFcEgmAXebdV6aKHXQvUq77SCCcFgjXdZtFiKYodVGqGF/go1Kry7iiajzpr4GjT2NJt7GifZoS3e8PBhgHEnj4RDn0psmzwo434oIJ4qqR3z7yz47KDhucrG6Ddl2WAvxiZ6O2uwGPvnzmnPkCWpP1K21ZxVYoVq/40MetKGfltPprMEyzBu9c7MqCbPjG9yF2Z1/DSikeKyGeFsjpmdru4cdBz32B/ChLOGzC47e/iku6bs9+Rt2l1Z9kN3D4fdA/utvy/Tnq4CHokmX1gdo0jmJCSd1RRdLskDnzfCYWO/RmWbkx8KlQKf8nsln2kbAMY0RauMbZ8KaSXYeYpY0upTeMGqm6tyQt2Uv1rRBV73oUlEG6DtJ8o+T4WzK7vA3/3UNoPibdNEZ5sqWh3+WZs5MUSOTjseUNF/Au5XRWDc2bO2FZ7/GAWJ2CVkUxeOHT5Zy31nhVb58eQlDpg4srgQlkRO8YQb++YEBYwtJ74IZt6yOkFHa+Eqt+5u7HLGynuxy5P0Q/dyx65fyL6CuGNM2El4i8qOUR/SxzhI7SVTzfFmp1w4mRqn6q8qOdZNJIUUZaniLpbn60RSySkiuGlW2P8O9ITlgFitMFaNoYqXVT3KNNU4qKgXXxlIBbSANCiKFTGoBXsC6hZJ3naNLGuJ4IdPOFZz31/Fw6ocRC+cnaUqiTQCwfO3btuHEFpNo4IBGa6/7bYbDsp6KqUMTTSGEf6mdGXb+XvP+BZjcuBufMW38E2fi+Kj8RTb0ufN2wsRoyaEIUQJuzscu/WCjhJfiVlxlFYI1GvJKUbhWh/TzXFn0YLLtLpNkraoASmcNlx2e4yl7N7XOqYHL52JBt9RUXKmn+0gch32uD542WUHkeWErLAFhtfUOMM9GmfYvnPDYe1bovGm/WLExzfaKtaK9iysLf4hejKDVHlmUnUMB7mq5xGaVPjHYXCzzpFnGRGU2JpGfG/PUpz1MA3ew3gK03Q6TSvjYtCaoxt0EqL4go1w06lq56HZKftZn77E4RZC7THofnehs5KzZoqJYr3cqSRbsk5l8RyfoyQDELqanj0pwOwxLc+HtnasC6r9/ZIZP81aboa5MN9m061WIWyZkcXLWF5dOvv9PpklrBGmuAZENNbRgJM8609eWJGcMpeJmsuE81kJt9SSL4irLNKR2Ay7peVldVtdjDyEhvwXwVgwbf3C6kE38VNtI0DakxlnfAohfRpGpt0gGmclNwClLNuUHQgZAfzVEP2mxxoKuv1ANVeyoKMWH/PWfYjFelGmr5JR0bTvu2SqMuQ8sPAZshJravlSXt8BAoq+PZMvnRRKecLIooCtS9IzgS0HtwTs//KyvC0qIUchC63WPjMNkDb34a23vS07MM/IgfSW80DBVxOWRurKOEdPc7+aphYrS78CVy4miur4ICSQPud7QdA/CKbr/443xdZMOXtSyJZnctRCjjl7e4BIb6+CHtgkSfN3oP9I+Rs4vsr+md3+m+DmizYHn5Ekdts+7Hl0Solcu88l8kfZgU2t1tsAWhHTjNg/hOJQvT4E/lhxlGfcebLPqVDgX+foMo9vMzL61bpFH9t4l89E/YeuX2WEnqP58/SlOvoNp1xPeIq1HYs/eLGiUXy75X3AYmVjePfTRNBzIeMq73sQDq8q/47KqBMbWcjYUg2fG7hZcKNdxeL4sPD//OBzbQhV/PGDF97MyKO+4xgpjmN3MWsOn2g7D+LuX6xw+sLjjB2/ME3UpK/6QOQAHewPf/Dq9ELNg8p9/TStVQUvs0wf2Pl9KXzAzSjjZvq1EMtalENu02b296Pbn4OhbzBMCJv4KgazWUwMgm9OdtS0M/y5jhapjNtbxaT6Tyh1Ot09RanZgpc/pWDxvzkA5YsuTilQknWmM0lJm3cyrnRyDer+5+klz1OwauHYj4cT6H0P8zqFRZQ7MRfZt4qs6TuOFbs+/oMT10czj7nY410Js4I9Ew6YSWgnzUCYTftopnWZLmELJKLRYvYbohkKF2Wi8N5OnOkyUaJsNBSdYKn3JZhRKDqQwJW6M2vPtz9/WVAvhe6Mxe6kj6dcBQcuvJGxGy/8ITXzwxseYOwB9rrLwiU9eJdVx2diGeNKdtMFF9xEo0V84PrrH/BkNctmeS68xOdPtd4Ec6yYhQpPAld9sZR6kzxMs7JQqIq9Pr179/w0s+BLZvQiVPi/dI1FDPeHokWA+fd5VaW5+fotdftLPIH+UT0w+TrnUa9jt04GrBhMx2Kd0lB3bs+yhzl1C/UmZaLN/RbDItpgLRWU5HJspxk9BMsRBG2gB1Zl36wZK9HQ0W8Pcr+K5z7KXrpRJCKcyVyXgUcWeQqZUWVu1rIsLxMMH7cfNZtR+7ORXB97rJD9gVf65YWDw99g52ez85/LrgVY28EmD/L1qQm3OsAr1OLL1hcSxTo0u5oOu62G+IH1J7aAxm5qSzcB8N9uu7ix3Q+T3czWzH8n2E0HrdGwxc1urFKI+eo25Sr3CqodT5GvDW+L915zzb0i37Ib37t6uKPAx/9o1ftpac2sdxu38+8dfv1kxwj05u/DwcnXFzltJmgULteKuG6ZNzeWe1mn/17P/oF/I+0uPnrQQyhWJ6rcV0QveAwRdMX9wBmV7eM/qs1OxZyQFfoepCnqE/TxU5yFpA+mWKPebIhOZTf/OJrjm/D4yzgPuuCkKdL9ktrPK23CTFXoa7iTbKJaEa8SNSWQtEUVgL4aKKqh8LmaKmkGnYuKogaqahBakigzSTFETZfh/mR4wP5IJCEqcEcioobkEXwY3qMFlICiSZImGZImMxHxoabi1InKjBn2D0RJSwZDIlMkURFVRZR0M5FOmLrE2HmSypQxSVLp56qkg8ikiKFqssQ0RZFA1+ynTENXpICKr01Eeq1IIaAkQm/Piiyo2xfRO4hcIhtpCMZ11dBNQw7KwYQk6RrdYxJTdTmQwhax4VRAXsDeb8A+SaKm4ysnoKhyiLRoQ5DP+7zKRhBTZf+HdUfnPzYFE7vrADXaTOyu4eacOtxgK3VIR5gZSYM4/xwLcxf317hll3+yMlGr+v+OP//8i5EMQCbyIvSyIZMmg9nBE4PsBaRuK9Wo8vKbIe8zXf4UVqqW4KU73d91oS96jfPwSUKR+geoqozlLw5Go8E9ezQzqeM2ZWp79tCVi/n1i6M9UX5gP/Jg3+6+B3urELPnK/Z8DKqwaSNEUpHdWsLUzj5bMxPabjwFfrGHPn3XQ6ewb10gsC6wrvDy3R/84N0vF9Z5NuV8tlaI4HxKTuKruL7gK/XEdKhkBO2vU7Lju3zdLsSeDqE5gZZhdFb3dt4xQe+I8di0s2Ye0Tj8VE/H8alBfAc0gkYpZP+IVZzPdvG0Sqikh+zvufNwN/s3RBMXCO/i85B/9ZM+iUWVR3zi1Sb5+pnmJBtxqtOcKUrPlSpVmmNiqlekxadikz4xVqXy8RGpWoq5CVbSxr4EK1kKf4K1k5NVSwl4SesLmaGwpscMSw0b6R4jqCqhb6gBxTDiMTUgqlZIDamxEA5uI9aTUHAWyQ8mkvnRQlDTRs954/vesDpeTls49yK6NZpKBeLRaEz59guBcDiwB8KJ8F7ypvby7ZnbtUhc275di0XU7dv5E+x/KZKiB3C+40SStJ4w4gZVM9WoEgzEdCkYDCg0f2Sc2kxRoyITxR/FzGRj81mryjtOLxey4b7y6kR69WA5Whg1TRV/HlLsz4XjoYQRChmJUDzcANxsVbHNrVvVcFzdijeh4ctDiSrOwbzzJWg3JeGUWJPK85ImpUkQ0TfmWtgJsdTpzI39VKrkLRdmgCKmnczEJqqMcDIobWj8x0zEBCg3ygBmpB2xYKA5AFZkhh11UOlAzh7IlstZ+EFu4Cg0V61qzp+An+7R81ZuoJy18jhbfMd2Wvj/bsvq2QB4nGNgZGBgAGK5Jo6aeH6brwzcLAwgcF2L4w2C/v+AhYFZAcjlYGACiQIA9LsIzwB4nGNgZGBgbvjfwBDDwgACQJKRARV0AwBHkQL0eJxjYWBgYH7JwMDCMIpHMX4MAFXfAxUAAAAAAAB2AOIBXgG6AegCVgLuA0ADmAPiBEgEigS+BUAF4AYoBogHAAeMB8QICgh2CLAI8AkqCX4J8Ap6CvILcAvADBwMYAy2DQ4NXA2cDeIOJg6sDwYPdg+aD+AQFBBsEO4REhFAEYARrhH8EqQTHhNmE8IUBhRaFO4VrBY+FpoW1hcAF0wXoBgAGEoYnBjUGQYZgBngGlAaqhrkGyQbYhuqG9YcFhx2HLAdAh0kHUAdeB3IHgweeh6yHwwfgh/4ID4gfCDWIPohICF0IcQiFCJwIxoj+iRMJMYk/CVGJXAlsCYoJqQm5CdGJ6gn+ChWKIgozCkWKXIp1CouKmoquir4KzIrdiuwK9gsoiz0LVgtei2cLmQuxHicY2BkYGDoZpjCwMkAAkxAzAWEDAz/wXwGACY2Aj8AeJxlj01OwzAQhV/6B6QSqqhgh+QFYgEo/RGrblhUavdddN+mTpsqiSPHrdQDcB6OwAk4AtyAO/BIJ5s2lsffvHljTwDc4Acejt8t95E9XDI7cg0XuBeuU38QbpBfhJto41W4Rf1N2MczpsJtdGF5g9e4YvaEd2EPHXwI13CNT+E69S/hBvlbuIk7/Aq30PHqwj7mXle4jUcv9sdWL5xeqeVBxaHJIpM5v4KZXu+Sha3S6pxrW8QmU4OgX0lTnWlb3VPs10PnIhVZk6oJqzpJjMqt2erQBRvn8lGvF4kehCblWGP+tsYCjnEFhSUOjDFCGGSIyujoO1Vm9K+xQ8Jee1Y9zed0WxTU/3OFAQL0z1xTurLSeTpPgT1fG1J1dCtuy56UNJFezUkSskJe1rZUQuoBNmVXjhF6XNGJPyhnSP8ACVpuyAAAAHicbVSHtqM2EPXdB9iA/eyXbHrvvfe66b33vhFCGK0FIpKw1+m9bT46QgI/n5z4HI/uvSrMaGY0OjHyv2T0/79zOIEDBAgRYYwJYiRIMcUMh5hjgSOch/NxEhfgQlyEi3EJLsVluBxX4EpchatxDa7FdbgeN+BG3ISbcQtuxW24HXfgTtyFu3EP7sV9uB8P4EE8hIfxCB7FY3gcT+BJnMJTeBrP4Fk8h+fxAl7ES3gZr+BVvIbX8QbexFt4G+/gXbyH9/EBPsRH+Bif4FN8hs/xBU7jSxBkoMjBUGCJEhxnsIJAhRoSDb6CgoZBizU2OIstvsY3+Bbf4Xv8gB/xE37GL/gVv+F3/IE/8Rf+xjn8M8LZmFDKtJZqOyHU8DU329kAThdciAOS5wv7V3ZVJuXKiemeMM2IUmTJ3MS4J2mm5EZ7LfI4zFSry8RZpx9lrea1PYUSlTtluq+klFRMEX+ExwkVknoPQgc7q9mcSiGYdVrWbi455jMqq6Y1TLmJycAWVEqV85oYpn1Ae8KUyraRtZ8Y92ROFbOThuhV/40dP0lbbaT1TzO15tQHPf+PmOZMMNNfiMeTXNK2YrWZDcBfQr6tScWp/3xPIpZzI9UB4yZhlTzD/SU4GNqdTMXO8trIwx1yi2YFY3lG+nubDCwuBFk6KehQYo0uBV+WZn4MfahFK4S28bI6XCp7HYmz/vDSxtgM2Z8MbGa/zpaKCC8PbNEB5crLb0j3hMmKbTNpEx8KkjGROOtWxYKv/PqgQ5aud3Rt6VATQYeCinARd8ZfYGXLyXo07Ue/sLJVFnfG0UUlMy5YU8peSPeEoJKKRbUta7mZyqIQw65xT0JpSqamDaemVf1UT4JGkG3cGX9sh/oajTxOG0X40CceW8lWqRmkDh8qljc2Z8yr8Y6OFStsH5apYjYa30SRx3awLtSh6vIY2I6qA83qfLpfpOOeJNqu9QkNHUx0SfpYQgenunXvRL/NEzvqxp4Z6Q03tDzSW21Ytef+dF+JjM2JVEHXMvGuj2YdElz7DZOBxYZXfa46tDCK1FqQXYune0JosX1YnPVb2jqX4ZrnTCbOemc2RNW89jU/7kmkGVG0TPzgXqWmzawH5VLK3Icb61L6y/FukOOXJurS0DZRWxdS5IeFfUBqyvuyj+1rU0nbt9vR6F8KbDL8') format('woff')}.i-icon{display:inline-block;font-family:iconfont;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-rendering:auto;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle}.i-icon-accessory:before{content:"\e6dd"}.i-icon-activity:before{content:"\e6de"}.i-icon-activity_fill:before{content:"\e6df"}.i-icon-add:before{content:"\e6e0"}.i-icon-addressbook_fill:before{content:"\e6e2"}.i-icon-addressbook:before{content:"\e6e3"}.i-icon-barrage_fill:before{content:"\e6e4"}.i-icon-barrage:before{content:"\e6e5"}.i-icon-browse_fill:before{content:"\e6e6"}.i-icon-browse:before{content:"\e6e7"}.i-icon-brush:before{content:"\e6e8"}.i-icon-brush_fill:before{content:"\e6e9"}.i-icon-businesscard_fill:before{content:"\e6ea"}.i-icon-businesscard:before{content:"\e6eb"}.i-icon-camera_fill:before{content:"\e6ec"}.i-icon-camera:before{content:"\e6ed"}.i-icon-clock_fill:before{content:"\e6ee"}.i-icon-clock:before{content:"\e6ef"}.i-icon-close:before{content:"\e6f0"}.i-icon-collection_fill:before{content:"\e6f1"}.i-icon-collection:before{content:"\e6f2"}.i-icon-computer_fill:before{content:"\e6f3"}.i-icon-computer:before{content:"\e6f4"}.i-icon-coordinates_fill:before{content:"\e6f5"}.i-icon-coordinates:before{content:"\e6f6"}.i-icon-coupons_fill:before{content:"\e6f7"}.i-icon-coupons:before{content:"\e6f8"}.i-icon-createtask_fill:before{content:"\e6f9"}.i-icon-createtask:before{content:"\e6fa"}.i-icon-customerservice_fill:before{content:"\e6fb"}.i-icon-customerservice:before{content:"\e6fc"}.i-icon-delete_fill:before{content:"\e6fd"}.i-icon-delete:before{content:"\e6fe"}.i-icon-document:before{content:"\e6ff"}.i-icon-document_fill:before{content:"\e700"}.i-icon-dynamic_fill:before{content:"\e701"}.i-icon-dynamic:before{content:"\e702"}.i-icon-editor:before{content:"\e703"}.i-icon-eit:before{content:"\e704"}.i-icon-emoji_fill:before{content:"\e705"}.i-icon-emoji:before{content:"\e706"}.i-icon-enter:before{content:"\e707"}.i-icon-enterinto:before{content:"\e708"}.i-icon-enterinto_fill:before{content:"\e709"}.i-icon-feedback_fill:before{content:"\e70a"}.i-icon-feedback:before{content:"\e70b"}.i-icon-flag_fill:before{content:"\e70c"}.i-icon-flag:before{content:"\e70d"}.i-icon-flashlight:before{content:"\e70e"}.i-icon-flashlight_fill:before{content:"\e70f"}.i-icon-fullscreen:before{content:"\e710"}.i-icon-group:before{content:"\e711"}.i-icon-group_fill:before{content:"\e712"}.i-icon-homepage_fill:before{content:"\e713"}.i-icon-homepage:before{content:"\e714"}.i-icon-integral_fill:before{content:"\e715"}.i-icon-integral:before{content:"\e716"}.i-icon-interactive_fill:before{content:"\e717"}.i-icon-interactive:before{content:"\e718"}.i-icon-keyboard:before{content:"\e719"}.i-icon-label:before{content:"\e71a"}.i-icon-label_fill:before{content:"\e71b"}.i-icon-like_fill:before{content:"\e71c"}.i-icon-like:before{content:"\e71d"}.i-icon-live_fill:before{content:"\e71e"}.i-icon-live:before{content:"\e71f"}.i-icon-lock_fill:before{content:"\e720"}.i-icon-lock:before{content:"\e721"}.i-icon-mail:before{content:"\e722"}.i-icon-mail_fill:before{content:"\e723"}.i-icon-message:before{content:"\e724"}.i-icon-message_fill:before{content:"\e725"}.i-icon-mine:before{content:"\e726"}.i-icon-mine_fill:before{content:"\e727"}.i-icon-mobilephone_fill:before{content:"\e728"}.i-icon-mobilephone:before{content:"\e729"}.i-icon-more:before{content:"\e72a"}.i-icon-narrow:before{content:"\e72b"}.i-icon-offline_fill:before{content:"\e72c"}.i-icon-offline:before{content:"\e72d"}.i-icon-other:before{content:"\e72e"}.i-icon-picture_fill:before{content:"\e72f"}.i-icon-picture:before{content:"\e730"}.i-icon-play:before{content:"\e731"}.i-icon-play_fill:before{content:"\e732"}.i-icon-playon_fill:before{content:"\e733"}.i-icon-playon:before{content:"\e734"}.i-icon-praise_fill:before{content:"\e735"}.i-icon-praise:before{content:"\e736"}.i-icon-prompt_fill:before{content:"\e737"}.i-icon-prompt:before{content:"\e738"}.i-icon-redpacket_fill:before{content:"\e739"}.i-icon-redpacket:before{content:"\e73a"}.i-icon-refresh:before{content:"\e73b"}.i-icon-remind_fill:before{content:"\e73c"}.i-icon-remind:before{content:"\e73d"}.i-icon-return:before{content:"\e73e"}.i-icon-right:before{content:"\e73f"}.i-icon-scan:before{content:"\e740"}.i-icon-send:before{content:"\e741"}.i-icon-service_fill:before{content:"\e742"}.i-icon-service:before{content:"\e743"}.i-icon-setup_fill:before{content:"\e744"}.i-icon-setup:before{content:"\e745"}.i-icon-share_fill:before{content:"\e746"}.i-icon-share:before{content:"\e747"}.i-icon-success_fill:before{content:"\e748"}.i-icon-success:before{content:"\e749"}.i-icon-suspend:before{content:"\e74a"}.i-icon-switch:before{content:"\e74b"}.i-icon-systemprompt_fill:before{content:"\e74c"}.i-icon-systemprompt:before{content:"\e74d"}.i-icon-tailor:before{content:"\e74e"}.i-icon-task:before{content:"\e74f"}.i-icon-task_fill:before{content:"\e750"}.i-icon-tasklist_fill:before{content:"\e751"}.i-icon-tasklist:before{content:"\e752"}.i-icon-time_fill:before{content:"\e753"}.i-icon-time:before{content:"\e754"}.i-icon-translation_fill:before{content:"\e755"}.i-icon-translation:before{content:"\e756"}.i-icon-trash:before{content:"\e757"}.i-icon-trash_fill:before{content:"\e758"}.i-icon-undo:before{content:"\e759"}.i-icon-video:before{content:"\e75a"}.i-icon-video_fill:before{content:"\e75b"}.i-icon-warning_fill:before{content:"\e75c"}.i-icon-warning:before{content:"\e75d"}.i-icon-search:before{content:"\e75e"}.i-icon-searchfill:before{content:"\e75f"}.i-icon-publishgoods_fill:before{content:"\e760"}.i-icon-shop_fill:before{content:"\e761"}.i-icon-transaction_fill:before{content:"\e762"}.i-icon-packup:before{content:"\e763"}.i-icon-unfold:before{content:"\e764"}.i-icon-financial_fill:before{content:"\e765"}.i-icon-commodity:before{content:"\e766"}
+
+
+@font-face {font-family: "iconfont";
+ src: url('iconfont.eot?t=1584364408330'); /* IE9 */
+ src: url('iconfont.eot?t=1584364408330#iefix') format('embedded-opentype'), /* IE6-IE8 */
+ url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'),
+ url('iconfont.woff?t=1584364408330') format('woff'),
+ url('iconfont.ttf?t=1584364408330') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
+ url('iconfont.svg?t=1584364408330#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-wenti-m:before {
+ content: "\e617";
+}
+
+.icon-fankui:before {
+ content: "\e61e";
+}
+
+.icon-kongzhi:before {
+ content: "\e637";
+}
+
+.icon-fenxiang:before {
+ content: "\e68d";
+}
+
+.icon-xiaoxi1:before {
+ content: "\e60e";
+}
+
+.icon-feiyong:before {
+ content: "\e694";
+}
+
diff --git a/utils/ajax.js b/utils/ajax.js
index be7e67e60ba7c67277a44c5d0721335e967f2a7b..a2a44e95a1cf0eedb1074b572bd1488e2d9742ec 100644
--- a/utils/ajax.js
+++ b/utils/ajax.js
@@ -4,7 +4,22 @@ const API = require('../utils/api.js')
* 封装HTTPget请求,
* url:请求路径
*/
-function getRequest(url) {
+function getRequest(url,params) {
+ let item = 0;
+ /**
+ * 对参数进行base64编码
+ */
+ for(let key in params) {
+ let connect = item === 0 ? '?' : '&';
+ item += 1;
+ if (typeof params[key] !== 'string' || key === 'userId') {
+ url += connect + key + '=' + params[key]
+ continue;
+ }
+ let keyBase64 = Base64.encode(params[key])
+ url += connect + key + '=' + keyBase64
+ }
+ console.log("这个是GET请求链接:" + url);
return new Promise(function(resolve, reject) {
wx.request({
url: url,
@@ -17,11 +32,13 @@ function getRequest(url) {
if (response.data.code === 200) {
resolve(response.data)
} else {
- console.log(response.msg)
+ let message = response.data.message ? response.data.message : response.data.message
+ Toast.showToast(message)
+ reject(message)
}
},
fail: function(err) {
- console.log(err.msg)
+ Toast.showToast("网络异常,请重新启动程序")
}
})
})
@@ -33,12 +50,18 @@ function getRequest(url) {
* url:请求路径
* param:请求数据
*/
-function postRequest(url, param) {
+function postRequest(url, params) {
+ for (let key in params) {
+ if (typeof params[key] !== 'string') {
+ continue;
+ }
+ params[key] = Base64.encode(params[key])
+ }
return new Promise(function(resolve, reject) {
wx.request({
url: url,
method: 'POST',
- data: param,
+ data: params,
header: {
'Content-type': 'application/json',
'Authorization': wx.getStorageSync('token')
@@ -47,11 +70,13 @@ function postRequest(url, param) {
if (response.data.code === 200) {
resolve(response.data)
} else {
- console.log(response.msg)
+ let message = response.data.message ? response.data.message : response.data.message
+ Toast.showToast(message)
+ reject(message)
}
},
fail: function(err) {
- console.log(response.msg)
+ Toast.showToast("网络异常,请重新启动程序")
}
})
@@ -61,23 +86,34 @@ function postRequest(url, param) {
/**
* 封装HTTP PUT请求
* url:请求路径
- * param:请求数据
+ * params:请求数据
*/
-function putRequest(url, param, loadding = true) {
+function putRequest(url, params) {
+ for (let key in params) {
+ if (typeof params[key] !== 'string') {
+ continue;
+ }
+ params[key] = Base64.encode(params[key])
+ }
return new Promise(function(resolve, reject) {
wx.request({
url: url,
method: 'PUT',
- data: param,
+ data: params,
header: {
'Content-type': 'application/json',
'Authorization': wx.getStorageSync('token')
},
success: function(response) {
- resolve()
+ if (response.data.code != 200) {
+ let message = response.data.message ? response.data.message : response.data.message
+ Toast.showToast(message)
+ reject(message)
+ }
+ resolve();
},
fail: function(err) {
- console.log(response.msg)
+ Toast.showToast("网络异常,请重新启动程序")
}
})
@@ -103,44 +139,157 @@ function delRequest(url, param) {
if (response.data.code === 200) {
resolve(response.data)
} else {
- console.log(response.msg)
+ let message = response.data.message ? response.data.message : response.data.message
+ Toast.showToast(message)
+ reject(message)
}
},
fail: function(err) {
- console.log(response.msg)
+ Toast.showToast("网络异常,请重新启动程序")
}
})
})
}
-/**
- * 保存formId
- */
-function saveFormId(formId) {
- return new Promise(function(resolve, reject) {
- let formIdData = {};
- formIdData.formId = formId;
- formIdData.openId = wx.getStorageSync('openId');
- wx.request({
- url: API.api.wxformids,
- method: 'POST',
- data: formIdData,
- header: {
- 'Content-type': 'application/json',
- 'Authorization': wx.getStorageSync('token')
- },
- success: function(res) {
- console.log(`保存formId成功!!!`, res)
- resolve();
- }
- })
- })
-}
module.exports = {
getRequest: getRequest,
postRequest: postRequest,
- saveFormId: saveFormId,
delRequest: delRequest,
putRequest: putRequest
+}
+
+
+var Base64 = {
+
+ // private property
+ _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
+
+ // public method for encoding
+ , encode: function (input) {
+ var output = "";
+ var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
+ var i = 0;
+
+ input = Base64._utf8_encode(input);
+
+ while (i < input.length) {
+ chr1 = input.charCodeAt(i++);
+ chr2 = input.charCodeAt(i++);
+ chr3 = input.charCodeAt(i++);
+
+ enc1 = chr1 >> 2;
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+ enc4 = chr3 & 63;
+
+ if (isNaN(chr2)) {
+ enc3 = enc4 = 64;
+ }
+ else if (isNaN(chr3)) {
+ enc4 = 64;
+ }
+
+ output = output +
+ this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
+ this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
+ } // Whend
+
+ return output;
+ } // End Function encode
+
+
+ // public method for decoding
+ , decode: function (input) {
+ var output = "";
+ var chr1, chr2, chr3;
+ var enc1, enc2, enc3, enc4;
+ var i = 0;
+
+ input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
+ while (i < input.length) {
+ enc1 = this._keyStr.indexOf(input.charAt(i++));
+ enc2 = this._keyStr.indexOf(input.charAt(i++));
+ enc3 = this._keyStr.indexOf(input.charAt(i++));
+ enc4 = this._keyStr.indexOf(input.charAt(i++));
+
+ chr1 = (enc1 << 2) | (enc2 >> 4);
+ chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
+ chr3 = ((enc3 & 3) << 6) | enc4;
+
+ output = output + String.fromCharCode(chr1);
+
+ if (enc3 != 64) {
+ output = output + String.fromCharCode(chr2);
+ }
+
+ if (enc4 != 64) {
+ output = output + String.fromCharCode(chr3);
+ }
+
+ } // Whend
+
+ output = Base64._utf8_decode(output);
+
+ return output;
+ } // End Function decode
+
+
+ // private method for UTF-8 encoding
+ , _utf8_encode: function (string) {
+ var utftext = "";
+ string = string.replace(/\r\n/g, "\n");
+
+ for (var n = 0; n < string.length; n++) {
+ var c = string.charCodeAt(n);
+
+ if (c < 128) {
+ utftext += String.fromCharCode(c);
+ }
+ else if ((c > 127) && (c < 2048)) {
+ utftext += String.fromCharCode((c >> 6) | 192);
+ utftext += String.fromCharCode((c & 63) | 128);
+ }
+ else {
+ utftext += String.fromCharCode((c >> 12) | 224);
+ utftext += String.fromCharCode(((c >> 6) & 63) | 128);
+ utftext += String.fromCharCode((c & 63) | 128);
+ }
+
+ } // Next n
+
+ return utftext;
+ } // End Function _utf8_encode
+
+ // private method for UTF-8 decoding
+ , _utf8_decode: function (utftext) {
+ var string = "";
+ var i = 0;
+ var c, c1, c2, c3;
+ c = c1 = c2 = 0;
+
+ while (i < utftext.length) {
+ c = utftext.charCodeAt(i);
+
+ if (c < 128) {
+ string += String.fromCharCode(c);
+ i++;
+ }
+ else if ((c > 191) && (c < 224)) {
+ c2 = utftext.charCodeAt(i + 1);
+ string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
+ i += 2;
+ }
+ else {
+ c2 = utftext.charCodeAt(i + 1);
+ c3 = utftext.charCodeAt(i + 2);
+ string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
+ i += 3;
+ }
+
+ } // Whend
+
+ return string;
+ } // End Function _utf8_decode
+
}
\ No newline at end of file
diff --git a/utils/api.js b/utils/api.js
index 7e123edd79e625680aa8285d7b3847f18a6c3b4a..3b35856df2965bf3cc00a457248ad66192933493 100644
--- a/utils/api.js
+++ b/utils/api.js
@@ -1,6 +1,6 @@
let api = {};
// TODO:配置接口文档信息
-// api.baseUrl = 'http://192.168.1.103:12000';
+// api.baseUrl = 'https://192.168.1.105:12000';
api.baseUrl = 'https://be.yangyoki.top:12000';
api.imageHostDowm = 'https://be.yangyoki.top:12000';
api.imageHost = 'https://be.yangyoki.top';
@@ -38,12 +38,18 @@ api.wxformids = api.baseUrl + '/api/v1/wxformids'
//上传图片信息
api.uploadFile = api.baseUrl + '/api/v1/upload'
-// 瓷砖信息
-api.kyhbs = api.baseUrl + '/api/v1/ceramictiles'
-
// 用户订阅消息
api.wxusersubscribes = api.baseUrl + '/api/v1/wxusersubscribes'
+// 生成海报二维码
+api.posters = api.baseUrl + '/api/v1/posters'
+
+// 腾讯地图
+api.tencents = api.baseUrl + '/api/v1/tencent'
+
+// 反馈表
+api.feedbacks = api.baseUrl + '/api/v1/feedbacks'
+
module.exports = {
api: api,
}
diff --git a/utils/date.js b/utils/date.js
deleted file mode 100644
index 72335456b3cc5394e8d6fd2b82f3edbf49eb67fc..0000000000000000000000000000000000000000
--- a/utils/date.js
+++ /dev/null
@@ -1,16 +0,0 @@
-const formatTime = date => {
- const year = date.getFullYear()
- const month = date.getMonth() + 1
- const day = date.getDate()
-
- return [year, month, day].map(formatNumber).join('-')
-}
-
-const formatNumber = n => {
- n = n.toString()
- return n[1] ? n : '0' + n
-}
-
-module.exports = {
- formatTime: formatTime
-}
diff --git a/utils/qqMapWxUtil.js b/utils/qqMapWxUtil.js
index bcd2ade756d7b989ccadda7afa3bda966ef39499..82d75f9a0e83e822af91244b8aafcd451b87013d 100644
--- a/utils/qqMapWxUtil.js
+++ b/utils/qqMapWxUtil.js
@@ -1,4 +1,6 @@
const app = getApp();
+const API = require('api.js');
+const AJAX = require('ajax.js');
/**
*调用腾讯地图显示位置信息
* location :{
@@ -6,42 +8,15 @@ const app = getApp();
* longitude:经度
* }
*/
-function reverseGeocoder(location) {
+function reverseGeocoder(latitude, longitude) {
let that = this
return new Promise(function (resolve, reject) {
- app.globalData.qqmapsdk.reverseGeocoder({
- location: location,
- sig:'NjGMnQMAcZczYgicF6ubCPxOuLWhbqR',
- success: function (skdRes) {
- console.log(`请求用户的地址成功了吗?`,skdRes)
- // 坐标显示
- let markers = []
- markers.push({
- iconPath: "/image/icon/biaoji.png",
- id: 0,
- latitude: location.latitude,
- longitude: location.longitude,
- width: 30,
- height: 30
- })
- //当前位置信息
- let region = []
- let province = skdRes.result.address_component.province
- let city = skdRes.result.address_component.city
- let district = skdRes.result.address_component.district
- let street_number = skdRes.result.address_component.street_number
- region.push(province)
- region.push(city)
- region.push(district)
- // 封装成一个对象返回
- let responseObj = {};
- responseObj.markers = markers;
- responseObj.region = region;
- responseObj.address = province + city + district;
- responseObj.addressDetail = street_number;
- // 如业务需求可继续补充数据
- resolve(responseObj);
- }
+ let requestUrl = API.api.tencents + '/reverse/geocoder';
+ let requestData = {}
+ requestData.lat = latitude
+ requestData.lng = longitude
+ AJAX.postRequest(requestUrl,requestData,false).then(response =>{
+ resolve(formatObj(response.data))
})
})
@@ -53,19 +28,30 @@ function reverseGeocoder(location) {
* address:地址信息
*/
function geocoder(address) {
- let that = this
return new Promise(function (resolve, reject) {
- // 调用腾讯地图进行定位
- app.globalData.qqmapsdk.geocoder({
- address: address,
- sig:'NjGMnQMAcZczYgicF6ubCPxOuLWhbqR',
- success: function (response) {
- console.log(`解析成功啦!`, response)
- resolve(response)
- }
+ let requestUrl = API.api.tencents + '/geocoder?address=' + address;
+ AJAX.getRequest(requestUrl).then(response =>{
+ resolve(formatObj(response.data))
})
})
}
+function formatObj(response) {
+ console.log('这里开始封装对象',response)
+ // 坐标显示
+ let markers = []
+ markers.push({
+ iconPath: "/image/icon/biaoji.png",
+ id: 0,
+ latitude: response.lat,
+ longitude: response.lng,
+ width: 30,
+ height: 30
+ })
+ //当前位置信息
+ let responseObj = response
+ responseObj.markers = markers
+ return responseObj
+}
module.exports = {
reverseGeocoder: reverseGeocoder,
diff --git a/utils/qqmap-wx-jssdk.js b/utils/qqmap-wx-jssdk.js
deleted file mode 100644
index 9724e31f820e0b25283b3167f5f31b36701df12a..0000000000000000000000000000000000000000
--- a/utils/qqmap-wx-jssdk.js
+++ /dev/null
@@ -1,1123 +0,0 @@
-/**
- * 微信小程序JavaScriptSDK
- *
- * @version 1.2
- * @date 2019-03-06
- * @author v_ylyue@tencent.com
- */
-
-var ERROR_CONF = {
- KEY_ERR: 311,
- KEY_ERR_MSG: 'key格式错误',
- PARAM_ERR: 310,
- PARAM_ERR_MSG: '请求参数信息有误',
- SYSTEM_ERR: 600,
- SYSTEM_ERR_MSG: '系统错误',
- WX_ERR_CODE: 1000,
- WX_OK_CODE: 200
-};
-var BASE_URL = 'https://apis.map.qq.com/ws/';
-var URL_SEARCH = BASE_URL + 'place/v1/search';
-var URL_SUGGESTION = BASE_URL + 'place/v1/suggestion';
-var URL_GET_GEOCODER = BASE_URL + 'geocoder/v1/';
-var URL_CITY_LIST = BASE_URL + 'district/v1/list';
-var URL_AREA_LIST = BASE_URL + 'district/v1/getchildren';
-var URL_DISTANCE = BASE_URL + 'distance/v1/';
-var URL_DIRECTION = BASE_URL + 'direction/v1/';
-var MODE = {
- driving: 'driving',
- transit: 'transit'
-};
-var EARTH_RADIUS = 6378136.49;
-var Utils = {
- /**
- * md5加密方法
- * 版权所有©2011 Sebastian Tschan,https://blueimp.net
- */
- safeAdd(x, y) {
- var lsw = (x & 0xffff) + (y & 0xffff);
- var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
- return (msw << 16) | (lsw & 0xffff);
- },
- bitRotateLeft(num, cnt) {
- return (num << cnt) | (num >>> (32 - cnt));
- },
- md5cmn(q, a, b, x, s, t) {
- return this.safeAdd(this.bitRotateLeft(this.safeAdd(this.safeAdd(a, q), this.safeAdd(x, t)), s), b);
- },
- md5ff(a, b, c, d, x, s, t) {
- return this.md5cmn((b & c) | (~b & d), a, b, x, s, t);
- },
- md5gg(a, b, c, d, x, s, t) {
- return this.md5cmn((b & d) | (c & ~d), a, b, x, s, t);
- },
- md5hh(a, b, c, d, x, s, t) {
- return this.md5cmn(b ^ c ^ d, a, b, x, s, t);
- },
- md5ii(a, b, c, d, x, s, t) {
- return this.md5cmn(c ^ (b | ~d), a, b, x, s, t);
- },
- binlMD5(x, len) {
- /* append padding */
- x[len >> 5] |= 0x80 << (len % 32);
- x[((len + 64) >>> 9 << 4) + 14] = len;
-
- var i;
- var olda;
- var oldb;
- var oldc;
- var oldd;
- var a = 1732584193;
- var b = -271733879;
- var c = -1732584194;
- var d = 271733878;
-
- for (i = 0; i < x.length; i += 16) {
- olda = a;
- oldb = b;
- oldc = c;
- oldd = d;
-
- a = this.md5ff(a, b, c, d, x[i], 7, -680876936);
- d = this.md5ff(d, a, b, c, x[i + 1], 12, -389564586);
- c = this.md5ff(c, d, a, b, x[i + 2], 17, 606105819);
- b = this.md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
- a = this.md5ff(a, b, c, d, x[i + 4], 7, -176418897);
- d = this.md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
- c = this.md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
- b = this.md5ff(b, c, d, a, x[i + 7], 22, -45705983);
- a = this.md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
- d = this.md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
- c = this.md5ff(c, d, a, b, x[i + 10], 17, -42063);
- b = this.md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
- a = this.md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
- d = this.md5ff(d, a, b, c, x[i + 13], 12, -40341101);
- c = this.md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
- b = this.md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
-
- a = this.md5gg(a, b, c, d, x[i + 1], 5, -165796510);
- d = this.md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
- c = this.md5gg(c, d, a, b, x[i + 11], 14, 643717713);
- b = this.md5gg(b, c, d, a, x[i], 20, -373897302);
- a = this.md5gg(a, b, c, d, x[i + 5], 5, -701558691);
- d = this.md5gg(d, a, b, c, x[i + 10], 9, 38016083);
- c = this.md5gg(c, d, a, b, x[i + 15], 14, -660478335);
- b = this.md5gg(b, c, d, a, x[i + 4], 20, -405537848);
- a = this.md5gg(a, b, c, d, x[i + 9], 5, 568446438);
- d = this.md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
- c = this.md5gg(c, d, a, b, x[i + 3], 14, -187363961);
- b = this.md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
- a = this.md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
- d = this.md5gg(d, a, b, c, x[i + 2], 9, -51403784);
- c = this.md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
- b = this.md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
-
- a = this.md5hh(a, b, c, d, x[i + 5], 4, -378558);
- d = this.md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
- c = this.md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
- b = this.md5hh(b, c, d, a, x[i + 14], 23, -35309556);
- a = this.md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
- d = this.md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
- c = this.md5hh(c, d, a, b, x[i + 7], 16, -155497632);
- b = this.md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
- a = this.md5hh(a, b, c, d, x[i + 13], 4, 681279174);
- d = this.md5hh(d, a, b, c, x[i], 11, -358537222);
- c = this.md5hh(c, d, a, b, x[i + 3], 16, -722521979);
- b = this.md5hh(b, c, d, a, x[i + 6], 23, 76029189);
- a = this.md5hh(a, b, c, d, x[i + 9], 4, -640364487);
- d = this.md5hh(d, a, b, c, x[i + 12], 11, -421815835);
- c = this.md5hh(c, d, a, b, x[i + 15], 16, 530742520);
- b = this.md5hh(b, c, d, a, x[i + 2], 23, -995338651);
-
- a = this.md5ii(a, b, c, d, x[i], 6, -198630844);
- d = this.md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
- c = this.md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
- b = this.md5ii(b, c, d, a, x[i + 5], 21, -57434055);
- a = this.md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
- d = this.md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
- c = this.md5ii(c, d, a, b, x[i + 10], 15, -1051523);
- b = this.md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
- a = this.md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
- d = this.md5ii(d, a, b, c, x[i + 15], 10, -30611744);
- c = this.md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
- b = this.md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
- a = this.md5ii(a, b, c, d, x[i + 4], 6, -145523070);
- d = this.md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
- c = this.md5ii(c, d, a, b, x[i + 2], 15, 718787259);
- b = this.md5ii(b, c, d, a, x[i + 9], 21, -343485551);
-
- a = this.safeAdd(a, olda);
- b = this.safeAdd(b, oldb);
- c = this.safeAdd(c, oldc);
- d = this.safeAdd(d, oldd);
- }
- return [a, b, c, d];
- },
- binl2rstr(input) {
- var i;
- var output = '';
- var length32 = input.length * 32;
- for (i = 0; i < length32; i += 8) {
- output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);
- }
- return output;
- },
- rstr2binl(input) {
- var i;
- var output = [];
- output[(input.length >> 2) - 1] = undefined;
- for (i = 0; i < output.length; i += 1) {
- output[i] = 0;
- }
- var length8 = input.length * 8;
- for (i = 0; i < length8; i += 8) {
- output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);
- }
- return output;
- },
- rstrMD5(s) {
- return this.binl2rstr(this.binlMD5(this.rstr2binl(s), s.length * 8));
- },
- rstrHMACMD5(key, data) {
- var i;
- var bkey = this.rstr2binl(key);
- var ipad = [];
- var opad = [];
- var hash;
- ipad[15] = opad[15] = undefined;
- if (bkey.length > 16) {
- bkey = this.binlMD5(bkey, key.length * 8);
- }
- for (i = 0; i < 16; i += 1) {
- ipad[i] = bkey[i] ^ 0x36363636;
- opad[i] = bkey[i] ^ 0x5c5c5c5c;
- }
- hash = this.binlMD5(ipad.concat(this.rstr2binl(data)), 512 + data.length * 8);
- return this.binl2rstr(this.binlMD5(opad.concat(hash), 512 + 128));
- },
- rstr2hex(input) {
- var hexTab = '0123456789abcdef';
- var output = '';
- var x;
- var i;
- for (i = 0; i < input.length; i += 1) {
- x = input.charCodeAt(i);
- output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);
- }
- return output;
- },
- str2rstrUTF8(input) {
- return unescape(encodeURIComponent(input));
- },
- rawMD5(s) {
- return this.rstrMD5(this.str2rstrUTF8(s));
- },
- hexMD5(s) {
- return this.rstr2hex(this.rawMD5(s));
- },
- rawHMACMD5(k, d) {
- return this.rstrHMACMD5(this.str2rstrUTF8(k), str2rstrUTF8(d));
- },
- hexHMACMD5(k, d) {
- return this.rstr2hex(this.rawHMACMD5(k, d));
- },
-
- md5(string, key, raw) {
- if (!key) {
- if (!raw) {
- return this.hexMD5(string);
- }
- return this.rawMD5(string);
- }
- if (!raw) {
- return this.hexHMACMD5(key, string);
- }
- return this.rawHMACMD5(key, string);
- },
- /**
- * 得到md5加密后的sig参数
- * @param {Object} requestParam 接口参数
- * @param {String} sk签名字符串
- * @param {String} featrue 方法名
- * @return 返回加密后的sig参数
- */
- getSig(requestParam, sk, feature, mode) {
- var sig = null;
- var requestArr = [];
- Object.keys(requestParam).sort().forEach(function(key){
- requestArr.push(key + '=' + requestParam[key]);
- });
- if (feature == 'search') {
- sig = '/ws/place/v1/search?' + requestArr.join('&') + sk;
- }
- if (feature == 'suggest') {
- sig = '/ws/place/v1/suggestion?' + requestArr.join('&') + sk;
- }
- if (feature == 'reverseGeocoder') {
- sig = '/ws/geocoder/v1/?' + requestArr.join('&') + sk;
- }
- if (feature == 'geocoder') {
- sig = '/ws/geocoder/v1/?' + requestArr.join('&') + sk;
- }
- if (feature == 'getCityList') {
- sig = '/ws/district/v1/list?' + requestArr.join('&') + sk;
- }
- if (feature == 'getDistrictByCityId') {
- sig = '/ws/district/v1/getchildren?' + requestArr.join('&') + sk;
- }
- if (feature == 'calculateDistance') {
- sig = '/ws/distance/v1/?' + requestArr.join('&') + sk;
- }
- if (feature == 'direction') {
- sig = '/ws/direction/v1/' + mode + '?' + requestArr.join('&') + sk;
- }
- sig = this.md5(sig);
- return sig;
- },
- /**
- * 得到终点query字符串
- * @param {Array|String} 检索数据
- */
- location2query(data) {
- if (typeof data == 'string') {
- return data;
- }
- var query = '';
- for (var i = 0; i < data.length; i++) {
- var d = data[i];
- if (!!query) {
- query += ';';
- }
- if (d.location) {
- query = query + d.location.lat + ',' + d.location.lng;
- }
- if (d.latitude && d.longitude) {
- query = query + d.latitude + ',' + d.longitude;
- }
- }
- return query;
- },
-
- /**
- * 计算角度
- */
- rad(d) {
- return d * Math.PI / 180.0;
- },
- /**
- * 处理终点location数组
- * @return 返回终点数组
- */
- getEndLocation(location){
- var to = location.split(';');
- var endLocation = [];
- for (var i = 0; i < to.length; i++) {
- endLocation.push({
- lat: parseFloat(to[i].split(',')[0]),
- lng: parseFloat(to[i].split(',')[1])
- })
- }
- return endLocation;
- },
-
- /**
- * 计算两点间直线距离
- * @param a 表示纬度差
- * @param b 表示经度差
- * @return 返回的是距离,单位m
- */
- getDistance(latFrom, lngFrom, latTo, lngTo) {
- var radLatFrom = this.rad(latFrom);
- var radLatTo = this.rad(latTo);
- var a = radLatFrom - radLatTo;
- var b = this.rad(lngFrom) - this.rad(lngTo);
- var distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLatFrom) * Math.cos(radLatTo) * Math.pow(Math.sin(b / 2), 2)));
- distance = distance * EARTH_RADIUS;
- distance = Math.round(distance * 10000) / 10000;
- return parseFloat(distance.toFixed(0));
- },
- /**
- * 使用微信接口进行定位
- */
- getWXLocation(success, fail, complete) {
- wx.getLocation({
- type: 'gcj02',
- success: success,
- fail: fail,
- complete: complete
- });
- },
-
- /**
- * 获取location参数
- */
- getLocationParam(location) {
- if (typeof location == 'string') {
- var locationArr = location.split(',');
- if (locationArr.length === 2) {
- location = {
- latitude: location.split(',')[0],
- longitude: location.split(',')[1]
- };
- } else {
- location = {};
- }
- }
- return location;
- },
-
- /**
- * 回调函数默认处理
- */
- polyfillParam(param) {
- param.success = param.success || function () { };
- param.fail = param.fail || function () { };
- param.complete = param.complete || function () { };
- },
-
- /**
- * 验证param对应的key值是否为空
- *
- * @param {Object} param 接口参数
- * @param {String} key 对应参数的key
- */
- checkParamKeyEmpty(param, key) {
- if (!param[key]) {
- var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + key +'参数格式有误');
- param.fail(errconf);
- param.complete(errconf);
- return true;
- }
- return false;
- },
-
- /**
- * 验证参数中是否存在检索词keyword
- *
- * @param {Object} param 接口参数
- */
- checkKeyword(param){
- return !this.checkParamKeyEmpty(param, 'keyword');
- },
-
- /**
- * 验证location值
- *
- * @param {Object} param 接口参数
- */
- checkLocation(param) {
- var location = this.getLocationParam(param.location);
- if (!location || !location.latitude || !location.longitude) {
- var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + ' location参数格式有误');
- param.fail(errconf);
- param.complete(errconf);
- return false;
- }
- return true;
- },
-
- /**
- * 构造错误数据结构
- * @param {Number} errCode 错误码
- * @param {Number} errMsg 错误描述
- */
- buildErrorConfig(errCode, errMsg) {
- return {
- status: errCode,
- message: errMsg
- };
- },
-
- /**
- *
- * 数据处理函数
- * 根据传入参数不同处理不同数据
- * @param {String} feature 功能名称
- * search 地点搜索
- * suggest关键词提示
- * reverseGeocoder逆地址解析
- * geocoder地址解析
- * getCityList获取城市列表:父集
- * getDistrictByCityId获取区县列表:子集
- * calculateDistance距离计算
- * @param {Object} param 接口参数
- * @param {Object} data 数据
- */
- handleData(param,data,feature){
- if (feature == 'search') {
- var searchResult = data.data;
- var searchSimplify = [];
- for (var i = 0; i < searchResult.length; i++) {
- searchSimplify.push({
- id: searchResult[i].id || null,
- title: searchResult[i].title || null,
- latitude: searchResult[i].location && searchResult[i].location.lat || null,
- longitude: searchResult[i].location && searchResult[i].location.lng || null,
- address: searchResult[i].address || null,
- category: searchResult[i].category || null,
- tel: searchResult[i].tel || null,
- adcode: searchResult[i].ad_info && searchResult[i].ad_info.adcode || null,
- city: searchResult[i].ad_info && searchResult[i].ad_info.city || null,
- district: searchResult[i].ad_info && searchResult[i].ad_info.district || null,
- province: searchResult[i].ad_info && searchResult[i].ad_info.province || null
- })
- }
- param.success(data, {
- searchResult: searchResult,
- searchSimplify: searchSimplify
- })
- } else if (feature == 'suggest') {
- var suggestResult = data.data;
- var suggestSimplify = [];
- for (var i = 0; i < suggestResult.length; i++) {
- suggestSimplify.push({
- adcode: suggestResult[i].adcode || null,
- address: suggestResult[i].address || null,
- category: suggestResult[i].category || null,
- city: suggestResult[i].city || null,
- district: suggestResult[i].district || null,
- id: suggestResult[i].id || null,
- latitude: suggestResult[i].location && suggestResult[i].location.lat || null,
- longitude: suggestResult[i].location && suggestResult[i].location.lng || null,
- province: suggestResult[i].province || null,
- title: suggestResult[i].title || null,
- type: suggestResult[i].type || null
- })
- }
- param.success(data, {
- suggestResult: suggestResult,
- suggestSimplify: suggestSimplify
- })
- } else if (feature == 'reverseGeocoder') {
- var reverseGeocoderResult = data.result;
- var reverseGeocoderSimplify = {
- address: reverseGeocoderResult.address || null,
- latitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lat || null,
- longitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lng || null,
- adcode: reverseGeocoderResult.ad_info && reverseGeocoderResult.ad_info.adcode || null,
- city: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.city || null,
- district: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.district || null,
- nation: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.nation || null,
- province: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.province || null,
- street: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.street || null,
- street_number: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.street_number || null,
- recommend: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses.recommend || null,
- rough: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses.rough || null
- };
- if (reverseGeocoderResult.pois) {//判断是否返回周边poi
- var pois = reverseGeocoderResult.pois;
- var poisSimplify = [];
- for (var i = 0;i < pois.length;i++) {
- poisSimplify.push({
- id: pois[i].id || null,
- title: pois[i].title || null,
- latitude: pois[i].location && pois[i].location.lat || null,
- longitude: pois[i].location && pois[i].location.lng || null,
- address: pois[i].address || null,
- category: pois[i].category || null,
- adcode: pois[i].ad_info && pois[i].ad_info.adcode || null,
- city: pois[i].ad_info && pois[i].ad_info.city || null,
- district: pois[i].ad_info && pois[i].ad_info.district || null,
- province: pois[i].ad_info && pois[i].ad_info.province || null
- })
- }
- param.success(data,{
- reverseGeocoderResult: reverseGeocoderResult,
- reverseGeocoderSimplify: reverseGeocoderSimplify,
- pois: pois,
- poisSimplify: poisSimplify
- })
- } else {
- param.success(data, {
- reverseGeocoderResult: reverseGeocoderResult,
- reverseGeocoderSimplify: reverseGeocoderSimplify
- })
- }
- } else if (feature == 'geocoder') {
- var geocoderResult = data.result;
- var geocoderSimplify = {
- title: geocoderResult.title || null,
- latitude: geocoderResult.location && geocoderResult.location.lat || null,
- longitude: geocoderResult.location && geocoderResult.location.lng || null,
- adcode: geocoderResult.ad_info && geocoderResult.ad_info.adcode || null,
- province: geocoderResult.address_components && geocoderResult.address_components.province || null,
- city: geocoderResult.address_components && geocoderResult.address_components.city || null,
- district: geocoderResult.address_components && geocoderResult.address_components.district || null,
- street: geocoderResult.address_components && geocoderResult.address_components.street || null,
- street_number: geocoderResult.address_components && geocoderResult.address_components.street_number || null,
- level: geocoderResult.level || null
- };
- param.success(data,{
- geocoderResult: geocoderResult,
- geocoderSimplify: geocoderSimplify
- });
- } else if (feature == 'getCityList') {
- var provinceResult = data.result[0];
- var cityResult = data.result[1];
- var districtResult = data.result[2];
- param.success(data,{
- provinceResult: provinceResult,
- cityResult: cityResult,
- districtResult: districtResult
- });
- } else if (feature == 'getDistrictByCityId') {
- var districtByCity = data.result[0];
- param.success(data, districtByCity);
- } else if (feature == 'calculateDistance') {
- var calculateDistanceResult = data.result.elements;
- var distance = [];
- for (var i = 0; i < calculateDistanceResult.length; i++){
- distance.push(calculateDistanceResult[i].distance);
- }
- param.success(data, {
- calculateDistanceResult: calculateDistanceResult,
- distance: distance
- });
- } else if (feature == 'direction') {
- var direction = data.result.routes;
- param.success(data,direction);
- } else {
- param.success(data);
- }
- },
-
- /**
- * 构造微信请求参数,公共属性处理
- *
- * @param {Object} param 接口参数
- * @param {Object} param 配置项
- * @param {String} feature 方法名
- */
- buildWxRequestConfig(param, options, feature) {
- var that = this;
- options.header = { "content-type": "application/json" };
- options.method = 'GET';
- options.success = function (res) {
- var data = res.data;
- if (data.status === 0) {
- that.handleData(param, data, feature);
- } else {
- param.fail(data);
- }
- };
- options.fail = function (res) {
- res.statusCode = ERROR_CONF.WX_ERR_CODE;
- param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
- };
- options.complete = function (res) {
- var statusCode = +res.statusCode;
- switch(statusCode) {
- case ERROR_CONF.WX_ERR_CODE: {
- param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
- break;
- }
- case ERROR_CONF.WX_OK_CODE: {
- var data = res.data;
- if (data.status === 0) {
- param.complete(data);
- } else {
- param.complete(that.buildErrorConfig(data.status, data.message));
- }
- break;
- }
- default:{
- param.complete(that.buildErrorConfig(ERROR_CONF.SYSTEM_ERR, ERROR_CONF.SYSTEM_ERR_MSG));
- }
-
- }
- };
- return options;
- },
-
- /**
- * 处理用户参数是否传入坐标进行不同的处理
- */
- locationProcess(param, locationsuccess, locationfail, locationcomplete) {
- var that = this;
- locationfail = locationfail || function (res) {
- res.statusCode = ERROR_CONF.WX_ERR_CODE;
- param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
- };
- locationcomplete = locationcomplete || function (res) {
- if (res.statusCode == ERROR_CONF.WX_ERR_CODE) {
- param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
- }
- };
- if (!param.location) {
- that.getWXLocation(locationsuccess, locationfail, locationcomplete);
- } else if (that.checkLocation(param)) {
- var location = Utils.getLocationParam(param.location);
- locationsuccess(location);
- }
- }
-};
-
-
-class QQMapWX {
-
- /**
- * 构造函数
- *
- * @param {Object} options 接口参数,key 为必选参数
- */
- constructor(options) {
- if (!options.key) {
- throw Error('key值不能为空');
- }
- this.key = options.key;
- };
-
- /**
- * POI周边检索
- *
- * @param {Object} options 接口参数对象
- *
- * 参数对象结构可以参考
- * @see http://lbs.qq.com/webservice_v1/guide-search.html
- */
- search(options) {
- var that = this;
- options = options || {};
-
- Utils.polyfillParam(options);
-
- if (!Utils.checkKeyword(options)) {
- return;
- }
-
- var requestParam = {
- keyword: options.keyword,
- orderby: options.orderby || '_distance',
- page_size: options.page_size || 10,
- page_index: options.page_index || 1,
- output: 'json',
- key: that.key
- };
-
- if (options.address_format) {
- requestParam.address_format = options.address_format;
- }
-
- if (options.filter) {
- requestParam.filter = options.filter;
- }
-
- var distance = options.distance || "1000";
- var auto_extend = options.auto_extend || 1;
- var region = null;
- var rectangle = null;
-
- //判断城市限定参数
- if (options.region) {
- region = options.region;
- }
-
- //矩形限定坐标(暂时只支持字符串格式)
- if (options.rectangle) {
- rectangle = options.rectangle;
- }
-
- var locationsuccess = function (result) {
- if (region && !rectangle) {
- //城市限定参数拼接
- requestParam.boundary = "region(" + region + "," + auto_extend + "," + result.latitude + "," + result.longitude + ")";
- if (options.sig) {
- requestParam.sig = Utils.getSig(requestParam, options.sig, 'search');
- }
- } else if (rectangle && !region) {
- //矩形搜索
- requestParam.boundary = "rectangle(" + rectangle + ")";
- if (options.sig) {
- requestParam.sig = Utils.getSig(requestParam, options.sig, 'search');
- }
- } else {
- requestParam.boundary = "nearby(" + result.latitude + "," + result.longitude + "," + distance + "," + auto_extend + ")";
- if (options.sig) {
- requestParam.sig = Utils.getSig(requestParam, options.sig, 'search');
- }
- }
- wx.request(Utils.buildWxRequestConfig(options, {
- url: URL_SEARCH,
- data: requestParam
- }, 'search'));
- };
- Utils.locationProcess(options, locationsuccess);
- };
-
- /**
- * sug模糊检索
- *
- * @param {Object} options 接口参数对象
- *
- * 参数对象结构可以参考
- * http://lbs.qq.com/webservice_v1/guide-suggestion.html
- */
- getSuggestion(options) {
- var that = this;
- options = options || {};
- Utils.polyfillParam(options);
-
- if (!Utils.checkKeyword(options)) {
- return;
- }
-
- var requestParam = {
- keyword: options.keyword,
- region: options.region || '全国',
- region_fix: options.region_fix || 0,
- policy: options.policy || 0,
- page_size: options.page_size || 10,//控制显示条数
- page_index: options.page_index || 1,//控制页数
- get_subpois : options.get_subpois || 0,//返回子地点
- output: 'json',
- key: that.key
- };
- //长地址
- if (options.address_format) {
- requestParam.address_format = options.address_format;
- }
- //过滤
- if (options.filter) {
- requestParam.filter = options.filter;
- }
- //排序
- if (options.location) {
- var locationsuccess = function (result) {
- requestParam.location = result.latitude + ',' + result.longitude;
- if (options.sig) {
- requestParam.sig = Utils.getSig(requestParam, options.sig, 'suggest');
- }
- wx.request(Utils.buildWxRequestConfig(options, {
- url: URL_SUGGESTION,
- data: requestParam
- }, "suggest"));
- };
- Utils.locationProcess(options, locationsuccess);
- } else {
- if (options.sig) {
- requestParam.sig = Utils.getSig(requestParam, options.sig, 'suggest');
- }
- wx.request(Utils.buildWxRequestConfig(options, {
- url: URL_SUGGESTION,
- data: requestParam
- }, "suggest"));
- }
- };
-
- /**
- * 逆地址解析
- *
- * @param {Object} options 接口参数对象
- *
- * 请求参数结构可以参考
- * http://lbs.qq.com/webservice_v1/guide-gcoder.html
- */
- reverseGeocoder(options) {
- var that = this;
- options = options || {};
- Utils.polyfillParam(options);
- var requestParam = {
- coord_type: options.coord_type || 5,
- get_poi: options.get_poi || 0,
- output: 'json',
- key: that.key
- };
- if (options.poi_options) {
- requestParam.poi_options = options.poi_options
- }
-
- var locationsuccess = function (result) {
- requestParam.location = result.latitude + ',' + result.longitude;
- if (options.sig) {
- requestParam.sig = Utils.getSig(requestParam, options.sig, 'reverseGeocoder');
- }
- wx.request(Utils.buildWxRequestConfig(options, {
- url: URL_GET_GEOCODER,
- data: requestParam
- }, 'reverseGeocoder'));
- };
- Utils.locationProcess(options, locationsuccess);
- };
-
- /**
- * 地址解析
- *
- * @param {Object} options 接口参数对象
- *
- * 请求参数结构可以参考
- * http://lbs.qq.com/webservice_v1/guide-geocoder.html
- */
- geocoder(options) {
- var that = this;
- options = options || {};
- Utils.polyfillParam(options);
-
- if (Utils.checkParamKeyEmpty(options, 'address')) {
- return;
- }
-
- var requestParam = {
- address: options.address,
- output: 'json',
- key: that.key
- };
-
- //城市限定
- if (options.region) {
- requestParam.region = options.region;
- }
-
- if (options.sig) {
- requestParam.sig = Utils.getSig(requestParam, options.sig, 'geocoder');
- }
-
- wx.request(Utils.buildWxRequestConfig(options, {
- url: URL_GET_GEOCODER,
- data: requestParam
- },'geocoder'));
- };
-
-
- /**
- * 获取城市列表
- *
- * @param {Object} options 接口参数对象
- *
- * 请求参数结构可以参考
- * http://lbs.qq.com/webservice_v1/guide-region.html
- */
- getCityList(options) {
- var that = this;
- options = options || {};
- Utils.polyfillParam(options);
- var requestParam = {
- output: 'json',
- key: that.key
- };
-
- if (options.sig) {
- requestParam.sig = Utils.getSig(requestParam, options.sig, 'getCityList');
- }
-
- wx.request(Utils.buildWxRequestConfig(options, {
- url: URL_CITY_LIST,
- data: requestParam
- },'getCityList'));
- };
-
- /**
- * 获取对应城市ID的区县列表
- *
- * @param {Object} options 接口参数对象
- *
- * 请求参数结构可以参考
- * http://lbs.qq.com/webservice_v1/guide-region.html
- */
- getDistrictByCityId(options) {
- var that = this;
- options = options || {};
- Utils.polyfillParam(options);
-
- if (Utils.checkParamKeyEmpty(options, 'id')) {
- return;
- }
-
- var requestParam = {
- id: options.id || '',
- output: 'json',
- key: that.key
- };
-
- if (options.sig) {
- requestParam.sig = Utils.getSig(requestParam, options.sig, 'getDistrictByCityId');
- }
-
- wx.request(Utils.buildWxRequestConfig(options, {
- url: URL_AREA_LIST,
- data: requestParam
- },'getDistrictByCityId'));
- };
-
- /**
- * 用于单起点到多终点的路线距离(非直线距离)计算:
- * 支持两种距离计算方式:步行和驾车。
- * 起点到终点最大限制直线距离10公里。
- *
- * 新增直线距离计算。
- *
- * @param {Object} options 接口参数对象
- *
- * 请求参数结构可以参考
- * http://lbs.qq.com/webservice_v1/guide-distance.html
- */
- calculateDistance(options) {
- var that = this;
- options = options || {};
- Utils.polyfillParam(options);
-
- if (Utils.checkParamKeyEmpty(options, 'to')) {
- return;
- }
-
- var requestParam = {
- mode: options.mode || 'walking',
- to: Utils.location2query(options.to),
- output: 'json',
- key: that.key
- };
-
- if (options.from) {
- options.location = options.from;
- }
-
- //计算直线距离
- if(requestParam.mode == 'straight'){
- var locationsuccess = function (result) {
- var locationTo = Utils.getEndLocation(requestParam.to);//处理终点坐标
- var data = {
- message:"query ok",
- result:{
- elements:[]
- },
- status:0
- };
- for (var i = 0; i < locationTo.length; i++) {
- data.result.elements.push({//将坐标存入
- distance: Utils.getDistance(result.latitude, result.longitude, locationTo[i].lat, locationTo[i].lng),
- duration:0,
- from:{
- lat: result.latitude,
- lng:result.longitude
- },
- to:{
- lat: locationTo[i].lat,
- lng: locationTo[i].lng
- }
- });
- }
- var calculateResult = data.result.elements;
- var distanceResult = [];
- for (var i = 0; i < calculateResult.length; i++) {
- distanceResult.push(calculateResult[i].distance);
- }
- return options.success(data,{
- calculateResult: calculateResult,
- distanceResult: distanceResult
- });
- };
-
- Utils.locationProcess(options, locationsuccess);
- } else {
- var locationsuccess = function (result) {
- requestParam.from = result.latitude + ',' + result.longitude;
- if (options.sig) {
- requestParam.sig = Utils.getSig(requestParam, options.sig, 'calculateDistance');
- }
- wx.request(Utils.buildWxRequestConfig(options, {
- url: URL_DISTANCE,
- data: requestParam
- },'calculateDistance'));
- };
-
- Utils.locationProcess(options, locationsuccess);
- }
- };
-
- /**
- * 路线规划:
- *
- * @param {Object} options 接口参数对象
- *
- * 请求参数结构可以参考
- * https://lbs.qq.com/webservice_v1/guide-road.html
- */
- direction(options) {
- var that = this;
- options = options || {};
- Utils.polyfillParam(options);
-
- if (Utils.checkParamKeyEmpty(options, 'to')) {
- return;
- }
-
- var requestParam = {
- output: 'json',
- key: that.key
- };
-
- //to格式处理
- if (typeof options.to == 'string') {
- requestParam.to = options.to;
- } else {
- requestParam.to = options.to.latitude + ',' + options.to.longitude;
- }
- //初始化局部请求域名
- var SET_URL_DIRECTION = null;
- //设置默认mode属性
- options.mode = options.mode || MODE.driving;
-
- //设置请求域名
- SET_URL_DIRECTION = URL_DIRECTION + options.mode;
-
- if (options.from) {
- options.location = options.from;
- }
-
- if (options.mode == MODE.driving) {
- if (options.from_poi) {
- requestParam.from_poi = options.from_poi;
- }
- if (options.heading) {
- requestParam.heading = options.heading;
- }
- if (options.speed) {
- requestParam.speed = options.speed;
- }
- if (options.accuracy) {
- requestParam.accuracy = options.accuracy;
- }
- if (options.road_type) {
- requestParam.road_type = options.road_type;
- }
- if (options.to_poi) {
- requestParam.to_poi = options.to_poi;
- }
- if (options.from_track) {
- requestParam.from_track = options.from_track;
- }
- if (options.waypoints) {
- requestParam.waypoints = options.waypoints;
- }
- if (options.policy) {
- requestParam.policy = options.policy;
- }
- if (options.plate_number) {
- requestParam.plate_number = options.plate_number;
- }
- }
-
- if (options.mode == MODE.transit) {
- if (options.departure_time) {
- requestParam.departure_time = options.departure_time;
- }
- if (options.policy) {
- requestParam.policy = options.policy;
- }
- }
-
- var locationsuccess = function (result) {
- requestParam.from = result.latitude + ',' + result.longitude;
- if (options.sig) {
- requestParam.sig = Utils.getSig(requestParam, options.sig, 'direction',options.mode);
- }
- wx.request(Utils.buildWxRequestConfig(options, {
- url: SET_URL_DIRECTION,
- data: requestParam
- }, 'direction'));
- };
-
- Utils.locationProcess(options, locationsuccess);
- }
-};
-
-module.exports = QQMapWX;
\ No newline at end of file
diff --git a/utils/toast.js b/utils/toast.js
index 115ae31ff536dc33fe82aa64a29ff32be0a731ad..4d7df4cfbd8db2a245543d29d15bea61d2bd51d2 100644
--- a/utils/toast.js
+++ b/utils/toast.js
@@ -1,14 +1,62 @@
-function showToastSuccess(title) {
+/**
+ * 显示消息提示框
+ */
+function showToast(title) {
wx.showToast({
title: title,
- image: '/image/icon/zhaodaifeiyusuan.png',
- duration: 1000,
+ icon: 'none',
+ duration: 1500,
mask:true
})
};
+/**
+ * 隐藏消息提示框
+ */
+function hideToast() {
+ wx.hideToast()
+}
+
+/**
+ * 显示 loading 提示框
+ */
+function showLoading(title) {
+ wx.showLoading({
+ title: title,
+ })
+}
+
+/**
+ * 隐藏掉TabBar
+ */
+function hideTabBar() {
+ wx.hideTabBar({
+ animation:true
+ })
+}
+
+/**
+ * 显示 showBar
+ */
+function showTabBar() {
+ wx.showTabBar({
+ animation:true
+ });
+}
+/**
+ * 隐藏 loading 提示框
+ */
+function hideLoading() {
+ wx.hideLoading()
+}
+
module.exports = {
- showToastSuccess: showToastSuccess,
+ showToast: showToast,
+ hideToast: hideToast,
+ showLoading: showLoading,
+ hideLoading: hideLoading,
+ hideTabBar: hideTabBar,
+ showTabBar: showTabBar
}
\ No newline at end of file
diff --git a/utils/util.js b/utils/util.js
index b4a98af78b7b74dfa147497f60718d65c9435a3e..db34d55b19971300223c7788b1885e92ad4e54bf 100644
--- a/utils/util.js
+++ b/utils/util.js
@@ -1,7 +1,7 @@
/**
* 格式化时间
*/
-const formatTime = date => {
+const formatTime = (date,deftail="yyyy-mm-dd mm:ss:dd") => {
const year = date.getFullYear()
const month = date.getMonth() + 1
const day = date.getDate()
@@ -9,6 +9,18 @@ const formatTime = date => {
const minute = date.getMinutes()
const second = date.getSeconds()
+ if(deftail === 'mm.dd') {
+ return [month, day].map(formatNumber).join('.')
+ }
+
+ if (deftail === 'mm月dd日') {
+ return formatNumber(month) + '月' + formatNumber(day) + '日'
+ }
+
+ if (deftail === 'mm月dd日 mm:yy') {
+ return formatNumber(month) + '月' + formatNumber(day) + '日' + ' ' + [hour,minute].map(formatNumber).join(':')
+ }
+
return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}
/**
@@ -19,6 +31,9 @@ const formatMoney = value => {
return 0.00
}
var foramtMoney = value.toLocaleString('en-US')
+ if(foramtMoney.indexOf('.') == -1) {
+ foramtMoney = foramtMoney + '.00'
+ }
return foramtMoney
}