Commit 9fae74ed by tangjiale

更新代码

parent 01070a2a
...@@ -36,6 +36,14 @@ ...@@ -36,6 +36,14 @@
] ]
}, },
{ {
"root": "subPages/bluetooth",
"name": "bluetooth",
"pages": [
"skip/skip",
"share/share"
]
},
{
"root": "subPages/login", "root": "subPages/login",
"name": "login", "name": "login",
"pages": [ "pages": [
......
@font-face {
font-family: 'Number';
src: url('data:application/octet-stream;base64,T1RUTwANAIAAAwBQQ0ZGIOFqfPYAADtAAAAaYURTSUcAAAABAABXIAAAAAhHREVGAG4AAwAAVygAAAAYR1BPU0lMbYQAAFdAAAAKIkdTVUJEdkx1AABhZAAAACBPUy8yZtaDoAAAAUAAAABgY21hcG7EE+kAADiEAAACnGhlYWQXA7g5AAAA3AAAADZoaGVhBtUDPgAAARQAAAAkaG10eK8bDsQAAFWkAAABem1heHAAX1AAAAABOAAAAAZuYW1lJC67YgAAAaAAADbjcG9zdP+GADIAADsgAAAAIAABAAAAAQAAYB6hg18PPPUACwPoAAAAANYhQmYAAAAA3oQyrv/f/1wDXwLkAAEACAACAAAAAAAAAAEAAAM//1cAVgOI/98AAANfAAEAAAAAAAAAAAAAAAAAAABeAABQAABfAAAAAwHbArwABQAEAooCWAAAAEsCigJYAAABXgAyATgAAAILCAQDAgIDAgQAAAABAAAAAAAAAAAAAAAATU9OTwAgAAAgHQM//1cAVgOGALgAAAABAAAAAAIIArIAAAAgAAIAAAAaAT4AAQAAAAAAAAArAAAAAQAAAAAAAQAFAQwAAQAAAAAAAgAIADEAAQAAAAAAAwAbACsAAQAAAAAABAAOACsAAQAAAAAABQAsAEYAAQAAAAAABgAOAHIAAQAAAAAABwAjAIAAAQAAAAAACAAKANYAAQAAAAAACQALAKMAAQAAAAAACwAUAK4AAQAAAAAADREfAMIAAQAAAAAADgAaAaQAAwABBAkAAABYEeEAAwABBAkAAQAKE/sAAwABBAkAAgAQEkUAAwABBAkAAwA2EjkAAwABBAkABAAcEjkAAwABBAkABQBYEm8AAwABBAkABgAcEscAAwABBAkABwBGEuMAAwABBAkACAAUE48AAwABBAkACQAWEykAAwABBAkACwAoEz8AAwABBAkADSI+E2cAAwABBAkADgA0FStDb3B5cmlnaHQgP0RhdHRvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuRC1ESU4gRElOLUJvbGQ6VmVyc2lvbiAxLjAwVmVyc2lvbiAxLjAwIEFwcmlsIDE5LCAyMDIyLCBpbml0aWFsIHJlbGVhc2VELURJTi1ESU4tQm9sZERhdHRvIGlzIGEgdHJhZGVtYXJrIG9mIERhdHRvLCBJbmMuQ2hhcmxlcyBOaXhodHRwOi8vd3d3LmRhdHRvLmNvbUNvcHlyaWdodCAoYykgMjAxNywgRGF0dG8gSW5jLiAoZm9udHNAZGF0dG8uY29tKSwKd2l0aCBSZXNlcnZlZCBGb250IE5hbWUgRC1ESU4uCgpUaGlzIEZvbnQgU29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIFNJTCBPcGVuIEZvbnQgTGljZW5zZSwgVmVyc2lvbiAxLjEuClRoaXMgbGljZW5zZSBpcyBjb3BpZWQgYmVsb3csIGFuZCBpcyBhbHNvIGF2YWlsYWJsZSB3aXRoIGEgRkFRIGF0OgpodHRwOi8vc2NyaXB0cy5zaWwub3JnL09GTAoKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNJTCBPUEVOIEZPTlQgTElDRU5TRSBWZXJzaW9uIDEuMSAtIDI2IEZlYnJ1YXJ5IDIwMDcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClBSRUFNQkxFClRoZSBnb2FscyBvZiB0aGUgT3BlbiBGb250IExpY2Vuc2UgKE9GTCkgYXJlIHRvIHN0aW11bGF0ZSB3b3JsZHdpZGUKZGV2ZWxvcG1lbnQgb2YgY29sbGFib3JhdGl2ZSBmb250IHByb2plY3RzLCB0byBzdXBwb3J0IHRoZSBmb250IGNyZWF0aW9uCmVmZm9ydHMgb2YgYWNhZGVtaWMgYW5kIGxpbmd1aXN0aWMgY29tbXVuaXRpZXMsIGFuZCB0byBwcm92aWRlIGEgZnJlZSBhbmQKb3BlbiBmcmFtZXdvcmsgaW4gd2hpY2ggZm9udHMgbWF5IGJlIHNoYXJlZCBhbmQgaW1wcm92ZWQgaW4gcGFydG5lcnNoaXAKd2l0aCBvdGhlcnMuCgpUaGUgT0ZMIGFsbG93cyB0aGUgbGljZW5zZWQgZm9udHMgdG8gYmUgdXNlZCwgc3R1ZGllZCwgbW9kaWZpZWQgYW5kCnJlZGlzdHJpYnV0ZWQgZnJlZWx5IGFzIGxvbmcgYXMgdGhleSBhcmUgbm90IHNvbGQgYnkgdGhlbXNlbHZlcy4gVGhlCmZvbnRzLCBpbmNsdWRpbmcgYW55IGRlcml2YXRpdmUgd29ya3MsIGNhbiBiZSBidW5kbGVkLCBlbWJlZGRlZCwgCnJlZGlzdHJpYnV0ZWQgYW5kL29yIHNvbGQgd2l0aCBhbnkgc29mdHdhcmUgcHJvdmlkZWQgdGhhdCBhbnkgcmVzZXJ2ZWQKbmFtZXMgYXJlIG5vdCB1c2VkIGJ5IGRlcml2YXRpdmUgd29ya3MuIFRoZSBmb250cyBhbmQgZGVyaXZhdGl2ZXMsCmhvd2V2ZXIsIGNhbm5vdCBiZSByZWxlYXNlZCB1bmRlciBhbnkgb3RoZXIgdHlwZSBvZiBsaWNlbnNlLiBUaGUKcmVxdWlyZW1lbnQgZm9yIGZvbnRzIHRvIHJlbWFpbiB1bmRlciB0aGlzIGxpY2Vuc2UgZG9lcyBub3QgYXBwbHkKdG8gYW55IGRvY3VtZW50IGNyZWF0ZWQgdXNpbmcgdGhlIGZvbnRzIG9yIHRoZWlyIGRlcml2YXRpdmVzLgoKREVGSU5JVElPTlMKIkZvbnQgU29mdHdhcmUiIHJlZmVycyB0byB0aGUgc2V0IG9mIGZpbGVzIHJlbGVhc2VkIGJ5IHRoZSBDb3B5cmlnaHQKSG9sZGVyKHMpIHVuZGVyIHRoaXMgbGljZW5zZSBhbmQgY2xlYXJseSBtYXJrZWQgYXMgc3VjaC4gVGhpcyBtYXkKaW5jbHVkZSBzb3VyY2UgZmlsZXMsIGJ1aWxkIHNjcmlwdHMgYW5kIGRvY3VtZW50YXRpb24uCgoiUmVzZXJ2ZWQgRm9udCBOYW1lIiByZWZlcnMgdG8gYW55IG5hbWVzIHNwZWNpZmllZCBhcyBzdWNoIGFmdGVyIHRoZQpjb3B5cmlnaHQgc3RhdGVtZW50KHMpLgoKIk9yaWdpbmFsIFZlcnNpb24iIHJlZmVycyB0byB0aGUgY29sbGVjdGlvbiBvZiBGb250IFNvZnR3YXJlIGNvbXBvbmVudHMgYXMKZGlzdHJpYnV0ZWQgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIocykuCgoiTW9kaWZpZWQgVmVyc2lvbiIgcmVmZXJzIHRvIGFueSBkZXJpdmF0aXZlIG1hZGUgYnkgYWRkaW5nIHRvLCBkZWxldGluZywKb3Igc3Vic3RpdHV0aW5nIC0tIGluIHBhcnQgb3IgaW4gd2hvbGUgLS0gYW55IG9mIHRoZSBjb21wb25lbnRzIG9mIHRoZQpPcmlnaW5hbCBWZXJzaW9uLCBieSBjaGFuZ2luZyBmb3JtYXRzIG9yIGJ5IHBvcnRpbmcgdGhlIEZvbnQgU29mdHdhcmUgdG8gYQpuZXcgZW52aXJvbm1lbnQuCgoiQXV0aG9yIiByZWZlcnMgdG8gYW55IGRlc2lnbmVyLCBlbmdpbmVlciwgcHJvZ3JhbW1lciwgdGVjaG5pY2FsCndyaXRlciBvciBvdGhlciBwZXJzb24gd2hvIGNvbnRyaWJ1dGVkIHRvIHRoZSBGb250IFNvZnR3YXJlLgoKUEVSTUlTU0lPTiAmIENPTkRJVElPTlMKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGUgRm9udCBTb2Z0d2FyZSwgdG8gdXNlLCBzdHVkeSwgY29weSwgbWVyZ2UsIGVtYmVkLCBtb2RpZnksCnJlZGlzdHJpYnV0ZSwgYW5kIHNlbGwgbW9kaWZpZWQgYW5kIHVubW9kaWZpZWQgY29waWVzIG9mIHRoZSBGb250ClNvZnR3YXJlLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCjEpIE5laXRoZXIgdGhlIEZvbnQgU29mdHdhcmUgbm9yIGFueSBvZiBpdHMgaW5kaXZpZHVhbCBjb21wb25lbnRzLAppbiBPcmlnaW5hbCBvciBNb2RpZmllZCBWZXJzaW9ucywgbWF5IGJlIHNvbGQgYnkgaXRzZWxmLgoKMikgT3JpZ2luYWwgb3IgTW9kaWZpZWQgVmVyc2lvbnMgb2YgdGhlIEZvbnQgU29mdHdhcmUgbWF5IGJlIGJ1bmRsZWQsCnJlZGlzdHJpYnV0ZWQgYW5kL29yIHNvbGQgd2l0aCBhbnkgc29mdHdhcmUsIHByb3ZpZGVkIHRoYXQgZWFjaCBjb3B5CmNvbnRhaW5zIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIGxpY2Vuc2UuIFRoZXNlIGNhbiBiZQppbmNsdWRlZCBlaXRoZXIgYXMgc3RhbmQtYWxvbmUgdGV4dCBmaWxlcywgaHVtYW4tcmVhZGFibGUgaGVhZGVycyBvcgppbiB0aGUgYXBwcm9wcmlhdGUgbWFjaGluZS1yZWFkYWJsZSBtZXRhZGF0YSBmaWVsZHMgd2l0aGluIHRleHQgb3IKYmluYXJ5IGZpbGVzIGFzIGxvbmcgYXMgdGhvc2UgZmllbGRzIGNhbiBiZSBlYXNpbHkgdmlld2VkIGJ5IHRoZSB1c2VyLgoKMykgTm8gTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRm9udCBTb2Z0d2FyZSBtYXkgdXNlIHRoZSBSZXNlcnZlZCBGb250Ck5hbWUocykgdW5sZXNzIGV4cGxpY2l0IHdyaXR0ZW4gcGVybWlzc2lvbiBpcyBncmFudGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nCkNvcHlyaWdodCBIb2xkZXIuIFRoaXMgcmVzdHJpY3Rpb24gb25seSBhcHBsaWVzIHRvIHRoZSBwcmltYXJ5IGZvbnQgbmFtZSBhcwpwcmVzZW50ZWQgdG8gdGhlIHVzZXJzLgoKNCkgVGhlIG5hbWUocykgb2YgdGhlIENvcHlyaWdodCBIb2xkZXIocykgb3IgdGhlIEF1dGhvcihzKSBvZiB0aGUgRm9udApTb2Z0d2FyZSBzaGFsbCBub3QgYmUgdXNlZCB0byBwcm9tb3RlLCBlbmRvcnNlIG9yIGFkdmVydGlzZSBhbnkKTW9kaWZpZWQgVmVyc2lvbiwgZXhjZXB0IHRvIGFja25vd2xlZGdlIHRoZSBjb250cmlidXRpb24ocykgb2YgdGhlCkNvcHlyaWdodCBIb2xkZXIocykgYW5kIHRoZSBBdXRob3Iocykgb3Igd2l0aCB0aGVpciBleHBsaWNpdCB3cml0dGVuCnBlcm1pc3Npb24uCgo1KSBUaGUgRm9udCBTb2Z0d2FyZSwgbW9kaWZpZWQgb3IgdW5tb2RpZmllZCwgaW4gcGFydCBvciBpbiB3aG9sZSwKbXVzdCBiZSBkaXN0cmlidXRlZCBlbnRpcmVseSB1bmRlciB0aGlzIGxpY2Vuc2UsIGFuZCBtdXN0IG5vdCBiZQpkaXN0cmlidXRlZCB1bmRlciBhbnkgb3RoZXIgbGljZW5zZS4gVGhlIHJlcXVpcmVtZW50IGZvciBmb250cyB0bwpyZW1haW4gdW5kZXIgdGhpcyBsaWNlbnNlIGRvZXMgbm90IGFwcGx5IHRvIGFueSBkb2N1bWVudCBjcmVhdGVkCnVzaW5nIHRoZSBGb250IFNvZnR3YXJlLgoKVEVSTUlOQVRJT04KVGhpcyBsaWNlbnNlIGJlY29tZXMgbnVsbCBhbmQgdm9pZCBpZiBhbnkgb2YgdGhlIGFib3ZlIGNvbmRpdGlvbnMgYXJlCm5vdCBtZXQuCgpESVNDTEFJTUVSClRIRSBGT05UIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBBTlkgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQKT0YgQ09QWVJJR0hULCBQQVRFTlQsIFRSQURFTUFSSywgT1IgT1RIRVIgUklHSFQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpDT1BZUklHSFQgSE9MREVSIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTApEQU1BR0VTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKRlJPTSwgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgRk9OVCBTT0ZUV0FSRSBPUiBGUk9NCk9USEVSIERFQUxJTkdTIElOIFRIRSBGT05UIFNPRlRXQVJFLgBDAG8AcAB5AHIAaQBnAGgAdAAgAKkAIABEAGEAdAB0AG8ALAAgAEkAbgBjAC4AIABBAGwAbAAgAHIAaQBnAGgAdABzACAAcgBlAHMAZQByAHYAZQBkAC4ARAAtAEQASQBOACAARABJAE4ALQBCAG8AbABkADoAVgBlAHIAcwBpAG8AbgAgADEALgAwADAAVgBlAHIAcwBpAG8AbgAgADEALgAwADAAIABBAHAAcgBpAGwAIAAxADkALAAgADIAMAAyADIALAAgAGkAbgBpAHQAaQBhAGwAIAByAGUAbABlAGEAcwBlAEQALQBEAEkATgAtAEQASQBOAC0AQgBvAGwAZABEAGEAdAB0AG8AIABpAHMAIABhACAAdAByAGEAZABlAG0AYQByAGsAIABvAGYAIABEAGEAdAB0AG8ALAAgAEkAbgBjAC4AQwBoAGEAcgBsAGUAcwAgAE4AaQB4AGgAdAB0AHAAOgAvAC8AdwB3AHcALgBkAGEAdAB0AG8ALgBjAG8AbQBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADEANwAsACAARABhAHQAdABvACAASQBuAGMALgAgACgAZgBvAG4AdABzAEAAZABhAHQAdABvAC4AYwBvAG0AKQAsAAoAdwBpAHQAaAAgAFIAZQBzAGUAcgB2AGUAZAAgAEYAbwBuAHQAIABOAGEAbQBlACAARAAtAEQASQBOAC4ACgAKAFQAaABpAHMAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACAAaQBzACAAbABpAGMAZQBuAHMAZQBkACAAdQBuAGQAZQByACAAdABoAGUAIABTAEkATAAgAE8AcABlAG4AIABGAG8AbgB0ACAATABpAGMAZQBuAHMAZQAsACAAVgBlAHIAcwBpAG8AbgAgADEALgAxAC4ACgBUAGgAaQBzACAAbABpAGMAZQBuAHMAZQAgAGkAcwAgAGMAbwBwAGkAZQBkACAAYgBlAGwAbwB3ACwAIABhAG4AZAAgAGkAcwAgAGEAbABzAG8AIABhAHYAYQBpAGwAYQBiAGwAZQAgAHcAaQB0AGgAIABhACAARgBBAFEAIABhAHQAOgAKAGgAdAB0AHAAOgAvAC8AcwBjAHIAaQBwAHQAcwAuAHMAaQBsAC4AbwByAGcALwBPAEYATAAKAAoACgAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ACgBTAEkATAAgAE8AUABFAE4AIABGAE8ATgBUACAATABJAEMARQBOAFMARQAgAFYAZQByAHMAaQBvAG4AIAAxAC4AMQAgAC0AIAAyADYAIABGAGUAYgByAHUAYQByAHkAIAAyADAAMAA3AAoALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAAoACgBQAFIARQBBAE0AQgBMAEUACgBUAGgAZQAgAGcAbwBhAGwAcwAgAG8AZgAgAHQAaABlACAATwBwAGUAbgAgAEYAbwBuAHQAIABMAGkAYwBlAG4AcwBlACAAKABPAEYATAApACAAYQByAGUAIAB0AG8AIABzAHQAaQBtAHUAbABhAHQAZQAgAHcAbwByAGwAZAB3AGkAZABlAAoAZABlAHYAZQBsAG8AcABtAGUAbgB0ACAAbwBmACAAYwBvAGwAbABhAGIAbwByAGEAdABpAHYAZQAgAGYAbwBuAHQAIABwAHIAbwBqAGUAYwB0AHMALAAgAHQAbwAgAHMAdQBwAHAAbwByAHQAIAB0AGgAZQAgAGYAbwBuAHQAIABjAHIAZQBhAHQAaQBvAG4ACgBlAGYAZgBvAHIAdABzACAAbwBmACAAYQBjAGEAZABlAG0AaQBjACAAYQBuAGQAIABsAGkAbgBnAHUAaQBzAHQAaQBjACAAYwBvAG0AbQB1AG4AaQB0AGkAZQBzACwAIABhAG4AZAAgAHQAbwAgAHAAcgBvAHYAaQBkAGUAIABhACAAZgByAGUAZQAgAGEAbgBkAAoAbwBwAGUAbgAgAGYAcgBhAG0AZQB3AG8AcgBrACAAaQBuACAAdwBoAGkAYwBoACAAZgBvAG4AdABzACAAbQBhAHkAIABiAGUAIABzAGgAYQByAGUAZAAgAGEAbgBkACAAaQBtAHAAcgBvAHYAZQBkACAAaQBuACAAcABhAHIAdABuAGUAcgBzAGgAaQBwAAoAdwBpAHQAaAAgAG8AdABoAGUAcgBzAC4ACgAKAFQAaABlACAATwBGAEwAIABhAGwAbABvAHcAcwAgAHQAaABlACAAbABpAGMAZQBuAHMAZQBkACAAZgBvAG4AdABzACAAdABvACAAYgBlACAAdQBzAGUAZAAsACAAcwB0AHUAZABpAGUAZAAsACAAbQBvAGQAaQBmAGkAZQBkACAAYQBuAGQACgByAGUAZABpAHMAdAByAGkAYgB1AHQAZQBkACAAZgByAGUAZQBsAHkAIABhAHMAIABsAG8AbgBnACAAYQBzACAAdABoAGUAeQAgAGEAcgBlACAAbgBvAHQAIABzAG8AbABkACAAYgB5ACAAdABoAGUAbQBzAGUAbAB2AGUAcwAuACAAVABoAGUACgBmAG8AbgB0AHMALAAgAGkAbgBjAGwAdQBkAGkAbgBnACAAYQBuAHkAIABkAGUAcgBpAHYAYQB0AGkAdgBlACAAdwBvAHIAawBzACwAIABjAGEAbgAgAGIAZQAgAGIAdQBuAGQAbABlAGQALAAgAGUAbQBiAGUAZABkAGUAZAAsACAACgByAGUAZABpAHMAdAByAGkAYgB1AHQAZQBkACAAYQBuAGQALwBvAHIAIABzAG8AbABkACAAdwBpAHQAaAAgAGEAbgB5ACAAcwBvAGYAdAB3AGEAcgBlACAAcAByAG8AdgBpAGQAZQBkACAAdABoAGEAdAAgAGEAbgB5ACAAcgBlAHMAZQByAHYAZQBkAAoAbgBhAG0AZQBzACAAYQByAGUAIABuAG8AdAAgAHUAcwBlAGQAIABiAHkAIABkAGUAcgBpAHYAYQB0AGkAdgBlACAAdwBvAHIAawBzAC4AIABUAGgAZQAgAGYAbwBuAHQAcwAgAGEAbgBkACAAZABlAHIAaQB2AGEAdABpAHYAZQBzACwACgBoAG8AdwBlAHYAZQByACwAIABjAGEAbgBuAG8AdAAgAGIAZQAgAHIAZQBsAGUAYQBzAGUAZAAgAHUAbgBkAGUAcgAgAGEAbgB5ACAAbwB0AGgAZQByACAAdAB5AHAAZQAgAG8AZgAgAGwAaQBjAGUAbgBzAGUALgAgAFQAaABlAAoAcgBlAHEAdQBpAHIAZQBtAGUAbgB0ACAAZgBvAHIAIABmAG8AbgB0AHMAIAB0AG8AIAByAGUAbQBhAGkAbgAgAHUAbgBkAGUAcgAgAHQAaABpAHMAIABsAGkAYwBlAG4AcwBlACAAZABvAGUAcwAgAG4AbwB0ACAAYQBwAHAAbAB5AAoAdABvACAAYQBuAHkAIABkAG8AYwB1AG0AZQBuAHQAIABjAHIAZQBhAHQAZQBkACAAdQBzAGkAbgBnACAAdABoAGUAIABmAG8AbgB0AHMAIABvAHIAIAB0AGgAZQBpAHIAIABkAGUAcgBpAHYAYQB0AGkAdgBlAHMALgAKAAoARABFAEYASQBOAEkAVABJAE8ATgBTAAoAIgBGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACIAIAByAGUAZgBlAHIAcwAgAHQAbwAgAHQAaABlACAAcwBlAHQAIABvAGYAIABmAGkAbABlAHMAIAByAGUAbABlAGEAcwBlAGQAIABiAHkAIAB0AGgAZQAgAEMAbwBwAHkAcgBpAGcAaAB0AAoASABvAGwAZABlAHIAKABzACkAIAB1AG4AZABlAHIAIAB0AGgAaQBzACAAbABpAGMAZQBuAHMAZQAgAGEAbgBkACAAYwBsAGUAYQByAGwAeQAgAG0AYQByAGsAZQBkACAAYQBzACAAcwB1AGMAaAAuACAAVABoAGkAcwAgAG0AYQB5AAoAaQBuAGMAbAB1AGQAZQAgAHMAbwB1AHIAYwBlACAAZgBpAGwAZQBzACwAIABiAHUAaQBsAGQAIABzAGMAcgBpAHAAdABzACAAYQBuAGQAIABkAG8AYwB1AG0AZQBuAHQAYQB0AGkAbwBuAC4ACgAKACIAUgBlAHMAZQByAHYAZQBkACAARgBvAG4AdAAgAE4AYQBtAGUAIgAgAHIAZQBmAGUAcgBzACAAdABvACAAYQBuAHkAIABuAGEAbQBlAHMAIABzAHAAZQBjAGkAZgBpAGUAZAAgAGEAcwAgAHMAdQBjAGgAIABhAGYAdABlAHIAIAB0AGgAZQAKAGMAbwBwAHkAcgBpAGcAaAB0ACAAcwB0AGEAdABlAG0AZQBuAHQAKABzACkALgAKAAoAIgBPAHIAaQBnAGkAbgBhAGwAIABWAGUAcgBzAGkAbwBuACIAIAByAGUAZgBlAHIAcwAgAHQAbwAgAHQAaABlACAAYwBvAGwAbABlAGMAdABpAG8AbgAgAG8AZgAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUAIABjAG8AbQBwAG8AbgBlAG4AdABzACAAYQBzAAoAZABpAHMAdAByAGkAYgB1AHQAZQBkACAAYgB5ACAAdABoAGUAIABDAG8AcAB5AHIAaQBnAGgAdAAgAEgAbwBsAGQAZQByACgAcwApAC4ACgAKACIATQBvAGQAaQBmAGkAZQBkACAAVgBlAHIAcwBpAG8AbgAiACAAcgBlAGYAZQByAHMAIAB0AG8AIABhAG4AeQAgAGQAZQByAGkAdgBhAHQAaQB2AGUAIABtAGEAZABlACAAYgB5ACAAYQBkAGQAaQBuAGcAIAB0AG8ALAAgAGQAZQBsAGUAdABpAG4AZwAsAAoAbwByACAAcwB1AGIAcwB0AGkAdAB1AHQAaQBuAGcAIAAtAC0AIABpAG4AIABwAGEAcgB0ACAAbwByACAAaQBuACAAdwBoAG8AbABlACAALQAtACAAYQBuAHkAIABvAGYAIAB0AGgAZQAgAGMAbwBtAHAAbwBuAGUAbgB0AHMAIABvAGYAIAB0AGgAZQAKAE8AcgBpAGcAaQBuAGEAbAAgAFYAZQByAHMAaQBvAG4ALAAgAGIAeQAgAGMAaABhAG4AZwBpAG4AZwAgAGYAbwByAG0AYQB0AHMAIABvAHIAIABiAHkAIABwAG8AcgB0AGkAbgBnACAAdABoAGUAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACAAdABvACAAYQAKAG4AZQB3ACAAZQBuAHYAaQByAG8AbgBtAGUAbgB0AC4ACgAKACIAQQB1AHQAaABvAHIAIgAgAHIAZQBmAGUAcgBzACAAdABvACAAYQBuAHkAIABkAGUAcwBpAGcAbgBlAHIALAAgAGUAbgBnAGkAbgBlAGUAcgAsACAAcAByAG8AZwByAGEAbQBtAGUAcgAsACAAdABlAGMAaABuAGkAYwBhAGwACgB3AHIAaQB0AGUAcgAgAG8AcgAgAG8AdABoAGUAcgAgAHAAZQByAHMAbwBuACAAdwBoAG8AIABjAG8AbgB0AHIAaQBiAHUAdABlAGQAIAB0AG8AIAB0AGgAZQAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUALgAKAAoAUABFAFIATQBJAFMAUwBJAE8ATgAgACYAIABDAE8ATgBEAEkAVABJAE8ATgBTAAoAUABlAHIAbQBpAHMAcwBpAG8AbgAgAGkAcwAgAGgAZQByAGUAYgB5ACAAZwByAGEAbgB0AGUAZAAsACAAZgByAGUAZQAgAG8AZgAgAGMAaABhAHIAZwBlACwAIAB0AG8AIABhAG4AeQAgAHAAZQByAHMAbwBuACAAbwBiAHQAYQBpAG4AaQBuAGcACgBhACAAYwBvAHAAeQAgAG8AZgAgAHQAaABlACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAsACAAdABvACAAdQBzAGUALAAgAHMAdAB1AGQAeQAsACAAYwBvAHAAeQAsACAAbQBlAHIAZwBlACwAIABlAG0AYgBlAGQALAAgAG0AbwBkAGkAZgB5ACwACgByAGUAZABpAHMAdAByAGkAYgB1AHQAZQAsACAAYQBuAGQAIABzAGUAbABsACAAbQBvAGQAaQBmAGkAZQBkACAAYQBuAGQAIAB1AG4AbQBvAGQAaQBmAGkAZQBkACAAYwBvAHAAaQBlAHMAIABvAGYAIAB0AGgAZQAgAEYAbwBuAHQACgBTAG8AZgB0AHcAYQByAGUALAAgAHMAdQBiAGoAZQBjAHQAIAB0AG8AIAB0AGgAZQAgAGYAbwBsAGwAbwB3AGkAbgBnACAAYwBvAG4AZABpAHQAaQBvAG4AcwA6AAoACgAxACkAIABOAGUAaQB0AGgAZQByACAAdABoAGUAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACAAbgBvAHIAIABhAG4AeQAgAG8AZgAgAGkAdABzACAAaQBuAGQAaQB2AGkAZAB1AGEAbAAgAGMAbwBtAHAAbwBuAGUAbgB0AHMALAAKAGkAbgAgAE8AcgBpAGcAaQBuAGEAbAAgAG8AcgAgAE0AbwBkAGkAZgBpAGUAZAAgAFYAZQByAHMAaQBvAG4AcwAsACAAbQBhAHkAIABiAGUAIABzAG8AbABkACAAYgB5ACAAaQB0AHMAZQBsAGYALgAKAAoAMgApACAATwByAGkAZwBpAG4AYQBsACAAbwByACAATQBvAGQAaQBmAGkAZQBkACAAVgBlAHIAcwBpAG8AbgBzACAAbwBmACAAdABoAGUAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACAAbQBhAHkAIABiAGUAIABiAHUAbgBkAGwAZQBkACwACgByAGUAZABpAHMAdAByAGkAYgB1AHQAZQBkACAAYQBuAGQALwBvAHIAIABzAG8AbABkACAAdwBpAHQAaAAgAGEAbgB5ACAAcwBvAGYAdAB3AGEAcgBlACwAIABwAHIAbwB2AGkAZABlAGQAIAB0AGgAYQB0ACAAZQBhAGMAaAAgAGMAbwBwAHkACgBjAG8AbgB0AGEAaQBuAHMAIAB0AGgAZQAgAGEAYgBvAHYAZQAgAGMAbwBwAHkAcgBpAGcAaAB0ACAAbgBvAHQAaQBjAGUAIABhAG4AZAAgAHQAaABpAHMAIABsAGkAYwBlAG4AcwBlAC4AIABUAGgAZQBzAGUAIABjAGEAbgAgAGIAZQAKAGkAbgBjAGwAdQBkAGUAZAAgAGUAaQB0AGgAZQByACAAYQBzACAAcwB0AGEAbgBkAC0AYQBsAG8AbgBlACAAdABlAHgAdAAgAGYAaQBsAGUAcwAsACAAaAB1AG0AYQBuAC0AcgBlAGEAZABhAGIAbABlACAAaABlAGEAZABlAHIAcwAgAG8AcgAKAGkAbgAgAHQAaABlACAAYQBwAHAAcgBvAHAAcgBpAGEAdABlACAAbQBhAGMAaABpAG4AZQAtAHIAZQBhAGQAYQBiAGwAZQAgAG0AZQB0AGEAZABhAHQAYQAgAGYAaQBlAGwAZABzACAAdwBpAHQAaABpAG4AIAB0AGUAeAB0ACAAbwByAAoAYgBpAG4AYQByAHkAIABmAGkAbABlAHMAIABhAHMAIABsAG8AbgBnACAAYQBzACAAdABoAG8AcwBlACAAZgBpAGUAbABkAHMAIABjAGEAbgAgAGIAZQAgAGUAYQBzAGkAbAB5ACAAdgBpAGUAdwBlAGQAIABiAHkAIAB0AGgAZQAgAHUAcwBlAHIALgAKAAoAMwApACAATgBvACAATQBvAGQAaQBmAGkAZQBkACAAVgBlAHIAcwBpAG8AbgAgAG8AZgAgAHQAaABlACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAgAG0AYQB5ACAAdQBzAGUAIAB0AGgAZQAgAFIAZQBzAGUAcgB2AGUAZAAgAEYAbwBuAHQACgBOAGEAbQBlACgAcwApACAAdQBuAGwAZQBzAHMAIABlAHgAcABsAGkAYwBpAHQAIAB3AHIAaQB0AHQAZQBuACAAcABlAHIAbQBpAHMAcwBpAG8AbgAgAGkAcwAgAGcAcgBhAG4AdABlAGQAIABiAHkAIAB0AGgAZQAgAGMAbwByAHIAZQBzAHAAbwBuAGQAaQBuAGcACgBDAG8AcAB5AHIAaQBnAGgAdAAgAEgAbwBsAGQAZQByAC4AIABUAGgAaQBzACAAcgBlAHMAdAByAGkAYwB0AGkAbwBuACAAbwBuAGwAeQAgAGEAcABwAGwAaQBlAHMAIAB0AG8AIAB0AGgAZQAgAHAAcgBpAG0AYQByAHkAIABmAG8AbgB0ACAAbgBhAG0AZQAgAGEAcwAKAHAAcgBlAHMAZQBuAHQAZQBkACAAdABvACAAdABoAGUAIAB1AHMAZQByAHMALgAKAAoANAApACAAVABoAGUAIABuAGEAbQBlACgAcwApACAAbwBmACAAdABoAGUAIABDAG8AcAB5AHIAaQBnAGgAdAAgAEgAbwBsAGQAZQByACgAcwApACAAbwByACAAdABoAGUAIABBAHUAdABoAG8AcgAoAHMAKQAgAG8AZgAgAHQAaABlACAARgBvAG4AdAAKAFMAbwBmAHQAdwBhAHIAZQAgAHMAaABhAGwAbAAgAG4AbwB0ACAAYgBlACAAdQBzAGUAZAAgAHQAbwAgAHAAcgBvAG0AbwB0AGUALAAgAGUAbgBkAG8AcgBzAGUAIABvAHIAIABhAGQAdgBlAHIAdABpAHMAZQAgAGEAbgB5AAoATQBvAGQAaQBmAGkAZQBkACAAVgBlAHIAcwBpAG8AbgAsACAAZQB4AGMAZQBwAHQAIAB0AG8AIABhAGMAawBuAG8AdwBsAGUAZABnAGUAIAB0AGgAZQAgAGMAbwBuAHQAcgBpAGIAdQB0AGkAbwBuACgAcwApACAAbwBmACAAdABoAGUACgBDAG8AcAB5AHIAaQBnAGgAdAAgAEgAbwBsAGQAZQByACgAcwApACAAYQBuAGQAIAB0AGgAZQAgAEEAdQB0AGgAbwByACgAcwApACAAbwByACAAdwBpAHQAaAAgAHQAaABlAGkAcgAgAGUAeABwAGwAaQBjAGkAdAAgAHcAcgBpAHQAdABlAG4ACgBwAGUAcgBtAGkAcwBzAGkAbwBuAC4ACgAKADUAKQAgAFQAaABlACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAsACAAbQBvAGQAaQBmAGkAZQBkACAAbwByACAAdQBuAG0AbwBkAGkAZgBpAGUAZAAsACAAaQBuACAAcABhAHIAdAAgAG8AcgAgAGkAbgAgAHcAaABvAGwAZQAsAAoAbQB1AHMAdAAgAGIAZQAgAGQAaQBzAHQAcgBpAGIAdQB0AGUAZAAgAGUAbgB0AGkAcgBlAGwAeQAgAHUAbgBkAGUAcgAgAHQAaABpAHMAIABsAGkAYwBlAG4AcwBlACwAIABhAG4AZAAgAG0AdQBzAHQAIABuAG8AdAAgAGIAZQAKAGQAaQBzAHQAcgBpAGIAdQB0AGUAZAAgAHUAbgBkAGUAcgAgAGEAbgB5ACAAbwB0AGgAZQByACAAbABpAGMAZQBuAHMAZQAuACAAVABoAGUAIAByAGUAcQB1AGkAcgBlAG0AZQBuAHQAIABmAG8AcgAgAGYAbwBuAHQAcwAgAHQAbwAKAHIAZQBtAGEAaQBuACAAdQBuAGQAZQByACAAdABoAGkAcwAgAGwAaQBjAGUAbgBzAGUAIABkAG8AZQBzACAAbgBvAHQAIABhAHAAcABsAHkAIAB0AG8AIABhAG4AeQAgAGQAbwBjAHUAbQBlAG4AdAAgAGMAcgBlAGEAdABlAGQACgB1AHMAaQBuAGcAIAB0AGgAZQAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUALgAKAAoAVABFAFIATQBJAE4AQQBUAEkATwBOAAoAVABoAGkAcwAgAGwAaQBjAGUAbgBzAGUAIABiAGUAYwBvAG0AZQBzACAAbgB1AGwAbAAgAGEAbgBkACAAdgBvAGkAZAAgAGkAZgAgAGEAbgB5ACAAbwBmACAAdABoAGUAIABhAGIAbwB2AGUAIABjAG8AbgBkAGkAdABpAG8AbgBzACAAYQByAGUACgBuAG8AdAAgAG0AZQB0AC4ACgAKAEQASQBTAEMATABBAEkATQBFAFIACgBUAEgARQAgAEYATwBOAFQAIABTAE8ARgBUAFcAQQBSAEUAIABJAFMAIABQAFIATwBWAEkARABFAEQAIAAiAEEAUwAgAEkAUwAiACwAIABXAEkAVABIAE8AVQBUACAAVwBBAFIAUgBBAE4AVABZACAATwBGACAAQQBOAFkAIABLAEkATgBEACwACgBFAFgAUABSAEUAUwBTACAATwBSACAASQBNAFAATABJAEUARAAsACAASQBOAEMATABVAEQASQBOAEcAIABCAFUAVAAgAE4ATwBUACAATABJAE0ASQBUAEUARAAgAFQATwAgAEEATgBZACAAVwBBAFIAUgBBAE4AVABJAEUAUwAgAE8ARgAKAE0ARQBSAEMASABBAE4AVABBAEIASQBMAEkAVABZACwAIABGAEkAVABOAEUAUwBTACAARgBPAFIAIABBACAAUABBAFIAVABJAEMAVQBMAEEAUgAgAFAAVQBSAFAATwBTAEUAIABBAE4ARAAgAE4ATwBOAEkATgBGAFIASQBOAEcARQBNAEUATgBUAAoATwBGACAAQwBPAFAAWQBSAEkARwBIAFQALAAgAFAAQQBUAEUATgBUACwAIABUAFIAQQBEAEUATQBBAFIASwAsACAATwBSACAATwBUAEgARQBSACAAUgBJAEcASABUAC4AIABJAE4AIABOAE8AIABFAFYARQBOAFQAIABTAEgAQQBMAEwAIABUAEgARQAKAEMATwBQAFkAUgBJAEcASABUACAASABPAEwARABFAFIAIABCAEUAIABMAEkAQQBCAEwARQAgAEYATwBSACAAQQBOAFkAIABDAEwAQQBJAE0ALAAgAEQAQQBNAEEARwBFAFMAIABPAFIAIABPAFQASABFAFIAIABMAEkAQQBCAEkATABJAFQAWQAsAAoASQBOAEMATABVAEQASQBOAEcAIABBAE4AWQAgAEcARQBOAEUAUgBBAEwALAAgAFMAUABFAEMASQBBAEwALAAgAEkATgBEAEkAUgBFAEMAVAAsACAASQBOAEMASQBEAEUATgBUAEEATAAsACAATwBSACAAQwBPAE4AUwBFAFEAVQBFAE4AVABJAEEATAAKAEQAQQBNAEEARwBFAFMALAAgAFcASABFAFQASABFAFIAIABJAE4AIABBAE4AIABBAEMAVABJAE8ATgAgAE8ARgAgAEMATwBOAFQAUgBBAEMAVAAsACAAVABPAFIAVAAgAE8AUgAgAE8AVABIAEUAUgBXAEkAUwBFACwAIABBAFIASQBTAEkATgBHAAoARgBSAE8ATQAsACAATwBVAFQAIABPAEYAIABUAEgARQAgAFUAUwBFACAATwBSACAASQBOAEEAQgBJAEwASQBUAFkAIABUAE8AIABVAFMARQAgAFQASABFACAARgBPAE4AVAAgAFMATwBGAFQAVwBBAFIARQAgAE8AUgAgAEYAUgBPAE0ACgBPAFQA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AAoAPQA+AAsAQABDAAsARABEAAoARQBFAAsARgBGAAoARwBHAAsASABIAAIASQBJAAMASgBKAAsASwBMAAQATQBNAAYATgBOAAQATwBPAAcAXABcAAUAXgBeAAUAAgBoAAQAAAB2AJgABAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/7v/2f/i/7oAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/87/tQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/M/+AADgABAAUACABbAFwAXQBeAAIABQAIAAgAAQBbAFsAAgBcAFwAAwBdAF0AAgBeAF4AAwABABoANQAFAAcAAAAHAAcABwAAAAcABwAGAAcABwAHAAcAAAAHAAAABwAAAAEAAAACAAMAAAAEAAAAAAAAAAAAAAAIAAgACAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAkAAAAAAAoACgAAAAoAAQA8AAQAAAAHABgAGAAYAB4AJAAYADYAAQAS//YAAQAS/9YABAAO//YAD//sABH/2AAT//YAAQAS/+IAAQAHAAsADgAPABEAEgATABQAAgAgAAQAAAAoADQAAgAEAAAAAAAAAAAAAP/i/+//5AABAAIABwAJAAEABwADAAEAAAABAAIAAwAMAAwAAQASABIAAgAUABQAAwACABwABAAAACQAMAADAAIAAAAAAAD/3wAA/94AAQACABIAFAABABIAAwABAAAAAgABAAcAAwABAAAAAQABAAwAEAAAADoAPAACAAAAAQATABoAHgAiACcAKAAqACwALgAyADMANgA6AD4AQwBEAEgASgBOAE8AAAATAAAAAQAAAAoAHAAeAAFERkxUAAgABAAAAAD//wAAAAAAAA==') format('woff2');
}
.mr-70{margin-right: 70rpx;} .block {
.mt-20{margin-top: 20rpx;} display: block
.c-0{color: #333333 !important;} }
.border-none{border:none !important}
/* 圈子列表 */ .ml-10 {
.circle-list-item {padding: 30rpx 30rpx;box-sizing: border-box;background: #ffffff;border-top: 1rpx solid #e0e0e0;position: relative} margin-left: 10rpx;
.circle-list-item .left{display: inline-block;vertical-align: top; height: 173rpx;width: 230rpx;border-radius: 10rpx;margin-right: 30rpx;} }
.circle-list-item .left image{width: 100%;height: 100%;border-radius: 10rpx;}
.circle-list-item .right{display: inline-block;vertical-align: top;height: 173rpx; box-sizing: border-box;position: relative;width: 430rpx;} .ml-20 {
.circle-list-item .title{font-size: 32rpx;color: #333333;line-height: 40rpx;font-weight: bold} margin-left: 20rpx;
.circle-list-item .one-line{text-overflow: -o-ellipsis-lastline;overflow: hidden;text-overflow: ellipsis;} }
.circle-list-item .one-line{display: -webkit-box;-webkit-line-clamp: 1;-webkit-box-orient: vertical;align-content: center;}
.circle-list-item .name{height: 30rpx;font-size: 24rpx;color: #6b6b6b;line-height: 30rpx;position: absolute;bottom: 90rpx;} .ml-30 {
.circle-list-item .time{height: 30rpx;font-size: 24rpx;color: #6b6b6b;line-height: 30rpx;position: absolute;bottom: 50rpx;} margin-left: 30rpx;
}
.circle-list-item .name image{height: 30rpx;width: 30rpx;border-radius: 50%;display: inline-block;vertical-align: text-top;margin-right: 10rpx;}
.circle-list-item .num{height: 28rpx;font-size: 24rpx;position: absolute;bottom: 10rpx;color: #6b6b6b} .mr-10 {
.circle-list-item .num view{display: inline-block;font-size: 24rpx;height: 24rpx;line-height: 28rpx;box-sizing: border-box;color: #6b6b6b} margin-right: 10rpx;
.circle-list-item .cj{padding-right: 20rpx;margin-right: 20rpx;border-right: 1px solid #dbdbdb;} }
.circle-list-item .right-img image{width: 32rpx; height: 32rpx;right: 20rpx;top:100rpx;position: absolute}
.circle-list-item .right-img view{width: 32rpx; height: 32rpx;border-radius: 50%;border:1rpx solid #6b6b6b;right: 20rpx;top:100rpx;position: absolute} .mt-15 {
.circle-list-item .right-flag image{width: 84rpx; height: 42rpx;right: 0rpx;top:30rpx;position: absolute} margin-top: 15rpx;
.circle-list-item .right-flag view{width: 64rpx; height: 42rpx;right: 5rpx;top:30rpx;position: absolute;font-size: 20rpx;line-height: 42rpx;text-align: right;z-index: 1000;color: #ffffff;} }
/* nav样式 */ .mt-20 {
.nav{display: flex;background: #ffffff;padding: 30rpx;border-bottom:1rpx solid #e0e0e0} margin-top: 20rpx;
.nav .nav-item{flex: 1;text-align: center;font-size: 30rpx;color: #b7b7b7;} }
.nav image{display: block;width: 46rpx;height: 18rpx;margin: 0 auto;}
.mr-30 {
.no-data image{width: 300rpx;height: 209rpx;display: block;margin: 40rpx auto 0 auto;} margin-right: 30rpx;
.no-data{position: relative;text-align: center} }
.no-data view{position: absolute;width: 100%;top:200rpx;color: #cecece;font-size: 24rpx;}
\ No newline at end of file .f-l {
float: left
}
.f-50 {
font-size: 32rpx;
}
.f-28 {
font-size: 28rpx;
}
.f-24 {
font-size: 24rpx;
}
.f-r {
float: right
}
.f-24 {
font-size: 24rpx;
}
.c-ff7900 {
color: #ff7900
}
.c-f70204 {
color: #f70204;
}
.w-200 {
width: 200rpx;
}
.w-220 {
width: 220rpx;
}
.container {
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
padding: 200rpx 0;
box-sizing: border-box;
}
.one-line {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.c-btn {
justify-content: center;
width: 94%;
height: 96rpx;
margin: 0 auto;
background: #FF9B4D;
border-radius: 50rpx;
text-align: center; color: #fff;
line-height: 96rpx;
margin-top: 60rpx;
margin-bottom: 40rpx;
}
.container {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
}
.after-click-btn{
background: #EA8333 !important;
}
.after-click-content{
background: #F8F8F8 !important;
}
.menu-item{
flex: 1;
text-align: center;
padding-top: 8px;
}
.menu-item1{
width: 24%;
float: left;
text-align: center;
padding-top: 8px;
}
.img{
width: 48rpx;
height: 48rpx;
display: block;
margin:auto;
}
.clear{
clear: both;
}
.tab-bar{
display: flex;
position: fixed;
z-index: 99999;
width: 100%;
padding: 0px 2%;
background: #FFFFFF;
}
.button{
margin: 130px;
}
.taber-text{
font-size: 24rpx;
}
button::after{
border: none;
}
\ No newline at end of file
...@@ -410,7 +410,7 @@ page{ ...@@ -410,7 +410,7 @@ page{
.ywqz-help{ .ywqz-help{
position: absolute; position: absolute;
top: 50%; top: 50%;
left: 20px; left: 40px;
transform: translateY(-50%); transform: translateY(-50%);
width: 192px; width: 192px;
height: 140px; height: 140px;
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
"include": [] "include": []
}, },
"setting": { "setting": {
"urlCheck": false, "urlCheck": true,
"es6": false, "es6": false,
"enhance": true, "enhance": true,
"postcss": true, "postcss": true,
......
...@@ -53,6 +53,27 @@ ...@@ -53,6 +53,27 @@
"query": "type=1", "query": "type=1",
"launchMode": "default", "launchMode": "default",
"scene": null "scene": null
},
{
"name": "",
"pathName": "subPages/bluetooth/skip/skip",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "蓝牙跳绳",
"pathName": "subPages/bluetooth/skip/skip",
"query": "mode=2",
"launchMode": "default",
"scene": null
},
{
"name": "",
"pathName": "subPages/bluetooth/share/share",
"query": "share=0&id=10774740&showMedal=1&sportTime=40",
"scene": null,
"launchMode": "default"
} }
] ]
} }
......
import WxCanvas from './wx-canvas';
import * as echarts from './echarts';
let ctx;
function compareVersion(v1, v2) {
v1 = v1.split('.')
v2 = v2.split('.')
const len = Math.max(v1.length, v2.length)
while (v1.length < len) {
v1.push('0')
}
while (v2.length < len) {
v2.push('0')
}
for (let i = 0; i < len; i++) {
const num1 = parseInt(v1[i])
const num2 = parseInt(v2[i])
if (num1 > num2) {
return 1
} else if (num1 < num2) {
return -1
}
}
return 0
}
Component({
properties: {
canvasId: {
type: String,
value: 'ec-canvas'
},
ec: {
type: Object
},
forceUseOldCanvas: {
type: Boolean,
value: false
}
},
data: {
isUseNewCanvas: false
},
ready: function () {
// Disable prograssive because drawImage doesn't support DOM as parameter
// See https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.drawImage.html
echarts.registerPreprocessor(option => {
if (option && option.series) {
if (option.series.length > 0) {
option.series.forEach(series => {
series.progressive = 0;
});
}
else if (typeof option.series === 'object') {
option.series.progressive = 0;
}
}
});
if (!this.data.ec) {
console.warn('组件需绑定 ec 变量,例:<ec-canvas id="mychart-dom-bar" '
+ 'canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>');
return;
}
if (!this.data.ec.lazyLoad) {
this.init();
}
},
methods: {
init: function (callback) {
const version = wx.getSystemInfoSync().SDKVersion
const canUseNewCanvas = compareVersion(version, '2.9.0') >= 0;
const forceUseOldCanvas = this.data.forceUseOldCanvas;
const isUseNewCanvas = canUseNewCanvas && !forceUseOldCanvas;
this.setData({ isUseNewCanvas });
if (forceUseOldCanvas && canUseNewCanvas) {
console.warn('开发者强制使用旧canvas,建议关闭');
}
if (isUseNewCanvas) {
// console.log('微信基础库版本大于2.9.0,开始使用<canvas type="2d"/>');
// 2.9.0 可以使用 <canvas type="2d"></canvas>
this.initByNewWay(callback);
} else {
const isValid = compareVersion(version, '1.9.91') >= 0
if (!isValid) {
console.error('微信基础库版本过低,需大于等于 1.9.91。'
+ '参见:https://github.com/ecomfe/echarts-for-weixin'
+ '#%E5%BE%AE%E4%BF%A1%E7%89%88%E6%9C%AC%E8%A6%81%E6%B1%82');
return;
} else {
console.warn('建议将微信基础库调整大于等于2.9.0版本。升级后绘图将有更好性能');
this.initByOldWay(callback);
}
}
},
initByOldWay(callback) {
// 1.9.91 <= version < 2.9.0:原来的方式初始化
ctx = wx.createCanvasContext(this.data.canvasId, this);
const canvas = new WxCanvas(ctx, this.data.canvasId, false);
echarts.setCanvasCreator(() => {
return canvas;
});
// const canvasDpr = wx.getSystemInfoSync().pixelRatio // 微信旧的canvas不能传入dpr
const canvasDpr = 1
var query = wx.createSelectorQuery().in(this);
query.select('.ec-canvas').boundingClientRect(res => {
if (typeof callback === 'function') {
this.chart = callback(canvas, res.width, res.height, canvasDpr);
}
else if (this.data.ec && typeof this.data.ec.onInit === 'function') {
this.chart = this.data.ec.onInit(canvas, res.width, res.height, canvasDpr);
}
else {
this.triggerEvent('init', {
canvas: canvas,
width: res.width,
height: res.height,
canvasDpr: canvasDpr // 增加了dpr,可方便外面echarts.init
});
}
}).exec();
},
initByNewWay(callback) {
// version >= 2.9.0:使用新的方式初始化
const query = wx.createSelectorQuery().in(this)
query
.select('.ec-canvas')
.fields({ node: true, size: true })
.exec(res => {
const canvasNode = res[0].node
this.canvasNode = canvasNode
const canvasDpr = wx.getSystemInfoSync().pixelRatio
const canvasWidth = res[0].width
const canvasHeight = res[0].height
const ctx = canvasNode.getContext('2d')
const canvas = new WxCanvas(ctx, this.data.canvasId, true, canvasNode)
echarts.setCanvasCreator(() => {
return canvas
})
if (typeof callback === 'function') {
this.chart = callback(canvas, canvasWidth, canvasHeight, canvasDpr)
} else if (this.data.ec && typeof this.data.ec.onInit === 'function') {
this.chart = this.data.ec.onInit(canvas, canvasWidth, canvasHeight, canvasDpr)
} else {
this.triggerEvent('init', {
canvas: canvas,
width: canvasWidth,
height: canvasHeight,
dpr: canvasDpr
})
}
})
},
canvasToTempFilePath(opt) {
if (this.data.isUseNewCanvas) {
// 新版
const query = wx.createSelectorQuery().in(this)
query
.select('.ec-canvas')
.fields({ node: true, size: true })
.exec(res => {
const canvasNode = res[0].node
opt.canvas = canvasNode
wx.canvasToTempFilePath(opt)
})
} else {
// 旧的
if (!opt.canvasId) {
opt.canvasId = this.data.canvasId;
}
ctx.draw(true, () => {
wx.canvasToTempFilePath(opt, this);
});
}
},
touchStart(e) {
if (this.chart && e.touches.length > 0) {
var touch = e.touches[0];
var handler = this.chart.getZr().handler;
handler.dispatch('mousedown', {
zrX: touch.x,
zrY: touch.y
});
handler.dispatch('mousemove', {
zrX: touch.x,
zrY: touch.y
});
handler.processGesture(wrapTouch(e), 'start');
}
},
touchMove(e) {
if (this.chart && e.touches.length > 0) {
var touch = e.touches[0];
var handler = this.chart.getZr().handler;
handler.dispatch('mousemove', {
zrX: touch.x,
zrY: touch.y
});
handler.processGesture(wrapTouch(e), 'change');
}
},
touchEnd(e) {
if (this.chart) {
const touch = e.changedTouches ? e.changedTouches[0] : {};
var handler = this.chart.getZr().handler;
handler.dispatch('mouseup', {
zrX: touch.x,
zrY: touch.y
});
handler.dispatch('click', {
zrX: touch.x,
zrY: touch.y
});
handler.processGesture(wrapTouch(e), 'end');
}
}
}
});
function wrapTouch(event) {
for (let i = 0; i < event.touches.length; ++i) {
const touch = event.touches[i];
touch.offsetX = touch.x;
touch.offsetY = touch.y;
}
return event;
}
{
"component": true,
"usingComponents": {}
}
\ No newline at end of file
<!-- 新的:接口对其了H5 -->
<canvas wx:if="{{isUseNewCanvas}}" type="2d" class="ec-canvas" canvas-id="{{ canvasId }}" bindinit="init" bindtouchstart="{{ ec.disableTouch ? '' : 'touchStart' }}" bindtouchmove="{{ ec.disableTouch ? '' : 'touchMove' }}" bindtouchend="{{ ec.disableTouch ? '' : 'touchEnd' }}"></canvas>
<!-- 旧的 -->
<canvas wx:else class="ec-canvas" canvas-id="{{ canvasId }}" bindinit="init" bindtouchstart="{{ ec.disableTouch ? '' : 'touchStart' }}" bindtouchmove="{{ ec.disableTouch ? '' : 'touchMove' }}" bindtouchend="{{ ec.disableTouch ? '' : 'touchEnd' }}"></canvas>
.ec-canvas {
width: 100%;
height: 100%;
}
This source diff could not be displayed because it is too large. You can view the blob instead.
export default class WxCanvas {
constructor(ctx, canvasId, isNew, canvasNode) {
this.ctx = ctx;
this.canvasId = canvasId;
this.chart = null;
this.isNew = isNew
if (isNew) {
this.canvasNode = canvasNode;
}
else {
this._initStyle(ctx);
}
// this._initCanvas(zrender, ctx);
this._initEvent();
}
getContext(contextType) {
if (contextType === '2d') {
return this.ctx;
}
}
// canvasToTempFilePath(opt) {
// if (!opt.canvasId) {
// opt.canvasId = this.canvasId;
// }
// return wx.canvasToTempFilePath(opt, this);
// }
setChart(chart) {
this.chart = chart;
}
attachEvent() {
// noop
}
detachEvent() {
// noop
}
_initCanvas(zrender, ctx) {
zrender.util.getContext = function () {
return ctx;
};
zrender.util.$override('measureText', function (text, font) {
ctx.font = font || '12px sans-serif';
return ctx.measureText(text);
});
}
_initStyle(ctx) {
var styles = ['fillStyle', 'strokeStyle', 'globalAlpha',
'textAlign', 'textBaseAlign', 'shadow', 'lineWidth',
'lineCap', 'lineJoin', 'lineDash', 'miterLimit', 'fontSize'];
styles.forEach(style => {
Object.defineProperty(ctx, style, {
set: value => {
if (style !== 'fillStyle' && style !== 'strokeStyle'
|| value !== 'none' && value !== null
) {
ctx['set' + style.charAt(0).toUpperCase() + style.slice(1)](value);
}
}
});
});
ctx.createRadialGradient = () => {
return ctx.createCircularGradient(arguments);
};
}
_initEvent() {
this.event = {};
const eventNames = [{
wxName: 'touchStart',
ecName: 'mousedown'
}, {
wxName: 'touchMove',
ecName: 'mousemove'
}, {
wxName: 'touchEnd',
ecName: 'mouseup'
}, {
wxName: 'touchEnd',
ecName: 'click'
}];
eventNames.forEach(name => {
this.event[name.wxName] = e => {
const touch = e.touches[0];
this.chart.getZr().handler.dispatch(name.ecName, {
zrX: name.wxName === 'tap' ? touch.clientX : touch.x,
zrY: name.wxName === 'tap' ? touch.clientY : touch.y
});
};
});
}
set width(w) {
if (this.canvasNode) this.canvasNode.width = w
}
set height(h) {
if (this.canvasNode) this.canvasNode.height = h
}
get width() {
if (this.canvasNode)
return this.canvasNode.width
return 0
}
get height() {
if (this.canvasNode)
return this.canvasNode.height
return 0
}
}
import * as echarts from '../ec-canvas/echarts';
var API = require("../../../utils/request.js");
var timeAPI = require("../../../utils/time.js");
var tool = require("../../../utils/util.js")
const app = getApp();
Page({
onShareAppMessage: function (res) {
return {
title: 'ECharts 可以在微信小程序中使用啦!',
path: '/pages/index/index',
success: function () { },
fail: function () { }
}
},
data: {
ec: {lazyLoad: true,},
status:'',
shareId:'', //分享带的id
isMyData:true, // 自己的数据人的按钮
isOtherData:false, // 看分享的人看到的按钮
bg:'', // 优秀 good 良好 well 达标 standard
bgcolor:'#0099B0', // 优秀 2D97E8 良好 0099B0 达标 0099B0
isMedal:true, //是否有勋章
isMedalShare:true, //有勋章分享
isFlunk:false, //不及格
isFlunkShare:false, //不及格分享
imgSrc:'', //头像
stuName:'', //姓名
score:'', //分数
myTopP:'', //超越百分比
sportValue:'', //运动个数
createTime:'', //完成时间
sportTime:'', //用时
speed:'', //配速
calorie:'', //卡路里
mixRop:'', //绊绳
keepRop:'', //连续
scoreLevel:'', //等级
skipMaxMin:'', //最佳
shareInfo:'', //分享出去要带的文案
isShare:0, //是否从外部分享进去
lineDate:[],
lineDateMap:[],
teacher:false,
student:true,
tips:'快去邀请小伙伴一起来跳绳吧',
chart:true,
ordin:false,
challengeMedal:false,//挑战勋章是否显示
challengeSuccess:false,//挑战成功
challengeFail:false,//挑战失败
perserve:false,//持之以恒是否显示
medalList:[],//当前获取到的勋章列表
nowMedal:[],//当前需要展示的勋章
dan:false,//是否显示段位
danSuccess:false,//段位成功
danFail:false,//段位失败
dwName:'',//段位名称
dwDesc:'',//段位描述
dwImg:'',//段位图标
p:'',//段位超越多少人
sucNum:0,//段位多少人挑战成功
dwRecordId:0,//段位分享id
},
onLoad(optinos){
console.log('分享页面落地参数:',optinos)
//console.log(optinos.id); //1424
},
onShow(optinos){
console.log('分享页面落地参数:',optinos)
var that = this;
//this.setupCanvas();
this.emotionsEcharts = this.selectComponent('#my-canvas');
console.log(this);
console.log('进入到Show',this.options);
var ordin = this.options.ordin;
var uid = this.options.id; // 分享出去的id
var sid = this.options.shareId; // 进分享页的id
var showMedal = this.options.showMedal;
if(this.options.suc == 1){
console.log('段位成功')
that.setData({
dan:true,
dwName:this.options.dwName,
dwDesc:this.options.dwDesc,
dwImg:this.options.dwImg,
p:this.options.p,
sucNum:this.options.sucNum,
dwRecordId:this.options.dwRecordId,
danSuccess:true,
danFail:false
})
}else if(this.options.suc == 0){
console.log('段位失败')
that.setData({
dan:true,
danFail:true,
danSuccess:false,
perserve:false
})
}
if(ordin == 1){
that.setData({
chart:false,
ordin:true
})
}else{
that.setData({
chart:true,
ordin:false
})
}
that.setData({
shareId:uid
})
//判断是否从分享页进入
if(!sid){
that.initPage(uid);
}else{
that.setData({
isShare:1,
isMedalShare:false,
isMyData:false,
isOtherData:true
})
that.initPage(sid);
}
if(showMedal == 1 && !that.data.dan){
console.log('当前不是段位')
// that.getSportMedalByRecordId(uid);
}else{
console.log('当前是段位')
}
},
//分享
onShareAppMessage:function(res){
var that = this;
if(res.from === 'button'){
if (res.target.id == 1) {
console.log('用户点击按钮触发1');
that.setData({
challengeMedal:false,//挑战勋章是否显示
challengeSuccess:false,//挑战成功
challengeFail:false,//挑战失败
})
console.log(res,res.target.dataset.item);
var medalId = res.target.dataset.item.medalRefId;
var medalContent = res.target.dataset.item.name;
return{
title:'我在小奔运动获得' + medalContent + '勋章,快来和我一起训练吧!',
path:'packageA/skip/medalShare/medalShare?medalId=' + medalId,
imageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/medal-share.png'
}
}
if (res.target.id == 2) {
console.log('用户点击按钮触发2');
that.setData({
challengeMedal:false,//挑战勋章是否显示
challengeSuccess:false,//挑战成功
challengeFail:false,//挑战失败
})
console.log(res,res.target.dataset.item);
var medalId = res.target.dataset.item.medalRefId;
var medalContent = res.target.dataset.item.name;
return{
title:'我在小奔运动获得' + medalContent + '勋章,快来和我一起训练吧!',
path:'packageA/skip/medalShare/medalShare?medalId=' + medalId,
imageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/medal-share.png'
}
}
if (res.target.id == 3) {
console.log('用户点击按钮触发3');
that.setData({
challengeMedal:false,//挑战勋章是否显示
challengeSuccess:false,//挑战成功
challengeFail:false,//挑战失败
})
if(that.data.ordin == true){
var model = 1;
}else if(that.data.ordin == false){
var model = 0;
}
return{
title: that.data.shareInfo,
path:'packageA/skip/share/share?shareId=' + that.data.shareId + '&ordin=' + model
}
}
if (res.target.id == 4) {
console.log('用户点击按钮触发4');
that.setData({
dan:false,//挑战勋章是否显示
danSuccess:false,//挑战成功
danFail:false,//挑战失败
})
var medalId = res.target.dataset.id;
var medalContent = res.target.dataset.content;
return{
title:'我在小奔运动获得' + medalContent + '勋章,快来和我一起训练吧!',
path:'packageA/skip/medalShare/medalShare?medalId=' + medalId + '&dan=1',
imageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/medal-share.png'
}
}
}
},
onReady() {
},
goSport(){
tool.goBuy();
},
//初始化
init_echarts(el, fn) {
el.init((canvas, width, height,dpr) => {
// 初始化图表
const Chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: dpr
});
Chart.setOption(fn());
// 注意这里一定要返回 chart 实例,否则会影响事件处理等
return Chart;
});
},
//获取当前运动详情是否显示勋章
getSportMedalByRecordId(uid){
var that = this;
API.getDataAll('/medal/getSportMedalByRecordId', {
sportDetailId:uid
}, (res) => {
console.log("当前的运动是否有勋章",res);
if(res.code == 200){
that.setData({
medalList:res.data
})
if(res.data.length > 0){
if(res.data[0].done == 1){
that.setData({
nowMedal:res.data[0],
challengeMedal:true,//挑战勋章是否显示
challengeSuccess:true,//挑战成功
challengeFail:false,//挑战失败
})
}else{
that.setData({
challengeMedal:true,//挑战勋章是否显示
challengeSuccess:false,//挑战成功
challengeFail:true,//挑战失败
})
}
}
}
})
},
//关闭当前勋章判断是否触发持之以恒勋章
medalClose(){
var that = this;
console.log('关闭勋章');
if(that.data.medalList.length > 1){
console.log('有持之以恒勋章');
that.setData({
challengeMedal:false,//挑战勋章是否显示
challengeSuccess:false,//挑战成功
challengeFail:false,//挑战失败
perserve:true,//持之以恒是否显示
nowMedal:that.data.medalList[1],//当前需要展示的勋章
})
}else{
that.setData({
challengeMedal:false,//挑战勋章是否显示
challengeSuccess:false,//挑战成功
challengeFail:false,//挑战失败
})
}
},
//段位关闭
danClose(){
var that = this;
that.setData({
dan:false
})
that.getSportMedalByRecordId(that.data.shareId);
},
//再次挑战
again(){
var that = this;
var item = that.data.medalList[0];
console.log(item);
if(item.conditionList[0].medalConditionType == 'skipLimited60SecTime'){
var mode = 2;
}else{
var mode = 1;
}
var medalId = item.id;
var medalContent = item.content;
var medalName = item.name;
console.log('当前的运动模式',mode);
console.log('当前挑战模式id',medalId);
console.log('当前挑战模式的名称',medalName);
console.log('当前挑战模式内容',medalContent);
wx.redirectTo({
url: '../skip/skip?mode=' + mode + '&medalId=' + medalId + '&medalName=' + medalName + '&medalContent=' + medalContent,
})
},
//段位再次挑战
danAgain(){
wx.navigateBack({
delta:1
})
},
//段位休息
danMedalClose(){
var that = this;
that.setData({
dan:false
})
that.getSportMedalByRecordId(that.data.shareId);
},
//关闭持之以恒勋章
czyhClose(){
var that = this;
that.setData({
perserve:false
})
},
//获取运动详情
initPage(uid){
var that = this;
console.log('获得运动详情');
API.getDataAll('/project/record/detail/' + uid, {}, (res) => {
console.log('我是运动详情:',res);
console.log('我是'+ res.data.peopleType);
if(res.data.peopleType == 'Teacher' || res.data.peopleType == 'OrganMember' || res.data.peopleType == 'Visitor' || res.data.peopleType == 'Parent'){
if(res.data.myTopP <= 0.3){
this.setData({
tips:'邀请大家一起运动!'
})
}else if(res.data.myTopP > 0.3){
this.setData({
tips:'分享我的运动成果'
})
}
this.setData({
teacher:true,
student:false
})
}else{
this.setData({
tips:'快去邀请小伙伴一起来跳绳吧',
teacher:false,
student:true
})
}
console.log('等级',res.data.scoreLevel);
var projectInfo = res.data;
if(res.data.scoreLevel === 1 && that.data.isShare === 0 || res.data.scoreLevel === 1 && that.data.isShare === 1){
console.log('我是优秀')
that.setData({
bg:'https://ttxs01-10066525.file.myqcloud.com/sport/miniapp/mobile/skip/good.png', // 优秀 good 良好 well 达标 standard
bgcolor:'#2D97E8', // 优秀 2D97E8 良好 0099B0 达标 0099B0
})
wx.setNavigationBarColor({
frontColor: '#ffffff', // 必写项
backgroundColor: '#2D97E8', // 优秀 2D97E8 良好 0099B0 达标 0099B0 不及格 264653
animation: {
// 可选项,加上这项会有个显示的动画效果
duration: 2000,
timingFunc: 'easeIn'
}
})
}else if(res.data.scoreLevel === 2 && that.data.isShare === 0 || res.data.scoreLevel === 2 && that.data.isShare === 1){
console.log('我是良好')
that.setData({
bg:'https://ttxs01-10066525.file.myqcloud.com/sport/miniapp/mobile/skip/well.png', // 优秀 good 良好 well 达标 standard
bgcolor:'#0099B0', // 优秀 2D97E8 良好 0099B0 达标 0099B0
})
wx.setNavigationBarColor({
frontColor: '#ffffff', // 必写项
backgroundColor: '#0099B0', // 优秀 2D97E8 良好 0099B0 达标 0099B0 不及格 264653
animation: {
// 可选项,加上这项会有个显示的动画效果
duration: 2000,
timingFunc: 'easeIn'
}
})
}else if(res.data.scoreLevel === 3 && that.data.isShare === 0 || res.data.scoreLevel === 3 && that.data.isShare === 1){
console.log('我是达标')
that.setData({
bg:'https://ttxs01-10066525.file.myqcloud.com/sport/miniapp/mobile/skip/standard.png', // 优秀 good 良好 well 达标 standard
bgcolor:'#0099B0', // 优秀 2D97E8 良好 0099B0 达标 0099B0
})
wx.setNavigationBarColor({
frontColor: '#ffffff', // 必写项
backgroundColor: '#0099B0', // 优秀 2D97E8 良好 0099B0 达标 0099B0 不及格 264653
animation: {
// 可选项,加上这项会有个显示的动画效果
duration: 2000,
timingFunc: 'easeIn'
}
})
}else if(res.data.scoreLevel === 4 && that.data.isShare === 0){
console.log('我是不及格')
that.setData({
//bg:'../../../images/skip/standard.png', // 优秀 good 良好 well 达标 standard
bgcolor:'#264653', // 优秀 2D97E8 良好 0099B0 达标 0099B0
})
wx.setNavigationBarColor({
frontColor: '#ffffff', // 必写项
backgroundColor: '#264653', // 优秀 2D97E8 良好 0099B0 达标 0099B0 不及格 264653
animation: {
// 可选项,加上这项会有个显示的动画效果
duration: 2000,
timingFunc: 'easeIn'
}
})
that.setData({
isMedal:false,
isFlunk:true
})
}else if(res.data.scoreLevel === 4 && that.data.isShare === 1){
console.log('我是不及格的分享')
that.setData({
//bg:'../../../images/skip/standard.png', // 优秀 good 良好 well 达标 standard
bgcolor:'#264653', // 优秀 2D97E8 良好 0099B0 达标 0099B0 不及格 264653
})
wx.setNavigationBarColor({
frontColor: '#ffffff', // 必写项
backgroundColor: '#264653', // 优秀 2D97E8 良好 0099B0 达标 0099B0 不及格 264653
animation: {
// 可选项,加上这项会有个显示的动画效果
duration: 2000,
timingFunc: 'easeIn'
}
})
that.setData({
isMedal:false,
isFlunk:false,
isFlunkShare:true
})
}
that.setData({
status:res.data.peopleType,
imgSrc:res.data.imgSrc, //头像
stuName:res.data.stuName, //姓名
score:res.data.score, //分数
myTopP:(res.data.myTopP * 100).toFixed(2), //超越百分比
sportValue:res.data.sportValue, //运动个数
createTime:res.data.createTime, //完成时间
sportTime:timeAPI.formatSeconds(res.data.sportTime), //用时
speed:res.data.speed, //配速
calorie:res.data.calorie, //卡路里
mixRop:res.data.mixRop, //绊绳
keepRop:res.data.keepRop, //连续
skipMaxMin:res.data.skipMaxMin, //最佳
scoreLevel:res.data.scoreLevel, //分数等级
shareInfo:res.data.shareInfo, //分享出去要带的文案
})
var arr = JSON.parse(res.data.curveJson);
var lineDate = []; //BMP曲线y轴
var lineDateMap = []; //BMP曲线x轴
console.log('当前的数组',arr);
if(arr){
for(var j = 0; j < arr.length;j++){
if(!arr[j].bmp && j > 0){
arr[j].bmp = arr[j-1].bmp
}
}
console.log('优化后的数组',arr)
}
if(arr){
console.log('当前为智能跳绳')
for(var i=0; i<arr.length;i++){
var json = {};
if(arr[i].stumbleIndexState == 1){
json.value = arr[i].bmp;
json.symbol = '',
json.symbolSize = 6;
json.showAllSymbol= true;
}else{
json.value = arr[i].bmp;
json.symbol = '',
json.symbolSize = 0;
json.showAllSymbol= true;
}
lineDate.push(json);
lineDateMap.push(arr[i].time);
}
console.log(lineDate)
console.log(lineDateMap)
that.setData({
lineDate:lineDate,
lineDateMap:lineDateMap
})
that.init_echarts(that.emotionsEcharts , that.getCwData);
}else{
console.log('当前为普通跳绳')
}
})
},
standerHtml(){
var url = wx.getStorageSync('host')+'/primary.html';
console.log(wx.getStorageSync('host')+'/primary.html');
wx.navigateTo({
url: '../../../packageB/activity/webView/webView?url=' + url,
})
},
//我也要跳绳
start(){
wx.switchTab({
url: '/pages/index/index',
})
},
getCwData(){
var that = this;
return {
color: ["#37A2DA", "#67E0E3", "#9FE6B8"],
grid: {
top:'40px',
left:'-20px',
right:'6px',
bottom:'0px',
containLabel: true
},
tooltip: {
show: true,
trigger: 'axis'
},
xAxis: {
type: 'category',
boundaryGap: false,
data: that.data.lineDateMap,
show: false
},
yAxis: {
x: 'center',
type: 'value',
splitLine: {
show:true,
lineStyle: {
type: 'dashed'
}
},
show: false
},
series: [{
name: 'BMP',
type: 'line',
markLine: {
silent:true, //true 去掉鼠标悬浮该线上的动画
symbol:"none", //该线无样式
label:{
show:false //该线上的值去掉
},
data: [
{type : 'average', name: '平均值'}
],
lineStyle:{ //设置该线样式
normal:{
type:"solid",
color:"#dcdcdc"
}
},
},
showAllSymbol: true,
itemStyle: {
normal: {
color: "red",
lineStyle: {
color: "#FFA45A"
}
}
},
markPoint:{
symbol:'pin',
symbolSize: 32, //控制气泡大小
borderColor:'#000000',
borderWidth: 8,
show: false,
symbolOffset:[0,2],//位置偏移
itemStyle:{
normal:{
color: "#FFA45A", //气泡的背景色
label:{
show: true,
color:'#FFFFFF',
size:'10px'
}
}
},
data:[{
name:'最大值',
type:'max',
},{
name:'最小值',
type:'min'
}]
},
data: that.data.lineDate,
smooth: true,
}]
};
}
});
function initChart(canvas, width, height, dpr) {
const chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: dpr // new
});
canvas.setChart(chart);
//console.log(this.data.lineData)
var option = {
// title: {
// text: '测试下面legend的红色区域不应被裁剪',
// left: 'center'
// },
color: ["#37A2DA", "#67E0E3", "#9FE6B8"],
// legend: {
// data: ['A', 'B', 'C'],
// top: 50,
// left: 'center',
// backgroundColor: 'red',
// z: 100,
// },
grid: {
top:'20px',
left:'-10px',
right:'4px',
bottom:'0px',
containLabel: true
},
tooltip: {
show: true,
trigger: 'axis'
},
xAxis: {
type: 'category',
boundaryGap: false,
data: wx.getStorageSync('lineDateMap'),
show: false
},
yAxis: {
x: 'center',
type: 'value',
splitLine: {
show:true,
lineStyle: {
type: 'dashed'
}
},
show: false
},
series: [{
name: 'BMP',
type: 'line',
// markLine: {
// silent:true, //true 去掉鼠标悬浮该线上的动画
// symbol:"none", //该线无样式
// data: [
// {type: 'average', name: '平均值'}
// ],
// lineStyle:{ //设置该线样式
// normal:{
// type:"solid",
// color:"#dcdcdc"
// }
// },
// },
itemStyle: {
normal: {
color: "red",
lineStyle: {
color: "#FFA45A"
}
}
},
markPoint:{
symbol:'pin',
symbolSize: 32, //控制气泡大小
borderColor:'#000000',
borderWidth: 8,
show: false,
symbolOffset:[0,2],//位置偏移
itemStyle:{
normal:{
color: "#FFA45A", //气泡的背景色
label:{
show: true,
color:'#FFFFFF',
size:'12px'
}
}
},
data:[{
name:'最大值',
type:'max',
},{
name:'最小值',
type:'min'
}]
},
data: wx.getStorageSync('lineDate'),
smooth: true,
}]
};
chart.setOption(option);
return chart;
}
\ No newline at end of file
{
"navigationBarBackgroundColor": "#0099B0",
"navigationBarTitleText": "跳绳",
"navigationBarTextStyle": "white",
"usingComponents": {
"ec-canvas":"../ec-canvas/ec-canvas"
}
}
\ No newline at end of file
<view>
<!-- 及格 -->
<!-- <view wx:if="{{student}}"> -->
<!-- 迁移过来没有老师概念 -->
<view wx:if="{{false}}">
<view class="share-top" style="background: {{bgcolor}}" wx-if="{{isMedal}}">
<image src="{{bg}}" class="bg"></image>
<view class="score">
<view class="number">{{score || 0}}<text class="fen">分</text></view>
</view>
<view class="share-user">
<view class="user-info">
<image src="{{imgSrc || ''}}"></image>
<view class="name jg-name">{{stuName || '小奔运动'}}</view>
</view>
<view class="stand" bindtap="standerHtml">
<view class="text">国家标准</view>
<image src="/images/skip/stand-icon.png"></image>
</view>
</view>
<view class="content">
<view class="title" wx-if="{{isMedalShare}}">恭喜你</view>
<view class="title">配速达到“国家标准”</view>
<!-- <view class="beyond">超越了{{myTopP || '--'}}%的同龄人</view> -->
</view>
</view>
<!-- 不及格展示 -->
<view class="share-top" style="background: #264653;" wx-if="{{isFlunk}}">
<view class="pass-score">
<view class="pass-number">{{score || 0}}<text class="pass-fen">分</text></view>
</view>
<view class="share-user">
<view class="user-info">
<image src="{{imgSrc}}"></image>
<view class="name jg-name">{{stuName || '小奔运动'}}</view>
</view>
<!-- <view class="stand" bindtap="standerHtml"> -->
<view class="stand">
<view class="text">国家标准</view>
<image src="/images/skip/stand-icon.png"></image>
</view>
</view>
<view class="content">
<view class="title" wx-if="{{isMedalShare}}">继续加油</view>
<view class="title samll">离“达标”还有一步之遥</view>
<!-- <view class="beyond">超越了{{myTopP || 0}}%的同龄人</view> -->
</view>
</view>
</view>
<!-- wx:if="{{teacher}}" -->
<view>
<view class="share-top" style="background: {{bgcolor}}" wx-if="{{isMedal}}">
<!-- <image src="{{bg}}" class="bg"></image> -->
<!-- <view class="score">
<view class="number">{{score || 0}}<text class="fen">分</text></view>
</view> -->
<image src="https://ttxs01-10066525.file.myqcloud.com/sport/miniapp/mobile/skip/teacher.png" class="bg"></image>
<view class="share-user">
<view class="user-info">
<image src="{{imgSrc || ''}}"></image>
<view class="name jg-name">{{stuName || '小奔运动'}}</view>
</view>
<!-- <view class="stand" bindtap="standerHtml">
<view class="text">国家标准</view>
<image src="../../../images/skip/stand-icon.png"></image>
</view> -->
</view>
<view class="content">
<view class="title" wx-if="{{isMedalShare}}">恭喜你</view>
<view class="title">完成跳绳训练!</view>
<!-- <view class="beyond">超越了{{myTopP || 0}}%的同龄人</view> -->
</view>
</view>
</view>
<!-- 不及格分享 -->
<view class="share-top" style="background: #264653;" wx-if="{{isFlunkShare}}">
<view class="share">
<view class="share-ce photo">
<image src="{{imgSrc}}"></image>
</view>
<view class="share-ce">
<view class="name">{{stuName || '小奔运动'}}</view>
<view class="share-time">{{createTime || 0}}</view>
</view>
</view>
<view class="share-content">
完成了跳绳训练打卡
</view>
<view class="share-text">
小伙伴你也快来参加吧
</view>
</view>
<view class="movement-info">
<view class="movement-number">
<view class="movement-numbers">{{sportValue || 0}}</view>
<view class="movement-time">{{createTime || 0}} 完成</view>
</view>
<view class="detailed">
<view class="detailed-layel">
<image src="/images/skip/time.png"></image>
<view class="layel-content">{{sportTime || '00:00'}}</view>
<view class="layel-text">用时</view>
</view>
<view class="detailed-layel">
<image src="/images/skip/speed.png"></image>
<view class="layel-content" style="padding-left: 70rpx;">{{speed || 0}} <text class="unit">个/分</text></view>
<view class="layel-text">平均</view>
</view>
<view class="detailed-layel">
<image src="/images/skip/kll.png"></image>
<view class="layel-content">{{calorie || 0}}</view>
<view class="layel-text">千卡</view>
</view>
</view>
</view>
<!-- <view class="pt-tips" wx:if="{{ordin}}">
<image bindtap="goSport" src="http://cdn.xiaobentiyu.cn/images/20201123152916.png"></image>
</view> -->
<view class="graph" wx:if="{{chart}}">
<view class="graph-title">其他参数</view>
<view class="graph-layel">
<view class="graph-layel-title">
<view class="top">
<image src="/images/skip/bs.png"></image>
<view class="layel-title-content">绊绳 {{mixRop || 0}}个</view>
</view>
<view class="top">
<image src="/images/skip/lx.png"></image>
<view class="layel-title-content">连续 {{keepRop || '--'}}个</view>
</view>
<view class="top">
<image src="/images/skip/zj.png"></image>
<view class="layel-title-content">最佳 {{skipMaxMin || '--'}}个/分</view>
</view>
</view>
<view class="briken-line">
<!-- <view class="line"></view> -->
<ec-canvas id="my-canvas" canvas-id="mycharts-line" ec="{{ec}}"></ec-canvas>
</view>
</view>
<view class="tips">
<image src="/images/skip/tips.png"></image>
<view class="tips-content">尽可能保持匀速,减小波动,让曲线平滑,红点表示绊绳(断绳)</view>
</view>
</view>
<view class="footer">
<view wx-if='{{isMyData}}'>
<button class="btn" hover-class="after-click-btn" open-type="share" id="3" wx:if="{{status == 'Student'}}">快去邀请小伙伴一起来跳绳吧</button>
<button class="btn" hover-class="after-click-btn" open-type="share" id="3" wx:if="{{status != 'Student' && myTopP <= 30}}">邀请大家一起运动!</button>
<button class="btn" hover-class="after-click-btn" open-type="share" id="3" wx:if="{{status != 'Student' && myTopP > 30}}">分享我的运动成果</button>
</view>
<view class="btn" hover-class="after-click-btn" wx-if='{{isOtherData}}' bindtap="start">
我也要跳绳
</view>
</view>
</view>
<!-- 勋章挑战 -->
<!-- <view class="challenge-medal" wx:if="{{challengeMedal}}">
<view class="challenge-mask"></view>
<view class="my-medal" wx:if="{{challengeSuccess}}">
<image class="medal-close" catchtap="medalClose" src="/images/skip/medal-close.png"></image>
<view class="medal-title">恭喜你,已获得</view>
<image class="medal" src="{{nowMedal.hasgetImg}}"></image>
<view class="medal-name">{{nowMedal.name}}</view>
<view class="medal-content">{{nowMedal.content}}</view>
<button class="medal-btn" open-type="share" data-item="{{nowMedal}}" id="1">炫耀勋章</button>
<view class="medal-number">已有{{nowMedal.ownerNum}}人获得</view>
</view>
<view class="fail" wx:if="{{challengeFail}}">
<view class="content">
<view class="fail-text">离挑战成功还差一点点~</view>
<view class="fail-text">继续加油哦~</view>
</view>
<view class="fail-again" catchtap="again">再次挑战</view>
<view class="fail-rest" catchtap="medalClose">休息一下,下次再来</view>
</view>
</view> -->
<!-- 累计挑战 -->
<!-- <view class="challenge-medal" wx:if="{{perserve}}">
<view class="challenge-mask"></view>
<view class="my-medal">
<image class="medal-close" catchtap="czyhClose" src="/images/skip/medal-close.png"></image>
<view class="medal-title">恭喜你,已获得</view>
<image class="medal" src="{{nowMedal.hasgetImg}}"></image>
<view class="medal-name">{{nowMedal.name}}</view>
<view class="medal-content">{{nowMedal.content}}</view>
<button class="medal-btn" open-type="share" data-item="{{nowMedal}}" id="2">炫耀勋章</button>
<view class="medal-number">已有{{nowMedal.ownerNum}}人获得</view>
</view>
</view> -->
<!-- 段位挑战 -->
<!-- <view class="challenge-medal" wx:if="{{dan}}">
<view class="challenge-mask"></view>
<view class="my-medal" wx:if="{{danSuccess}}">
<image class="medal-close" catchtap="danClose" src="/images/skip/medal-close.png"></image>
<view class="medal-title">恭喜你,挑战成功</view>
<image class="medal" src="{{dwImg}}"></image>
<view class="medal-name">{{dwName}}</view>
<view class="medal-content">{{dwDesc}}</view>
<view class="medal-content cy">已超过{{p}}%的同龄人</view>
<button class="medal-btn cy-btn" open-type="share" data-content="{{dwName}}" data-id="{{dwRecordId}}" id="4">炫耀勋章</button>
<view class="medal-number">已有{{sucNum}}人获得</view>
</view>
<view class="fail" wx:if="{{danFail}}">
<view class="content">
<view class="fail-text">离挑战成功还差一点点~</view>
<view class="fail-text">继续加油哦~</view>
</view>
<view class="fail-again" catchtap="danAgain">再次挑战</view>
<view class="fail-rest" catchtap="danMedalClose">休息一下,下次再来</view>
</view>
</view> -->
\ No newline at end of file
/**index.wxss**/
page{
background: #F8F8F8;
padding-bottom: 200rpx;
}
.share-top{
width:100%;
height:668rpx;
position: relative;
}
.share-top .bg{
width: 750rpx;
height: 670rpx;
position: absolute;
top: 40rpx;
left: 0;
}
.score{
position: absolute;
top: 310rpx;
right:120rpx;
color: #FFFFFF;
overflow: hidden;
}
.number{
font-size: 58rpx;
color: #FFFFFF;
font-weight: bold;
float: left;
}
.fen{
font-size: 24rpx;
font-weight: bold;
color: #FFFFFF;
float: right;
margin-left: 15rpx;
margin-top: 25rpx;
}
.share-user{
overflow: hidden;
width: 94%;
margin: 0 auto;
padding-top: 40rpx;
display: flex;
}
.user-info{
flex: 1;
}
.user-info image{
width: 60rpx;
height: 60rpx;
border-radius: 50%;
float: left;
background: #FFFFFF;
}
.jg-name{
float: left;
}
.name{
/* float: left; */
margin-left: 10rpx;
font-size: 34rpx;
color: #FFFFFF;
margin-top: 0rpx;
}
.stand{
flex: 1;
}
.stand image{
width: 24rpx;
height: 24rpx;
float: right;
text-align: right;
margin-right: 10rpx;
margin-top: 18rpx;
}
.text{
float: right;
color: #FFFFFF;
opacity: 0.6;
font-size: 24rpx;
margin-top: 14rpx;
}
.content{
width: 94%;
margin: 0 auto;
margin-left: 30rpx;
margin-top: 110rpx;
color: #FFFFFF;
}
.title{
font-size: 38rpx;
margin-top: 14rpx;
font-weight: bold;
padding-left: 20rpx;
}
.beyond{
font-size: 22rpx;
opacity: 0.6;
margin-top: 14rpx;
padding-left: 20rpx;
}
.movement-info{
position: relative;
background: #FFFFFF;
width: 94%;
margin:0 auto;
height: 496rpx;
margin-top: -228rpx;
border-radius:24rpx;
}
.movement-number{
width: 100%;
height: 50%;
text-align: center;
overflow: hidden;
}
.movement-numbers{
font-family: "Number";
color: #353535;
font-size: 120rpx;
line-height: 140rpx;
margin-top: 50rpx;
}
.movement-time{
color: #888888;
font-size: 24rpx;
}
.detailed{
width: 100%;
height: 50%;
display: flex;
}
.detailed-layel{
flex: 1;
text-align: center;
padding-top: 50rpx;
}
.detailed-layel image{
width: 40rpx;
height: 40rpx;
}
.layel-content{
font-family: "Number";
color: #353535;
font-size: 48rpx;
}
.layel-text{
color: #888888;
font-size: 22rpx;
}
.graph{
width: 94%;
margin:0 auto;
margin-top: 40rpx;
}
.graph-title{
color: #B2B2B2;
font-size: 28rpx;
margin-bottom: 20rpx;
}
.graph-layel{
width: 100%;
height: 380rpx;
background: #FFFFFF;
border-radius:24rpx;
}
.graph-layel-title{
width: 94%;
height: 76rpx;
margin:0 auto;
display: flex;
}
.top{
line-height: 76rpx;
flex: 1;
}
.top image{
width: 36rpx;
height: 36rpx;
float: left;
margin-top: 20rpx;
}
.layel-title-content{
color: #353535;
font-size: 22rpx;
float: left;
margin-left: 10rpx;
}
.briken-line{
position: relative;
width: 94%;
height: 246rpx;
margin:0 auto;
background: #F8F8F8;
border-radius:24rpx;
}
.briken-line .line{
position: absolute;
top: 50%;
height: 2rpx;
width: 100%;
background: #dcdcdc;
}
ec-canvas {
width: 100%;
height: 246rpx;
}
.tips{
margin-top: 20rpx;
}
.tips image{
width: 24rpx;
height: 24rpx;
float: left;
margin-top: 4rpx;
margin-left: 10rpx;
margin-right: 6rpx;
}
.tips-content{
color: #B2B2B2;
font-size: 22rpx;
float: left;
}
.footer{
position: fixed;
bottom: 0rpx;
left: 0;
z-index: 90;
width: 100%;
height: 138rpx;
background: #FFFFFF;
overflow: hidden;
}
.btn{
width: 94%;
margin:0 auto;
background: #FF9B4D;
height: 96rpx;
margin-top: 22rpx;
border-radius:48rpx;
text-align: center;
line-height: 96rpx;
color: #FFFFFF;
}
.pass-score{
position: absolute;
top: 170rpx;
right: 60rpx;
color: #FFFFFF;
overflow: hidden;
}
.pass-number{
font-size: 160rpx;
color: #FFFFFF;
font-weight: bold;
float: left;
}
.pass-fen{
font-size: 24rpx;
font-weight: bold;
color: #FFFFFF;
float: right;
margin-left: 15rpx;
margin-top: 50rpx;
}
.share{
position: absolute;
overflow: hidden;
top:20%;
left:50%;
border-radius: 5px;
transform:translate(-50%,-50%);
}
.share-ce{
float: left;
}
.share image{
width: 80rpx;
height: 80rpx;
border-radius: 50%;
}
.photo{
width: 80rpx;
height: 80rpx;
background: #FFFFFF;
border-radius: 50%;
}
.share-name{
color: #FFFFFF;
font-size: 34rpx;
margin-left: 10rpx;
}
.share-time{
color: #FFFFFF;
font-size: 24rpx;
margin-left: 10rpx;
margin-top: 4rpx;
opacity: 0.6;
}
.share-content{
width: 100%;
font-size: 36rpx;
color: #FFFFFF;
font-weight: bold;
text-align: center;
position: absolute;
top:35%;
}
.share-text{
width: 100%;
font-size: 22rpx;
color: #FFFFFF;
text-align: center;
position: absolute;
top:45%;
opacity: 0.6;
}
.unit{
font-size: 22rpx;
font-weight: 400;
}
.samll{
font-size: 26rpx;
}
.pt-tips{
color: #353535;
font-size: 24rpx;
width: 94%;
margin: 0 auto;
margin-top: 20rpx;
text-align: center;
}
.pt-tips .names{
font-weight: bold;
}
.pt-tips .go{
color: #2D97E8;
margin-left: 12rpx;
}
.pt-tips image{
width: 100%;
height: 116rpx;
border-radius: 24rpx;
}
.challenge-mask{
position: fixed;
width: 100%;
height: 100%;
top: 0rpx;
left: 0rpx;
background: #000000;
opacity: 0.7;
z-index: 100;
}
.my-medal{
position: absolute;
overflow: hidden;
width: 80%;
left: 10%;
top: 50%;
margin-top: -330rpx;
z-index: 101;
text-align: center;
background: #FFFFFF;
border-radius: 24rpx;
}
.my-medal .medal{
width: 256rpx;
height: 256rpx;
margin-top: 30rpx;
}
.medal-title{
font-size: 40rpx;
font-weight: bold;
color: #353535;
margin-top: 70rpx;
}
.medal-name{
font-size: 34rpx;
font-weight: bold;
color: #353535;
margin-top: 10rpx;
}
.medal-content{
font-size: 28rpx;
color: #888888;
margin-top: 8rpx;
}
.medal-number{
color: #353535;
font-size: 28rpx;
margin-top: 20rpx;
margin-bottom: 40rpx;
}
.medal-btn{
width: 80%;
height: 96rpx;
margin: 0 auto;
line-height: 96rpx;
border-radius: 50rpx;
color: #FFFFFF;
background: #FF9B4D;
margin-top: 60rpx;
}
.cy-btn{
width: 80%;
height: 96rpx;
margin: 0 auto;
line-height: 96rpx;
border-radius: 50rpx;
color: #FFFFFF;
background: #FF9B4D;
margin-top: 20rpx;
}
.medal-close{
position: absolute;
width: 68rpx;
height: 68rpx;
right: 20rpx;
top: 20rpx;
}
.fail{
position: absolute;
width: 80%;
left: 10%;
top: 50%;
margin-top: -250rpx;
height: 500rpx;
background: #FFFFFF;
border-radius: 24rpx;
z-index: 101;
text-align: center;
}
.fail .content{
margin-top: 76rpx;
}
.fail .fail-text{
font-weight: bold;
color: #353535;
}
.fail-again{
width: 80%;
height: 96rpx;
line-height: 96rpx;
margin: 0 auto;
color: #FFFFFF;
text-align: center;
background: #FF9B4D;
margin-top: 64rpx;
border-radius: 50rpx;
}
.fail-rest{
width: 80%;
height: 96rpx;
line-height: 96rpx;
margin: 0 auto;
color: #FF9B4D;
text-align: center;
background: #FFFFFF;
margin-top: 20rpx;
border-radius: 50rpx;
border: 2rpx solid #FF9B4D;
}
button::after{
border: none;
}
.cy{
padding-top: 40rpx;
}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"usingComponents": {},
"navigationBarBackgroundColor": "#FFFFFF",
"navigationBarTextStyle": "black",
"navigationBarTitleText": "跳绳"
}
\ No newline at end of file
<view class="{{num==='开始'?'go mix':'go '}}" wx:if="{{num && startFlag}}">{{num}}</view>
<view class="skip-2" wx:if="{{start}}">
<image class="skip-icon" src="https://cdn.xiaobentiyu.cn/sport_minapp_img/skip/ship-icon.png"></image>
<view class="mode">
<picker bindchange="bindPickerChange" value="{{index}}" range="{{modeList}}" disabled="{{isPicker}}">
<view class="mode-sel {{isPicker?'gray':''}}">
{{modeVal}}
<image src="https://cdn.xiaobentiyu.cn/sport_minapp_img/jt3.png" class="jt"></image>
</view>
</picker>
<view wx-if="{{isLevel}}" class="level">
<image src="/images/skip/level.png"></image>
<view class="level-show">
<view style="height:100%;" wx:if="{{levelWidth <= 20}}">
<view class="level-data level-red" style="width:{{levelWidth}}%"></view>
</view>
<view style="height:100%;" wx:else>
<view class="level-data" style="width:{{levelWidth}}%"></view>
</view>
</view>
</view>
<view wx:if="{{levelWidth <= 20}}">
<view wx-if="{{isLevel}}" class="level-num red">跳绳: {{levelWidth}}%</view>
</view>
<view wx:else>
<view wx-if="{{isLevel}}" class="level-num">跳绳: {{levelWidth}}%</view>
</view>
<view class="edit" bindtap="goEdit" wx:if="{{isSz}}">设置</view>
<view class="edit-no" wx:else>设置</view>
</view>
<!-- pk模式 -->
<view class="my" wx:if="{{pk == 1}}">
<view class="main">
<scroll-view class="tab" scroll-x="true">
<radio-group class='free-radios' bindchange="radioChange">
<label wx:for="{{familyList}}" wx:key="{{items}}">
<radio value="{{item.peopleId}}"
checked="{{item.checked}}" hidden='true'></radio>
<view class="{{familyList.length == 2 ? 'item2' : familyList.length == 3 ? 'item3' : 'item' }} {{item.checked ? 'action' : ''}}">
<image class="header" src="{{item.imgSrc}}"></image>
<view class="name">{{item.name}}</view>
<view class="prepare" wx:if="{{item.state == 1}}">
准备跳绳...
</view>
<view class="prepare" wx:elif="{{item.state == 2}}">
正在跳绳...
</view>
<view class="score" wx:else>{{item.sportValue || ''}}</view>
<view class="mon" wx:if="{{item.relationShip == 22}}">妈妈</view>
<view class="fat" wx:if="{{item.relationShip == 21}}">爸爸</view>
<view class="sun" wx:if="{{item.relationShip == 11}}">孩子</view>
<view class="icon" wx:if="{{item.checked}}">
<image class="sel" src="https://cdn.xiaobentiyu.cn/sport_minapp_img/parentChild/sel.png"></image>
</view>
</view>
</label>
</radio-group>
</scroll-view>
</view>
</view>
<!-- 挑战模式 -->
<view class="medal" wx:if="{{isMedalShow}}">
<view class="name">{{medalName}}</view>
<view class="content">{{medalContent}}</view>
</view>
<view class="card">
<view class="bfc"></view>
<view class="top">
<view class="val">{{info.count || 0}}</view>
</view>
<view class="data-wrap">
<view class="item">
<image src="/images/skip/icon_time.png"></image>
<view class="val">{{showTime || "00:00"}}</view>
<view class="key">用时</view>
</view>
<view class="item">
<image src="/images/skip/icon_calorie.png"></image>
<view class="val">{{ info.calorie || 0}}</view>
<view class="key">千卡</view>
</view>
</view>
</view>
</view>
<view class="bluetooth">
<image wx:if="{{is_connect}}" src="/images/skip/ly.png"></image>
<image wx:else src="/images/skip/ly_off.png"></image>
<view wx:if="{{is_connect}}">跳绳已连接</view>
<view wx:else>跳绳未连接</view>
</view>
<view class="btn" bindtap="clickBtn">
<image src="/images/skip/icon_lj.png" wx:if="{{btnStaus == '连接'}}"></image>
<image src="/images/skip/icon_ks.png" wx:if="{{btnStaus == '开始'}}"></image>
<image src="/images/skip/icon_bc.png" wx:if="{{btnStaus == '保存'}}"></image>
{{btnStaus}}
</view>
<!-- 搜索设备前 -->
<view class="search-before" wx:if="{{before}}">
<image class="before-title" src="https://cdn.xiaobentiyu.cn/sport_minapp_img/skip/skip-top.png"></image>
<view class="before-tips">请按以下步骤操作</view>
<view class="skip-type">
<view class="one">
<image src="https://cdn.xiaobentiyu.cn/sport_minapp_img/skip/one.png"></image>
</view>
<view class="two">
<image src="https://cdn.xiaobentiyu.cn/sport_minapp_img/skip/two.png"></image>
</view>
</view>
<view class="before-strip">
<view class="strip-num">1</view>
<view class="strip-content">
<view class="small-title">奔腾宝贝企鹅跳绳开机</view>
<view class="small-tips">一代:长按智能跳绳开关键5秒至指示灯闪烁</view>
<view class="small-tips">二代:长按智能跳绳开关键2秒,待屏幕亮起</view>
</view>
</view>
<view class="before-strip">
<view class="strip-num">2</view>
<view class="strip-content">
<view class="small-title">打开手机蓝牙</view>
<view class="small-tips">操作:在手机“设置-蓝牙”中打开蓝牙</view>
</view>
</view>
<view class="before-strip">
<view class="strip-num">3</view>
<view class="strip-content">
<view class="small-title">打开微信定位权限</view>
<view class="small-tips">{{tipsCount}}</view>
</view>
</view>
</view>
<!-- 搜索设备 -->
<view class="search" wx:if="{{search}}">
<view class="search-text">正在搜索跳绳...</view>
<image class="phone" src="https://ttxs01-10066525.file.myqcloud.com/sport/miniapp/mobile/skip/phone.png"></image>
<image class="search-gif" src="http://cdn.xiaobentiyu.cn/images/search.gif"></image>
<image class="rope-gif" src="https://ttxs01-10066525.file.myqcloud.com/sport/miniapp/mobile/skip/lamp.png"></image>
<image class="ind-gif" src="https://ttxs01-10066525.file.myqcloud.com/sport/miniapp/mobile/skip/ind.gif"></image>
</view>
<!-- 搜索设备失败 -->
<view class="search-fail" wx:if="{{fail}}">
<view class="fail-title">未找到设备?</view>
<view class="fail-tips">请按以下步骤操作</view>
<view class="fail-strip">
<view class="fail-strip-num">1</view>
<view class="fail-strip-content">
<view class="fail-small-title">奔腾宝贝企鹅跳绳开机</view>
<view class="fail-small-tips">操作:长按智能跳绳开关键5秒至指示灯闪烁</view>
</view>
</view>
<view class="fail-strip">
<view class="fail-strip-num">2</view>
<view class="fail-strip-content">
<view class="fail-small-title">确认手机蓝牙已开启</view>
<view class="fail-small-tips">操作:在手机“设置-蓝牙”中打开蓝牙</view>
</view>
</view>
<view class="fail-strip">
<view class="fail-strip-num">3</view>
<view class="fail-strip-content">
<view class="fail-small-title">确认微信定位权限已开启</view>
<view class="fail-small-tips">{{tipsCount}}</view>
</view>
</view>
<view catchtap="again" class="again">重新搜索</view>
</view>
<!-- 设备列表 -->
<view class="devices-list-info" hidden="{{actionSheetHidden}}">
<view class="title">连接跳绳</view>
<view class="content">搜索到奔腾宝贝跳绳</view>
<view class="devices-list">
<view class="item" hover-class="active" wx:for="{{devices}}" bindtap="connect" data-device="{{item}}">
奔腾宝贝-{{item.name}}
</view>
</view>
</view>
<!-- 离线数据 -->
<view class="sq" wx:if="{{isupload && offTotalNum > 0}}">
<view class="mask"></view>
<view class="content">
<view class="sq-tips">提示</view>
<view class="text">您的奔腾宝贝智能跳绳中有未上传的训练数据:</view>
<view class="text2">跳绳时间:{{offTotalTime || 0}}秒,跳绳数量{{offTotalNum || 0}}个</view>
<view class="text">现在同步吗?</view>
<view class="sq-btn">
<view class="nextTime" bindtap="cancel">取消</view>
<view class="ensure" bindtap="upload">上传</view>
</view>
</view>
</view>
<!-- 缓存数据 -->
<view class="sq" wx:if="{{iscache && skipInfo.count > 0}}">
<view class="mask"></view>
<view class="content">
<view class="sq-tips">提示</view>
<view class="text">您的奔腾宝贝智能跳绳中有未上传的训练数据:</view>
<view class="text2">跳绳时间:{{skipTime || 0}}秒,跳绳数量{{skipInfo.count || 0}}个</view>
<view class="text">现在上传吗?</view>
<view class="sq-btn">
<view class="nextTime" bindtap="cachecancel">取消</view>
<view class="ensure" bindtap="cacheupload">上传</view>
</view>
</view>
</view>
<!-- pk模式下断绳 -->
<view class="sq" wx:if="{{isPk}}">
<view class="mask"></view>
<view class="content">
<view class="sq-tips">提示</view>
<view class="text">抱歉,由于蓝牙连接异常,智能跳绳无法正常连接!</view>
<view class="sq-btn">
<view class="nextTime" bindtap="abandonPk">保存数据,放弃pk</view>
<view class="ensure" bindtap="againPk">再次连接,继续pk</view>
</view>
</view>
</view>
<audio src="{{src}}" id="myAudio" ></audio>
.go {
font-family: 'Number';
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
background: #FF9B4D;
line-height: 800rpx;
text-align: center;
font-size: 300rpx;
color: #fff;
z-index: 30000;
}
.mix {
font-size: 200rpx;
}
.mode {
height: 88rpx;
text-align: center;
position: relative;
}
.jt {
width: 32rpx;
height: 32rpx;
position: relative;
top: 6rpx;
}
.set {
position: absolute;
right: 54rpx;
top: 126rpx
}
.set image {
width: 40rpx;
height: 42rpx;
}
.set view {
text-align: center;
font-size: 22rpx;
color: #666;
}
.card {
width: 100%;
height: 400rpx;
position: absolute;
top: 28%;
}
.bfc {
width: 100%;
height: 10rpx;
}
.top .key {
text-align: center;
font-size: 28rpx;
color: #666;
margin-top: 22rpx;
}
.top .val {
font-family: "Number";
text-align: center;
font-size: 124rpx;
margin-top: 0rpx;
margin-bottom: 30rpx;
}
.data-wrap {
display: flex;
margin-top: 100rpx;
}
.data-wrap .item {
flex: 1;
text-align: center
}
.data-wrap .key {
font-size: 22rpx;
color: #666;
}
.data-wrap .val text {
font-size: 18rpx;
font-weight: normal;
}
.data-wrap .val {
font-family: "Number";
font-size: 48rpx;
}
.bluetooth {
height: 50rpx;
margin: 40rpx auto 0 auto;
width: 220rpx;
}
.bluetooth image {
width: 32rpx;
height: 32rpx;
display: inline-block;
margin-top: 10rpx;
}
.bluetooth view {
height: 50rpx;
line-height: 50rpx;
display: inline-block;
vertical-align: top;
margin-left: 10rpx;
font-size: 28rpx;
color: #666;
}
.btn {
position: fixed;
left: 50%;
bottom: 140rpx;
width: 180rpx;
height: 180rpx;
border-radius: 50%;
line-height: 220rpx;
background: #FF9B4D;
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.06);
color: #fff;
text-align: center;
margin-left: -90rpx;
}
.btn image{
position: absolute;
left: 68rpx;
top:32rpx;
width: 48rpx;
height: 48rpx;
}
.level{
width:44rpx;
height:22rpx;
position:absolute;
top:36rpx;
left:30rpx;
overflow: hidden;
}
.level image{
width:44rpx;
height:22rpx;
position: absolute;
top: 0;
left: 0;
}
.level-show{
height: 70%;
width: 80%;
position: absolute;
left: 7%;
top: 15%;
/* margin-top:6rpx;
margin-left: 5rpx; */
}
.level-data{
height:100%;
background:#000000;
}
.level-num{
position: absolute;
top: 30rpx;
left: 84rpx;
overflow: hidden;
font-size: 24rpx;
float: left;
}
.level-red{
background: #FF1818;
}
.red{
color: #FF1818;
}
.search{
position: absolute;
width: 100%;
height: 100%;
background: #183247;
z-index: 99;
top: 0;
left: 0;
text-align: center;
}
.search .phone{
width: 360rpx;
height: 334rpx;
position: absolute;
bottom: 0;
left: 50%;
margin-left: -180rpx;
}
.search-gif{
width: 400rpx;
height: 236rpx;
position: absolute;
bottom: 360rpx;
left: 50%;
margin-left: -200rpx;
}
.rope-gif{
width: 560rpx;
height: 280rpx;
position: absolute;
bottom: 660rpx;
left: 0;
}
.ind-gif{
width: 50rpx;
height: 50rpx;
position: absolute;
bottom: 802rpx;
left: 454rpx;
}
.search-text{
width: 100%;
font-size: 36rpx;
font-weight: bold;
text-align: center;
color: #FFFFFF;
margin-top: 60rpx;
}
.search-tips{
width: 66%;
font-size: 26rpx;
margin-top: 20rpx;
text-align: left;
color: #6B6E7B;
margin: 0 auto;
margin-top: 20rpx;
}
.devices-info{
position: absolute;
width: 100%;
height: 100%;
background: #183247;
z-index: 10;
top: 0;
left: 0;
}
.devices-list-info{
position: absolute;
width: 100%;
height: 100%;
z-index: 10;
top: 0;
left: 0;
background: #183247;
}
.devices-list-info .title{
width: 100%;
text-align: center;
color: #FFFFFF;
font-size: 34rpx;
font-weight: bold;
margin-top: 80rpx;
}
.devices-list-info .content{
width: 100%;
text-align: center;
color: #6B6E7B;
font-size: 28rpx;
margin-top: 20rpx;
}
.devices-list{
width: 60%;
height: 400rpx;
margin:0 auto;
margin-top: 40rpx;
overflow: auto;
}
.devices-list .item{
width: 100%;
height: 120rpx;
line-height: 120rpx;
color: #FFFFFF;
text-align: center;
background: #2A4256;
border-radius: 24rpx;
margin-bottom: 30rpx;
}
.devices-list .active{
background: #FF9B4D;
}
.mode-sel{
font-size: 26rpx;
color: #353535;
margin:0 auto;
float: left;
position:absolute;
left:50%;
top:50%;
transform:translateX(-50%) translateY(-50%);
background: #F0F6FC;
border:2rpx solid #E8E8E8;
padding: 10rpx 28rpx 10rpx 38rpx;
border-radius:30rpx;
font-weight:bold;
}
.data-wrap .item image{
width: 40rpx;
height: 40rpx;
}
.edit{
position: absolute;
right: 40rpx;
top: 26rpx;
height: 40rpx;
font-size: 28rpx;
color: #353535;
}
.edit-no{
position: absolute;
right: 40rpx;
top: 26rpx;
height: 40rpx;
font-size: 28rpx;
color: #888888;
}
.edit image{
width: 40rpx;
height: 40rpx;
}
.goBuy{
position: fixed;
left: 3%;
bottom: 20rpx;
z-index: 9;
width: 94%;
height: 116rpx;
}
.goBuy .icon{
float: left;
width: 24rpx;
height: 24rpx;
margin-top: 28rpx;
margin-left: 24rpx;
}
.goBuy text{
float: left;
margin-left: 8rpx;
color: #FFFFFF;
font-size: 22rpx;
line-height: 80rpx;
}
.goBuy .adver{
width: 100%;
height: 116rpx;
border-radius: 24rpx;
}
.mark{
position: fixed;
background: #000000;
opacity: 0.3;
width: 100%;
height: 100%;
z-index: 9;
left: 0;
top: 0;
}
.tips{
position: absolute;
z-index: 10;
width: 90%;
left: 5%;
top: 50%;
height: 400rpx;
background: #FFFFFF;
border-radius: 12rpx;
margin-top: -200rpx;
}
.tips .title{
width: 100%;
font-size: 34rpx;
text-align: center;
color: #353535;
font-weight: bold;
margin-top: 70rpx;
}
.tips .content{
width: 90%;
height: 110rpx;
line-height: 60rpx;
font-size: 32rpx;
text-align: center;
color: #888888;
margin: 0 auto;
margin-top: 40rpx;
}
.tips .tips-btn{
width: 100%;
height: 130rpx;
display: flex;
}
.tips .tips-btn .btns{
flex: 1;
text-align: center;
font-size: 34rpx;
font-weight: bold;
line-height: 130rpx;
}
.sq .mask{
position: fixed;
width: 100%;
height: 100%;
left: 0;
top: 0;
background: #000000;
opacity: 0.2;
z-index: 9;
}
.sq .content{
position: absolute;
width: 90%;
height: 490rpx;
left: 5%;
top: 50%;
margin-top: -205rpx;
background: #FFFFFF;
border-radius: 24rpx;
z-index: 10;
}
.sq .sq-tips{
width: 100%;
height: 140rpx;
color: #353535;
line-height: 140rpx;
text-align: center;
font-size: 38rpx;
font-weight: bold;
}
.sq .text{
width: 80%;
margin: 16rpx auto 0px auto;
font-size: 30rpx;
font-family: PingFang SC;
font-weight: 400;
color: #888888;
}
.sq .text2{
width: 80%;
margin: 16rpx auto 0px auto;
font-size: 30rpx;
font-family: PingFang SC;
font-weight: bold;
color: #353535;
text-align: left;
}
.sq-btn{
width: 94%;
margin: 30rpx auto 0 auto;
display: flex;
}
.nextTime{
flex: 1;
height: 96rpx;
line-height: 96rpx;
border-radius: 50rpx;
background: #F5F5F5;
color: #FF9B4D;
text-align: center;
margin-right: 20rpx;
}
.ensure{
flex: 1;
height: 96rpx;
line-height: 96rpx;
border-radius: 50rpx;
background: #FF9B4D;
color: #FFFFFF;
text-align: center;
margin-left: 20rpx;
padding-left: 0rpx;
padding-right: 0rpx;
}
.medal{
text-align: center;
margin-top: 36rpx;
}
.medal .name{
font-size: 28rpx;
color: #353535;
font-weight: bold;
}
.medal .content{
font-size: 22rpx;
color: #B2B2B2;
margin-top: 8rpx;
}
.gray{
color: #B2B2B2;
}
.search-before{
width: 80%;
margin: 0 auto;
margin-top: 20rpx;
text-align: center;
}
.before-title{
width: 282rpx;
height: 66rpx;
}
.before-tips{
font-size: 28rpx;
color: rgba(0, 0, 0, 0.5);
margin-bottom: 60rpx;
}
.before-strip{
display: flex;
margin-top: 20rpx;
}
.strip-num{
font-size: 28rpx;
width: 40rpx;
height: 40rpx;
line-height: 40rpx;
color: #FFFFFF;
text-align: center;
background: rgba(0, 0, 0, 0.5);
border-radius: 50%;
}
.strip-content{
text-align: left;
margin-left: 10rpx;
flex: 1;
}
.strip-content .small-title{
font-size: 30rpx;
font-weight: bold;
color: #333333;
}
.strip-content .small-tips{
font-size: 26rpx;
font-weight: 400;
margin-top: 8rpx;
color: rgba(0, 0, 0, 0.5);
}
.search-fail{
position: fixed;
z-index: 99;
width: 100%;
height: 100%;
text-align: center;
background: #183247;
}
.fail-title{
color: #FFFFFF;
margin-top: 80rpx;
margin-bottom: 100rpx;
}
.fail-tips{
width: 80%;
margin: 0 auto;
color: #FFFFFF;
font-weight: bold;
font-size: 34rpx;
text-align: left;
}
.fail-strip{
width: 80%;
margin: 0 auto;
display: flex;
margin-top: 40rpx;
}
.fail-strip-num{
font-size: 28rpx;
width: 40rpx;
height: 40rpx;
line-height: 40rpx;
color: #2A475E;
text-align: center;
background: #FFFFFF;
border-radius: 50%;
}
.fail-strip-content{
text-align: left;
margin-left: 10rpx;
flex: 1;
}
.fail-strip-content .fail-small-title{
font-size: 30rpx;
font-weight: bold;
color: #FFFFFF;
}
.fail-strip-content .fail-small-tips{
font-size: 26rpx;
font-weight: 400;
margin-top: 8rpx;
color: #FFFFFF;
opacity: 0.72;
}
.again{
position: fixed;
width: 80%;
left: 10%;
bottom: 80rpx;
height: 96rpx;
line-height: 96rpx;
color: #FFFFFF;
background: #FF9B4D;
border-radius: 50rpx;
}
.bluetooth{
position: fixed;
left: 50%;
bottom: 340rpx;
width: 200rpx;
color: #fff;
text-align: center;
margin-left: -100rpx;
}
.my {
background: #FFFFFF;
padding-bottom: 20rpx;
border-radius: 0rpx 0rpx 24rpx 24rpx;
margin-top: 40rpx;
}
.top {
width: 94%;
margin: 0 auto;
height: 100rpx;
}
.top .name{
float: left;
font-size: 30rpx;
font-weight: bold;
margin-top: 30rpx;
}
.top .exchange{
float: left;
position: relative;
margin-top: 30rpx;
font-size: 22rpx;
color: #FFFFFF;
background: #FF9B4D;
padding: 8rpx 20rpx;
border-radius: 24rpx;
margin-left: 10rpx;
}
.top .exchange text{
padding-left: 22rpx;
}
.top .exchange image{
position: absolute;
width: 26rpx;
height: 26rpx;
left: 16rpx;
top: 10rpx;
}
.main {
width: 100%;
margin: 0 auto;
}
.tab {
width: 94%;
height: 100%;
margin: 0 auto;
box-sizing: border-box;
white-space: nowrap;
}
.main .item {
position: relative;
text-align: center;
display: inline-block;
overflow: hidden;
width: 184rpx;
height: 224rpx;
background: #F8F8F8;
border-radius: 16rpx;
margin-right: 16rpx;
}
.main .item2 {
position: relative;
text-align: center;
display: inline-block;
overflow: hidden;
width: 46%;
height: 224rpx;
background: #F8F8F8;
border-radius: 16rpx;
margin-right: 16rpx;
}
.main .item3 {
position: relative;
text-align: center;
display: inline-block;
overflow: hidden;
width: 30%;
height: 224rpx;
background: #F8F8F8;
border-radius: 16rpx;
margin-right: 16rpx;
}
.main .item-add {
position: relative;
text-align: center;
display: inline-block;
overflow: hidden;
width: 136rpx;
height: 196rpx;
background: #FFFFFF;
border: 2rpx solid #F1F1F1;
border-radius: 16rpx;
margin-right: 16rpx;
}
.management{
position: relative;
float: right;
padding-right: 30rpx;
font-size: 28rpx;
position: relative;
margin-top: 32rpx;
font-weight: bold;
}
.management .next{
position: absolute;
right: 0rpx;
top: 2rpx;
width: 32rpx;
height: 32rpx;
}
.header {
margin-top: 36rpx;
width: 72rpx;
height: 72rpx;
}
.sel {
position: absolute;
width: 40rpx;
height: 36rpx;
right: -2rpx;
bottom: -2rpx;
}
.name {
width: 70%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: 24rpx;
color: #353535;
margin: 0 auto;
margin-top: 12rpx;
}
.mon {
position: absolute;
top: 80rpx;
left: 80rpx;
font-size: 16rpx;
color: #FFFFFF;
padding: 4rpx;
background: #FF5588;
border-radius: 6rpx;
}
.fat {
position: absolute;
top: 80rpx;
left: 50%;
font-size: 16rpx;
color: #FFFFFF;
padding: 4rpx;
background: #49B7FF;
border-radius: 6rpx;
}
.sun {
position: absolute;
top: 80rpx;
left: 80rpx;
font-size: 16rpx;
color: #FFFFFF;
padding: 4rpx;
background: #FF5588;
border-radius: 6rpx;
}
.banner {
width: 94%;
margin: 0 auto;
margin-top: 20rpx;
}
.banner image {
width: 100%;
height: 116rpx;
border-radius: 24rpx;
}
.main .action {
border: 4rpx solid #FF9B4D;
}
.my-data {
width: 94%;
margin-top: 20rpx;
padding: 20rpx 3%;
border-radius: 24rpx 24rpx 0px 0px;
background-color: #FFFFFF;
}
.score{
font-family: 'Number';
font-size: 40rpx;
}
.prepare{
font-size: 24rpx;
color: #888888;
}
.skip-type{
position: relative;
width: 100%;
height: 280rpx;
margin: 0 auto;
margin-top: -44rpx;
}
.one image{
position: absolute;
width: 280rpx;
height: 280rpx;
left: 0rpx;
}
.two image{
position: absolute;
right: 0rpx;
width: 280rpx;
height: 280rpx;
}
.skip-2{
position: absolute;
width: 100%;
height: 100%;
background:url('https://cdn.xiaobentiyu.cn/sport_minapp_img/skip/skip-bg2.png') #EBF6FF no-repeat;
background-size: 100% 100%;
}
.skip-icon{
position: fixed;
left: 50%;
bottom: 410rpx;
width: 172rpx;
height: 200rpx;
margin-left: -86rpx;
}
\ No newline at end of file
...@@ -230,7 +230,7 @@ Page({ ...@@ -230,7 +230,7 @@ Page({
start(){ start(){
var that = this; var that = this;
var downTime = this.data.downTime; var downTime = this.data.downTime;
that.palyLocal('/packageC/images/skip.mp3'); that.palyLocal('/images/ai/push.mp3');
that.data.prepare = setTimeout(()=>{ that.data.prepare = setTimeout(()=>{
that.setData({ that.setData({
aiState:2 aiState:2
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
</camera> </camera>
<view wx:if="{{aiState == 1 || aiState == 6}}"> <view wx:if="{{aiState == 1 || aiState == 6}}">
<image class="ywqz-help-img" src="{{showImageUrl}}"></image> <image class="ywqz-help-img" src="{{showImageUrl}}"></image>
<view class="ywqz-help"> <view class="help">
<view class="title">互动小提示</view> <view class="title">互动小提示</view>
<view class="content">手机竖屏固定放置,调整屏幕角度,训练者全身及双脚出现至屏幕内,识别更精准。</view> <view class="content">手机竖屏固定放置,调整屏幕角度,训练者全身及双脚出现至屏幕内,识别更精准。</view>
</view> </view>
......
...@@ -233,7 +233,7 @@ Page({ ...@@ -233,7 +233,7 @@ Page({
start(){ start(){
var that = this; var that = this;
var downTime = this.data.downTime; var downTime = this.data.downTime;
that.palyLocal('/packageC/images/skip.mp3'); that.palyLocal('/images/ai/highLegLifts.mp3');
that.data.prepare = setTimeout(()=>{ that.data.prepare = setTimeout(()=>{
that.setData({ that.setData({
aiState:2 aiState:2
......
...@@ -231,7 +231,7 @@ Page({ ...@@ -231,7 +231,7 @@ Page({
start(){ start(){
var that = this; var that = this;
var downTime = this.data.downTime; var downTime = this.data.downTime;
that.palyLocal('/packageC/images/skip.mp3'); that.palyLocal('/images/ai/jump.mp3');
that.data.prepare = setTimeout(()=>{ that.data.prepare = setTimeout(()=>{
that.setData({ that.setData({
aiState:2 aiState:2
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* @eMail: 932055106@qq.com * @eMail: 932055106@qq.com
* @Date: 2022-05-11 09:53:47 * @Date: 2022-05-11 09:53:47
* @LastEditors: tangjiale * @LastEditors: tangjiale
* @LastEditTime: 2022-06-08 14:56:37 * @LastEditTime: 2022-06-10 10:37:45
*/ */
var API = require("../../../utils/request"); var API = require("../../../utils/request");
...@@ -17,8 +17,12 @@ var angle_boby = 0; ...@@ -17,8 +17,12 @@ var angle_boby = 0;
var angle_hand_l = 0; var angle_hand_l = 0;
module.exports = Behavior({ module.exports = Behavior({
onLoad:function(option){ created:function(option){
count = 0
correct = 0
dir = 0
angle_boby = 0
angle_hand_l = 0
}, },
data: { data: {
showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/push-ups-bg.png' showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/push-ups-bg.png'
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* @eMail: 932055106@qq.com * @eMail: 932055106@qq.com
* @Date: 2022-05-11 09:53:47 * @Date: 2022-05-11 09:53:47
* @LastEditors: tangjiale * @LastEditors: tangjiale
* @LastEditTime: 2022-06-08 14:57:10 * @LastEditTime: 2022-06-10 10:37:48
*/ */
// 拐踢毽子计算配置 // 拐踢毽子计算配置
...@@ -20,8 +20,14 @@ var correct = 0; ...@@ -20,8 +20,14 @@ var correct = 0;
module.exports = Behavior({ module.exports = Behavior({
onLoad:function(option){ created:function(option){
left_foot = 0
right_foot = 0
count = 0
let_switch = 0
right_switch = 0
angle_hand = 0
correct = 0
}, },
data: { data: {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* @eMail: 932055106@qq.com * @eMail: 932055106@qq.com
* @Date: 2022-05-11 09:53:47 * @Date: 2022-05-11 09:53:47
* @LastEditors: tangjiale * @LastEditors: tangjiale
* @LastEditTime: 2022-06-08 14:57:19 * @LastEditTime: 2022-06-10 10:37:50
*/ */
var API = require("../../../utils/request"); var API = require("../../../utils/request");
...@@ -17,8 +17,11 @@ var angle_l = 0; ...@@ -17,8 +17,11 @@ var angle_l = 0;
var angle_r = 0; var angle_r = 0;
module.exports = Behavior({ module.exports = Behavior({
onLoad:function(option){ created:function(option){
count = 0
dirr = 0
angle_l = 0
angle_r = 0
}, },
data: { data: {
showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/squat-bg.png' showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/squat-bg.png'
......
...@@ -3,13 +3,12 @@ ...@@ -3,13 +3,12 @@
* @eMail: 932055106@qq.com * @eMail: 932055106@qq.com
* @Date: 2022-05-11 09:53:47 * @Date: 2022-05-11 09:53:47
* @LastEditors: tangjiale * @LastEditors: tangjiale
* @LastEditTime: 2022-06-08 15:07:12 * @LastEditTime: 2022-06-10 10:36:16
*/ */
var API = require("../../../utils/request"); var API = require("../../../utils/request");
// AI混淆 // AI混淆
var count = 0; var count = 0;
var correct = 0;
var dir = 0;// 0躺下 1坐起 var dir = 0;// 0躺下 1坐起
var angle_foot = 0; var angle_foot = 0;
...@@ -17,8 +16,12 @@ var angle_hand = 0; ...@@ -17,8 +16,12 @@ var angle_hand = 0;
var correct = 0;//识别成功次数 var correct = 0;//识别成功次数
module.exports = Behavior({ module.exports = Behavior({
onLoad:function(option){ created:function(option){
count = 0
correct = 0
dir = 0
angle_foot = 0
angle_hand = 0
}, },
data: { data: {
showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/jumping-jacks.png' showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/jumping-jacks.png'
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* @eMail: 932055106@qq.com * @eMail: 932055106@qq.com
* @Date: 2022-05-11 09:53:47 * @Date: 2022-05-11 09:53:47
* @LastEditors: tangjiale * @LastEditors: tangjiale
* @LastEditTime: 2022-06-08 14:57:38 * @LastEditTime: 2022-06-10 10:37:54
*/ */
var API = require("../../../utils/request"); var API = require("../../../utils/request");
...@@ -16,8 +16,12 @@ var angle_boby = 0; ...@@ -16,8 +16,12 @@ var angle_boby = 0;
var angle_tui = 0; var angle_tui = 0;
module.exports = Behavior({ module.exports = Behavior({
onLoad:function(option){ created:function(option){
count = 0
correct = 0
dir = 0
angle_boby = 0
angle_tui = 0
}, },
data: { data: {
showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/squat-bg.png' showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/squat-bg.png'
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* @eMail: 932055106@qq.com * @eMail: 932055106@qq.com
* @Date: 2022-05-11 09:53:47 * @Date: 2022-05-11 09:53:47
* @LastEditors: tangjiale * @LastEditors: tangjiale
* @LastEditTime: 2022-06-08 14:57:46 * @LastEditTime: 2022-06-10 10:37:56
*/ */
var API = require("../../../utils/request"); var API = require("../../../utils/request");
...@@ -18,8 +18,13 @@ var angle_r = 0; ...@@ -18,8 +18,13 @@ var angle_r = 0;
var angle_boby = 0; var angle_boby = 0;
module.exports = Behavior({ module.exports = Behavior({
onLoad:function(option){ created:function(option){
count = 0
correct = 0
dir = 0
dirr = 0
angle_l = 0
angle_r = 0
}, },
data: { data: {
showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/jumping-jacks.png' showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/jumping-jacks.png'
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* @eMail: 932055106@qq.com * @eMail: 932055106@qq.com
* @Date: 2022-05-11 09:53:47 * @Date: 2022-05-11 09:53:47
* @LastEditors: tangjiale * @LastEditors: tangjiale
* @LastEditTime: 2022-06-08 14:57:52 * @LastEditTime: 2022-06-10 10:37:59
*/ */
var API = require("../../../utils/request"); var API = require("../../../utils/request");
// 拐踢毽子计算配置 // 拐踢毽子计算配置
...@@ -24,8 +24,8 @@ var hanld_a = 0; ...@@ -24,8 +24,8 @@ var hanld_a = 0;
var p = 0; var p = 0;
module.exports = Behavior({ module.exports = Behavior({
onLoad:function(option){ created:function(option){
dir = 0;count = 0;angle_foot = 0;angle_knee = 0;correct = 0;lastAngle = 0; pointList = [];point = 0;equal = 0;equal = 0;equal = 0;prey = 0;hanld = 0;hanld_a = 0;p = 0
}, },
data: { data: {
showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/jumping-jacks.png', showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/jumping-jacks.png',
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* @eMail: 932055106@qq.com * @eMail: 932055106@qq.com
* @Date: 2022-05-11 09:53:47 * @Date: 2022-05-11 09:53:47
* @LastEditors: tangjiale * @LastEditors: tangjiale
* @LastEditTime: 2022-06-08 14:58:10 * @LastEditTime: 2022-06-10 10:38:00
*/ */
var API = require("../../../utils/request"); var API = require("../../../utils/request");
...@@ -19,8 +19,14 @@ var angle_r = 0; ...@@ -19,8 +19,14 @@ var angle_r = 0;
module.exports = Behavior({ module.exports = Behavior({
onLoad:function(option){ created:function(option){
count = 0
correct = 0
dir = 0
dirr = 0
angle_boby = 0
angle_l = 0
angle_r = 0
}, },
data: { data: {
showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/squat-bg.png' showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/squat-bg.png'
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* @eMail: 932055106@qq.com * @eMail: 932055106@qq.com
* @Date: 2022-05-11 09:53:47 * @Date: 2022-05-11 09:53:47
* @LastEditors: tangjiale * @LastEditors: tangjiale
* @LastEditTime: 2022-06-08 14:58:23 * @LastEditTime: 2022-06-10 10:37:25
*/ */
var API = require("../../../utils/request"); var API = require("../../../utils/request");
...@@ -18,8 +18,14 @@ var angle_l = 0; ...@@ -18,8 +18,14 @@ var angle_l = 0;
var angle_r = 0; var angle_r = 0;
module.exports = Behavior({ module.exports = Behavior({
onLoad:function(option){ created:function(option){
count = 0
correct = 0
dir = 0
dirr = 0
angle_boby = 0
angle_l = 0
angle_r = 0
}, },
data: { data: {
showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/squat-bg.png' showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/squat-bg.png'
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* @eMail: 932055106@qq.com * @eMail: 932055106@qq.com
* @Date: 2022-05-11 09:53:47 * @Date: 2022-05-11 09:53:47
* @LastEditors: tangjiale * @LastEditors: tangjiale
* @LastEditTime: 2022-06-08 14:58:32 * @LastEditTime: 2022-06-10 10:37:38
*/ */
var API = require("../../../utils/request"); var API = require("../../../utils/request");
...@@ -14,8 +14,10 @@ var correct = 0;//识别成功次数 ...@@ -14,8 +14,10 @@ var correct = 0;//识别成功次数
var dir = 0;// 0躺下 1坐起 var dir = 0;// 0躺下 1坐起
module.exports = Behavior({ module.exports = Behavior({
onLoad:function(option){ created:function(option){
count = 0
correct = 0
dir = 0
}, },
data: { data: {
showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/bg-sit.png' showImageUrl:'https://cdn.xiaobentiyu.cn/sport_minapp_img/sitUp/bg-sit.png'
......
...@@ -232,7 +232,7 @@ Page({ ...@@ -232,7 +232,7 @@ Page({
start(){ start(){
var that = this; var that = this;
var downTime = this.data.downTime; var downTime = this.data.downTime;
that.palyLocal('/packageC/images/skip.mp3'); that.palyLocal('/images/ai/deep.mp3');
that.data.prepare = setTimeout(()=>{ that.data.prepare = setTimeout(()=>{
that.setData({ that.setData({
aiState:2 aiState:2
......
...@@ -232,7 +232,7 @@ Page({ ...@@ -232,7 +232,7 @@ Page({
start(){ start(){
var that = this; var that = this;
var downTime = this.data.downTime; var downTime = this.data.downTime;
that.palyLocal('/packageC/images/skip.mp3'); that.palyLocal('/images/ai/shuttlecock.mp3');
that.data.prepare = setTimeout(()=>{ that.data.prepare = setTimeout(()=>{
that.setData({ that.setData({
aiState:2 aiState:2
......
...@@ -232,7 +232,7 @@ Page({ ...@@ -232,7 +232,7 @@ Page({
start(){ start(){
var that = this; var that = this;
var downTime = this.data.downTime; var downTime = this.data.downTime;
that.palyLocal('/packageC/images/skip.mp3'); that.palyLocal('/images/ai/skip.mp3');
that.data.prepare = setTimeout(()=>{ that.data.prepare = setTimeout(()=>{
that.setData({ that.setData({
aiState:2 aiState:2
......
...@@ -232,7 +232,7 @@ Page({ ...@@ -232,7 +232,7 @@ Page({
start(){ start(){
var that = this; var that = this;
var downTime = this.data.downTime; var downTime = this.data.downTime;
that.palyLocal('/packageC/images/skip.mp3'); that.palyLocal('/images/ai/skip.mp3');
that.data.prepare = setTimeout(()=>{ that.data.prepare = setTimeout(()=>{
that.setData({ that.setData({
aiState:2 aiState:2
......
...@@ -232,7 +232,7 @@ Page({ ...@@ -232,7 +232,7 @@ Page({
start(){ start(){
var that = this; var that = this;
var downTime = this.data.downTime; var downTime = this.data.downTime;
that.palyLocal('/packageC/images/skip.mp3'); that.palyLocal('/images/ai/hipKicked.mp3');
that.data.prepare = setTimeout(()=>{ that.data.prepare = setTimeout(()=>{
that.setData({ that.setData({
aiState:2 aiState:2
......
...@@ -228,7 +228,7 @@ Page({ ...@@ -228,7 +228,7 @@ Page({
start(){ start(){
var that = this; var that = this;
var downTime = this.data.downTime; var downTime = this.data.downTime;
that.palyLocal('/packageC/images/skip.mp3'); that.palyLocal('/images/ai/sit.mp3');
that.data.prepare = setTimeout(()=>{ that.data.prepare = setTimeout(()=>{
that.setData({ that.setData({
aiState:2 aiState:2
......
...@@ -57,7 +57,7 @@ Page({ ...@@ -57,7 +57,7 @@ Page({
mode = 4 mode = 4
} }
wx.redirectTo({ wx.redirectTo({
// url: '../skip/skip/skip?mode=' + mode, url: '../../bluetooth/skip/skip?mode=' + mode,
}) })
}else if(that.data.type == 2){ }else if(that.data.type == 2){
console.log('计数跳') console.log('计数跳')
...@@ -75,12 +75,12 @@ Page({ ...@@ -75,12 +75,12 @@ Page({
mode = 14 mode = 14
} }
wx.redirectTo({ wx.redirectTo({
// url: '../skip/skip/skip?mode=' + mode, url: '../../bluetooth/skip/skip?mode=' + mode,
}) })
}else if(that.data.type == 3){ }else if(that.data.type == 3){
console.log('自由模式') console.log('自由模式')
wx.redirectTo({ wx.redirectTo({
// url: '../skip/skip/skip?mode=1', url: '../../bluetooth/skip/skip?mode=1',
}) })
} }
}, },
......
module.exports = {
inArray(arr, key, val) {
for (let i = 0; i < arr.length; i++) {
if (arr[i][key] === val) {
return i;
}
}
return -1;
},
// ArrayBuffer转16进度字符串示例
ab2hex(buffer) {
var hexArr = Array.prototype.map.call(
new Uint8Array(buffer),
function (bit) {
return ('00' + bit.toString(16)).slice(-2)
}
)
return hexArr.join(',');
},
//16进制字符串转成10进制数组
hex2int(hex) {
    var len = hex.length, a = new Array(len), code;
    for (var i = 0; i < len; i++) {
        code = hex.charCodeAt(i);
        if (48<=code && code < 58) {
            code -= 48;
        } else {
            code = (code & 0xdf) - 65 + 10;
        }
        a[i] = code;
    }
    
    return a.reduce(function(acc, c) {
        acc = 16 * acc + c;
        return acc;
    }, 0);
},
//前面不满8位补0
formatZero(num,len) {
var num = num.toString(16);
if(String(num).length > len) return num;
return (Array(len).join(0) + num).slice(-len);
},
//时间戳转换yyyy-MM-dd HH:mm:ss
formatDate(date) {
var date = new Date(date);
var YY = date.getFullYear() + '-';
var MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
var DD = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate());
var hh = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
var mm = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
var ss = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());
return YY + MM + DD +" "+hh + mm + ss;
},
//解析设备状态数据
parsingState(arr){
//console.log('封装方法')
var that = this;
var stateObj = {};
let time16 = arr[3] + arr[4] + arr[5] + arr[6];
stateObj.time = that.formatDate(that.hex2int(time16) * 1000); //时间
stateObj.version = that.hex2int(arr[8] + arr[9]); //版本号
stateObj.manuf = that.hex2int(arr[10] + arr[11]); //产商号
stateObj.pac = that.hex2int(arr[12] + arr[13]) / 1000 + 'v'; //电量
stateObj.percent = (that.hex2int(arr[12] + arr[13]) - 2000) / 10; //电量百分比
//console.log('当前解析设备状态的数据',stateObj)
return stateObj;
//that.writeBLECharacteristicValueHistory(wx.getStorageSync('deviceInfo'));
},
//解析历史数据状态数据
parsingHistory(arr){
var that = this;
var stateObj = {};
let total = arr[3];
let over = arr[4];
let startTime16 = arr[5] + arr[6] + arr[7] + arr[8];
let endTime16 = arr[9] + arr[10] + arr[11] + arr[12];
stateObj.overTotal = that.hex2int(total) - that.hex2int(over);//剩余完成的历史数据上传
stateObj.startTime = that.hex2int(startTime16); //开始时间
stateObj.endTime = that.hex2int(endTime16); //结束时间
stateObj.historyCount = that.hex2int(arr[13] + arr[14] + arr[15] + arr[16]); //圈数
//console.log('当前解析历史数据状态数据',stateObj)
return stateObj;
},
//解析准备状态数据
parsingPrepare(arr){
if(arr[3] == '00'){
console.log('准备成功')
}else{
console.log('准备失败')
}
},
//解析开始状态数据
parsingStart(arr){
var that = this;
var stateObj = {};
let time16 = arr[8] + arr[9] + arr[10] + arr[11];
// let nowTime = Date.parse( new Date() ).toString().substr(0,10);
// if(nowTime - that.hex2int(time16) > 2){
// console.log('当前为蓝牙缓存数据,不执行解析操作')
// return false;
// }
stateObj.time = that.hex2int(time16); //时间
stateObj.count = that.hex2int(arr[4] + arr[5] + arr[6] + arr[7]); //个数
return stateObj;
},
//解析暂停状态数据
parsingPause(arr){
var that = this;
var stateObj = {};
stateObj.count = that.hex2int(arr[3] + arr[4] + arr[5] + arr[6]); //个数
console.log('暂停成功')
console.log('当前解析出来的数据',stateObj)
},
//解析结束状态数据
parsingEnd(arr){
var that = this;
var stateObj = {};
stateObj.count = that.hex2int(arr[3] + arr[4] + arr[5] + arr[6]); //个数
//console.log('结束成功')
//console.log('当前解析出来的数据',stateObj)
return stateObj;
},
//解析振动状态数据
parsingVibration(arr){
if(arr[3] == '01'){
console.log('震动成功')
}else{
console.log('震动无效果')
}
},
//发送数据
writeBLECharacteristicValue(deviceInfo,buffer){
var that = this;
wx.writeBLECharacteristicValue({
deviceId: deviceInfo.deviceId,
serviceId: deviceInfo.serviceId,
characteristicId: deviceInfo.characteristicId,
value: buffer,
success: function (res) {
console.log("success 指令发送成功,当前指令",that.ab2hex(buffer));
},
fail: function (res) {
// fail
console.log("error 指令发送失败",that.ab2hex(buffer));
console.log(res);
}
})
},
//设备状态
writeBLECharacteristicValueState(deviceInfo){
var that = this;
let time = (Date.parse(new Date()) / 1000).toString(16);
let value1 = '0x' + time.substring(0,2);
let value2 = '0x' + time.substring(2,4);
let value3 = '0x' + time.substring(4,6);
let value4 = '0x' + time.substring(6,8);
let buffer = new ArrayBuffer(10)
let dataView = new DataView(buffer)
dataView.setUint8(0,0x2a)
dataView.setUint8(1,0x71)
dataView.setUint8(2,0x05)
dataView.setUint8(3,value1)
dataView.setUint8(4,value2)
dataView.setUint8(5,value3)
dataView.setUint8(6,value4)
dataView.setUint8(7,0x08)
dataView.setUint8(8,0x00)
dataView.setUint8(9,0x00)
//console.log('设备状态的参数',deviceInfo)
that.writeBLECharacteristicValue(deviceInfo,buffer);
},
//历史数据
writeBLECharacteristicValueHistory(deviceInfo){
var that = this;
// 向蓝牙设备发送一个0x00的16进制数据
let buffer = new ArrayBuffer(5)
let dataView = new DataView(buffer)
dataView.setUint8(0,0x2a)
dataView.setUint8(1,0x73)
dataView.setUint8(2,0x00)
dataView.setUint8(3,0x00)
dataView.setUint8(4,0x00)
//console.log('历史数据的参数',deviceInfo)
that.writeBLECharacteristicValue(deviceInfo,buffer);
},
//准备
writeBLECharacteristicValuePrepare(deviceInfo) {
var that = this;
// 向蓝牙设备发送一个0x00的16进制数据
let buffer = new ArrayBuffer(6)
let dataView = new DataView(buffer)
dataView.setUint8(0,0x93)
dataView.setUint8(1,0x71)
dataView.setUint8(2,0x01)
dataView.setUint8(3,0x00)
dataView.setUint8(4,0x00)
dataView.setUint8(5,0x00)
that.writeBLECharacteristicValue(deviceInfo,buffer);
},
//开始
writeBLECharacteristicValueStart(deviceInfo,num,time){
var that = this;
//newSkip.formatZero
var format = that.formatZero(num,8);
var time = that.formatZero(time,8);
//console.log('当前开始的个数',format)
var start1 = '0x' + format.substring(0,2);
var start2 = '0x' + format.substring(2,4);
var start3 = '0x' + format.substring(4,6);
var start4 = '0x' + format.substring(6,8);
//console.log('当前开始的时长',time)
var time1 = '0x' + time.substring(0,2);
var time2 = '0x' + time.substring(2,4);
var time3 = '0x' + time.substring(4,6);
var time4 = '0x' + time.substring(6,8);
//console.log('当前开始的个数补位后数字',start1,start2,start3,start4)
var cs = that.formatZero(0x93 + 0x71 + 0x05 + 0x01 + Number(start1) + Number(start2) + Number(start3) + Number(start4) + Number(time1) + Number(time2) + Number(time3) + Number(time4),4);
//console.log('检测码的值',cs)
var cs1 = '0x' + cs.substring(0,2);
var cs2 = '0x' + cs.substring(2,4);
//console.log('检测码',cs1,cs2)
// 向蓝牙设备发送一个0x00的16进制数据
let buffer = new ArrayBuffer(14)
let dataView = new DataView(buffer)
dataView.setUint8(0,0x93)
dataView.setUint8(1,0x71)
dataView.setUint8(2,0x09)
dataView.setUint8(3,0x01)
dataView.setUint8(4,start1)
dataView.setUint8(5,start2)
dataView.setUint8(6,start3)
dataView.setUint8(7,start4)
dataView.setUint8(8,time1)
dataView.setUint8(9,time2)
dataView.setUint8(10,time3)
dataView.setUint8(11,time4)
dataView.setUint8(12,cs1)
dataView.setUint8(13,cs2)
that.writeBLECharacteristicValue(deviceInfo,buffer);
},
//暂停
writeBLECharacteristicValuePause(deviceInfo){
var that = this;
// 向蓝牙设备发送一个0x00的16进制数据
let buffer = new ArrayBuffer(6)
let dataView = new DataView(buffer)
dataView.setUint8(0,0x93)
dataView.setUint8(1,0x75)
dataView.setUint8(2,0x01)
dataView.setUint8(3,0x00)
dataView.setUint8(4,0x00)
dataView.setUint8(5,0x00)
that.writeBLECharacteristicValue(deviceInfo,buffer);
},
//结束
writeBLECharacteristicValueEnd(deviceInfo){
var that = this;
// 向蓝牙设备发送一个0x00的16进制数据
let buffer = new ArrayBuffer(6)
let dataView = new DataView(buffer)
dataView.setUint8(0,0x93)
dataView.setUint8(1,0x77)
dataView.setUint8(2,0x01)
dataView.setUint8(3,0x00)
dataView.setUint8(4,0x00)
dataView.setUint8(5,0x00)
that.writeBLECharacteristicValue(deviceInfo,buffer);
},
//振动
writeBLECharacteristicValueVibration(deviceInfo){
var that = this;
// 向蓝牙设备发送一个0x00的16进制数据
let buffer = new ArrayBuffer(6)
let dataView = new DataView(buffer)
dataView.setUint8(0,0x93)
dataView.setUint8(1,0x79)
dataView.setUint8(2,0x01)
dataView.setUint8(3,0x01)
dataView.setUint8(4,0x00)
dataView.setUint8(5,0x00)
that.writeBLECharacteristicValue(deviceInfo,buffer);
},
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment