浏览代码

auto commit

gcz 4 年之前
父节点
当前提交
003a235dea
共有 100 个文件被更改,包括 9234 次插入1870 次删除
  1. 35 1
      common/css/common.css
  2. 6 4
      config/config.js
  3. 76 0
      js_sdk/js-md5/README.md
  4. 10 0
      js_sdk/js-md5/md5.min.js
  5. 37 26
      main.js
  6. 93 28
      pages.json
  7. 49 31
      pages/index/index.css
  8. 146 11
      pages/index/index.vue
  9. 52 5
      pages/login/companyLogin.vue
  10. 34 0
      pages/use/use.css
  11. 64 0
      pages/use/use.vue
  12. 34 0
      pages/usercenter/certificateList/certificateList.css
  13. 150 0
      pages/usercenter/certificateList/certificateList.vue
  14. 34 0
      pages/usercenter/orderList/orderList.css
  15. 264 0
      pages/usercenter/orderList/orderList.vue
  16. 29 0
      pages/usercenter/orderList/orderdetails/orderdetails.css
  17. 153 0
      pages/usercenter/orderList/orderdetails/orderdetails.vue
  18. 0 0
      pages/usercenter/subscribe/subscribe.css
  19. 171 0
      pages/usercenter/subscribe/subscribe.vue
  20. 52 0
      pages/usercenter/usercenter.css
  21. 106 0
      pages/usercenter/usercenter.vue
  22. 二进制
      static/img/banner01.png
  23. 二进制
      static/img/certificate.png
  24. 二进制
      static/img/icon-about.png
  25. 二进制
      static/img/icon-certificate.png
  26. 二进制
      static/img/icon-guide-nav.png
  27. 二进制
      static/img/icon-huodong.png
  28. 二进制
      static/img/icon-lvyue.png
  29. 二进制
      static/img/icon-question-nav.png
  30. 二进制
      static/img/icon-refresh.png
  31. 二进制
      static/img/icon-tanpuhui.png
  32. 二进制
      static/img/icon-yonghuzhinan.png
  33. 二进制
      static/img/icon-zhonghe.png
  34. 二进制
      static/img/icon_home.png
  35. 二进制
      static/img/icon_home_active.png
  36. 二进制
      static/img/icon_use.png
  37. 二进制
      static/img/icon_use_active.png
  38. 二进制
      static/img/icon_usercenter.png
  39. 二进制
      static/img/icon_usercenter_active.png
  40. 二进制
      static/img/rank-top01.png
  41. 二进制
      static/img/usercenter-bg.png
  42. 124 39
      store/index.js
  43. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map
  44. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map
  45. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map
  46. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/mescroll-uni/components/mescroll-empty.js.map
  47. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/mescroll-uni/components/mescroll-top.js.map
  48. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/mescroll-uni/mescroll-body.js.map
  49. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-popup/uni-popup-dialog.js.map
  50. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-popup/uni-popup.js.map
  51. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-transition/uni-transition.js.map
  52. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/guide.js.map
  53. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/index.js.map
  54. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/init.js.map
  55. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/login/companyLogin.js.map
  56. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/login/loginType.js.map
  57. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/use/use.js.map
  58. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/usercenter/certificateList/certificateList.js.map
  59. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/usercenter/orderList/orderList.js.map
  60. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/usercenter/orderList/orderdetails/orderdetails.js.map
  61. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/usercenter/subscribe/subscribe.js.map
  62. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/usercenter/usercenter.js.map
  63. 39 2
      unpackage/dist/dev/mp-weixin/app.json
  64. 39 28
      unpackage/dist/dev/mp-weixin/common/main.js
  65. 24 1
      unpackage/dist/dev/mp-weixin/common/main.wxss
  66. 115 0
      unpackage/dist/dev/mp-weixin/common/runtime.js
  67. 4045 1577
      unpackage/dist/dev/mp-weixin/common/vendor.js
  68. 203 0
      unpackage/dist/dev/mp-weixin/components/mescroll-uni/components/mescroll-empty.js
  69. 4 0
      unpackage/dist/dev/mp-weixin/components/mescroll-uni/components/mescroll-empty.json
  70. 1 0
      unpackage/dist/dev/mp-weixin/components/mescroll-uni/components/mescroll-empty.wxml
  71. 87 0
      unpackage/dist/dev/mp-weixin/components/mescroll-uni/components/mescroll-empty.wxss
  72. 217 0
      unpackage/dist/dev/mp-weixin/components/mescroll-uni/components/mescroll-top.js
  73. 4 0
      unpackage/dist/dev/mp-weixin/components/mescroll-uni/components/mescroll-top.json
  74. 1 0
      unpackage/dist/dev/mp-weixin/components/mescroll-uni/components/mescroll-top.wxml
  75. 82 0
      unpackage/dist/dev/mp-weixin/components/mescroll-uni/components/mescroll-top.wxss
  76. 537 0
      unpackage/dist/dev/mp-weixin/components/mescroll-uni/mescroll-body.js
  77. 7 0
      unpackage/dist/dev/mp-weixin/components/mescroll-uni/mescroll-body.json
  78. 2 0
      unpackage/dist/dev/mp-weixin/components/mescroll-uni/mescroll-body.wxml
  79. 149 0
      unpackage/dist/dev/mp-weixin/components/mescroll-uni/mescroll-body.wxss
  80. 268 0
      unpackage/dist/dev/mp-weixin/components/mescroll-uni/wxs/wxs.wxs
  81. 304 0
      unpackage/dist/dev/mp-weixin/components/uni-popup/uni-popup-dialog.js
  82. 4 0
      unpackage/dist/dev/mp-weixin/components/uni-popup/uni-popup-dialog.json
  83. 1 0
      unpackage/dist/dev/mp-weixin/components/uni-popup/uni-popup-dialog.wxml
  84. 131 0
      unpackage/dist/dev/mp-weixin/components/uni-popup/uni-popup-dialog.wxss
  85. 367 0
      unpackage/dist/dev/mp-weixin/components/uni-popup/uni-popup.js
  86. 6 0
      unpackage/dist/dev/mp-weixin/components/uni-popup/uni-popup.json
  87. 1 0
      unpackage/dist/dev/mp-weixin/components/uni-popup/uni-popup.wxml
  88. 93 0
      unpackage/dist/dev/mp-weixin/components/uni-popup/uni-popup.wxss
  89. 372 0
      unpackage/dist/dev/mp-weixin/components/uni-transition/uni-transition.js
  90. 4 0
      unpackage/dist/dev/mp-weixin/components/uni-transition/uni-transition.json
  91. 1 0
      unpackage/dist/dev/mp-weixin/components/uni-transition/uni-transition.wxml
  92. 65 0
      unpackage/dist/dev/mp-weixin/components/uni-transition/uni-transition.wxss
  93. 16 16
      unpackage/dist/dev/mp-weixin/pages/index/guide.js
  94. 155 20
      unpackage/dist/dev/mp-weixin/pages/index/index.js
  95. 1 1
      unpackage/dist/dev/mp-weixin/pages/index/index.wxml
  96. 45 3
      unpackage/dist/dev/mp-weixin/pages/index/index.wxss
  97. 12 12
      unpackage/dist/dev/mp-weixin/pages/index/init.js
  98. 0 11
      unpackage/dist/dev/mp-weixin/pages/index/init.wxss
  99. 93 46
      unpackage/dist/dev/mp-weixin/pages/login/companyLogin.js
  100. 0 0
      unpackage/dist/dev/mp-weixin/pages/login/companyLogin.wxml

+ 35 - 1
common/css/common.css

@@ -2,10 +2,44 @@
 .page-bg-wrap{position: fixed;left: 0;right: 0;top: 0;bottom: 0;}
 .page-bg{width: 100%;max-height: 100%;}
 
+/* 头部图片 */
+.top-img{position: relative;height: 390rpx;overflow: hidden;}
+.top-img .img{width: 100%;height: 100%;position: absolute;left: 0;top: 0;z-index: -1;}
+
 .wrap{margin: 24rpx;}
 .wrap40{margin: 32rpx 40rpx;}
 .full-btn{height: 98rpx;line-height: 98rpx;background-color: #26D18B;border-radius: 8rpx;font-size: 36rpx;color: #fff;text-align: center;}
 
 /* 浮底按钮 */
 .bottom-btn-wrap{height: 146rpx;margin-top: 44rpx;}
-.bottom-btn{height: 98rpx;line-height: 98rpx;position: fixed;left: 24rpx;right: 24rpx;bottom: 24rpx;text-align: center;z-index: 99;}
+.bottom-btn{height: 98rpx;line-height: 98rpx;position: fixed;left: 24rpx;right: 24rpx;bottom: 24rpx;text-align: center;z-index: 99;}
+
+/* 截取隐藏 */
+.f-ellipsis{overflow: hidden;white-space: nowrap;text-overflow: ellipsis;}
+
+.common-content{margin-bottom: 32rpx;border-radius: 16rpx;box-shadow: 0px 0px 12rpx 0px rgba(0, 0, 0, 0.04);background-color: #fff;padding: 24rpx;}
+.common-content-title{display: flex;align-items: center;margin-bottom: 24rpx;}
+.common-content-icon{width: 45rpx;height: 45rpx;}
+.common-content-icon .icon{width: 100%;height: 100%;}
+.common-content-til{margin-left: 24rpx;font-size: 32rpx;color: #333;line-height: 45rpx;font-weight: 500;flex: 1;}
+.common-content-right{margin-right: 0;display: flex;align-items: center;font-size: 24rpx;color: #999;}
+.common-content-right .icon{width: 45rpx;height: 45rpx;margin-right: 18rpx;}
+.common-content-blink{margin-top: 6rpx;text-align: center;font-size: 24rpx;color: #26D18B;}
+
+.icon-form-item-wrap{margin-bottom: 32rpx;background-color: #fff;}
+.icon-form-item{display: flex;position: relative;height: 104rpx;align-items: center;}
+.icon-form-item::after{content: '';position: absolute;right: 0;bottom: 0;width: calc( 100% - 144rpx);height: 2rpx;background-color: #EDEEED;}
+.icon-form-item-wrap .icon-form-item:last-of-type::after{height: 0;}
+.icon-form-item-wrap .icon-form-item.full-border::after{width: 100%;}
+.icon-form-item-imgwrap{width: 144rpx;height: 44rpx;box-sizing: border-box;text-align: right;padding-right: 40rpx;}
+.icon-form-item-img{width: 44rpx;height: 100%;}
+.icon-form-item-text{flex: 1;font-size: 28rpx;color: #333;}
+.icon-form-item-icon{margin-right: 0;width: 68rpx;}
+.icon-form-item-icon .iconfont{font-size: 30rpx;color: #ccc;}
+
+
+
+
+
+
+

+ 6 - 4
config/config.js

@@ -1,13 +1,13 @@
 const config = {
 	//dev
-	apiBaseurl:'http://wx.hw.hongweisoft.com/zddtest/forest-portal',//东东
+	apiBaseurl:'http://172.16.90.8:19098',//东东
 	
-	//本地图片
-	// imgUrl:'http://'+window.location.host,
 	// 图片占位
 	placeImg:'http://placekitten.com',
 	
 	loginUrl:'http://wx.hw.hongweisoft.com/zddtest/forest-portal/wechat/h5/authorize?returnUrl=http://foresth5test.hw.hongweisoft.com/#/',//登录后跳转到测试链接 东东
+	
+	testToken:'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI2NDY3NjM3NiIsImNyZWF0ZWQiOjE2MDYxMDY3NzE2MjcsImV4cCI6MTYwNjcxMTU3MX0.JP82ED8bjS8yFxjbVzsfOISrDDYyqOAouL9Z2NRjRBNcsKVmGz9ho8zouG-iWNStxuwqcvrebh_6WF3g9Ed9Vg',
 
 	//版本号:版本号升级将显示引导页
 	version:'1',
@@ -21,8 +21,10 @@ const config = {
 
 	
 	
-	//gloab 全局
+	//本地图片
 	imgUrl:"../../static/img/",
+	//耳机页面图片
+	innerImgUrl:"../../../static/img/",
 }
 export {
 	config

+ 76 - 0
js_sdk/js-md5/README.md

@@ -0,0 +1,76 @@
+# js-md5
+[![Build Status](https://travis-ci.org/emn178/js-md5.svg?branch=master)](https://travis-ci.org/emn178/js-md5)
+[![Coverage Status](https://coveralls.io/repos/emn178/js-md5/badge.svg?branch=master)](https://coveralls.io/r/emn178/js-md5?branch=master)  
+[![NPM](https://nodei.co/npm/js-md5.png?stars&downloads)](https://nodei.co/npm/js-md5/)
+
+A simple MD5 hash function for JavaScript supports UTF-8 encoding.
+
+## Demo
+[MD5 Online](http://emn178.github.io/online-tools/md5.html)  
+[MD5 File Checksum Online](http://emn178.github.io/online-tools/md5_checksum.html)
+
+## Download
+[Compress](https://raw.github.com/emn178/js-md5/master/build/md5.min.js)  
+[Uncompress](https://raw.github.com/emn178/js-md5/master/src/md5.js)
+
+## Installation
+You can also install js-md5 by using Bower.
+
+    bower install md5
+
+For node.js, you can use this command to install:
+
+    npm install js-md5
+
+## Notice
+`buffer` method is deprecated. This maybe confuse with Buffer in node.js. Please use `arrayBuffer` instead.
+
+## Usage
+You could use like this:
+```JavaScript
+md5('Message to hash');
+var hash = md5.create();
+hash.update('Message to hash');
+hash.hex();
+```
+If you use node.js, you should require the module first:
+```JavaScript
+md5 = require('js-md5');
+```
+It supports AMD:
+```JavaScript
+require(['your/path/md5.js'], function(md5) {
+// ...
+});
+```
+[See document](https://emn178.github.com/js-md5/doc/)
+
+## Example
+```JavaScript
+md5(''); // d41d8cd98f00b204e9800998ecf8427e
+md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6
+md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0
+
+// It also supports UTF-8 encoding
+md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07
+
+// It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`
+md5([]); // d41d8cd98f00b204e9800998ecf8427e
+md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e
+
+// Different output
+md5(''); // d41d8cd98f00b204e9800998ecf8427e
+md5.hex(''); // d41d8cd98f00b204e9800998ecf8427e
+md5.array(''); // [212, 29, 140, 217, 143, 0, 178, 4, 233, 128, 9, 152, 236, 248, 66, 126]
+md5.digest(''); // [212, 29, 140, 217, 143, 0, 178, 4, 233, 128, 9, 152, 236, 248, 66, 126]
+md5.arrayBuffer(''); // ArrayBuffer
+md5.buffer(''); // ArrayBuffer, deprecated, This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.
+md5.base64(''); // 1B2M2Y8AsgTpgAmY7PhCfg==
+```
+
+## License
+The project is released under the [MIT license](http://www.opensource.org/licenses/MIT).
+
+## Contact
+The project's website is located at https://github.com/emn178/js-md5  
+Author: Chen, Yi-Cyuan (emn178@gmail.com)

文件差异内容过多而无法显示
+ 10 - 0
js_sdk/js-md5/md5.min.js


+ 37 - 26
main.js

@@ -6,32 +6,33 @@ import store from './store'
 import Request from '@/js_sdk/luch-request/luch-request/index.js';
 const http = new Request();
 http.interceptors.response.use((response) => { /* 对响应成功做点什么 可使用async await 做异步操作*/
-   if (response.data.code !== 200) { // 服务端返回的状态码不等于200,则reject()
-	   uni.showToast({
-		icon:'none',
-		mask:false,
-		title:`${response.data.message}`,
-		duration: 2000
-	   });
-	 };
-	 if(response.data.code == 401){
-		 // console.log('response',response);
-		uni.showToast({
-		 	title:response.data.message + "    即将跳转到登录页",
-		 	icon:"none",
-		 	duration:2000
-		});
-		setTimeout(i=>{
-			uni.navigateTo({
-				url: '/pages/login/login',
-				fail:function(err){
-					console.log(err)
-				}
-			});
-		},2000);
-		return Promise.reject(response) 
+  //  if (response.data.retHead.errCode !== 200) { // 服务端返回的状态码不等于200,则reject()
+	 //   uni.showToast({
+		// icon:'none',
+		// mask:false,
+		// title:`${response.data.message}`,
+		// duration: 2000
+	 //   });
+	 // };
+	 // console.log('response',response);
+	 // if(response.data.retHead.errCode == 401){
+		//  // console.log('response',response);
+		// uni.showToast({
+		//  	title:response.data.message + "    即将跳转到登录页",
+		//  	icon:"none",
+		//  	duration:2000
+		// });
+		// setTimeout(i=>{
+		// 	uni.navigateTo({
+		// 		url: '/pages/login/login',
+		// 		fail:function(err){
+		// 			console.log(err)
+		// 		}
+		// 	});
+		// },2000);
+		// return Promise.reject(response) 
 		
-	 };
+	 // };
      // return Promise.reject(response) // return Promise.reject 可使promise状态进入catch
  if (response.config.custom.verification) { // 演示自定义参数的作用
     return response.data
@@ -65,10 +66,20 @@ const msg = (title, duration=1500, mask=false, icon='none')=>{
 // import $pay from "./pay.js";
 // Vue.prototype.$pay = $pay
 
+const href = (data,type = 1) =>{
+	uni.navigateTo({
+		url:data,
+		fail:function(err){
+			console.log('navigateTo fail',err)
+		}
+	})
+};
+
 Vue.config.productionTip = false;
 
-Vue.prototype.$api = {msg,http};
+Vue.prototype.$api = {msg,http,href};
 Vue.prototype.$getimg = config.imgUrl;
+Vue.prototype.$getInnerImg = config.innerImgUrl;
 Vue.prototype.$placeImg = config.placeImg;
 Vue.prototype.$store = store;
 Vue.prototype.config = config;

+ 93 - 28
pages.json

@@ -1,44 +1,109 @@
 {
 	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+{
+			"path": "pages/usercenter/orderList/orderList",
+			"style": {
+				"navigationBarTitleText": "我的订单"
+			}
+		},
+		{
+			"path": "pages/index/init",
+			"navigationStyle":"custom"
+			,"style": {
+				"navigationBarBackgroundColor":"#fff",
+				"navigationBarTitleText": "入口页"//入口页
+				// ,"titleNView": false
+			}
+		},
+		{
+			"path": "pages/index/guide",
+			"navigationStyle":"custom"
+			,"style": {
+				"navigationBarBackgroundColor":"#fff",
+				"navigationBarTitleText": "引导页"
+			}
+		},
+		{
+			"path": "pages/login/loginType",
+			"style": {
+				"navigationBarTitleText": ""
+			}
+		},
+		{
+			"path": "pages/login/companyLogin",
+			"style": {
+				"navigationBarTitleText": "企业用户登录"
+			}
+		},
+		{
+			"path": "pages/index/index",
+			"style": {
+				"navigationBarTitleText": ""
+			}
+		},
+		{
+			"path": "pages/use/use",
+			"style": {
+				"navigationBarTitleText": "价值实现"
+			}
+		},
+		{
+			"path": "pages/usercenter/usercenter",
+			"style": {
+				"navigationBarTitleText": ""
+			}
+		},
+		{
+			"path": "pages/usercenter/certificateList/certificateList",
+			"style": {
+				"navigationBarTitleText": "我的证书"
+			}
+		},
 		// {
-		// 	"path": "pages/index/init",
-		// 	"navigationStyle":"custom"
-		// 	,"style": {
-		// 		"navigationBarBackgroundColor":"#fff",
-		// 		"navigationBarTitleText": "入口页"//入口页
-		// 		// ,"titleNView": false
-		// 	}
-		// },
-		// {
-		// 	"path": "pages/index/guide",
-		// 	"navigationStyle":"custom"
-		// 	,"style": {
-		// 		"navigationBarBackgroundColor":"#fff",
-		// 		"navigationBarTitleText": "引导页"
-		// 	}
-		// },
-		// {
-		// 	"path": "pages/login/loginType",
-		// 	"style": {
-		// 		"navigationBarTitleText": ""
-		// 	}
-		// },
-		// {
-		// 	"path": "pages/login/companyLogin",
+		// 	"path": "pages/usercenter/orderList/orderList",
 		// 	"style": {
-		// 		"navigationBarTitleText": "企业用户登录"
+		// 		"navigationBarTitleText": "我的订单"
 		// 	}
 		// },
 		{
-			"path": "pages/index/index",
+			"path": "pages/usercenter/orderList/orderdetails/orderdetails",
 			"style": {
-				"navigationBarTitleText": ""
+				"navigationBarTitleText": "订单详情"
+			}
+		},
+		{
+			"path": "pages/usercenter/subscribe/subscribe",
+			"style": {
+				"navigationBarTitleText": "我的认购"
 			}
 		}
 	],
+	"tabBar": {
+	    "color": "#999",
+	    "selectedColor": "#26D18B",
+	    "borderStyle": "white",
+		"height":"134rpx",
+	    "backgroundColor": "#ffffff",
+	    "list": [{
+	        "pagePath": "pages/index/index",
+	        "iconPath": "/static/img/icon_home.png",
+			"selectedIconPath":"static/img/icon_home_active.png",
+	        "text": "首页"
+	    },{
+	        "pagePath": "pages/use/use",
+	        "iconPath": "static/img/icon_use.png",
+			"selectedIconPath":"static/img/icon_use_active.png",
+	        "text": "价值实现"
+	    },{
+	        "pagePath": "pages/usercenter/usercenter",
+	        "iconPath": "static/img/icon_usercenter.png",
+			"selectedIconPath":"static/img/icon_usercenter_active.png",
+	        "text": "我的信息"
+	    }]
+	},
 	"globalStyle": {
 		"navigationBarTextStyle": "black",
-		"navigationBarTitleText": "uni-app",
+		"navigationBarTitleText": "碳汇",
 		"navigationBarBackgroundColor": "#fff",
 		"backgroundColor": "#F5F5F5"
 	}

+ 49 - 31
pages/index/index.css

@@ -1,3 +1,5 @@
+page{background-color: #f5f5f5;}
+
 .title{font-size: 42rpx;color: #333;line-height: 59rpx;margin-bottom: 32rpx;font-weight: 600;}
 
 .home-top{position: relative;height: 391rpx;padding-left: 40rpx;overflow: hidden;color: #fff;}
@@ -5,13 +7,17 @@
 .home-top-til{margin-top: 120rpx;font-size: 42rpx;line-height: 49rpx;text-indent: -0.5em;}
 .home-top-subtil{font-size: 26rpx;line-height: 37rpx;}
 
-.swiper-wrap{margin: -151rpx auto 32rpx;width: 670rpx;height: 320rpx;}
+.swiper-wrap{margin: -151rpx auto 32rpx;width: 670rpx;height: 320rpx;overflow: hidden;border-radius: 16rpx;position: relative;}
 .swiper{height: 100%;}
 .adv-item{height: 100%;}
 .swiper-wrap .pic{width: 100%;height: 100%;}
 
-.buy-now{display: flex;box-sizing: border-box;padding-right: 54rpx;margin-top: 38rpx;margin-bottom: 32rpx;height: 112rpx;background: #fff;box-shadow: 0px 0rpx 12rpx 0px rgba(0, 0, 0, 0.04);border-radius: 62rpx 100rpx 100rpx 0px;align-items: center;}
-.buy-now-imgwrap{width: 270rpx;display: flex;align-items: flex-end;justify-content: center;margin-right: 37rpx;height: 100%;background: linear-gradient(90deg, #FFF900 0%, #FFD200 100%);border-radius: 62rpx 0px 61rpx 0px;box-shadow: 0px 0px 12rpx 0px rgba(0, 0, 0, 0.04);}
+.dots-container{position: absolute;right: 24rpx;bottom: 24rpx;display: flex;justify-content: center;}
+.dot {margin: 0 8rpx;width: 16rpx;height: 8rpx;background: #fff;border-radius: 4rpx;opacity: 0.7;}
+.dot.active {width: 36rpx;opacity: 1;}
+
+.buy-now{display: flex;box-sizing: border-box;padding-right: 54rpx;margin-top: 38rpx;margin-bottom: 32rpx;height: 112rpx;background: linear-gradient(to right,rgba(255,255,255,0) 20%,#fff 100% );box-shadow: 0px 0rpx 12rpx 0px rgba(0, 0, 0, 0.04);border-radius: 62rpx 100rpx 100rpx 0px;align-items: center;}
+.buy-now-imgwrap{width: 270rpx;display: flex;align-items: flex-end;justify-content: center;margin-right: 37rpx;height: 100%;background: linear-gradient(90deg, #FFF900 20rpx, #FFD200 100%);border-radius: 62rpx 0px 61rpx 0px;box-shadow: 0px 0px 12rpx 0px rgba(0, 0, 0, 0.04);}
 .buy-now-img{width: 166rpx;height: 134rpx;}
 .buy-now-text{flex: 1;}
 .buy-now-text-big{font-size: 36rpx;color: #333;line-height: 43rpx;}
@@ -23,33 +29,45 @@
 .type-nav-item{flex: 1;text-align: center;position: relative;}
 .type-nav-item-til{font-size: 32rpx;color: #333;line-height: 45rpx;margin-bottom: 6rpx;font-weight: 500;}
 .type-nav-item-subtil{font-size: 24rpx;color: #999;line-height: 33rpx;font-weight: 400;}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+.type-nav-item.active .active-bg{width: 78rpx;margin-left: -39rpx;height: 54rpx;margin-top: -27rpx;position: absolute;left: 50%;top: 50%;z-index: -1;}
+
+.product-list{display: flex;justify-content: space-between;flex-wrap: wrap;}
+.product-list-item{width: 200rpx;height: 200rpx;position: relative;margin-bottom: 18rpx;overflow: hidden;border-radius: 16rpx;}
+.product-list-item .product-img{width: 100%;height: 100%;}
+.product-list-item .product-text{position: absolute;left: 0;bottom: 0;right: 0;height: 56rpx;line-height: 56rpx;font-size: 24rpx;color: #fff;padding-left: 16rpx;overflow: hidden;text-overflow: ellipsis;background: rgba(0, 0, 0, 0.4);}
+
+.rank-wrap{margin-bottom: 44rpx;border-radius: 16rpx;box-shadow: 0px 0px 12rpx 0px rgba(0, 0, 0, 0.04);}
+.rank-tab{display: flex;background-color: #fff;margin-bottom: 8rpx;box-shadow: 0px 0px 12rpx 0px rgba(0, 0, 0, 0.04);border-radius: 16rpx;}
+.rank-tab-item{flex: 1;position: relative;height: 86rpx;line-height: 86rpx;text-align: center;font-size: 28rpx;color: #333;}
+.rank-tab-item.active{color: #26D18B;}
+.rank-tab-item.active::after{content: '';width: 130rpx;margin-left: -65rpx;height: 4rpx;background-color: #26D18B;border-radius: 2rpx;position: absolute;left: 50%;bottom: 0;}
+.rank-top{display: flex;justify-content: center;border-radius: 16rpx 16rpx 0 0 ;padding: 105rpx 0 16rpx;background-color: #fff;position: relative;}
+.rank-top-item{width: 210rpx;text-align: center;}
+.rank-top-imgwrap{position: relative;margin-bottom: 12rpx;}
+.rank-top-bg{width: 100%;height: 61rpx;position: absolute;left: 0;bottom: 0;}
+.rank-top-photo{width: 144rpx;height: 144rpx;border-radius: 50%;}
+.rank-top-name{font-size: 28rpx;color: #333;line-height: 40rpx;font-weight: 500;}
+.rank-top-carbon{font-size: 20rpx;color: #999;}
+.rank-wrap .rank-top-item:nth-child(2){transform: scale(0.9);}
+.rank-wrap .rank-top-item:nth-child(3){transform: scale(0.8);}
+.my-rank-wrap{flex: unset;position: absolute;top: 24rpx;right: 0;align-items: center;display: flex;}
+.my-rank-photo{width: 80rpx;height: 80rpx;position: relative;right: -30rpx;box-sizing: border-box;border-radius: 50%;overflow: hidden;border: 2rpx solid #fff;}
+.my-rank-photo .photo{width: 100%;height: 100%;}
+.my-rank-text{padding: 7rpx 16rpx 0 45rpx;height: 80rpx;box-sizing: border-box;color: #fff;background: linear-gradient(139deg, #43D394 0%, #18C197 100%);box-shadow: 0px 10rpx 15rpx 0px rgba(0, 0, 0, 0.1), 0px 7rpx 14rpx 0px rgba(0, 0, 0, 0.08), 0px 3rpx 12rpx 0px rgba(0, 0, 0, 0.06);}
+.my-rank-text .my-rank{font-size: 28rpx;line-height: 40rpx;}
+.my-rank-text .my-rank-num{font-size: 20rpx;line-height: 28rpx;}
+.rank-list-header{display: flex;align-items: center;height: 68rpx;font-size: 24rpx;color: #666;text-align: center;}
+.rank-list-header-rank{width: 128rpx;}
+.rank-list-header-user{flex: 1;}
+.rank-list-header-carbon{width: 170rpx;margin-left: 0;}
+.rank-list{overflow: hidden;background-color: #fff;padding: 0 40rpx 0 0;border-radius: 0 0 16rpx 16rpx;}
+.rank-list-item{display: flex;align-items: center;margin: 24rpx 0;padding-bottom: 31rpx;position: relative;}
+.rank-list-item::after{content: '';width: calc( 100% - 128rpx );height: 2px;background-color: #EDEEED;position: absolute;right: 0;bottom: 0;}
+.rank-list .rank-list-item:last-of-type::after{height: 0;}
+.rank-list-rank{width: 128rpx;text-align: center;font-size: 32rpx;color: #999;}
+.rank-list-user{flex: 1;display: flex;align-items: center;overflow: hidden;}
+.rank-list-user .photo{width: 88rpx;height: 88rpx;border-radius: 50%;margin-right: 24rpx;}
+.rank-list-user .name{font-size: 28rpx;color: #333;flex: 1;}
+.rank-list-carbon{width: 170rpx;margin-left: 0;font-size: 26rpx;color: #26D18B;line-height: 37rpx;}
 
 

+ 146 - 11
pages/index/index.vue

@@ -10,15 +10,24 @@
 			:indicator-dots="swiper.indicatorDots" 
 			:indicator-color="swiper.indicatorColor"  
 			:indicator-active-color="swiper.indicatorActiveColor" 
-			:autoplay="swiper.autoplay" 			
+			:autoplay="swiper.autoplay"
+			@change="swiperChange"
 			:interval="swiper.interval" :duration="swiper.duration">
-				<swiper-item>
-					<view class="adv-item"><image :src="$getimg +'guide01.png'" class="pic" mode="scaleToFill"></image></view>
+				<!-- <swiper-item>
+					<view class="adv-item"><image :src="$getimg +'banner01.png'" class="pic" mode="scaleToFill"></image></view>
 				</swiper-item>
 				<swiper-item>
-					<view class="adv-item" @click="goIndex"><image :src="$getimg +'guide02.png'" class="pic" mode="widthFix"></image></view>
+					<view class="adv-item" @click="goIndex"><image :src="$getimg +'guide02.png'" class="pic" mode="scaleToFill"></image></view>
+				</swiper-item> -->
+				<swiper-item v-for="(item, index) in swiperList" :key="index">
+					<view class="adv-item" @click="swiperClick"><image :src="$getimg +item.src" class="pic" mode="scaleToFill"></image></view>
 				</swiper-item>
 			</swiper>
+			<view class="dots-container">
+			  <view v-for="(item, index) in swiperList" :key="index">
+			    <view :class="['dot', index === swiperCurrent ? 'active' : '']"></view>
+			  </view>
+			</view>
 		</view>
 		<view class="wrap40">
 			<view class="title">推荐生态产品</view>
@@ -36,20 +45,91 @@
 			</view>
 			<!-- buy-now end -->
 			<view class="type-nav">
-				<view class="type-nav-item">
+				<view class="type-nav-item active">
 					<view class="type-nav-item-til">林业碳汇</view>
 					<view class="type-nav-item-subtil">为您推荐</view>
+					<image src="../../static/img/type-nav-active.png" class="active-bg" mode="aspectFit"></image>
 				</view>
 				<view class="type-nav-item">
-					<view class="type-nav-item-til">新能源汽车</view>
-					<view class="type-nav-item-subtil">绿色出行</view>
+					<!-- <view class="type-nav-item-til">新能源汽车</view>
+					<view class="type-nav-item-subtil">绿色出行</view> -->
 				</view>
 				<view class="type-nav-item">
-					<view class="type-nav-item-til">分布式光伏</view>
-					<view class="type-nav-item-subtil">新能源</view>
+					<!-- <view class="type-nav-item-til">分布式光伏</view>
+					<view class="type-nav-item-subtil">新能源</view> -->
+				</view>
+			</view>
+			<view class="common-content">
+				<view class="common-content-title">
+					<view class="common-content-icon">
+						<image src="../../static/img/icon-tanpuhui.png" class="icon" mode="aspectFit"></image>
+					</view>
+					<view class="common-content-til">
+						碳汇产品展示
+					</view>
+					<view class="common-content-right" @click="refreshProductList">
+						<image src="../../static/img/icon-refresh.png" class="icon" mode="aspectFit"></image>
+						换一批
+					</view>
+				</view>
+				<view class="product-list">
+					<view class="product-list-item" v-for="(item, index) in productList" :key="index" @click="productClick(item)">
+						<image :src="item.img" class="product-img" mode="heightFix"></image>
+						<view class="product-text">{{item.name}}</view>
+					</view>
+				</view>
+				<view class="common-content-blink">查看更多 ></view>
+			</view>
+			<!-- 碳汇产品展示 结束 -->
+			<view class="title">购买排行榜</view>
+			<view class="rank-wrap">
+				<view class="rank-tab">
+					<view class="rank-tab-item" :class="{active: rankType == 1 }" @click="rankTab(1)">
+						企业排行榜
+					</view>
+					<view class="rank-tab-item" :class="{active: rankType == 2 }" @click="rankTab(2)">
+						个人排行榜
+					</view>
+				</view>
+				<view class="rank-top">
+					<view class="rank-top-item" v-for="(item, index) in rankTop" :key="index">
+						<view class="rank-top-imgwrap">
+							<image src="../../static/img/rank-top01.png" class="rank-top-bg" mode="aspectFit"></image>
+							<image :src="item.img" class="rank-top-photo" mode="scaleToFill"></image>
+						</view>
+						<view class="rank-top-name f-ellipsis">{{item.name}}</view>
+						<view class="rank-top-carbon f-ellipsis">共购买{{item.carbon}}kg碳汇</view>
+					</view>
+					<view class="my-rank-wrap">
+						<view class="my-rank-photo">
+							<image :src="myRank.img" class="photo" mode="scaleToFill"></image>
+						</view>
+						<view class="my-rank-text">
+							<view class="my-rank">第{{myRank.rank}}名</view>
+							<view class="my-rank-num">共购买{{myRank.carbon}}kg碳汇</view>
+						</view>
+					</view>
+				</view>
+				<!-- rank-top end -->
+				<view class="rank-list-header">
+					<view class="rank-list-header-rank">排名</view>
+					<view class="rank-list-header-user">用户</view>
+					<view class="rank-list-header-carbon">购买碳汇</view>
+				</view>
+				<view class="rank-list">
+					<view class="rank-list-item" v-for="(item, index) in rankList" :key="index">
+						<view class="rank-list-rank">{{item.rank}}</view>
+						<view class="rank-list-user">
+							<image :src="item.img" class="photo" mode="scaleToFill"></image>
+							<view class="name f-ellipsis">{{item.name}}</view>
+						</view>
+						<view class="rank-list-carbon">共购买{{item.carbon}}kg<br />碳汇</view>
+					</view>
 				</view>
 			</view>
+			<!-- 购买排行榜 结束 -->
 		</view>
+		<!-- wrap end -->
 		
 		
 	</view>
@@ -61,20 +141,75 @@
 			return {
 				$getimg:this.$getimg,
 				swiper: {
-					indicatorDots: true,
+					indicatorDots: false,
 					autoplay: true,
 					interval: 9000,
 					duration: 500,
 					indicatorColor:"rgba(255, 255, 255, 0.7)",
 					indicatorActiveColor:"rgba(255, 255, 255, 1)",
 				},
+				swiperList:[
+					{src:'banner01.png'},
+					{src:'banner01.png'}
+				],
+				current: 0,
+				swiperCurrent: 0,
+				productList:[
+					{name:'酉阳土家族苗',img:'http://qny.gzsdtfp.com/gzth005/imgupload/39b6b37e61e240c98e4c8ca392c5f3a5.jpg'},
+					{name:'酉阳土家族苗',img:'http://qny.gzsdtfp.com/gzth005/imgupload/39b6b37e61e240c98e4c8ca392c5f3a5.jpg'},
+					{name:'酉阳土家族苗',img:'http://qny.gzsdtfp.com/gzth005/imgupload/39b6b37e61e240c98e4c8ca392c5f3a5.jpg'},
+					{name:'酉阳土家族苗',img:'http://qny.gzsdtfp.com/gzth005/imgupload/39b6b37e61e240c98e4c8ca392c5f3a5.jpg'},
+					{name:'酉阳土家族苗',img:'http://qny.gzsdtfp.com/gzth005/imgupload/39b6b37e61e240c98e4c8ca392c5f3a5.jpg'},
+					{name:'酉阳土家族苗',img:'http://qny.gzsdtfp.com/gzth005/imgupload/39b6b37e61e240c98e4c8ca392c5f3a5.jpg'},
+				],
+				rankType:1,
+				rankTop:[
+					{name:'酉阳土家族苗',carbon:1000,img:'http://qny.gzsdtfp.com/gzth005/imgupload/39b6b37e61e240c98e4c8ca392c5f3a5.jpg'},
+					{name:'酉阳土家族苗',carbon:1000,img:'http://qny.gzsdtfp.com/gzth005/imgupload/39b6b37e61e240c98e4c8ca392c5f3a5.jpg'},
+					{name:'酉阳土家族苗',carbon:1000,img:'http://qny.gzsdtfp.com/gzth005/imgupload/39b6b37e61e240c98e4c8ca392c5f3a5.jpg'},					
+				],
+				myRank:{name:'家族苗',carbon:1000,rank:11,img:'http://qny.gzsdtfp.com/gzth005/imgupload/39b6b37e61e240c98e4c8ca392c5f3a5.jpg'},
+				rankList:[
+					{name:'家族苗',carbon:1000,rank:'04',img:'http://qny.gzsdtfp.com/gzth005/imgupload/39b6b37e61e240c98e4c8ca392c5f3a5.jpg'},
+					{name:'家族苗',carbon:1000,rank:'05',img:'http://qny.gzsdtfp.com/gzth005/imgupload/39b6b37e61e240c98e4c8ca392c5f3a5.jpg'},
+					{name:'家族苗',carbon:1000,rank:'06',img:'http://qny.gzsdtfp.com/gzth005/imgupload/39b6b37e61e240c98e4c8ca392c5f3a5.jpg'},
+					{name:'家族苗',carbon:1000,rank:'07',img:'http://qny.gzsdtfp.com/gzth005/imgupload/39b6b37e61e240c98e4c8ca392c5f3a5.jpg'},
+				],
 				
 			}
 		},
 		onLoad() {
-			
+			// this.getProductList();
 		},
 		methods: {
+			swiperChange (e) {
+			    this.swiperCurrent = e.detail.current
+			},
+			swiperClick(){
+				console.log(this.swiperCurrent);
+			},
+			getProductList(){
+				this.$api.http.post(this.config.apiBaseurl + '/goods/searchForIndex',{},{
+					header: {
+					Accept:'application/json',
+					// Authorization: 'Bearer '+ this.token, //注意Bearer后面有一空格
+				},
+				}).then(res => {
+					console.log('res',res)
+				}).catch(err =>{
+					console.log('err',err)
+				});
+			},
+			refreshProductList(){
+				this.getProductList();
+			},
+			productClick(){
+				
+			},
+			rankTab(type){
+				this.rankType = type;
+				console.log(type);
+			}
 
 		}
 	}

+ 52 - 5
pages/login/companyLogin.vue

@@ -6,18 +6,18 @@
 			<view class="login-form-item">
 				<view class="login-form-item-til">账号</view>
 				<view class="login-form-item-con">
-					<input type="text" value="" placeholder="请输入账号" />
+					<input type="text" value="" v-model="params.loginStr" placeholder="请输入账号" />
 				</view>
 			</view>
 			<view class="login-form-item">
 				<view class="login-form-item-til">密码</view>
 				<view class="login-form-item-con">
-					<input type="password" value="" placeholder="请输入密码" />
+					<input type="password" value="" v-model="params.pwd" placeholder="请输入密码" />
 				</view>
 			</view>
 		</view>
 		<view class="wrap">
-			<view class="full-btn">登录</view>
+			<view class="full-btn" @click="handleLogin">登录</view>
 		</view>
 		<view class="bottom-btn-wrap">
 			<view class="bottom-btn forgetpass">忘记密码</view>
@@ -26,12 +26,18 @@
 </template>
 
 <script>
+	import { mapState, mapMutations } from 'vuex';
 	export default {
 		data() {
 			return {
 				params:{
-					token:'',
-				}
+					loginStr:'64676376',
+					pwd:'123456',
+				},
+				rules: {
+					loginStr: {rule: /^[A-Za-z0-9]+$/,msg: "填写用户名"},
+					pwd: {rule: /\S/,msg: "填写密码"},
+				},
 				
 			}
 		},
@@ -41,7 +47,48 @@
 		onLoad() {
 
 		},
+		computed: mapState(['hasLogin', 'userInfo','hPage']),
 		methods: {
+			...mapMutations(['login', 'logout','upInfo']),
+			handleLogin(){
+				console.log('params',this.params);
+				for (let x in this.params) {
+					// console.log('x',x)
+					if(!this.validate(x)) return;
+				}
+				this.$api.http.post(this.config.apiBaseurl + '/carbon-h5/wap/customer/customerLogin',this.params,{
+				// 	header: {
+				// 	Accept:'application/json',
+				// 	Authorization: 'Bearer '+ this.token, //注意Bearer后面有一空格
+				// },
+				}).then(res => {
+					console.log('res',res)
+					const token = {accessToken: res.data.retBody.token};
+					//保存token
+					// console.log('this.login',this.login);
+					this.login(token);
+					//取得用户信息
+					this.upInfo();
+				}).catch(err =>{
+					console.log('err',err)
+				});
+			},
+			//判断验证是否符合要求
+			validate(key) {
+				let bool = true;
+				if (!this.rules[key].rule.test(this.params[key])) {
+					//提示信息
+					uni.showToast({
+						icon:"none",
+						title: this.rules[key].msg,
+					})
+					//取反
+					bool = false;
+					return false;
+				}
+				return bool;
+			},
+			
 
 		}
 	}

+ 34 - 0
pages/use/use.css

@@ -0,0 +1,34 @@
+page{background-color: #f5f5f5;}
+.top-img{height: 344rpx;}
+.use-wrap{margin: -153rpx 40rpx 40rpx;padding: 60rpx 24rpx 24rpx;background-color: #fff;box-shadow: 0px 0px 12rpx 0px rgba(0, 0, 0, 0.04);border-radius: 16rpx;}
+.use-wrap-header{display: flex;justify-content: space-between;align-items: center;margin-bottom: 60rpx;}
+.use-wrap-header .til{font-size: 32rpx;color: #333;font-weight: 500;}
+.use-wrap-header .subtil{font-size: 24rpx;color: #999;}
+.use-wrap-header .subtil .iconfont{margin-left: 8rpx;}
+
+.use-item{margin-bottom: 30rpx;padding-left: 121rpx;display: flex;align-items: center;justify-content: flex-start;border-radius: 32rpx;height: 152rpx;box-shadow: 0px 20rpx 15rpx 0px rgba(0, 0, 0, 0.04), 0px 13rpx 14rpx 0px rgba(0, 0, 0, 0.08), 0px 7rpx 12rpx 0px rgba(0, 0, 0, 0.06), 0px 0px 12rpx 0px rgba(0, 0, 0, 0.04);}
+.use-item-img{width: 80rpx;height: 80rpx;margin-right: 35rpx;}
+.use-item-til{font-size: 32rpx;color: #333;font-weight: 600;letter-spacing: 2rpx;margin-right: 24rpx;}
+.use-item-subtil{font-size: 24rpx;color: #999;}
+.use-wrap .use-item:last-of-type{margin-bottom: 150rpx;}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 64 - 0
pages/use/use.vue

@@ -0,0 +1,64 @@
+<template>
+	<view class="pages">
+		<view class="top-img">
+			<image :src="$getimg + 'banner01.png'" class="img" mode="widthFix"></image>
+		</view>
+		<view class="use-wrap">
+			<view class="use-wrap-header">
+				<view class="til">价值实现</view>
+				<view class="subtil">
+					<text>关于价值实现</text>
+					<text class="iconfont icon-jiantou"></text>
+				</view>
+			</view>
+			<view class="use-item" @click="lvyue">
+				<image :src="$getimg + 'icon-lvyue.png'" class="use-item-img" mode="scaleToFill"></image>
+				<view class="use-item-til">碳履约</view>
+				<view class="use-item-subtil">(仅履约企业)</view>
+			</view>
+			<view class="use-item" @click="zhonghe">
+				<image :src="$getimg + 'icon-zhonghe.png'" class="use-item-img" mode="scaleToFill"></image>
+				<view class="use-item-til">企业碳中和</view>
+			</view>
+			<view class="use-item" @click="huodong">
+				<image :src="$getimg + 'icon-huodong.png'" class="use-item-img" mode="scaleToFill"></image>
+				<view class="use-item-til">大型活动碳中和</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				$getimg:this.$getimg,
+				params:{
+					token:'',
+				}
+				
+			}
+		},
+		onShow() {
+		},
+		onLoad() {
+
+		},
+		methods: {
+			lvyue(){
+				this.$api.msg('暂未开放')
+			},
+			zhonghe(){
+				this.$api.msg('暂未开放')
+			},
+			huodong(){
+				this.$api.msg('暂未开放')
+			}
+
+		}
+	}
+</script>
+
+<style>
+	@import url("./use.css");
+</style>

+ 34 - 0
pages/usercenter/certificateList/certificateList.css

@@ -0,0 +1,34 @@
+page{background-color: #F5F5F5;}
+.certificate{margin: 24rpx 30rpx;}
+.certificate-item{display: flex;align-items: center;box-sizing: border-box;height: 169rpx;padding: 42rpx 24rpx 41rpx 50rpx;margin-bottom: 24rpx;background-color: #fff;border-radius: 16rpx;}
+.certificate-item-img{width: 60rpx;height: 86rpx;margin-right: 50rpx;}
+.certificate-item-text{flex: 1;}
+.certificate-item-text .num{margin-bottom: 10rpx;font-size: 28rpx;color: #333;line-height: 40rpx;font-weight: 500;}
+.certificate-item-text .time{font-size: 24rpx;color: #999;line-height: 33rpx;}
+.certificate-item-icon .iconfont{color: #D8D8D8;}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 150 - 0
pages/usercenter/certificateList/certificateList.vue

@@ -0,0 +1,150 @@
+<template>
+	<view class="pages">
+		<mescroll-body class="certificateList-wrap" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback" :down="downOption" :up="upOption">
+			<view class="certificate">
+				<view v-for="(item,index) in certificateList" :key="index" class="certificate-item">
+					<image :src="$getInnerImg + 'certificate.png'" class="certificate-item-img" mode="scaleToFill"></image>
+					<view class="certificate-item-text">
+						<view class="num">证书编号:{{item.num}}</view>
+						<view class="time">颁发日期:{{item.time}}</view>
+					</view>
+					<view class="certificate-item-icon"><text class="iconfont icon-jiantou"></text></view>
+				</view>
+			</view>
+		</mescroll-body>		
+	</view>
+</template>
+
+<script>
+	// 引入mescroll-mixins.js
+	import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";	
+	// 引入mescroll-body组件 (如已在main.js注册全局组件,则省略此步骤)
+	import MescrollBody from "@/components/mescroll-uni/mescroll-body.vue"; // 注意.vue后缀不能省
+	export default {
+		mixins: [MescrollMixin], // 使用mixin
+		components: {
+			MescrollBody,
+		},
+		data() {
+			return {
+				$getInnerImg:this.$getInnerImg,
+				mescroll: null, // mescroll实例对象 (此行可删,mixins已默认)
+				// 下拉刷新的配置(可选, 绝大部分情况无需配置)
+				downOption: { 
+					// ...
+				},
+				// 上拉加载的配置(可选, 绝大部分情况无需配置)
+				upOption: {
+					page: {
+						size: 10 // 每页数据的数量,默认10
+					},
+					noMoreSize: 5, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
+					empty: {
+						tip: '暂无相关数据'
+					}
+				},
+				params:{
+					tokenhead:'',
+					token:'',
+				},
+				certificateList:[
+					{
+						num:"0999999",
+						time:'2019-01-02 12:32',
+					},
+					{
+						num:"0999999",
+						time:'2019-01-02 12:32',
+					},
+				],
+				
+			}
+		},
+		onShow() {
+			let serf = this;
+			//检查登录,获取token
+			// let loginRes = this.checkLogin('/pages/index/index', '2');
+			// if(!loginRes){return false;}
+			// serf.params.token=loginRes[0];			
+		},
+		onLoad() {
+			let self = this;
+			uni.getStorage({
+				key:'token',
+				success: function (res) {
+					self.params.token = res.data;
+				   // console.log(res.data);
+				}
+			});
+			uni.getStorage({
+				key:'tokenhead',
+				success: function (res) {
+					self.params.tokenhead = res.data;
+				   // console.log(res.data);
+				}
+			});
+
+		},
+		methods: {
+			/*mescroll组件初始化的回调,可获取到mescroll对象 (此处可删,mixins已默认)*/
+			mescrollInit(mescroll) {
+				this.mescroll = mescroll;
+			},
+			/*下拉刷新的回调, 有三种处理方式:*/
+			downCallback(){
+			
+				// 第2种: 下拉刷新和上拉加载调同样的接口, 那么不用第1种方式, 直接mescroll.resetUpScroll()即可
+				this.mescroll.resetUpScroll(); // 重置列表为第一页 (自动执行 page.num=1, 再触发upCallback方法 )
+			},
+			/*上拉加载的回调*/
+			upCallback(page) {
+				let pageNum = page.num; // 页码, 默认从1开始
+				let pageSize = page.size; // 页长, 默认每页10条
+				this.params = Object.assign(this.params,{pageNum:pageNum,pageSize:pageSize});				
+				let thetoken = this.params.tokenhead + this.params.token;
+				console.log('thetoken',thetoken);
+				this.$api.http.get(this.config.apiBaseurl+'/pre/own',{params:this.params,header: {Authorization:thetoken}}).then(data => {
+					console.log('1111111111',data);
+					// 接口返回的当前页数据列表 (数组)
+					let curPageData = data.data.data.list; 
+					// console.log('curPageData',curPageData);
+					// 接口返回的当前页数据长度 (如列表有26个数据,当前页返回8个,则curPageLen=8)
+					let curPageLen = curPageData.length; 
+					// 接口返回的总页数 (如列表有26个数据,每页10条,共3页; 则totalPage=3)
+					// let totalPage = data.xxx; 
+					// 接口返回的总数据量(如列表有26个数据,每页10条,共3页; 则totalSize=26)
+					let totalSize = data.data.data.total; 
+					// this.mescrollList = curPageData;
+					// 接口返回的是否有下一页 (true/false)
+					// let hasNext = data.xxx; 
+					
+					//设置列表数据
+					if(page.num == 1) this.certificateList = []; //如果是第一页需手动置空列表
+					this.certificateList = this.certificateList.concat(curPageData); //追加新数据
+					// console.log('page.num',page.num);
+					console.log('this.certificateList',JSON.parse(JSON.stringify(this.certificateList)));
+					
+					//方法二(推荐): 后台接口有返回列表的总数据量 totalSize
+					this.mescroll.endBySize(curPageLen, totalSize); 
+			
+					// setTimeout(()=>{
+					// 	this.mescroll.endSuccess(curPageLen)
+					// },20)
+				
+				}).catch(err => {
+					this.mescroll.endErr()
+					console.log(err)
+				
+				});
+				
+			},
+
+			
+
+		}
+	}
+</script>
+
+<style>
+@import url("./certificateList.css");
+</style>

+ 34 - 0
pages/usercenter/orderList/orderList.css

@@ -0,0 +1,34 @@
+page{background-color: #F5F5F8;}
+
+.status-bar{display: flex;margin-bottom: 24rpx;border-top: 1px solid #ddd;background-color: #fff;}
+.status-bar-item{flex: 1;position: relative;text-align: center;font-size: 28rpx;color: #333;padding: 24rpx 0;}
+.status-bar-item.active{color: #26D18B;}
+.status-bar-item.active::after{content: '';position: absolute;left: 50%;bottom: 0;width: 74rpx;margin-left: -37rpx;height: 4rpx;background-color: #26D18B;}
+
+.order-item{background-color: #fff;padding: 24rpx;margin-bottom: 24rpx;}
+.order-info{display: flex;padding: 0 24rpx 16rpx;margin: 0 -24rpx 24rpx;justify-content: space-between;align-items: center;border-bottom: 1px solid #ddd;}
+.order-info-text-item{font-size: 26rpx;color: #666;line-height: 30rpx;}
+.order-info-status{display: flex;color: #999;font-size: 30rpx;}
+.order-info-status .status + .status{margin-left: 36rpx;}
+.order-info-status .status.topay{color: #FFDA00;}
+.order-product{display: flex;align-items: center;position: relative;}
+.order-product-img{width: 202rpx;height: 202rpx;margin-right: 24rpx;}
+.order-product-text{color: #333;}
+.order-product-til{font-size: 30rpx;color: #000;line-height: 30rpx;height: 70rpx;}
+.order-product-amount{margin-bottom: 13rpx;}
+.order-product-amount .rmb{font-size: 24rpx;margin-right: 5rpx;}
+.order-product-amount .amount{font-size: 40rpx;font-weight: 600;line-height: 40rpx;}
+.order-product-carbon{font-size: 30rpx;font-weight: 600;line-height: 40rpx;}
+.order-btn{flex: unset;position: absolute;right: 0;bottom: 24rpx;width: 168rpx;height: 58rpx;line-height: 58rpx;background-color: #fff;border: 1px solid #26D18B;border-radius: 6rpx;text-align: center;font-size: 30rpx;color: #26D18B;}
+.order-btn.topay{color: #FFDA00;border-color: #FFDA00;}
+
+
+
+
+
+
+
+
+
+
+

+ 264 - 0
pages/usercenter/orderList/orderList.vue

@@ -0,0 +1,264 @@
+<template>
+	<view class="pages">
+		<view class="status-bar">
+			<view class="status-bar-item" :class="params.status == -1?'active':''" @click="changestatus(-1)">全部</view>
+			<view class="status-bar-item" :class="params.status == 0?'active':''" @click="changestatus(0)">未完成</view>
+			<view class="status-bar-item" :class="params.status == 1?'active':''" @click="changestatus(1)">已完成</view>
+		</view>
+		<mescroll-body class="" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback" :down="downOption" :up="upOption">
+			<view class="orders">
+				<view v-for="(item,index) in orderlist" :key="index" class="order-item" @click="goOrderDetails(item.guid)">
+					<view class="order-info">
+						<view class="order-info-text">
+							<view class="order-info-text-item">订单编号:{{item.orderNo}}</view>
+							<view class="order-info-text-item">订单时间:{{item.createTime}}</view>
+						</view>
+						<view class="order-info-status">
+							<view class="status" v-if="item.status == 0" @click="cancelOrder(item)">取消订单</view>
+							<view class="status topay" v-if="item.status == 0">待付款</view>							
+							<view class="status" v-if="item.orderStatus == 1">待发货</view>
+							<view class="status" v-if="item.orderStatus == 2">已发货</view>
+							<view class="status" v-if="item.orderStatus == 3">已完成</view>
+							<view class="status" v-if="item.orderStatus == 4">已关闭</view>
+							<view class="status" v-if="item.orderStatus == 5">失效</view>							
+						</view>
+					</view>
+					<!-- order-info end -->
+					<view class="order-product">
+						<image :src="item.goodsOrderDetailForm[0].goodsImages" class="order-product-img" mode="scaleToFill"></image>
+						<view class="order-product-text">
+							<view class="order-product-til">
+								{{item.goodsOrderDetailForm.length}}个碳汇产品,共计{{item.orderCarbonAmount}}kg碳汇量
+							</view>
+							<view class="order-product-amount">
+								<text class="rmb">¥</text>
+								<text class="amount">{{item.orderAmount}}</text>
+							</view>
+							<view class="order-product-carbon">共{{item.orderCarbonAmount}}kg碳汇量</view>
+							<view class="order-btn topay" v-if="item.status == 0" @click.stop="pay(item)">立即支付</view>
+							<view class="order-btn" v-if="item.status == 3" @click.stop="$api.href('/pages/usercenter/certificateList/certificate?id='+item.id)">查看证书</view>							
+						</view>
+					</view>
+				</view>
+				<!-- order-item end -->
+			</view>
+			<!-- order end -->
+		</mescroll-body>
+		<uni-popup ref="popup" type="dialog">
+		    <uni-popup-dialog type="info"  :content="popupContent" :duration="2000" :before-close="true" @close="closepopup" @confirm="confirmpopup"></uni-popup-dialog>
+		</uni-popup>
+	</view>
+</template>
+
+<script>
+	// 引入mescroll-mixins.js
+	import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";	
+	// 引入mescroll-body组件 (如已在main.js注册全局组件,则省略此步骤)
+	import MescrollBody from "@/components/mescroll-uni/mescroll-body.vue"; // 注意.vue后缀不能省
+	
+	import uniPopup from '@/components/uni-popup/uni-popup.vue';
+	import uniPopupDialog from '@/components/uni-popup/uni-popup-dialog.vue';
+	export default {
+		mixins: [MescrollMixin], // 使用mixin
+		components: {
+			MescrollBody,
+			uniPopup,
+			uniPopupDialog,
+		},
+		data() {
+			return {
+				mescroll: null, // mescroll实例对象 (此行可删,mixins已默认)
+				// 下拉刷新的配置(可选, 绝大部分情况无需配置)
+				downOption: { 
+					// ...
+				},
+				// 上拉加载的配置(可选, 绝大部分情况无需配置)
+				upOption: {
+					page: {
+						size: 10 // 每页数据的数量,默认10
+					},
+					noMoreSize: 3, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
+					empty: {
+						tip: '暂无相关数据'
+					}
+				},
+				tokenhead:'',
+				token:this.config.testToken,				
+				params:{
+					status:-1,
+					// tokenhead:'',
+					// token:'',
+				},
+				orderlist:[
+					{orderNo:'10383902903920',time:'2020-5-14 09:00',image:'http://placekitten.com/202/202',amount:'55555',tyepNum:'3',saleNum:'60',status:'0'},
+					{orderNo:'10383902903920',time:'2020-5-14 09:00',image:'http://placekitten.com/202/202',amount:'55555',tyepNum:'3',saleNum:'60',status:'3'},
+					{orderNo:'10383902903920',time:'2020-5-14 09:00',image:'http://placekitten.com/202/202',amount:'55555',tyepNum:'3',saleNum:'60',status:'5'}
+				],
+				cancelId:null,
+				receiveId:null,
+				popupContent:'',
+				popupType:'',
+				
+			}
+		},
+		onShow() {
+			let serf = this;
+			//检查登录,获取token
+			// let loginRes = this.checkLogin('/pages/index/index', '2');
+			// if(!loginRes){return false;}
+			// serf.params.token=loginRes[0];			
+		},
+		onLoad() {
+			let self = this;
+			uni.getStorage({
+				key:'token',
+				success: function (res) {
+					self.token = res.data;
+				   // console.log(res.data);
+				}
+			});
+			uni.getStorage({
+				key:'tokenhead',
+				success: function (res) {
+					self.tokenhead = res.data;
+				   // console.log(res.data);
+				}
+			});
+
+		},
+		methods: {
+			/*mescroll组件初始化的回调,可获取到mescroll对象 (此处可删,mixins已默认)*/
+			mescrollInit(mescroll) {
+				this.mescroll = mescroll;
+			},
+			/*下拉刷新的回调, 有三种处理方式:*/
+			downCallback(){			
+				// 第2种: 下拉刷新和上拉加载调同样的接口, 那么不用第1种方式, 直接mescroll.resetUpScroll()即可
+				this.mescroll.resetUpScroll(); // 重置列表为第一页 (自动执行 page.num=1, 再触发upCallback方法 )
+			},
+			/*上拉加载的回调*/
+			upCallback(page) {
+				let pageNum = page.num; // 页码, 默认从1开始
+				let pageSize = page.size; // 页长, 默认每页10条
+				this.params = Object.assign(this.params,{pageNum:pageNum,pageSize:pageSize});				
+				let thetoken = 'Bearer ' + this.token;
+				// console.log('thetoken',thetoken);
+				this.$api.http.post(this.config.apiBaseurl + '/carbon-h5/wap/order/searchByPage',this.params,{
+					header: {
+					Accept:'application/json',
+					Authorization: 'Bearer '+ this.token, //注意Bearer后面有一空格
+				},
+				}).then(data => {
+					// console.log(data);
+					// 接口返回的当前页数据列表 (数组)
+					let curPageData = data.data.retBody; 
+					// console.log('curPageData',curPageData);
+					// 接口返回的当前页数据长度 (如列表有26个数据,当前页返回8个,则curPageLen=8)
+					let curPageLen = curPageData.length; 
+					// 接口返回的总页数 (如列表有26个数据,每页10条,共3页; 则totalPage=3)
+					// let totalPage = data.xxx; 
+					// 接口返回的总数据量(如列表有26个数据,每页10条,共3页; 则totalSize=26)
+					let totalSize = data.data.retHead.total; 
+					// this.mescrollList = curPageData;
+					// 接口返回的是否有下一页 (true/false)
+					// let hasNext = data.xxx; 
+					
+					//设置列表数据
+					if(page.num == 1) this.orderlist = []; //如果是第一页需手动置空列表
+					this.orderlist = this.orderlist.concat(curPageData); //追加新数据
+					// console.log('page.num',page.num);
+					console.log('this.orderlist',JSON.parse(JSON.stringify(this.orderlist)));
+					
+					//方法二(推荐): 后台接口有返回列表的总数据量 totalSize
+					this.mescroll.endBySize(curPageLen, totalSize); 
+			
+					// setTimeout(()=>{
+					// 	this.mescroll.endSuccess(curPageLen)
+					// },20)
+				
+				}).catch(err => {
+					this.mescroll.endErr()
+					console.log(err)
+				
+				});
+			},
+			//删除订单
+			delOrder(item){
+				
+			},
+			cancelOrder(item){
+				console.log(JSON.parse(JSON.stringify(item)));
+				this.cancelId = item.id;
+				this.$refs.popup.open();
+				this.popupContent = '确认取消此订单吗?';
+				this.popupType = 'cancel';				
+			},
+			received(item){
+				this.receiveId = item.id;
+				this.$refs.popup.open();
+				this.popupContent = '确认收货?';
+				this.popupType = 'received';
+			},
+			closepopup(done){
+				done()
+			},
+			confirmpopup(done,value){
+				if(this.popupType == 'cancel'){
+					this.$api.http.post(this.config.apiBaseurl + '/order/cancelUserOrder/?orderId='+this.cancelId,{},{
+						header: {
+						Accept:'application/json',
+						Authorization: 'Bearer '+ this.token, //注意Bearer后面有一空格
+					},
+					}).then(res => {
+						this.downCallback();
+						// console.log('res',res)
+					}).catch(err =>{
+						console.log('err',err)
+					});
+				}else if(this.popupType == 'received'){
+					this.$api.http.post(this.config.apiBaseurl + '/order/confirmReceiveOrder/?orderId='+this.receiveId,{},{
+						header: {
+						Accept:'application/json',
+						Authorization: 'Bearer '+ this.token, //注意Bearer后面有一空格
+					},
+					}).then(res => {
+						this.downCallback();
+						// console.log('res',res)
+					}).catch(err =>{
+						console.log('err',err)
+					});
+				}
+				
+				done()
+			},
+			changestatus(status){
+				this.params.status  = status;
+				this.downCallback();
+			},
+			goOrderDetails(id){
+				console.log(id)
+				uni.navigateTo({
+					url: './orderdetails/orderdetails?orderid=' + id,
+				});
+			},
+			pay(item){
+				let userInfo = uni.getStorageSync("userInfo");
+					let params = {
+						orderId:item.id,
+						payType:item.payType,
+						openid:userInfo.wxUsers.openid,
+						"tradeType":"test"
+					}
+					this.$pay.wxPay(params).then(res =>{
+						this.downCallback();
+						// console.log('payres',res);
+					}).catch(err =>{console.log('err',err);});
+			},
+
+		}
+	}
+</script>
+
+<style>
+@import url("./orderList.css");
+</style>

+ 29 - 0
pages/usercenter/orderList/orderdetails/orderdetails.css

@@ -0,0 +1,29 @@
+page{background-color: #FBFBFC;}
+.order{margin: 24rpx 0;padding: 35rpx 30rpx 35rpx 50rpx;background-color: #fff;font-size: 28rpx;color: #999;}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 153 - 0
pages/usercenter/orderList/orderdetails/orderdetails.vue

@@ -0,0 +1,153 @@
+<template>
+	<view class="page">
+		<view class="order">
+			<view class="order-info">订单编号:{{item.orderNo}}</view>
+			<view class="order-info">下单时间:{{item.createTime}}</view>
+			<view class="order-info">支付方式:线下认购</view>
+			<view class="order-info">支付流水号:29830843045809</view>
+		</view>
+		<!-- bottom-flex-btn-wrap end -->
+		<uni-popup ref="popup" type="dialog">
+		    <uni-popup-dialog type="info"  :content="popupContent" :duration="2000" :before-close="true" @close="closepopup" @confirm="confirmpopup"></uni-popup-dialog>
+		</uni-popup>
+	</view>
+</template>
+
+<script>
+	import uniPopup from '@/components/uni-popup/uni-popup.vue';
+	import uniPopupDialog from '@/components/uni-popup/uni-popup-dialog.vue';
+	export default {
+		components: {
+			uniPopup,
+			uniPopupDialog,
+		},
+		data() {
+			return {
+				token:this.config.testToken,
+				tokenhead:'',
+				params: {
+					orderid:'',
+				},
+				item:[],
+			}
+		},
+		onShow() {
+			let serf = this;
+		},
+		onLoad(option) {
+			// console.log('option',option);
+			this.params.orderid = option.orderid;
+			let self = this;
+			uni.getStorage({
+				key:'token',
+				success: function (res) {
+					self.token = res.data;
+				   // console.log(res.data);
+				}
+			});
+			uni.getStorage({
+				key:'tokenhead',
+				success: function (res) {
+					self.tokenhead = res.data;
+				   // console.log(res.data);
+				}
+			});
+			this.getdetails();
+
+		},
+		methods: {
+			getdetails(){
+				this.$api.http.get(this.config.apiBaseurl + '/carbon-h5/wap/order/info?orderId='+this.params.orderid,{
+					header: {
+					Accept:'application/json',
+					Authorization: 'Bearer '+ this.token, //注意Bearer后面有一空格
+				},
+				}).then(res => {
+					this.item = res.data.retBody;
+					console.log('res',JSON.parse(JSON.stringify(this.item)))
+				}).catch(err =>{
+					console.log('err',err)
+				});
+			},
+			cancelOrder(){
+				this.$refs.popup.open();
+				this.popupContent = '确认取消此订单吗?';
+				this.popupType = 'cancel';
+			},
+			received(){
+				this.$refs.popup.open();
+				this.popupContent = '确认收货?';
+				this.popupType = 'received';
+			},
+			closepopup(done){
+				done()
+			},
+			confirmpopup(done,value){
+				if(this.popupType == 'cancel'){
+					this.$api.http.post(this.config.apiBaseurl + '/order/cancelUserOrder/?orderId='+this.item.id,{},{
+						header: {
+						Accept:'application/json',
+						Authorization: 'Bearer '+ this.token, //注意Bearer后面有一空格
+					},
+					}).then(res => {
+						this.getdetails();
+						this.goOrderList(res.data.message);
+						// console.log('res',res)
+					}).catch(err =>{
+						console.log('err',err)
+					});
+				}else if(this.popupType == 'received'){
+					this.$api.http.get(this.config.apiBaseurl + '/order/confirmReceiveOrder/?orderId='+this.item.id,{},{
+						header: {
+						Accept:'application/json',
+						Authorization: 'Bearer '+ this.token, //注意Bearer后面有一空格
+					},
+					}).then(res => {
+						this.getdetails();
+						this.goOrderList(res.data.message);
+						// console.log('res',res)
+					}).catch(err =>{
+						console.log('err',err)
+					});
+				}
+				
+				done()
+			},
+			pay(){
+				let userInfo = uni.getStorageSync("userInfo");
+					let params = {
+						orderId:this.item.id,
+						payType:this.item.payType,
+						openid:userInfo.wxUsers.openid,
+						"tradeType":"test"
+					}
+					this.$pay.wxPay(params).then(res =>{
+						this.getdetails();
+						this.goOrderList(res.data.message);
+						// console.log('payres',res);
+					}).catch(err =>{console.log('err',err);});
+			},
+			// 跳转到订单列表
+			goOrderList(msg){
+				uni.showToast({
+					icon:"none",
+					title:msg,
+					duration: 2000
+				});	
+				setTimeout(()=>{
+					uni.navigateTo({
+						url: '/pages/usercenter/myorder/myorder',
+						fail:function(err){
+							console.log(err)
+						}
+					});
+				},1000)
+			}
+
+		}
+	}
+</script>
+
+<style>
+	@import url("./orderdetails.css");
+</style>

+ 0 - 0
pages/usercenter/subscribe/subscribe.css


+ 171 - 0
pages/usercenter/subscribe/subscribe.vue

@@ -0,0 +1,171 @@
+<template>
+	<view class="pages">
+		<mescroll-body class="wrap" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback" :down="downOption" :up="upOption">
+			<view class="certificate">
+				<view v-for="(item,index) in certificateList" :key="index" class="certificate-item">
+					<view class="certificate-item-photo">
+						<image class="certificate-item-photo-img" :src="item.headimgurl" mode=""></image>
+					</view>
+					<view class="certificate-item-text">
+						<view class="certificate-item-name">{{item.memberNickname}} <text class="type">{{item.type}}</text></view>
+						<view class="certificate-item-addr">{{item.addr}}</view>
+						<view class="certificate-item-care">关心:{{item.productName}}</view>
+						<!-- <view class="certificate-item-care">关心:<text v-for="(careitem,careindex) in item.care" :key="careindex">{{careitem}},</text></view> -->
+					</view>
+					<view class="certificate-item-call" @click="callnumber(item.phonenumber)">
+						<svg class="icon certificate-item-call-icon" aria-hidden="true">
+							<use xlink:href="#icondianhua"></use>
+						</svg>
+					</view>
+				</view>
+			</view>
+		</mescroll-body>		
+	</view>
+</template>
+
+<script>
+	// 引入mescroll-mixins.js
+	import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";	
+	// 引入mescroll-body组件 (如已在main.js注册全局组件,则省略此步骤)
+	import MescrollBody from "@/components/mescroll-uni/mescroll-body.vue"; // 注意.vue后缀不能省
+	export default {
+		mixins: [MescrollMixin], // 使用mixin
+		components: {
+			MescrollBody,
+		},
+		data() {
+			return {
+				mescroll: null, // mescroll实例对象 (此行可删,mixins已默认)
+				// 下拉刷新的配置(可选, 绝大部分情况无需配置)
+				downOption: { 
+					// ...
+				},
+				// 上拉加载的配置(可选, 绝大部分情况无需配置)
+				upOption: {
+					page: {
+						size: 10 // 每页数据的数量,默认10
+					},
+					noMoreSize: 5, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
+					empty: {
+						tip: '暂无相关数据'
+					}
+				},
+				params:{
+					tokenhead:'',
+					token:'',
+				},
+				certificateList:[
+					// {
+					// 	img:"http://placekitten.com/90/90",
+					// 	name:'周飞向',
+					// 	type:'养殖大户',
+					// 	addr:'贵州大亨油茶科技有限公司',
+					// 	care:["油茶","茶","芝麻"],
+					// 	phonenumber:'13655544126',
+					// },
+					// {
+					// 	img:"http://placekitten.com/90/90",
+					// 	name:'张永清',
+					// 	type:'农户',
+					// 	addr:'贵州毕节',
+					// 	care:["林下食用菌"],
+					// 	phonenumber:'13655544126',
+					// },
+				],
+				
+			}
+		},
+		onShow() {
+			let serf = this;
+			//检查登录,获取token
+			// let loginRes = this.checkLogin('/pages/index/index', '2');
+			// if(!loginRes){return false;}
+			// serf.params.token=loginRes[0];			
+		},
+		onLoad() {
+			let self = this;
+			uni.getStorage({
+				key:'token',
+				success: function (res) {
+					self.params.token = res.data;
+				   // console.log(res.data);
+				}
+			});
+			uni.getStorage({
+				key:'tokenhead',
+				success: function (res) {
+					self.params.tokenhead = res.data;
+				   // console.log(res.data);
+				}
+			});
+
+		},
+		methods: {
+			/*mescroll组件初始化的回调,可获取到mescroll对象 (此处可删,mixins已默认)*/
+			mescrollInit(mescroll) {
+				this.mescroll = mescroll;
+			},
+			/*下拉刷新的回调, 有三种处理方式:*/
+			downCallback(){
+			
+				// 第2种: 下拉刷新和上拉加载调同样的接口, 那么不用第1种方式, 直接mescroll.resetUpScroll()即可
+				this.mescroll.resetUpScroll(); // 重置列表为第一页 (自动执行 page.num=1, 再触发upCallback方法 )
+			},
+			/*上拉加载的回调*/
+			upCallback(page) {
+				let pageNum = page.num; // 页码, 默认从1开始
+				let pageSize = page.size; // 页长, 默认每页10条
+				this.params = Object.assign(this.params,{pageNum:pageNum,pageSize:pageSize});				
+				let thetoken = this.params.tokenhead + this.params.token;
+				console.log('thetoken',thetoken);
+				this.$api.http.get(this.config.apiBaseurl+'/pre/own',{params:this.params,header: {Authorization:thetoken}}).then(data => {
+					console.log('1111111111',data);
+					if(data.data.code=='1001'){
+						// uni.redirectTo({
+						// 	url:'/pages/login/login?backpage=/pages/index/index'+'&backtype='+2,
+						// });							
+					};
+					console.log(data);
+					// 接口返回的当前页数据列表 (数组)
+					let curPageData = data.data.data.list; 
+					// console.log('curPageData',curPageData);
+					// 接口返回的当前页数据长度 (如列表有26个数据,当前页返回8个,则curPageLen=8)
+					let curPageLen = curPageData.length; 
+					// 接口返回的总页数 (如列表有26个数据,每页10条,共3页; 则totalPage=3)
+					// let totalPage = data.xxx; 
+					// 接口返回的总数据量(如列表有26个数据,每页10条,共3页; 则totalSize=26)
+					let totalSize = data.data.data.total; 
+					// this.mescrollList = curPageData;
+					// 接口返回的是否有下一页 (true/false)
+					// let hasNext = data.xxx; 
+					
+					//设置列表数据
+					if(page.num == 1) this.certificateList = []; //如果是第一页需手动置空列表
+					this.certificateList = this.certificateList.concat(curPageData); //追加新数据
+					// console.log('page.num',page.num);
+					console.log('this.certificateList',JSON.parse(JSON.stringify(this.certificateList)));
+					
+					//方法二(推荐): 后台接口有返回列表的总数据量 totalSize
+					this.mescroll.endBySize(curPageLen, totalSize); 
+			
+					// setTimeout(()=>{
+					// 	this.mescroll.endSuccess(curPageLen)
+					// },20)
+				
+				}).catch(err => {
+					this.mescroll.endErr()
+					console.log(err)
+				
+				});
+				
+			},
+
+			
+
+		}
+	}
+</script>
+
+<style scoped>
+@import url("./subscribe.css");
+</style>

+ 52 - 0
pages/usercenter/usercenter.css

@@ -0,0 +1,52 @@
+page{background-color: #f5f5f5;}
+.top-img.usercenter{margin-bottom: 32rpx;}
+.top-img{height: 466rpx;}
+.usercenter-baseinfo{display: flex;margin: 168rpx 24rpx 33rpx 40rpx;align-items: center;}
+.usercenter-baseinfo .photo{width: 124rpx;height: 124rpx;border-radius: 50%;border: 2rpx solid #fff;margin-right: 36rpx;}
+.usercenter-baseinfo .text{color: #fff;flex: 1;}
+.usercenter-baseinfo .name{font-size: 36rpx;line-height: 50rpx;font-weight: 500;margin-bottom: 8rpx;}
+.usercenter-baseinfo .tyep{font-size: 24rpx;line-height: 33rpx;}
+.usercenter-baseinfo .tyep .iconfont{margin-right: 5rpx;}
+
+.tool-bar{position: absolute;left: 40rpx;bottom: 0;right: 40rpx;padding: 27rpx 24rpx;display: flex;text-align: center;background: rgba(65, 117, 5, 0.1);border-radius: 23px 23px 0px 0px;color: #fff;}
+.tool-bar-item{flex: 1;}
+.tool-bar-til{font-size: 28rpx;line-height: 40rpx;opacity: 0.6;}
+.tool-bar-num .num{font-size: 38rpx;font-weight: 500;}
+
+.question-nav{display: flex;justify-content: center;box-shadow: 0px 0px 12rpx 0px rgba(0, 0, 0, 0.04);padding: 30rpx;border-radius: 16rpx;background-color: #fff;}
+.question-item{display: flex;width: 263rpx;justify-content: space-between;margin-right: 36rpx;}
+.question-nav .question-item:last-of-type{margin-right: 0;}
+.question-item + .question-item{padding-left: 36rpx;border-left: 2rpx solid #EDEEED;}
+.question-item-img{width: 84rpx;height: 84rpx;}
+.question-item-text{flex: 1;}
+.question-item-til{font-size: 32rpx;color: #333;line-height: 45rpx;margin-bottom: 6rpx;}
+.question-item-subtil{font-size: 24rpx;color: #999;line-height: 33rpx;}
+
+.logout{margin-bottom: 100rpx;background-color: #fff;height: 104rpx;line-height: 104rpx;font-size: 28rpx;color: #333;text-align: center;}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 106 - 0
pages/usercenter/usercenter.vue

@@ -0,0 +1,106 @@
+<template>
+	<view class="pages">
+		<view class="top-img usercenter">
+			<image :src="$getimg + 'usercenter-bg.png'" class="img" mode="widthFix"></image>
+			<view class="usercenter-baseinfo">
+				<image src="http://xs.gzui.net/img/bookcover/default-bookcover.jpg" class="photo" mode="scaleToFill"></image>
+				<view class="text">
+					<view class="name">环保有限公司</view>
+					<view class="tyep">
+						<text class="iconfont icon-qiyeyonghu"></text>
+						企业用户
+					</view>
+				</view>
+			</view>
+			<view class="tool-bar">
+				<view class="tool-bar-item">
+					<view class="tool-bar-til">我的碳汇量(kg)</view>
+					<view class="tool-bar-num">
+						<text class="num">4090</text>
+						<text class="iconfont icon-jiantou"></text>
+					</view>
+				</view>
+				<view class="tool-bar-item">
+					<view class="tool-bar-til">任务中心</view>
+					<view class="tool-bar-num">
+						<text class="iconfont icon-jiantou"></text>
+					</view>
+				</view>
+			</view>
+		</view>
+		<!-- top end -->
+		<view class="usernav-list icon-form-item-wrap">
+			<view class="icon-form-item" @click="$api.href('./certificateList/certificateList')">
+				<view class="icon-form-item-imgwrap">
+					<image :src="$getimg + 'icon-certificate.png'" class="icon-form-item-img" mode="aspectFit"></image>
+				</view>				
+				<view class="icon-form-item-text">我的证书</view>
+				<view class="icon-form-item-icon"><text class="iconfont icon-jiantou"></text></view>
+			</view>
+			<view class="icon-form-item" @click="$api.href('./orderList/orderList')">
+				<view class="icon-form-item-imgwrap">
+					<image :src="$getimg + 'icon-certificate.png'" class="icon-form-item-img" mode="aspectFit"></image>
+				</view>				
+				<view class="icon-form-item-text">我的订单</view>
+				<view class="icon-form-item-icon"><text class="iconfont icon-jiantou"></text></view>
+			</view>
+			<view class="icon-form-item full-border" @click="$api.href('./subscribe/subscribe')">
+				<view class="icon-form-item-imgwrap">
+					<image :src="$getimg + 'icon-yonghuzhinan.png'" class="icon-form-item-img" mode="aspectFit"></image>
+				</view>				
+				<view class="icon-form-item-text">我的认购</view>
+				<view class="icon-form-item-icon"><text class="iconfont icon-jiantou"></text></view>
+			</view>
+			<view class="icon-form-item" @click="$api.href('/pages/use/use')">
+				<view class="icon-form-item-imgwrap">
+					<image :src="$getimg + 'icon-about.png'" class="icon-form-item-img" mode="aspectFit"></image>
+				</view>				
+				<view class="icon-form-item-text">关于我们</view>
+				<view class="icon-form-item-icon"><text class="iconfont icon-jiantou"></text></view>
+			</view>
+		</view>
+		<!-- usernav-list end -->
+		<view class="wrap40 question-nav">
+			<view class="question-item" @click="$api.href('/pages/use/use')">
+				<view class="question-item-text">
+					<view class="question-item-til">新手指南</view>
+					<view class="question-item-subtil">一看就懂</view>
+				</view>
+				<image :src="$getimg + 'icon-guide-nav.png'" class="question-item-img" mode="aspectFit"></image>
+			</view>
+			<view class="question-item" @click="$api.href('/pages/use/use')">
+				<view class="question-item-text">
+					<view class="question-item-til">常见问题</view>
+					<view class="question-item-subtil">解答疑惑</view>
+				</view>
+				<image :src="$getimg + 'icon-question-nav.png'" class="question-item-img" mode="aspectFit"></image>
+			</view>
+		</view>
+		<!-- question-nav end -->
+		<view class="logout">退出登录</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				$getimg:this.$getimg,
+				
+			}
+		},
+		onShow() {
+		
+		},
+		onLoad() {
+
+		},
+		methods: {
+
+		}
+	}
+</script>
+
+<style>
+	@import url("./usercenter.css");
+</style>

二进制
static/img/banner01.png


二进制
static/img/certificate.png


二进制
static/img/icon-about.png


二进制
static/img/icon-certificate.png


二进制
static/img/icon-guide-nav.png


二进制
static/img/icon-huodong.png


二进制
static/img/icon-lvyue.png


二进制
static/img/icon-question-nav.png


二进制
static/img/icon-refresh.png


二进制
static/img/icon-tanpuhui.png


二进制
static/img/icon-yonghuzhinan.png


二进制
static/img/icon-zhonghe.png


二进制
static/img/icon_home.png


二进制
static/img/icon_home_active.png


二进制
static/img/icon_use.png


二进制
static/img/icon_use_active.png


二进制
static/img/icon_usercenter.png


二进制
static/img/icon_usercenter_active.png


二进制
static/img/rank-top01.png


二进制
static/img/usercenter-bg.png


+ 124 - 39
store/index.js

@@ -1,49 +1,134 @@
-import Vue from 'vue'
-import Vuex from 'vuex'
-
-Vue.use(Vuex)
-
-const store = new Vuex.Store({
+/**
+ * 登录状态管理
+ * 个人信息数据持久化
+ */
+import Vue from 'vue';
+import Vuex from 'vuex';
+// import $api from "@/api.js";
+import Request from '@/js_sdk/luch-request/luch-request/index.js';
+const http = new Request();
+import md5 from '@/js_sdk/js-md5/md5.min.js';
+import {config} from '@/config/config.js'
+Vue.use(Vuex);
+const userKey = md5("userInfo");
+const hPageKey = md5('historyPage');
+const sysTokenKey = md5('accessToken');
+const loginUrl = '/pages/login/loginType';
+const token = uni.getStorageSync(sysTokenKey);
+let thetoken = 'Bearer ' + token.accessToken;
+export default new Vuex.Store({
 	state: {
 		hasLogin: false,
-		token:'',
-		userInfo: {},
-
+		userInfo: {
+			customerCompanyInfoForm:{}
+		},
+		token: '',
+		hPage: ''
 	},
 	mutations: {
-		setLogin(state, userInfo) {
-			state.userInfo = userInfo || {}
-			state.token = userInfo.accessToken
-			state.tokenhead = userInfo.tokenhead
-			state.hasLogin = Boolean(state.token)
-			uni.setStorage({
-				key: "userInfo",
-				data: userInfo.data
-			})
-			uni.setStorage({
-				key: "hasLogin",
-				data: true
-			})
+		login(state, token = '') {
+			token = token instanceof Object ? token.accessToken : token;
+			state.token = token || uni.getStorageSync(sysTokenKey).accessToken || '';
+			state.hasLogin = Boolean(state.token);
+			//保存token
 			uni.setStorage({
-				key: "token",
-				data: userInfo.accessToken
-			});
-			uni.setStorage({
-				key: "tokenhead",
-				data: userInfo.tokenhead
+				key: sysTokenKey,
+				data: {
+					accessToken: state.token
+				}
 			});
 		},
-		logout(state) {
-			userInfo = {}
-			hasLogin: false,
+		/**
+		 * 退出登录,传入false只更新缓存不跳转
+		 */
+		logout(state, v = true) {
+			state.hasLogin = false;
+			state.userInfo = {};
+			state.token = '';
 			uni.removeStorage({
-				key: "userInfo"
-			})
+				key: userKey
+			});
+			uni.removeStorage({
+				key: sysTokenKey
+			});
+			//跳到登录页
+			// v && $api.goto(loginUrl);
+		},
+		// historyPage(state, pUrl = '') {
+		// 	if($api.alterUrl('/',pUrl) != loginUrl){
+		// 		state.hPage = pUrl || uni.getStorageSync(hPageKey).url;
+		// 		//记录历史页
+		// 		uni.setStorage({
+		// 			key: hPageKey,
+		// 			data: {
+		// 				url: state.hPage
+		// 			}
+		// 		});
+		// 	}
+		// },
+		async upInfo(state, provider = {}) {
+			//用户信息结构
+			const infoObj = {
+				"guid": "",
+				"account": "",
+				"customerType": '',
+				"customerName": "",
+				"nickName": "",
+				"phone": "",
+				"sex": '',
+				"headImage": "",
+				"queryStr": '',
+				"carbonAmount": '',
+				"farmerNum": '',
+				"farmerPersonNum": '',
+				"loginType": '',
+				"customerCompanyInfoForm": {
+					"guid": "",
+					"fkCustomerId": "",
+					"companyName": "",
+					"principals": "",
+					"phone": "",
+					"email": "",
+					"companyAddress": "",
+					"companyImages": "",
+					"condition": "",
+					"customerType": "",
+					"imageList": '',
+					"companyType": ''
+				},
+				"channelType": ''
+			};
+			const then = res => {
+				console.log('222',res)
+				// if (res.code == 0) {
+				// 	let data = res.data instanceof Object ? res.data : infoObj;
+				// 	//处理头像连接
+				// 	// data.headImage = $api.alterUrl($api.href, data.headImage || "");
+				// 	state.userInfo = data;
+				// 	uni.setStorage({ //缓存用户登陆状态
+				// 		key: userKey,
+				// 		data
+				// 	});
+				// }
+			}
+			//读取本地缓存信息进行赋值
+			then({
+				code: 0,
+				data: Object.assign(uni.getStorageSync(userKey),provider)
+			});
+			//在线更新取得用户信息
+			// then(await $api.$http({
+			// 	url: config.apiBaseurl + '/carbon-h5/wap/customer/getCustomerByToken'
+			// }));
+			then(await 
+				http.get(config.apiBaseurl + '/carbon-h5/wap/customer/getCustomerByToken',{header: {Authorization:thetoken}}).then(res => {
+					console.log('getCustomerByToken', res);
+				}).catch(err => {
+					// console.log('err', err)
+				})
+			);
+			
+			
 		}
-	},
-	actions: {
-
 	}
-})
-
-export default store
+});

文件差异内容过多而无法显示
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map


文件差异内容过多而无法显示
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map


文件差异内容过多而无法显示
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map


文件差异内容过多而无法显示
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/mescroll-uni/components/mescroll-empty.js.map


文件差异内容过多而无法显示
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/mescroll-uni/components/mescroll-top.js.map


文件差异内容过多而无法显示
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/mescroll-uni/mescroll-body.js.map


文件差异内容过多而无法显示
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-popup/uni-popup-dialog.js.map


文件差异内容过多而无法显示
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-popup/uni-popup.js.map


文件差异内容过多而无法显示
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-transition/uni-transition.js.map


文件差异内容过多而无法显示
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/guide.js.map


文件差异内容过多而无法显示
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/index.js.map


文件差异内容过多而无法显示
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/init.js.map


文件差异内容过多而无法显示
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/login/companyLogin.js.map


文件差异内容过多而无法显示
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/login/loginType.js.map


文件差异内容过多而无法显示
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/use/use.js.map


文件差异内容过多而无法显示
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/usercenter/certificateList/certificateList.js.map


文件差异内容过多而无法显示
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/usercenter/orderList/orderList.js.map


文件差异内容过多而无法显示
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/usercenter/orderList/orderdetails/orderdetails.js.map


文件差异内容过多而无法显示
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/usercenter/subscribe/subscribe.js.map


文件差异内容过多而无法显示
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/usercenter/usercenter.js.map


+ 39 - 2
unpackage/dist/dev/mp-weixin/app.json

@@ -1,14 +1,51 @@
 {
   "pages": [
-    "pages/index/index"
+    "pages/usercenter/orderList/orderList",
+    "pages/index/init",
+    "pages/index/guide",
+    "pages/login/loginType",
+    "pages/login/companyLogin",
+    "pages/index/index",
+    "pages/use/use",
+    "pages/usercenter/usercenter",
+    "pages/usercenter/certificateList/certificateList",
+    "pages/usercenter/orderList/orderdetails/orderdetails",
+    "pages/usercenter/subscribe/subscribe"
   ],
   "subPackages": [],
   "window": {
     "navigationBarTextStyle": "black",
-    "navigationBarTitleText": "uni-app",
+    "navigationBarTitleText": "碳汇",
     "navigationBarBackgroundColor": "#fff",
     "backgroundColor": "#F5F5F5"
   },
+  "tabBar": {
+    "color": "#999",
+    "selectedColor": "#26D18B",
+    "borderStyle": "white",
+    "height": "134rpx",
+    "backgroundColor": "#ffffff",
+    "list": [
+      {
+        "pagePath": "pages/index/index",
+        "iconPath": "/static/img/icon_home.png",
+        "selectedIconPath": "static/img/icon_home_active.png",
+        "text": "首页"
+      },
+      {
+        "pagePath": "pages/use/use",
+        "iconPath": "static/img/icon_use.png",
+        "selectedIconPath": "static/img/icon_use_active.png",
+        "text": "价值实现"
+      },
+      {
+        "pagePath": "pages/usercenter/usercenter",
+        "iconPath": "static/img/icon_usercenter.png",
+        "selectedIconPath": "static/img/icon_usercenter_active.png",
+        "text": "我的信息"
+      }
+    ]
+  },
   "permission": {},
   "usingComponents": {}
 }

文件差异内容过多而无法显示
+ 39 - 28
unpackage/dist/dev/mp-weixin/common/main.js


+ 24 - 1
unpackage/dist/dev/mp-weixin/common/main.wxss

@@ -129,10 +129,33 @@
 /* 全屏图片背景 */
 .page-bg-wrap{position: fixed;left: 0;right: 0;top: 0;bottom: 0;}
 .page-bg{width: 100%;max-height: 100%;}
+/* 头部图片 */
+.top-img{position: relative;height: 390rpx;overflow: hidden;}
+.top-img .img{width: 100%;height: 100%;position: absolute;left: 0;top: 0;z-index: -1;}
 .wrap{margin: 24rpx;}
 .wrap40{margin: 32rpx 40rpx;}
 .full-btn{height: 98rpx;line-height: 98rpx;background-color: #26D18B;-webkit-border-radius: 8rpx;border-radius: 8rpx;font-size: 36rpx;color: #fff;text-align: center;}
 /* 浮底按钮 */
 .bottom-btn-wrap{height: 146rpx;margin-top: 44rpx;}
-.bottom-btn{height: 98rpx;line-height: 98rpx;position: fixed;left: 24rpx;right: 24rpx;bottom: 24rpx;text-align: center;z-index: 99;}	
+.bottom-btn{height: 98rpx;line-height: 98rpx;position: fixed;left: 24rpx;right: 24rpx;bottom: 24rpx;text-align: center;z-index: 99;}
+/* 截取隐藏 */
+.f-ellipsis{overflow: hidden;white-space: nowrap;text-overflow: ellipsis;}
+.common-content{margin-bottom: 32rpx;-webkit-border-radius: 16rpx;border-radius: 16rpx;-webkit-box-shadow: 0px 0px 12rpx 0px rgba(0, 0, 0, 0.04);box-shadow: 0px 0px 12rpx 0px rgba(0, 0, 0, 0.04);background-color: #fff;padding: 24rpx;}
+.common-content-title{display: -webkit-box;display: -webkit-flex;display: flex;-webkit-box-align: center;-webkit-align-items: center;align-items: center;margin-bottom: 24rpx;}
+.common-content-icon{width: 45rpx;height: 45rpx;}
+.common-content-icon .icon{width: 100%;height: 100%;}
+.common-content-til{margin-left: 24rpx;font-size: 32rpx;color: #333;line-height: 45rpx;font-weight: 500;-webkit-box-flex: 1;-webkit-flex: 1;flex: 1;}
+.common-content-right{margin-right: 0;display: -webkit-box;display: -webkit-flex;display: flex;-webkit-box-align: center;-webkit-align-items: center;align-items: center;font-size: 24rpx;color: #999;}
+.common-content-right .icon{width: 45rpx;height: 45rpx;margin-right: 18rpx;}
+.common-content-blink{margin-top: 6rpx;text-align: center;font-size: 24rpx;color: #26D18B;}
+.icon-form-item-wrap{margin-bottom: 32rpx;background-color: #fff;}
+.icon-form-item{display: -webkit-box;display: -webkit-flex;display: flex;position: relative;height: 104rpx;-webkit-box-align: center;-webkit-align-items: center;align-items: center;}
+.icon-form-item::after{content: '';position: absolute;right: 0;bottom: 0;width: calc( 100% - 144rpx);height: 2rpx;background-color: #EDEEED;}
+.icon-form-item-wrap .icon-form-item:last-of-type::after{height: 0;}
+.icon-form-item-wrap .icon-form-item.full-border::after{width: 100%;}
+.icon-form-item-imgwrap{width: 144rpx;height: 44rpx;-webkit-box-sizing: border-box;box-sizing: border-box;text-align: right;padding-right: 40rpx;}
+.icon-form-item-img{width: 44rpx;height: 100%;}
+.icon-form-item-text{-webkit-box-flex: 1;-webkit-flex: 1;flex: 1;font-size: 28rpx;color: #333;}
+.icon-form-item-icon{margin-right: 0;width: 68rpx;}
+.icon-form-item-icon .iconfont{font-size: 30rpx;color: #ccc;}	
 

文件差异内容过多而无法显示
+ 115 - 0
unpackage/dist/dev/mp-weixin/common/runtime.js


文件差异内容过多而无法显示
+ 4045 - 1577
unpackage/dist/dev/mp-weixin/common/vendor.js


文件差异内容过多而无法显示
+ 203 - 0
unpackage/dist/dev/mp-weixin/components/mescroll-uni/components/mescroll-empty.js


+ 4 - 0
unpackage/dist/dev/mp-weixin/components/mescroll-uni/components/mescroll-empty.json

@@ -0,0 +1,4 @@
+{
+  "usingComponents": {},
+  "component": true
+}

+ 1 - 0
unpackage/dist/dev/mp-weixin/components/mescroll-uni/components/mescroll-empty.wxml

@@ -0,0 +1 @@
+<view class="{{['mescroll-empty',(option.fixed)?'empty-fixed':'']}}" style="{{'z-index:'+(option.zIndex)+';'+('top:'+(option.top)+';')}}"><view><block wx:if="{{icon}}"><image class="empty-icon" src="{{icon}}" mode="widthFix"></image></block></view><block wx:if="{{tip}}"><view class="empty-tip">{{tip}}</view></block><block wx:if="{{option.btnText}}"><view data-event-opts="{{[['tap',[['emptyClick',['$event']]]]]}}" class="empty-btn" bindtap="__e">{{option.btnText}}</view></block></view>

+ 87 - 0
unpackage/dist/dev/mp-weixin/components/mescroll-uni/components/mescroll-empty.wxss

@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/* 无任何数据的空布局 */
+.mescroll-empty {
+	-webkit-box-sizing: border-box;
+	        box-sizing: border-box;
+	width: 100%;
+	padding: 100rpx 50rpx;
+	text-align: center;
+}
+.mescroll-empty.empty-fixed {
+	z-index: 99;
+	position: absolute; /*transform会使fixed失效,最终会降级为absolute */
+	top: 100rpx;
+	left: 0;
+}
+.mescroll-empty .empty-icon {
+	width: 280rpx;
+	height: 280rpx;
+}
+.mescroll-empty .empty-tip {
+	margin-top: 20rpx;
+	font-size: 24rpx;
+	color: gray;
+}
+.mescroll-empty .empty-btn {
+	display: inline-block;
+	margin-top: 40rpx;
+	min-width: 200rpx;
+	padding: 18rpx;
+	font-size: 28rpx;
+	border: 1rpx solid #e04b28;
+	-webkit-border-radius: 60rpx;
+	        border-radius: 60rpx;
+	color: #e04b28;
+}
+.mescroll-empty .empty-btn:active {
+	opacity: 0.75;
+}
+

文件差异内容过多而无法显示
+ 217 - 0
unpackage/dist/dev/mp-weixin/components/mescroll-uni/components/mescroll-top.js


+ 4 - 0
unpackage/dist/dev/mp-weixin/components/mescroll-uni/components/mescroll-top.json

@@ -0,0 +1,4 @@
+{
+  "usingComponents": {},
+  "component": true
+}

+ 1 - 0
unpackage/dist/dev/mp-weixin/components/mescroll-uni/components/mescroll-top.wxml

@@ -0,0 +1 @@
+<block wx:if="{{mOption.src}}"><image class="{{['mescroll-totop',value?'mescroll-totop-in':'mescroll-totop-out',[(mOption.safearea)?'mescroll-totop-safearea':'']]}}" style="{{'z-index:'+(mOption.zIndex)+';'+('left:'+(left)+';')+('right:'+(right)+';')+('bottom:'+($root.m0)+';')+('width:'+($root.m1)+';')+('border-radius:'+($root.m2)+';')}}" src="{{mOption.src}}" mode="widthFix" data-event-opts="{{[['tap',[['toTopClick',['$event']]]]]}}" bindtap="__e"></image></block>

+ 82 - 0
unpackage/dist/dev/mp-weixin/components/mescroll-uni/components/mescroll-top.wxss

@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/* 回到顶部的按钮 */
+.mescroll-totop {
+	z-index: 9990;
+	position: fixed !important; /* 加上important避免编译到H5,在多mescroll中定位失效 */
+	right: 20rpx;
+	bottom: 120rpx;
+	width: 72rpx;
+	height: auto;
+	-webkit-border-radius: 50%;
+	        border-radius: 50%;
+	opacity: 0;
+	-webkit-transition: opacity 0.5s;
+	transition: opacity 0.5s; /* 过渡 */
+	margin-bottom: 0px; /* css变量 */
+}
+/* 适配 iPhoneX */
+@supports (bottom: constant(safe-area-inset-bottom)) or (bottom: env(safe-area-inset-bottom)) {
+.mescroll-totop-safearea {
+		margin-bottom: calc(0px + constant(safe-area-inset-bottom)); /* window-bottom + 适配 iPhoneX */
+		margin-bottom: calc(0px + env(safe-area-inset-bottom));
+}
+}
+/* 显示 -- 淡入 */
+.mescroll-totop-in {
+	opacity: 1;
+}
+/* 隐藏 -- 淡出且不接收事件*/
+.mescroll-totop-out {
+	opacity: 0;
+	pointer-events: none;
+}
+

文件差异内容过多而无法显示
+ 537 - 0
unpackage/dist/dev/mp-weixin/components/mescroll-uni/mescroll-body.js


+ 7 - 0
unpackage/dist/dev/mp-weixin/components/mescroll-uni/mescroll-body.json

@@ -0,0 +1,7 @@
+{
+  "component": true,
+  "usingComponents": {
+    "mescroll-empty": "/components/mescroll-uni/components/mescroll-empty",
+    "mescroll-top": "/components/mescroll-uni/components/mescroll-top"
+  }
+}

文件差异内容过多而无法显示
+ 2 - 0
unpackage/dist/dev/mp-weixin/components/mescroll-uni/mescroll-body.wxml


+ 149 - 0
unpackage/dist/dev/mp-weixin/components/mescroll-uni/mescroll-body.wxss

@@ -0,0 +1,149 @@
+.mescroll-body {
+	position: relative; /* 下拉刷新区域相对自身定位 */
+	height: auto; /* 不可固定高度,否则overflow:hidden导致无法滑动; 同时使设置的最小高生效,实现列表不满屏仍可下拉*/
+	overflow: hidden; /* 当有元素写在mescroll-body标签前面时,可遮住下拉刷新区域 */
+	-webkit-box-sizing: border-box;
+	        box-sizing: border-box; /* 避免设置padding出现双滚动条的问题 */
+}
+
+/* 使sticky生效: 父元素不能overflow:hidden或者overflow:auto属性 */
+.mescroll-body.mescorll-sticky{
+	overflow: unset !important
+}
+
+/* 适配 iPhoneX */
+@supports (bottom: constant(safe-area-inset-bottom)) or (bottom: env(safe-area-inset-bottom)) {
+.mescroll-safearea {
+		padding-bottom: constant(safe-area-inset-bottom);
+		padding-bottom: env(safe-area-inset-bottom);
+}
+}
+
+/* 下拉刷新区域 */
+.mescroll-downwarp {
+	position: absolute;
+	top: -100%;
+	left: 0;
+	width: 100%;
+	height: 100%;
+	text-align: center;
+}
+
+/* 下拉刷新--内容区,定位于区域底部 */
+.mescroll-downwarp .downwarp-content {
+	position: absolute;
+	left: 0;
+	bottom: 0;
+	width: 100%;
+	min-height: 60rpx;
+	padding: 20rpx 0;
+	text-align: center;
+}
+
+/* 下拉刷新--提示文本 */
+.mescroll-downwarp .downwarp-tip {
+	display: inline-block;
+	font-size: 28rpx;
+	vertical-align: middle;
+	margin-left: 16rpx;
+	/* color: gray; 已在style设置color,此处删去*/
+}
+
+/* 下拉刷新--旋转进度条 */
+.mescroll-downwarp .downwarp-progress {
+	display: inline-block;
+	width: 32rpx;
+	height: 32rpx;
+	-webkit-border-radius: 50%;
+	        border-radius: 50%;
+	border: 2rpx solid gray;
+	border-bottom-color: transparent !important; /*已在style设置border-color,此处需加 !important*/
+	vertical-align: middle;
+}
+
+/* 旋转动画 */
+.mescroll-downwarp .mescroll-rotate {
+	-webkit-animation: mescrollDownRotate 0.6s linear infinite;
+	        animation: mescrollDownRotate 0.6s linear infinite;
+}
+@-webkit-keyframes mescrollDownRotate {
+0% {
+		-webkit-transform: rotate(0deg);
+		        transform: rotate(0deg);
+}
+100% {
+		-webkit-transform: rotate(360deg);
+		        transform: rotate(360deg);
+}
+}
+@keyframes mescrollDownRotate {
+0% {
+		-webkit-transform: rotate(0deg);
+		        transform: rotate(0deg);
+}
+100% {
+		-webkit-transform: rotate(360deg);
+		        transform: rotate(360deg);
+}
+}
+
+/* 上拉加载区域 */
+.mescroll-upwarp {
+	-webkit-box-sizing: border-box;
+	        box-sizing: border-box;
+	min-height: 110rpx;
+	padding: 30rpx 0;
+	text-align: center;
+	clear: both;
+}
+
+/*提示文本 */
+.mescroll-upwarp .upwarp-tip,
+.mescroll-upwarp .upwarp-nodata {
+	display: inline-block;
+	font-size: 28rpx;
+	vertical-align: middle;
+	/* color: gray; 已在style设置color,此处删去*/
+}
+.mescroll-upwarp .upwarp-tip {
+	margin-left: 16rpx;
+}
+
+/*旋转进度条 */
+.mescroll-upwarp .upwarp-progress {
+	display: inline-block;
+	width: 32rpx;
+	height: 32rpx;
+	-webkit-border-radius: 50%;
+	        border-radius: 50%;
+	border: 2rpx solid gray;
+	border-bottom-color: transparent !important; /*已在style设置border-color,此处需加 !important*/
+	vertical-align: middle;
+}
+
+/* 旋转动画 */
+.mescroll-upwarp .mescroll-rotate {
+	-webkit-animation: mescrollUpRotate 0.6s linear infinite;
+	        animation: mescrollUpRotate 0.6s linear infinite;
+}
+@-webkit-keyframes mescrollUpRotate {
+0% {
+		-webkit-transform: rotate(0deg);
+		        transform: rotate(0deg);
+}
+100% {
+		-webkit-transform: rotate(360deg);
+		        transform: rotate(360deg);
+}
+}
+@keyframes mescrollUpRotate {
+0% {
+		-webkit-transform: rotate(0deg);
+		        transform: rotate(0deg);
+}
+100% {
+		-webkit-transform: rotate(360deg);
+		        transform: rotate(360deg);
+}
+}
+

+ 268 - 0
unpackage/dist/dev/mp-weixin/components/mescroll-uni/wxs/wxs.wxs

@@ -0,0 +1,268 @@
+// 使用wxs处理交互动画, 提高性能, 同时避免小程序bounce对下拉刷新的影响
+// https://uniapp.dcloud.io/frame?id=wxs
+// https://developers.weixin.qq.com/miniprogram/dev/framework/view/interactive-animation.html 
+
+// 模拟mescroll实例, 与mescroll.js的写法尽量保持一致
+var me = {}
+
+// ------ 自定义下拉刷新动画 start ------
+
+/* 下拉过程中的回调,滑动过程一直在执行 (rate<1为inOffset; rate>1为outOffset) */
+me.onMoving = function (ins, rate, downHight){
+	ins.requestAnimationFrame(function () {
+		ins.selectComponent('.mescroll-wxs-content').setStyle({
+			'will-change': 'transform', // 可解决下拉过程中, image和swiper脱离文档流的问题
+			'transform': 'translateY(' + downHight + 'px)',
+			'transition': ''
+		})
+		// 环形进度条
+		var progress = ins.selectComponent('.mescroll-wxs-progress')
+		progress && progress.setStyle({transform: 'rotate(' + 360 * rate + 'deg)'})
+	})
+}
+
+/* 显示下拉刷新进度 */
+me.showLoading = function (ins){
+	me.downHight = me.optDown.offset
+	ins.requestAnimationFrame(function () {
+		ins.selectComponent('.mescroll-wxs-content').setStyle({
+			'will-change': 'auto',
+			'transform': 'translateY(' + me.downHight + 'px)',
+			'transition': 'transform 300ms'
+		})
+	})
+}
+
+/* 结束下拉 */
+me.endDownScroll = function (ins){
+	me.downHight = 0;
+	me.isDownScrolling = false;
+	ins.requestAnimationFrame(function () {
+		ins.selectComponent('.mescroll-wxs-content').setStyle({
+			'will-change': 'auto',
+			'transform': 'translateY(0)', // 不可以写空串,否则scroll-view渲染不完整 (延时350ms会调clearTransform置空)
+			'transition': 'transform 300ms'
+		})
+	})
+}
+
+/* 结束下拉动画执行完毕后, 清除transform和transition, 避免对列表内容样式造成影响, 如: h5的list-msg示例下拉进度条漏出来等 */
+me.clearTransform = function (ins){
+	ins.requestAnimationFrame(function () {
+		ins.selectComponent('.mescroll-wxs-content').setStyle({
+			'will-change': '',
+			'transform': '',
+			'transition': ''
+		})
+	})
+}
+
+// ------ 自定义下拉刷新动画 end ------
+
+/**
+ * 监听逻辑层数据的变化 (实时更新数据)
+ */
+function propObserver(wxsProp) {
+	me.optDown = wxsProp.optDown
+	me.scrollTop = wxsProp.scrollTop
+	me.bodyHeight = wxsProp.bodyHeight
+	me.isDownScrolling = wxsProp.isDownScrolling
+	me.isUpScrolling = wxsProp.isUpScrolling
+	me.isUpBoth = wxsProp.isUpBoth
+	me.isScrollBody = wxsProp.isScrollBody
+	me.startTop = wxsProp.scrollTop // 及时更新touchstart触发的startTop, 避免scroll-view快速惯性滚动到顶部取值不准确
+}
+
+/**
+ * 监听逻辑层数据的变化 (调用wxs的方法)
+ */
+function callObserver(callProp, oldValue, ins) {
+	if (me.disabled()) return;
+	if(callProp.callType){
+		// 逻辑层(App Service)的style已失效,需在视图层(Webview)设置style
+		if(callProp.callType === 'showLoading'){
+			me.showLoading(ins)
+		}else if(callProp.callType === 'endDownScroll'){
+			me.endDownScroll(ins)
+		}else if(callProp.callType === 'clearTransform'){
+			me.clearTransform(ins)
+		}
+	}
+}
+
+/**
+ * touch事件
+ */
+function touchstartEvent(e, ins) {
+	me.downHight = 0; // 下拉的距离
+	me.startPoint = me.getPoint(e); // 记录起点
+	me.startTop = me.getScrollTop(); // 记录此时的滚动条位置
+	me.startAngle = 0; // 初始角度
+	me.lastPoint = me.startPoint; // 重置上次move的点
+	me.maxTouchmoveY = me.getBodyHeight() - me.optDown.bottomOffset; // 手指触摸的最大范围(写在touchstart避免body获取高度为0的情况)
+	me.inTouchend = false; // 标记不是touchend
+	
+	me.callMethod(ins, {type: 'setWxsProp'}) // 同步更新wxsProp的数据 (小程序是异步的,可能touchmove先执行,才到propObserver; h5和app是同步)
+}
+
+function touchmoveEvent(e, ins) {
+	var isPrevent = true // false表示不往上冒泡,相当于调用了同时调用了stopPropagation和preventDefault (对小程序生效, h5和app无效)
+	
+	if (me.disabled()) return isPrevent;
+	
+	var scrollTop = me.getScrollTop(); // 当前滚动条的距离
+	var curPoint = me.getPoint(e); // 当前点
+	
+	var moveY = curPoint.y - me.startPoint.y; // 和起点比,移动的距离,大于0向下拉,小于0向上拉
+	
+	// 向下拉 && 在顶部
+	// mescroll-body,直接判定在顶部即可
+	// scroll-view在滚动时不会触发touchmove,当触顶/底/左/右时,才会触发touchmove
+	// scroll-view滚动到顶部时,scrollTop不一定为0,也有可能大于0; 在iOS的APP中scrollTop可能为负数,不一定和startTop相等
+	if (moveY > 0 && (
+			(me.isScrollBody && scrollTop <= 0)
+			||
+			(!me.isScrollBody && (scrollTop <= 0 || (scrollTop <= me.optDown.startTop && scrollTop === me.startTop)) )
+		)) {
+		// 可下拉的条件
+		if (!me.inTouchend && !me.isDownScrolling && !me.optDown.isLock && (!me.isUpScrolling || (me.isUpScrolling &&
+				me.isUpBoth))) {
+	
+			// 下拉的角度是否在配置的范围内
+			if(!me.startAngle) me.startAngle = me.getAngle(me.lastPoint, curPoint); // 两点之间的角度,区间 [0,90]
+			if (me.startAngle < me.optDown.minAngle) return isPrevent; // 如果小于配置的角度,则不往下执行下拉刷新
+	
+			// 如果手指的位置超过配置的距离,则提前结束下拉,避免Webview嵌套导致touchend无法触发
+			if (me.maxTouchmoveY > 0 && curPoint.y >= me.maxTouchmoveY) {
+				me.inTouchend = true; // 标记执行touchend
+				touchendEvent(e, ins); // 提前触发touchend
+				return isPrevent;
+			}
+			
+			isPrevent = false // 小程序是return false
+	
+			var diff = curPoint.y - me.lastPoint.y; // 和上次比,移动的距离 (大于0向下,小于0向上)
+	
+			// 下拉距离  < 指定距离
+			if (me.downHight < me.optDown.offset) {
+				if (me.movetype !== 1) {
+					me.movetype = 1; // 加入标记,保证只执行一次
+					// me.optDown.inOffset && me.optDown.inOffset(me); // 进入指定距离范围内那一刻的回调,只执行一次
+					me.callMethod(ins, {type: 'setLoadType', downLoadType: 1})
+					me.isMoveDown = true; // 标记下拉区域高度改变,在touchend重置回来
+				}
+				me.downHight += diff * me.optDown.inOffsetRate; // 越往下,高度变化越小
+	
+				// 指定距离  <= 下拉距离
+			} else {
+				if (me.movetype !== 2) {
+					me.movetype = 2; // 加入标记,保证只执行一次
+					// me.optDown.outOffset && me.optDown.outOffset(me); // 下拉超过指定距离那一刻的回调,只执行一次
+					me.callMethod(ins, {type: 'setLoadType', downLoadType: 2})
+					me.isMoveDown = true; // 标记下拉区域高度改变,在touchend重置回来
+				}
+				if (diff > 0) { // 向下拉
+					me.downHight += diff * me.optDown.outOffsetRate; // 越往下,高度变化越小
+				} else { // 向上收
+					me.downHight += diff; // 向上收回高度,则向上滑多少收多少高度
+				}
+			}
+			
+			me.downHight = Math.round(me.downHight) // 取整
+			var rate = me.downHight / me.optDown.offset; // 下拉区域当前高度与指定距离的比值
+			// me.optDown.onMoving && me.optDown.onMoving(me, rate, me.downHight); // 下拉过程中的回调,一直在执行
+			me.onMoving(ins, rate, me.downHight)
+		}
+	}
+	
+	me.lastPoint = curPoint; // 记录本次移动的点
+	
+	return isPrevent // false表示不往上冒泡,相当于调用了同时调用了stopPropagation和preventDefault (对小程序生效, h5和app无效)
+}
+
+function touchendEvent(e, ins) {
+	// 如果下拉区域高度已改变,则需重置回来
+	if (me.isMoveDown) {
+		if (me.downHight >= me.optDown.offset) {
+			// 符合触发刷新的条件
+			me.downHight = me.optDown.offset; // 更新下拉区域高度
+			// me.triggerDownScroll();
+			me.callMethod(ins, {type: 'triggerDownScroll'})
+		} else {
+			// 不符合的话 则重置
+			me.downHight = 0;
+			// me.optDown.endDownScroll && me.optDown.endDownScroll(me);
+			me.callMethod(ins, {type: 'endDownScroll'})
+		}
+		me.movetype = 0;
+		me.isMoveDown = false;
+	} else if (!me.isScrollBody && me.getScrollTop() === me.startTop) { // scroll-view到顶/左/右/底的滑动事件
+		var isScrollUp = me.getPoint(e).y - me.startPoint.y < 0; // 和起点比,移动的距离,大于0向下拉,小于0向上拉
+		// 上滑
+		if (isScrollUp) {
+			// 需检查滑动的角度
+			var angle = me.getAngle(me.getPoint(e), me.startPoint); // 两点之间的角度,区间 [0,90]
+			if (angle > 80) {
+				// 检查并触发上拉
+				// me.triggerUpScroll(true);
+				me.callMethod(ins, {type: 'triggerUpScroll'})
+			}
+		}
+	}
+	me.callMethod(ins, {type: 'setWxsProp'}) // 同步更新wxsProp的数据 (小程序是异步的,可能touchmove先执行,才到propObserver; h5和app是同步)
+}
+
+/* 是否禁用下拉刷新 */
+me.disabled = function(){
+	return !me.optDown || !me.optDown.use || me.optDown.native
+}
+
+/* 根据点击滑动事件获取第一个手指的坐标 */
+me.getPoint = function(e) {
+	if (!e) {
+		return {x: 0,y: 0}
+	}
+	if (e.touches && e.touches[0]) {
+		return {x: e.touches[0].pageX,y: e.touches[0].pageY}
+	} else if (e.changedTouches && e.changedTouches[0]) {
+		return {x: e.changedTouches[0].pageX,y: e.changedTouches[0].pageY}
+	} else {
+		return {x: e.clientX,y: e.clientY}
+	}
+}
+
+/* 计算两点之间的角度: 区间 [0,90]*/
+me.getAngle = function (p1, p2) {
+	var x = Math.abs(p1.x - p2.x);
+	var y = Math.abs(p1.y - p2.y);
+	var z = Math.sqrt(x * x + y * y);
+	var angle = 0;
+	if (z !== 0) {
+		angle = Math.asin(y / z) / Math.PI * 180;
+	}
+	return angle
+}
+
+/* 获取滚动条的位置 */
+me.getScrollTop = function() {
+	return me.scrollTop || 0
+}
+
+/* 获取body的高度 */
+me.getBodyHeight = function() {
+	return me.bodyHeight || 0;
+}
+
+/* 调用逻辑层的方法 */
+me.callMethod = function(ins, param) {
+	if(ins) ins.callMethod('wxsCall', param)
+}
+
+/* 导出模块 */
+module.exports = {
+	propObserver: propObserver,
+	callObserver: callObserver,
+	touchstartEvent: touchstartEvent,
+	touchmoveEvent: touchmoveEvent,
+	touchendEvent: touchendEvent
+}

文件差异内容过多而无法显示
+ 304 - 0
unpackage/dist/dev/mp-weixin/components/uni-popup/uni-popup-dialog.js


+ 4 - 0
unpackage/dist/dev/mp-weixin/components/uni-popup/uni-popup-dialog.json

@@ -0,0 +1,4 @@
+{
+  "usingComponents": {},
+  "component": true
+}

文件差异内容过多而无法显示
+ 1 - 0
unpackage/dist/dev/mp-weixin/components/uni-popup/uni-popup-dialog.wxml


+ 131 - 0
unpackage/dist/dev/mp-weixin/components/uni-popup/uni-popup-dialog.wxss

@@ -0,0 +1,131 @@
+@charset "UTF-8";
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+/* 颜色变量 */
+/* 行为相关颜色 */
+/* 文字基本颜色 */
+/* 背景颜色 */
+/* 边框颜色 */
+/* 尺寸变量 */
+/* 文字尺寸 */
+/* 图片尺寸 */
+/* Border Radius */
+/* 水平间距 */
+/* 垂直间距 */
+/* 透明度 */
+/* 文章场景相关 */
+.uni-popup-dialog.data-v-2fab037e {
+  width: 300px;
+  -webkit-border-radius: 15px;
+          border-radius: 15px;
+  background-color: #fff;
+}
+.uni-dialog-title.data-v-2fab037e {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-orient: horizontal;
+  -webkit-box-direction: normal;
+  -webkit-flex-direction: row;
+          flex-direction: row;
+  -webkit-box-pack: center;
+  -webkit-justify-content: center;
+          justify-content: center;
+  padding-top: 15px;
+  padding-bottom: 5px;
+}
+.uni-dialog-title-text.data-v-2fab037e {
+  font-size: 16px;
+  font-weight: 500;
+}
+.uni-dialog-content.data-v-2fab037e {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-orient: horizontal;
+  -webkit-box-direction: normal;
+  -webkit-flex-direction: row;
+          flex-direction: row;
+  -webkit-box-pack: center;
+  -webkit-justify-content: center;
+          justify-content: center;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+          align-items: center;
+  padding: 5px 15px 15px 15px;
+}
+.uni-dialog-content-text.data-v-2fab037e {
+  font-size: 14px;
+  color: #6e6e6e;
+}
+.uni-dialog-button-group.data-v-2fab037e {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-orient: horizontal;
+  -webkit-box-direction: normal;
+  -webkit-flex-direction: row;
+          flex-direction: row;
+  border-top-color: #f5f5f5;
+  border-top-style: solid;
+  border-top-width: 1px;
+}
+.uni-dialog-button.data-v-2fab037e {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+          flex: 1;
+  -webkit-box-orient: horizontal;
+  -webkit-box-direction: normal;
+  -webkit-flex-direction: row;
+          flex-direction: row;
+  -webkit-box-pack: center;
+  -webkit-justify-content: center;
+          justify-content: center;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+          align-items: center;
+  height: 45px;
+}
+.uni-border-left.data-v-2fab037e {
+  border-left-color: #f0f0f0;
+  border-left-style: solid;
+  border-left-width: 1px;
+}
+.uni-dialog-button-text.data-v-2fab037e {
+  font-size: 14px;
+}
+.uni-button-color.data-v-2fab037e {
+  color: #007aff;
+}
+.uni-dialog-input.data-v-2fab037e {
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+          flex: 1;
+  font-size: 14px;
+}
+.uni-popup__success.data-v-2fab037e {
+  color: #4cd964;
+}
+.uni-popup__warn.data-v-2fab037e {
+  color: #f0ad4e;
+}
+.uni-popup__error.data-v-2fab037e {
+  color: #dd524d;
+}
+.uni-popup__info.data-v-2fab037e {
+  color: #909399;
+}
+

文件差异内容过多而无法显示
+ 367 - 0
unpackage/dist/dev/mp-weixin/components/uni-popup/uni-popup.js


+ 6 - 0
unpackage/dist/dev/mp-weixin/components/uni-popup/uni-popup.json

@@ -0,0 +1,6 @@
+{
+  "component": true,
+  "usingComponents": {
+    "uni-transition": "/components/uni-transition/uni-transition"
+  }
+}

文件差异内容过多而无法显示
+ 1 - 0
unpackage/dist/dev/mp-weixin/components/uni-popup/uni-popup.wxml


+ 93 - 0
unpackage/dist/dev/mp-weixin/components/uni-popup/uni-popup.wxss

@@ -0,0 +1,93 @@
+@charset "UTF-8";
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+/* 颜色变量 */
+/* 行为相关颜色 */
+/* 文字基本颜色 */
+/* 背景颜色 */
+/* 边框颜色 */
+/* 尺寸变量 */
+/* 文字尺寸 */
+/* 图片尺寸 */
+/* Border Radius */
+/* 水平间距 */
+/* 垂直间距 */
+/* 透明度 */
+/* 文章场景相关 */
+.uni-popup.data-v-7da806a4 {
+  position: fixed;
+  z-index: 99;
+}
+.uni-popup__mask.data-v-7da806a4 {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  background-color: rgba(0, 0, 0, 0.4);
+  opacity: 0;
+}
+.mask-ani.data-v-7da806a4 {
+  -webkit-transition-property: opacity;
+  transition-property: opacity;
+  -webkit-transition-duration: 0.2s;
+          transition-duration: 0.2s;
+}
+.uni-top-mask.data-v-7da806a4 {
+  opacity: 1;
+}
+.uni-bottom-mask.data-v-7da806a4 {
+  opacity: 1;
+}
+.uni-center-mask.data-v-7da806a4 {
+  opacity: 1;
+}
+.uni-popup__wrapper.data-v-7da806a4 {
+  display: block;
+  position: absolute;
+}
+.top.data-v-7da806a4 {
+  top: 0;
+}
+.bottom.data-v-7da806a4 {
+  bottom: 0;
+}
+.uni-popup__wrapper-box.data-v-7da806a4 {
+  display: block;
+  position: relative;
+  /* iphonex 等安全区设置,底部安全区适配 */
+  padding-bottom: constant(safe-area-inset-bottom);
+  padding-bottom: env(safe-area-inset-bottom);
+}
+.content-ani.data-v-7da806a4 {
+  -webkit-transition-property: opacity, -webkit-transform;
+  transition-property: opacity, -webkit-transform;
+  transition-property: transform, opacity;
+  transition-property: transform, opacity, -webkit-transform;
+  -webkit-transition-duration: 0.2s;
+          transition-duration: 0.2s;
+}
+.uni-top-content.data-v-7da806a4 {
+  -webkit-transform: translateY(0);
+          transform: translateY(0);
+}
+.uni-bottom-content.data-v-7da806a4 {
+  -webkit-transform: translateY(0);
+          transform: translateY(0);
+}
+.uni-center-content.data-v-7da806a4 {
+  -webkit-transform: scale(1);
+          transform: scale(1);
+  opacity: 1;
+}
+

文件差异内容过多而无法显示
+ 372 - 0
unpackage/dist/dev/mp-weixin/components/uni-transition/uni-transition.js


+ 4 - 0
unpackage/dist/dev/mp-weixin/components/uni-transition/uni-transition.json

@@ -0,0 +1,4 @@
+{
+  "usingComponents": {},
+  "component": true
+}

+ 1 - 0
unpackage/dist/dev/mp-weixin/components/uni-transition/uni-transition.wxml

@@ -0,0 +1 @@
+<block wx:if="{{isShow}}"><view data-ref="ani" data-event-opts="{{[['tap',[['change',['$event']]]]]}}" class="{{['uni-transition vue-ref',ani.in]}}" style="{{('transform:'+transform+';'+stylesObject)}}" bindtap="__e"><slot></slot></view></block>

+ 65 - 0
unpackage/dist/dev/mp-weixin/components/uni-transition/uni-transition.wxss

@@ -0,0 +1,65 @@
+
+.uni-transition {
+	-webkit-transition-timing-function: ease;
+	        transition-timing-function: ease;
+	-webkit-transition-duration: 0.3s;
+	        transition-duration: 0.3s;
+	-webkit-transition-property: opacity, -webkit-transform;
+	transition-property: opacity, -webkit-transform;
+	transition-property: transform, opacity;
+	transition-property: transform, opacity, -webkit-transform;
+}
+.fade-in {
+	opacity: 0;
+}
+.fade-active {
+	opacity: 1;
+}
+.slide-top-in {
+	/* transition-property: transform, opacity; */
+	-webkit-transform: translateY(-100%);
+	        transform: translateY(-100%);
+}
+.slide-top-active {
+	-webkit-transform: translateY(0);
+	        transform: translateY(0);
+	/* opacity: 1; */
+}
+.slide-right-in {
+	-webkit-transform: translateX(100%);
+	        transform: translateX(100%);
+}
+.slide-right-active {
+	-webkit-transform: translateX(0);
+	        transform: translateX(0);
+}
+.slide-bottom-in {
+	-webkit-transform: translateY(100%);
+	        transform: translateY(100%);
+}
+.slide-bottom-active {
+	-webkit-transform: translateY(0);
+	        transform: translateY(0);
+}
+.slide-left-in {
+	-webkit-transform: translateX(-100%);
+	        transform: translateX(-100%);
+}
+.slide-left-active {
+	-webkit-transform: translateX(0);
+	        transform: translateX(0);
+	opacity: 1;
+}
+.zoom-in-in {
+	-webkit-transform: scale(0.8);
+	        transform: scale(0.8);
+}
+.zoom-out-active {
+	-webkit-transform: scale(1);
+	        transform: scale(1);
+}
+.zoom-out-in {
+	-webkit-transform: scale(1.2);
+	        transform: scale(1.2);
+}
+

文件差异内容过多而无法显示
+ 16 - 16
unpackage/dist/dev/mp-weixin/pages/index/guide.js


文件差异内容过多而无法显示
+ 155 - 20
unpackage/dist/dev/mp-weixin/pages/index/index.js


文件差异内容过多而无法显示
+ 1 - 1
unpackage/dist/dev/mp-weixin/pages/index/index.wxml


文件差异内容过多而无法显示
+ 45 - 3
unpackage/dist/dev/mp-weixin/pages/index/index.wxss


文件差异内容过多而无法显示
+ 12 - 12
unpackage/dist/dev/mp-weixin/pages/index/init.js


+ 0 - 11
unpackage/dist/dev/mp-weixin/pages/index/init.wxss

@@ -1,11 +0,0 @@
-
-.guide-img.data-v-41a19ae6{position: fixed;left: 0;right: 0;top: 0;bottom: 0;display: block;}
-.swiper.data-v-41a19ae6{height: 100%;}
-.adv-item.data-v-41a19ae6{height: 100%;}
-.guide-img .pic.data-v-41a19ae6{width: 100%;/* max-height: 100%; */}
-#universal-preloader.data-v-41a19ae6{position:fixed;top:0px;left:0px;width:100%;height:100%;opacity:1;background:rgba(0,0,0,0.1) !important;filter:Alpha(opacity=100);background:#000;z-index:1020;}
-#universal-preloader>.preloader.data-v-41a19ae6{position: relative;width: 100%;height: 100%;}
-.universal-preloader-preloader.data-v-41a19ae6{width: 100%;min-height: 100%;}
-.preloader-time.data-v-41a19ae6{position: absolute;right: 24px;top: 24px;font-size: 24rpx;display: inline-block;background: #fff;padding: 3px 8px;-webkit-border-radius: 10px;border-radius: 10px;}
-#preloader-time-num.data-v-41a19ae6{font-style: normal;margin-right: 5rpx;color: #57992c;}
-

文件差异内容过多而无法显示
+ 93 - 46
unpackage/dist/dev/mp-weixin/pages/login/companyLogin.js


+ 0 - 0
unpackage/dist/dev/mp-weixin/pages/login/companyLogin.wxml


部分文件因为文件数量过多而无法显示