├── .gitignore
├── README.md
├── _static
├── AI-Thinker.png
├── IMG_20211123_231112.png
├── fonts
│ ├── font.wxss
│ ├── iconfont.svg
│ └── iconfont.ttf
├── gh_860fe35e8c08_344.jpg
├── module.png
└── setup.png
├── app.js
├── app.json
├── app.wxss
├── pages
├── airkiss
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
├── blueDevices
│ ├── bluetooth
│ │ ├── blueDevices.js
│ │ ├── blueDevices.json
│ │ ├── blueDevices.wxml
│ │ └── blueDevices.wxss
│ └── bluetoothChat
│ │ ├── index.js
│ │ ├── index.json
│ │ ├── index.wxml
│ │ └── index.wxss
└── index
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
├── project.config.json
├── sitemap.json
├── utils
└── util.js
└── weui.wxss
/.gitignore:
--------------------------------------------------------------------------------
1 | # Windows
2 | [Dd]esktop.ini
3 | Thumbs.db
4 | $RECYCLE.BIN/
5 |
6 | # macOS
7 | .DS_Store
8 | .fseventsd
9 | .Spotlight-V100
10 | .TemporaryItems
11 | .Trashes
12 |
13 | # Node.js
14 | node_modules/
15 | # libs/xuhongv-airkiss-wx.js
16 | # libs/gl-airkiss-wx.js.bat
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | AiThinkerAirkissforWXMini, just an wechat component library!
8 | 可实现airkiss一键配网的微信小程序
9 |
10 |
11 |
12 |
13 |
24 |
25 |
26 |
27 | ## 维护日志,版本修订;
28 |
29 | |修改时间|更新日志|
30 | |----|----|
31 | |2021.11.24|首次发布|
32 | |2022.6.6|更新airkiss底层库版本,修复当mac地址为空的bug|
33 |
34 | ## 一、关于 WeChatAirkiss
35 |
36 | 本开源工程由半颗心脏基于微信配网airkiss协议做的一个开源微信配网小程序,适合于安信可在售的众多款Wi-Fi模组,包括 ESP32C3\ESP8266\ESP32\ESP32S2系列的模组。
37 |
38 | 如果您需要对应支持airkiss配网协议的无线模组,请到安信可淘宝店购买:[点击访问](https://mp.weixin.qq.com/wxopen/plugindevdoc?appid=wx610ea582556c983e&token=1116556150&lang=zh_CN)
39 |
40 | ## 二、airkiss 简介
41 |
42 | AirKiss是微信硬件平台为Wi-Fi设备提供的微信配网、局域网发现和局域网通讯的技术。开发者若要实现通过微信客户端对Wi-Fi设备配网、通过微信客户端在局域网发现Wi-Fi设备,或者把微信客户端内的音乐、图片、文件等消息通过局域网发送至Wi-Fi设备。
43 |
44 | 设备进入 Wi-Fi 混杂模式(promiscuous mode)以监听捕获周围的 Wi-Fi 报文。由于设备暂未联网,且 Wi-Fi 网络的数据帧已通过加密,设备无法获取 payload 的内容,但可以获取报文的某些特征数据,例如每个报文的长度,同时对于某些数据帧;例如 UDP 的广播包或多播包,其报文的帧头结构比较固定,较容易识别。
45 |
46 | 此时在手机 App 或者小程序侧,即可通过发送 UDP 的广播包或多播包,并利用报文的特征,例如长度变化进行编码。
47 |
48 | 将目标 Wi-Fi 路由器的 SSID/PSW 字符以约定的编码方式发送出去,设备端在捕获到 UDP 报文后,按约定的方式进行解码,即可得到目标 Wi-Fi 路由器的相关信息并进行联网。
49 |
50 | 更多关于关于微信airkiss说明,请查阅官网文档:[点击我访问](https://iot.weixin.qq.com/wiki/new/index.html?page=4-1-1)
51 |
52 | ## 三、开始使用
53 | 自行注册一个微信小程序,请下载最新版的微信开发者工具。
54 |
55 | 新建项目之后,打开 ```app.js``` 文件添加下面代码:
56 |
57 | ```
58 | "plugins": {
59 | "airkiss": {
60 | "version": "1.1.2",
61 | "provider": "wx610ea582556c983e"
62 | }
63 | }
64 | ```
65 |
66 | 然后,会有提示是否添加插件,按照下面提示添加插件使用。
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 | 下面举例说明了如何使用,更多使用技巧和方法参考本小程序。
76 |
77 | ```javascript
78 | const airkiss = requirePlugin('hello-plugin');
79 |
80 | //获取版本
81 | console.log( airkiss.version)
82 |
83 | //这里最好加微信小程序判断账号密码是否为空,以及其长度和是否为5G频段
84 | airkiss.startAirkiss(this.data.ssid, this.data.password, function (res) {
85 | switch (res.code) {
86 | case 0:
87 | wx.showModal({
88 | title: '初始化失败',
89 | content: res.result,
90 | showCancel: false,
91 | confirmText: '收到',
92 | })
93 | break;
94 | case 1:
95 | wx.showModal({
96 | title: '配网成功',
97 | content: '设备IP:' + res.ip + '\r\n 设备Mac:' + res.bssid,
98 | showCancel: false,
99 | confirmText: '好的',
100 | })
101 | break;
102 | case 2:
103 | wx.showModal({
104 | title: '配网失败',
105 | content: '请检查密码是否正确',
106 | showCancel: false,
107 | confirmText: '收到',
108 | })
109 | break;
110 |
111 | default:
112 | break;
113 | }
114 |
115 | })
116 |
117 |
118 | //停止配网,建议在页面 unload 等生命周期里面调用,释放线程
119 | airkiss.stopAirkiss()
120 | ```
121 | ---------------------------------------
122 | ## 四、API说明
123 |
124 | ```airkiss.startAirkiss(ssid,password,funtion())```
125 | 开始配置,需要入参路由器的SSID、密码以及回调函数,出参说明见示例。
126 |
127 | Note:请自行处理是否为2.4G频段路由器,以及密码是否正确。
128 |
129 | ```airkiss.stopAirkiss()```
130 | 停止配置,释放配网线程的内存。
131 |
132 | Note:建议在建议在页面 unload 等生命周期里面调用。
133 |
134 | ```airkiss.version```
135 | 获取版本
136 |
137 | -----------
138 |
139 | ## 五、FAQ
140 |
141 | > Q1: 看样子是加载一个配网插件,这个插件开源吗?
142 |
143 | Answer:考虑到部分版权问题,我把此做成了小程序插件,暂不开源,如需了解此插件更多使用资料,请到安信可小程序配网插件详情页:[点击访问](https://mp.weixin.qq.com/wxopen/plugindevdoc?appid=wx610ea582556c983e)
144 |
145 | > Q2: 这个配网插件是微信官方适配的吗?可商业吗?
146 |
147 | Answer:不是微信官方适配的,是本人适配的,现已上架小程序插件, 可商业用途。
148 |
149 | -----------------------
150 |
151 | ## 六、本人开源微信物联网控制一览表
152 |
153 | | 开源项目 | 地址 | 开源时间 |
154 | | ------------------------------------------------------------ | ------------------------------------------------------------ | -------- |
155 | | 微信小程序连接mqtt服务器,控制esp8266智能硬件 | https://github.com/xuhongv/WeChatMiniEsp8266 | 2018.11 |
156 | | 微信公众号airkiss配网以及近场发现在esp8266 rtos3.1 的实现 | https://github.com/xuhongv/xLibEsp8266Rtos3.1AirKiss | 2019.3 |
157 | | 微信公众号airkiss配网以及近场发现在esp32 esp-idf 的实现 | https://github.com/xuhongv/xLibEsp32IdfAirKiss | 2019.9 |
158 | | 微信小程序控制esp8266实现七彩效果项目源码 | https://github.com/xuhongv/WCMiniColorSetForEsp8266 | 2019.9 |
159 | | 一个基于安信可Ca-01的微信小程序定位追踪显示工程 | https://github.com/xuhongv/Cat.1TracerWcMini | 2019.9 |
160 | | 微信小程序蓝牙配网blufi实现在esp32源码 | https://github.com/xuhongv/BlufiEsp32WeChat | 2019.11 |
161 | | 微信小程序蓝牙ble控制esp32七彩灯效果 | https://blog.csdn.net/xh870189248/article/details/101849759 | 2019.10 |
162 | | 可商用的事件分发的微信小程序mqtt断线重连框架 | https://blog.csdn.net/xh870189248/article/details/88718302 | 2019.2 |
163 | | 微信小程序以 websocket 连接阿里云IOT物联网平台mqtt服务器 | https://blog.csdn.net/xh870189248/article/details/91490697 | 2019.6 |
164 | | 微信公众号网页实现连接mqtt服务器 | https://blog.csdn.net/xh870189248/article/details/100738444 | 2019.9 |
165 | | 微信小程序 AP 配网安信可 Wi-Fi 模块入网示例 | https://github.com/Ai-Thinker-Open/Ai-Thinker-Open_WeChatMiniAP2Net | 2020.5 |
166 | | 安信可IoT微信小程序全面开源,小程序上实现一键配网+控制+绑定 | https://blog.csdn.net/xh870189248/article/details/107140464 | 2020.8 |
167 | | 微信小程序蓝牙+WiFi控制安信可ESP32-S/C3S模块应用 | https://github.com/xuhongv/ESP32WiFiBleControlProject | 2021.6 |
168 | | 安信可ESP32-S模组适配腾讯物联开发平台llsync蓝牙配网+MQTT远程控制 | https://github.com/xuhongv/qcloud-esp32-llsync-mqtt | 2021.7 |
169 |
170 | ## 讨论交流
171 |
172 |
173 |
174 |
175 |
176 |
177 | QQ群号:434878850
178 | |
179 |
180 |
181 | 本人微信公众号:徐宏blog
182 | |
183 |
184 |
185 | 私人工作微信,添加标明来意
186 | |
187 |
188 |
189 |
190 |
--------------------------------------------------------------------------------
/_static/AI-Thinker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xuhongv/WeChatAirkiss/fee8ba7aef97922d0357acf7ef27fc5ffbf9bd60/_static/AI-Thinker.png
--------------------------------------------------------------------------------
/_static/IMG_20211123_231112.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xuhongv/WeChatAirkiss/fee8ba7aef97922d0357acf7ef27fc5ffbf9bd60/_static/IMG_20211123_231112.png
--------------------------------------------------------------------------------
/_static/fonts/font.wxss:
--------------------------------------------------------------------------------
1 | @font-face {font-family: "iconfont";
2 | src: url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAVsAAsAAAAACmAAAAUgAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDHAqIIIZuATYCJAMQCwoABCAFhG0HQhvaCBHVo7uR/UzI8KpxCs1ksjghlmhvivVjcU3w/zX9nbv7kr+/VRVQpcoMtisUClu7UAwS14tHeIxnfDcix7/T3UvawaJN1SdmqM2kDDFNwFNcNEVMPyGbcz2wURFqJGefPPpC2rWD9LLsKQAOjpkuEyzPZnPKChsOcDyggUV+Lpq+QiiE8RfxTDP4n8DdEFCgm2jQdKMWRRAw1FkCtNO9ay2EiBkrYIqgizNuNNApKAluKnYNgBPn7/UPiaoLOCIP6l6zaw07wfhX5Hsa52UeqrwAk7tzAuxt4IERAANtZLqX8J5yxFEXsoqNUYCg/cTBV+Q733talinpUtQB/+WB8DhQDKq6hNjU6NkwicGH4MvHh4dv2owjaJsegCagdUDvgE0aYox8QljJisH1KKVKpdYaOY02WDmSWSER4j0rXL4JdFebSXL5fdIfcLD+rcKWXht2CDtJ/+bVxwYv2EJQpRjXrFSI30zSLOOmgy5BvdadWLuVRQ7UEB2ZmHlEw8pKkpCLxJP5Qz4hMP0+8MZ5AMmlbpERtLdanli0zaidpxXmGSuL2vB12xaFUuuW7NDP0+tD9bk7YkW0wAxCU6nX1xLK6fmb+U0EJW4RthbTRetCR/pbU27uoS0gEfM2Ld48dHKu/bdtKS0GSSq5f794flFKkCSJ4JWlCTSvLFEkyvndT0iSeO9e9qZtJoC3+w3ZiwGP3iDsKGIO3LAjtDJQo8gG8HhsQIsnL1yJKpYcIQjxGJQdRWz2ISQsJEn/fF05r+XniQvUlVGt/6RwQjzGHy/186KQc+dnzcH8uJhwY8j7HkwDFmulIrvHiNERa/hUHkfSu+o2txJu6c2yuBeFBapNZVeI/P/jYJNtyaxjY0FcdNS3D5sjw5kG6f04JCfJckWNKpXKWZQfG9tGqf+H2+FRiU1E4ZYcpgHzIMPoKvfRaS6M4unZy9wXL5frdRyuLHQq2rbFuMFjMWzugNvc8f+oU4pbia9lsB/5jjY/mv9qands4dW1DTFs7GBM/VhfoS5PY9K92JR/C6xi8hlkBcuha1DW1asKPCujc3UjWm3FaFg7HlV6S0WpwDzDqC0c81NmGZdzDo2ad+rYtmVvNGcO6k1xFhddL35QZeWg+Hp0hYfRL9mqeP1asZXhrBzj85a6CwWh0F3ibU+7rK5tO2rFhO2mM/qCqQn9L8VCUEy3a3v72G1zVZtSycWOXXUsnsWDguxvy65i17A3ZfbgO3D5cEPbn+2Z9Tj2UOtqPbIUWzUHouvURBgwhHMYQm4ls8fSGLXTDlTnsoWJ1gbpmtNSgOZZAAdApu53UoHwZkA23I/CBYBsGv4HH/TpTmJ7vs05H5v9N5D3LvZ5oM0TR9gMOdwjAHx/ksqSD1VlnSJkuSJTzWaSMFt2l9Vys5cQDE9cWdBikIHqb/CsC227cjWIQDsAR44u8AR6kIYdgYgiKcQExqDAMI1vL9JkAB5ZMMAQEwFEjZ3gqPABnhrXkYZ9ChEdvkJMTTgUmJNmxSJ9gsPhyKgELegfBEOD021ycGtv6KdOcVjmsF7IY4hBmRXx3BUH5C6WjG9fiThwTD1cYD/sOoLEFNFI1oikOs9d1jNlhvrZgSOjErSgfxAMDc7qLYfE79/QT53igo6y4At5DINDmRUVkFf1UKnjVJrHt68Ekw4cW009XNCJnZYmSNnjIhrJmgbJVOfYzVVVZ8Nr+zPcBxRQLzc5eZkitts0+H8TVhYHv00YPmrwsxk=') format('woff2'),
3 | url('iconfont.ttf?t=1586507740261') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
4 | url('iconfont.svg?t=1586507740261#iconfont') format('svg'); /* iOS 4.1- */
5 | }
6 |
7 | .iconfont {
8 | font-family: "iconfont" !important;
9 | font-size: 16px;
10 | font-style: normal;
11 | -webkit-font-smoothing: antialiased;
12 | -moz-osx-font-smoothing: grayscale;
13 | }
14 |
15 | .icon-kongzhi:before {
16 | content: "\e62a";
17 | }
18 |
19 | .icon-deng:before {
20 | content: "\e70d";
21 | }
22 |
23 | .icon-peiwang:before {
24 | content: "\e65f";
25 | }
26 |
27 |
--------------------------------------------------------------------------------
/_static/fonts/iconfont.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
36 |
--------------------------------------------------------------------------------
/_static/fonts/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xuhongv/WeChatAirkiss/fee8ba7aef97922d0357acf7ef27fc5ffbf9bd60/_static/fonts/iconfont.ttf
--------------------------------------------------------------------------------
/_static/gh_860fe35e8c08_344.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xuhongv/WeChatAirkiss/fee8ba7aef97922d0357acf7ef27fc5ffbf9bd60/_static/gh_860fe35e8c08_344.jpg
--------------------------------------------------------------------------------
/_static/module.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xuhongv/WeChatAirkiss/fee8ba7aef97922d0357acf7ef27fc5ffbf9bd60/_static/module.png
--------------------------------------------------------------------------------
/_static/setup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xuhongv/WeChatAirkiss/fee8ba7aef97922d0357acf7ef27fc5ffbf9bd60/_static/setup.png
--------------------------------------------------------------------------------
/app.js:
--------------------------------------------------------------------------------
1 | //app.js
2 | App({
3 | buf2hex: function (buffer) {
4 | return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('')
5 | },
6 | buf2string: function (buffer) {
7 | var arr = Array.prototype.map.call(new Uint8Array(buffer), x => x)
8 | var str = ''
9 | for (var i = 0; i < arr.length; i++) {
10 | str += String.fromCharCode(arr[i])
11 | }
12 | return str
13 | },
14 | onLaunch: function () {
15 | this.globalData.SystemInfo = wx.getSystemInfoSync()
16 | //console.log(this.globalData.SystemInfo)
17 | },
18 | globalData: {
19 | SystemInfo: {}
20 | }
21 | })
--------------------------------------------------------------------------------
/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "pages": [
3 | "pages/index/index",
4 | "pages/airkiss/index",
5 | "pages/blueDevices/bluetooth/blueDevices",
6 | "pages/blueDevices/bluetoothChat/index"
7 | ],
8 | "window": {
9 | "backgroundTextStyle": "light",
10 | "navigationBarBackgroundColor": "#fff",
11 | "navigationBarTitleText": "物联网常用开发工具",
12 | "navigationBarTextStyle": "black"
13 | },
14 | "style": "v2",
15 | "sitemapLocation": "sitemap.json",
16 | "plugins": {
17 | "airkiss": {
18 | "version": "1.1.2",
19 | "provider": "wx610ea582556c983e"
20 | }
21 | }
22 | }
--------------------------------------------------------------------------------
/app.wxss:
--------------------------------------------------------------------------------
1 |
2 | @import "weui.wxss"
3 | @import "_static/fonts/font.wxss";
4 |
5 | .container {
6 | height: 100vh;
7 | background: #f6f6f6;
8 | font-size: 32rpx;
9 | }
10 | /* flex布局 */
11 | .flex {
12 | display: flex;
13 | }
14 | /* flex布局-水平居中 */
15 | .flex-jcc {
16 | justify-content: center;
17 | }
18 | /* flex布局-垂直居中 */
19 | .flex-ac {
20 | align-items: center;
21 | }
22 | /* flex布局-水平两端显示 */
23 | .flex-jcb {
24 | justify-content: space-between;
25 | }
26 | .flex-v {
27 | flex-direction: column;
28 | }
29 | .flex-1 {
30 | flex: 1;
31 | }
32 | .header-wrapper {
33 | height: 55vh;
34 | width: 100%;
35 | background: #ffffff;
36 | border-bottom-right-radius: 80rpx;
37 | border-bottom-left-radius: 80rpx;
38 | }
39 | .header-image {
40 | width: 29vh;
41 | height: 29vh;
42 | position: relative;
43 | top: -7.5vh;
44 | }
45 | .content-wrapper {
46 | position: absolute;
47 | top: 43vh;
48 | left: 30rpx;
49 | min-height: 50vh;
50 | width: calc(100% - 60rpx);
51 | padding: 60rpx 40rpx;
52 | box-sizing: border-box;
53 | background: #fff;
54 | border-radius: 10px;
55 | box-shadow: 0px 0px 6rpx #fff;
56 | color: #818181;
57 | }
58 | .btn {
59 | width: 100%;
60 | font-size: 28rpx;
61 | padding: 8rpx 0;
62 | background: #e8352c;
63 | border: 1px solid #e8352c;
64 | color: #fff;
65 | border-radius: 100rpx;
66 | }
67 |
--------------------------------------------------------------------------------
/pages/airkiss/index.js:
--------------------------------------------------------------------------------
1 | const airkiss = requirePlugin('airkiss');
2 |
3 |
4 | /*********** hal_version 版本迭代 ***********/
5 | // 211209 :纠正输入的SSID判断长度问题
6 | /*************************************/
7 |
8 | Page({
9 | data: {
10 | ssid: '',
11 | password: '',
12 | is5G: true,
13 | showClearBtn: false,
14 | isWaring: false,
15 | hal_version: 211209,
16 | ui: {
17 | background: [
18 | { url: 'https://aithinker-static.oss-cn-shenzhen.aliyuncs.com/officialwebsite/banner/ESP32-C3.png' },
19 | { url: 'https://aithinker-static.oss-cn-shenzhen.aliyuncs.com/officialwebsite/banner/banner32.jpg' },
20 | { url: 'https://aithinker-static.oss-cn-shenzhen.aliyuncs.com/officialwebsite/banner/banner32.jpg' },
21 | ],
22 | indicatorDots: true,
23 | vertical: false,
24 | autoplay: false,
25 | interval: 2000,
26 | duration: 500
27 | }
28 | },
29 | onLoad(opt) {
30 | this.setData({
31 | version: airkiss.version,
32 | })
33 | let that = this
34 | wx.startWifi({
35 | success(res) {
36 | console.log(res.errMsg, 'wifi初始化成功')
37 | that.getWifiInfo();
38 | },
39 | fail: function (res) {
40 | wx.showToast({
41 | title: '请连接路由器!',
42 | duration: 2000,
43 | icon: 'none'
44 | })
45 | }
46 | })
47 | this.getWifiInfo()
48 | },
49 | getWifiInfo() {
50 | let that = this
51 | wx.getConnectedWifi({
52 | success(res) {
53 | console.log("getConnectedWifi ok:", JSON.stringify(res))
54 | if ('getConnectedWifi:ok' === res.errMsg) {
55 | that.setData({
56 | ssid: res.wifi.SSID,
57 | bssid: res.wifi.BSSID,
58 | is5G: res.wifi.frequency > 4900
59 | })
60 | } else {
61 | wx.showToast({
62 | title: '请连接路由器',
63 | duration: 2000,
64 | icon: 'none'
65 | })
66 | }
67 | },
68 | fail(res) {
69 | wx.showToast({
70 | title: '请连接路由器',
71 | duration: 2000,
72 | icon: 'none'
73 | })
74 | }
75 | })
76 | },
77 | onInputSSID(evt) {
78 | const {
79 | value
80 | } = evt.detail;
81 | this.setData({
82 | ssid: value,
83 | });
84 | },
85 | onInputPassword(evt) {
86 | const {
87 | value
88 | } = evt.detail;
89 | this.setData({
90 | password: value,
91 | showClearBtn: !!value.length,
92 | isWaring: false,
93 | });
94 | },
95 | onClear() {
96 | this.setData({
97 | password: '',
98 | showClearBtn: false,
99 | isWaring: false,
100 | });
101 | },
102 | onConfirm() {
103 | console.log("ssid:", this.data.ssid, ",password:", this.data.password)
104 |
105 | if (this.data.ssid == '') {
106 | wx.showToast({
107 | title: '请连接路由器',
108 | duration: 2000,
109 | icon: 'none'
110 | })
111 | return;
112 | }
113 |
114 | if (this.data.password.length < 8) {
115 | wx.showToast({
116 | title: '请输出不少于8位的密码',
117 | duration: 2000,
118 | icon: 'none'
119 | })
120 | return;
121 | }
122 |
123 | if (this.data.is5G) {
124 | wx.showToast({
125 | title: '请链接至2.4G频段的路由器',
126 | duration: 2000,
127 | icon: 'none'
128 | })
129 | return;
130 | }
131 | wx.showLoading({
132 | title: '配网中',
133 | })
134 | //这里最好加微信小程序判断账号密码是否为空,以及其长度和是否为5G频段
135 | airkiss.startAirkiss(this.data.ssid, this.data.password, function (res) {
136 | wx.hideLoading();
137 | switch (res.code) {
138 | case 0:
139 | wx.showModal({
140 | title: '初始化失败',
141 | content: res.result,
142 | showCancel: false,
143 | confirmText: '收到',
144 | })
145 | break;
146 | case 1:
147 | wx.showModal({
148 | title: '配网成功',
149 | content: '设备IP:' + res.ip + '\r\n 设备Mac:' + res.bssid,
150 | showCancel: false,
151 | confirmText: '好的',
152 | })
153 | break;
154 | case 2:
155 | wx.showModal({
156 | title: '配网失败',
157 | content: '请检查密码是否正确',
158 | showCancel: false,
159 | confirmText: '收到',
160 | })
161 | break;
162 |
163 | default:
164 | break;
165 | }
166 |
167 | })
168 | },
169 | });
170 |
--------------------------------------------------------------------------------
/pages/airkiss/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {}
3 | }
--------------------------------------------------------------------------------
/pages/airkiss/index.wxml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 |
11 |
12 |
13 | 1)先连接到家庭路由器2.4G频段网络。
14 | 2)使用安信可Wi-Fi模组开启微信配网。
15 | 3)再输入家庭路由器密码,点击确定。
16 |
17 |
18 |
19 |
20 | 家庭路由器信息
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | 确定
48 |
49 |
50 |
--------------------------------------------------------------------------------
/pages/airkiss/index.wxss:
--------------------------------------------------------------------------------
1 | pager{
2 | width: 100%;
3 | }
--------------------------------------------------------------------------------
/pages/blueDevices/bluetooth/blueDevices.js:
--------------------------------------------------------------------------------
1 | const app = getApp()
2 | Page({
3 | data: {
4 | searching: false,
5 | devicesList: []
6 | },
7 | onPullDownRefresh: function () {
8 | var that = this
9 | if (!that.data.searching) {
10 | wx.closeBluetoothAdapter({
11 | complete: function (res) {
12 | console.log(res)
13 | wx.openBluetoothAdapter({
14 | success: function (res) {
15 | console.log(res)
16 | wx.getBluetoothAdapterState({
17 | success: function (res) {
18 | console.log(res)
19 | }
20 | })
21 | wx.startBluetoothDevicesDiscovery({
22 | allowDuplicatesKey: false,
23 | success: function (res) {
24 | console.log(res)
25 | that.setData({
26 | searching: true,
27 | devicesList: []
28 | })
29 | }
30 | })
31 | },
32 | fail: function (res) {
33 | console.log(res)
34 | wx.showModal({
35 | title: '提示',
36 | content: '请检查手机蓝牙是否打开',
37 | showCancel: false,
38 | success: function (res) {
39 | that.setData({
40 | searching: false
41 | })
42 | }
43 | })
44 | }
45 | })
46 | }
47 | })
48 | } else {
49 | wx.stopBluetoothDevicesDiscovery({
50 | success: function (res) {
51 | that.setData({
52 | searching: false
53 | })
54 | }
55 | })
56 | }
57 | },
58 | Connect: function (e) {
59 | console.log(JSON.stringify(e))
60 | var that = this
61 | var advertisData, name , deviceId
62 | for (var i = 0; i < that.data.devicesList.length; i++) {
63 | if (e.currentTarget.id == that.data.devicesList[i].deviceId) {
64 | name = that.data.devicesList[i].name
65 | deviceId = that.data.devicesList[i].deviceId
66 | advertisData = that.data.devicesList[i].advertisData
67 | }
68 | }
69 | wx.stopBluetoothDevicesDiscovery({
70 | success: function (res) {
71 | that.setData({
72 | searching: false
73 | })
74 | }
75 | })
76 | wx.showLoading({
77 | title: '连接蓝牙设备中...',
78 | })
79 | wx.createBLEConnection({
80 | deviceId,
81 | success: function (res) {
82 | wx.hideLoading()
83 | wx.showToast({
84 | title: '连接成功',
85 | icon: 'success',
86 | duration: 1000
87 | })
88 | wx.navigateTo({
89 | url: '/pages/blueDevices/bluetoothChat/index?deviceId=' + e.currentTarget.id + '&name=' + name
90 | })
91 | },
92 | fail: function (res) {
93 | console.log(JSON.stringify(res))
94 | wx.hideLoading()
95 | wx.showModal({
96 | title: '提示',
97 | content: '连接失败',
98 | showCancel: false
99 | })
100 | }
101 | })
102 | },
103 | onLoad: function (options) {
104 | var that = this
105 | var list_height = ((app.globalData.SystemInfo.windowHeight - 50) * (750 / app.globalData.SystemInfo.windowWidth)) - 60
106 | that.setData({
107 | list_height: list_height
108 | })
109 | wx.onBluetoothAdapterStateChange(function (res) {
110 |
111 | that.setData({
112 | searching: res.discovering
113 | })
114 | if (!res.available) {
115 | that.setData({
116 | searching: false
117 | })
118 | }
119 | })
120 | wx.onBluetoothDeviceFound(function (devices) {
121 | //剔除重复设备,过滤名字是否为 Ai-Thinker
122 | var isnotexist = true
123 | if (devices.deviceId) {
124 | if (devices.advertisData) {
125 | devices.advertisData = app.buf2hex(devices.advertisData)
126 | } else {
127 | devices.advertisData = ''
128 | }
129 | console.log(devices)
130 | for (var i = 0; i < that.data.devicesList.length; i++) {
131 | if (devices.deviceId == that.data.devicesList[i].deviceId) {
132 | isnotexist = false
133 | }
134 | }
135 | if (isnotexist && (devices[0].name === 'aithinker' || devices[0].name === 'Ai-Thinker' || devices[0].name === 'ai-thinker')) {
136 | that.data.devicesList.push(devices[0])
137 | }
138 | } else if (devices.devices) {
139 | if (devices.devices[0].advertisData) {
140 | devices.devices[0].advertisData = app.buf2hex(devices.devices[0].advertisData)
141 | } else {
142 | devices.devices[0].advertisData = ''
143 | }
144 |
145 | for (var i = 0; i < that.data.devicesList.length; i++) {
146 | if (devices.devices[0].deviceId == that.data.devicesList[i].deviceId) {
147 | isnotexist = false
148 | }
149 | }
150 | if (isnotexist && (devices.devices[0].name === 'aithinker' ||
151 | devices.devices[0].name === 'Ai-Thinker' || devices.devices[0].name === 'ai-thinker')) {
152 | that.data.devicesList.push(devices.devices[0])
153 | }
154 | } else if (devices[0]) {
155 | if (devices[0].advertisData) {
156 | devices[0].advertisData = app.buf2hex(devices[0].advertisData)
157 | } else {
158 | devices[0].advertisData = ''
159 | }
160 |
161 | for (var i = 0; i < devices_list.length; i++) {
162 | if (devices[0].deviceId == that.data.devicesList[i].deviceId) {
163 | isnotexist = false
164 | }
165 | }
166 | if (isnotexist && (devices[0].name === 'aithinker' || devices[0].name === 'Ai-Thinker' || devices[0].name === 'ai-thinker')) {
167 | that.data.devicesList.push(devices[0])
168 | }
169 | }
170 |
171 | console.log(JSON.stringify(that.data.devicesList))
172 |
173 | that.setData({
174 | devicesList: that.data.devicesList
175 | })
176 | })
177 | },
178 | onHide: function () {
179 | var that = this
180 | that.setData({
181 | devicesList: []
182 | })
183 | if (this.data.searching) {
184 | wx.stopBluetoothDevicesDiscovery({
185 | success: function (res) {
186 | that.setData({
187 | searching: false
188 | })
189 | }
190 | })
191 | }
192 | }
193 | })
194 |
--------------------------------------------------------------------------------
/pages/blueDevices/bluetooth/blueDevices.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "安信可蓝牙模组通讯",
3 | "enablePullDownRefresh": true
4 | }
--------------------------------------------------------------------------------
/pages/blueDevices/bluetooth/blueDevices.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | {{item.name}}
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/pages/blueDevices/bluetooth/blueDevices.wxss:
--------------------------------------------------------------------------------
1 | /* pages/blueDevices/blueDevices.wxss */
2 | .prompt-title {
3 | height: 50rpx;
4 | border-top: 1px solid #999;
5 | border-bottom: 1px solid #999;
6 | width: 100%;
7 | }
8 | .item {
9 | display: flex;
10 | height: 130rpx;
11 | width: 100%;
12 | padding: 30rpx;
13 | align-items: center;
14 | border-bottom: 1px solid #eee;
15 | background: #fff;
16 | box-sizing: border-box;
17 | }
18 | .item-img {
19 | flex: 0 0 90rpx;
20 | height: 90rpx;
21 | display: flex;
22 | justify-content: center;
23 | align-items: center;
24 | border-radius: 100%;
25 | background: #f6f6f6;
26 | box-shadow: 0 0 10px #f6f6f6;
27 | }
28 | .icon-deng {
29 | font-size: 50rpx;
30 | color: #e8352c;
31 | }
32 | .item-name {
33 | flex: 1;
34 | padding-left: 10px;
35 | display: flex;
36 | flex-direction: column;
37 | font-size: 32rpx;
38 | }
39 | .text-rssi {
40 | font-size: 28rpx;
41 | color: #999;
42 | }
--------------------------------------------------------------------------------
/pages/blueDevices/bluetoothChat/index.js:
--------------------------------------------------------------------------------
1 | const app = getApp()
2 | Page({
3 | data: {
4 | inputText: 'Hello World!',
5 | receiveText: '',
6 | receiveArry: [],
7 | name: '',
8 | connectedDeviceId: '',
9 | serviceId: "55535343-FE7D-4AE5-8FA9-9FAFD205E455", //可写的服务ID
10 | characteristics: '49535343-8841-43F4-A8D4-ECBE34729BB3',//可写的characteristics ID
11 | read_characteristics: '49535343-1E4D-4BD9-BA61-23C647249616', //49535343-1E4D-4BD9-BA61-23C647249616
12 | connected: true,
13 | },
14 | bindInput: function (e) {
15 | this.setData({
16 | inputText: e.detail.value
17 | })
18 | console.log(e.detail.value)
19 | },
20 | SendTap: function () {
21 | var that = this
22 | if (that.data.connected) {
23 | var buffer = new ArrayBuffer(that.data.inputText.length)
24 | var dataView = new Uint8Array(buffer)
25 | for (var i = 0; i < that.data.inputText.length; i++) {
26 | dataView[i] = that.data.inputText.charCodeAt(i)
27 | }
28 | wx.writeBLECharacteristicValue({
29 | deviceId: that.data.connectedDeviceId,
30 | serviceId: that.data.serviceId,
31 | characteristicId: that.data.characteristics,
32 | value: buffer,
33 | success: function (res) {
34 | console.log('发送成功')
35 | }
36 | })
37 | } else {
38 | wx.showModal({
39 | title: '提示',
40 | content: '蓝牙已断开',
41 | showCancel: false,
42 | success: function (res) {
43 | that.setData({
44 | searching: false
45 | })
46 | }
47 | })
48 | }
49 | },
50 | onLoad: function (options) {
51 | var that = this
52 |
53 | that.setData({
54 | name: options.name,
55 | connectedDeviceId: options.deviceId
56 | })
57 |
58 | wx.getBLEDeviceServices({
59 | deviceId: that.data.connectedDeviceId,
60 | success: function (res) {
61 | var all_UUID = res.services;
62 | var index_uuid = -1;
63 | var UUID_lenght = all_UUID.length;
64 | //console.log("service:" + JSON.stringify(res))
65 | /* 遍历服务数组 */
66 | for (var index = 0; index < UUID_lenght; index++) {
67 | var ergodic_UUID = all_UUID[index].uuid;
68 | /* 判断是否是我们需要的服务UUID*/
69 | if (ergodic_UUID === that.data.serviceId) {
70 | index_uuid = index;
71 | };
72 | };
73 |
74 | if (index_uuid == -1) {
75 | wx.showModal({
76 | title: '提示',
77 | content: '非我方出售的设备',
78 | showCancel: false,
79 | success: function (res) {
80 | that.setData({
81 | searching: false
82 | })
83 | }
84 | })
85 | } else {
86 | wx.getBLEDeviceCharacteristics({
87 | deviceId: that.data.connectedDeviceId,
88 | serviceId: that.data.serviceId,
89 | success: function (res) {
90 | wx.notifyBLECharacteristicValueChange({
91 | state: true,
92 | deviceId: that.data.connectedDeviceId,
93 | serviceId: that.data.serviceId,
94 | characteristicId: that.data.read_characteristics,
95 | success: function (res) {
96 | console.log('启用notify成功')
97 | },
98 | fail(res) {
99 | console.log(res)
100 | }
101 | })
102 | },
103 | fail(res) {
104 | console.log(res)
105 | }
106 | })
107 | }
108 | }
109 | })
110 | wx.onBLEConnectionStateChange(function (res) {
111 | console.log(res.connected)
112 | that.setData({
113 | connected: res.connected
114 | })
115 | })
116 | wx.onBLECharacteristicValueChange(function (res) {
117 | console.log('接收到数据:' + app.buf2string(res.value))
118 | var time = that.getNowTime()
119 | that.setData({
120 | receiveText: that.data.receiveText + time + (app.buf2string(res.value))
121 | })
122 | })
123 | },
124 | onUnload: function () {
125 | wx.closeBLEConnection({
126 | deviceId: this.data.connectedDeviceId,
127 | success: function (res) { },
128 | })
129 | },
130 | SendCleanTap: function () {
131 | this.setData({
132 | inputText: ''
133 | })
134 | },
135 |
136 | RecvCleanTap: function () {
137 | this.setData({
138 | receiveText: ''
139 | })
140 | },
141 | SendValue: function (e) {
142 | this.setData({
143 | inputText: e.detail.value
144 | })
145 | },
146 | getNowTime: function () {
147 | // 加0
148 | function add_10(num) {
149 | if (num < 10) {
150 | num = '0' + num
151 | }
152 | return num;
153 | }
154 | var myDate = new Date();
155 | myDate.getYear(); //获取当前年份(2位)
156 | myDate.getFullYear(); //获取完整的年份(4位,1970-????)
157 | myDate.getMonth(); //获取当前月份(0-11,0代表1月)
158 | myDate.getDate(); //获取当前日(1-31)
159 | myDate.getDay(); //获取当前星期X(0-6,0代表星期天)
160 | myDate.getTime(); //获取当前时间(从1970.1.1开始的毫秒数)
161 | myDate.getHours(); //获取当前小时数(0-23)
162 | myDate.getMinutes(); //获取当前分钟数(0-59)
163 | myDate.getSeconds(); //获取当前秒数(0-59)
164 | myDate.getMilliseconds(); //获取当前毫秒数(0-999)
165 | myDate.toLocaleDateString(); //获取当前日期
166 | var nowTime = add_10(myDate.getHours()) + '时' + add_10(myDate.getMinutes()) + '分' + add_10(myDate.getSeconds()) + '秒 收到:';
167 | return nowTime;
168 | }
169 | })
--------------------------------------------------------------------------------
/pages/blueDevices/bluetoothChat/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "安信可蓝牙模组通讯"
3 | }
4 |
--------------------------------------------------------------------------------
/pages/blueDevices/bluetoothChat/index.wxml:
--------------------------------------------------------------------------------
1 |
2 | 连接设备名:{{name}}
3 | 已连接
4 | 未连接
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | 已发送的数据
14 | 发送
15 | 清空
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | 接收到的数据
24 | 清空
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/pages/blueDevices/bluetoothChat/index.wxss:
--------------------------------------------------------------------------------
1 | .connect_box {
2 | width: 100%;
3 | height: 30px;
4 | line-height: 30px;
5 | font-size: 32rpx;
6 | color: #666;
7 | font-family: "Microsoft YaHei";
8 | }
9 | .connect_device_name{
10 | float: left;
11 | padding-left: 10px;
12 | color: #39beff;
13 | }
14 |
15 | .connect_state {
16 | float: right;
17 | padding-right: 10px;
18 | text-decoration: underline;
19 | color: #39beff;
20 | }
21 |
22 | .send_text {
23 | height: 100px;
24 | width: 90%;
25 | border: 2px solid #39beff;
26 | margin: 10px auto;
27 | padding: 5px;
28 | }
29 |
30 | .send_btn_box {
31 | width: 92%;
32 | margin: auto;
33 | font-size: 32rpx;
34 | color: #333;
35 | font-family: "Microsoft YaHei";
36 | height: 35px;
37 | line-height: 35px;
38 | }
39 |
40 | .send_bytes {
41 | display: inline-block;
42 | }
43 |
44 | .send_bytes_val {
45 | display: inline-block;
46 | margin-left: 10px;
47 | color: #39beff;
48 | }
49 |
50 | .send_btn {
51 | background-color: #eee;
52 | height: 30px;
53 | line-height: 30px;
54 | padding: 0 10px;
55 | float: right;
56 | }
57 | .send_btn:active{
58 | background-color: #d4d4d4;
59 | }
60 |
61 | .send_clean_btn {
62 | background-color: #eee;
63 | height: 30px;
64 | line-height: 30px;
65 | padding: 0 10px;
66 | float: right;
67 | margin-right: 7px;
68 | }
69 | .send_clean_btn:active{
70 | background-color: #d4d4d4;
71 | }
72 |
73 | .send_ascii {
74 | float: right;
75 | margin-right: 10px;
76 | color: #39beff;
77 | }
78 |
79 | .send_hex {
80 | float: right;
81 | margin-right: 18px;
82 | color: #39beff;
83 | font-size: 36rpx;
84 | }
85 |
86 | .recv_box {
87 | margin-top: 15px;
88 | }
89 |
90 | .revc_text {
91 | width: 90%;
92 | height: 550rpx;
93 | border: 2px solid grey;
94 | margin: 0 auto 10px;
95 | padding: 5px;
96 | font-size: 25rpx;
97 | }
98 |
99 | .recv_btn_box {
100 | width: 92%;
101 | margin: auto;
102 | font-size: 25rpx;
103 | color: grey;
104 | font-family: "Microsoft YaHei";
105 | height: 35px;
106 | line-height: 35px;
107 | }
108 |
109 | .recv_bytes {
110 | display: inline-block;
111 | }
112 |
113 | .recv_bytes_val {
114 | display: inline-block;
115 | margin-left: 10px;
116 | color: grey;
117 | }
118 |
119 | .recv_clean_btn {
120 | background-color: #eee;
121 | height: 30px;
122 | line-height: 30px;
123 | padding: 0 10px;
124 | float: right;
125 | }
126 | .recv_clean_btn:active{
127 | background-color: #d4d4d4;
128 | }
129 |
130 | .recv_hex {
131 | float: right;
132 | margin-right: 18px;
133 | color: #39beff;
134 | font-size: 36rpx;
135 | }
136 |
137 | .speed_value {
138 | float: right;
139 | margin-right: 40rpx;
140 | color: #39beff;
141 | }
142 |
--------------------------------------------------------------------------------
/pages/index/index.js:
--------------------------------------------------------------------------------
1 | //index.js
2 | //获取应用实例
3 | const app = getApp();
4 | const util = require('../../utils/util');
5 | Page({
6 | //事件处理函数
7 | bindViewBlueTooth: function () {
8 | wx.closeBluetoothAdapter()
9 | wx.openBluetoothAdapter({
10 | success(res) {
11 | console.log(res)
12 | wx.startBluetoothDevicesDiscovery({
13 | success: function (res) {
14 | wx.navigateTo({
15 | url: '/pages/blueDevices/bluetooth/blueDevices',
16 | })
17 | }
18 | })
19 | },
20 | fail(res) {
21 | util.showToast("Please turn on the system Bluetooth");
22 | }
23 | })
24 | },
25 | bindViewAirKiss: function () {
26 | wx.navigateTo({
27 | url: '/pages/airkiss/index',
28 | })
29 | },
30 | onLoad: function (option) {
31 | wx.getSystemInfo({
32 | success(res) {
33 | //app.data.system = res.platform
34 | }
35 | })
36 | }
37 | })
38 |
--------------------------------------------------------------------------------
/pages/index/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {}
3 | }
--------------------------------------------------------------------------------
/pages/index/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 | 安信可开源团队
8 |
9 |
10 |
11 | AirKiss配网
12 |
13 |
14 |
15 | 蓝牙本地控制
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/pages/index/index.wxss:
--------------------------------------------------------------------------------
1 | .container {
2 | display: block;
3 | padding: 0;
4 | height: 100vh;
5 | background: #eee;
6 | }
7 | .title {
8 | margin: 10px 0;
9 | text-align: center;
10 | font-size: 16px;
11 | }
12 | .btn-info {
13 | display: flex;
14 | margin-top: 10vh;
15 | }
16 | .btn-icon {
17 | font-size: 90rpx;
18 | color: #17c2c2;
19 | }
20 | .icon-kongzhi {
21 | color: #9266f9;
22 | }
23 | .name {
24 | margin: 10px 0;
25 | font-size: 14px;
26 | }
27 |
28 |
--------------------------------------------------------------------------------
/project.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "description": "项目配置文件,详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
3 | "packOptions": {
4 | "ignore": [],
5 | "include": []
6 | },
7 | "setting": {
8 | "urlCheck": true,
9 | "es6": true,
10 | "enhance": true,
11 | "postcss": true,
12 | "preloadBackgroundData": false,
13 | "minified": true,
14 | "newFeature": false,
15 | "coverView": true,
16 | "nodeModules": false,
17 | "autoAudits": false,
18 | "showShadowRootInWxmlPanel": true,
19 | "scopeDataCheck": false,
20 | "uglifyFileName": false,
21 | "checkInvalidKey": true,
22 | "checkSiteMap": true,
23 | "uploadWithSourceMap": true,
24 | "compileHotReLoad": false,
25 | "lazyloadPlaceholderEnable": false,
26 | "useMultiFrameRuntime": true,
27 | "useApiHook": true,
28 | "useApiHostProcess": true,
29 | "babelSetting": {
30 | "ignore": [],
31 | "disablePlugins": [],
32 | "outputPath": ""
33 | },
34 | "enableEngineNative": false,
35 | "useIsolateContext": false,
36 | "userConfirmedBundleSwitch": false,
37 | "packNpmManually": false,
38 | "packNpmRelationList": [],
39 | "minifyWXSS": true,
40 | "disableUseStrict": false,
41 | "minifyWXML": true,
42 | "showES6CompileOption": false,
43 | "useCompilerPlugins": false,
44 | "useStaticServer": true
45 | },
46 | "compileType": "miniprogram",
47 | "libVersion": "2.20.2",
48 | "appid": "wx940e37bc0f471016",
49 | "projectname": "WeChatAirkiss",
50 | "simulatorType": "wechat",
51 | "simulatorPluginLibVersion": {},
52 | "condition": {},
53 | "editorSetting": {
54 | "tabIndent": "insertSpaces",
55 | "tabSize": 2
56 | }
57 | }
--------------------------------------------------------------------------------
/sitemap.json:
--------------------------------------------------------------------------------
1 | {
2 | "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
3 | "rules": [{
4 | "action": "allow",
5 | "page": "*"
6 | }]
7 | }
--------------------------------------------------------------------------------
/utils/util.js:
--------------------------------------------------------------------------------
1 | const FRAME_CTRL_POSITION_ENCRYPTED = 0;
2 | const FRAME_CTRL_POSITION_CHECKSUM = 1;
3 | const FRAME_CTRL_POSITION_DATA_DIRECTION = 2;
4 | const FRAME_CTRL_POSITION_REQUIRE_ACK = 3;
5 | const FRAME_CTRL_POSITION_FRAG = 4;
6 | const DIRECTION_OUTPUT = 0;
7 | const DIRECTION_INPUT = 1;
8 | const AES_BASE_IV = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
9 | const NEG_SET_SEC_TOTAL_LEN = 0x00;
10 | const NEG_SET_SEC_ALL_DATA = 0x01;
11 | const PACKAGE_VALUE = 0x01;
12 | const SUBTYPE_NEG = 0x00;
13 | const SUBTYPE_WIFI_MODEl = 0x02;
14 | const SUBTYPE_END = 0x03;
15 | const PACKAGE_CONTROL_VALUE = 0x00;
16 | const SUBTYPE_WIFI_NEG = 0x09;
17 | const SUBTYPE_SET_SSID = 0x2;
18 | const SUBTYPE_SET_PWD = 0x3;
19 | const SUBTYPE_WIFI_LIST_NEG = 11;
20 | const SUBTYPE_NEGOTIATION_NEG = 0;
21 | const SUBTYPE_CUSTOM_DATA = 0x13;
22 | var DH_P = "cf5cf5c38419a724957ff5dd323b9c45c3cdd261eb740f69aa94b8bb1a5c96409153bd76b24222d03274e4725a5406092e9e82e9135c643cae98132b0d95f7d65347c68afc1e677da90e51bbab5f5cf429c291b4ba39c6b2dc5e8c7231e46aa7728e87664532cdf547be20c9a3fa8342be6e34371a27c06f7dc0edddd2f86373";
23 | var DH_G = "02";
24 |
25 | const descSucList = ["Bluetooth connecting...", "Bluetooth connection successful", "Device information is successfully obtained", "Attribute information is successfully obtained", "Send configuration information...", "Configuration information sent successfully", "Connection successfully"];
26 | const descFailList = ["Bluetooth connection failed", "Device information acquisition failed", "Attribute information acquisition failed", "Configuration information sent failed", "Distribution network failed"];
27 | const successList = { "0": "NULL", "1": "STA", "2": "SoftAP", "3": "SoftAP & STA" };
28 | const failList = { "0": "sequence error", "1": "checksum error", "2": "decrypt error", "3": "encrypt error", "4": "init security error", "5": "dh malloc error", "6": "dh param error", "7": "read param error", "8": "make public error" };
29 | var CRC_TB = [
30 | 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
31 | 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
32 | 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
33 | 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
34 | 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
35 | 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
36 | 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
37 | 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
38 | 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
39 | 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
40 | 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
41 | 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
42 | 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
43 | 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
44 | 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
45 | 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
46 | ];
47 | const formatTime = date => {
48 | const year = date.getFullYear()
49 | const month = date.getMonth() + 1
50 | const day = date.getDate()
51 | const hour = date.getHours()
52 | const minute = date.getMinutes()
53 | const second = date.getSeconds()
54 |
55 | return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
56 | }
57 |
58 | const formatNumber = n => {
59 | n = n.toString()
60 | return n[1] ? n : '0' + n
61 | }
62 | const showToast = title => {
63 | wx.showToast({
64 | title: title,
65 | icon: 'none',
66 | duration: 2000
67 | })
68 |
69 | }
70 | //转16进制
71 | const ab2hex = buffer => {
72 | var hexArr = Array.prototype.map.call(
73 | new Uint8Array(buffer),
74 | function (bit) {
75 | return ('00' + bit.toString(16)).slice(-2)
76 | }
77 | )
78 | return hexArr;
79 | }
80 | //16进制转字符串
81 | const hexCharCodeToStr = hexCharCodeStr => {
82 | var trimedStr = hexCharCodeStr.trim();
83 | var rawStr =
84 | trimedStr.substr(0, 2).toLowerCase() === "0x" ? trimedStr.substr(2) : trimedStr;
85 | var len = rawStr.length;
86 | if (len % 2 !== 0) {
87 | alert("Illegal Format ASCII Code!");
88 | return "";
89 | }
90 | var curCharCode;
91 | var resultStr = [];
92 | for (var i = 0; i < len; i = i + 2) {
93 | curCharCode = parseInt(rawStr.substr(i, 2), 16); // ASCII Code Value
94 | resultStr.push(String.fromCharCode(curCharCode));
95 | }
96 | return resultStr.join("");
97 | }
98 | //过滤名称
99 | const filterDevice = (devices, name) => {
100 | var self = this, list = [];
101 | for (var i = 0; i < devices.length; i++) {
102 | var device = devices[i];
103 | if (device[name].indexOf("AiThinker") !== -1) {
104 | list.push(device);
105 | }
106 |
107 | if (device[name].indexOf("Ai-Thinker") !== -1) {
108 | list.push(device);
109 | }
110 |
111 | if (device[name].indexOf("ai-thinker") !== -1) {
112 | list.push(device);
113 | }
114 |
115 | if (device[name].indexOf("aithinker") !== -1) {
116 | list.push(device);
117 | }
118 |
119 | }
120 | return list;
121 | }
122 | //获去type
123 | const getType = (pkgType, subType) => {
124 | return (subType << 2) | pkgType;
125 | }
126 | //unit8Arry转数组
127 | const uint8ArrayToArray = uint8Array => {
128 | var array = [];
129 |
130 | for (var i = 0; i < uint8Array.byteLength; i++) {
131 | array[i] = uint8Array[i];
132 | }
133 |
134 | return array;
135 | }
136 | //16进制转二进制数组
137 | const hexToBinArray = str => {
138 | var dec = parseInt(str, 16),
139 | bin = dec.toString(2),
140 | len = bin.length;
141 | if (len < 8) {
142 | var diff = 8 - len,
143 | zeros = "";
144 | for (var i = 0; i < diff; i++) {
145 | zeros += "0";
146 | }
147 | bin = zeros + bin;
148 | }
149 | return bin.split("");
150 | }
151 | //16进制转数组
152 | const hexByArray = str => {
153 | var arr = [];
154 | if (str.length % 2 != 0) {
155 | str = "0" + str;
156 | }
157 | for (var i = 0; i < str.length; i += 2) {
158 | arr.push(str.substring(i, i + 2))
159 | }
160 | return arr;
161 | }
162 | //16进制转整形数组
163 | const hexByInt = str => {
164 | var arr = [];
165 | if (str.length % 2 != 0) {
166 | str = "0" + str;
167 | }
168 | for (var i = 0; i < str.length; i += 2) {
169 | arr.push(parseInt(str.substring(i, i + 2), 16))
170 | }
171 | return arr;
172 | }
173 | //排序
174 | const sortBy = (attr, rev) => {
175 | //第二个参数没有传递 默认升序排列
176 | if (rev == undefined) {
177 | rev = 1;
178 | } else {
179 | rev = (rev) ? 1 : -1;
180 | }
181 | return function (a, b) {
182 | a = a[attr];
183 | b = b[attr];
184 | if (a < b) {
185 | return rev * -1;
186 | } else if (a > b) {
187 | return rev * 1;
188 | }
189 | return 0;
190 | }
191 | }
192 | //判断非空
193 | const _isEmpty = str => {
194 | if (str === "" || str === null || str === undefined || str === "null" || str === "undefined") {
195 | return true;
196 | } else {
197 | return false;
198 | }
199 | }
200 | //组装数据格式
201 | const writeData = (type, subType, frameCtl, seq, len, data) => {
202 | var self = this,
203 | value = [],
204 | type = getType(type, subType);
205 | value.push(type);
206 | value.push(frameCtl);
207 | value.push(seq);
208 | value.push(len);
209 | if (!_isEmpty(data)) {
210 | value = value.concat(data);
211 | }
212 | return value;
213 | }
214 | //是否分包
215 | const isSubcontractor = (data, checksum, sequence, encrypt) => {
216 | var len = 0, lenData = [], laveData = [], flag = false;
217 | var total = data.length;
218 | if (total > 16) {
219 | if (checksum) {
220 | lenData = data.slice(0, 12);
221 | laveData = data.slice(12);
222 | } else {
223 | lenData = data.slice(0, 14);
224 | laveData = data.slice(14);
225 | }
226 | var len1 = (total >> 8) & 0xff;
227 | var len2 = total & 0xff;
228 | lenData.splice(0, 0, len1);
229 | lenData.splice(0, 0, len2);
230 | len = lenData.length;
231 | flag = true;
232 | } else {
233 | lenData = data;
234 | len = lenData.length;
235 | }
236 | if (checksum) {
237 | lenData = assemblyChecksum(lenData, len, sequence);
238 | }
239 | return { "len": len, "lenData": lenData, "laveData": laveData, "flag": flag }
240 | }
241 | const assemblyChecksum = (list, len, sequence, encrypt) => {
242 | var checkData = [];
243 | checkData.push(sequence);
244 | checkData.push(len);
245 | checkData = checkData.concat(list);
246 | var crc = caluCRC(0, checkData);
247 | var checksumByte1 = crc & 0xff;
248 | var checksumByte2 = (crc >> 8) & 0xff;
249 | list.push(checksumByte1);
250 | list.push(checksumByte2);
251 | return list;
252 | }
253 | //加密发送的数据
254 | const encrypt = (aesjs, md5Key, sequence, data, checksum) => {
255 | var iv = generateAESIV(sequence), sumArr = [], list = [];
256 | if (checksum) {
257 | var len = data.length - 2;
258 | list = data.slice(0, len);
259 | sumArr = data.slice(len);
260 | } else {
261 | list = data;
262 | }
263 | var encryptData = uint8ArrayToArray(blueAesEncrypt(aesjs, md5Key, iv, new Uint8Array(list)));
264 | return encryptData.concat(sumArr);
265 | }
266 | //判断返回的数据是否加密
267 | const isEncrypt = (self, fragNum, list, md5Key) => {
268 | var checksum = [], checkData = [];
269 | if (fragNum[7] == "1") {//返回数据加密
270 | if (fragNum[6] == "1") {
271 | var len = list.length - 2;
272 | // checkData = list.slice(2, len);
273 | // checksum = list.slice(len);
274 | // console.log(checksum);
275 | // var crc = caluCRC(0, checkData);
276 | // var checksumByte1 = crc & 0xff;
277 | // var checksumByte2 = (crc >> 8) & 0xff;
278 | list = list.slice(0, len);
279 | }
280 | var iv = this.generateAESIV(parseInt(list[2], 16));
281 | if (fragNum[3] == "0") {//未分包
282 | list = list.slice(4);
283 | self.setData({
284 | flagEnd: true
285 | })
286 | } else {//分包
287 | list = list.slice(6);
288 | }
289 | list = uint8ArrayToArray(this.blueAesDecrypt(aesjs, md5Key, iv, new Uint8Array(list)));
290 | } else {//返回数据未加密
291 | if (fragNum[6] == "1") {
292 | var len = list.length - 2;
293 | // checkData = list.slice(2, len);
294 | // checksum = list.slice(len);
295 | // var crc = caluCRC(0, checkData);
296 | // var checksumByte1 = crc & 0xff;
297 | // var checksumByte2 = (crc >> 8) & 0xff;
298 | list = list.slice(0, len);
299 | }
300 | if (fragNum[3] == "0") {//未分包
301 | list = list.slice(4);
302 | self.setData({
303 | flagEnd: true
304 | })
305 | } else {//分包
306 | list = list.slice(6);
307 | }
308 | }
309 | return list;
310 | }
311 | //DH加密
312 | const blueDH = (p, g, crypto) => {
313 | var client = crypto.createDiffieHellman(p, "hex", g, "hex");
314 | var clientKey = client.generateKeys();
315 | //var clientSecret = client.computeSecret(server.getPublicKey());
316 | return client;
317 | }
318 | //md5加密
319 | const blueMd5 = (md5, key) => {
320 | var arr = md5.array(key);
321 | return arr;
322 | }
323 | // aes加密
324 | const blueAesEncrypt = (aesjs, mdKey, iv, bytes) => {
325 | var aesOfb = new aesjs.ModeOfOperation.ofb(mdKey, iv);
326 | var encryptedBytes = aesOfb.encrypt(bytes);
327 | return encryptedBytes;
328 | }
329 | //aes解密
330 | const blueAesDecrypt = (aesjs, mdKey, iv, bytes) => {
331 | var aesOfb = new aesjs.ModeOfOperation.ofb(mdKey, iv);
332 | var decryptedBytes = aesOfb.decrypt(bytes);
333 | return decryptedBytes;
334 | }
335 | //获取Frame Control
336 | const getFrameCTRLValue = (encrypted, checksum, direction, requireAck, frag) => {
337 | var frame = 0;
338 | if (encrypted) {
339 | frame = frame | (1 << FRAME_CTRL_POSITION_ENCRYPTED);
340 | }
341 | if (checksum) {
342 | frame = frame | (1 << FRAME_CTRL_POSITION_CHECKSUM);
343 | }
344 | if (direction == DIRECTION_INPUT) {
345 | frame = frame | (1 << FRAME_CTRL_POSITION_DATA_DIRECTION);
346 | }
347 | if (requireAck) {
348 | frame = frame | (1 << FRAME_CTRL_POSITION_REQUIRE_ACK);
349 | }
350 | if (frag) {
351 | frame = frame | (1 << FRAME_CTRL_POSITION_FRAG);
352 | }
353 | return frame;
354 | }
355 | //获取aes iv
356 | const generateAESIV = sequence => {
357 | var result = [];
358 | for (var i = 0; i < 16; i++) {
359 | if (i == 0) {
360 | result[0] = sequence;
361 | } else {
362 | result[i] = AES_BASE_IV[i];
363 | }
364 | }
365 | return result;
366 | }
367 | //计算CRC值
368 | const caluCRC = (crc, pByte) => {
369 | crc = (~crc) & 0xffff;
370 | for (var i in pByte) {
371 | crc = CRC_TB[((crc & 0xffff) >> 8) ^ (pByte[i] & 0xff)] ^ ((crc & 0xffff) << 8);
372 | }
373 | return (~crc) & 0xffff;
374 | }
375 | const hsvToRgb = (h, s, v) => {
376 | var r, g, b;
377 | var i = Math.floor(h * 6);
378 | var f = h * 6 - i;
379 | var p = v * (1 - s);
380 | var q = v * (1 - f * s);
381 | var t = v * (1 - (1 - f) * s);
382 |
383 | switch (i % 6) {
384 | case 0: r = v, g = t, b = p; break;
385 | case 1: r = q, g = v, b = p; break;
386 | case 2: r = p, g = v, b = t; break;
387 | case 3: r = p, g = q, b = v; break;
388 | case 4: r = t, g = p, b = v; break;
389 | case 5: r = v, g = p, b = q; break;
390 | }
391 |
392 | return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
393 | }
394 | const rgbToHsv = (r, g, b) => {
395 | r = r / 255, g = g / 255, b = b / 255;
396 | var max = Math.max(r, g, b), min = Math.min(r, g, b);
397 | var h, s, v = max;
398 |
399 | var d = max - min;
400 | s = max == 0 ? 0 : d / max;
401 |
402 | if (max == min) {
403 | h = 0; // achromatic
404 | } else {
405 | switch (max) {
406 | case r: h = (g - b) / d + (g < b ? 6 : 0); break;
407 | case g: h = (b - r) / d + 2; break;
408 | case b: h = (r - g) / d + 4; break;
409 | }
410 | h /= 6;
411 | }
412 |
413 | return Math.round(h * 360);
414 | }
415 | const createCanvas = (self) => {
416 | var context = wx.createCanvasContext('firstCanvas', self);
417 | var width = Math.floor(self.data.width * 0.7),
418 | height = width,
419 | cx = width / 2,
420 | cy = height / 2,
421 | radius = width / 2.3,
422 | imageData,
423 | pixels,
424 | hue, sat, value,
425 | i = 0, x, y, rx, ry, d,
426 | f, g, p, u, v, w, rgb;
427 | wx.canvasGetImageData({
428 | canvasId: 'firstCanvas',
429 | x: 0,
430 | y: 0,
431 | width: width,
432 | height: height,
433 | success(res) {
434 | var pixels = res.data;
435 | for (y = 0; y < height; y++) {
436 | for (x = 0; x < width; x++ , i = i + 4) {
437 | rx = x - cx;
438 | ry = y - cy;
439 | d = rx * rx + ry * ry;
440 | if (d < radius * radius) {
441 | hue = 6 * (Math.atan2(ry, rx) + Math.PI) / (2 * Math.PI);
442 | sat = Math.sqrt(d) / radius;
443 | g = Math.floor(hue);
444 | f = hue - g;
445 | u = 255 * (1 - sat);
446 | v = 255 * (1 - sat * f);
447 | w = 255 * (1 - sat * (1 - f));
448 | pixels[i] = [255, v, u, u, w, 255, 255][g];
449 | pixels[i + 1] = [w, 255, 255, v, u, u, w][g];
450 | pixels[i + 2] = [u, u, w, 255, 255, v, u][g];
451 | pixels[i + 3] = 255;
452 | }
453 | }
454 | }
455 | wx.canvasPutImageData({
456 | canvasId: 'firstCanvas',
457 | x: 0,
458 | y: 0,
459 | width: width,
460 | height: height,
461 | data: pixels,
462 | success(res) {
463 | setTimeout(function () {
464 | context.beginPath();
465 | context.arc(cx, cy, radius * 0.6, 0, 2 * Math.PI);
466 | context.fillStyle = "#12151e";
467 | context.fill();
468 | context.stroke();
469 | context.draw(true);
470 | context.beginPath();
471 | context.arc(cx, cy, radius, 0, 2 * Math.PI);
472 | context.strokeStyle = "#12151e";
473 | context.lineWidth = 5;
474 | context.stroke();
475 | context.draw(true);
476 | })
477 |
478 | },
479 | fail(res) {
480 | }
481 | }, self)
482 | }
483 | })
484 | }
485 | const getColor = (self, event) => {
486 | console.log(event);
487 | var x = event.touches[0].x,
488 | y = event.touches[0].y;
489 | wx.canvasGetImageData({
490 | canvasId: "firstCanvas",
491 | x: x,
492 | y: y,
493 | width: 1,
494 | height: 1,
495 | success(res) {
496 | var r = res.data[0],
497 | g = res.data[1],
498 | b = res.data[2];
499 | console.log(r, g, b);
500 | // 特殊值过滤
501 | if ((r == 0 && g == 0 && b == 0) || (r == 18 && g == 21 && b == 30)) {
502 | return false;
503 | } else {
504 | self.setData({
505 | color: "rgba(" + r + ", " + g + ", " + b + ", " + self.data.currentLuminanceText / 100 + ")",
506 | currentSaturationText: 100,
507 | currentSaturation: 100,
508 | currentHue: rgbToHsv(r, g, b)
509 | })
510 | self.setDeviceStatus();
511 | }
512 | }
513 | })
514 | }
515 | module.exports = {
516 | formatTime: formatTime,
517 | showToast: showToast,
518 | ab2hex: ab2hex,
519 | hexCharCodeToStr: hexCharCodeToStr,
520 | filterDevice: filterDevice,
521 | getType: getType,
522 | hexToBinArray: hexToBinArray,
523 | hexByArray: hexByArray,
524 | hexByInt: hexByInt,
525 | sortBy: sortBy,
526 | writeData: writeData,
527 | isSubcontractor: isSubcontractor,
528 | getFrameCTRLValue: getFrameCTRLValue,
529 | blueDH: blueDH,
530 | blueMd5: blueMd5,
531 | blueAesEncrypt: blueAesEncrypt,
532 | blueAesDecrypt: blueAesDecrypt,
533 | uint8ArrayToArray: uint8ArrayToArray,
534 | generateAESIV: generateAESIV,
535 | isEncrypt: isEncrypt,
536 | caluCRC: caluCRC,
537 | encrypt: encrypt,
538 | DH_P: DH_P,
539 | DH_G: DH_G,
540 | DIRECTION_OUTPUT: DIRECTION_OUTPUT,
541 | DIRECTION_INPUT: DIRECTION_INPUT,
542 | NEG_SET_SEC_TOTAL_LEN: NEG_SET_SEC_TOTAL_LEN,
543 | NEG_SET_SEC_ALL_DATA: NEG_SET_SEC_ALL_DATA,
544 | PACKAGE_VALUE: PACKAGE_VALUE,
545 | SUBTYPE_NEG: SUBTYPE_NEG,
546 | PACKAGE_CONTROL_VALUE: PACKAGE_CONTROL_VALUE,
547 | SUBTYPE_WIFI_NEG: SUBTYPE_WIFI_NEG,
548 | SUBTYPE_WIFI_LIST_NEG: SUBTYPE_WIFI_LIST_NEG,
549 | SUBTYPE_NEGOTIATION_NEG: SUBTYPE_NEGOTIATION_NEG,
550 | SUBTYPE_WIFI_MODEl: SUBTYPE_WIFI_MODEl,
551 | SUBTYPE_SET_SSID: SUBTYPE_SET_SSID,
552 | SUBTYPE_SET_PWD: SUBTYPE_SET_PWD,
553 | SUBTYPE_END: SUBTYPE_END,
554 | SUBTYPE_CUSTOM_DATA: SUBTYPE_CUSTOM_DATA,
555 | hsvToRgb: hsvToRgb,
556 | rgbToHsv: rgbToHsv,
557 | createCanvas: createCanvas,
558 | getColor: getColor,
559 | descSucList: descSucList,
560 | descFailList: descFailList,
561 | successList: successList,
562 | _isEmpty: _isEmpty
563 | }
564 |
--------------------------------------------------------------------------------
/weui.wxss:
--------------------------------------------------------------------------------
1 | /*!
2 | * WeUI v2.4.0 (https://github.com/weui/weui-wxss)
3 | * Copyright 2020 Tencent, Inc.
4 | * Licensed under the MIT license
5 | */
6 | [data-weui-theme=light],page{--weui-BTN-DISABLED-FONT-COLOR:rgba(0,0,0,.2)}[data-weui-theme=dark]{--weui-BTN-DISABLED-FONT-COLOR:hsla(0,0%,100%,.2)}[data-weui-theme=light],page{--weui-BTN-DEFAULT-BG:#f2f2f2}[data-weui-theme=dark]{--weui-BTN-DEFAULT-BG:hsla(0,0%,100%,.08)}[data-weui-theme=light],page{--weui-BTN-DEFAULT-COLOR:#06ae56}[data-weui-theme=dark]{--weui-BTN-DEFAULT-COLOR:hsla(0,0%,100%,.8)}[data-weui-theme=light],page{--weui-BTN-DEFAULT-ACTIVE-BG:#e6e6e6}[data-weui-theme=dark]{--weui-BTN-DEFAULT-ACTIVE-BG:hsla(0,0%,100%,.126)}[data-weui-theme=light],page{--weui-DIALOG-LINE-COLOR:rgba(0,0,0,.1)}[data-weui-theme=dark]{--weui-DIALOG-LINE-COLOR:hsla(0,0%,100%,.1)}page{line-height:1.6;font-family:-apple-system-font,Helvetica Neue,sans-serif}icon{vertical-align:middle}[data-weui-theme=light],page{--weui-BG-0:#ededed;--weui-BG-1:#f7f7f7;--weui-BG-2:#fff;--weui-BG-3:#f7f7f7;--weui-BG-4:#4c4c4c;--weui-BG-5:#fff;--weui-FG-0:rgba(0,0,0,.9);--weui-FG-HALF:rgba(0,0,0,.9);--weui-FG-1:rgba(0,0,0,.5);--weui-FG-2:rgba(0,0,0,.3);--weui-FG-3:rgba(0,0,0,.1);--weui-RED:#fa5151;--weui-ORANGE:#fa9d3b;--weui-YELLOW:#ffc300;--weui-GREEN:#91d300;--weui-LIGHTGREEN:#95ec69;--weui-BRAND:#07c160;--weui-BLUE:#10aeff;--weui-INDIGO:#1485ee;--weui-PURPLE:#6467f0;--weui-WHITE:#fff;--weui-LINK:#576b95;--weui-TEXTGREEN:#06ae56;--weui-FG:#000;--weui-BG:#fff;--weui-TAG-TEXT-ORANGE:#fa9d3b;--weui-TAG-BACKGROUND-ORANGE:rgba(250,157,59,.1);--weui-TAG-TEXT-GREEN:#06ae56;--weui-TAG-BACKGROUND-GREEN:rgba(6,174,86,.1);--weui-TAG-TEXT-BLUE:#10aeff;--weui-TAG-BACKGROUND-BLUE:rgba(16,174,255,.1);--weui-TAG-TEXT-BLACK:rgba(0,0,0,.5);--weui-TAG-BACKGROUND-BLACK:rgba(0,0,0,.05)}[data-weui-theme=dark]{--weui-BG-0:#111;--weui-BG-1:#1e1e1e;--weui-BG-2:#191919;--weui-BG-3:#202020;--weui-BG-4:#404040;--weui-BG-5:#2c2c2c;--weui-FG-0:hsla(0,0%,100%,.8);--weui-FG-HALF:hsla(0,0%,100%,.6);--weui-FG-1:hsla(0,0%,100%,.5);--weui-FG-2:hsla(0,0%,100%,.3);--weui-FG-3:hsla(0,0%,100%,.05);--weui-RED:#fa5151;--weui-ORANGE:#c87d2f;--weui-YELLOW:#cc9c00;--weui-GREEN:#74a800;--weui-LIGHTGREEN:#3eb575;--weui-BRAND:#07c160;--weui-BLUE:#10aeff;--weui-INDIGO:#1196ff;--weui-PURPLE:#8183ff;--weui-WHITE:hsla(0,0%,100%,.8);--weui-LINK:#7d90a9;--weui-TEXTGREEN:#259c5c;--weui-FG:#fff;--weui-BG:#000;--weui-TAG-TEXT-ORANGE:rgba(250,157,59,.6);--weui-TAG-BACKGROUND-ORANGE:rgba(250,157,59,.1);--weui-TAG-TEXT-GREEN:rgba(6,174,86,.6);--weui-TAG-BACKGROUND-GREEN:rgba(6,174,86,.1);--weui-TAG-TEXT-BLUE:rgba(16,174,255,.6);--weui-TAG-BACKGROUND-BLUE:rgba(16,174,255,.1);--weui-TAG-TEXT-BLACK:hsla(0,0%,100%,.5);--weui-TAG-BACKGROUND-BLACK:hsla(0,0%,100%,.05)}[data-weui-theme=light],page{--weui-BG-COLOR-ACTIVE:#ececec}[data-weui-theme=dark]{--weui-BG-COLOR-ACTIVE:#373737}[class*=" weui-icon-"],[class^=weui-icon-]{display:inline-block;vertical-align:middle;width:24px;height:24px;-webkit-mask-position:50% 50%;mask-position:50% 50%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%;background-color:currentColor}.weui-icon-circle{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%221000%22%20height%3D%221000%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M500%20916.667C269.881%20916.667%2083.333%20730.119%2083.333%20500%2083.333%20269.881%20269.881%2083.333%20500%2083.333c230.119%200%20416.667%20186.548%20416.667%20416.667%200%20230.119-186.548%20416.667-416.667%20416.667zm0-50c202.504%200%20366.667-164.163%20366.667-366.667%200-202.504-164.163-366.667-366.667-366.667-202.504%200-366.667%20164.163-366.667%20366.667%200%20202.504%20164.163%20366.667%20366.667%20366.667z%22%20fill-rule%3D%22evenodd%22%20fill-opacity%3D%22.9%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%221000%22%20height%3D%221000%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M500%20916.667C269.881%20916.667%2083.333%20730.119%2083.333%20500%2083.333%20269.881%20269.881%2083.333%20500%2083.333c230.119%200%20416.667%20186.548%20416.667%20416.667%200%20230.119-186.548%20416.667-416.667%20416.667zm0-50c202.504%200%20366.667-164.163%20366.667-366.667%200-202.504-164.163-366.667-366.667-366.667-202.504%200-366.667%20164.163-366.667%20366.667%200%20202.504%20164.163%20366.667%20366.667%20366.667z%22%20fill-rule%3D%22evenodd%22%20fill-opacity%3D%22.9%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-download{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M11.25%2012.04l-1.72-1.72-1.06%201.06%202.828%202.83a1%201%200%20001.414-.001l2.828-2.828-1.06-1.061-1.73%201.73V7h-1.5v5.04zm0-5.04V2h1.5v5h6.251c.55%200%20.999.446.999.996v13.008a.998.998%200%2001-.996.996H4.996A.998.998%200%20014%2021.004V7.996A1%201%200%20014.999%207h6.251z%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M11.25%2012.04l-1.72-1.72-1.06%201.06%202.828%202.83a1%201%200%20001.414-.001l2.828-2.828-1.06-1.061-1.73%201.73V7h-1.5v5.04zm0-5.04V2h1.5v5h6.251c.55%200%20.999.446.999.996v13.008a.998.998%200%2001-.996.996H4.996A.998.998%200%20014%2021.004V7.996A1%201%200%20014.999%207h6.251z%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-info{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-.75-12v7h1.5v-7h-1.5zM12%209a1%201%200%20100-2%201%201%200%20000%202z%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-.75-12v7h1.5v-7h-1.5zM12%209a1%201%200%20100-2%201%201%200%20000%202z%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-safe-success{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201000%201000%22%3E%3Cpath%20d%3D%22M500.9%204.6C315.5%2046.7%20180.4%2093.1%2057.6%20132c0%20129.3.2%20231.7.2%20339.7%200%20304.2%20248.3%20471.6%20443.1%20523.7C695.7%20943.3%20944%20775.9%20944%20471.7c0-108%20.2-210.4.2-339.7C821.4%2093.1%20686.3%2046.7%20500.9%204.6zm248.3%20349.1l-299.7%20295c-2.1%202-5.3%202-7.4-.1L304.4%20506.1c-2-2.1-2.3-5.7-.6-8l18.3-24.9c1.7-2.3%205-2.8%207.2-1l112.2%2086c2.3%201.8%206%201.7%208.1-.1l274.7-228.9c2.2-1.8%205.7-1.7%207.7.3l17%2016.8c2.2%202.1%202.2%205.3.2%207.4z%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20fill%3D%22%23070202%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201000%201000%22%3E%3Cpath%20d%3D%22M500.9%204.6C315.5%2046.7%20180.4%2093.1%2057.6%20132c0%20129.3.2%20231.7.2%20339.7%200%20304.2%20248.3%20471.6%20443.1%20523.7C695.7%20943.3%20944%20775.9%20944%20471.7c0-108%20.2-210.4.2-339.7C821.4%2093.1%20686.3%2046.7%20500.9%204.6zm248.3%20349.1l-299.7%20295c-2.1%202-5.3%202-7.4-.1L304.4%20506.1c-2-2.1-2.3-5.7-.6-8l18.3-24.9c1.7-2.3%205-2.8%207.2-1l112.2%2086c2.3%201.8%206%201.7%208.1-.1l274.7-228.9c2.2-1.8%205.7-1.7%207.7.3l17%2016.8c2.2%202.1%202.2%205.3.2%207.4z%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20fill%3D%22%23070202%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-safe-warn{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201000%201000%22%3E%3Cpath%20d%3D%22M500.9%204.5c-185.4%2042-320.4%2088.4-443.2%20127.3%200%20129.3.2%20231.7.2%20339.6%200%20304.1%20248.2%20471.4%20443%20523.6%20194.7-52.2%20443-219.5%20443-523.6%200-107.9.2-210.3.2-339.6C821.3%2092.9%20686.2%2046.5%20500.9%204.5zm-26.1%20271.1h52.1c5.8%200%2010.3%204.7%2010.1%2010.4l-11.6%20313.8c-.1%202.8-2.5%205.2-5.4%205.2h-38.2c-2.9%200-5.3-2.3-5.4-5.2L464.8%20286c-.2-5.8%204.3-10.4%2010-10.4zm26.1%20448.3c-20.2%200-36.5-16.3-36.5-36.5s16.3-36.5%2036.5-36.5%2036.5%2016.3%2036.5%2036.5-16.4%2036.5-36.5%2036.5z%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20fill%3D%22%23020202%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201000%201000%22%3E%3Cpath%20d%3D%22M500.9%204.5c-185.4%2042-320.4%2088.4-443.2%20127.3%200%20129.3.2%20231.7.2%20339.6%200%20304.1%20248.2%20471.4%20443%20523.6%20194.7-52.2%20443-219.5%20443-523.6%200-107.9.2-210.3.2-339.6C821.3%2092.9%20686.2%2046.5%20500.9%204.5zm-26.1%20271.1h52.1c5.8%200%2010.3%204.7%2010.1%2010.4l-11.6%20313.8c-.1%202.8-2.5%205.2-5.4%205.2h-38.2c-2.9%200-5.3-2.3-5.4-5.2L464.8%20286c-.2-5.8%204.3-10.4%2010-10.4zm26.1%20448.3c-20.2%200-36.5-16.3-36.5-36.5s16.3-36.5%2036.5-36.5%2036.5%2016.3%2036.5%2036.5-16.4%2036.5-36.5%2036.5z%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20fill%3D%22%23020202%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-success{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-1.177-7.86l-2.765-2.767L7%2012.431l3.119%203.121a1%201%200%20001.414%200l5.952-5.95-1.062-1.062-5.6%205.6z%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-1.177-7.86l-2.765-2.767L7%2012.431l3.119%203.121a1%201%200%20001.414%200l5.952-5.95-1.062-1.062-5.6%205.6z%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-success-circle{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm0-1.2a8.8%208.8%200%20100-17.6%208.8%208.8%200%20000%2017.6zm-1.172-6.242l5.809-5.808.848.849-5.95%205.95a1%201%200%2001-1.414%200L7%2012.426l.849-.849%202.98%202.98z%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm0-1.2a8.8%208.8%200%20100-17.6%208.8%208.8%200%20000%2017.6zm-1.172-6.242l5.809-5.808.848.849-5.95%205.95a1%201%200%2001-1.414%200L7%2012.426l.849-.849%202.98%202.98z%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-success-no-circle{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M8.657%2018.435L3%2012.778l1.414-1.414%204.95%204.95L20.678%205l1.414%201.414-12.02%2012.021a1%201%200%2001-1.415%200z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M8.657%2018.435L3%2012.778l1.414-1.414%204.95%204.95L20.678%205l1.414%201.414-12.02%2012.021a1%201%200%2001-1.415%200z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-waiting{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12.75%2011.38V6h-1.5v6l4.243%204.243%201.06-1.06-3.803-3.804zM12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12.75%2011.38V6h-1.5v6l4.243%204.243%201.06-1.06-3.803-3.804zM12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-waiting-circle{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12.6%2011.503l3.891%203.891-.848.849L11.4%2012V6h1.2v5.503zM12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm0-1.2a8.8%208.8%200%20100-17.6%208.8%208.8%200%20000%2017.6z%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12.6%2011.503l3.891%203.891-.848.849L11.4%2012V6h1.2v5.503zM12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm0-1.2a8.8%208.8%200%20100-17.6%208.8%208.8%200%20000%2017.6z%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-warn{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-.763-15.864l.11%207.596h1.305l.11-7.596h-1.525zm.759%2010.967c.512%200%20.902-.383.902-.882%200-.5-.39-.882-.902-.882a.878.878%200%2000-.896.882c0%20.499.396.882.896.882z%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-.763-15.864l.11%207.596h1.305l.11-7.596h-1.525zm.759%2010.967c.512%200%20.902-.383.902-.882%200-.5-.39-.882-.902-.882a.878.878%200%2000-.896.882c0%20.499.396.882.896.882z%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-info-circle{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm0-1.2a8.8%208.8%200%20100-17.6%208.8%208.8%200%20000%2017.6zM11.4%2010h1.2v7h-1.2v-7zm.6-1a1%201%200%20110-2%201%201%200%20010%202z%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm0-1.2a8.8%208.8%200%20100-17.6%208.8%208.8%200%20000%2017.6zM11.4%2010h1.2v7h-1.2v-7zm.6-1a1%201%200%20110-2%201%201%200%20010%202z%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-cancel{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20fill-rule%3D%22evenodd%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm0-1.2a8.8%208.8%200%20100-17.6%208.8%208.8%200%20000%2017.6z%22%20fill-rule%3D%22nonzero%22%2F%3E%3Cpath%20d%3D%22M12.849%2012l3.11%203.111-.848.849L12%2012.849l-3.111%203.11-.849-.848L11.151%2012l-3.11-3.111.848-.849L12%2011.151l3.111-3.11.849.848L12.849%2012z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20fill-rule%3D%22evenodd%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm0-1.2a8.8%208.8%200%20100-17.6%208.8%208.8%200%20000%2017.6z%22%20fill-rule%3D%22nonzero%22%2F%3E%3Cpath%20d%3D%22M12.849%2012l3.11%203.111-.848.849L12%2012.849l-3.111%203.11-.849-.848L11.151%2012l-3.11-3.111.848-.849L12%2011.151l3.111-3.11.849.848L12.849%2012z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E)}.weui-icon-search{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M16.31%2015.561l4.114%204.115-.848.848-4.123-4.123a7%207%200%2011.857-.84zM16.8%2011a5.8%205.8%200%2010-11.6%200%205.8%205.8%200%200011.6%200z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M16.31%2015.561l4.114%204.115-.848.848-4.123-4.123a7%207%200%2011.857-.84zM16.8%2011a5.8%205.8%200%2010-11.6%200%205.8%205.8%200%200011.6%200z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-clear{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M13.06%2012l3.006-3.005-1.06-1.06L12%2010.938%208.995%207.934l-1.06%201.06L10.938%2012l-3.005%203.005%201.06%201.06L12%2013.062l3.005%203.005%201.06-1.06L13.062%2012zM12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010z%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M13.06%2012l3.006-3.005-1.06-1.06L12%2010.938%208.995%207.934l-1.06%201.06L10.938%2012l-3.005%203.005%201.06%201.06L12%2013.062l3.005%203.005%201.06-1.06L13.062%2012zM12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010z%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-back{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm1.999-6.563L10.68%2012%2014%208.562%2012.953%207.5%209.29%2011.277a1.045%201.045%200%20000%201.446l3.663%203.777L14%2015.437z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm1.999-6.563L10.68%2012%2014%208.562%2012.953%207.5%209.29%2011.277a1.045%201.045%200%20000%201.446l3.663%203.777L14%2015.437z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-delete{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M6.774%206.4l.812%2013.648a.8.8%200%2000.798.752h7.232a.8.8%200%2000.798-.752L17.226%206.4H6.774zm11.655%200l-.817%2013.719A2%202%200%200115.616%2022H8.384a2%202%200%2001-1.996-1.881L5.571%206.4H3.5v-.7a.5.5%200%2001.5-.5h16a.5.5%200%2001.5.5v.7h-2.071zM14%203a.5.5%200%2001.5.5v.7h-5v-.7A.5.5%200%200110%203h4zM9.5%209h1.2l.5%209H10l-.5-9zm3.8%200h1.2l-.5%209h-1.2l.5-9z%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M6.774%206.4l.812%2013.648a.8.8%200%2000.798.752h7.232a.8.8%200%2000.798-.752L17.226%206.4H6.774zm11.655%200l-.817%2013.719A2%202%200%200115.616%2022H8.384a2%202%200%2001-1.996-1.881L5.571%206.4H3.5v-.7a.5.5%200%2001.5-.5h16a.5.5%200%2001.5.5v.7h-2.071zM14%203a.5.5%200%2001.5.5v.7h-5v-.7A.5.5%200%200110%203h4zM9.5%209h1.2l.5%209H10l-.5-9zm3.8%200h1.2l-.5%209h-1.2l.5-9z%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-success-no-circle-thin{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M8.864%2016.617l-5.303-5.303-1.061%201.06%205.657%205.657a1%201%200%20001.414%200L21.238%206.364l-1.06-1.06L8.864%2016.616z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M8.864%2016.617l-5.303-5.303-1.061%201.06%205.657%205.657a1%201%200%20001.414%200L21.238%206.364l-1.06-1.06L8.864%2016.616z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-arrow{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-arrow-bold{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20height%3D%2224%22%20width%3D%2212%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10.157%2012.711L4.5%2018.368l-1.414-1.414%204.95-4.95-4.95-4.95L4.5%205.64l5.657%205.657a1%201%200%20010%201.414z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20height%3D%2224%22%20width%3D%2212%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10.157%2012.711L4.5%2018.368l-1.414-1.414%204.95-4.95-4.95-4.95L4.5%205.64l5.657%205.657a1%201%200%20010%201.414z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-back-arrow{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M3.343%2012l7.071%207.071L9%2020.485l-7.778-7.778a1%201%200%20010-1.414L9%203.515l1.414%201.414L3.344%2012z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M3.343%2012l7.071%207.071L9%2020.485l-7.778-7.778a1%201%200%20010-1.414L9%203.515l1.414%201.414L3.344%2012z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-back-arrow-thin{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10%2019.438L8.955%2020.5l-7.666-7.79a1.02%201.02%200%20010-1.42L8.955%203.5%2010%204.563%202.682%2012%2010%2019.438z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10%2019.438L8.955%2020.5l-7.666-7.79a1.02%201.02%200%20010-1.42L8.955%203.5%2010%204.563%202.682%2012%2010%2019.438z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-close{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2010.586l5.657-5.657%201.414%201.414L13.414%2012l5.657%205.657-1.414%201.414L12%2013.414l-5.657%205.657-1.414-1.414L10.586%2012%204.929%206.343%206.343%204.93%2012%2010.586z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2010.586l5.657-5.657%201.414%201.414L13.414%2012l5.657%205.657-1.414%201.414L12%2013.414l-5.657%205.657-1.414-1.414L10.586%2012%204.929%206.343%206.343%204.93%2012%2010.586z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-close-thin{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12.25%2010.693L6.057%204.5%205%205.557l6.193%206.193L5%2017.943%206.057%2019l6.193-6.193L18.443%2019l1.057-1.057-6.193-6.193L19.5%205.557%2018.443%204.5z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12.25%2010.693L6.057%204.5%205%205.557l6.193%206.193L5%2017.943%206.057%2019l6.193-6.193L18.443%2019l1.057-1.057-6.193-6.193L19.5%205.557%2018.443%204.5z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-back-circle{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm0-1.2a8.8%208.8%200%20100-17.6%208.8%208.8%200%20000%2017.6zm1.999-5.363L12.953%2016.5%209.29%2012.723a1.045%201.045%200%20010-1.446L12.953%207.5%2014%208.563%2010.68%2012%2014%2015.438z%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm0-1.2a8.8%208.8%200%20100-17.6%208.8%208.8%200%20000%2017.6zm1.999-5.363L12.953%2016.5%209.29%2012.723a1.045%201.045%200%20010-1.446L12.953%207.5%2014%208.563%2010.68%2012%2014%2015.438z%22%2F%3E%3C%2Fsvg%3E)}.weui-icon-success{color:var(--weui-BRAND)}.weui-icon-waiting{color:var(--weui-BLUE)}.weui-icon-warn{color:var(--weui-RED)}.weui-icon-info{color:var(--weui-BLUE)}.weui-icon-success-circle,.weui-icon-success-no-circle,.weui-icon-success-no-circle-thin{color:var(--weui-BRAND)}.weui-icon-waiting-circle{color:var(--weui-BLUE)}.weui-icon-circle{color:var(--weui-FG-2)}.weui-icon-download{color:var(--weui-BRAND)}.weui-icon-info-circle{color:var(--weui-FG-2)}.weui-icon-safe-success{color:var(--weui-BRAND)}.weui-icon-safe-warn{color:var(--weui-YELLOW)}.weui-icon-cancel{color:var(--weui-RED)}.weui-icon-search{color:var(--weui-FG-1)}.weui-icon-clear{color:var(--weui-FG-2)}.weui-icon-clear:active{color:var(--weui-FG-1)}.weui-icon-delete.weui-icon_gallery-delete{color:var(--weui-WHITE)}.weui-icon-arrow,.weui-icon-arrow-bold,.weui-icon-back-arrow,.weui-icon-back-arrow-thin{width:12px}.weui-icon-arrow,.weui-icon-arrow-bold{color:var(--weui-FG-2)}.weui-icon-back,.weui-icon-back-arrow,.weui-icon-back-arrow-thin,.weui-icon-back-circle{color:var(--weui-FG-0)}.weui-icon_msg{width:64px;height:64px}.weui-icon_msg.weui-icon-warn{color:var(--weui-RED)}.weui-icon_msg-primary{width:64px;height:64px}.weui-icon_msg-primary.weui-icon-warn{color:var(--weui-YELLOW)}.weui-link{-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-link,.weui-link:visited{color:var(--weui-LINK)}.weui-btn{position:relative;display:block;width:184px;margin-left:auto;margin-right:auto;padding:8px 24px;box-sizing:border-box;font-weight:700;font-size:17px;text-align:center;text-decoration:none;color:#fff;line-height:1.41176471;border-radius:4px;overflow:hidden;-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-btn_block{width:auto}.weui-btn_inline{display:inline-block}.weui-btn_default{background-color:var(--weui-BTN-DEFAULT-BG)}.weui-btn_default,.weui-btn_default:not(.weui-btn_disabled):visited{color:var(--weui-BTN-DEFAULT-COLOR)}.weui-btn_default:not(.weui-btn_disabled):active{background-color:var(--weui-BTN-DEFAULT-ACTIVE-BG)}.weui-btn_primary{background-color:var(--weui-BRAND)}.weui-btn_primary:not(.weui-btn_disabled):visited{color:#fff}.weui-btn_primary:not(.weui-btn_disabled):active{background-color:var(--weui-TAG-TEXT-GREEN)}.weui-btn_warn{background-color:var(--weui-BTN-DEFAULT-BG)}.weui-btn_warn,.weui-btn_warn:not(.weui-btn_disabled):visited{color:var(--weui-RED)}.weui-btn_warn:not(.weui-btn_disabled):active{background-color:var(--weui-BTN-DEFAULT-ACTIVE-BG)}.weui-btn_disabled{color:var(--weui-BTN-DISABLED-FONT-COLOR);background-color:var(--weui-BTN-DEFAULT-BG)}.weui-btn_loading .weui-loading{margin:-.2em .34em 0 0}.weui-btn_loading.weui-btn_primary{background-color:var(--weui-TAG-TEXT-GREEN);color:var(--weui-WHITE)}.weui-btn_loading.weui-btn_default,.weui-btn_loading.weui-btn_warn{background-color:var(--weui-BTN-DEFAULT-ACTIVE-BG)}.weui-btn_cell{position:relative;display:block;margin-left:auto;margin-right:auto;box-sizing:border-box;font-size:17px;text-align:center;text-decoration:none;color:#fff;line-height:1.41176471;padding:16px;-webkit-tap-highlight-color:rgba(0,0,0,0);overflow:hidden;background-color:var(--weui-BG-5)}.weui-btn_cell+.weui-btn_cell{margin-top:16px}.weui-btn_cell:active{background-color:var(--weui-BG-COLOR-ACTIVE)}.weui-btn_cell__icon{display:inline-block;vertical-align:middle;width:24px;height:24px;margin:-.2em .34em 0 0}.weui-btn_cell-default{color:var(--weui-FG-0)}.weui-btn_cell-primary{color:var(--weui-LINK)}.weui-btn_cell-warn{color:var(--weui-RED)}button.weui-btn,input.weui-btn{border-width:0;outline:0;-webkit-appearance:none}button.weui-btn:focus,input.weui-btn:focus{outline:0}button.weui-btn_inline,button.weui-btn_mini,input.weui-btn_inline,input.weui-btn_mini{width:auto}.weui-btn_mini{display:inline-block;width:auto;padding:0 .75em;line-height:2;font-size:16px}.weui-btn:not(.weui-btn_mini)+.weui-btn:not(.weui-btn_mini){margin-top:16px}.weui-btn.weui-btn_inline+.weui-btn.weui-btn_inline{margin-top:auto;margin-left:16px}.weui-btn-area{margin:48px 16px 8px}.weui-btn-area_inline{display:-webkit-box;display:-webkit-flex;display:flex}.weui-btn-area_inline .weui-btn{margin-top:auto;margin-right:16px;width:100%;-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-btn-area_inline .weui-btn:last-child{margin-right:0}.weui-btn_reset{background:transparent;border:0;padding:0;outline:0}.weui-btn_icon{font-size:0}.weui-btn_icon:active [class*=weui-icon-]{color:var(--weui-FG-1)}.weui-cells{margin-top:8px;background-color:var(--weui-BG-2);line-height:1.41176471;font-size:17px;overflow:hidden;position:relative}.weui-cells:before{top:0;border-top:1px solid var(--weui-FG-3);-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-cells:after,.weui-cells:before{content:" ";position:absolute;left:0;right:0;height:1px;color:var(--weui-FG-3);z-index:2}.weui-cells:after{bottom:0;border-bottom:1px solid var(--weui-FG-3);-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-cells__title{margin-top:16px;margin-bottom:3px;padding-left:16px;padding-right:16px;color:var(--weui-FG-1);font-size:14px;line-height:1.4}.weui-cells__title+.weui-cells{margin-top:0}.weui-cells__tips{margin-top:8px;color:var(--weui-FG-1);padding-left:16px;padding-right:16px;font-size:14px;line-height:1.4}.weui-cells__tips a,.weui-cells__tips navigator{color:var(--weui-LINK)}.weui-cells__tips navigator{display:inline}.weui-cell{padding:16px;position:relative;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-cell:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid var(--weui-FG-3);color:var(--weui-FG-3);-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5);left:16px;z-index:2}.weui-cell:first-child:before{display:none}.weui-cell_active:active{background-color:var(--weui-BG-COLOR-ACTIVE)}.weui-cell_primary{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start}.weui-cell__bd{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-cell__ft{text-align:right;color:var(--weui-FG-1)}.weui-cell_swiped{display:block;padding:0}.weui-cell_swiped>.weui-cell__bd{position:relative;z-index:1;background-color:var(--weui-BG-2)}.weui-cell_swiped>.weui-cell__ft{position:absolute;right:0;top:0;bottom:0;display:-webkit-box;display:-webkit-flex;display:flex;color:#fff}.weui-swiped-btn{display:block;padding:16px 1em;line-height:1.41176471;color:inherit}.weui-swiped-btn_default{background-color:var(--weui-BG-0)}.weui-swiped-btn_warn{background-color:var(--weui-RED)}.weui-cell_access{-webkit-tap-highlight-color:rgba(0,0,0,0);color:inherit}.weui-cell_access:active{background-color:var(--weui-BG-COLOR-ACTIVE)}.weui-cell_access .weui-cell__ft{padding-right:22px;position:relative}.weui-cell_access .weui-cell__ft:after{content:" ";width:12px;height:24px;-webkit-mask-position:0 0;mask-position:0 0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%;background-color:currentColor;color:var(--weui-FG-2);-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);position:absolute;top:50%;right:0;margin-top:-12px}.weui-cell_link{color:var(--weui-LINK);font-size:17px}.weui-cell_link:first-child:before{display:block}.weui-check__label{-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-check__label:active{background-color:var(--weui-BG-COLOR-ACTIVE)}.weui-check{position:absolute;left:-9999px}.weui-cells_radio .weui-cell__ft{padding-left:16px;font-size:0}.weui-cells_radio .weui-check+.weui-icon-checked{min-width:16px;color:transparent}.weui-cells_radio .weui-check:checked+.weui-icon-checked,.weui-cells_radio .weui-check[aria-checked=true]+.weui-icon-checked{color:var(--weui-BRAND);-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M8.657%2018.435L3%2012.778l1.414-1.414%204.95%204.95L20.678%205l1.414%201.414-12.02%2012.021a1%201%200%2001-1.415%200z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M8.657%2018.435L3%2012.778l1.414-1.414%204.95%204.95L20.678%205l1.414%201.414-12.02%2012.021a1%201%200%2001-1.415%200z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E)}.weui-cells_checkbox .weui-check__label:before{left:55px}.weui-cells_checkbox .weui-cell__hd{padding-right:16px;font-size:0}.weui-cells_checkbox .weui-icon-checked{color:var(--weui-FG-2);-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%221000%22%20height%3D%221000%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M500%20916.667C269.881%20916.667%2083.333%20730.119%2083.333%20500%2083.333%20269.881%20269.881%2083.333%20500%2083.333c230.119%200%20416.667%20186.548%20416.667%20416.667%200%20230.119-186.548%20416.667-416.667%20416.667zm0-50c202.504%200%20366.667-164.163%20366.667-366.667%200-202.504-164.163-366.667-366.667-366.667-202.504%200-366.667%20164.163-366.667%20366.667%200%20202.504%20164.163%20366.667%20366.667%20366.667z%22%20fill-rule%3D%22evenodd%22%20fill-opacity%3D%22.9%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%221000%22%20height%3D%221000%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M500%20916.667C269.881%20916.667%2083.333%20730.119%2083.333%20500%2083.333%20269.881%20269.881%2083.333%20500%2083.333c230.119%200%20416.667%20186.548%20416.667%20416.667%200%20230.119-186.548%20416.667-416.667%20416.667zm0-50c202.504%200%20366.667-164.163%20366.667-366.667%200-202.504-164.163-366.667-366.667-366.667-202.504%200-366.667%20164.163-366.667%20366.667%200%20202.504%20164.163%20366.667%20366.667%20366.667z%22%20fill-rule%3D%22evenodd%22%20fill-opacity%3D%22.9%22%2F%3E%3C%2Fsvg%3E)}.weui-cells_checkbox .weui-check:checked+.weui-icon-checked,.weui-cells_checkbox .weui-check[aria-checked=true]+.weui-icon-checked{color:var(--weui-BRAND);-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-1.177-7.86l-2.765-2.767L7%2012.431l3.119%203.121a1%201%200%20001.414%200l5.952-5.95-1.062-1.062-5.6%205.6z%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-1.177-7.86l-2.765-2.767L7%2012.431l3.119%203.121a1%201%200%20001.414%200l5.952-5.95-1.062-1.062-5.6%205.6z%22%2F%3E%3C%2Fsvg%3E)}.weui-label{display:block;width:105px;word-wrap:break-word;word-break:break-all}.weui-input{width:100%;border:0;outline:0;-webkit-appearance:none;background-color:transparent;font-size:inherit;color:inherit;height:1.41176471em;line-height:1.41176471}.weui-input::-webkit-inner-spin-button,.weui-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.weui-input:focus:not(:placeholder-shown)+.weui-btn_input-clear{display:inline}.weui-input::-webkit-input-placeholder,.weui-input__placeholder{color:var(--weui-FG-2)}.weui-input::placeholder,.weui-input__placeholder{color:var(--weui-FG-2)}.weui-textarea{display:block;border:0;resize:none;background:transparent;width:100%;color:inherit;font-size:1em;line-height:inherit;outline:0}.weui-textarea-counter{color:var(--weui-FG-2);text-align:right;font-size:14px}.weui-cell_warn .weui-textarea-counter{color:var(--weui-RED)}.weui-cells_form .weui-cell_disabled:active,.weui-cells_form .weui-cell_readonly:active,.weui-cells_form .weui-cell_switch:active,.weui-cells_form .weui-cell_vcode:active{background-color:transparent}.weui-cells_form .weui-cell__ft{font-size:0}.weui-cells_form .weui-icon-warn{display:none}.weui-cells_form input,.weui-cells_form label[for],.weui-cells_form textarea{-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-cell_warn{color:var(--weui-RED)}.weui-cell_warn .weui-icon-warn{display:inline-block}.weui-cell_disabled .weui-input:disabled,.weui-cell_disabled .weui-textarea:disabled,.weui-cell_readonly .weui-input:disabled,.weui-cell_readonly .weui-textarea:disabled{opacity:1;-webkit-text-fill-color:var(--weui-FG-1)}.weui-cell_disabled .weui-input[disabled],.weui-cell_disabled .weui-input[readonly],.weui-cell_disabled .weui-textarea[disabled],.weui-cell_disabled .weui-textarea[readonly],.weui-cell_readonly .weui-input[disabled],.weui-cell_readonly .weui-input[readonly],.weui-cell_readonly .weui-textarea[disabled],.weui-cell_readonly .weui-textarea[readonly]{color:var(--weui-FG-1)}.weui-btn_input-clear{display:none;padding-left:8px}.weui-btn_input-clear [class*=weui-icon-]{width:18px}.weui-form-preview{position:relative;background-color:var(--weui-BG-2)}.weui-form-preview:before{top:0;border-top:1px solid var(--weui-FG-3);-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-form-preview:after,.weui-form-preview:before{content:" ";position:absolute;left:0;right:0;height:1px;color:var(--weui-FG-3)}.weui-form-preview:after{bottom:0;border-bottom:1px solid var(--weui-FG-3);-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-form-preview__hd{position:relative;padding:16px;text-align:right;line-height:2.5em}.weui-form-preview__hd:after{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1px solid var(--weui-FG-3);color:var(--weui-FG-3);-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5);left:16px}.weui-form-preview__hd .weui-form-preview__value{font-style:normal;font-size:1.6em}.weui-form-preview__bd{padding:16px;font-size:.9em;text-align:right;color:var(--weui-FG-1);line-height:2}.weui-form-preview__ft{position:relative;line-height:50px;display:-webkit-box;display:-webkit-flex;display:flex}.weui-form-preview__ft:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid var(--weui-DIALOG-LINE-COLOR);color:var(--weui-DIALOG-LINE-COLOR);-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-form-preview__item{overflow:hidden}.weui-form-preview__label{float:left;margin-right:1em;min-width:4em;color:var(--weui-FG-1);text-align:justify;text-align-last:justify}.weui-form-preview__value{display:block;overflow:hidden;word-break:normal;word-wrap:break-word;color:var(--weui-FG-0)}.weui-form-preview__btn{position:relative;display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;color:var(--weui-LINK);text-align:center;-webkit-tap-highlight-color:rgba(0,0,0,0)}button.weui-form-preview__btn{background-color:transparent;border:0;outline:0;line-height:inherit;font-size:inherit}.weui-form-preview__btn:active{background-color:var(--weui-BG-COLOR-ACTIVE)}.weui-form-preview__btn:after{content:" ";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1px solid var(--weui-DIALOG-LINE-COLOR);color:var(--weui-DIALOG-LINE-COLOR);-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-form-preview__btn:first-child:after{display:none}.weui-form-preview__btn_default{color:var(--weui-FG-HALF)}.weui-form-preview__btn_primary{color:var(--weui-LINK)}.weui-cell_select{padding:0}.weui-cell_select .weui-select{padding-right:30px}.weui-cell_select .weui-cell__bd:after{content:" ";width:12px;height:24px;-webkit-mask-position:0 0;mask-position:0 0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%;background-color:currentColor;color:var(--weui-FG-2);-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);position:absolute;top:50%;right:16px;margin-top:-12px}.weui-select{-webkit-appearance:none;border:0;outline:0;background-color:transparent;width:100%;font-size:inherit;height:56px;line-height:56px;position:relative;z-index:1;padding-left:16px;color:var(--weui-FG-0)}.weui-cell_select-before{padding-right:16px}.weui-cell_select-before .weui-select{width:105px;box-sizing:border-box}.weui-cell_select-before .weui-cell__hd{position:relative}.weui-cell_select-before .weui-cell__hd:after{content:" ";position:absolute;right:0;top:0;width:1px;bottom:0;border-right:1px solid var(--weui-FG-3);color:var(--weui-FG-3);-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-cell_select-before .weui-cell__hd:before{content:" ";width:12px;height:24px;-webkit-mask-position:0 0;mask-position:0 0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%;background-color:currentColor;color:var(--weui-FG-2);-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);position:absolute;top:50%;right:16px;margin-top:-12px}.weui-cell_select-before .weui-cell__bd{padding-left:16px}.weui-cell_select-before .weui-cell__bd:after{display:none}.weui-cell_select-before.weui-cell_access .weui-cell__hd{line-height:56px;padding-left:32px}.weui-cell_select-after{padding-left:16px}.weui-cell_select-after .weui-select{padding-left:0}.weui-cell_select-after.weui-cell_access .weui-cell__bd{line-height:56px}.weui-cell_vcode{padding-top:0;padding-right:0;padding-bottom:0}.weui-vcode-btn,.weui-vcode-img{margin-left:5px;height:56px;vertical-align:middle}.weui-vcode-btn{display:inline-block;padding:0 .6em 0 .7em;line-height:56px;font-size:17px;color:var(--weui-LINK);position:relative}.weui-vcode-btn:before{content:" ";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1px solid var(--weui-FG-3);color:var(--weui-FG-3);-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}button.weui-vcode-btn{background-color:transparent;border:0;outline:0}.weui-vcode-btn:active{color:#767676}.weui-gallery{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background-color:#000;z-index:1000}.weui-gallery__img,.weui-gallery__opr{position:absolute;left:0;left:constant(safe-area-inset-left);left:env(safe-area-inset-left);right:0;right:constant(safe-area-inset-right);right:env(safe-area-inset-right)}.weui-gallery__img{top:0;top:constant(safe-area-inset-top);top:env(safe-area-inset-top);bottom:60px;bottom:calc(60px + constant(safe-area-inset-bottom));bottom:calc(60px + env(safe-area-inset-bottom));background:50% no-repeat;background-size:contain}.weui-gallery__opr{position:absolute;bottom:0;padding-bottom:0;padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom);background-color:#0d0d0d;color:var(--weui-WHITE);line-height:60px;text-align:center}.weui-gallery__del{display:block}.weui-cell_switch{padding-top:12px;padding-bottom:12px}.weui-switch{-webkit-appearance:none;appearance:none}.weui-switch,.weui-switch-cp__box{position:relative;width:52px;height:32px;border:2px solid var(--weui-FG-3);outline:0;border-radius:16px;box-sizing:border-box;-webkit-transition:background-color .1s,border .1s;transition:background-color .1s,border .1s}.weui-switch-cp__box:before,.weui-switch:before{content:" ";position:absolute;top:0;left:0;bottom:0;right:0;border-radius:15px;background-color:var(--weui-BG-3);-webkit-transition:-webkit-transform .35s cubic-bezier(.45,1,.4,1);transition:-webkit-transform .35s cubic-bezier(.45,1,.4,1);transition:transform .35s cubic-bezier(.45,1,.4,1);transition:transform .35s cubic-bezier(.45,1,.4,1),-webkit-transform .35s cubic-bezier(.45,1,.4,1)}.weui-switch-cp__box:after,.weui-switch:after{content:" ";position:absolute;top:0;left:0;width:28px;height:28px;border-radius:15px;background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.4);-webkit-transition:-webkit-transform .35s cubic-bezier(.4,.4,.25,1.35);transition:-webkit-transform .35s cubic-bezier(.4,.4,.25,1.35);transition:transform .35s cubic-bezier(.4,.4,.25,1.35);transition:transform .35s cubic-bezier(.4,.4,.25,1.35),-webkit-transform .35s cubic-bezier(.4,.4,.25,1.35)}.weui-switch-cp__input:checked+.weui-switch-cp__box,.weui-switch-cp__input[aria-checked=true]+.weui-switch-cp__box,.weui-switch:checked{border-color:var(--weui-BRAND);background-color:var(--weui-BRAND)}.weui-switch-cp__input:checked+.weui-switch-cp__box:before,.weui-switch-cp__input[aria-checked=true]+.weui-switch-cp__box:before,.weui-switch:checked:before{-webkit-transform:scale(0);transform:scale(0)}.weui-switch-cp__input:checked+.weui-switch-cp__box:after,.weui-switch-cp__input[aria-checked=true]+.weui-switch-cp__box:after,.weui-switch:checked:after{-webkit-transform:translateX(20px);transform:translateX(20px)}.weui-switch-cp__input{position:absolute;left:-9999px}.weui-switch-cp__box{display:block}.weui-uploader{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-uploader__hd{display:-webkit-box;display:-webkit-flex;display:flex;padding-bottom:16px;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-uploader__title{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-uploader__info{color:var(--weui-FG-2)}.weui-uploader__bd{margin-bottom:-8px;margin-right:-8px;overflow:hidden}.weui-uploader__files{list-style:none}.weui-uploader__file{float:left;margin-right:8px;margin-bottom:8px;width:96px;height:96px;background:no-repeat 50%;background-size:cover}.weui-uploader__file_status{position:relative}.weui-uploader__file_status:before{content:" ";position:absolute;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,.5)}.weui-uploader__file_status .weui-uploader__file-content{display:block}.weui-uploader__file-content{display:none;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:var(--weui-WHITE)}.weui-uploader__file-content .weui-icon-warn{display:inline-block}.weui-uploader__input-box{float:left;position:relative;margin-right:8px;margin-bottom:8px;width:96px;height:96px;box-sizing:border-box;background-color:#ededed}[data-weui-theme=dark] .weui-uploader__input-box{background-color:#2e2e2e}.weui-uploader__input-box:after,.weui-uploader__input-box:before{content:" ";position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background-color:#a3a3a3}[data-weui-theme=dark] .weui-uploader__input-box:after,[data-weui-theme=dark] .weui-uploader__input-box:before{background-color:#6d6d6d}.weui-uploader__input-box:before{width:2px;height:32px}.weui-uploader__input-box:after{width:32px;height:2px}.weui-uploader__input-box:active:after,.weui-uploader__input-box:active:before{opacity:.7}.weui-uploader__input{position:absolute;z-index:1;top:0;left:0;width:100%;height:100%;opacity:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-msg{padding-top:48px;padding:calc(48px + constant(safe-area-inset-top)) constant(safe-area-inset-right) constant(safe-area-inset-bottom) constant(safe-area-inset-left);padding:calc(48px + env(safe-area-inset-top)) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);text-align:center;line-height:1.4;min-height:100%;box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;background-color:var(--weui-BG-2)}.weui-msg a:not(.weui-btn){color:var(--weui-LINK);display:inline-block;vertical-align:baseline}.weui-msg__icon-area{margin-bottom:32px}.weui-msg__text-area{margin-bottom:32px;padding:0 32px;-webkit-box-flex:1;-webkit-flex:1;flex:1;line-height:1.6}.weui-msg__text-area:first-child{padding-top:96px}.weui-msg__title{font-weight:700;font-size:22px}.weui-msg__desc,.weui-msg__title{margin-bottom:16px;color:var(--weui-FG-0);word-wrap:break-word;word-break:break-all}.weui-msg__desc{font-size:17px}.weui-msg__desc-primary{font-size:14px;color:var(--weui-FG-1);word-wrap:break-word;word-break:break-all;margin-bottom:16px}.weui-msg__opr-area{margin-bottom:16px}.weui-msg__opr-area .weui-btn-area{margin:0}.weui-msg__opr-area .weui-btn+.weui-btn{margin-bottom:16px}.weui-msg__opr-area:last-child{margin-bottom:96px}.weui-msg__opr-area+.weui-msg__extra-area{margin-top:48px}.weui-msg__tips-area{margin-bottom:16px;padding:0 40px}.weui-msg__opr-area+.weui-msg__tips-area{margin-bottom:48px}.weui-msg__tips-area:last-child{margin-bottom:64px}.weui-msg__extra-area,.weui-msg__tips{font-size:12px;color:var(--weui-FG-1)}.weui-msg__extra-area{margin-bottom:24px}.weui-msg__extra-area a,.weui-msg__extra-area navigator{color:var(--weui-LINK)}.weui-msg__extra-area navigator{display:inline}.weui-cells__group_form:first-child .weui-cells__title{margin-top:0}.weui-cells__group_form .weui-cells__title{margin-top:24px;margin-bottom:8px;padding:0 32px}.weui-cells__group_form .weui-cell:before,.weui-cells__group_form .weui-cells:before{left:32px;right:32px}.weui-cells__group_form .weui-cells_checkbox .weui-check__label:before{left:72px}.weui-cells__group_form .weui-cells:after{left:32px;right:32px}.weui-cells__group_form .weui-cell{padding:16px 32px}.weui-cells__group_form .weui-cell:not(.weui-cell_link){color:var(--weui-FG-0)}.weui-cells__group_form .weui-cell__hd{padding-right:16px}.weui-cells__group_form .weui-cell__ft{padding-left:16px}.weui-cells__group_form .weui-cell_warn input{color:var(--weui-RED)}.weui-cells__group_form .weui-label{max-width:5em;margin-right:8px}.weui-cells__group_form .weui-cells__tips{margin-top:8px;padding:0 32px;color:rgba(0,0,0,.3)}.weui-cells__group_form .weui-cells__tips a{font-weight:700}.weui-cells__group_form .weui-cell_vcode{padding:12px 32px}.weui-cells__group_form .weui-vcode-btn{font-size:16px;padding:0 12px;margin-left:0;height:auto;width:auto;line-height:2em;color:var(--weui-BTN-DEFAULT-COLOR);background-color:var(--weui-BTN-DEFAULT-BG)}.weui-cells__group_form .weui-vcode-btn:before{display:none}.weui-cells__group_form .weui-cell_select{padding:0}.weui-cells__group_form .weui-cell_select .weui-select{padding:0 32px}.weui-cells__group_form .weui-cell_select .weui-cell__bd:after{right:32px}.weui-cells__group_form .weui-cell_select-before .weui-label{margin-right:24px}.weui-cells__group_form .weui-cell_select-before .weui-select{padding-right:24px;box-sizing:initial}.weui-cells__group_form .weui-cell_select-after{padding-left:32px}.weui-cells__group_form .weui-cell_select-after .weui-select{padding-left:0}.weui-cells__group_form .weui-cell_switch{padding:12px 32px}.weui-form{padding:56px 0 0;padding:calc(56px + constant(safe-area-inset-top)) constant(safe-area-inset-right) constant(safe-area-inset-bottom) constant(safe-area-inset-left);padding:calc(56px + env(safe-area-inset-top)) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;line-height:1.4;min-height:100%;box-sizing:border-box;background-color:var(--weui-BG-2)}.weui-form .weui-footer,.weui-form .weui-footer__link{font-size:14px}.weui-form .weui-agree{padding:0}.weui-form__text-area{padding:0 32px;color:var(--weui-FG-0);text-align:center}.weui-form__control-area{-webkit-box-flex:1;-webkit-flex:1;flex:1;margin:48px 0}.weui-form__tips-area{overflow:hidden}.weui-form__extra-area,.weui-form__tips-area{margin-bottom:24px;text-align:center}.weui-form__opr-area{margin-bottom:64px}.weui-form__opr-area:last-child{margin-bottom:96px}.weui-form__title{font-size:22px;font-weight:700;line-height:1.36}.weui-form__desc{font-size:17px;margin-top:16px}.weui-form__tips{color:var(--weui-FG-1);font-size:14px}.weui-form__tips a,.weui-form__tips navigator{color:var(--weui-LINK)}.weui-form__tips navigator{display:inline}.weui-article{padding:24px 16px;padding:24px calc(16px + constant(safe-area-inset-right)) calc(24px + constant(safe-area-inset-bottom)) calc(16px + constant(safe-area-inset-left));padding:24px calc(16px + env(safe-area-inset-right)) calc(24px + env(safe-area-inset-bottom)) calc(16px + env(safe-area-inset-left));font-size:17px;color:var(--weui-FG-0)}.weui-article__section{margin-bottom:1.5em}.weui-article__h1{font-size:22px;font-weight:700;margin-bottom:.9em;line-height:1.4}.weui-article__h2{font-size:17px}.weui-article__h2,.weui-article__h3{font-weight:700;margin-bottom:.34em;line-height:1.4}.weui-article__h3{font-size:15px}.weui-article__p{margin:0 0 .8em}.weui-tabbar{display:-webkit-box;display:-webkit-flex;display:flex;position:relative;z-index:500;background-color:var(--weui-BG-1)}.weui-tabbar:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid var(--weui-FG-3);color:var(--weui-FG-3);-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-tabbar__item{display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;padding:8px 0;padding-bottom:calc(8px + constant(safe-area-inset-bottom));padding-bottom:calc(8px + env(safe-area-inset-bottom));font-size:0;color:var(--weui-FG-1);text-align:center;-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-tabbar__item:first-child{padding-left:constant(safe-area-inset-left);padding-left:env(safe-area-inset-left)}.weui-tabbar__item:last-child{padding-right:constant(safe-area-inset-right);padding-right:env(safe-area-inset-right)}.weui-tabbar__item.weui-bar__item_on .weui-tabbar__icon,.weui-tabbar__item.weui-bar__item_on .weui-tabbar__icon>i,.weui-tabbar__item.weui-bar__item_on .weui-tabbar__label{color:var(--weui-BRAND)}.weui-tabbar__icon{display:inline-block;width:28px;height:28px;margin-bottom:2px}.weui-tabbar__icon>i,i.weui-tabbar__icon{font-size:24px;color:var(--weui-FG-1)}.weui-tabbar__icon img{width:100%;height:100%}.weui-tabbar__label{color:var(--weui-FG-0);font-size:10px;line-height:1.4}.weui-navbar{display:-webkit-box;display:-webkit-flex;display:flex;position:relative;z-index:500;background-color:var(--weui-BG-2);padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}.weui-navbar:after{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1px solid var(--weui-FG-3);color:var(--weui-FG-3);-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-navbar+.weui-tab__panel{padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.weui-navbar__item{position:relative;display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;padding:16px 0;padding-top:calc(16px + constant(safe-area-inset-top));padding-top:calc(16px + env(safe-area-inset-top));text-align:center;font-size:17px;line-height:1.41176471;-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-navbar__item.weui-bar__item_on,.weui-navbar__item:active{background-color:var(--weui-BG-COLOR-ACTIVE)}.weui-navbar__item:after{content:" ";position:absolute;right:0;top:0;width:1px;bottom:0;border-right:1px solid var(--weui-FG-3);color:var(--weui-FG-3);-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-navbar__item:first-child{padding-left:constant(safe-area-inset-left);padding-left:env(safe-area-inset-left)}.weui-navbar__item:last-child{padding-right:constant(safe-area-inset-right);padding-right:env(safe-area-inset-right)}.weui-navbar__item:last-child:after{display:none}.weui-tab{display:-webkit-box;display:-webkit-flex;display:flex;height:100%;box-sizing:border-box;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column}.weui-tab__panel{box-sizing:border-box;-webkit-box-flex:1;-webkit-flex:1;flex:1;overflow:auto;-webkit-overflow-scrolling:touch}.weui-tab__content{display:none}.weui-progress{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-progress__bar{background-color:var(--weui-BG-0);height:3px;-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-progress__inner-bar{width:0;height:100%;background-color:var(--weui-BRAND)}.weui-progress__opr{display:block;margin-left:15px;font-size:0}.weui-panel{background-color:var(--weui-BG-2);margin-top:10px;position:relative;overflow:hidden}.weui-panel:first-child{margin-top:0}.weui-panel:before{top:0;border-top:1px solid var(--weui-FG-3);-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-panel:after,.weui-panel:before{content:" ";position:absolute;left:0;right:0;height:1px;color:var(--weui-FG-3)}.weui-panel:after{bottom:0;border-bottom:1px solid var(--weui-FG-3);-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-panel__hd{padding:16px 16px 13px;color:var(--weui-FG-0);font-size:15px;font-weight:700;position:relative}.weui-panel__hd:after{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1px solid var(--weui-FG-3);color:var(--weui-FG-3);-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5);left:15px}.weui-media-box{padding:16px;position:relative}.weui-media-box:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid var(--weui-FG-3);color:var(--weui-FG-3);-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5);left:16px}.weui-media-box:first-child:before{display:none}a.weui-media-box{color:#000;-webkit-tap-highlight-color:rgba(0,0,0,0)}a.weui-media-box:active{background-color:var(--weui-BG-COLOR-ACTIVE)}.weui-media-box__title{font-weight:400;font-size:17px;color:var(--weui-FG-0);width:auto;white-space:nowrap;word-wrap:normal;word-wrap:break-word;word-break:break-all}.weui-media-box__desc,.weui-media-box__title{line-height:1.4;overflow:hidden;text-overflow:ellipsis}.weui-media-box__desc{color:var(--weui-FG-2);font-size:14px;padding-top:4px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.weui-media-box__info{margin-top:16px;padding-bottom:4px;font-size:13px;color:var(--weui-FG-2);line-height:1em;list-style:none;overflow:hidden}.weui-media-box__info__meta{float:left;padding-right:1em}.weui-media-box__info__meta_extra{padding-left:1em;border-left:1px solid var(--weui-FG-2)}.weui-media-box_appmsg{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-media-box_appmsg .weui-media-box__hd{margin-right:16px;width:60px;height:60px;line-height:60px;text-align:center}.weui-media-box_appmsg .weui-media-box__thumb{width:100%;max-height:100%;vertical-align:top}.weui-media-box_appmsg .weui-media-box__bd{-webkit-box-flex:1;-webkit-flex:1;flex:1;min-width:0}.weui-media-box_small-appmsg{padding:0}.weui-media-box_small-appmsg .weui-cells{margin-top:0}.weui-media-box_small-appmsg .weui-cells:before{display:none}.weui-grids{position:relative;overflow:hidden}.weui-grids:before{right:0;height:1px;border-top:1px solid var(--weui-FG-3);-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-grids:after,.weui-grids:before{content:" ";position:absolute;left:0;top:0;color:var(--weui-FG-3)}.weui-grids:after{width:1px;bottom:0;border-left:1px solid var(--weui-FG-3);-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-grid{position:relative;float:left;padding:20px 10px;width:33.33333333%;box-sizing:border-box}.weui-grid:before{top:0;width:1px;border-right:1px solid var(--weui-FG-3);-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-grid:after,.weui-grid:before{content:" ";position:absolute;right:0;bottom:0;color:var(--weui-FG-3)}.weui-grid:after{left:0;height:1px;border-bottom:1px solid var(--weui-FG-3);-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-grid:active{background-color:var(--weui-BG-COLOR-ACTIVE)}.weui-grid__icon{width:28px;height:28px;margin:0 auto}.weui-grid__icon img{display:block;width:100%;height:100%}.weui-grid__icon+.weui-grid__label{margin-top:4px}.weui-grid__label{display:block;color:var(--weui-FG-0);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.weui-footer,.weui-grid__label{text-align:center;font-size:14px}.weui-footer{color:var(--weui-FG-2);line-height:1.4}.weui-footer a,.weui-footer navigator{color:var(--weui-LINK)}.weui-footer navigator{display:inline}.weui-footer_fixed-bottom{position:fixed;bottom:0;left:0;right:0;padding-top:16px;padding-bottom:16px;padding-bottom:calc(16px + constant(safe-area-inset-bottom));padding-bottom:calc(16px + env(safe-area-inset-bottom));left:constant(safe-area-inset-left);left:env(safe-area-inset-left);right:constant(safe-area-inset-right);right:env(safe-area-inset-right)}.weui-footer__links{font-size:0}.weui-footer__link{display:inline-block;vertical-align:top;margin:0 8px;position:relative;font-size:14px}.weui-footer__link:before{content:" ";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1px solid var(--weui-FG-3);color:var(--weui-FG-3);-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5);left:-8px;top:.36em;bottom:.36em}.weui-footer__link:first-child:before{display:none}.weui-footer__text{padding:0 16px;font-size:12px}.weui-flex{display:-webkit-box;display:-webkit-flex;display:flex}.weui-flex__item{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-dialog{position:fixed;z-index:5000;top:50%;left:16px;right:16px;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:var(--weui-BG-2);text-align:center;border-radius:12px;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;max-height:90%}.weui-dialog__hd{padding:32px 24px 16px}.weui-dialog__title{font-weight:700;font-size:17px;line-height:1.4}.weui-dialog__bd{overflow-y:auto;-webkit-overflow-scrolling:touch;padding:0 24px;margin-bottom:32px;font-size:17px;line-height:1.4;word-wrap:break-word;-webkit-hyphens:auto;hyphens:auto;color:var(--weui-FG-1)}.weui-dialog__bd:first-child{min-height:40px;padding:32px 24px 0;font-weight:700;color:var(--weui-FG-0);-webkit-flex-direction:column;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.weui-dialog__bd:first-child,.weui-dialog__ft{display:-webkit-box;display:-webkit-flex;display:flex}.weui-dialog__ft{position:relative;line-height:56px;min-height:56px;font-size:17px}.weui-dialog__ft:after{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid var(--weui-DIALOG-LINE-COLOR);color:var(--weui-DIALOG-LINE-COLOR);-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-dialog__btn{display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;color:var(--weui-LINK);font-weight:700;text-decoration:none;-webkit-tap-highlight-color:rgba(0,0,0,0);position:relative}.weui-dialog__btn:active{background-color:var(--weui-BG-COLOR-ACTIVE)}.weui-dialog__btn:after{content:" ";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1px solid var(--weui-DIALOG-LINE-COLOR);color:var(--weui-DIALOG-LINE-COLOR);-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-dialog__btn:first-child:after{display:none}.weui-dialog__btn_default{color:var(--weui-FG-HALF)}.weui-skin_android .weui-dialog{text-align:left;box-shadow:0 6px 30px 0 rgba(0,0,0,.1)}.weui-skin_android .weui-dialog__title{font-size:22px;line-height:1.4}.weui-skin_android .weui-dialog__hd{text-align:left}.weui-skin_android .weui-dialog__bd{color:var(--weui-FG-1);text-align:left}.weui-skin_android .weui-dialog__bd:first-child{color:var(--weui-FG-0)}.weui-skin_android .weui-dialog__ft{display:block;text-align:right;line-height:40px;min-height:40px;padding:0 24px 16px}.weui-skin_android .weui-dialog__ft:after{display:none}.weui-skin_android .weui-dialog__btn{display:inline-block;vertical-align:top;padding:0 .8em}.weui-skin_android .weui-dialog__btn:after{display:none}.weui-skin_android .weui-dialog__btn:last-child{margin-right:-.8em}.weui-skin_android .weui-dialog__btn_default{color:var(--weui-FG-HALF)}@media screen and (min-width:352px){.weui-dialog{width:320px;margin:0 auto}}.weui-half-screen-dialog{position:fixed;left:0;right:0;bottom:0;max-height:75%;z-index:5000;line-height:1.4;background-color:var(--weui-BG-2);border-top-left-radius:12px;border-top-right-radius:12px;overflow:hidden;padding:0 24px;padding:0 calc(24px + constant(safe-area-inset-right)) constant(safe-area-inset-bottom) calc(24px + constant(safe-area-inset-left));padding:0 calc(24px + env(safe-area-inset-right)) env(safe-area-inset-bottom) calc(24px + env(safe-area-inset-left))}@media only screen and (max-height:558px){.weui-half-screen-dialog{max-height:none}}.weui-half-screen-dialog__hd{font-size:8px;height:8em;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-half-screen-dialog__hd .weui-icon-btn{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.weui-half-screen-dialog__hd .weui-icon-btn:active{opacity:.5}.weui-half-screen-dialog__hd__side{position:relative;left:-8px}.weui-half-screen-dialog__hd__main{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-half-screen-dialog__hd__side+.weui-half-screen-dialog__hd__main{text-align:center;padding:0 40px}.weui-half-screen-dialog__hd__main+.weui-half-screen-dialog__hd__side{right:-8px;left:auto}.weui-half-screen-dialog__hd__main+.weui-half-screen-dialog__hd__side .weui-icon-btn{right:0}.weui-half-screen-dialog__title{display:block;color:var(--weui-FG-0);font-weight:700;font-size:15px}.weui-half-screen-dialog__subtitle{display:block;color:var(--weui-FG-1);font-size:10px}.weui-half-screen-dialog__bd{word-wrap:break-word;-webkit-hyphens:auto;hyphens:auto;overflow-y:auto;padding-top:4px;padding-bottom:40px;font-size:14px;color:var(--weui-FG-0)}.weui-half-screen-dialog__desc{font-size:17px;font-weight:700;color:var(--weui-FG-0);line-height:1.4}.weui-half-screen-dialog__tips{padding-top:16px;font-size:14px;color:var(--weui-FG-2);line-height:1.4}.weui-half-screen-dialog__ft{padding:0 24px 32px;text-align:center}.weui-half-screen-dialog__ft .weui-btn:nth-last-child(n+2),.weui-half-screen-dialog__ft .weui-btn:nth-last-child(n+2)+.weui-btn{display:inline-block;vertical-align:top;margin:0 8px;width:120px}.weui-icon-btn{outline:0;-webkit-appearance:none;-webkit-tap-highlight-color:rgba(0,0,0,0);border-width:0;background-color:transparent;color:var(--weui-FG-0);font-size:0}.weui-icon-more{width:24px;-webkit-mask:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M5 10.25a1.75 1.75 0 1 1 0 3.5 1.75 1.75 0 0 1 0-3.5zm7 0a1.75 1.75 0 1 1 0 3.5 1.75 1.75 0 0 1 0-3.5zm7 0a1.75 1.75 0 1 1 0 3.5 1.75 1.75 0 0 1 0-3.5z'/%3E%3C/svg%3E") no-repeat 50% 50%;mask:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M5 10.25a1.75 1.75 0 1 1 0 3.5 1.75 1.75 0 0 1 0-3.5zm7 0a1.75 1.75 0 1 1 0 3.5 1.75 1.75 0 0 1 0-3.5zm7 0a1.75 1.75 0 1 1 0 3.5 1.75 1.75 0 0 1 0-3.5z'/%3E%3C/svg%3E") no-repeat 50% 50%;-webkit-mask-size:cover;mask-size:cover}.weui-icon-btn_goback,.weui-icon-more{display:inline-block;vertical-align:middle;height:24px;background-color:currentColor;color:var(--weui-FG-0)}.weui-icon-btn_goback{width:12px;-webkit-mask:url("data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10%2019.438L8.955%2020.5l-7.666-7.79a1.02%201.02%200%20010-1.42L8.955%203.5%2010%204.563%202.682%2012%2010%2019.438z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E") no-repeat 50% 50%;mask:url("data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10%2019.438L8.955%2020.5l-7.666-7.79a1.02%201.02%200%20010-1.42L8.955%203.5%2010%204.563%202.682%2012%2010%2019.438z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E") no-repeat 50% 50%;-webkit-mask-size:cover;mask-size:cover}.weui-icon-btn_close{color:var(--weui-FG-0);display:inline-block;vertical-align:middle;width:14px;height:24px;-webkit-mask:url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12.25%2010.693L6.057%204.5%205%205.557l6.193%206.193L5%2017.943%206.057%2019l6.193-6.193L18.443%2019l1.057-1.057-6.193-6.193L19.5%205.557%2018.443%204.5z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E") no-repeat 50% 50%;mask:url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12.25%2010.693L6.057%204.5%205%205.557l6.193%206.193L5%2017.943%206.057%2019l6.193-6.193L18.443%2019l1.057-1.057-6.193-6.193L19.5%205.557%2018.443%204.5z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E") no-repeat 50% 50%;-webkit-mask-size:cover;mask-size:cover;background-color:currentColor}.weui-toast{position:fixed;z-index:5000;width:120px;height:120px;top:40%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;border-radius:5px;color:hsla(0,0%,100%,.9);display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;background-color:var(--weui-BG-4)}.weui-icon_toast{display:block}.weui-icon_toast.weui-icon-success-no-circle{color:hsla(0,0%,100%,.9);width:55px;height:55px}.weui-icon_toast.weui-loading{margin:8px 0;width:38px;height:38px;vertical-align:baseline}.weui-toast__content{font-size:14px}.weui-mask{background:rgba(0,0,0,.6)}.weui-mask,.weui-mask_transparent{position:fixed;z-index:1000;top:0;right:0;left:0;bottom:0}.weui-actionsheet{position:fixed;left:0;bottom:0;-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:5000;width:100%;background-color:var(--weui-BG-1);-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;border-top-left-radius:12px;border-top-right-radius:12px;overflow:hidden}.weui-actionsheet__title{position:relative;height:56px;padding:0 24px;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;text-align:center;font-size:12px;color:var(--weui-FG-1);line-height:1.4;background:var(--weui-BG-2)}.weui-actionsheet__title:before{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1px solid var(--weui-FG-3);color:var(--weui-FG-3);-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-actionsheet__title .weui-actionsheet__title-text{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.weui-actionsheet__menu{color:var(--weui-FG-0);background-color:var(--weui-BG-2)}.weui-actionsheet__action{margin-top:8px;background-color:var(--weui-BG-2);padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.weui-actionsheet__cell{position:relative;padding:16px;text-align:center;font-size:17px;line-height:1.41176471}.weui-actionsheet__cell:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid var(--weui-FG-3);color:var(--weui-FG-3);-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-actionsheet__cell:active{background-color:var(--weui-BG-COLOR-ACTIVE)}.weui-actionsheet__cell:first-child:before{display:none}.weui-actionsheet__cell_warn{color:var(--weui-RED)}.weui-skin_android .weui-actionsheet{position:fixed;left:50%;top:50%;bottom:auto;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:274px;box-sizing:border-box;-webkit-backface-visibility:hidden;backface-visibility:hidden;background:transparent;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;border-top-left-radius:0;border-top-right-radius:0}.weui-skin_android .weui-actionsheet__action{display:none}.weui-skin_android .weui-actionsheet__menu{border-radius:2px;box-shadow:0 6px 30px 0 rgba(0,0,0,.1)}.weui-skin_android .weui-actionsheet__cell{padding:16px;font-size:17px;line-height:1.41176471;color:var(--weui-FG-0);text-align:left}.weui-skin_android .weui-actionsheet__cell:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.weui-skin_android .weui-actionsheet__cell:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.weui-actionsheet_toggle{-webkit-transform:translate(0);transform:translate(0)}.weui-loadmore{width:65%;margin:1.5em auto;line-height:1.6em;font-size:14px;text-align:center}.weui-loadmore__tips{display:inline-block;vertical-align:middle;color:var(--weui-FG-0)}.weui-loadmore_line{border-top:1px solid var(--weui-FG-3);margin-top:2.4em}.weui-loadmore_line .weui-loadmore__tips{position:relative;top:-.9em;padding:0 .55em;background-color:var(--weui-BG-2);color:var(--weui-FG-1)}.weui-loadmore_dot .weui-loadmore__tips{padding:0 .16em}.weui-loadmore_dot .weui-loadmore__tips:before{content:" ";width:4px;height:4px;border-radius:50%;background-color:var(--weui-FG-3);display:inline-block;position:relative;vertical-align:0;top:-.16em}.weui-badge{display:inline-block;padding:.15em .4em;min-width:8px;border-radius:18px;background-color:var(--weui-RED);color:#fff;line-height:1.2;text-align:center;font-size:12px;vertical-align:middle}.weui-badge_dot{padding:.4em;min-width:0}.weui-toptips{display:none;position:fixed;-webkit-transform:translateZ(0);transform:translateZ(0);top:8px;left:8px;right:8px;padding:10px;border-radius:8px;font-size:14px;text-align:center;color:#fff;z-index:5000;word-wrap:break-word;word-break:break-all}.weui-toptips_warn{background-color:var(--weui-RED)}.weui-search-bar{position:relative;padding:8px;display:-webkit-box;display:-webkit-flex;display:flex;box-sizing:border-box;background-color:var(--weui-BG-0);-webkit-text-size-adjust:100%;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-search-bar.weui-search-bar_focusing .weui-search-bar__cancel-btn{display:block}.weui-search-bar.weui-search-bar_focusing .weui-search-bar__label{display:none}.weui-search-bar .weui-icon-search{width:16px;height:16px}.weui-search-bar__form{position:relative;-webkit-box-flex:1;-webkit-flex:auto;flex:auto;background-color:var(--weui-BG-2);border-radius:4px}.weui-search-bar__box{position:relative;padding-left:28px;padding-right:32px;height:100%;width:100%;box-sizing:border-box;z-index:1}.weui-search-bar__box .weui-search-bar__input{padding:8px 0;width:100%;height:1.14285714em;border:0;font-size:14px;line-height:1.14285714em;box-sizing:content-box;background:transparent;caret-color:var(--weui-BRAND);color:var(--weui-FG-0)}.weui-search-bar__box .weui-search-bar__input:focus{outline:none}.weui-search-bar__box .weui-icon-search{position:absolute;top:50%;left:8px;margin-top:-8px}.weui-search-bar__box .weui-icon-clear{position:absolute;top:50%;right:0;margin-top:-16px;padding:8px;width:16px;height:16px;-webkit-mask-size:16px;mask-size:16px}.weui-search-bar__label{position:absolute;top:0;right:0;bottom:0;left:0;z-index:2;font-size:0;border-radius:4px;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;color:var(--weui-FG-1);background:var(--weui-BG-2)}.weui-search-bar__label span{display:inline-block;font-size:14px;vertical-align:middle}.weui-search-bar__label .weui-icon-search{margin-right:4px}.weui-search-bar__cancel-btn{display:none;margin-left:8px;line-height:28px;color:var(--weui-LINK);white-space:nowrap}.weui-search-bar__input:not(:valid)+.weui-icon-clear{display:none}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration,input[type=search]::-webkit-search-results-button,input[type=search]::-webkit-search-results-decoration{display:none}.weui-picker{position:fixed;width:100%;box-sizing:border-box;left:0;bottom:0;z-index:5000;background-color:var(--weui-BG-2);padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom);-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.weui-picker__hd{display:-webkit-box;display:-webkit-flex;display:flex;padding:16px;padding:16px calc(16px + constant(safe-area-inset-right)) 16px calc(16px + constant(safe-area-inset-left));padding:16px calc(16px + env(safe-area-inset-right)) 16px calc(16px + env(safe-area-inset-left));position:relative;text-align:center;font-size:17px;line-height:1.4}.weui-picker__hd:after{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1px solid var(--weui-FG-3);color:var(--weui-FG-3);-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-picker__bd{display:-webkit-box;display:-webkit-flex;display:flex;position:relative;background-color:var(--weui-BG-2);height:240px;overflow:hidden}.weui-picker__group{-webkit-box-flex:1;-webkit-flex:1;flex:1;position:relative;height:100%}.weui-picker__group:first-child .weui-picker__item{padding-left:constant(safe-area-inset-left);padding-left:env(safe-area-inset-left)}.weui-picker__group:last-child .weui-picker__item{padding-right:constant(safe-area-inset-right);padding-right:env(safe-area-inset-right)}.weui-picker__mask{position:absolute;top:0;left:0;width:100%;height:100%;margin:0 auto;z-index:3;background-image:-webkit-linear-gradient(top,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6)),-webkit-linear-gradient(bottom,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6));background-image:linear-gradient(180deg,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6)),linear-gradient(0deg,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6));background-position:top,bottom;background-size:100% 92px;background-repeat:no-repeat;-webkit-transform:translateZ(0);transform:translateZ(0)}[data-weui-theme=dark] .weui-picker__mask{background-image:-webkit-linear-gradient(top,rgba(35,35,35,.95),rgba(35,35,35,.6)),-webkit-linear-gradient(bottom,rgba(35,35,35,.95),rgba(35,35,35,.6));background-image:linear-gradient(180deg,rgba(35,35,35,.95),rgba(35,35,35,.6)),linear-gradient(0deg,rgba(35,35,35,.95),rgba(35,35,35,.6))}.weui-picker__indicator{width:100%;height:56px;position:absolute;left:0;top:92px;z-index:3}.weui-picker__indicator:before{top:0;border-top:1px solid var(--weui-FG-3);-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-picker__indicator:after,.weui-picker__indicator:before{content:" ";position:absolute;left:0;right:0;height:1px;color:var(--weui-FG-3)}.weui-picker__indicator:after{bottom:0;border-bottom:1px solid var(--weui-FG-3);-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-picker__content{position:absolute;top:0;left:0;width:100%}.weui-picker__item{height:48px;line-height:48px;text-align:center;color:var(--weui-FG-0);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.weui-picker__item_disabled{color:var(--weui-FG-1)}@-webkit-keyframes a{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes a{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.weui-animate-slide-up{-webkit-animation:a ease .3s forwards;animation:a ease .3s forwards}@-webkit-keyframes b{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes b{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.weui-animate-slide-down{-webkit-animation:b ease .3s forwards;animation:b ease .3s forwards}@-webkit-keyframes c{0%{opacity:0}to{opacity:1}}@keyframes c{0%{opacity:0}to{opacity:1}}.weui-animate-fade-in{-webkit-animation:c ease .3s forwards;animation:c ease .3s forwards}@-webkit-keyframes d{0%{opacity:1}to{opacity:0}}@keyframes d{0%{opacity:1}to{opacity:0}}.weui-animate-fade-out{-webkit-animation:d ease .3s forwards;animation:d ease .3s forwards}.weui-agree{display:block;padding:8px 15px 0;font-size:14px;-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-agree a,.weui-agree navigator{color:var(--weui-LINK)}.weui-agree navigator{display:inline}.weui-agree__text{color:var(--weui-FG-1);margin-left:2px}.weui-agree__checkbox{-webkit-appearance:none;appearance:none;display:inline-block;border:0;outline:0;vertical-align:middle;background-color:currentColor;-webkit-mask-position:0 0;mask-position:0 0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%;-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%221000%22%20height%3D%221000%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M500%20916.667C269.881%20916.667%2083.333%20730.119%2083.333%20500%2083.333%20269.881%20269.881%2083.333%20500%2083.333c230.119%200%20416.667%20186.548%20416.667%20416.667%200%20230.119-186.548%20416.667-416.667%20416.667zm0-50c202.504%200%20366.667-164.163%20366.667-366.667%200-202.504-164.163-366.667-366.667-366.667-202.504%200-366.667%20164.163-366.667%20366.667%200%20202.504%20164.163%20366.667%20366.667%20366.667z%22%20fill-rule%3D%22evenodd%22%20fill-opacity%3D%22.9%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%221000%22%20height%3D%221000%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M500%20916.667C269.881%20916.667%2083.333%20730.119%2083.333%20500%2083.333%20269.881%20269.881%2083.333%20500%2083.333c230.119%200%20416.667%20186.548%20416.667%20416.667%200%20230.119-186.548%20416.667-416.667%20416.667zm0-50c202.504%200%20366.667-164.163%20366.667-366.667%200-202.504-164.163-366.667-366.667-366.667-202.504%200-366.667%20164.163-366.667%20366.667%200%20202.504%20164.163%20366.667%20366.667%20366.667z%22%20fill-rule%3D%22evenodd%22%20fill-opacity%3D%22.9%22%2F%3E%3C%2Fsvg%3E);color:var(--weui-FG-2);width:1em;height:1em;font-size:17px;margin-top:-.2em}.weui-agree__checkbox-check{position:absolute;left:-9999px}.weui-agree__checkbox-check[aria-checked=true]+.weui-agree__checkbox,.weui-agree__checkbox:checked{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-1.177-7.86l-2.765-2.767L7%2012.431l3.119%203.121a1%201%200%20001.414%200l5.952-5.95-1.062-1.062-5.6%205.6z%22%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-1.177-7.86l-2.765-2.767L7%2012.431l3.119%203.121a1%201%200%20001.414%200l5.952-5.95-1.062-1.062-5.6%205.6z%22%2F%3E%3C%2Fsvg%3E);color:var(--weui-BRAND)}.weui-agree_animate{-webkit-animation:e .3s 1;animation:e .3s 1}@-webkit-keyframes e{0%{-webkit-transform:translateX(0);transform:translateX(0)}16%{-webkit-transform:translateX(-8px);transform:translateX(-8px)}28%{-webkit-transform:translateX(-16px);transform:translateX(-16px)}44%{-webkit-transform:translateX(0);transform:translateX(0)}59%{-webkit-transform:translateX(-16px);transform:translateX(-16px)}73%{-webkit-transform:translateX(0);transform:translateX(0)}82%{-webkit-transform:translateX(16px);transform:translateX(16px)}94%{-webkit-transform:translateX(8px);transform:translateX(8px)}to{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes e{0%{-webkit-transform:translateX(0);transform:translateX(0)}16%{-webkit-transform:translateX(-8px);transform:translateX(-8px)}28%{-webkit-transform:translateX(-16px);transform:translateX(-16px)}44%{-webkit-transform:translateX(0);transform:translateX(0)}59%{-webkit-transform:translateX(-16px);transform:translateX(-16px)}73%{-webkit-transform:translateX(0);transform:translateX(0)}82%{-webkit-transform:translateX(16px);transform:translateX(16px)}94%{-webkit-transform:translateX(8px);transform:translateX(8px)}to{-webkit-transform:translateX(0);transform:translateX(0)}}.weui-loading{width:20px;height:20px;display:inline-block;vertical-align:middle;-webkit-animation:f 1s steps(12) infinite;animation:f 1s steps(12) infinite;background:transparent url("data:image/svg+xml;charset=utf8, %3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 100 100'%3E%3Cpath fill='none' d='M0 0h100v100H0z'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23E9E9E9' rx='5' ry='5' transform='translate(0 -30)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23989697' rx='5' ry='5' transform='rotate(30 105.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%239B999A' rx='5' ry='5' transform='rotate(60 75.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23A3A1A2' rx='5' ry='5' transform='rotate(90 65 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23ABA9AA' rx='5' ry='5' transform='rotate(120 58.66 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23B2B2B2' rx='5' ry='5' transform='rotate(150 54.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23BAB8B9' rx='5' ry='5' transform='rotate(180 50 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23C2C0C1' rx='5' ry='5' transform='rotate(-150 45.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23CBCBCB' rx='5' ry='5' transform='rotate(-120 41.34 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23D2D2D2' rx='5' ry='5' transform='rotate(-90 35 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23DADADA' rx='5' ry='5' transform='rotate(-60 24.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23E2E2E2' rx='5' ry='5' transform='rotate(-30 -5.98 65)'/%3E%3C/svg%3E") no-repeat;background-size:100%}.weui-btn_loading.weui-btn_primary .weui-loading,.weui-loading.weui-loading_transparent{background-image:url("data:image/svg+xml;charset=utf8, %3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 100 100'%3E%3Cpath fill='none' d='M0 0h100v100H0z'/%3E%3Crect xmlns='http://www.w3.org/2000/svg' width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.56)' rx='5' ry='5' transform='translate(0 -30)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.5)' rx='5' ry='5' transform='rotate(30 105.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.43)' rx='5' ry='5' transform='rotate(60 75.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.38)' rx='5' ry='5' transform='rotate(90 65 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.32)' rx='5' ry='5' transform='rotate(120 58.66 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.28)' rx='5' ry='5' transform='rotate(150 54.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.25)' rx='5' ry='5' transform='rotate(180 50 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.2)' rx='5' ry='5' transform='rotate(-150 45.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.17)' rx='5' ry='5' transform='rotate(-120 41.34 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.14)' rx='5' ry='5' transform='rotate(-90 35 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.1)' rx='5' ry='5' transform='rotate(-60 24.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.03)' rx='5' ry='5' transform='rotate(-30 -5.98 65)'/%3E%3C/svg%3E")}@-webkit-keyframes f{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes f{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.weui-slider{padding:15px 18px;-webkit-user-select:none;user-select:none}.weui-slider__inner{position:relative;height:2px;background-color:var(--weui-FG-3)}.weui-slider__track{height:2px;background-color:var(--weui-BRAND);width:0}.weui-slider__handler{position:absolute;left:0;top:50%;width:28px;height:28px;margin-left:-14px;margin-top:-14px;border-radius:50%;background-color:#fff;box-shadow:0 0 4px var(--weui-FG-3)}.weui-slider-box{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-slider-box .weui-slider{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-slider-box__value{margin-left:.5em;min-width:24px;color:var(--weui-FG-1);text-align:center;font-size:14px}.wx_dot_loading,.wx_dot_loading:after,.wx_dot_loading:before{display:inline-block;vertical-align:middle;width:6px;height:6px;border-radius:50%;background-color:rgba(0,0,0,.3);font-size:0;-webkit-animation:h 1.6s step-start infinite;animation:h 1.6s step-start infinite}.wx_dot_loading{position:relative}.wx_dot_loading:before{content:"";position:absolute;left:-12px;background-color:rgba(0,0,0,.1);-webkit-animation:g 1.6s step-start infinite;animation:g 1.6s step-start infinite}.wx_dot_loading:after{content:"";position:absolute;right:-12px;background-color:rgba(0,0,0,.5);-webkit-animation:i 1.6s step-start infinite;animation:i 1.6s step-start infinite}@-webkit-keyframes g{0%,to{background-color:rgba(0,0,0,.1)}30%{background-color:rgba(0,0,0,.5)}60%{background-color:rgba(0,0,0,.3)}}@keyframes g{0%,to{background-color:rgba(0,0,0,.1)}30%{background-color:rgba(0,0,0,.5)}60%{background-color:rgba(0,0,0,.3)}}@-webkit-keyframes h{0%,to{background-color:rgba(0,0,0,.3)}30%{background-color:rgba(0,0,0,.1)}60%{background-color:rgba(0,0,0,.5)}}@keyframes h{0%,to{background-color:rgba(0,0,0,.3)}30%{background-color:rgba(0,0,0,.1)}60%{background-color:rgba(0,0,0,.5)}}@-webkit-keyframes i{0%,to{background-color:rgba(0,0,0,.5)}30%{background-color:rgba(0,0,0,.3)}60%{background-color:rgba(0,0,0,.1)}}@keyframes i{0%,to{background-color:rgba(0,0,0,.5)}30%{background-color:rgba(0,0,0,.3)}60%{background-color:rgba(0,0,0,.1)}}.wx_dot_loading_white{background-color:hsla(0,0%,100%,.3);-webkit-animation:k 1.6s step-start infinite;animation:k 1.6s step-start infinite}.wx_dot_loading_white:before{background-color:hsla(0,0%,100%,.5);-webkit-animation:j 1.6s step-start infinite;animation:j 1.6s step-start infinite}.wx_dot_loading_white:after{background-color:hsla(0,0%,100%,.1);-webkit-animation:l 1.6s step-start infinite;animation:l 1.6s step-start infinite}@-webkit-keyframes j{0%,to{background-color:hsla(0,0%,100%,.5)}30%{background-color:hsla(0,0%,100%,.1)}60%{background-color:hsla(0,0%,100%,.3)}}@keyframes j{0%,to{background-color:hsla(0,0%,100%,.5)}30%{background-color:hsla(0,0%,100%,.1)}60%{background-color:hsla(0,0%,100%,.3)}}@-webkit-keyframes k{0%,to{background-color:hsla(0,0%,100%,.3)}30%{background-color:hsla(0,0%,100%,.5)}60%{background-color:hsla(0,0%,100%,.1)}}@keyframes k{0%,to{background-color:hsla(0,0%,100%,.3)}30%{background-color:hsla(0,0%,100%,.5)}60%{background-color:hsla(0,0%,100%,.1)}}@-webkit-keyframes l{0%,to{background-color:hsla(0,0%,100%,.1)}30%{background-color:hsla(0,0%,100%,.3)}60%{background-color:hsla(0,0%,100%,.5)}}@keyframes l{0%,to{background-color:hsla(0,0%,100%,.1)}30%{background-color:hsla(0,0%,100%,.3)}60%{background-color:hsla(0,0%,100%,.5)}}:host{width:100%}.weui-slideview{position:relative;overflow:hidden}.weui-slideview__left{position:relative;z-index:10}.weui-slideview__right{position:absolute;z-index:1;left:100%;top:0;height:100%}.weui-slideview__btn__wrp{position:absolute;left:0;bottom:0;text-align:center;min-width:69px;height:100%;white-space:nowrap}.weui-slideview__btn{color:#fff;padding:0 17px}.weui-slideview__btn-group_default .weui-slideview__btn{background:#c7c7cc}[data-weui-theme=dark] .weui-slideview__btn-group_default .weui-slideview__btn{background:var(--weui-BG-4)}.weui-slideview__btn-group_default~.weui-slideview__btn-group_default:before{content:" ";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1px solid #fff;color:#fff;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}[data-weui-theme=dark] .weui-slideview__btn-group_default~.weui-slideview__btn-group_default:before{border-left-color:var(--weui-FG-3)}.weui-slideview__btn-group_default:first-child:before{display:none}.weui-slideview__btn-group_warn .weui-slideview__btn{background:#fe3b30}.weui-slideview__btn-group_warn~.weui-slideview__btn-group_warn:before{content:" ";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1px solid #fff;color:#fff;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-slideview__btn-group_warn:first-child:before{display:none}.weui-slideview_icon .weui-slideview__btn__wrp{background:transparent;font-size:0}.weui-slideview_icon .weui-slideview__btn__wrp:first-child{padding-left:16px}.weui-slideview_icon .weui-slideview__btn__wrp:last-child{padding-right:8px}.weui-slideview_icon .weui-slideview__btn{width:48px;height:48px;line-height:48px;padding:0;display:inline-block;vertical-align:middle;border-radius:50%;background-color:#fff}[data-weui-theme=dark] .weui-slideview_icon .weui-slideview__btn{background-color:var(--weui-BG-4)}.weui-slideview_icon .weui-slideview__btn__icon{display:inline-block;vertical-align:middle;width:22px;height:22px}page{--height:44px;--right:190rpx}.weui-navigation-bar{overflow:hidden;color:var(--weui-FG-0)}.weui-navigation-bar .android{--height:48px;--right:222rpx}.weui-navigation-bar__inner{position:fixed;top:0;left:0;z-index:5001;height:var(--height);padding-right:var(--right);width:calc(100% - var(--right))}.weui-navigation-bar__inner,.weui-navigation-bar__inner .weui-navigation-bar__left{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-navigation-bar__inner .weui-navigation-bar__left{position:relative;width:var(--right);padding-left:16px}.weui-navigation-bar__inner .weui-navigation-bar__left .weui-navigation-bar__btn{display:inline-block;vertical-align:middle;background-repeat:no-repeat}.weui-navigation-bar__inner .weui-navigation-bar__left .weui-navigation-bar__btn_goback{font-size:12px;width:1em;height:2em;-webkit-mask:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='24' viewBox='0 0 12 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M10 19.438L8.955 20.5l-7.666-7.79a1.02 1.02 0 0 1 0-1.42L8.955 3.5 10 4.563 2.682 12 10 19.438z'/%3E%3C/svg%3E") no-repeat 50% 50%;mask:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='24' viewBox='0 0 12 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M10 19.438L8.955 20.5l-7.666-7.79a1.02 1.02 0 0 1 0-1.42L8.955 3.5 10 4.563 2.682 12 10 19.438z'/%3E%3C/svg%3E") no-repeat 50% 50%;-webkit-mask-size:cover;mask-size:cover;background-color:currentColor}.weui-navigation-bar__inner .weui-navigation-bar__left .weui-navigation-bar__btn_goback:active{opacity:.5}.weui-navigation-bar__inner .weui-navigation-bar__center{font-size:17px;text-align:center;position:relative;-webkit-box-flex:1;-webkit-flex:1;flex:1;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.weui-navigation-bar__inner .weui-navigation-bar__loading{margin-right:4px;font-size:0}.weui-navigation-bar__inner .weui-navigation-bar__loading .weui-loading{margin-left:0}.weui-navigation-bar__inner .weui-navigation-bar__right{margin-right:16px}.weui-navigation-bar__placeholder{height:var(--height);background:var(--weui-BG-1);position:relative;z-index:50}.weui-uploader__hd{display:block}.weui-uploader__overview{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-uploader__tips{color:var(--weui-FG-2);font-size:14px;line-height:1.4;padding-top:4px}.weui-uploader__img{display:block;width:100%;height:100%}.weui-gallery{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.weui-gallery__info{color:#fff;font-size:17px;line-height:60px;min-height:60px;text-align:center}.weui-gallery__img__wrp{-webkit-box-flex:1;-webkit-flex:1;flex:1;position:relative;font-size:0}.weui-gallery__img{position:absolute;width:100%;height:100%}.weui-gallery__opr{position:static}.weui-search-bar .weui-search-bar__box .weui-search-bar__input{height:inherit;line-height:inherit}.weui-search-bar .weui-search-bar__box .weui-icon-clear{display:block}.weui-loadmore .weui-loading{margin-right:.3em}.weui-btn_input-clear{display:block}
--------------------------------------------------------------------------------