houjie 4 years ago
parent
commit
bfc290251a

+ 1 - 0
.gitignore

@@ -2,4 +2,5 @@
 /node_modules
 /unpackage
 /proto/bundle.js
+/.vscode
 

+ 22 - 24
App.vue

@@ -4,33 +4,31 @@
 	</view>
 </template> -->
 <script>
-	//import mqtt from 'mqtt/dist/mqtt.js'
-	export default {
-		onLoad() {
-			//连接mqtt服务器
-			//this.$root.connect()
-			console.log('App Load')
-		},
-		onLaunch: function() {
-			//连接mqtt服务器
-			//this.$root.connect()
-			console.log(`App Launch`)
-			//this.$store.commit('connect')
-		},
-		onShow: function() {
-			console.log('App Show')
-		},
-		onHide: function() {
-			console.log('App Hide')
-		},
-
-	}
+//import mqtt from 'mqtt/dist/mqtt.js'
+export default {
+  onLaunch: function () {
+    //this.$root.connect()
+    console.log(`App Launch`);
+    //获取平台信息
+    uni.getSystemInfo({
+      success(res) {
+        console.log(res);
+        console.log(`平台信息 ${res.platform}`);
+      },
+    });
+  },
+  onShow: function () {
+    console.log("App Show");
+  },
+  onHide: function () {
+    console.log("App Hide");
+  },
+};
 </script>
 
 <style>
-	/*每个页面公共css */
-	/* .aaa{
+/*每个页面公共css */
+/* .aaa{
 		background: #2C3E50;
 	} */
-	
 </style>

+ 34 - 23
common/httpClient.js

@@ -2,9 +2,10 @@ import {
 	requestEncode,
 	responseDecode
 } from "./protoMap"
+//import util from '../common/util'
 
 
-const URL = 'http://60.205.190.38:80/Ohplay/Web/HttpToTcp';
+const URL = 'https://test.ohplay.radio1964.net/Ohplay/Web/HttpToTcp';
 
 
 
@@ -20,37 +21,47 @@ function post(request) {
 		method: 'POST',
 		timeout: 15000,
 		dataType: 'protobuf',
-		responseType: 'arraybuffer',
+		responseType: 'text',
 		data: requestBuffer
 	}).then((res) => {
 		for (let response of res) {
 			if (response !== null && response !== undefined && response.statusCode === 200) {
 				try {
-					let enc = new TextDecoder('utf-8')
-					let resJson = JSON.parse(enc.decode(new Uint8Array(response.data))) //转化成json对象
+					console.log(response);
+					let resJson = JSON.parse(response.data) //转化成json对象
 					console.log(resJson);
-					return {
-						code: resJson.code,
-						msg: resJson.info
-					}
-				} catch (e) {
-					let data = responseDecode(response)
-					console.log(data);
-					let code = 0
-					let msg = "success"
-					if (typeof data.errInfo !== 'undefined') {
-						code = data.errInfo.errorCode
-						if (typeof data.errInfo.errorMessage === 'string') {
-							msg = data.errInfo.errorMessage
-						} else {
-							msg = Buffer.from(data.errInfo.errorMessage).toString()
+					if(resJson.code === 0){
+						let base64Str = resJson.data;
+						//let base64Str = 'DQMAAAAVAQAAAB0CAAAAJeoDAABKlgEKBBICb2sSjQFleUpoYkdjaU9pSklVekkxTmlJc0luUjVjQ0k2SWtwWFZDSjkuZXlKVmMyVnlhV1FpT2pZNE5EQXhNQ3dpYm1GdFpTSTZJalFpTENKbGVIQWlPakUyTWpNME9EWTRNamg5LlNzRlgzdWJ5UFp4NWRCLXJzZHNDd3NGcjlpLUpJczFXeWJBS2pBS3pwdzQ='
+						let buffer = Buffer.from(base64Str,'base64')
+						let data = responseDecode(buffer)
+						console.log(data);
+						let code = 0
+						let msg = "success"
+						if (typeof data.errInfo !== 'undefined') {
+							code = data.errInfo.errorCode
+							if (typeof data.errInfo.errorMessage === 'string') {
+								msg = data.errInfo.errorMessage
+							} else {
+								msg = Buffer.from(data.errInfo.errorMessage).toString()
+							}
+						}
+						return {
+							code: code,
+							msg: msg,
+							data: data
+						}
+					}else{
+						return {
+							code: resJson.code,
+							msg: resJson.info
 						}
 					}
-					//throw "Error2"
+					
+				} catch (e) {
 					return {
-						code: code,
-						msg: msg,
-						data: data
+						code: -1,
+						msg: e.toString()
 					}
 				}
 			}

+ 4 - 2
common/protoMap.js

@@ -6,6 +6,7 @@ import {
 const protoMap = {
 	1005: user.login_req,//登录请求
 	1006: user.login_rsp,//登录返回
+	1002: user.wxLoginRsp,//登录返回
 }
 
 
@@ -41,8 +42,8 @@ function requestEncode(request) { //请求的编码
 	return getRequestBuffer(request, buffer)
 }
 
-function responseDecode(response) { //响应的解码
-	let resBuf = Buffer.from(response.data)
+function responseDecode(buffer) { //响应的解码
+	let resBuf = Buffer.from(buffer)
 	let resMessage = common.MsgWebsocket.decode(resBuf)
 	let rspBuf = resMessage.data
 
@@ -53,6 +54,7 @@ function responseDecode(response) { //响应的解码
 	let obj = ResponseMessage.toObject(rspMsgObj, {
 		longs: String,
 		enums: String,
+		defaults: true,
 	})
 	return obj
 

+ 68 - 0
common/protoMap_json.js

@@ -0,0 +1,68 @@
+import protoRoot from '../proto/proto'
+
+
+//let root = protobufRoot.fromJSON(person);
+
+const MsgWebsocket = protoRoot.lookupType('common.MsgWebsocket')
+
+const protoMap = {
+	1005: protoRoot.lookupType('user.login_req'),
+	1006: protoRoot.lookupType('user.login_rsp'),//登录返回
+}
+
+
+function getMsgWebsocket(version, server, servant, buffer) {
+	return MsgWebsocket.create({
+		version: version,
+		app: 1,
+		server: server,
+		servant: servant,
+		data: buffer,
+	})
+}
+
+function getRequestBuffer(request, buffer) {
+	let requestMessage = getMsgWebsocket(1, request.server, request.servant, buffer)
+	let requestBuffer = MsgWebsocket.encode(requestMessage).finish()
+	return new Uint8Array([...requestBuffer]).buffer
+}
+
+function getResponseDataBuf(response) {
+	let resBuf = Buffer.from(response.data)
+	let resMessage = MsgWebsocket.decode(resBuf)
+	return resMessage.data
+}
+
+
+function requestEncode(request) { //请求的编码
+	let RequestMessage = protoMap[request.servant]
+	let requestMsgObj = RequestMessage.create(request.data)
+	console.log(requestMsgObj);
+	let buffer = RequestMessage.encode(requestMsgObj).finish()
+	//返回请求的ArrayBuffer
+	return getRequestBuffer(request, buffer)
+}
+
+function responseDecode(response) { //响应的解码
+	let resBuf = Buffer.from(response.data)
+	let resMessage = MsgWebsocket.decode(resBuf)
+	let rspBuf = resMessage.data
+
+	let ResponseMessage = protoMap[resMessage.servant]
+
+	let rspMsgObj = ResponseMessage.decode(rspBuf)
+	console.log(rspMsgObj);
+	let obj = ResponseMessage.toObject(rspMsgObj, {
+		longs: String,
+		enums: String,
+	})
+	return obj
+
+}
+
+
+
+module.exports = {
+	requestEncode,
+	responseDecode,
+}

+ 47 - 1
common/util.js

@@ -1,3 +1,12 @@
+// #ifndef MP-WEIXIN
+const base64 = require("crypto-js/enc-base64");
+const utf8 = require("crypto-js/enc-utf8");
+// #endif
+
+var $protobuf = require("protobufjs/minimal");
+$util = $protobuf.util;
+
+
 function formatTime(time) {
 	if (typeof time !== 'number' || time < 0) {
 		return time
@@ -68,8 +77,45 @@ var dateUtils = {
 
 
 
+
+
+// function encodeBase64(test){
+// 	let wordArray = utf8.parse(test);
+	
+// 	return base64.stringify(wordArray);
+// }
+
+function encodeBase64(text){
+	let res
+	// #ifdef MP-WEIXIN
+	let buffer = Buffer.from(text).buffer
+	res = uni.arrayBufferToBase64(buffer)
+	// #endif
+
+	// #ifndef MP-WEIXIN
+	let wordArray = utf8.parse(text);
+	res = base64.stringify(wordArray);
+	// #endif
+	return res
+}
+
+function decodeBase64(text){
+	let buffer 
+	// #ifdef MP-WEIXIN
+	res = uni.base64ToArrayBuffer(text)
+	// #endif
+
+	// #ifndef MP-WEIXIN
+	
+	res = base64.stringify(wordArray);
+	// #endif
+}
+
+
+
 module.exports = {
 	formatTime: formatTime,
 	formatLocation: formatLocation,
-	dateUtils: dateUtils
+	dateUtils: dateUtils,
+	encodeBase64:encodeBase64,
 }

+ 29 - 0
components/hello/hello.vue

@@ -0,0 +1,29 @@
+<template>
+  <view class="hello">hello</view>
+</template>
+
+<script>
+
+export default {
+  props: {},
+  data: () => ({}),
+  computed: {},
+  methods: {},
+  watch: {},
+
+  // 组件周期函数--监听组件挂载完毕
+  mounted() {},
+  // 组件周期函数--监听组件数据更新之前
+  beforeUpdate() {},
+  // 组件周期函数--监听组件数据更新之后
+  updated() {},
+  // 组件周期函数--监听组件激活(显示)
+  activated() {},
+  // 组件周期函数--监听组件停用(隐藏)
+  deactivated() {},
+  // 组件周期函数--监听组件销毁之前
+  beforeDestroy() {},
+};
+</script>
+
+<style></style>

+ 26 - 30
components/mycomponent.vue

@@ -1,38 +1,34 @@
 <template>
-	<view>
-		<label>{{title}}</label>
-	</view>
-	<view>
-		<label>{{content}}</label>
-	</view>
+  <view>
+    <text>{{ title }}</text>
+    <view>
+      <text>{{ content }}</text>
+    </view>
+  </view>
 </template>
 
 <script>
-	export default {
-		name:"mycomponent",
-		props:{
-			title:{
-				type:String,
-				default:""
-			},
-			content:{
-				type:String,
-				default:""
-			}
-		}
-		data() {
-			return {
-				
-			};
-		},
-		methods:{
-			tab(event){
-				console.log(event)
-			}
-		}
-	}
+export default {
+  props: {
+    title: {
+      type: String,
+      default: "",
+    },
+    content: {
+      type: String,
+      default: "",
+    },
+  },
+  data() {
+    return {};
+  },
+  methods: {
+    tab(event) {
+      console.log(event);
+    },
+  },
+};
 </script>
 
 <style>
-
 </style>

+ 82 - 0
package-lock.json

@@ -1,15 +1,35 @@
 {
   "name": "mqttTest",
+  "version": "1.0.0",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
+      "version": "1.0.0",
+      "license": "ISC",
       "dependencies": {
+        "@dcloudio/types": "^2.2.7",
+        "@dcloudio/uni-helper-json": "^1.0.13",
         "axios": "^0.21.1",
+        "crypto-js": "^4.0.0",
         "mqtt": "^4.1.0",
         "protobufjs": "^6.11.2"
+      },
+      "devDependencies": {
+        "@types/html5plus": "^1.0.1",
+        "@types/uni-app": "^1.4.3"
       }
     },
+    "node_modules/@dcloudio/types": {
+      "version": "2.2.7",
+      "resolved": "https://registry.npmjs.org/@dcloudio/types/-/types-2.2.7.tgz",
+      "integrity": "sha512-ipipcszcqXxG/PEIZKi5uFw4ttITpKWD0c2mwB3Bprm7p+/CEgtXYGpo6rLi8aZCc8JDgUsXMgOz79kSABAW4Q=="
+    },
+    "node_modules/@dcloudio/uni-helper-json": {
+      "version": "1.0.13",
+      "resolved": "https://registry.npmjs.org/@dcloudio/uni-helper-json/-/uni-helper-json-1.0.13.tgz",
+      "integrity": "sha512-FO9Iu4zW4td3Tr+eiCDWuele2ehkJ4qxQ/UhpAMLjso+ZdWz6NagK5Syh6cdy1hoDqbxpNoqnLynuJXe81Ereg=="
+    },
     "node_modules/@protobufjs/aspromise": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
@@ -64,6 +84,12 @@
       "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
       "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
     },
+    "node_modules/@types/html5plus": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@types/html5plus/-/html5plus-1.0.1.tgz",
+      "integrity": "sha512-ska1eyYbGO7zsru2KTjZ/CWtSjOXh92/K/QMdgSddkyr1ZplIybOzeS1u61scyxAKRvz6Yd9TRL+LQSBVyGUJw==",
+      "dev": true
+    },
     "node_modules/@types/long": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
@@ -74,6 +100,15 @@
       "resolved": "https://registry.npmjs.org/@types/node/-/node-15.3.1.tgz",
       "integrity": "sha512-weaeiP4UF4XgF++3rpQhpIJWsCTS4QJw5gvBhQu6cFIxTwyxWIe3xbnrY/o2lTCQ0lsdb8YIUDUvLR4Vuz5rbw=="
     },
+    "node_modules/@types/uni-app": {
+      "version": "1.4.3",
+      "resolved": "https://registry.npmjs.org/@types/uni-app/-/uni-app-1.4.3.tgz",
+      "integrity": "sha512-i2P+ARDpMWrAlubqp54LYBEAxZhPML3kHW9qLxwK7ZvInoI8xaYDDhqukp5xisBftVrZ7+jUa7spCDXy6qBMvQ==",
+      "dev": true,
+      "dependencies": {
+        "vue": "^2.6.8"
+      }
+    },
     "node_modules/async-limiter": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
@@ -213,6 +248,11 @@
       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
       "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
     },
+    "node_modules/crypto-js": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz",
+      "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg=="
+    },
     "node_modules/d": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
@@ -839,6 +879,12 @@
       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
       "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
     },
+    "node_modules/vue": {
+      "version": "2.6.12",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.12.tgz",
+      "integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==",
+      "dev": true
+    },
     "node_modules/websocket-stream": {
       "version": "5.5.2",
       "resolved": "https://registry.npmjs.org/websocket-stream/-/websocket-stream-5.5.2.tgz",
@@ -877,6 +923,16 @@
     }
   },
   "dependencies": {
+    "@dcloudio/types": {
+      "version": "2.2.7",
+      "resolved": "https://registry.npmjs.org/@dcloudio/types/-/types-2.2.7.tgz",
+      "integrity": "sha512-ipipcszcqXxG/PEIZKi5uFw4ttITpKWD0c2mwB3Bprm7p+/CEgtXYGpo6rLi8aZCc8JDgUsXMgOz79kSABAW4Q=="
+    },
+    "@dcloudio/uni-helper-json": {
+      "version": "1.0.13",
+      "resolved": "https://registry.npmjs.org/@dcloudio/uni-helper-json/-/uni-helper-json-1.0.13.tgz",
+      "integrity": "sha512-FO9Iu4zW4td3Tr+eiCDWuele2ehkJ4qxQ/UhpAMLjso+ZdWz6NagK5Syh6cdy1hoDqbxpNoqnLynuJXe81Ereg=="
+    },
     "@protobufjs/aspromise": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
@@ -931,6 +987,12 @@
       "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
       "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
     },
+    "@types/html5plus": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@types/html5plus/-/html5plus-1.0.1.tgz",
+      "integrity": "sha512-ska1eyYbGO7zsru2KTjZ/CWtSjOXh92/K/QMdgSddkyr1ZplIybOzeS1u61scyxAKRvz6Yd9TRL+LQSBVyGUJw==",
+      "dev": true
+    },
     "@types/long": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
@@ -941,6 +1003,15 @@
       "resolved": "https://registry.npmjs.org/@types/node/-/node-15.3.1.tgz",
       "integrity": "sha512-weaeiP4UF4XgF++3rpQhpIJWsCTS4QJw5gvBhQu6cFIxTwyxWIe3xbnrY/o2lTCQ0lsdb8YIUDUvLR4Vuz5rbw=="
     },
+    "@types/uni-app": {
+      "version": "1.4.3",
+      "resolved": "https://registry.npmjs.org/@types/uni-app/-/uni-app-1.4.3.tgz",
+      "integrity": "sha512-i2P+ARDpMWrAlubqp54LYBEAxZhPML3kHW9qLxwK7ZvInoI8xaYDDhqukp5xisBftVrZ7+jUa7spCDXy6qBMvQ==",
+      "dev": true,
+      "requires": {
+        "vue": "^2.6.8"
+      }
+    },
     "async-limiter": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
@@ -1048,6 +1119,11 @@
       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
       "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
     },
+    "crypto-js": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz",
+      "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg=="
+    },
     "d": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
@@ -1585,6 +1661,12 @@
       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
       "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
     },
+    "vue": {
+      "version": "2.6.12",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.12.tgz",
+      "integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==",
+      "dev": true
+    },
     "websocket-stream": {
       "version": "5.5.2",
       "resolved": "https://registry.npmjs.org/websocket-stream/-/websocket-stream-5.5.2.tgz",

+ 22 - 1
package.json

@@ -1,7 +1,28 @@
 {
   "dependencies": {
+    "@dcloudio/types": "^2.2.7",
+    "@dcloudio/uni-helper-json": "^1.0.13",
     "axios": "^0.21.1",
+    "crypto-js": "^4.0.0",
     "mqtt": "^4.1.0",
     "protobufjs": "^6.11.2"
-  }
+  },
+  "name": "mqttTest",
+  "version": "1.0.0",
+  "main": "main.js",
+  "devDependencies": {
+    "@types/html5plus": "^1.0.1",
+    "@types/uni-app": "^1.4.3"
+  },
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "repository": {
+    "type": "git",
+    "url": "http://60.205.190.38:9000/MiniProgram/MqttDemo.git"
+  },
+  "keywords": [],
+  "author": "",
+  "license": "ISC",
+  "description": ""
 }

+ 20 - 1
pages.json

@@ -54,7 +54,16 @@
                 "enablePullDownRefresh": false
             }
             
-        }
+        },
+		{
+			"path" : "pages/test/component2"
+		},
+		{
+			"path" : "pages/test/component3/component3",
+			"style":{
+				"onReachBottomDistance": 80
+			}
+		}
     ],
 	"dependencies": {
 	  "mqtt": "^3.0.0"
@@ -74,6 +83,16 @@
 				"name": "组件1", //模式名称
 				"path": "pages/test/component1", //启动页面,必选
 				"query": "id=3241351635&name=askjhfd" //启动参数,在页面的onLoad函数里面得到
+			},
+			{
+				"name": "组件2", //模式名称
+				"path": "pages/test/component2", //启动页面,必选
+				"query": "id=3241351635&name=askjhfd" //启动参数,在页面的onLoad函数里面得到
+			},
+			{
+				"name": "组件3", //模式名称
+				"path": "pages/test/component3/component3", //启动页面,必选
+				"query": "id=3241351635&name=askjhfd" //启动参数,在页面的onLoad函数里面得到
 			}
 		]
 	},

+ 127 - 68
pages/index/device.vue

@@ -1,77 +1,136 @@
 <template>
-	<view class="content">
-		<button @click="godoBle">添加设备</button>
-		
-		<button v-if="false" @click="test1">test1</button>
-	</view>
+  <view class="content">
+    <button @click="godoBle">添加设备</button>
+
+    <button @click="chooseImage">上传图片</button>
+  </view>
 </template>
 
 <script>
-	import {common} from '../../proto/bundle.js';
-	
-	
-	export default {
-		data() {
-			return {
-
-			}
-		},
-		onLoad() {
-
-		},
-		methods: {
-			test1(){
-				let errinfo = common.ErrorInfo.create({
-					errorCode: 0,
-					errorMessage:Buffer.from('成功')
-				})
-				
-				//把ErrorInfo对象 编码成Uint8Array (browser) or Buffer (node)
-				let errBuffer = common.ErrorInfo.encode(errinfo).finish()
-				
-				//把Uint8Array (browser) 或者 Buffer (node) 解码成ErrorInfo对象
-				let message = common.ErrorInfo.decode(errBuffer)
-				
-				//转化为一个对象
-				let obj = common.ErrorInfo.toObject(message, {
-					enums: String, // enums as string names
-					longs: String, // longs as strings (requires long.js)
-					//bytes: String,
-				})
-				console.log(obj);
-				let buf = Buffer.from(obj.errorMessage)
-				console.log(`errorMessage = ${buf.toString()}`);
-				// let buf = Buffer.from(obj.errorMessage)
-				// console.log(buf);
-				// console.log(buf.toString());
-			},
-			godoBle() { //添加设备
-				// #ifdef MP-WEIXIN||APP-PLUS
-				uni.navigateTo({
-					url: '../ble/ScanBleDevice'
-				})
-				// #endif
-				// #ifdef H5
-				uni.navigateTo({
-					url: '../ble/ConnectBleDevice'
-				})
-				// uni.showToast({
-				// 	title:'H5页面不支持扫描设备',
-				// 	icon:'none'
-				// })
-				// #endif
-
-			}
+import { common } from "../../proto/bundle.js";
+
+//const CryptoJS = require("crypto-js");
+const HmacSHA1 = require("crypto-js/hmac-sha1");
+const base64 = require("crypto-js/enc-base64");
+const utf8 = require("crypto-js/enc-utf8");
+
+const policy =
+  '{"expiration": "2120-01-01T12:00:00.000Z","conditions": [["content-length-range", 0, 104857600]]}';
+
+const OSSAccessKeyId = "LTAICUWe9r9tRcPB";
+
+const accessKeySecret = "gCZSuqdztp6X1n2xMaCqzhnBSWVJv6";
+
+let wordArray = utf8.parse(policy);
+const policyBase64 = base64.stringify(wordArray);
+
+//获取加密参数
+const sha1 = HmacSHA1(policyBase64, accessKeySecret);
+console.log(`sha1 = ${sha1}`);
+const signature = base64.stringify(sha1);
+console.log(`sign = ${signature}`);
+
+
+
+export default {
+  data() {
+    return {};
+  },
+  onLoad() {},
+  methods: {
+    //选择图片
+    chooseImage() {
+      let that = this;
+
+      uni.chooseImage({
+        count: 1,
+        success(res) {
+          console.log(res);
+          let file = res.tempFiles[0];
+          console.log(file);
+		  that.wxUploadImage(file)
+        },
+      });
+    },
+    //上传图片
+    wxUploadImage(file) {
+      uni.uploadFile({
+        url: "https://airsmart-photo1.oss-cn-shanghai.aliyuncs.com",
+        filePath: file.path,
+        name: 'file',
+        formData: {
+          'key': "wx/test3.png",
+		  'success_action_status':200,///如果该域的值设置为200或者204,OSS返回一个空文档和相应的状态码。
+      	  'OSSAccessKeyId': OSSAccessKeyId,
+      	  'policy': policyBase64,
+          'Signature':signature,
+          'Content-Type':'image/jpeg',
+        },
+        success: (uploadFileRes) => {
+			console.log("上传成功");
+          console.log(uploadFileRes);
+        },
+		fail(err){
+			console.log(err);
 		}
-	}
+      });
+    },
+    
+    goCompent3() {
+      uni.navigateTo({ url: "../test/component3/component3" });
+    },
+    test1() {
+      let errinfo = common.ErrorInfo.create({
+        errorCode: 0,
+        errorMessage: Buffer.from("成功"),
+      });
+
+      //把ErrorInfo对象 编码成Uint8Array (browser) or Buffer (node)
+      let errBuffer = common.ErrorInfo.encode(errinfo).finish();
+
+      //把Uint8Array (browser) 或者 Buffer (node) 解码成ErrorInfo对象
+      let message = common.ErrorInfo.decode(errBuffer);
+
+      //转化为一个对象
+      let obj = common.ErrorInfo.toObject(message, {
+        enums: String, // enums as string names
+        longs: String, // longs as strings (requires long.js)
+        //bytes: String,
+      });
+      console.log(obj);
+      let buf = Buffer.from(obj.errorMessage);
+      console.log(`errorMessage = ${buf.toString()}`);
+      // let buf = Buffer.from(obj.errorMessage)
+      // console.log(buf);
+      // console.log(buf.toString());
+    },
+    godoBle() {
+      //添加设备
+      // #ifdef MP-WEIXIN||APP-PLUS
+      uni.navigateTo({
+        url: "../ble/ScanBleDevice",
+      });
+      // #endif
+      // #ifdef H5
+      uni.navigateTo({
+        url: "../ble/ConnectBleDevice",
+      });
+      // uni.showToast({
+      // 	title:'H5页面不支持扫描设备',
+      // 	icon:'none'
+      // })
+      // #endif
+    },
+  },
+};
 </script>
 
 <style>
-	.content {
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		justify-content: center;
-		margin: 20rpx;
-	}
+.content {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  margin: 20rpx;
+}
 </style>

+ 23 - 22
pages/index/mine.vue

@@ -11,30 +11,30 @@
 
 <script>
 	import post from '../../common/httpClient.js'
-	import {common,	user} from '../../proto/bundle.js';
-	//const protobuf = require("protobufjs/minimal");
-	const axios = require('axios');
+	// import {common,	user} from '../../proto/bundle.js';
+	// //const protobuf = require("protobufjs/minimal");
+	// const axios = require('axios');
 
-	let loginMessage = user.login_req.create({
-		phone: '1234567890',
-		type: 1,
-		verifyInfo: '123456a',
-	})
-	//proto对象转buffer
-	let buffer = user.login_req.encode(loginMessage).finish()
-	console.log(buffer);
-	let requestMessage = common.MsgWebsocket.create({
-		version: 1,
-		app: 1,
-		server: 2,
-		servant: 1005,
-		data: buffer,
-	})
-	let requestBuffer = common.MsgWebsocket.encode(requestMessage).finish()
-	console.log(requestBuffer);
+	// let loginMessage = user.login_req.create({
+	// 	phone: '1234567890',
+	// 	type: 1,
+	// 	verifyInfo: '123456a',
+	// })
+	// //proto对象转buffer
+	// let buffer = user.login_req.encode(loginMessage).finish()
+	// console.log(buffer);
+	// let requestMessage = common.MsgWebsocket.create({
+	// 	version: 1,
+	// 	app: 1,
+	// 	server: 2,
+	// 	servant: 1005,
+	// 	data: buffer,
+	// })
+	// let requestBuffer = common.MsgWebsocket.encode(requestMessage).finish()
+	// console.log(requestBuffer);
 	
-	let typeStr = Object.prototype.toString.call(requestBuffer.buffer)
-	console.log(typeStr);
+	// let typeStr = Object.prototype.toString.call(requestBuffer.buffer)
+	// console.log(typeStr);
 	export default {
 		data() {
 			return {
@@ -179,6 +179,7 @@
 							}
 						}
 					}, (err) => {
+						
 						console.log(err);
 					});
 

+ 53 - 39
pages/test/component1.vue

@@ -1,48 +1,62 @@
 <template>
-	<view class="content">
-		<view>
-			<text space="emsp">小女孩:  我会唱歌</text>
-		</view>
-		<view>
-			<text >鹦鹉:我会唱歌</text>
-		</view>
-		<view>
-			<text>小女孩:我会跳舞</text>
-		</view>
-		<view>
-			<text>鹦鹉:我会跳舞</text>
-		</view>
-		<view>
-			<text>小女孩:我会飞</text>
-		</view>
-		<view>
-			<text>鹦鹉:你放屁</text>
-		</view>
-	</view>
+  <view class="content">
+    <button type="primary" @click="saveData">存储数据</button>
+    <button type="primary" @click="getData">获取数据</button>
+    <view>
+      <hello></hello>
+    </view>
+  </view>
 </template>
 
 <script>
-	export default {
-		data() {
-			return {
-				
-			}
-		},
-		methods: {
-			test(){
-				
-			}
-			
-		}
-	}
+import hello from '../../components/hello/hello.vue';
+
+
+
+export default {
+  components: { hello },
+ 
+  
+  
+  data() {
+    return {};
+  },
+  
+  methods: {
+    saveData() {
+      uni.setStorage({
+        key: "user",
+        data: {
+          id: 3241354,
+          name: "asdfasf",
+          age: 18,
+          sex: "男",
+        },
+        success() {
+          console.log("success");
+        },
+        fail(err) {
+          console.log(err);
+        },
+      });
+    },
+    getData() {
+      uni.getStorage({
+        key: "user",
+        success(res) {
+          console.log(res);
+        },
+        fail(err) {
+          console.log(err);
+        },
+      });
+    },
+  },
+};
 </script>
 
 <style>
 .content {
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		justify-content: center;
-		margin: 20rpx;
-	}
+  margin: 20rpx;
+}
 </style>

+ 82 - 0
pages/test/component2.vue

@@ -0,0 +1,82 @@
+<template>
+  <view class="component2">
+    <view class="box2" hover-class="box2-pressed">
+      <view class="box" hover-class="box-pressed" hover-stop-propagation>
+        I am box
+      </view>
+    </view>
+    <button size="default">Button1</button>
+    <button size="mini">Button2</button>
+    <button class="button" plain>Button3</button>
+    <button loading="true">Button5</button>
+    <view>
+      <image src="http://destiny001.gitee.io/image/cxk.gif" mode="aspectFill"/>
+      <image src="http://destiny001.gitee.io/image/cxk.gif" mode="aspectFit" />
+      <scroll-view>
+
+      </scroll-view>
+      
+    </view>
+    
+  </view>
+</template>
+
+<script>
+export default {
+  components: {},
+  data: () => ({}),
+  computed: {},
+  methods: {},
+  watch: {},
+
+  // 页面周期函数--监听页面加载
+  onLoad() {},
+  // 页面周期函数--监听页面初次渲染完成
+  onReady() {},
+  // 页面周期函数--监听页面显示(not-nvue)
+  onShow() {},
+  // 页面周期函数--监听页面隐藏
+  onHide() {},
+  // 页面周期函数--监听页面卸载
+  onUnload() {},
+  // 页面处理函数--监听用户下拉动作
+  onPullDownRefresh() {
+    uni.stopPullDownRefresh();
+  },
+  // 页面处理函数--监听用户上拉触底
+  onReachBottom() {},
+  // 页面处理函数--监听页面滚动(not-nvue)
+  /* onPageScroll(event) {}, */
+  // 页面处理函数--用户点击右上角分享
+  /* onShareAppMessage(options) {}, */
+};
+</script>
+
+
+<style>
+.component2 {
+  width: 100vw;
+  height: 100vh;
+
+}
+.box {
+  width: 100rpx;
+  height: 100rpx;
+  background: green;
+}
+.box-pressed {
+  background: red;
+}
+.box2 {
+  width: 200rpx;
+  height: 200rpx;
+  background: pink;
+}
+.box2-pressed {
+  background: burlywood;
+}
+.button{
+  background: green;
+  color: green;
+}
+</style>

+ 3 - 0
pages/test/component3/a.css

@@ -0,0 +1,3 @@
+view{
+    color: aqua;
+}

+ 103 - 0
pages/test/component3/component3.vue

@@ -0,0 +1,103 @@
+<template>
+  <view>
+    <view class="box1" v-for="(item,index) in list" :key="index">
+      {{ item.name }}<text>{{ item.id }}</text>
+    </view>
+  </view>
+</template>
+
+<script>
+import post from "../../../common/httpClient.js";
+
+export default {
+  props: {},
+  data: () => ({
+    list: [
+      { name: "aaaaaaa", id: 0 },
+      { name: "bbbbbbb", id: 1 },
+      { name: "ccccccc", id: 2 },
+      { name: "ddddddd", id: 3 },
+      { name: "eeeeeee", id: 4 },
+      { name: "fffffff", id: 5 },
+      { name: "ggggggg", id: 6 },
+    ],
+  }),
+  computed: {},
+  methods: {},
+  watch: {},
+  // 页面周期函数--监听页面加载
+  onLoad() {
+    
+  },
+  // 页面周期函数--监听页面初次渲染完成
+  onReady() {},
+  // 页面周期函数--监听页面显示(not-nvue)
+  onShow() {},
+  // 页面周期函数--监听页面隐藏
+  onHide() {},
+  // 页面周期函数--监听页面卸载
+  onUnload() {},
+  onPullDownRefresh() {
+    // let that = this;
+    // post({
+    //   server: 2,
+    //   servant: 1005,
+    //   data: {
+    //     phone: "3246541321",
+    //     type: 1,
+    //     verifyInfo: "asdasd",
+    //   },
+    // })
+    //   .then((result) => {
+    //     //if (result.code === 0) {
+    //       let count = that.list.length
+    //       that.list.push({
+    //         name:result.msg,
+    //         id:count
+    //       })
+    //     //}
+    //     uni.stopPullDownRefresh();
+    //   })
+    //   .catch((err) => {
+    //     uni.stopPullDownRefresh();
+    //   });
+  },
+  onReachBottom(){
+    let that = this;
+    post({
+      server: 2,
+      servant: 1005,
+      data: {
+        phone: "3246541321",
+        type: 1,
+        verifyInfo: "asdasd",
+      },
+    })
+      .then((result) => {
+          let count = that.list.length
+          that.list.push({
+            name:result.msg,
+            id:count
+          })
+      })
+      .catch((err) => {
+      });
+  }
+
+};
+</script>
+
+<style lang="scss">
+@import url("./a.css");
+
+.box1 {
+  width: 100vw;
+  height: 200rpx;
+  color: #353535;
+  font-size: 50rpx;
+  text {
+    font-size: $fs-middel;
+    color: red;
+  }
+}
+</style>

+ 6 - 0
proto/User.proto

@@ -23,6 +23,12 @@ message login_rsp {
     string sskey       = 4;
 }
 
+//登录响应
+message wxLoginRsp {
+    ErrorInfo errInfo   = 1; // 错误码信息
+    string token         = 2; // 访问令牌
+}
+
 
 
 

+ 215 - 0
proto/bundle.js

@@ -1162,6 +1162,221 @@ $root.user = (function() {
         return login_rsp;
     })();
 
+    user.wxLoginRsp = (function() {
+
+        /**
+         * Properties of a wxLoginRsp.
+         * @memberof user
+         * @interface IwxLoginRsp
+         * @property {common.IErrorInfo|null} [errInfo] wxLoginRsp errInfo
+         * @property {string|null} [token] wxLoginRsp token
+         */
+
+        /**
+         * Constructs a new wxLoginRsp.
+         * @memberof user
+         * @classdesc Represents a wxLoginRsp.
+         * @implements IwxLoginRsp
+         * @constructor
+         * @param {user.IwxLoginRsp=} [properties] Properties to set
+         */
+        function wxLoginRsp(properties) {
+            if (properties)
+                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                    if (properties[keys[i]] != null)
+                        this[keys[i]] = properties[keys[i]];
+        }
+
+        /**
+         * wxLoginRsp errInfo.
+         * @member {common.IErrorInfo|null|undefined} errInfo
+         * @memberof user.wxLoginRsp
+         * @instance
+         */
+        wxLoginRsp.prototype.errInfo = null;
+
+        /**
+         * wxLoginRsp token.
+         * @member {string} token
+         * @memberof user.wxLoginRsp
+         * @instance
+         */
+        wxLoginRsp.prototype.token = "";
+
+        /**
+         * Creates a new wxLoginRsp instance using the specified properties.
+         * @function create
+         * @memberof user.wxLoginRsp
+         * @static
+         * @param {user.IwxLoginRsp=} [properties] Properties to set
+         * @returns {user.wxLoginRsp} wxLoginRsp instance
+         */
+        wxLoginRsp.create = function create(properties) {
+            return new wxLoginRsp(properties);
+        };
+
+        /**
+         * Encodes the specified wxLoginRsp message. Does not implicitly {@link user.wxLoginRsp.verify|verify} messages.
+         * @function encode
+         * @memberof user.wxLoginRsp
+         * @static
+         * @param {user.IwxLoginRsp} message wxLoginRsp message or plain object to encode
+         * @param {$protobuf.Writer} [writer] Writer to encode to
+         * @returns {$protobuf.Writer} Writer
+         */
+        wxLoginRsp.encode = function encode(message, writer) {
+            if (!writer)
+                writer = $Writer.create();
+            if (message.errInfo != null && Object.hasOwnProperty.call(message, "errInfo"))
+                $root.common.ErrorInfo.encode(message.errInfo, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+            if (message.token != null && Object.hasOwnProperty.call(message, "token"))
+                writer.uint32(/* id 2, wireType 2 =*/18).string(message.token);
+            return writer;
+        };
+
+        /**
+         * Encodes the specified wxLoginRsp message, length delimited. Does not implicitly {@link user.wxLoginRsp.verify|verify} messages.
+         * @function encodeDelimited
+         * @memberof user.wxLoginRsp
+         * @static
+         * @param {user.IwxLoginRsp} message wxLoginRsp message or plain object to encode
+         * @param {$protobuf.Writer} [writer] Writer to encode to
+         * @returns {$protobuf.Writer} Writer
+         */
+        wxLoginRsp.encodeDelimited = function encodeDelimited(message, writer) {
+            return this.encode(message, writer).ldelim();
+        };
+
+        /**
+         * Decodes a wxLoginRsp message from the specified reader or buffer.
+         * @function decode
+         * @memberof user.wxLoginRsp
+         * @static
+         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+         * @param {number} [length] Message length if known beforehand
+         * @returns {user.wxLoginRsp} wxLoginRsp
+         * @throws {Error} If the payload is not a reader or valid buffer
+         * @throws {$protobuf.util.ProtocolError} If required fields are missing
+         */
+        wxLoginRsp.decode = function decode(reader, length) {
+            if (!(reader instanceof $Reader))
+                reader = $Reader.create(reader);
+            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.user.wxLoginRsp();
+            while (reader.pos < end) {
+                var tag = reader.uint32();
+                switch (tag >>> 3) {
+                case 1:
+                    message.errInfo = $root.common.ErrorInfo.decode(reader, reader.uint32());
+                    break;
+                case 2:
+                    message.token = reader.string();
+                    break;
+                default:
+                    reader.skipType(tag & 7);
+                    break;
+                }
+            }
+            return message;
+        };
+
+        /**
+         * Decodes a wxLoginRsp message from the specified reader or buffer, length delimited.
+         * @function decodeDelimited
+         * @memberof user.wxLoginRsp
+         * @static
+         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+         * @returns {user.wxLoginRsp} wxLoginRsp
+         * @throws {Error} If the payload is not a reader or valid buffer
+         * @throws {$protobuf.util.ProtocolError} If required fields are missing
+         */
+        wxLoginRsp.decodeDelimited = function decodeDelimited(reader) {
+            if (!(reader instanceof $Reader))
+                reader = new $Reader(reader);
+            return this.decode(reader, reader.uint32());
+        };
+
+        /**
+         * Verifies a wxLoginRsp message.
+         * @function verify
+         * @memberof user.wxLoginRsp
+         * @static
+         * @param {Object.<string,*>} message Plain object to verify
+         * @returns {string|null} `null` if valid, otherwise the reason why it is not
+         */
+        wxLoginRsp.verify = function verify(message) {
+            if (typeof message !== "object" || message === null)
+                return "object expected";
+            if (message.errInfo != null && message.hasOwnProperty("errInfo")) {
+                var error = $root.common.ErrorInfo.verify(message.errInfo);
+                if (error)
+                    return "errInfo." + error;
+            }
+            if (message.token != null && message.hasOwnProperty("token"))
+                if (!$util.isString(message.token))
+                    return "token: string expected";
+            return null;
+        };
+
+        /**
+         * Creates a wxLoginRsp message from a plain object. Also converts values to their respective internal types.
+         * @function fromObject
+         * @memberof user.wxLoginRsp
+         * @static
+         * @param {Object.<string,*>} object Plain object
+         * @returns {user.wxLoginRsp} wxLoginRsp
+         */
+        wxLoginRsp.fromObject = function fromObject(object) {
+            if (object instanceof $root.user.wxLoginRsp)
+                return object;
+            var message = new $root.user.wxLoginRsp();
+            if (object.errInfo != null) {
+                if (typeof object.errInfo !== "object")
+                    throw TypeError(".user.wxLoginRsp.errInfo: object expected");
+                message.errInfo = $root.common.ErrorInfo.fromObject(object.errInfo);
+            }
+            if (object.token != null)
+                message.token = String(object.token);
+            return message;
+        };
+
+        /**
+         * Creates a plain object from a wxLoginRsp message. Also converts values to other types if specified.
+         * @function toObject
+         * @memberof user.wxLoginRsp
+         * @static
+         * @param {user.wxLoginRsp} message wxLoginRsp
+         * @param {$protobuf.IConversionOptions} [options] Conversion options
+         * @returns {Object.<string,*>} Plain object
+         */
+        wxLoginRsp.toObject = function toObject(message, options) {
+            if (!options)
+                options = {};
+            var object = {};
+            if (options.defaults) {
+                object.errInfo = null;
+                object.token = "";
+            }
+            if (message.errInfo != null && message.hasOwnProperty("errInfo"))
+                object.errInfo = $root.common.ErrorInfo.toObject(message.errInfo, options);
+            if (message.token != null && message.hasOwnProperty("token"))
+                object.token = message.token;
+            return object;
+        };
+
+        /**
+         * Converts this wxLoginRsp to JSON.
+         * @function toJSON
+         * @memberof user.wxLoginRsp
+         * @instance
+         * @returns {Object.<string,*>} JSON object
+         */
+        wxLoginRsp.prototype.toJSON = function toJSON() {
+            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+        };
+
+        return wxLoginRsp;
+    })();
+
     return user;
 })();
 

+ 3 - 1
uni.scss

@@ -73,4 +73,6 @@ $uni-font-size-title:40rpx;
 $uni-color-subtitle: #555555; // 二级标题颜色
 $uni-font-size-subtitle:36rpx;
 $uni-color-paragraph: #3F536E; // 文章段落颜色
-$uni-font-size-paragraph:30rpx;
+$uni-font-size-paragraph:30rpx;
+
+$fs-middel:30rpx