├── .gitignore ├── Introduction.md ├── README.md ├── bin └── mp-gulpfile.js ├── gulpfile.js ├── package.json └── template ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .miniprogram ├── app.js ├── app.js.map ├── app.json ├── app.wxss ├── app.wxss.map ├── assets │ └── img │ │ └── gulp.png ├── components │ └── quickstart │ │ ├── quickstart.js │ │ ├── quickstart.js.map │ │ ├── quickstart.json │ │ ├── quickstart.wxml │ │ ├── quickstart.wxss │ │ └── quickstart.wxss.map ├── miniprogram_npm │ ├── miniprogram-api-promise │ │ ├── index.js │ │ └── src │ │ │ ├── method.js │ │ │ └── promise.js │ ├── mitt │ │ └── index.js │ └── weui-miniprogram │ │ ├── _commons │ │ └── 0.js │ │ ├── msg │ │ ├── msg.js │ │ ├── msg.json │ │ ├── msg.wxml │ │ └── msg.wxss │ │ └── weui-wxss │ │ └── dist │ │ └── style │ │ └── weui.wxss ├── pages │ └── index │ │ ├── index.js │ │ ├── index.js.map │ │ ├── index.json │ │ ├── index.wxml │ │ ├── index.wxss │ │ └── index.wxss.map ├── project.config.json ├── sitemap.json └── utils │ ├── index.js │ └── index.js.map ├── README.md ├── gulpfile.js ├── package.json ├── project.config.json ├── src ├── app.json ├── app.less ├── app.ts ├── assets │ └── img │ │ └── gulp.png ├── components │ └── quickstart │ │ ├── quickstart.json │ │ ├── quickstart.less │ │ ├── quickstart.ts │ │ └── quickstart.wxml ├── pages │ └── index │ │ ├── index.json │ │ ├── index.less │ │ ├── index.ts │ │ └── index.wxml ├── sitemap.json └── utils │ └── index.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | .eslintrc.js 2 | 3 | .DS_Store 4 | package-lock.json 5 | node_modules 6 | test 7 | 8 | # Log files 9 | npm-debug.log* 10 | yarn-debug.log* 11 | yarn-error.log* 12 | 13 | # Editor directories and files 14 | .idea 15 | *.suo 16 | *.ntvs* 17 | *.njsproj 18 | *.sln 19 | *.sw* 20 | -------------------------------------------------------------------------------- /Introduction.md: -------------------------------------------------------------------------------- 1 | # 微信小程序 gulpfile 最佳实践 2 | 3 | ## 一、开发模式对比 4 | 5 | ### 1、小程序标准开发模式 6 | 7 | - 支持 `wxml` `wxss` `js` 三种格式的页面代码 8 | - 依赖文件可以有两个来源: 9 | 1. 手动将所需依赖源代码文件拷贝至项目路径中 10 | 2. 通过 `npm` 安装依赖,再手动点击微信开发者工具的 `构建npm` 按钮构建出依赖文件(将构建至 `miniprogram_npm` 文件夹) 11 | 12 | ![小程序标准开发模式](https://github.com/cong-min/MarkdownPhotos/blob/master/mp-gulpfile/mpbz.png?raw=true) 13 | 14 | ### 2、小程序官方 TS 开发模式 15 | 16 | 可参考:[微信小程序开放文档 · TypeScript 支持](https://developers.weixin.qq.com/miniprogram/dev/devtools/edit.html#TypeScript-支持) 17 | 18 | - 通过 `tsc` 命令将 `.ts` 文件编译为 `.js` ,以支持 `TypeScript` 语法 19 | 20 | ![小程序官方 TS 开发模式](https://github.com/cong-min/MarkdownPhotos/blob/master/mp-gulpfile/mpts.png?raw=true) 21 | 22 | ### 3、小程序搭配 gulpfile 最佳实践的开发模式 23 | 24 | - 在该开发模式下有两个路径: 25 | - 开发路径 26 | - (构建后)小程序路径 27 | - 通过 `gulp` 工具可实现: 28 | - 将 `.ts` 文件编译为 `.js` 、 `.less` 文件编译为 `.wxss` ,以支持 `TypeScript` 、 `Less` 语法 29 | - 支持 `sourcemaps` 方便错误调试与定位 30 | - 压缩图片,减少小程序代码包大小 31 | - 分析代码,依赖自动提取,支持提取普通 `npm` 包与[小程序专用 `npm` 包](https://developers.weixin.qq.com/miniprogram/dev/devtools/npm.html#发布小程序-npm-包的约束) 32 | - 其余文件将直接拷贝至目标路径 33 | 34 | ![小程序搭配 gulpfile 最佳实践的开发模式](https://github.com/cong-min/MarkdownPhotos/blob/master/mp-gulpfile/mpgulpfile.png?raw=true) 35 | 36 | 该开发模式下最佳实践的 `gulpfile.js` 文件详细内容可以查阅 https://github.com/cong-min/mp-gulpfile/blob/master/gulpfile.js ,以及对应的项目模板 https://github.com/cong-min/mp-gulpfile/tree/master/template 。 37 | 38 | 接下来是对各功能点配置改进的思考与讲解。 39 | 40 | ## 二、小程序 gulpfile 最佳实践配置 41 | 42 | ### 1、支持 TS 43 | 44 | 使用 `gulp-typescript` 插件,创建 `tsconfig.json` 配置文件,可让 `.ts` 编译为 `.js` 文件: 45 | 46 | ```js 47 | const gulp = require('gulp'); 48 | const gulpTs = require('gulp-typescript'); 49 | const tsProject = gulpTs.createProject('tsconfig.json'); 50 | 51 | const ts = () => gulp.src('src/**/*.ts') 52 | .pipe(tsProject()) // 编译ts 53 | .pipe(gulp.dest('dist')); 54 | ``` 55 | 56 | ### 2、支持 Less 57 | 58 | 使用 `gulp-less` 插件,可让 `.less` 编译为 `.wxss` 文件: 59 | 60 | ```js 61 | const gulpLess = require('gulp-less'); 62 | const rename = require('gulp-rename'); 63 | 64 | const less = () => gulp.src('src/**/*.less') 65 | .pipe(gulpLess()) // 编译less 66 | .pipe(rename({ extname: '.wxss' })) 67 | .pipe(gulp.dest('dist')); 68 | ``` 69 | 70 | ### 3、压缩图片 71 | 72 | 小程序主包目前只支持最多 `2M` 的大小,而图片通常是占用空间最多的资源。因为在项目中对图片大小进行压缩很有必要的。 73 | 74 | 使用 `gulp-image` 插件,可压缩图片大小且能保证画质: 75 | 76 | ```js 77 | const gulpImage = require('gulp-image'); 78 | const cache = require('gulp-cache'); 79 | 80 | const image = () => gulp.src('src/**/*.{png,jpg,jpeg,gif,svg}') 81 | .pipe(cache(gulpImage())) // 压缩图片并缓存 82 | .pipe(gulp.dest('dist')); 83 | ``` 84 | 85 | **为什么压缩插件使用 `gulp-image` 而不使用 `gulp-imagemin` ?** 86 | 87 | ![压缩图片对比](https://github.com/cong-min/MarkdownPhotos/blob/master/mp-gulpfile/gulpimage.png?raw=true) 88 | 89 | 98 | 99 | 根据对比可得出,在默认配置下 `gulp-image` 的压缩效果更优,因此这里选用了 `gulp-image` 作为图片压缩插件。 100 | 101 | ### 4、依赖分析与提取 102 | 103 | 在 [微信小程序开放文档 · npm 支持](https://developers.weixin.qq.com/miniprogram/dev/devtools/npm.html#原理介绍) 中可以找到了关于小程序官方提取 `npm` 依赖的原理介绍: 104 | 105 | > 1、首先 `node_modules` 目录不会参与编译、上传和打包中,所以小程序想要使用 `npm` 包必须走一遍 `“构建 npm”` 的过程,在最外层的 `node_modules` 的同级目录下会生成一个 `miniprogram_npm` 目录,里面会存放构建打包后的 `npm` 包,也就是小程序真正使用的 `npm` 包。 106 | > 107 | > 2、构建打包分为两种:小程序 `npm` 包会直接拷贝构建文件生成目录下的所有文件到 `miniprogram_npm` 中;其他 `npm` 包则会从入口 `js` 文件开始走一遍依赖分析和打包过程(类似 `webpack`)。 108 | > 109 | > 3、寻找 `npm` 包的过程和 `npm` 的实现类似,从依赖 `npm` 包的文件所在目录开始逐层往外找,直到找到可用的 `npm` 包或是小程序根目录为止。 110 | 111 | > 使用 `npm` 包时如果只引入包名,则默认寻找包名下的 `index.js` 文件或者 `index` 组件 112 | 113 | 根据这个原理,我开发了一个用以小程序提取 `npm` 依赖包的 `gulp` 插件 [gulp-mp-npm](https://github.com/cong-min/gulp-mp-npm) ,有以下特点: 114 | 115 | - 依赖分析,仅会提取使用到的依赖与组件 116 | - 支持提取普通 `npm` 包与[小程序专用 `npm` 包](https://developers.weixin.qq.com/miniprogram/dev/devtools/npm.html#发布小程序-npm-包的约束) 117 | - 不会对依赖进行编译与打包(交给微信开发者工具或者其他 `gulp` 插件完成) 118 | - 兼容官方方案及原理,同时支持自定义 `npm` 输出文件夹 119 | 120 | ![gulp-mp-npm](https://github.com/cong-min/MarkdownPhotos/blob/master/mp-gulpfile/mpnpm.png?raw=true) 121 | 122 | 使用 `gulp-mp-npm` 插件,可实现 `npm` 依赖的自动分析与按需提取: 123 | 124 | ```js 125 | const mpNpm = require('gulp-mp-npm'); 126 | 127 | const js = () => gulp.src('src/**/*.js') 128 | .pipe(mpNpm()) // 分析提取 js 中用到的依赖 129 | .pipe(gulp.dest('dist')); 130 | ``` 131 | 132 | 通常在 `ts` / `js` / `less` / `wxss` / `json` 等文件中都会有可能使用到 `npm` 依赖。因此,插件 `gulp-mp-npm` 在上述 5 个 `tasks` 中都需执行。 133 | 134 | ```js 135 | const ts = () => gulp.src('src/**/*.ts') 136 | .pipe(tsProject()) // 编译ts 137 | .pipe(mpNpm()) // 分析提取 ts 中用到的依赖 138 | .pipe(gulp.dest('dist')); 139 | ``` 140 | 141 | ```js 142 | const json = () => gulp.src('src/**/*.json') 143 | .pipe(mpNpm()) // 分析提取 json 中用到的 npm 组件 144 | .pipe(gulp.dest('dist')); 145 | ``` 146 | 147 | > 分析 `.json` 文件是因为插件会尝试读取小程序页面配置中 `usingComponents` 字段,提取使用的 `npm` 小程序组件 148 | 149 | 其余 `less` `wxss` 文件的依赖分析提取同理,此处省略。 150 | 151 | ### 5、拷贝其余文件 152 | 153 | 对于没有经过任何 `task` 的文件则直接拷贝至目标路径: 154 | 155 | ```js 156 | const changed = require('gulp-changed'); 157 | 158 | const copy = () => gulp.src(['src/**', 159 | '!src/**/*.ts', '!src/**/*.js', '!src/**/*.json', 160 | '!src/**/*.less', '!src/**/*.wxss', 161 | '!src/**/*.{png,jpg,jpeg,gif,svg}']) 162 | .pipe(changed('dist')) // 过滤掉已存在未改变的文件 163 | .pipe(gulp.dest('dist')); 164 | ``` 165 | 166 | ### 6、Source Map 167 | 168 | Source Map 便于开发者在调试时定位编译压缩前代码的错误位置。 169 | 170 | 在 [微信小程序开放文档 · npm 支持](https://developers.weixin.qq.com/miniprogram/dev/framework/usability/debug.html#Source-Map) 可以找到关于 Source Map 的说明: 171 | 172 | > 如果使用外部的编译脚本对源文件进行处理,只需将对应生成的 Source Map 文件放置在源文件的相同目录下。 173 | > 开发者工具会读取、解析 Source Map 文件,并进行将其上传。 174 | > 后续可以在小程序后台的运营中心可以利用上传的 Source Map 文件进行错误分析。 175 | > 176 | > **Source Map 文件不计入代码包大小计算。** 177 | > 178 | > 开发版代码包中由于包含了 `.map` 文件,实际代码包大小会比体验版和正式版大。 179 | 180 | 使用 `gulp-sourcemaps` 插件,可为参与编译的 `.ts` 、 `.less` 文件开启Source Map : 181 | 182 | ```js 183 | const sourcemaps = require('gulp-sourcemaps'); 184 | 185 | /* 以 ts 为例, less 同理 */ 186 | const ts = () => gulp.src('src/**/*.ts') 187 | .pipe(sourcemaps.init()) 188 | .pipe(tsProject()) // 编译ts 189 | .pipe(mpNpm()) // 分析提取 ts 中用到的依赖 190 | .pipe(sourcemaps.write('.')) // 以 .map 文件形式导出至同级目录 191 | .pipe(gulp.dest('dist')); 192 | ``` 193 | 194 | Source Map 构建后目录为:(`.map` 文件不计入代码包大小) 195 | 196 | ``` 197 | ├── page.js 198 | ├── page.js.map 199 | ├── page.wxss 200 | ├── page.wxss.map 201 | ``` 202 | 203 | ### 7、watch 增量构建 204 | 205 | 默认情况下 `gulp` 的 `task` 是单次执行的,某个文件变化后 `gulp.watch` 会重新执行整个 `task` 来完成构建,这样会导致未变化的文件重复构建,效能较低。 206 | 207 | 可采取以下两个措施对效率优化: 208 | 209 | **① 正确的使用 `gulp.watch`** 210 | 211 | 为每一个文件路径不一样的 `task` 创建 `watch`: 212 | 213 | ```js 214 | /* 以 ts / less / image 为例, js / json / wxss / copy 同理 */ 215 | gulp.watch('src/**/*.ts', ts); 216 | gulp.watch('src/**/*.less', less); 217 | gulp.watch('src/**/*.{png,jpg,jpeg,gif,svg}', image); 218 | ... 219 | ``` 220 | 221 | **② `gulp.src` 参数 `since` 与 `gulp.lastRun` 搭配使用** 222 | 223 | [gulp.lastRun](https://gulpjs.com/docs/en/api/lastrun) 方法将返回当前运行进程中成功完成 `task` 的最后一次时间戳。将其作为 [gulp.src](https://gulpjs.com/docs/en/api/src) 方法的参数 `since` 传入,可实现跳过自上次成功完成任务以来没有更改的文件,完成增量构建,加快执行时间。 224 | 225 | ```js 226 | /* 以 ts / less / image 为例, js / json / wxss / copy 同理 */ 227 | const ts = () => gulp.src( 228 | 'src/**/*.ts', 229 | { since: gulp.lastRun(ts) } 230 | )... 231 | 232 | const less = () => gulp.src( 233 | 'src/**/*.less', 234 | { since: gulp.lastRun(less) } 235 | )... 236 | 237 | const image = () => gulp.src( 238 | 'src/**/*.{png,jpg,jpeg,gif,svg}', 239 | { since: gulp.lastRun(image) } 240 | )... 241 | ``` 242 | 243 | **增量构建改进前后效果对比:**(在拥有多个 `ts` 文件的实际项目中,使用 `gulp.watch` 监听修改一个 `ts` 文件后再次构建的时长) 244 | 245 | ![增量构建改进前后效果对比](https://github.com/cong-min/MarkdownPhotos/blob/master/mp-gulpfile/gulpwatch.png?raw=true) 246 | 247 | ### 8、导出 task 248 | 249 | [gulp.task](https://gulpjs.com/docs/en/api/task) 在官方文档中已经声明不再推荐使用该方法,取而代之的是 [创建 `Task`](https://gulpjs.com/docs/en/getting-started/creating-tasks) 中提倡的将 `task` 直接导出: 250 | 251 | ```js 252 | /** `gulp build` 253 | * 构建 254 | * */ 255 | const build = gulp.series( 256 | clear, 257 | gulp.parallel( 258 | copy, 259 | ts, 260 | js, 261 | json, 262 | less, 263 | wxss, 264 | image, 265 | ), 266 | ); 267 | 268 | /** `gulp` or `gulp dev` 269 | * 构建并监听 270 | * */ 271 | const dev = gulp.series( 272 | build, 273 | watch, 274 | ); 275 | 276 | // `gulp --tasks` list tasks 277 | module.exports = { 278 | clear, 279 | copy, 280 | ts, 281 | less, 282 | image, 283 | build, 284 | watch, 285 | dev, 286 | default: dev, 287 | }; 288 | ``` 289 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 微信小程序 gulpfile 最佳实践 2 | 3 | > - 🚀 轻量极速增量构建 4 | > - 🧰 支持 `TypeScript` `Less` 语法及 `Source Map` 5 | > - 🗃 按需提取 npm 依赖 6 | > - 🎡 支持提取小程序 npm 包组件 7 | > - 🌁 图片压缩 8 | 9 | ## 快速开始 10 | 11 | ### 方式1、根据模板创建项目 12 | 13 | ```bash 14 | # 根据模板创建项目 15 | $ npx mp-gulpfile create my-project 16 | # 安装依赖 17 | $ cd my-project && npm i 18 | ``` 19 | 20 | ### 方式2、拷贝 gulpfile 至项目中使用 21 | 22 | 将 [gulpfile.js](./gulpfile.js) 文件复制到小程序项目根目录下。 23 | 24 | 安装依赖 25 | 26 | ```bash 27 | $ npm i -D del gulp gulp-cache gulp-changed gulp-if gulp-image gulp-less gulp-mp-npm gulp-rename gulp-sourcemaps gulp-typescript jsonfile miniprogram-api-typings typescript 28 | ``` 29 | 30 | ## 启动服务 31 | 32 | ```bash 33 | # 启动监听服务 34 | $ npm start 35 | # 单次构建 36 | $ npm run build 37 | ``` 38 | 39 | 将整个项目目录添加至微信开发者工具中,其中 `src` 为开发路径,`.miniprogram` 为生产路径。 40 | 41 | ## 更多 42 | 43 | [细节介绍](Introduction.md) 44 | 45 | ## 技巧 46 | 47 | ### 在 less 中引入 npm 中的 wxss 48 | 49 | ```css 50 | @import (css) "weui-miniprogram/weui-wxss/dist/style/weui.wxss"; 51 | ``` 52 | 53 | ## License 54 | 55 | MIT -------------------------------------------------------------------------------- /bin/mp-gulpfile.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const program = require('commander'); 4 | const path = require('path'); 5 | const fs = require('fs-extra'); 6 | 7 | const packageJSON = require('../package.json'); 8 | 9 | program 10 | .version(packageJSON.version, '-v, --version') 11 | .on('--help', () => { 12 | console.log('\nExamples:'); 13 | console.log(' # 通过模板创建项目'); 14 | console.log(' $ mp-gulpfile create my-project'); 15 | }); 16 | 17 | // mp-gulpfile create: 通过模板创建项目 18 | program 19 | .command('create ') 20 | .description('通过模板创建项目') 21 | .action((name, cmd) => { 22 | const input = path.resolve(__dirname, '../template'); 23 | const ouput = path.resolve(process.cwd(), name); 24 | try { 25 | fs.copySync(input, ouput, { 26 | overwrite: false, 27 | errorOnExist: true, 28 | filter: (src, dest) => 29 | !/\.DS_Store|package-lock\.json/g.test(src), 30 | }); 31 | console.log(`创建项目 ${ouput} 成功`); 32 | process.exit(0); 33 | } catch (err) { 34 | console.error(err); 35 | process.exit(1); 36 | } 37 | }); 38 | 39 | // unknown commands 40 | program.on('command:*', () => { 41 | console.error(`无效的命令: ${program.name()} ${program.args.join(' ')}`); 42 | console.log(`请执行 ${program.name()} --help 查询帮助`); 43 | process.exit(1); 44 | }); 45 | 46 | // 解析参数 47 | program.parse(process.argv); 48 | 49 | // 默认显示帮助 50 | if (program.args.length === 0) program.help(); 51 | -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | const gulp = require('gulp'); 2 | const path = require('path'); 3 | const del = require('del'); 4 | const changed = require('gulp-changed'); 5 | const gulpTs = require('gulp-typescript'); 6 | const gulpif = require('gulp-if'); 7 | const sourcemaps = require('gulp-sourcemaps'); 8 | const gulpLess = require('gulp-less'); 9 | const rename = require('gulp-rename'); 10 | // const gulpImage = require('gulp-image'); 11 | const cache = require('gulp-cache'); 12 | const mpNpm = require('gulp-mp-npm'); 13 | const jsonfile = require('jsonfile'); 14 | 15 | const resolve = (...args) => path.resolve(__dirname, ...args); 16 | 17 | /* config */ 18 | const src = 'src'; 19 | const dist = '.miniprogram'; 20 | 21 | const sourcemap = { 22 | ts: true, // 是否开启 ts sourcemap 23 | less: true, // 是否开启 less sourcemap 24 | }; 25 | // options 26 | const srcOptions = { base: src }; 27 | const watchOptions = { events: ['add', 'change'] }; 28 | const mpNpmOptions = { npmDirname: 'miniprogram_npm' }; 29 | 30 | // 文件匹配路径 31 | const globs = { 32 | ts: `${src}/**/*.ts`, // 匹配 ts 文件 33 | js: `${src}/**/*.js`, // 匹配 js 文件 34 | json: `${src}/**/*.json`, // 匹配 json 文件 35 | less: `${src}/**/*.less`, // 匹配 less 文件 36 | wxss: `${src}/**/*.wxss`, // 匹配 wxss 文件 37 | // image: `${src}/**/*.{png,jpg,jpeg,gif,svg}`, // 匹配 image 文件 38 | }; 39 | globs.copy = [`${src}/**`, 40 | `!${globs.ts}`, `!${globs.js}`, `!${globs.json}`, 41 | `!${globs.less}`, `!${globs.wxss}`, 42 | // `!${globs.image}` 43 | ]; // 匹配需要拷贝的文件 44 | 45 | // 包装 gulp.lastRun, 引入文件 ctime 作为文件变动判断另一标准 46 | // https://github.com/gulpjs/vinyl-fs/issues/226 47 | const since = task => ( 48 | file => (gulp.lastRun(task) > file.stat.ctime ? gulp.lastRun(task) : 0) 49 | ); 50 | 51 | /** `gulp clear` 52 | * 清理文件 53 | * */ 54 | const clear = () => del(dist); 55 | 56 | /** `gulp clearCache` 57 | * 清理缓存 58 | * */ 59 | const clearCache = () => cache.clearAll(); 60 | 61 | /** `gulp copy` 62 | * 清理 63 | * */ 64 | const copy = () => gulp.src( 65 | globs.copy, 66 | { ...srcOptions, since: since(copy) }, 67 | ) 68 | .pipe(changed(dist)) // 过滤掉未改变的文件 69 | .pipe(gulp.dest(dist)); 70 | 71 | /** `gulp ts` 72 | * 编译ts 73 | * */ 74 | const tsProject = gulpTs.createProject(resolve('tsconfig.json')); 75 | const ts = () => gulp.src( 76 | globs.ts, 77 | srcOptions, 78 | ) 79 | .pipe(gulpif(sourcemap.ts, sourcemaps.init())) 80 | .pipe(tsProject()) // 编译ts 81 | .pipe(mpNpm(mpNpmOptions)) // 分析依赖 82 | .pipe(gulpif(sourcemap.ts, sourcemaps.write('.'))) 83 | .pipe(gulp.dest(dist)); 84 | 85 | /** `gulp js` 86 | * 解析js 87 | * */ 88 | const js = () => gulp.src( 89 | globs.js, 90 | { ...srcOptions, since: since(js) }, 91 | ) 92 | .pipe(mpNpm(mpNpmOptions)) // 分析依赖 93 | .pipe(gulp.dest(dist)); 94 | 95 | /** `gulp json` 96 | * 解析json 97 | * */ 98 | const json = () => gulp.src( 99 | globs.json, 100 | { ...srcOptions, since: since(json) }, 101 | ) 102 | .pipe(mpNpm(mpNpmOptions)) // 分析依赖 103 | .pipe(gulp.dest(dist)); 104 | 105 | /** `gulp less` 106 | * 编译less 107 | * */ 108 | const less = () => gulp.src( 109 | globs.less, 110 | { ...srcOptions, since: since(less) }, 111 | ) 112 | .pipe(gulpif(sourcemap.less, sourcemaps.init())) 113 | .pipe(gulpLess()) // 编译less 114 | .pipe(rename({ extname: '.wxss' })) 115 | .pipe(mpNpm(mpNpmOptions)) // 分析依赖 116 | .pipe(gulpif(sourcemap.less, sourcemaps.write('.'))) 117 | .pipe(gulp.dest(dist)); 118 | 119 | /** `gulp wxss` 120 | * 解析wxss 121 | * */ 122 | const wxss = () => gulp.src( 123 | globs.wxss, 124 | { ...srcOptions, since: since(wxss) }, 125 | ) 126 | .pipe(mpNpm(mpNpmOptions)) // 分析依赖 127 | .pipe(gulp.dest(dist)); 128 | 129 | /** `gulp image` 130 | * 压缩图片 131 | * */ 132 | // const image = () => gulp.src( 133 | // globs.image, 134 | // { ...srcOptions, since: since(image) }, 135 | // ) 136 | // .pipe(cache(gulpImage())) 137 | // .pipe(gulp.dest(dist)); 138 | 139 | // 不清理 dist 的构建 140 | const _build = gulp.parallel( 141 | copy, 142 | ts, 143 | js, 144 | json, 145 | less, 146 | wxss, 147 | // image, 148 | ); 149 | 150 | // 将 miniprogramRoot 配置修改为 dist 路径 151 | const config = async () => { 152 | const projectFile = resolve('project.config.json'); 153 | const project = jsonfile.readFileSync(projectFile, { throws: false }); 154 | if (project) { 155 | project.miniprogramRoot = path.relative(path.dirname(projectFile), dist); 156 | jsonfile.writeFileSync(resolve('project.config.json'), project, { spaces: 2 }); 157 | project.miniprogramRoot = '/'; 158 | jsonfile.writeFileSync(resolve(dist, 'project.config.json'), project, { spaces: 2 }); 159 | } 160 | }; 161 | 162 | /** `gulp build` 163 | * 构建 164 | * */ 165 | const build = gulp.series( 166 | gulp.parallel( 167 | clear, 168 | // clearCache 169 | ), 170 | _build, 171 | config, 172 | ); 173 | 174 | /** `gulp watch` 175 | * 监听 176 | * */ 177 | const watch = () => { 178 | gulp.watch(globs.copy, watchOptions, copy); 179 | gulp.watch(globs.ts, watchOptions, ts); 180 | gulp.watch(globs.js, watchOptions, js); 181 | gulp.watch(globs.json, watchOptions, json); 182 | gulp.watch(globs.less, watchOptions, less); 183 | gulp.watch(globs.wxss, watchOptions, wxss); 184 | // gulp.watch(globs.image, watchOptions, image); 185 | }; 186 | 187 | /** `gulp` or `gulp dev` 188 | * 构建并监听 189 | * */ 190 | const dev = gulp.series( 191 | clear, 192 | _build, 193 | config, 194 | watch, 195 | ); 196 | 197 | // `gulp --tasks` list tasks 198 | module.exports = { 199 | clear, 200 | clearCache, 201 | copy, 202 | ts, 203 | less, 204 | // image, 205 | build, 206 | watch, 207 | dev, 208 | default: dev, 209 | }; 210 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mp-gulpfile", 3 | "description": "微信小程序 gulpfile 最佳实践", 4 | "version": "1.5.0", 5 | "license": "MIT", 6 | "bin": { 7 | "mp-gulpfile": "bin/mp-gulpfile.js" 8 | }, 9 | "main": "gulpfile.js", 10 | "scripts": { 11 | "test": "jest", 12 | "cp": "cp gulpfile.js template/" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "https://github.com/cong-min/mp-gulpfile.git" 17 | }, 18 | "author": "Cong Min", 19 | "dependencies": { 20 | "commander": "^5.0.0", 21 | "fs-extra": "^8.1.0" 22 | }, 23 | "devDependencies": { 24 | "eslint": "^6.8.0", 25 | "eslint-config-soda-works": "^1.2.0", 26 | "husky": "^4.2.3", 27 | "lint-staged": "^10.0.8" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /template/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.{js,jsx,ts,tsx,vue}] 12 | max_line_length = 100 13 | 14 | [*.{json,yml}] 15 | indent_style = space 16 | indent_size = 2 17 | -------------------------------------------------------------------------------- /template/.eslintignore: -------------------------------------------------------------------------------- 1 | .miniprogram 2 | test 3 | __tests__ 4 | node_modules 5 | -------------------------------------------------------------------------------- /template/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: [ ], 3 | globals: { 4 | 'wx': false, 5 | 'App': false, 6 | 'getApp': false, 7 | 'Page': false, 8 | 'getCurrentPages': false, 9 | 'Component': false, 10 | 'Behavior': false, 11 | }, 12 | rules: { 13 | indent: ['error', 2], 14 | }, 15 | }; 16 | -------------------------------------------------------------------------------- /template/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | 4 | # Log files 5 | npm-debug.log* 6 | yarn-debug.log* 7 | yarn-error.log* 8 | 9 | # Editor directories and files 10 | .idea 11 | *.suo 12 | *.ntvs* 13 | *.njsproj 14 | *.sln 15 | *.sw* 16 | -------------------------------------------------------------------------------- /template/.miniprogram/app.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | var index_1 = require("./utils/index"); 4 | App({ 5 | onLaunch: function (options) { 6 | console.log('onLaunch options', options); 7 | }, 8 | onShow: function () { }, 9 | onHide: function () { }, 10 | onError: function () { }, 11 | onPageNotFound: function () { }, 12 | globalData: {}, 13 | emitter: (0, index_1.mitt)(), 14 | }); 15 | 16 | //# sourceMappingURL=app.js.map 17 | -------------------------------------------------------------------------------- /template/.miniprogram/app.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["app.ts"],"names":[],"mappings":";;AACA,uCAAqC;AAErC,GAAG,CAAC;IAGF,QAAQ,YAAC,OAAO;QACd,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,gBAAK,CAAC;IAEZ,MAAM,gBAAK,CAAC;IAEZ,OAAO,gBAAK,CAAC;IAEb,cAAc,gBAAK,CAAC;IAGpB,UAAU,EAAE,EAAG;IAEf,OAAO,EAAE,IAAA,YAAI,GAAE;CAIhB,CAAC,CAAC","file":"app.js","sourcesContent":["// app.ts\nimport { mitt } from './utils/index';\n\nApp({\n /* 生命周期 */\n // 小程序初始化完成时触发,全局只触发一次\n onLaunch(options) {\n console.log('onLaunch options', options);\n },\n // 小程序启动,或从后台进入前台显示时触发\n onShow() { },\n // 小程序从前台进入后台时触发\n onHide() { },\n // 小程序发生脚本错误或 API 调用报错时触发\n onError() { },\n // 小程序要打开的页面不存在时触发\n onPageNotFound() { },\n\n /* Global Data */\n globalData: { },\n\n emitter: mitt(),\n\n /* Global Methods */\n\n});\n"]} -------------------------------------------------------------------------------- /template/.miniprogram/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "pages": [ 3 | "pages/index/index" 4 | ], 5 | "window": { 6 | "backgroundTextStyle": "light", 7 | "navigationBarBackgroundColor": "#fff", 8 | "navigationBarTitleText": "Gulp Template", 9 | "navigationBarTextStyle": "black" 10 | }, 11 | "style": "v2", 12 | "sitemapLocation": "sitemap.json" 13 | } -------------------------------------------------------------------------------- /template/.miniprogram/app.wxss: -------------------------------------------------------------------------------- 1 | /* app.less **/ 2 | @import './miniprogram_npm/weui-miniprogram/weui-wxss/dist/style/weui.wxss'; 3 | page { 4 | display: flex; 5 | flex-direction: column; 6 | align-items: stretch; 7 | } 8 | -------------------------------------------------------------------------------- /template/.miniprogram/app.wxss.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["app.less"],"names":[],"mappings":";QACc;AAEd;EACE,aAAA;EACA,sBAAA;EACA,oBAAA","sourcesContent":["/* app.less **/\n@import (css) 'weui-miniprogram/weui-wxss/dist/style/weui.wxss';\n\npage {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n}\n"],"file":"app.wxss"} -------------------------------------------------------------------------------- /template/.miniprogram/assets/img/gulp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cong-min/mp-gulpfile/e19e8c970887e9e061393822054cb332e24cec3f/template/.miniprogram/assets/img/gulp.png -------------------------------------------------------------------------------- /template/.miniprogram/components/quickstart/quickstart.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Component({ 3 | options: { 4 | addGlobalClass: true, 5 | }, 6 | properties: {}, 7 | data: {}, 8 | observers: {}, 9 | lifetimes: { 10 | ready: function () { }, 11 | detached: function () { }, 12 | }, 13 | pageLifetimes: { 14 | show: function () { }, 15 | hide: function () { }, 16 | resize: function () { } 17 | }, 18 | methods: {} 19 | }); 20 | 21 | //# sourceMappingURL=quickstart.js.map 22 | -------------------------------------------------------------------------------- /template/.miniprogram/components/quickstart/quickstart.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["components/quickstart/quickstart.ts"],"names":[],"mappings":";AAGA,SAAS,CAAC;IAER,OAAO,EAAE;QACP,cAAc,EAAE,IAAI;KACrB;IAUD,UAAU,EAAE,EAEX;IAED,IAAI,EAAE,EAEL;IAED,SAAS,EAAE,EAAE;IAGb,SAAS,EAAE;QAMT,KAAK,gBAAK,CAAC;QAIX,QAAQ,gBAAK,CAAC;KACf;IAED,aAAa,EAAE;QAEb,IAAI,gBAAK,CAAC;QAEV,IAAI,gBAAK,CAAC;QAEV,MAAM,gBAAK,CAAC;KACb;IAGD,OAAO,EAAE,EAER;CACF,CAAC,CAAC","file":"quickstart.js","sourcesContent":["// quickstart.ts\n//const app = getApp();\n\nComponent({\n // 配置项\n options: {\n addGlobalClass: true,\n },\n\n // 引用组件混入\n //behaviors: [],\n // 定义组件间关系\n //relations: {},\n\n // 组件接受的外部样式类\n //externalClasses: [],\n // 组件的对外属性\n properties: {\n\n },\n // 组件的内部数据\n data: {\n\n },\n // 组件数据字段监听器\n observers: {},\n\n /* 组件生命周期 */\n lifetimes: {\n // 组件实例被创建\n //created() {},\n // 组件实例进入页面节点树\n //attached() {},\n // 页面组件初始化完成\n ready() { },\n // 组件实例被移动到节点树另一个位置\n //moved() {},\n // 组件实例被从页面节点树移除\n detached() { },\n },\n /* 组件所在页面的生命周期 */\n pageLifetimes: {\n // 页面被展示\n show() { },\n // 页面被隐藏\n hide() { },\n // 页面尺寸变化\n resize() { }\n },\n\n /* Methods */\n methods: {\n\n }\n});\n"]} -------------------------------------------------------------------------------- /template/.miniprogram/components/quickstart/quickstart.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /template/.miniprogram/components/quickstart/quickstart.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | # 启动监听服务 4 | $ npm start 5 | # 单次构建 6 | $ npm run build 7 | 8 | -------------------------------------------------------------------------------- /template/.miniprogram/components/quickstart/quickstart.wxss: -------------------------------------------------------------------------------- 1 | .pre { 2 | width: 520rpx; 3 | margin: 0 auto; 4 | padding: 40rpx 50rpx; 5 | border-radius: 10rpx; 6 | background-color: #eee; 7 | font-size: 14px; 8 | font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace; 9 | line-height: 1.5; 10 | text-align: left; 11 | display: flex; 12 | flex-direction: column; 13 | } 14 | .code { 15 | color: #222; 16 | } 17 | .comment { 18 | color: #999; 19 | } 20 | -------------------------------------------------------------------------------- /template/.miniprogram/components/quickstart/quickstart.wxss.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["components/quickstart/quickstart.less"],"names":[],"mappings":"AACA;EACE,aAAA;EACA,cAAA;EACA,oBAAA;EACA,oBAAA;EACA,sBAAA;EACA,eAAA;EACA,wEAAA;EACA,gBAAA;EACA,gBAAA;EACA,aAAA;EACA,sBAAA;;AAEF;EACE,WAAA;;AAEF;EACE,WAAA","sourcesContent":["// quickstart.less\n.pre {\n width: 520rpx;\n margin: 0 auto;\n padding: 40rpx 50rpx;\n border-radius: 10rpx;\n background-color: #eee;\n font-size: 14px;\n font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;\n line-height: 1.5;\n text-align: left;\n display: flex;\n flex-direction: column;\n}\n.code {\n color: #222;\n}\n.comment {\n color: #999;\n}\n"],"file":"quickstart.wxss"} -------------------------------------------------------------------------------- /template/.miniprogram/miniprogram_npm/miniprogram-api-promise/index.js: -------------------------------------------------------------------------------- 1 | export {promisify, promisifyAll} from './src/promise' 2 | -------------------------------------------------------------------------------- /template/.miniprogram/miniprogram_npm/miniprogram-api-promise/src/method.js: -------------------------------------------------------------------------------- 1 | export const asyncMethods = [ 2 | 'canvasGetImageData', 3 | 'canvasPutImageData', 4 | 'canvasToTempFilePath', 5 | 'setEnableDebug', 6 | 'startAccelerometer', 7 | 'stopAccelerometer', 8 | 'getBatteryInfo', 9 | 'getClipboardData', 10 | 'setClipboardData', 11 | 'startCompass', 12 | 'stopCompass', 13 | 'addPhoneContact', 14 | 'startGyroscope', 15 | 'stopGyroscope', 16 | 'startBeaconDiscovery', 17 | 'stopBeaconDiscovery', 18 | 'getBeacons', 19 | 'startLocalServiceDiscovery', 20 | 'stopLocalServiceDiscovery', 21 | 'startDeviceMotionListening', 22 | 'stopDeviceMotionListening', 23 | 'getNetworkType', 24 | 'makePhoneCall', 25 | 'scanCode', 26 | 'getSystemInfo', 27 | 'vibrateShort', 28 | 'vibrateLong', 29 | 'getExtConfig', 30 | 'chooseLocation', 31 | 'getLocation', 32 | 'openLocation', 33 | 'chooseMessageFile', 34 | 'loadFontFace', 35 | 'chooseImage', 36 | 'previewImage', 37 | 'getImageInfo', 38 | 'saveImageToPhotosAlbum', 39 | 'compressImage', 40 | 'chooseVideo', 41 | 'saveVideoToPhotosAlbum', 42 | 'downloadFile', 43 | 'request', 44 | 'connectSocket', 45 | 'closeSocket', 46 | 'sendSocketMessage', 47 | 'uploadFile', 48 | 'login', 49 | 'checkSession', 50 | 'chooseAddress', 51 | 'authorize', 52 | 'addCard', 53 | 'openCard', 54 | 'chooseInvoice', 55 | 'chooseInvoiceTitle', 56 | 'getUserInfo', 57 | 'requestPayment', 58 | 'getWeRunData', 59 | 'showModal', 60 | 'showToast', 61 | 'hideToast', 62 | 'showLoading', 63 | 'hideLoading', 64 | 'showActionSheet', 65 | 'pageScrollTo', 66 | 'startPullDownRefresh', 67 | 'stopPullDownRefresh', 68 | 'setBackgroundColor', 69 | 'setBackgroundTextStyle', 70 | 'setTabBarBadge', 71 | 'removeTabBarBadge', 72 | 'showTabBarRedDot', 73 | 'hideTabBarRedDot', 74 | 'showTabBar', 75 | 'hideTabBar', 76 | 'setTabBarStyle', 77 | 'setTabBarItem', 78 | 'setTopBarText', 79 | 'saveFile', 80 | 'openDocument', 81 | 'getSavedFileList', 82 | 'getSavedFileInfo', 83 | 'removeSavedFile', 84 | 'getFileInfo', 85 | 'getStorage', 86 | 'setStorage', 87 | 'removeStorage', 88 | 'clearStorage', 89 | 'getStorageInfo', 90 | 'closeBLEConnection', 91 | 'closeBluetoothAdapter', 92 | 'createBLEConnection', 93 | 'getBLEDeviceCharacteristics', 94 | 'getBLEDeviceServices', 95 | 'getBluetoothAdapterState', 96 | 'getBluetoothDevices', 97 | 'getConnectedBluetoothDevices', 98 | 'notifyBLECharacteristicValueChange', 99 | 'openBluetoothAdapter', 100 | 'readBLECharacteristicValue', 101 | 'startBluetoothDevicesDiscovery', 102 | 'stopBluetoothDevicesDiscovery', 103 | 'writeBLECharacteristicValue', 104 | 'getHCEState', 105 | 'sendHCEMessage', 106 | 'startHCE', 107 | 'stopHCE', 108 | 'getScreenBrightness', 109 | 'setKeepScreenOn', 110 | 'setScreenBrightness', 111 | 'connectWifi', 112 | 'getConnectedWifi', 113 | 'getWifiList', 114 | 'setWifiList', 115 | 'startWifi', 116 | 'stopWifi', 117 | 'getBackgroundAudioPlayerState', 118 | 'playBackgroundAudio', 119 | 'pauseBackgroundAudio', 120 | 'seekBackgroundAudio', 121 | 'stopBackgroundAudio', 122 | 'getAvailableAudioSources', 123 | 'startRecord', 124 | 'stopRecord', 125 | 'setInnerAudioOption', 126 | 'playVoice', 127 | 'pauseVoice', 128 | 'stopVoice', 129 | 'getSetting', 130 | 'openSetting', 131 | 'getShareInfo', 132 | 'hideShareMenu', 133 | 'showShareMenu', 134 | 'updateShareMenu', 135 | 'checkIsSoterEnrolledInDevice', 136 | 'checkIsSupportSoterAuthentication', 137 | 'startSoterAuthentication', 138 | 'navigateBackMiniProgram', 139 | 'navigateToMiniProgram', 140 | 'setNavigationBarTitle', 141 | 'showNavigationBarLoading', 142 | 'hideNavigationBarLoading', 143 | 'setNavigationBarColor', 144 | 'redirectTo', 145 | 'reLaunch', 146 | 'navigateTo', 147 | 'switchTab', 148 | 'navigateBack' 149 | ] -------------------------------------------------------------------------------- /template/.miniprogram/miniprogram_npm/miniprogram-api-promise/src/promise.js: -------------------------------------------------------------------------------- 1 | import { asyncMethods } from './method' 2 | 3 | function hasCallback(args) { 4 | if (!args || typeof args !== 'object') return false 5 | 6 | const callback = ['success', 'fail', 'complete'] 7 | for (const m of callback) { 8 | if (typeof args[m] === 'function') return true 9 | } 10 | return false 11 | } 12 | 13 | function _promisify(func) { 14 | if (typeof func !== 'function') return fn 15 | return (args = {}) => 16 | new Promise((resolve, reject) => { 17 | func( 18 | Object.assign(args, { 19 | success: resolve, 20 | fail: reject 21 | }) 22 | ) 23 | }) 24 | } 25 | 26 | export function promisifyAll(wx = {}, wxp = {}) { 27 | Object.keys(wx).forEach(key => { 28 | const fn = wx[key] 29 | if (typeof fn === 'function' && asyncMethods.indexOf(key) >= 0) { 30 | wxp[key] = args => { 31 | if (hasCallback(args)) { 32 | fn(args) 33 | } else { 34 | return _promisify(fn)(args) 35 | } 36 | } 37 | } else { 38 | wxp[key] = fn 39 | } 40 | }) 41 | } 42 | 43 | export const promisify = _promisify -------------------------------------------------------------------------------- /template/.miniprogram/miniprogram_npm/mitt/index.js: -------------------------------------------------------------------------------- 1 | module.exports=function(n){return{all:n=n||new Map,on:function(e,t){var i=n.get(e);i&&i.push(t)||n.set(e,[t])},off:function(e,t){var i=n.get(e);i&&i.splice(i.indexOf(t)>>>0,1)},emit:function(e,t){(n.get(e)||[]).slice().map(function(n){n(t)}),(n.get("*")||[]).slice().map(function(n){n(e,t)})}}}; 2 | //# sourceMappingURL=mitt.js.map 3 | -------------------------------------------------------------------------------- /template/.miniprogram/miniprogram_npm/weui-miniprogram/_commons/0.js: -------------------------------------------------------------------------------- 1 | var globalThis=this,self=this;module.exports=function(e){var t={},r={0:0};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n.oe=function(e){process.nextTick((function(){throw e}))},function(t){for(var o,u,l,i,f,c,a,p,s,d,b,y=0,g=0,h=[];y{{title}}{{desc}} 2 | -------------------------------------------------------------------------------- /template/.miniprogram/miniprogram_npm/weui-miniprogram/msg/msg.wxss: -------------------------------------------------------------------------------- 1 | .weui-msg__icon-img{width:190rpx;height:190rpx} 2 | 3 | -------------------------------------------------------------------------------- /template/.miniprogram/miniprogram_npm/weui-miniprogram/weui-wxss/dist/style/weui.wxss: -------------------------------------------------------------------------------- 1 | /*! 2 | * WeUI v2.5.0 (https://github.com/weui/weui-wxss) 3 | * Copyright 2021 Tencent, Inc. 4 | * Licensed under the MIT license 5 | */[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}.weui-input__placeholder{color:var(--weui-FG-2)}[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-LINK-ACTIVE:rgba(87,107,149,.5);--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-LINK-ACTIVE:rgba(125,144,169,.5);--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;font-size:10px;width:2.4em;height:2.4em;-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:1.2em}.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:6.4em;height:6.4em}.weui-icon_msg.weui-icon-warn{color:var(--weui-RED)}.weui-icon_msg.weui-icon-info-circle{color:var(--weui-BLUE)}.weui-icon_msg-primary{width:6.4em;height:6.4em}.weui-icon_msg-primary.weui-icon-warn{color:var(--weui-YELLOW)}.weui-hidden_abs{opacity:0}.weui-hidden-space:empty:before,.weui-hidden_abs{position:absolute;width:1px;height:1px;overflow:hidden}.weui-hidden-space:empty:before{content:"\00A0"}.weui-wa-hotarea-el{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);min-width:44px;min-height:44px;width:100%;height:100%;background:hsla(0,0%,100%,0)}.weui-wa-hotarea,.weui-wa-hotarea-el__wrp,.weui-wa-hotarea_before{position:relative}.weui-wa-hotarea-el__wrp a,.weui-wa-hotarea_before a,.weui-wa-hotarea a{position:relative;z-index:1}.weui-wa-hotarea:after,.weui-wa-hotarea_before:before{content:"";position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);min-width:44px;min-height:44px;width:100%;height:100%;background:hsla(0,0%,100%,0)}.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.88235294;border-radius:8px;-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],.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-primary-loading{margin:-.2em 8px 0 0;vertical-align:middle}.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)}.weui-bottom-fixed-opr-page{height:100%;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column}.weui-bottom-fixed-opr-page__content{min-height:0;-webkit-box-flex:1;-webkit-flex:1;flex:1;padding-bottom:80px;box-sizing:border-box;overflow-y:auto;-webkit-overflow-scrolling:touch}.weui-bottom-fixed-opr{padding:16px 32px 24px;padding:16px calc(32px + constant(safe-area-inset-right)) calc(24px + constant(safe-area-inset-bottom)) calc(32px + constant(safe-area-inset-left));padding:16px calc(32px + env(safe-area-inset-right)) calc(24px + env(safe-area-inset-bottom)) calc(32px + env(safe-area-inset-left));background:#fff;position:relative}.weui-bottom-fixed-opr:before{content:"";height:80px;background:-webkit-linear-gradient(bottom,#fff,hsla(0,0%,100%,0));background:linear-gradient(0deg,#fff,hsla(0,0%,100%,0));position:absolute;bottom:calc(100% - 1px);left:0;right:0;-webkit-transform:translateZ(0);transform:translateZ(0)}[data-weui-theme=dark] .weui-bottom-fixed-opr{background:#191919}[data-weui-theme=dark] .weui-bottom-fixed-opr:before{background:-webkit-linear-gradient(bottom,#191919,rgba(25,25,25,0));background:linear-gradient(0deg,#191919,rgba(25,25,25,0))}.weui-half-screen-dialog.weui-half-screen-dialog_bottom-fixed{padding:0}.weui-half-screen-dialog.weui-half-screen-dialog_bottom-fixed .weui-half-screen-dialog__hd{padding:0 24px;padding:0 calc(24px + constant(safe-area-inset-right)) 0 calc(24px + constant(safe-area-inset-left));padding:0 calc(24px + env(safe-area-inset-right)) 0 calc(24px + env(safe-area-inset-left))}.weui-half-screen-dialog.weui-half-screen-dialog_bottom-fixed .weui-half-screen-dialog__bd{padding-bottom:64px}.weui-half-screen-dialog.weui-half-screen-dialog_bottom-fixed .weui-half-screen-dialog__ft{padding:0 24px 64px;padding:0 calc(24px + constant(safe-area-inset-right)) 64px calc(24px + constant(safe-area-inset-left));padding:0 calc(24px + env(safe-area-inset-right)) 64px calc(24px + env(safe-area-inset-left))}.weui-half-screen-dialog.weui-half-screen-dialog_bottom-fixed .weui-bottom-fixed-opr-page__content{padding:0 24px;padding:0 calc(24px + constant(safe-area-inset-right)) 0 calc(24px + constant(safe-area-inset-left));padding:0 calc(24px + env(safe-area-inset-right)) 0 calc(24px + env(safe-area-inset-left))}.weui-half-screen-dialog.weui-half-screen-dialog_bottom-fixed .weui-bottom-fixed-opr-page{-webkit-box-flex:1;-webkit-flex:1;flex:1;min-height:0}.weui-half-screen-dialog.weui-half-screen-dialog_bottom-fixed .weui-bottom-fixed-opr-page .weui-bottom-fixed-opr{padding:16px 0 0}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{font-size:16px;border-radius:6px}.weui-btn_mini,.weui-btn_xmini{display:inline-block;width:auto;padding:0 12px;line-height:2}.weui-btn_xmini{font-size:14px;border-radius:2.8px}.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{opacity:0;position:absolute;width:0;height:0;overflow:hidden}.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-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-form-preview__list{padding-top:24px;padding-bottom:24px;line-height:1.4;font-size:14px;position:relative}.weui-form-preview__list:before{content:"";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-form-preview__list:last-child{padding-bottom:0}.weui-form-preview__list .weui-form-preview__label{text-align:left;text-align-last:unset;width:6em}.weui-form-preview__list .weui-form-preview__value{-webkit-hyphens:auto;hyphens:auto}.weui-form-preview__list .weui-form-preview__item{margin-top:12px}.weui-form-preview__list .weui-form-preview__item:first-child,.weui-form-preview__list>.weui-cells__title:first-child{margin-top:0}.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;min-height:56px;line-height:56px;position:relative;z-index:1;padding-left:16px;color:var(--weui-FG-0)}.weui-cell_select-before{-webkit-box-align:initial;-webkit-align-items:initial;align-items:initial;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;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.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:var(--weui-LINK-ACTIVE)}.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;width:0;height:0;opacity:0;overflow:hidden}.weui-switch-cp__box{display:block}.weui-cell_uploader{padding-bottom:24px}.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__desc-primary a,.weui-msg__desc a,.weui-msg__tips a{color:var(--weui-LINK);display:inline-block;vertical-align:baseline}.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__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;word-wrap:break-word;-webkit-hyphens:auto;hyphens:auto}.weui-msg__text-area:first-child{padding-top:96px}.weui-msg__title{margin-bottom:16px;font-weight:400;font-size:22px;color:#191919;-webkit-text-stroke:.02em}[data-weui-theme=dark] .weui-msg__title{color:#d1d1d1}@supports (-webkit-overflow-scrolling:touch){.weui-msg__title{font-weight:500;-webkit-text-stroke:initial}}.weui-msg__desc{font-size:17px;font-weight:400;color:var(--weui-FG-0);margin-bottom:16px}.weui-msg__desc-primary{font-size:14px;color:var(--weui-FG-1);margin-bottom:16px}.weui-msg__custom-area{text-align:left;word-wrap:break-word;-webkit-hyphens:auto;hyphens:auto;margin-bottom:16px}.weui-msg__title+.weui-msg__custom-area{margin-top:48px}.weui-msg__desc+.weui-msg__custom-area,.weui-msg__desc-primary+.weui-msg__custom-area{margin-top:40px}.weui-msg__custom-area .weui-cells__group_form .weui-cells:after,.weui-msg__custom-area .weui-cells__group_form .weui-cells:before{left:0;right:0}.weui-msg__custom-area .weui-cells__group_form .weui-cell{padding-left:0;padding-right:0}.weui-msg__custom-area .weui-cells__group_form .weui-cell:before{left:0;right:0}.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;word-wrap:break-word;-webkit-hyphens:auto;hyphens:auto}.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;padding:0 32px;box-sizing:border-box}.weui-msg__extra-area a,.weui-msg__extra-area navigator{color:var(--weui-LINK)}.weui-msg__extra-area navigator{display:inline}.weui-msg_align-top .weui-msg__text-area:first-child{padding-top:0}.weui-cells__group{border:0}.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:var(--weui-FG-2)}.weui-cells__group_form .weui-cells__tips a{font-weight:700}.weui-cells__group_form .weui-cells__tips_warn{color:var(--weui-RED)}.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-cells__group_form .weui-cell_wrap{-webkit-box-align:initial;-webkit-align-items:initial;align-items:initial;padding-top:8px;padding-bottom:8px}.weui-cells__group_form .weui-cell_wrap .weui-cell__hd{padding-right:0}.weui-cells__group_form .weui-cell_wrap .weui-label{margin-top:8px}.weui-cells__group_form .weui-cell_wrap .weui-cell__bd{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-cells__group_form .weui-cell__control{margin:8px 0 8px 16px}.weui-cells__group_form .weui-cell__control_flex{-webkit-box-flex:1;-webkit-flex:1;flex:1;min-width:30vw}.weui-cells__group_form .weui-vcode-btn{font-size:16px;padding:0 12px;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_vcode.weui-cell_wrap{padding-top:4px;padding-bottom:4px}.weui-cells__group_form .weui-cell_vcode.weui-cell_wrap .weui-label{margin-top:12px}.weui-cells__group_form .weui-cell_vcode.weui-cell_wrap .weui-input{font-size:17px;min-height:1.88235294em}.weui-cells__group_form .weui-cell_vcode.weui-cell_wrap .weui-btn_reset{margin-right:12px}.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 40px}.weui-form__extra-area,.weui-form__tips-area{margin-bottom:24px;padding:0 32px;text-align:center}.weui-form__extra-area{margin-top:52px}.weui-form__opr-area{padding:0 32px}.weui-form__opr-area:last-child{margin-bottom:96px}.weui-form__opr-area+.weui-form__tips-area{margin-top:16px;margin-bottom:0}.weui-form__tips-area+.weui-form__extra-area{margin-top:32px}.weui-form__tips-area:last-child{margin-bottom:60px}.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;font-size:10px;width:2.8em;height:2.8em;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{display:block;font-weight:400;font-size:17px;color:var(--weui-FG-0);width:auto;white-space:nowrap;word-wrap:normal}.weui-media-box__desc,.weui-media-box__title{line-height:1.4;overflow:hidden;text-overflow:ellipsis;word-wrap:break-word;-webkit-hyphens:auto;hyphens:auto}.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{display:block;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}.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{-webkit-box-flex:1;-webkit-flex:1;flex:1;display:block;line-height:1.41176471;padding:16px 0;font-size:17px;color:var(--weui-LINK);font-weight:700;text-decoration:none;-webkit-tap-highlight-color:rgba(0,0,0,0);position:relative;overflow:hidden}.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));display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column}@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;-webkit-flex-shrink:0;flex-shrink:0}.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{-webkit-box-flex:1;-webkit-flex:1;flex:1;min-height:0;overflow-y:auto;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;word-wrap:break-word;-webkit-hyphens:auto;hyphens:auto;padding-top:4px;padding-bottom:56px;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 0 64px;text-align:center}.weui-half-screen-dialog__ft .weui-btn{width:184px;padding-left:16px;padding-right:16px}.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{margin:0 8px;width:136px}.weui-half-screen-dialog__ft .weui-btn:nth-last-child(n+2)+.weui-btn:first-child,.weui-half-screen-dialog__ft .weui-btn:nth-last-child(n+2):first-child{margin-left:0}.weui-half-screen-dialog__ft .weui-btn:nth-last-child(n+2)+.weui-btn:last-child,.weui-half-screen-dialog__ft .weui-btn:nth-last-child(n+2):last-child{margin-right:0}.weui-half-screen-dialog__btn-area{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-half-screen-dialog__btn-area+.weui-half-screen-dialog__attachment-area{margin-top:24px;margin-bottom:-34px}.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;width:auto;height:auto}.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;font-size:10px;width:13.6em;height:13.6em;top:40%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;border-radius:12px;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);box-sizing:border-box;line-height:1.4}.weui-toast_text{width:auto;height:auto;min-width:152px;max-width:216px;padding:12px 0}.weui-toast_text .weui-toast__content{font-size:14px}.weui-icon_toast{display:block;width:40px;height:40px;margin-bottom:16px}.weui-icon_toast.weui-icon-success-no-circle,.weui-icon_toast.weui-icon-warn{color:hsla(0,0%,100%,.9)}.weui-icon_toast.weui-loading{width:36px;height:36px}.weui-icon_toast.weui-primary-loading{font-size:40px;color:#ededed}.weui-icon_toast.weui-primary-loading:before{border-width:4px 0 4px 4px}.weui-icon_toast.weui-primary-loading:after{border-width:4px 4px 4px 0}.weui-icon_toast.weui-primary-loading .weui-primary-loading__dot{width:4px;height:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.weui-toast__content{font-size:17px;padding:0 12px;word-wrap:break-word;-webkit-hyphens:auto;hyphens:auto}.weui-toast_text-more .weui-icon_toast{margin-bottom:12px}.weui-toast_text-more .weui-toast__content{font-size:14px;line-height:1.6}.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__action,.weui-actionsheet__menu{color:var(--weui-FG-0);background-color:var(--weui-BG-2)}.weui-actionsheet__action{margin-top:8px;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;overflow:hidden}.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:20px auto;text-align:center;font-size:0}.weui-loadmore .weui-loading,.weui-loadmore .weui-primary-loading{margin-right:8px}.weui-loadmore__tips{display:inline-block;vertical-align:middle;font-size:14px;line-height:1.6;color:var(--weui-FG-0)}.weui-loadmore_line{border-top:1px solid var(--weui-FG-3);margin-top:32px}.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:.66666667em;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-list-tips{list-style:none;padding-top:24px;padding-bottom:24px;line-height:1.4;font-size:14px;color:var(--weui-FG-1);position:relative}.weui-list-tips:before{content:"";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-list-tips:last-child{padding-bottom:0}.weui-list-tips__item{position:relative;padding-left:15px;margin:16px 0}.weui-list-tips__item:before{content:"\2022";position:absolute;left:0;top:-.1em}.weui-list-tips__item:first-child{margin-top:0}.weui-form-preview__list+.weui-list-tips>.weui-list-tips__item:first-child{margin-top:6px}.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-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{font-size:10px;width:1.6em;height:1.6em;margin-left:8px;margin-right:4px;-webkit-flex-shrink:0;flex-shrink:0}.weui-search-bar__form{position:relative;-webkit-box-flex:1;-webkit-flex:1;flex:1;min-width:0;background-color:var(--weui-BG-2);border-radius:4px}.weui-search-bar__box{position:relative;z-index:1;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.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-clear{-webkit-flex-shrink:0;flex-shrink:0;font-size:10px;width:2em;height:2em;margin-left:8px;-webkit-mask-size:2em;mask-size:2em;-webkit-mask-position:calc(100% - 8px) 0;mask-position:calc(100% - 8px) 0;min-width:44px}.weui-search-bar__box .weui-icon-clear:after{content:"";position:absolute;top:0;bottom:0;width:44px}.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__cancel-btn{-webkit-flex-shrink:0;flex-shrink:0;display:none;margin-left:8px;line-height:28px;color:var(--weui-LINK)}.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(25,25,25,.95),rgba(25,25,25,.6)),-webkit-linear-gradient(bottom,rgba(25,25,25,.95),rgba(25,25,25,.6));background-image:linear-gradient(180deg,rgba(25,25,25,.95),rgba(25,25,25,.6)),linear-gradient(0deg,rgba(25,25,25,.95),rgba(25,25,25,.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{opacity:0;position:absolute;width:1px;height:1px;overflow:hidden}.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-primary-loading{font-size:16px;display:-webkit-inline-box;display:-webkit-inline-flex;display:inline-flex;position:relative;width:1em;height:1em;vertical-align:middle;color:#606060;-webkit-animation:f 1s steps(60) infinite;animation:f 1s steps(60) infinite}.weui-primary-loading:after,.weui-primary-loading:before{content:"";display:block;width:.5em;height:1em;box-sizing:border-box;border:.125em solid;border-color:currentColor}.weui-primary-loading:before{border-right-width:0;border-top-left-radius:1em;border-bottom-left-radius:1em;-webkit-mask-image:-webkit-linear-gradient(top,#000 8%,rgba(0,0,0,.3) 95%)}.weui-primary-loading:after{border-left-width:0;border-top-right-radius:1em;border-bottom-right-radius:1em;-webkit-mask-image:-webkit-linear-gradient(top,transparent 8%,rgba(0,0,0,.3) 95%)}.weui-primary-loading__dot{position:absolute;top:0;left:50%;margin-left:-.0625em;width:.125em;height:.125em;border-top-right-radius:.125em;border-bottom-right-radius:.125em;background:currentColor}.weui-primary-loading_brand{color:var(--weui-BRAND)}.weui-primary-loading_transparent{color:#ededed}.weui-loading{font-size:10px;width:2em;height:2em;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:100%;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__buttons{height:100%}.weui-slideview__btn__wrp{position:absolute;left:0;bottom:0;min-width:69px;white-space:nowrap;text-align:center}.weui-slideview__btn,.weui-slideview__btn__wrp{height:100%;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.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;display:-webkit-inline-box;display:-webkit-inline-flex;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.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}.weui-msg__title{font-weight:700;-webkit-text-stroke:initial} 6 | .weui-half-screen-dialog__ft .weui-btn{display:inline-block} 7 | 8 | 9 | -------------------------------------------------------------------------------- /template/.miniprogram/pages/index/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Page({ 3 | data: { 4 | start: false, 5 | }, 6 | onLoad: function (query) { 7 | console.log('onLoad query', query); 8 | }, 9 | onShow: function () { }, 10 | onReady: function () { }, 11 | onHide: function () { }, 12 | onUnload: function () { }, 13 | quickstart: function () { 14 | this.setData({ 15 | start: true, 16 | }); 17 | } 18 | }); 19 | 20 | //# sourceMappingURL=index.js.map 21 | -------------------------------------------------------------------------------- /template/.miniprogram/pages/index/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["pages/index/index.ts"],"names":[],"mappings":";AAGA,IAAI,CAAC;IAEH,IAAI,EAAE;QACJ,KAAK,EAAE,KAAK;KACb;IAID,MAAM,YAAC,KAAK;QACV,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,gBAAK,CAAC;IAEZ,OAAO,gBAAK,CAAC;IAEb,MAAM,gBAAK,CAAC;IAEZ,QAAQ,gBAAK,CAAC;IAmBd,UAAU;QACR,IAAI,CAAC,OAAO,CAAC;YACX,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;IACL,CAAC;CAEF,CAAC,CAAC","file":"index.js","sourcesContent":["// index.ts\n//const app = getApp();\n\nPage({\n // 页面响应数据\n data: {\n start: false,\n },\n\n /* 生命周期 */\n // 页面加载\n onLoad(query) {\n console.log('onLoad query', query);\n },\n // 页面切入显示\n onShow() { },\n // 页面渲染完成\n onReady() { },\n // 页面隐藏\n onHide() { },\n // 页面卸载\n onUnload() { },\n\n /* 页面事件 */\n // 下拉刷新\n //onPullDownRefresh() {},\n // 上拉触底\n //onReachBottom() {},\n // 页面滚动\n //onPageScroll(event) {},\n // 页面尺寸改变\n //onResize() {},\n // 转发分享 (定义了此事件,右上角菜单将显示`转发`按钮)\n //onShareAppMessage(event) {},\n // 当前是 Tab 页时,点击 Tab 项\n //onTabItemTap(item) {},\n\n /* Others */\n\n /* Methods */\n quickstart() {\n this.setData({\n start: true,\n });\n }\n\n});\n"]} -------------------------------------------------------------------------------- /template/.miniprogram/pages/index/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "usingComponents": { 3 | "mp-msg": "weui-miniprogram/msg/msg", 4 | "quickstart": "/components/quickstart/quickstart" 5 | } 6 | } -------------------------------------------------------------------------------- /template/.miniprogram/pages/index/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 创建自 github.com/cong-min/mp-gulpfile 10 | 微信小程序 gulpfile 最佳实践 11 | 12 | 13 | 🚀 轻量极速构建 14 | 🧰 支持 TypeScript, Less 15 | 🗃 按需提取 npm 依赖 16 | 🎡 支持提取小程序 npm 包组件 17 | 🌁 图片压缩 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 更多指引可查阅 github 文档 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /template/.miniprogram/pages/index/index.wxss: -------------------------------------------------------------------------------- 1 | /* index.less */ 2 | .main-msg .weui-msg__icon-img { 3 | width: 250rpx; 4 | height: 250rpx; 5 | } 6 | -------------------------------------------------------------------------------- /template/.miniprogram/pages/index/index.wxss.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["pages/index/index.less"],"names":[],"mappings":";AACA,SACE;EACE,aAAA;EACA,cAAA","sourcesContent":["/* index.less */\n.main-msg {\n .weui-msg__icon-img {\n width: 250rpx;\n height: 250rpx;\n }\n}\n"],"file":"index.wxss"} -------------------------------------------------------------------------------- /template/.miniprogram/project.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "appid": "wxb243b08c8718e2c3", 3 | "projectname": "mp-gulp-template", 4 | "libVersion": "2.8.3", 5 | "miniprogramRoot": "/", 6 | "setting": { 7 | "urlCheck": false, 8 | "es6": true, 9 | "enhance": true, 10 | "postcss": true, 11 | "preloadBackgroundData": false, 12 | "minified": true, 13 | "newFeature": true, 14 | "coverView": true, 15 | "nodeModules": true, 16 | "autoAudits": false, 17 | "showShadowRootInWxmlPanel": true, 18 | "scopeDataCheck": false, 19 | "uglifyFileName": false, 20 | "checkInvalidKey": true, 21 | "checkSiteMap": true, 22 | "uploadWithSourceMap": true, 23 | "babelSetting": { 24 | "ignore": [], 25 | "disablePlugins": [], 26 | "outputPath": "" 27 | }, 28 | "bundle": true 29 | }, 30 | "compileType": "miniprogram", 31 | "simulatorType": "wechat", 32 | "simulatorPluginLibVersion": {}, 33 | "scripts": { 34 | "beforeCompile": "", 35 | "beforePreview": "npm run build", 36 | "beforeUpload": "npm run build" 37 | }, 38 | "condition": {} 39 | } 40 | -------------------------------------------------------------------------------- /template/.miniprogram/sitemap.json: -------------------------------------------------------------------------------- 1 | { 2 | "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html", 3 | "rules": [{ 4 | "action": "allow", 5 | "page": "*" 6 | }] 7 | } -------------------------------------------------------------------------------- /template/.miniprogram/utils/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.mitt = exports.promisify = exports.promisifyAll = void 0; 4 | var miniprogram_api_promise_1 = require("miniprogram-api-promise"); 5 | Object.defineProperty(exports, "promisifyAll", { enumerable: true, get: function () { return miniprogram_api_promise_1.promisifyAll; } }); 6 | Object.defineProperty(exports, "promisify", { enumerable: true, get: function () { return miniprogram_api_promise_1.promisify; } }); 7 | var mitt_1 = require("mitt"); 8 | exports.mitt = mitt_1.default; 9 | 10 | //# sourceMappingURL=index.js.map 11 | -------------------------------------------------------------------------------- /template/.miniprogram/utils/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["utils/index.ts"],"names":[],"mappings":";;;AAAA,mEAAkE;AAAzD,uHAAA,YAAY,OAAA;AAAE,oHAAA,SAAS,OAAA;AAChC,6BAAwB;AACf,eADF,cAAI,CACE","file":"index.js","sourcesContent":["export { promisifyAll, promisify } from 'miniprogram-api-promise';\nimport mitt from 'mitt';\nexport { mitt };\n"]} -------------------------------------------------------------------------------- /template/README.md: -------------------------------------------------------------------------------- 1 | # 微信小程序 gulp 模板 2 | 3 | > - 🚀 轻量极速构建 4 | > - 🧰 支持 `TypeScript` `Less` 5 | > - 🗃 按需提取 npm 依赖 6 | > - 🎡 支持提取小程序 npm 包组件 7 | > - 🌁 图片压缩 8 | 9 | ## 快速开始 10 | 11 | ```bash 12 | # 启动监听服务 13 | $ npm start 14 | # 单次构建 15 | $ npm run build 16 | ``` 17 | 18 | 将整个项目目录添加至微信开发者工具中,其中 `src` 为开发路径,`.miniprogram` 为生产路径。 19 | 20 | --- 21 | 22 | > 创建自 [mp-gulpfile](https://github.com/cong-min/mp-gulpfile) 微信小程序 gulpfile 最佳实践 23 | -------------------------------------------------------------------------------- /template/gulpfile.js: -------------------------------------------------------------------------------- 1 | const gulp = require('gulp'); 2 | const path = require('path'); 3 | const del = require('del'); 4 | const changed = require('gulp-changed'); 5 | const gulpTs = require('gulp-typescript'); 6 | const gulpif = require('gulp-if'); 7 | const sourcemaps = require('gulp-sourcemaps'); 8 | const gulpLess = require('gulp-less'); 9 | const rename = require('gulp-rename'); 10 | // const gulpImage = require('gulp-image'); 11 | const cache = require('gulp-cache'); 12 | const mpNpm = require('gulp-mp-npm'); 13 | const jsonfile = require('jsonfile'); 14 | 15 | const resolve = (...args) => path.resolve(__dirname, ...args); 16 | 17 | /* config */ 18 | const src = 'src'; 19 | const dist = '.miniprogram'; 20 | 21 | const sourcemap = { 22 | ts: true, // 是否开启 ts sourcemap 23 | less: true, // 是否开启 less sourcemap 24 | }; 25 | // options 26 | const srcOptions = { base: src }; 27 | const watchOptions = { events: ['add', 'change'] }; 28 | const mpNpmOptions = { npmDirname: 'miniprogram_npm' }; 29 | 30 | // 文件匹配路径 31 | const globs = { 32 | ts: `${src}/**/*.ts`, // 匹配 ts 文件 33 | js: `${src}/**/*.js`, // 匹配 js 文件 34 | json: `${src}/**/*.json`, // 匹配 json 文件 35 | less: `${src}/**/*.less`, // 匹配 less 文件 36 | wxss: `${src}/**/*.wxss`, // 匹配 wxss 文件 37 | // image: `${src}/**/*.{png,jpg,jpeg,gif,svg}`, // 匹配 image 文件 38 | }; 39 | globs.copy = [`${src}/**`, 40 | `!${globs.ts}`, `!${globs.js}`, `!${globs.json}`, 41 | `!${globs.less}`, `!${globs.wxss}`, 42 | // `!${globs.image}` 43 | ]; // 匹配需要拷贝的文件 44 | 45 | // 包装 gulp.lastRun, 引入文件 ctime 作为文件变动判断另一标准 46 | // https://github.com/gulpjs/vinyl-fs/issues/226 47 | const since = task => ( 48 | file => (gulp.lastRun(task) > file.stat.ctime ? gulp.lastRun(task) : 0) 49 | ); 50 | 51 | /** `gulp clear` 52 | * 清理文件 53 | * */ 54 | const clear = () => del(dist); 55 | 56 | /** `gulp clearCache` 57 | * 清理缓存 58 | * */ 59 | const clearCache = () => cache.clearAll(); 60 | 61 | /** `gulp copy` 62 | * 清理 63 | * */ 64 | const copy = () => gulp.src( 65 | globs.copy, 66 | { ...srcOptions, since: since(copy) }, 67 | ) 68 | .pipe(changed(dist)) // 过滤掉未改变的文件 69 | .pipe(gulp.dest(dist)); 70 | 71 | /** `gulp ts` 72 | * 编译ts 73 | * */ 74 | const tsProject = gulpTs.createProject(resolve('tsconfig.json')); 75 | const ts = () => gulp.src( 76 | globs.ts, 77 | srcOptions, 78 | ) 79 | .pipe(gulpif(sourcemap.ts, sourcemaps.init())) 80 | .pipe(tsProject()) // 编译ts 81 | .pipe(mpNpm(mpNpmOptions)) // 分析依赖 82 | .pipe(gulpif(sourcemap.ts, sourcemaps.write('.'))) 83 | .pipe(gulp.dest(dist)); 84 | 85 | /** `gulp js` 86 | * 解析js 87 | * */ 88 | const js = () => gulp.src( 89 | globs.js, 90 | { ...srcOptions, since: since(js) }, 91 | ) 92 | .pipe(mpNpm(mpNpmOptions)) // 分析依赖 93 | .pipe(gulp.dest(dist)); 94 | 95 | /** `gulp json` 96 | * 解析json 97 | * */ 98 | const json = () => gulp.src( 99 | globs.json, 100 | { ...srcOptions, since: since(json) }, 101 | ) 102 | .pipe(mpNpm(mpNpmOptions)) // 分析依赖 103 | .pipe(gulp.dest(dist)); 104 | 105 | /** `gulp less` 106 | * 编译less 107 | * */ 108 | const less = () => gulp.src( 109 | globs.less, 110 | { ...srcOptions, since: since(less) }, 111 | ) 112 | .pipe(gulpif(sourcemap.less, sourcemaps.init())) 113 | .pipe(gulpLess()) // 编译less 114 | .pipe(rename({ extname: '.wxss' })) 115 | .pipe(mpNpm(mpNpmOptions)) // 分析依赖 116 | .pipe(gulpif(sourcemap.less, sourcemaps.write('.'))) 117 | .pipe(gulp.dest(dist)); 118 | 119 | /** `gulp wxss` 120 | * 解析wxss 121 | * */ 122 | const wxss = () => gulp.src( 123 | globs.wxss, 124 | { ...srcOptions, since: since(wxss) }, 125 | ) 126 | .pipe(mpNpm(mpNpmOptions)) // 分析依赖 127 | .pipe(gulp.dest(dist)); 128 | 129 | /** `gulp image` 130 | * 压缩图片 131 | * */ 132 | // const image = () => gulp.src( 133 | // globs.image, 134 | // { ...srcOptions, since: since(image) }, 135 | // ) 136 | // .pipe(cache(gulpImage())) 137 | // .pipe(gulp.dest(dist)); 138 | 139 | // 不清理 dist 的构建 140 | const _build = gulp.parallel( 141 | copy, 142 | ts, 143 | js, 144 | json, 145 | less, 146 | wxss, 147 | // image, 148 | ); 149 | 150 | // 将 miniprogramRoot 配置修改为 dist 路径 151 | const config = async () => { 152 | const projectFile = resolve('project.config.json'); 153 | const project = jsonfile.readFileSync(projectFile, { throws: false }); 154 | if (project) { 155 | project.miniprogramRoot = path.relative(path.dirname(projectFile), dist); 156 | jsonfile.writeFileSync(resolve('project.config.json'), project, { spaces: 2 }); 157 | project.miniprogramRoot = '/'; 158 | jsonfile.writeFileSync(resolve(dist, 'project.config.json'), project, { spaces: 2 }); 159 | } 160 | }; 161 | 162 | /** `gulp build` 163 | * 构建 164 | * */ 165 | const build = gulp.series( 166 | gulp.parallel( 167 | clear, 168 | // clearCache 169 | ), 170 | _build, 171 | config, 172 | ); 173 | 174 | /** `gulp watch` 175 | * 监听 176 | * */ 177 | const watch = () => { 178 | gulp.watch(globs.copy, watchOptions, copy); 179 | gulp.watch(globs.ts, watchOptions, ts); 180 | gulp.watch(globs.js, watchOptions, js); 181 | gulp.watch(globs.json, watchOptions, json); 182 | gulp.watch(globs.less, watchOptions, less); 183 | gulp.watch(globs.wxss, watchOptions, wxss); 184 | // gulp.watch(globs.image, watchOptions, image); 185 | }; 186 | 187 | /** `gulp` or `gulp dev` 188 | * 构建并监听 189 | * */ 190 | const dev = gulp.series( 191 | clear, 192 | _build, 193 | config, 194 | watch, 195 | ); 196 | 197 | // `gulp --tasks` list tasks 198 | module.exports = { 199 | clear, 200 | clearCache, 201 | copy, 202 | ts, 203 | less, 204 | // image, 205 | build, 206 | watch, 207 | dev, 208 | default: dev, 209 | }; 210 | -------------------------------------------------------------------------------- /template/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "start": "npm run dev", 5 | "dev": "gulp", 6 | "build": "gulp build" 7 | }, 8 | "dependencies": { 9 | "miniprogram-api-promise": "^1.0.4", 10 | "mitt": "^2.1.0", 11 | "weui-miniprogram": "^1.0.8" 12 | }, 13 | "devDependencies": { 14 | "del": "^6.0.0", 15 | "gulp": "^4.0.2", 16 | "gulp-cache": "^1.1.3", 17 | "gulp-changed": "^4.0.2", 18 | "gulp-if": "^3.0.0", 19 | "gulp-less": "^4.0.1", 20 | "gulp-mp-npm": "^1.9.5", 21 | "gulp-rename": "^2.0.0", 22 | "gulp-sourcemaps": "^3.0.0", 23 | "gulp-typescript": "^6.0.0-alpha.1", 24 | "jsonfile": "^6.0.1", 25 | "miniprogram-api-typings": "latest", 26 | "typescript": "^4.3.2" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /template/project.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "appid": "wxb243b08c8718e2c3", 3 | "projectname": "mp-gulp-template", 4 | "libVersion": "2.8.3", 5 | "miniprogramRoot": ".miniprogram", 6 | "setting": { 7 | "urlCheck": false, 8 | "es6": true, 9 | "enhance": true, 10 | "postcss": true, 11 | "preloadBackgroundData": false, 12 | "minified": true, 13 | "newFeature": true, 14 | "coverView": true, 15 | "nodeModules": true, 16 | "autoAudits": false, 17 | "showShadowRootInWxmlPanel": true, 18 | "scopeDataCheck": false, 19 | "uglifyFileName": false, 20 | "checkInvalidKey": true, 21 | "checkSiteMap": true, 22 | "uploadWithSourceMap": true, 23 | "babelSetting": { 24 | "ignore": [], 25 | "disablePlugins": [], 26 | "outputPath": "" 27 | }, 28 | "bundle": true 29 | }, 30 | "compileType": "miniprogram", 31 | "simulatorType": "wechat", 32 | "simulatorPluginLibVersion": {}, 33 | "scripts": { 34 | "beforeCompile": "", 35 | "beforePreview": "npm run build", 36 | "beforeUpload": "npm run build" 37 | }, 38 | "condition": {} 39 | } 40 | -------------------------------------------------------------------------------- /template/src/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "pages": [ 3 | "pages/index/index" 4 | ], 5 | "window": { 6 | "backgroundTextStyle": "light", 7 | "navigationBarBackgroundColor": "#fff", 8 | "navigationBarTitleText": "Gulp Template", 9 | "navigationBarTextStyle": "black" 10 | }, 11 | "style": "v2", 12 | "sitemapLocation": "sitemap.json" 13 | } -------------------------------------------------------------------------------- /template/src/app.less: -------------------------------------------------------------------------------- 1 | /* app.less **/ 2 | @import (css) 'weui-miniprogram/weui-wxss/dist/style/weui.wxss'; 3 | 4 | page { 5 | display: flex; 6 | flex-direction: column; 7 | align-items: stretch; 8 | } 9 | -------------------------------------------------------------------------------- /template/src/app.ts: -------------------------------------------------------------------------------- 1 | // app.ts 2 | import { mitt } from './utils/index'; 3 | 4 | App({ 5 | /* 生命周期 */ 6 | // 小程序初始化完成时触发,全局只触发一次 7 | onLaunch(options) { 8 | console.log('onLaunch options', options); 9 | }, 10 | // 小程序启动,或从后台进入前台显示时触发 11 | onShow() { }, 12 | // 小程序从前台进入后台时触发 13 | onHide() { }, 14 | // 小程序发生脚本错误或 API 调用报错时触发 15 | onError() { }, 16 | // 小程序要打开的页面不存在时触发 17 | onPageNotFound() { }, 18 | 19 | /* Global Data */ 20 | globalData: { }, 21 | 22 | emitter: mitt(), 23 | 24 | /* Global Methods */ 25 | 26 | }); 27 | -------------------------------------------------------------------------------- /template/src/assets/img/gulp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cong-min/mp-gulpfile/e19e8c970887e9e061393822054cb332e24cec3f/template/src/assets/img/gulp.png -------------------------------------------------------------------------------- /template/src/components/quickstart/quickstart.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } 5 | -------------------------------------------------------------------------------- /template/src/components/quickstart/quickstart.less: -------------------------------------------------------------------------------- 1 | // quickstart.less 2 | .pre { 3 | width: 520rpx; 4 | margin: 0 auto; 5 | padding: 40rpx 50rpx; 6 | border-radius: 10rpx; 7 | background-color: #eee; 8 | font-size: 14px; 9 | font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace; 10 | line-height: 1.5; 11 | text-align: left; 12 | display: flex; 13 | flex-direction: column; 14 | } 15 | .code { 16 | color: #222; 17 | } 18 | .comment { 19 | color: #999; 20 | } 21 | -------------------------------------------------------------------------------- /template/src/components/quickstart/quickstart.ts: -------------------------------------------------------------------------------- 1 | // quickstart.ts 2 | //const app = getApp(); 3 | 4 | Component({ 5 | // 配置项 6 | options: { 7 | addGlobalClass: true, 8 | }, 9 | 10 | // 引用组件混入 11 | //behaviors: [], 12 | // 定义组件间关系 13 | //relations: {}, 14 | 15 | // 组件接受的外部样式类 16 | //externalClasses: [], 17 | // 组件的对外属性 18 | properties: { 19 | 20 | }, 21 | // 组件的内部数据 22 | data: { 23 | 24 | }, 25 | // 组件数据字段监听器 26 | observers: {}, 27 | 28 | /* 组件生命周期 */ 29 | lifetimes: { 30 | // 组件实例被创建 31 | //created() {}, 32 | // 组件实例进入页面节点树 33 | //attached() {}, 34 | // 页面组件初始化完成 35 | ready() { }, 36 | // 组件实例被移动到节点树另一个位置 37 | //moved() {}, 38 | // 组件实例被从页面节点树移除 39 | detached() { }, 40 | }, 41 | /* 组件所在页面的生命周期 */ 42 | pageLifetimes: { 43 | // 页面被展示 44 | show() { }, 45 | // 页面被隐藏 46 | hide() { }, 47 | // 页面尺寸变化 48 | resize() { } 49 | }, 50 | 51 | /* Methods */ 52 | methods: { 53 | 54 | } 55 | }); 56 | -------------------------------------------------------------------------------- /template/src/components/quickstart/quickstart.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | # 启动监听服务 4 | $ npm start 5 | # 单次构建 6 | $ npm run build 7 | 8 | -------------------------------------------------------------------------------- /template/src/pages/index/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "usingComponents": { 3 | "mp-msg": "weui-miniprogram/msg/msg", 4 | "quickstart": "/components/quickstart/quickstart" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /template/src/pages/index/index.less: -------------------------------------------------------------------------------- 1 | /* index.less */ 2 | .main-msg { 3 | .weui-msg__icon-img { 4 | width: 250rpx; 5 | height: 250rpx; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /template/src/pages/index/index.ts: -------------------------------------------------------------------------------- 1 | // index.ts 2 | //const app = getApp(); 3 | 4 | Page({ 5 | // 页面响应数据 6 | data: { 7 | start: false, 8 | }, 9 | 10 | /* 生命周期 */ 11 | // 页面加载 12 | onLoad(query) { 13 | console.log('onLoad query', query); 14 | }, 15 | // 页面切入显示 16 | onShow() { }, 17 | // 页面渲染完成 18 | onReady() { }, 19 | // 页面隐藏 20 | onHide() { }, 21 | // 页面卸载 22 | onUnload() { }, 23 | 24 | /* 页面事件 */ 25 | // 下拉刷新 26 | //onPullDownRefresh() {}, 27 | // 上拉触底 28 | //onReachBottom() {}, 29 | // 页面滚动 30 | //onPageScroll(event) {}, 31 | // 页面尺寸改变 32 | //onResize() {}, 33 | // 转发分享 (定义了此事件,右上角菜单将显示`转发`按钮) 34 | //onShareAppMessage(event) {}, 35 | // 当前是 Tab 页时,点击 Tab 项 36 | //onTabItemTap(item) {}, 37 | 38 | /* Others */ 39 | 40 | /* Methods */ 41 | quickstart() { 42 | this.setData({ 43 | start: true, 44 | }); 45 | } 46 | 47 | }); 48 | -------------------------------------------------------------------------------- /template/src/pages/index/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 创建自 github.com/cong-min/mp-gulpfile 10 | 微信小程序 gulpfile 最佳实践 11 | 12 | 13 | 🚀 轻量极速构建 14 | 🧰 支持 TypeScript, Less 15 | 🗃 按需提取 npm 依赖 16 | 🎡 支持提取小程序 npm 包组件 17 | 🌁 图片压缩 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 更多指引可查阅 github 文档 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /template/src/sitemap.json: -------------------------------------------------------------------------------- 1 | { 2 | "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html", 3 | "rules": [{ 4 | "action": "allow", 5 | "page": "*" 6 | }] 7 | } -------------------------------------------------------------------------------- /template/src/utils/index.ts: -------------------------------------------------------------------------------- 1 | export { promisifyAll, promisify } from 'miniprogram-api-promise'; 2 | import mitt from 'mitt'; 3 | export { mitt }; 4 | -------------------------------------------------------------------------------- /template/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strictNullChecks": true, 4 | "noImplicitAny": false, 5 | "module": "CommonJS", 6 | "target": "ES5", 7 | "allowJs": false, 8 | "experimentalDecorators": true, 9 | "noImplicitThis": true, 10 | "noImplicitReturns": true, 11 | "alwaysStrict": true, 12 | "inlineSourceMap": true, 13 | "inlineSources": true, 14 | "noFallthroughCasesInSwitch": true, 15 | "noUnusedLocals": true, 16 | "noUnusedParameters": true, 17 | "strict": true, 18 | "removeComments": true, 19 | "pretty": true, 20 | "strictPropertyInitialization": true, 21 | "lib": [ 22 | "es5", 23 | "es6", 24 | "scripthost" 25 | ], 26 | "typeRoots": [ 27 | "./node_modules/miniprogram-api-typings" 28 | ] 29 | }, 30 | "include": [ 31 | "./**/*.ts" 32 | ], 33 | "exclude": [ 34 | "node_modules" 35 | ] 36 | } 37 | --------------------------------------------------------------------------------