[
  {
    "path": ".editorconfig",
    "content": "[*]\n#缩进风格：空格\nindent_style = tab\n#缩进大小2\nindent_size = 4\n#换行符lf\nend_of_line = lf\n#字符集utf-8\ncharset = utf-8\n\n\n"
  },
  {
    "path": ".eslintignore",
    "content": "unpackage\nnode_modules\nuview-ui\n"
  },
  {
    "path": ".gitee/ISSUE_TEMPLATE.zh-CN.md",
    "content": "你好，请使用下面的链接创建 issue 以帮助我们更快的排查问题，不规范的 issue 会被关闭，感谢配合。\n\nhttps://new-issue.uviewui.com/\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\ncontact_links:\n    - name: 创建一个新issue\n      url: https://new-issue.uviewui.com/\n      about: 请使用接下来的链接创建新issue。\n    - name: Create new issue\n      url: https://new-issue.uviewui.com/?lang=en\n      about: Please use the following link to create a new issue.\n"
  },
  {
    "path": ".gitignore",
    "content": "/unpackage/dist/*\n/node_modules/*\n/.idea/*\ndeploy.sh\n.hbuilderx/\n\ndeploy\n.DS_Store"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n\t\"editor.formatOnSave\": false\n}\n"
  },
  {
    "path": "App.vue",
    "content": "<script>\n\texport default {\n\t\t// 此处globalData为了演示其作用，不是uView框架的一部分\n\t\tglobalData: {\n\t\t\tusername: '白居易'\n\t\t},\n\t\tonLaunch() {\n\t\t\t// 1.1.0版本之前关于http拦截器代码，已平滑移动到/common/http.interceptor.js中\n\t\t\t// 注意，需要在/main.js中实例化Vue之后引入如下(详见文档说明)：\n\t\t\t// import httpInterceptor from '@/common/http.interceptor.js'\n\t\t\t// Vue.use(httpInterceptor, app)\n\t\t\t// process.env.VUE_APP_PLATFORM 为通过js判断平台名称的方法，结果分别如下：\n\t\t\t/**\n\t\t\t * h5，app-plus(nvue下也为app-plus)，mp-weixin，mp-alipay......\n\t\t\t */\n\t\t},\n\t}\n</script>\n\n<style lang=\"scss\">\n\t@import \"uview-ui/index.scss\";\n\t@import \"common/demo.scss\";\n</style>"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2023 www.uviewui.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\">\n    <img alt=\"logo\" src=\"https://uviewui.com/common/logo.png\" width=\"120\" height=\"120\" style=\"margin-bottom: 10px;\">\n</p>\n<h3 align=\"center\" style=\"margin: 30px 0 30px;font-weight: bold;font-size:40px;\">uView</h3>\n<h3 align=\"center\">多平台快速开发的UI框架</h3>\n\n[![star](https://gitee.com/umicro/uView/badge/star.svg?theme=gvp)](https://gitee.com/umicro/uView/stargazers)\n[![fork](https://gitee.com/umicro/uView/badge/fork.svg?theme=gvp)](https://gitee.com/umicro/uView/members)\n[![stars](https://img.shields.io/github/stars/YanxinNet/uView?style=flat-square&logo=GitHub)](https://github.com/umicro/uView)\n[![forks](https://img.shields.io/github/forks/YanxinNet/uView?style=flat-square&logo=GitHub)](https://github.com/umicro/uView)\n[![issues](https://img.shields.io/github/issues/YanxinNet/uView?style=flat-square&logo=GitHub)](https://github.com/umicro/uView/issues)\n[![Website](https://img.shields.io/badge/uView-up-blue?style=flat-square)](https://uviewui.com)\n[![release](https://img.shields.io/github/v/release/YanxinNet/uView?style=flat-square)](https://gitee.com/umicro/uView/releases)\n[![license](https://img.shields.io/github/license/YanxinNet/uView?style=flat-square)](https://en.wikipedia.org/wiki/MIT_License)\n\n## 说明\n\nuView UI，是[uni-app](https://uniapp.dcloud.io/)生态优秀的UI框架，全面的组件和便捷的工具会让您信手拈来，如鱼得水\n\n## [官方文档：https://v1.uviewui.com](https://v1.uviewui.com)\n\n### 官方1群：1042987248（已满）\n### 官方2群：249718512（已满）\n### 官方3群：1129077272（已满）\n### 官方4群：1084514613（已满）\n### 官方5群：863820668（已满）\n### 官方6群：745721078（已满）\n### 官方7群：627867855（已满）\n### 官方8群：496409492（已满）\n### 官方9群：828504448（已满）\n### [点击加10群交流反馈：232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU)\n\n## 特性\n\n- 兼容安卓，iOS，微信小程序，H5，QQ小程序，百度小程序，支付宝小程序，头条小程序\n- 60+精选组件，功能丰富，多端兼容，让您快速集成，开箱即用\n- 众多贴心的JS利器，让您飞镖在手，召之即来，百步穿杨\n- 众多的常用页面和布局，让您专注逻辑，事半功倍\n- 详尽的文档支持，现代化的演示效果\n- 按需引入，精简打包体积\n\n\n## 预览\n\n您可以通过**微信**扫码，查看最佳的演示效果。\n<br>\n<br>\n<img src=\"https://uviewui.com/common/weixin_mini_qrcode.png\" width=\"220\" height=\"220\" >\n\n\n## 友情链接\n\n#### **vue-admin-beautiful** —— [企业级、通用型中后台前端解决方案（基于vue/cli 4 最新版，同时支持电脑，手机，平板）](https://github.com/chuzhixin/vue-admin-beautiful)\n\n#### **vue-admin-beautiful** —— [在线演示](http://beautiful.panm.cn/vue-admin-beautiful/#/index)\n\n#### **pl-table** —— [ 完美解决 element 万级表格数据渲染卡顿问题](https://github.com/livelyPeng/pl-table)\n\n#### **luch-request** —— [基于 Promise 开发的 uni-app 跨平台、项目级别的请求库，它有更小的体积，易用的 api，方便简单的自定义能力](https://www.quanzhan.co/luch-request/)\n<br>\n\n## 链接\n\n- [官方文档](https://v1.uviewui.com/)\n- [更新日志](https://v1.uviewui.com/components/changelog.html)\n- [升级指南](https://v1.uviewui.com/components/changelog.html)\n- [关于我们](https://v1.uviewui.com/cooperation/about.html)\n\n## 交流反馈\n\n欢迎加入我们的QQ群交流反馈：[点此跳转](https://www.uviewui.com/components/addQQGroup.html)\n\n## 关于PR\n\n> 我们非常乐意接受各位的优质PR，但在此之前我希望您了解uView2.0是一个需要兼容多个平台的（小程序、h5、ios app、android app）包括nvue页面、vue页面。\n> 所以希望在您修复bug并提交之前尽可能的去这些平台测试一下兼容性。最好能携带测试截图以方便审核。非常感谢！\n\n## 安装\n\n#### **下载地址** —— [https://ext.dcloud.net.cn/plugin?id=1593](https://ext.dcloud.net.cn/plugin?id=1593)\n\n## 快速上手\n\n1. `main.js`引入uView库\n```js\n// main.js\nimport uView from 'uview-ui';\nVue.use(uView);\n```\n\n2. `App.vue`引入基础样式(注意style标签需声明scss属性支持)\n```css\n/* App.vue */\n<style lang=\"scss\">\n@import \"uview-ui/index.scss\";\n</style>\n```\n\n3. `uni.scss`引入全局scss变量文件\n```css\n/* uni.scss */\n@import \"uview-ui/theme.scss\";\n```\n\n4. `pages.json`配置easycom规则(按需引入)\n\n```js\n// pages.json\n{\n\t\"easycom\": {\n\t\t// 下载安装的方式需要前面的\"@/\"，npm安装的方式无需\"@/\"\n\t\t// 下载安装方式\n\t\t\"^u-(.*)\": \"@/uview-ui/components/u-$1/u-$1.vue\"\n\t\t// npm安装方式\n\t\t// \"^u-(.*)\": \"uview-ui/components/u-$1/u-$1.vue\"\n\t},\n\t// 此为本身已有的内容\n\t\"pages\": [\n\t\t// ......\n\t]\n}\n```\n\n请通过[快速上手](https://uviewui.com/components/quickstart.html)了解更详细的内容\n\n## 使用方法\n配置easycom规则后，自动按需引入，无需`import`组件，直接引用即可。\n\n```html\n<template>\n\t<u-button>按钮</u-button>\n</template>\n```\n\n请通过[快速上手](https://uviewui.com/components/quickstart.html)了解更详细的内容\n\n\n## 捐赠uView的研发\n\nuView文档内容和框架源码全部开源免费，如果您认为uView帮到了您的开发工作，您可以捐赠uView的研发工作，捐赠无门槛，哪怕是一杯可乐也好(相信这比打赏主播更有意义)。\n\n<img src=\"https://uviewui.com/common/wechat.png\" width=\"220\" >\n<img style=\"margin-left: 100px;\" src=\"https://uviewui.com/common/alipay.png\" width=\"220\" >\n\n## 版权信息\nuView遵循[MIT](https://en.wikipedia.org/wiki/MIT_License)开源协议，意味着您无需支付任何费用，也无需授权，即可将uView应用到您的产品中。\n"
  },
  {
    "path": "common/classify.data.js",
    "content": "export default[\n   {\n      \"name\": \"女装\",\n      \"foods\": [\n          {\n            \"name\": \"A字裙\",\n            \"key\": \"A字裙\",\n            \"icon\": \"https://cdn.uviewui.com/uview/common/classify/1/1.jpg\",\n            \"cat\": 10\n          },\n          {\n            \"name\": \"T恤\",\n            \"key\": \"T恤\",\n            \"icon\": \"https://cdn.uviewui.com/uview/common/classify/1/2.jpg\",\n            \"cat\": 10\n          },\n          {\n            \"name\": \"半身裙\",\n            \"key\": \"半身裙\",\n            \"icon\": \"https://cdn.uviewui.com/uview/common/classify/1/3.jpg\",\n            \"cat\": 10\n          },\n          {\n            \"name\": \"衬衫\",\n            \"key\": \"衬衫\",\n            \"icon\": \"https://cdn.uviewui.com/uview/common/classify/1/4.jpg\",\n            \"cat\": 10\n          },\n          {\n            \"name\": \"短裙\",\n            \"key\": \"短裙\",\n            \"icon\": \"https://cdn.uviewui.com/uview/common/classify/1/5.jpg\",\n            \"cat\": 10\n          },\n          {\n            \"name\": \"阔腿裤\",\n            \"key\": \"阔腿裤\",\n            \"icon\": \"https://cdn.uviewui.com/uview/common/classify/1/6.jpg\",\n            \"cat\": 10\n          },\n          {\n            \"name\": \"连衣裙\",\n            \"key\": \"连衣裙\",\n            \"icon\": \"https://cdn.uviewui.com/uview/common/classify/1/7.jpg\",\n            \"cat\": 10\n          },\n          {\n            \"name\": \"妈妈装\",\n            \"key\": \"妈妈装\",\n            \"icon\": \"https://cdn.uviewui.com/uview/common/classify/1/8.jpg\",\n            \"cat\": 10\n          },\n          {\n            \"name\": \"牛仔裤\",\n            \"key\": \"牛仔裤\",\n            \"icon\": \"https://cdn.uviewui.com/uview/common/classify/1/9.jpg\",\n            \"cat\": 10\n          },\n          {\n            \"name\": \"情侣装\",\n            \"key\": \"情侣装\",\n            \"icon\": \"https://cdn.uviewui.com/uview/common/classify/1/10.jpg\",\n            \"cat\": 10\n          },\n          {\n            \"name\": \"休闲裤\",\n            \"key\": \"休闲裤\",\n            \"icon\": \"https://cdn.uviewui.com/uview/common/classify/1/11.jpg\",\n            \"cat\": 10\n          },\n          {\n            \"name\": \"雪纺衫\",\n            \"key\": \"雪纺衫\",\n            \"icon\": \"https://cdn.uviewui.com/uview/common/classify/1/12.jpg\",\n            \"cat\": 10\n          },\n          {\n            \"name\": \"防晒衣\",\n            \"key\": \"防晒衣\",\n            \"icon\": \"https://cdn.uviewui.com/uview/common/classify/1/13.jpg\",\n            \"cat\": 10\n          },\n          {\n            \"name\": \"礼服/婚纱\",\n            \"key\": \"礼服婚纱\",\n            \"icon\": \"https://cdn.uviewui.com/uview/common/classify/1/14.jpg\",\n            \"cat\": 10\n          }\n      ]\n   },\n   {\n    \"name\": \"美食\",\n    \"foods\": [\n        {\n          \"name\": \"火锅\",\n          \"key\": \"火锅\",\n          \"icon\": \"https://cdn.uviewui.com/uview/common/classify/2/1.jpg\",\n          \"cat\": 6\n        },\n        {\n          \"name\": \"糕点饼干\",\n          \"key\": \"糕点饼干\",\n          \"icon\": \"https://cdn.uviewui.com/uview/common/classify/2/2.jpg\",\n          \"cat\": 6\n        },\n        {\n          \"name\": \"坚果果干\",\n          \"key\": \"坚果果干\",\n          \"icon\": \"https://cdn.uviewui.com/uview/common/classify/2/3.jpg\",\n          \"cat\": 6\n        },\n        {\n          \"name\": \"酒类\",\n          \"key\": \"酒类\",\n          \"icon\": \"https://cdn.uviewui.com/uview/common/classify/2/4.jpg\",\n          \"cat\": 6\n        },\n        {\n          \"name\": \"辣条\",\n          \"key\": \"辣条\",\n          \"icon\": \"https://cdn.uviewui.com/uview/common/classify/2/5.jpg\",\n          \"cat\": 6\n        },\n        {\n          \"name\": \"大礼包\",\n          \"key\": \"大礼包\",\n          \"icon\": \"https://cdn.uviewui.com/uview/common/classify/2/6.jpg\",\n          \"cat\": 6\n        },\n        {\n          \"name\": \"精品茗茶\",\n          \"key\": \"茶\",\n          \"icon\": \"https://cdn.uviewui.com/uview/common/classify/2/7.jpg\",\n          \"cat\": 6\n        },\n        {\n          \"name\": \"休闲食品\",\n          \"key\": \"休闲食品\",\n          \"icon\": \"https://cdn.uviewui.com/uview/common/classify/2/8.jpg\",\n          \"cat\": 6\n        },\n        {\n          \"name\": \"糖果巧克力\",\n          \"key\": \"糖果巧克力\",\n          \"icon\": \"https://cdn.uviewui.com/uview/common/classify/2/9.jpg\",\n          \"cat\": 6\n        },\n        {\n          \"name\": \"方便速食\",\n          \"key\": \"方便速食\",\n          \"icon\": \"https://cdn.uviewui.com/uview/common/classify/2/10.jpg\",\n          \"cat\": 6\n        },\n        {\n          \"name\": \"营养代餐\",\n          \"key\": \"营养代餐\",\n          \"icon\": \"https://cdn.uviewui.com/uview/common/classify/2/11.jpg\",\n          \"cat\": 6\n        },\n        {\n          \"name\": \"粮油副食\",\n          \"key\": \"粮油\",\n          \"icon\": \"https://cdn.uviewui.com/uview/common/classify/2/12.jpg\",\n          \"cat\": 6\n        },\n        {\n          \"name\": \"生鲜水果\",\n          \"key\": \"水果\",\n          \"icon\": \"https://cdn.uviewui.com/uview/common/classify/2/13.jpg\",\n          \"cat\": 6\n        },\n        {\n          \"name\": \"饮品\",\n          \"key\": \"饮品\",\n          \"icon\": \"https://cdn.uviewui.com/uview/common/classify/2/14.jpg\",\n          \"cat\": 6\n        }\n        ]\n    },\n    {\n        \"name\": \"美妆\",\n        \"foods\": [\n            {\n                \"name\": \"化妆刷\",\n                \"key\": \"化妆刷\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/3/1.jpg\",\n                \"cat\": 3\n            },\n            {\n                \"name\": \"粉底\",\n                \"key\": \"粉底\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/3/2.jpg\",\n                \"cat\": 3\n            },\n            {\n                \"name\": \"洗发护发\",\n                \"key\": \"洗发护发\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/3/3.jpg\",\n                \"cat\": 3\n            },\n            {\n                \"name\": \"美容工具\",\n                \"key\": \"美容工具\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/3/4.jpg\",\n                \"cat\": 3\n            },\n            {\n                \"name\": \"眼部护理\",\n                \"key\": \"眼部护理\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/3/5.jpg\",\n                \"cat\": 3\n            },\n            {\n                \"name\": \"眉妆\",\n                \"key\": \"眉妆\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/3/6.jpg\",\n                \"cat\": 3\n            },\n            {\n                \"name\": \"卸妆品\",\n                \"key\": \"卸妆品\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/3/7.jpg\",\n                \"cat\": 3\n            },\n            {\n                \"name\": \"基础护肤\",\n                \"key\": \"基础护肤\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/3/8.jpg\",\n                \"cat\": 3\n            },\n            {\n                \"name\": \"眼妆\",\n                \"key\": \"眼妆\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/3/9.jpg\",\n                \"cat\": 3\n            },\n            {\n                \"name\": \"唇妆\",\n                \"key\": \"唇妆\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/3/10.jpg\",\n                \"cat\": 3\n            },\n            {\n                \"name\": \"面膜\",\n                \"key\": \"面膜\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/3/11.jpg\",\n                \"cat\": 3\n            },\n            {\n                \"name\": \"沐浴用品\",\n                \"key\": \"沐浴用品\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/3/12.jpg\",\n                \"cat\": 3\n            },\n            {\n                \"name\": \"护肤套装\",\n                \"key\": \"护肤套装\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/3/13.jpg\",\n                \"cat\": 3\n            },\n            {\n                \"name\": \"防晒品\",\n                \"key\": \"防晒品\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/3/14.jpg\",\n                \"cat\": 3\n            },\n            {\n                \"name\": \"美甲\",\n                \"key\": \"美甲\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/3/15.jpg\",\n                \"cat\": 3\n            }\n\n        ]\n    },\n    {\n        \"name\": \"居家日用\",\n        \"foods\": [\n            {\n              \"name\": \"垃圾袋\",\n              \"key\": \"垃圾袋\",\n              \"icon\": \"https://cdn.uviewui.com/uview/common/classify/4/1.jpg\",\n              \"cat\": 4\n            },\n            {\n                \"name\": \"纸巾\",\n                \"key\": \"纸巾\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/4/2.jpg\",\n                \"cat\": 4\n            },\n            {\n                \"name\": \"驱蚊用品\",\n                \"key\": \"驱蚊用品\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/4/3.jpg\",\n                \"cat\": 4\n            },\n            {\n                \"name\": \"收纳神器\",\n                \"key\": \"收纳神器\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/4/4.jpg\",\n                \"cat\": 4\n            },\n            {\n                \"name\": \"厨房用品\",\n                \"key\": \"厨房用品\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/4/5.jpg\",\n                \"cat\": 4\n            },\n            {\n                \"name\": \"厨房烹饪\",\n                \"key\": \"烹饪\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/4/6.jpg\",\n                \"cat\": 4\n            },\n            {\n                \"name\": \"衣物晾晒\",\n                \"key\": \"衣物晾晒\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/4/7.jpg\",\n                \"cat\": 4\n            },\n            {\n                \"name\": \"衣物护理\",\n                \"key\": \"衣物护理\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/4/8.jpg\",\n                \"cat\": 4\n            },\n            {\n                \"name\": \"宠物用品\",\n                \"key\": \"宠物用品\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/4/9.jpg\",\n                \"cat\": 4\n            },\n            {\n                \"name\": \"医药保健\",\n                \"key\": \"医药\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/4/10.jpg\",\n                \"cat\": 4\n            },\n            {\n                \"name\": \"日用百货\",\n                \"key\": \"百货\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/4/11.jpg\",\n                \"cat\": 4\n            },\n            {\n                \"name\": \"清洁用品\",\n                \"key\": \"清洁\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/4/12.jpg\",\n                \"cat\": 4\n            },\n            {\n                \"name\": \"绿植园艺\",\n                \"key\": \"绿植\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/4/13.jpg\",\n                \"cat\": 4\n            }\n        ]\n    },\n    {\n        \"name\": \"男装\",\n        \"foods\": [\n            {\n                \"name\": \"爸爸装\",\n                \"key\": \"爸爸装\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/5/1.jpg\",\n                \"cat\": 12\n            },\n            {\n                \"name\": \"牛仔裤\",\n                \"key\": \"牛仔裤\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/5/2.jpg\",\n                \"cat\": 12\n            },\n            {\n                \"name\": \"衬衫\",\n                \"key\": \"衬衫\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/5/3.jpg\",\n                \"cat\": 12\n            },\n            {\n                \"name\": \"休闲裤\",\n                \"key\": \"休闲裤\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/5/4.jpg\",\n                \"cat\": 12\n            },\n            {\n                \"name\": \"外套\",\n                \"key\": \"外套\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/5/5.jpg\",\n                \"cat\": 12\n            },\n            {\n                \"name\": \"T恤\",\n                \"key\": \"T恤\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/5/6.jpg\",\n                \"cat\": 12\n            },\n            {\n                \"name\": \"套装\",\n                \"key\": \"套装\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/5/7.jpg\",\n                \"cat\": 12\n            },\n            {\n                \"name\": \"运动裤\",\n                \"key\": \"运动裤\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/5/8.jpg\",\n                \"cat\": 12\n            },\n            {\n                \"name\": \"马甲/背心\",\n                \"key\": \"马甲背心\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/5/9.jpg\",\n                \"cat\": 12\n            },\n            {\n                \"name\": \"POLO衫\",\n                \"key\": \"POLO衫\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/5/10.jpg\",\n                \"cat\": 12\n            },\n            {\n                \"name\": \"商务装\",\n                \"key\": \"商务装\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/5/11.jpg\",\n                \"cat\": 12\n            }\n        ]\n    },\n    {\n        \"name\": \"鞋品\",\n        \"foods\": [\n            {\n                \"name\": \"单鞋\",\n                \"key\": \"单鞋\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/6/1.jpg\",\n                \"cat\": 5\n            },\n            {\n                \"name\": \"皮鞋\",\n                \"key\": \"皮鞋\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/6/2.jpg\",\n                \"cat\": 5\n            },\n            {\n                \"name\": \"帆布鞋\",\n                \"key\": \"帆布鞋\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/6/3.jpg\",\n                \"cat\": 5\n            },\n            {\n                \"name\": \"北京老布鞋\",\n                \"key\": \"北京老布鞋\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/6/4.jpg\",\n                \"cat\": 5\n            },\n            {\n                \"name\": \"运动鞋\",\n                \"key\": \"运动鞋\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/6/5.jpg\",\n                \"cat\": 5\n            },\n            {\n                \"name\": \"拖鞋\",\n                \"key\": \"拖鞋\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/6/6.jpg\",\n                \"cat\": 5\n            },\n            {\n                \"name\": \"凉鞋\",\n                \"key\": \"凉鞋\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/6/7.jpg\",\n                \"cat\": 5\n            },\n            {\n                \"name\": \"休闲鞋\",\n                \"key\": \"休闲鞋\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/6/8.jpg\",\n                \"cat\": 5\n            },\n            {\n                \"name\": \"高跟鞋\",\n                \"key\": \"高跟鞋\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/6/9.jpg\",\n                \"cat\": 5\n            },\n            {\n                \"name\": \"老人鞋\",\n                \"key\": \"老人鞋\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/6/10.jpg\",\n                \"cat\": 5\n            },\n            {\n                \"name\": \"懒人鞋\",\n                \"key\": \"懒人鞋\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/6/11.jpg\",\n                \"cat\": 5\n            }\n        ]\n    },\n    {\n        \"name\": \"数码家电\",\n        \"foods\": [\n            {\n                \"name\": \"数据线\",\n                \"key\": \"数据线\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/7/1.jpg\",\n                \"cat\": 8\n            },\n            {\n                \"name\": \"耳机\",\n                \"key\": \"耳机\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/7/2.jpg\",\n                \"cat\": 8\n            },\n            {\n                \"name\": \"生活家电\",\n                \"key\": \"家电\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/7/3.jpg\",\n                \"cat\": 8\n            },\n            {\n                \"name\": \"电风扇\",\n                \"key\": \"电风扇\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/7/4.jpg\",\n                \"cat\": 8\n            },\n            {\n                \"name\": \"电吹风\",\n                \"key\": \"电吹风\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/7/5.jpg\",\n                \"cat\": 8\n            },\n            {\n                \"name\": \"手机壳\",\n                \"key\": \"手机壳\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/7/6.jpg\",\n                \"cat\": 8\n            },\n            {\n                \"name\": \"榨汁机\",\n                \"key\": \"榨汁机\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/7/7.jpg\",\n                \"cat\": 8\n            },\n            {\n                \"name\": \"小家电\",\n                \"key\": \"小家电\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/7/8.jpg\",\n                \"cat\": 8\n            },\n            {\n                \"name\": \"数码电子\",\n                \"key\": \"数码\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/7/9.jpg\",\n                \"cat\": 8\n            },\n            {\n                \"name\": \"电饭锅\",\n                \"key\": \"电饭锅\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/7/10.jpg\",\n                \"cat\": 8\n            },\n            {\n                \"name\": \"手机支架\",\n                \"key\": \"手机支架\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/7/11.jpg\",\n                \"cat\": 8\n            },\n            {\n                \"name\": \"剃须刀\",\n                \"key\": \"剃须刀\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/7/12.jpg\",\n                \"cat\": 8\n            },\n            {\n                \"name\": \"充电宝\",\n                \"key\": \"充电宝\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/7/13.jpg\",\n                \"cat\": 8\n            },\n            {\n                \"name\": \"手机配件\",\n                \"key\": \"手机配件\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/7/14.jpg\",\n                \"cat\": 8\n            }\n        ]\n    },\n    {\n        \"name\": \"母婴\",\n        \"foods\": [\n            {\n              \"name\": \"婴童服饰\",\n              \"key\": \"衣服\",\n              \"icon\": \"https://cdn.uviewui.com/uview/common/classify/8/1.jpg\",\n              \"cat\": 2  \n            },\n            {\n                \"name\": \"玩具乐器\",\n                \"key\": \"玩具乐器\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/8/2.jpg\",\n                \"cat\": 2  \n            },\n            {\n                \"name\": \"尿不湿\",\n                \"key\": \"尿不湿\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/8/3.jpg\",\n                \"cat\": 2  \n            },\n            {\n                \"name\": \"安抚牙胶\",\n                \"key\": \"安抚牙胶\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/8/4.jpg\",\n                \"cat\": 2  \n            },\n            {\n                \"name\": \"奶瓶奶嘴\",\n                \"key\": \"奶瓶奶嘴\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/8/5.jpg\",\n                \"cat\": 2  \n            },\n            {\n                \"name\": \"孕妈用品\",\n                \"key\": \"孕妈用品\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/8/6.jpg\",\n                \"cat\": 2  \n            },\n            {\n                \"name\": \"宝宝用品\",\n                \"key\": \"宝宝用品\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/8/7.jpg\",\n                \"cat\": 2  \n            },\n            {\n                \"name\": \"婴童湿巾\",\n                \"key\": \"湿巾\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/8/8.jpg\",\n                \"cat\": 2  \n            },\n            {\n                \"name\": \"喂养洗护\",\n                \"key\": \"洗护\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/8/9.jpg\",\n                \"cat\": 2  \n            },\n            {\n                \"name\": \"婴童鞋靴\",\n                \"key\": \"童鞋\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/8/10.jpg\",\n                \"cat\": 2  \n            },\n            {\n                \"name\": \"口水巾\",\n                \"key\": \"口水巾\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/8/11.jpg\",\n                \"cat\": 2  \n            },\n            {\n                \"name\": \"营养辅食\",\n                \"key\": \"营养\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/8/12.jpg\",\n                \"cat\": 2  \n            },\n            {\n                \"name\": \"婴幼书籍\",\n                \"key\": \"书籍\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/8/13.jpg\",\n                \"cat\": 2  \n            },\n            {\n                \"name\": \"婴儿车\",\n                \"key\": \"婴儿车\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/8/14.jpg\",\n                \"cat\": 2  \n            }\n        ]\n    },\n    {\n        \"name\": \"箱包\",\n        \"foods\": [\n            {\n                \"name\": \"单肩包\",\n                \"key\": \"单肩包\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/9/1.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"斜挎包\",\n                \"key\": \"斜挎包\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/9/2.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"女包\",\n                \"key\": \"女包\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/9/3.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"男包\",\n                \"key\": \"男包\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/9/4.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"双肩包\",\n                \"key\": \"双肩包\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/9/5.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"小方包\",\n                \"key\": \"小方包\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/9/6.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"钱包\",\n                \"key\": \"钱包\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/9/7.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"旅行箱包\",\n                \"key\": \"旅行箱包\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/9/8.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"零钱包\",\n                \"key\": \"零钱包\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/9/9.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"手提包\",\n                \"key\": \"手提包\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/9/10.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"胸包\",\n                \"key\": \"胸包\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/9/11.jpg\",\n                \"cat\": 0\n            }\n        ]\n    },\n    {\n        \"name\": \"内衣\",\n        \"foods\": [\n            {\n                \"name\": \"袜子\",\n                \"key\": \"袜子\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/10/1.jpg\",\n                \"cat\": 11\n            },\n            {\n                \"name\": \"吊带背心\",\n                \"key\": \"吊带背心\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/10/2.jpg\",\n                \"cat\": 11\n            },\n            {\n                \"name\": \"抹胸\",\n                \"key\": \"抹胸\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/10/3.jpg\",\n                \"cat\": 11\n            },\n            {\n                \"name\": \"内裤\",\n                \"key\": \"内裤\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/10/4.jpg\",\n                \"cat\": 11\n            },\n            {\n                \"name\": \"文胸\",\n                \"key\": \"文胸\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/10/5.jpg\",\n                \"cat\": 11\n            },\n            {\n                \"name\": \"文胸套装\",\n                \"key\": \"文胸套装\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/10/6.jpg\",\n                \"cat\": 11\n            },\n            {\n                \"name\": \"打底塑身\",\n                \"key\": \"打底塑身\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/10/7.jpg\",\n                \"cat\": 11\n            },\n            {\n                \"name\": \"家居服\",\n                \"key\": \"家居服\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/10/8.jpg\",\n                \"cat\": 11\n            },\n            {\n                \"name\": \"船袜\",\n                \"key\": \"船袜\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/10/9.jpg\",\n                \"cat\": 11\n            },\n            {\n                \"name\": \"情侣睡衣\",\n                \"key\": \"情侣睡衣\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/10/10.jpg\",\n                \"cat\": 11\n            },\n            {\n                \"name\": \"丝袜\",\n                \"key\": \"丝袜\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/10/11.jpg\",\n                \"cat\": 11\n            }\n        ]\n    },\n    {\n        \"name\": \"文娱车品\",\n        \"foods\": [\n            {\n                \"name\": \"车市车品\",\n                \"key\": \"车市车品\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/11/1.jpg\",\n                \"cat\": 7\n            },\n            {\n                \"name\": \"办公文具\",\n                \"key\": \"办公文具\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/11/2.jpg\",\n                \"cat\": 7\n            },\n            {\n                \"name\": \"考试必备\",\n                \"key\": \"考试必备\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/11/3.jpg\",\n                \"cat\": 7\n            },\n            {\n                \"name\": \"笔记本\",\n                \"key\": \"笔记本\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/11/4.jpg\",\n                \"cat\": 7\n            },\n            {\n                \"name\": \"艺术礼品\",\n                \"key\": \"礼品\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/11/5.jpg\",\n                \"cat\": 7\n            },\n            {\n                \"name\": \"书写工具\",\n                \"key\": \"书写工具\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/11/6.jpg\",\n                \"cat\": 7\n            },\n            {\n                \"name\": \"车载电器\",\n                \"key\": \"车载电器\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/11/7.jpg\",\n                \"cat\": 7\n            },\n            {\n                \"name\": \"图书音像\",\n                \"key\": \"图书音像\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/11/8.jpg\",\n                \"cat\": 7\n            },\n            {\n                \"name\": \"画具画材\",\n                \"key\": \"画具画材\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/11/9.jpg\",\n                \"cat\": 7\n            }\n        ]\n    },\n    {\n        \"name\": \"配饰\",\n        \"foods\": [\n            {\n                \"name\": \"太阳镜\",\n                \"key\": \"太阳镜\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/12/1.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"皮带\",\n                \"key\": \"皮带\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/12/2.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"棒球帽\",\n                \"key\": \"棒球帽\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/12/3.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"手表\",\n                \"key\": \"手表\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/12/4.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"发饰\",\n                \"key\": \"发饰\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/12/5.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"项链\",\n                \"key\": \"项链\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/12/6.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"手饰\",\n                \"key\": \"手饰\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/12/7.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"耳环\",\n                \"key\": \"耳环\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/12/8.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"帽子丝巾\",\n                \"key\": \"帽子丝巾\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/12/9.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"眼镜墨镜\",\n                \"key\": \"眼镜墨镜\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/12/10.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"发带发箍\",\n                \"key\": \"发带发箍\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/12/11.jpg\",\n                \"cat\": 0\n            }\n        ]\n    },\n    {\n        \"name\": \"家装家纺\",\n        \"foods\": [\n            {\n                \"name\": \"家居饰品\",\n                \"key\": \"家居饰品\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/13/1.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"凉席\",\n                \"key\": \"凉席\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/13/2.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"背枕靠枕\",\n                \"key\": \"靠枕\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/13/3.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"床上用品\",\n                \"key\": \"床上用品\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/13/4.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"摆件\",\n                \"key\": \"摆件\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/13/5.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"四件套\",\n                \"key\": \"四件套\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/13/6.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"装饰品\",\n                \"key\": \"装饰品\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/13/7.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"卫浴用品\",\n                \"key\": \"卫浴\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/13/8.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"家居家装\",\n                \"key\": \"家具\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/13/9.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"蚊帐\",\n                \"key\": \"蚊帐\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/13/10.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"墙纸贴纸\",\n                \"key\": \"墙纸\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/13/11.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"空调被\",\n                \"key\": \"空调被\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/13/12.jpg\",\n                \"cat\": 0\n            }\n        ]\n    },\n    {\n        \"name\": \"户外运动\",\n        \"foods\": [\n            {\n                \"name\": \"游泳装备\",\n                \"key\": \"游泳\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/14/1.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"泳镜\",\n                \"key\": \"泳镜\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/14/2.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"户外装备\",\n                \"key\": \"户外\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/14/3.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"健身服饰\",\n                \"key\": \"健身\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/14/4.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"泳衣\",\n                \"key\": \"泳衣\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/14/5.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"瑜伽垫\",\n                \"key\": \"瑜伽垫\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/14/6.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"瑜伽用品\",\n                \"key\": \"瑜伽\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/14/7.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"健身装备\",\n                \"key\": \"健身\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/14/8.jpg\",\n                \"cat\": 0\n            },\n            {\n                \"name\": \"球迷用品\",\n                \"key\": \"球迷\",\n                \"icon\": \"https://cdn.uviewui.com/uview/common/classify/14/9.jpg\",\n                \"cat\": 0\n            }\n        ]\n    }\n]"
  },
  {
    "path": "common/demo.scss",
    "content": "/* #ifndef APP-NVUE */\nview,\ntext {\n\tbox-sizing: border-box;\n}\n/* #endif */\n\n/* start--演示页面使用的统一样式--start */\n.u-demo {\n\tpadding: 25px 20px;\n}\n\n.u-demo-wrap {\n\tborder-width: 1px;\n\tborder-color: #ddd;\n\tborder-style: dashed;\n\tbackground-color: rgb(250, 250, 250);\n\tpadding: 20px 10px;\n\tborder-radius: 3px;\n}\n\n.u-demo-area {\n\ttext-align: center;\n}\n\n.u-no-demo-here {\n\tcolor: $u-tips-color;\n\tfont-size: 13px;\n}\n\n.u-demo-result-line {\n\tborder-width: 1px;\n\tborder-color: #ddd;\n\tborder-style: dashed;\n\tpadding: 5px 20px;\n\tmargin-top: 30px;\n\tborder-radius: 5px;\n\tbackground-color: rgb(240, 240, 240);\n\tcolor: $u-content-color;\n\tfont-size: 16px;\n\t/* #ifndef APP-NVUE */\n\tword-break: break-word;\n\tdisplay: inline-block;\n\t/* #endif */\n\ttext-align: left;\n\t\n}\n\n.u-demo-title,\n.u-config-title {\n\ttext-align: center;\n\tfont-size: 16px;\n\tfont-weight: bold;\n\tmargin-bottom: 20px;\n}\n\n.u-config-item {\n\tmargin-top: 25px;\n}\n\n.u-config-title {\n\tmargin-top: 20px;\n\tpadding-bottom: 5px;\n}\n\n.u-item-title {\n\tposition: relative;\n\tfont-size: 15px;\n\tpadding-left: 8px;\n\tline-height: 1;\n\tmargin-bottom: 11px;\n}\n\n.u-item-title:after {\n\tposition: absolute;\n\twidth: 4px;\n\ttop: -1px;\n\theight: 16px;\n\t/* #ifndef APP-NVUE */\n\tcontent: '';\n\t/* #endif */\n\tleft: 0;\n\tborder-radius: 10px;\n\tbackground-color: $u-content-color;\n}\n/* end--演示页面使用的统一样式--end */\n"
  },
  {
    "path": "common/http.api.js",
    "content": "// 如果没有通过拦截器配置域名的话，可以在这里写上完整的URL(加上域名部分)\nlet hotSearchUrl = '/ebapi/store_api/hot_search';\nlet indexUrl = '/ebapi/public_api/index';\n\n// 此处第二个参数vm，就是我们在页面使用的this，你可以通过vm获取vuex等操作，更多内容详见uView对拦截器的介绍部分：\n// https://uviewui.com/js/http.html#%E4%BD%95%E8%B0%93%E8%AF%B7%E6%B1%82%E6%8B%A6%E6%88%AA%EF%BC%9F\nconst install = (Vue, vm) => {\n\t// 此处没有使用传入的params参数\n\tlet getSearch = (params = {}) => vm.$u.get(hotSearchUrl, {\n\t\tid: 2\n\t});\n\t\n\t// 此处使用了传入的params参数，一切自定义即可\n\tlet getInfo = (params = {}) => vm.$u.post(indexUrl, params);\n\t\n\t// 将各个定义的接口名称，统一放进对象挂载到vm.$u.api(因为vm就是this，也即this.$u.api)下\n\tvm.$u.api = {getSearch, getInfo};\n}\n\nexport default {\n\tinstall\n}"
  },
  {
    "path": "common/http.interceptor.js",
    "content": "// 这里的vm，就是我们在vue文件里面的this，所以我们能在这里获取vuex的变量，比如存放在里面的token\n// 同时，我们也可以在此使用getApp().globalData，如果你把token放在getApp().globalData的话，也是可以使用的\nconst install = (Vue, vm) => {\n\tVue.prototype.$u.http.setConfig({\n\t\tbaseUrl: 'https://api.youzixy.com',\n\t\t// 如果将此值设置为true，拦截回调中将会返回服务端返回的所有数据response，而不是response.data\n\t\t// 设置为true后，就需要在this.$u.http.interceptor.response进行多一次的判断，请打印查看具体值\n\t\t// originalData: true, \n\t\t// 设置自定义头部content-type\n\t\t// header: {\n\t\t// \t'content-type': 'xxx'\n\t\t// }\n\t});\n\t// 请求拦截，配置Token等参数\n\tVue.prototype.$u.http.interceptor.request = (config) => {\n\t\tconfig.header.Token = 'xxxxxx';\n\t\t\n\t\t// 方式一，存放在vuex的token，假设使用了uView封装的vuex方式，见：https://uviewui.com/components/globalVariable.html\n\t\t// config.header.token = vm.token;\n\t\t\n\t\t// 方式二，如果没有使用uView封装的vuex方法，那么需要使用$store.state获取\n\t\t// config.header.token = vm.$store.state.token;\n\t\t\n\t\t// 方式三，如果token放在了globalData，通过getApp().globalData获取\n\t\t// config.header.token = getApp().globalData.username;\n\t\t\n\t\t// 方式四，如果token放在了Storage本地存储中，拦截是每次请求都执行的，所以哪怕您重新登录修改了Storage，下一次的请求将会是最新值\n\t\t// const token = uni.getStorageSync('token');\n\t\t// config.header.token = token;\n\t\t\n\t\treturn config; \n\t}\n\t// 响应拦截，判断状态码是否通过\n\tVue.prototype.$u.http.interceptor.response = (res) => {\n\t\t// 如果把originalData设置为了true，这里得到将会是服务器返回的所有的原始数据\n\t\t// 判断可能变成了res.statueCode，或者res.data.code之类的，请打印查看结果\n\t\tif(res.code == 200) {\n\t\t\t// 如果把originalData设置为了true，这里return回什么，this.$u.post的then回调中就会得到什么\n\t\t\treturn res.data;  \n\t\t} else return false;\n\t}\n}\n\nexport default {\n\tinstall\n}"
  },
  {
    "path": "common/index.list.js",
    "content": "module.exports = {\n\tlist: [{\n\t\t\t\"letter\": \"A\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"阿拉斯加\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"阿拉斯加ABA13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"阿克苏\",\n\t\t\t\t\t\"mobile\": \"0551-4386721\",\n\t\t\t\t\t\"keyword\": \"阿克苏AKESU0551-4386721\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"阿拉善\",\n\t\t\t\t\t\"mobile\": \"4008009100\",\n\t\t\t\t\t\"keyword\": \"阿拉善ALASHAN4008009100\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"阿勒泰\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"阿勒泰ALETAI13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"阿里\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"阿里ALI13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"安阳\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"13588889999安阳ANYANG\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"B\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"白城\",\n\t\t\t\t\t\"mobile\": \"该主子没有留电话~\",\n\t\t\t\t\t\"keyword\": \"白城BAICHENG\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"白山\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"白山BAISHAN13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"白银\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"白银BAIYIN13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"保定\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"保定BAODING13588889999\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"C\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"沧州\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"沧州CANGZHOU13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"长春\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"长春CHANGCHUN13588889999\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"D\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"大理\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"大理DALI13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"大连\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"大连DALIAN13588889999\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"E\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"鄂尔多斯\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"鄂尔多斯EERDUOSI13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"恩施\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"恩施ENSHI13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"鄂州\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"鄂州EZHOU13588889999\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"F\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"防城港\",\n\t\t\t\t\t\"mobile\": \"该主子没有留电话~\",\n\t\t\t\t\t\"keyword\": \"防城港FANGCHENGGANG\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"抚顺\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"抚顺FUSHUN13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"阜新\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"阜新FUXIN13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"阜阳\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"阜阳FUYANG13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"抚州\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"抚州FUZHOU13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"福州\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"福州FUZHOU13588889999\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"G\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"甘南\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"甘南GANNAN13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"赣州\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"赣州GANZHOU13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"甘孜\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"甘孜GANZI13588889999\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"H\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"哈尔滨\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"哈尔滨HAERBIN13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"海北\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"海北HAIBEI13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"海东\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"海东HAIDONG13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"海口\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"海口HAIKOU13588889999\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"I\",\n\t\t\t\"data\": [{\n\t\t\t\t\"name\": \"ice\",\n\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\"keyword\": \"佳木斯JIAMUSI13588889999\"\n\t\t\t}]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"J\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"佳木斯\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"佳木斯JIAMUSI13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"吉安\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"吉安JIAN13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"江门\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"江门JIANGMEN13588889999\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"K\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"开封\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"开封KAIFENG13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"喀什\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"喀什KASHI13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"克拉玛依\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"克拉玛依KELAMAYI13588889999\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"L\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"来宾\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"来宾LAIBIN13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"兰州\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"兰州LANZHOU13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"拉萨\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"拉萨LASA13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"乐山\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"乐山LESHAN13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"凉山\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"凉山LIANGSHAN13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"连云港\",\n\t\t\t\t\t\"mobile\": \"13588889999\",\n\t\t\t\t\t\"keyword\": \"连云港LIANYUNGANG13588889999\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"聊城\",\n\t\t\t\t\t\"mobile\": \"18322223333\",\n\t\t\t\t\t\"keyword\": \"聊城LIAOCHENG18322223333\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"辽阳\",\n\t\t\t\t\t\"mobile\": \"18322223333\",\n\t\t\t\t\t\"keyword\": \"辽阳LIAOYANG18322223333\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"辽源\",\n\t\t\t\t\t\"mobile\": \"18322223333\",\n\t\t\t\t\t\"keyword\": \"辽源LIAOYUAN18322223333\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"丽江\",\n\t\t\t\t\t\"mobile\": \"18322223333\",\n\t\t\t\t\t\"keyword\": \"丽江LIJIANG18322223333\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"临沧\",\n\t\t\t\t\t\"mobile\": \"18322223333\",\n\t\t\t\t\t\"keyword\": \"临沧LINCANG18322223333\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"临汾\",\n\t\t\t\t\t\"mobile\": \"18322223333\",\n\t\t\t\t\t\"keyword\": \"临汾LINFEN18322223333\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"临夏\",\n\t\t\t\t\t\"mobile\": \"18322223333\",\n\t\t\t\t\t\"keyword\": \"临夏LINXIA18322223333\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"临沂\",\n\t\t\t\t\t\"mobile\": \"18322223333\",\n\t\t\t\t\t\"keyword\": \"临沂LINYI18322223333\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"林芝\",\n\t\t\t\t\t\"mobile\": \"18322223333\",\n\t\t\t\t\t\"keyword\": \"林芝LINZHI18322223333\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"丽水\",\n\t\t\t\t\t\"mobile\": \"18322223333\",\n\t\t\t\t\t\"keyword\": \"丽水LISHUI18322223333\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"M\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"眉山\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"眉山MEISHAN15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"梅州\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"梅州MEIZHOU15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"绵阳\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"绵阳MIANYANG15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"牡丹江\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"牡丹江MUDANJIANG15544448888\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"N\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"南昌\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"南昌NANCHANG15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"南充\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"南充NANCHONG15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"南京\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"南京NANJING15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"南宁\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"南宁NANNING15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"南平\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"南平NANPING15544448888\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"O\",\n\t\t\t\"data\": [{\n\t\t\t\t\"name\": \"欧阳\",\n\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\"keyword\": \"欧阳ouyang15544448888\"\n\t\t\t}]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"P\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"盘锦\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"盘锦PANJIN15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"攀枝花\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"攀枝花PANZHIHUA15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"平顶山\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"平顶山PINGDINGSHAN15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"平凉\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"平凉PINGLIANG15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"萍乡\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"萍乡PINGXIANG15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"普洱\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"普洱PUER15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"莆田\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"莆田PUTIAN15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"濮阳\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"濮阳PUYANG15544448888\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"Q\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"黔东南\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"黔东南QIANDONGNAN15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"黔南\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"黔南QIANNAN15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"黔西南\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"黔西南QIANXINAN15544448888\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"R\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"日喀则\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"日喀则RIKAZE15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"日照\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"日照RIZHAO15544448888\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"S\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"三门峡\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"三门峡SANMENXIA15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"三明\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"三明SANMING15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"三沙\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"三沙SANSHA15544448888\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"T\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"塔城\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"塔城TACHENG15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"漯河\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"漯河TAHE15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"泰安\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"泰安TAIAN15544448888\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"W\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"潍坊\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"潍坊WEIFANG15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"威海\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"威海WEIHAI15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"渭南\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"渭南WEINAN15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"文山\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"文山WENSHAN15544448888\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"X\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"厦门\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"厦门XIAMEN15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"西安\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"西安XIAN15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"湘潭\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"湘潭XIANGTAN15544448888\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"Y\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"雅安\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"雅安YAAN15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"延安\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"延安YANAN15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"延边\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"延边YANBIAN15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"盐城\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"盐城YANCHENG15544448888\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"Z\",\n\t\t\t\"data\": [{\n\t\t\t\t\t\"name\": \"枣庄\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"枣庄ZAOZHUANG15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"张家界\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"张家界ZHANGJIAJIE15544448888\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"张家口\",\n\t\t\t\t\t\"mobile\": \"15544448888\",\n\t\t\t\t\t\"keyword\": \"张家口ZHANGJIAKOU15544448888\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"letter\": \"#\",\n\t\t\t\"data\": [{\n\t\t\t\t\"name\": \"其他.\",\n\t\t\t\t\"mobile\": \"16666666666\",\n\t\t\t\t\"keyword\": \"echo16666666666\"\n\t\t\t}]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "common/locales/en.js",
    "content": "export default {\n\t// 可以以页面为单位来写，比如首页的内容，写在index字段，个人中心写在center，共同部分写在common部分\n\tcomponents: {\n\t\tdesc: 'Numerous components cover the various requirements of the development process, and the components are rich in functions and compatible with multiple terminals. Let you integrate quickly, out of the box'\n\t},\n\tjs: {\n\t\tdesc: 'Numerous intimate gadgets are a weapon that you can call upon during the development process, allowing you to dart in your hand and pierce the Yang with a hundred steps'\n\t},\n\ttemplate: {\n\t\tdesc: 'Collection of many commonly used pages and layouts, reducing the repetitive work of developers, allowing you to focus on logic and get twice the result with half the effort'\n\t},\n\tnav: {\n\t\tcomponents: 'Components',\n\t\tjs: 'JS',\n\t\ttemplate: 'Template'\n\t},\n\tcommon: {\n\t\tintro: 'UI framework for rapid development of multiple platforms',\n\t\ttitle: 'uView UI',\n\t},\n}"
  },
  {
    "path": "common/locales/zh.js",
    "content": "export default {\n\t// 可以以页面为单位来写，比如首页的内容，写在index字段，个人中心写在center，共同部分写在common部分\n\tcomponents: {\n\t\tdesc: '众多组件覆盖开发过程的各个需求，组件功能丰富，多端兼容。让你快速集成，开箱即用'\n\t},\n\tjs: {\n\t\tdesc: '众多的贴心小工具，是你开发过程中召之即来的利器，让你飞镖在手，百步穿杨'\n\t},\n\ttemplate: {\n\t\tdesc: '收集众多的常用页面和布局，减少开发者的重复工作，让你专注逻辑，事半功倍'\n\t},\n\tnav: {\n\t\tcomponents: '组件',\n\t\tjs: '工具',\n\t\ttemplate: '模板'\n\t},\n\tcommon: {\n\t\tintro: '多平台快速开发的UI框架',\n\t\ttitle: 'uView UI',\n\t},\n}"
  },
  {
    "path": "components/page-nav/page-nav.vue",
    "content": "<template>\n\t<view class=\"nav-wrap\">\n\t\t<view class=\"nav-title\">\n\t\t\t<image class=\"logo\" src=\"https://cdn.uviewui.com/uview/common/logo.png\" mode=\"widthFix\"></image>\n\t\t\t<view class=\"nav-info\">\n\t\t\t\t<view class=\"nav-title__text\">\n\t\t\t\t\t<text class=\"nav-info__title__text\">uView {{version}}</text>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"nav-slogan\">\n\t\t\t\t\t{{$t('common.intro')}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"nav-desc\">\n\t\t\t{{desc}}\n\t\t</view>\n\t\t<view class=\"lang\" @tap=\"switchLang\">\n\t\t\t<u-icon size=\"46\" color=\"warning\" :name=\"lang\"></u-icon>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tprops: {\n\t\tdesc: String,\n\t\ttitle: String,\n\t},\n\tcomputed: {\n\t\tlang() {\n\t\t\treturn this.$i18n.locale == 'zh' ? 'zh' : 'en';\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tversion: uni.$u.config.v\n\t\t}\n\t},\n\tmethods: {\n\t\tswitchLang() {\n\t\t\tthis.$i18n.locale = this.$i18n.locale == 'en' ? 'zh' : 'en';\n\t\t\tthis.vuex_tabbar[0].text = this.$t('nav.components')\n\t\t\tthis.vuex_tabbar[1].text = this.$t('nav.js')\n\t\t\tthis.vuex_tabbar[2].text = this.$t('nav.template')\n\t\t\tuni.setNavigationBarTitle({\n\t\t\t\ttitle: this.$t(this.title)\n\t\t\t});\n\t\t}\n\t}\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.nav-wrap {\n\tpadding: 15px;\n\tposition: relative;\n}\n\n.lang {\n\tposition: absolute;\n\ttop: 15px;\n\tright: 15px;\n}\n\n.nav-title {\n\t/* #ifndef APP-NVUE */\n\tdisplay: flex;\n\t/* #endif */\n\tflex-direction: row;\n\talign-items: center;\n}\n\n.nav-info {\n\tmargin-left: 15px;\n}\n\n.nav-title__text {\n\t/* #ifndef APP-NVUE */\n\tdisplay: flex;\n\t/* #endif */\n\tcolor: $u-main-color;\n\tfont-size: 25px;\n\tfont-weight: bold;\n}\n\n.logo {\n\twidth: 70px;\n\t/* #ifndef APP-NVUE */\n\theight: auto;\n\t/* #endif */\n}\n\n.nav-slogan {\n\tcolor: $u-tips-color;\n\tfont-size: 14px;\n}\n\n.nav-desc {\n\tmargin-top: 10px;\n\tfont-size: 14px;\n\tcolor: $u-content-color;\n}\n</style>\n"
  },
  {
    "path": "main.js",
    "content": "import Vue from 'vue';\nimport App from './App';\n\nVue.config.productionTip = false;\n\nApp.mpType = 'app';\n\n// 此处为演示Vue.prototype使用，非uView的功能部分\nVue.prototype.vuePrototype = '枣红';\n\n// 引入全局uView\nimport uView from 'uview-ui';\nVue.use(uView);\n\n// 此处为演示vuex使用，非uView的功能部分\nimport store from '@/store';\n\n// 引入uView提供的对vuex的简写法文件\nlet vuexStore = require('@/store/$u.mixin.js');\nVue.mixin(vuexStore);\n\n// 引入uView对小程序分享的mixin封装\nlet mpShare = require('uview-ui/libs/mixin/mpShare.js');\nVue.mixin(mpShare);\n\n// i18n部分的配置\n// 引入语言包，注意路径\nimport Chinese from '@/common/locales/zh.js';\nimport English from '@/common/locales/en.js';\n\n// VueI18n\nimport VueI18n from '@/common/vue-i18n.min.js';\n\n// VueI18n\nVue.use(VueI18n);\n\nconst i18n = new VueI18n({\n\t// 默认语言\n\tlocale: 'zh',\n\t// 引入语言文件\n\tmessages: {\n\t\t'zh': Chinese,\n\t\t'en': English,\n\t}\n});\n\n// 由于微信小程序的运行机制问题，需声明如下一行，H5和APP非必填\nVue.prototype._i18n = i18n;\n\nconst app = new Vue({\n\ti18n,\n\tstore,\n\t...App\n});\n\n// http拦截器，将此部分放在new Vue()和app.$mount()之间，才能App.vue中正常使用\nimport httpInterceptor from '@/common/http.interceptor.js';\nVue.use(httpInterceptor, app);\n\n// http接口API抽离，免于写url或者一些固定的参数\nimport httpApi from '@/common/http.api.js';\nVue.use(httpApi, app);\n\napp.$mount();\n"
  },
  {
    "path": "manifest.json",
    "content": "{\n    \"name\" : \"uView\",\n    \"appid\" : \"__UNI__6655525\",\n    \"description\" : \"多平台快速开发的UI框架\",\n    \"versionName\" : \"1.8.8\",\n    \"versionCode\" : \"100\",\n    \"transformPx\" : false,\n    \"app-plus\" : {\n        // APP-VUE分包，可提APP升启动速度，2.7.12开始支持，兼容微信小程序分包方案，默认关闭\n        \"optimization\" : {\n            \"subPackages\" : true\n        },\n        \"safearea\" : {\n            \"bottom\" : {\n                \"offset\" : \"none\"\n            }\n        },\n        \"splashscreen\" : {\n            \"alwaysShowBeforeRender\" : true,\n            \"waiting\" : true,\n            \"autoclose\" : true,\n            \"delay\" : 0\n        },\n        \"usingComponents\" : true,\n        \"nvueCompiler\" : \"uni-app\",\n        \"compilerVersion\" : 3,\n        \"modules\" : {},\n        \"distribute\" : {\n            \"android\" : {\n                \"permissions\" : [\n                    \"<uses-permission android:name=\\\"android.permission.CHANGE_NETWORK_STATE\\\"/>\",\n                    \"<uses-permission android:name=\\\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\\\"/>\",\n                    \"<uses-permission android:name=\\\"android.permission.READ_CONTACTS\\\"/>\",\n                    \"<uses-permission android:name=\\\"android.permission.VIBRATE\\\"/>\",\n                    \"<uses-permission android:name=\\\"android.permission.READ_LOGS\\\"/>\",\n                    \"<uses-permission android:name=\\\"android.permission.ACCESS_WIFI_STATE\\\"/>\",\n                    \"<uses-feature android:name=\\\"android.hardware.camera.autofocus\\\"/>\",\n                    \"<uses-permission android:name=\\\"android.permission.WRITE_CONTACTS\\\"/>\",\n                    \"<uses-permission android:name=\\\"android.permission.ACCESS_NETWORK_STATE\\\"/>\",\n                    \"<uses-permission android:name=\\\"android.permission.CAMERA\\\"/>\",\n                    \"<uses-permission android:name=\\\"android.permission.RECORD_AUDIO\\\"/>\",\n                    \"<uses-permission android:name=\\\"android.permission.GET_ACCOUNTS\\\"/>\",\n                    \"<uses-permission android:name=\\\"android.permission.MODIFY_AUDIO_SETTINGS\\\"/>\",\n                    \"<uses-permission android:name=\\\"android.permission.READ_PHONE_STATE\\\"/>\",\n                    \"<uses-permission android:name=\\\"android.permission.CHANGE_WIFI_STATE\\\"/>\",\n                    \"<uses-permission android:name=\\\"android.permission.WAKE_LOCK\\\"/>\",\n                    \"<uses-permission android:name=\\\"android.permission.CALL_PHONE\\\"/>\",\n                    \"<uses-permission android:name=\\\"android.permission.FLASHLIGHT\\\"/>\",\n                    \"<uses-permission android:name=\\\"android.permission.ACCESS_COARSE_LOCATION\\\"/>\",\n                    \"<uses-feature android:name=\\\"android.hardware.camera\\\"/>\",\n                    \"<uses-permission android:name=\\\"android.permission.ACCESS_FINE_LOCATION\\\"/>\",\n                    \"<uses-permission android:name=\\\"android.permission.WRITE_SETTINGS\\\"/>\"\n                ],\n                \"abiFilters\" : [ \"armeabi-v7a\", \"arm64-v8a\" ]\n            },\n            \"ios\" : {},\n            \"sdkConfigs\" : {\n                \"ad\" : {}\n            },\n            \"icons\" : {\n                \"android\" : {\n                    \"hdpi\" : \"unpackage/res/icons/72x72.png\",\n                    \"xhdpi\" : \"unpackage/res/icons/96x96.png\",\n                    \"xxhdpi\" : \"unpackage/res/icons/144x144.png\",\n                    \"xxxhdpi\" : \"unpackage/res/icons/192x192.png\"\n                },\n                \"ios\" : {\n                    \"appstore\" : \"unpackage/res/icons/1024x1024.png\",\n                    \"ipad\" : {\n                        \"app\" : \"unpackage/res/icons/76x76.png\",\n                        \"app@2x\" : \"unpackage/res/icons/152x152.png\",\n                        \"notification\" : \"unpackage/res/icons/20x20.png\",\n                        \"notification@2x\" : \"unpackage/res/icons/40x40.png\",\n                        \"proapp@2x\" : \"unpackage/res/icons/167x167.png\",\n                        \"settings\" : \"unpackage/res/icons/29x29.png\",\n                        \"settings@2x\" : \"unpackage/res/icons/58x58.png\",\n                        \"spotlight\" : \"unpackage/res/icons/40x40.png\",\n                        \"spotlight@2x\" : \"unpackage/res/icons/80x80.png\"\n                    },\n                    \"iphone\" : {\n                        \"app@2x\" : \"unpackage/res/icons/120x120.png\",\n                        \"app@3x\" : \"unpackage/res/icons/180x180.png\",\n                        \"notification@2x\" : \"unpackage/res/icons/40x40.png\",\n                        \"notification@3x\" : \"unpackage/res/icons/60x60.png\",\n                        \"settings@2x\" : \"unpackage/res/icons/58x58.png\",\n                        \"settings@3x\" : \"unpackage/res/icons/87x87.png\",\n                        \"spotlight@2x\" : \"unpackage/res/icons/80x80.png\",\n                        \"spotlight@3x\" : \"unpackage/res/icons/120x120.png\"\n                    }\n                }\n            }\n        }\n    },\n    \"quickapp\" : {},\n    \"mp-weixin\" : {\n        \"appid\" : \"\",\n        \"setting\" : {\n            \"urlCheck\" : true,\n            \"es6\" : false,\n            \"minified\" : true,\n            \"postcss\" : true\n        },\n        \"optimization\" : {\n            \"subPackages\" : true\n        },\n        \"usingComponents\" : true\n    },\n    \"mp-alipay\" : {\n        \"usingComponents\" : true,\n        \"component2\" : true\n    },\n    \"mp-qq\" : {\n        \"optimization\" : {\n            \"subPackages\" : true\n        },\n        \"appid\" : \"15646153\"\n    },\n    \"mp-baidu\" : {\n        \"usingComponents\" : true,\n        \"appid\" : \"17597421\"\n    },\n    \"mp-toutiao\" : {\n        \"usingComponents\" : true,\n        \"appid\" : \"\"\n    },\n    \"h5\" : {\n        \"template\" : \"template.h5.html\",\n        \"router\" : {\n            \"mode\" : \"hash\",\n            \"base\" : \"\"\n        },\n        \"optimization\" : {\n            \"treeShaking\" : {\n                \"enable\" : false\n            }\n        },\n        \"title\" : \"uView UI\"\n    }\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"uview1.0\",\n  \"version\": \"1.0.0\",\n  \"description\": \"<p align=\\\"center\\\">\\r     <img alt=\\\"logo\\\" src=\\\"https://uviewui.com/common/logo.png\\\" width=\\\"120\\\" height=\\\"120\\\" style=\\\"margin-bottom: 10px;\\\">\\r </p>\\r <h3 align=\\\"center\\\" style=\\\"margin: 30px 0 30px;font-weight: bold;font-size:40px;\\\">uView</h3>\\r <h3 align=\\\"center\\\">多平台快速开发的UI框架</h3>\",\n  \"main\": \"main.js\",\n  \"scripts\": {\n\t\"test\": \"echo \\\"Error: no test specified\\\" && exit 1\",\n\t\"deploy\": \"node deploy\",\n\t\"preinstall\": \"npx only-allow pnpm\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/YanxinNet/uView.git\"\n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"bugs\": {\n    \"url\": \"https://github.com/YanxinNet/uView/issues\"\n  },\n  \"homepage\": \"https://github.com/YanxinNet/uView#readme\",\n  \"dependencies\": {\n    \"vue-i18n\": \"^8.20.0\",\n\t\"anve-upload-upyun\": \"^1.0.8\"\n  }\n}\n"
  },
  {
    "path": "pages/componentsA/avatar/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-avatar \n\t\t\t\t\t:mode=\"mode\" \n\t\t\t\t\t:size=\"size\" \n\t\t\t\t\t:src=\"src\" \n\t\t\t\t\t:text=\"text\"\n\t\t\t\t\t:showLevel=\"showLevel\"\n\t\t\t\t\t:showSex=\"showSex\"\n\t\t\t\t\t:sexIcon=\"sexIcon\"\n\t\t\t\t\t:bgColor='bgColor'\n\t\t\t\t></u-avatar>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">模式选择</view>\n\t\t\t\t<u-subsection :list=\"['圆形', '圆角方形']\" @change=\"modeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">性别选择</view>\n\t\t\t\t<u-subsection :list=\"['男', '女', '不显示']\" @change=\"sexChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">等级</view>\n\t\t\t\t<u-subsection :list=\"['显示', '不显示']\" @change=\"levelChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义内容</view>\n\t\t\t\t<u-subsection current=\"0\" :list=\"['图片', '文字']\" @change=\"styleChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">尺寸</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['large', 'default', 'mini', 160]\" @change=\"sizeChange\"></u-subsection>\n\t\t\t</view> \n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tmode: 'circle',\n\t\t\t\tsrc: 'http://pic2.sc.chinaz.com/Files/pic/pic9/202002/hpic2119_s.jpg',\n\t\t\t\ttext: '', // 优先级比src高\n\t\t\t\tsize: '90',\n\t\t\t\tshowLevel: true,\n\t\t\t\tshowSex: true,\n\t\t\t\tsexIcon: 'man',\n\t\t\t\tbgColor: '#fcbd71'\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tmodeChange(index) {\n\t\t\t\tthis.mode = index == 0 ? 'circle' : 'square';\n\t\t\t},\n\t\t\tstyleChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.text = '';\n\t\t\t\t\tthis.src = 'http://pic2.sc.chinaz.com/Files/pic/pic9/202002/hpic2119_s.jpg';\n\t\t\t\t} else {\n\t\t\t\t\tthis.text = '无头像';\n\t\t\t\t}\n\t\t\t},\n\t\t\tsizeChange(index) {\n\t\t\t\tthis.size = index == 0 ? 'large' : index == 1 ? 'default' : index == 2 ? 'mini' : 160;\n\t\t\t},\n\t\t\tsexChange(index) {\n\t\t\t\tthis.showSex = true;\n\t\t\t\tif(index == 0) this.sexIcon = 'man';\n\t\t\t\tif(index == 1) this.sexIcon = 'woman';\n\t\t\t\tif(index == 2) this.showSex = false;\n\t\t\t},\n\t\t\tlevelChange(index) {\n\t\t\t\tthis.showLevel = !index;\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t\n</style>\n"
  },
  {
    "path": "pages/componentsA/avatarCropper/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<view class=\"u-avatar-wrap\">\n\t\t\t\t\t<image @tap=\"preAvatar\" class=\"u-avatar-demo\" v-if=\"avatar\" :src=\"avatar\" mode=\"aspectFill\"></image>\n\t\t\t\t</view>\n\t\t\t\t<u-button @click=\"chooseAvatar\">选择图片</u-button>\n\t\t\t</view>\n\t\t</view>\n\t\t<!-- <view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">生成图片质量</view>\n\t\t\t\t<u-subsection :current=\"1\" :list=\"['0.3', '0.7', '1']\" @change=\"qualityChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义参数</view>\n\t\t\t\t<u-subsection :current=\"1\" :list=\"['是', '否']\" @change=\"styleChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view> -->\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tavatar: 'https://cdn.uviewui.com/uview/common/logo.png',\n\t\t\t}\n\t\t},\n\t\tcreated() {\n\t\t\tuni.$on('uAvatarCropper', path => {\n\t\t\t\tthis.avatar = path;\n\t\t\t\t// 可以在此上传到服务端\n\t\t\t\t// uni.uploadFile({\n\t\t\t\t// \turl: 'http://192.168.100.17/index.php/index/index/upload',\n\t\t\t\t// \tfilePath: path,\n\t\t\t\t// \tname: 'file',\n\t\t\t\t// \tcomplete: (res) => {\n\t\t\t\t// \t\tconsole.log(res);\n\t\t\t\t// \t}\n\t\t\t\t// });\n\t\t\t})\n\t\t},\n\t\tmethods: {\n\t\t\tchooseAvatar() {\n\t\t\t\tthis.$u.route({\n\t\t\t\t\turl: '/uview-ui/components/u-avatar-cropper/u-avatar-cropper',\n\t\t\t\t\tparams: {\n\t\t\t\t\t\t// 输出图片宽度，高等于宽，单位px\n\t\t\t\t\t\tdestWidth: 300,\n\t\t\t\t\t\t// 裁剪框宽度，高等于宽，单位px\n\t\t\t\t\t\trectWidth: 200,\n\t\t\t\t\t\t// 输出的图片类型，如果'png'类型发现裁剪的图片太大，改成\"jpg\"即可\n\t\t\t\t\t\tfileType: 'jpg',\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\t\t\tqualityChange(index) {\n\t\t\t\tthis.quality = index == 0 ? 0.3 : index == 1 ? 0.7 : 1;\n\t\t\t},\n\t\t\tstyleChange(index) {\n\t\t\t\tif (index == 0) {\n\t\t\t\t\tthis.rectHeight = this.rectWidth = this.destHeight = this.destWidth = 200;\n\t\t\t\t\tthis.boundStyle = {\n\t\t\t\t\t\tlineWidth: 8,\n\t\t\t\t\t\tborderColor: this.$u.color['error'],\n\t\t\t\t\t\tmask: 'rgba(0, 0, 0, 0.8)'\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.rectHeight = this.rectWidth = this.destHeight = this.destWidth = 400;\n\t\t\t\t\tthis.boundStyle = {\n\t\t\t\t\t\tlineWidth: 4,\n\t\t\t\t\t\tborderColor: 'rgb(245, 245, 245)',\n\t\t\t\t\t\tmask: 'rgba(0, 0, 0, 0.35)'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 预览图片\n\t\t\tpreAvatar() {\n\t\t\t\twx.previewImage({\n\t\t\t\t\tcurrent: '', // 当前显示图片的 http 链接\n\t\t\t\t\turls: [this.avatar] // 需要预览的图片 http 链接列表\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.wrap {\n\t\tpadding: 24rpx;\n\t}\n\n\t.u-avatar-wrap {\n\t\toverflow: hidden;\n\t\tmargin-bottom: 20rpx;\n\t}\n\n\t.u-avatar-demo {\n\t\twidth: 150rpx;\n\t\theight: 150rpx;\n\t\tborder-radius: 100rpx;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsA/backTop/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-no-demo-here\">滚动页面即可在右下角看到返回顶部的按钮</view>\n\t\t\t</view>\n\t\t\t<u-back-top :scrollTop=\"scrollTop\" :mode=\"mode\"\n\t\t\t:bottom=\"bottom\" :right=\"right\" :top=\"top\" :icon=\"icon\" :custom-style=\"customStyle\"\n\t\t\t:icon-style=\"iconStyle\" :tips=\"tips\"\n\t\t\t>\n\t\t\t</u-back-top>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">模式</view>\n\t\t\t\t<u-subsection :list=\"['圆形', '方形']\" @change=\"modeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">组件位置</view>\n\t\t\t\t<u-subsection :list=\"['默认', '自定义']\" @change=\"positionChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">显示组件的滚动条距离</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['200', '400', '600']\" @change=\"scrollTopChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义样式</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"styleChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tscrollTop: 0,\n\t\t\t\tmode: 'circle',\n\t\t\t\tbottom: 200,\n\t\t\t\tright: 40,\n\t\t\t\ttop: 400,\n\t\t\t\ticon: 'arrow-upward',\n\t\t\t\ticonStyle: {\n\t\t\t\t\tcolor: '#909399',\n\t\t\t\t\tfontSize: '38rpx'\n\t\t\t\t},\n\t\t\t\tcustomStyle: {},\n\t\t\t\ttips: ''\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tmodeChange(index) {\n\t\t\t\tthis.mode = !index ? 'circle' : 'square';\n\t\t\t},\n\t\t\tpositionChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.bottom = 200;\n\t\t\t\t\tthis.right = 40;\n\t\t\t\t} else {\n\t\t\t\t\tthis.bottom = 400;\n\t\t\t\t\tthis.right = 80;\n\t\t\t\t}\n\t\t\t},\n\t\t\tscrollTopChange(index) {\n\t\t\t\tthis.top = [200, 400, 600][index];\n\t\t\t},\n\t\t\tstyleChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.icon = 'arrow-up';\n\t\t\t\t\tthis.iconStyle = {\n\t\t\t\t\t\tcolor: '#2979ff',\n\t\t\t\t\t\tfontSize: '34rpx'\n\t\t\t\t\t};\n\t\t\t\t\tthis.customStyle = {\n\t\t\t\t\t\tbackgroundColor: '#a0cfff',\n\t\t\t\t\t\tcolor: '#2979ff'\n\t\t\t\t\t};\n\t\t\t\t\tthis.tips = '顶部';\n\t\t\t\t} else {\n\t\t\t\t\tthis.icon = 'arrow-upward';\n\t\t\t\t\tthis.iconStyle = {\n\t\t\t\t\t\tcolor: '#909399',\n\t\t\t\t\t\tfontSize: '38rpx'\n\t\t\t\t\t};\n\t\t\t\t\tthis.customStyle = {};\n\t\t\t\t\tthis.tips = '';\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonPageScroll(e) {\n\t\t\tthis.scrollTop = e.scrollTop;\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {\n\t\theight: 200vh;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsA/calendar/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\" style=\"background-color: #FFFFFF;\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-calendar v-model=\"show\" ref=\"calendar\" @change=\"change\" :mode=\"mode\"\n\t\t\t\t\t:start-text=\"startText\" :end-text=\"endText\" :range-color=\"rangeColor\"\n\t\t\t\t\t:range-bg-color=\"rangeBgColor\" :active-bg-color=\"activeBgColor\" :btn-type=\"btnType\"\n\t\t\t\t>\n\t\t\t\t</u-calendar>\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t{{result}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">状态</view>\n\t\t\t\t<u-subsection :current=\"showBtnStatus\" :list=\"['显示', '隐藏']\" @change=\"showChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">模式</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['单个日期', '日期范围']\" @change=\"modeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义样式</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"styleChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tshow: false,\n\t\t\t\tmode: 'range',\n\t\t\t\tresult: \"请选择日期\",\n\t\t\t\tstartText: '开始',\n\t\t\t\tendText: '结束',\n\t\t\t\trangeColor: '#2979ff',\n\t\t\t\trangeBgColor: 'rgba(41,121,255,0.13)',\n\t\t\t\tactiveBgColor: '#2979ff',\n\t\t\t\tbtnType: 'primary',\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tshowBtnStatus() {\n\t\t\t\treturn this.show ? 0 : 1;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tshowChange(index) {\n\t\t\t\tthis.show = !index;\n\t\t\t},\n\t\t\tmodeChange(index) {\n\t\t\t\tthis.mode = index == 0 ? 'date' : 'range';\n\t\t\t\tthis.show = true;\n\t\t\t},\n\t\t\tstyleChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.startText = '住店';\n\t\t\t\t\tthis.endText = '离店';\n\t\t\t\t\tthis.activeBgColor = '#19be6b';\n\t\t\t\t\tthis.rangeColor = '#19be6b';\n\t\t\t\t\tthis.rangeBgColor = 'rgba(25,190,107, 0.13)';\n\t\t\t\t\tthis.btnType = 'success';\n\t\t\t\t} else {\n\t\t\t\t\tthis.startText = '开始';\n\t\t\t\t\tthis.endText = '结束';\n\t\t\t\t\tthis.activeBgColor = '#2979ff';\n\t\t\t\t\tthis.rangeColor = '#2979ff';\n\t\t\t\t\tthis.rangeBgColor = 'rgba(41,121,255,0.13)';\n\t\t\t\t\tthis.btnType = 'primary';\n\t\t\t\t}\n\t\t\t\tthis.show = true;\n\t\t\t},\n\t\t\tcustomChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.icon1 = 'map';\n\t\t\t\t\tthis.icon2 = 'photo';\n\t\t\t\t\tthis.arrow = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.icon1 = '';\n\t\t\t\t\tthis.icon2 = '';\n\t\t\t\t\tthis.arrow = false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttextareaChange(index) {\n\t\t\t\tthis.type = index == 0 ? 'textarea' : 'text';\n\t\t\t},\n\t\t\tchange(e) {\n\t\t\t\tif (this.mode == 'range') {\n\t\t\t\t\tthis.result = e.startDate + \" - \" + e.endDate;\n\t\t\t\t} else {\n\t\t\t\t\tthis.result = e.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {\n\t\t\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsA/empty/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-empty :mode=\"mode\">\n\t\t\t\t\t<u-button v-if=\"slot\" slot=\"bottom\" size=\"medium\">\n\t\t\t\t\t\tslot按钮\n\t\t\t\t\t</u-button>\n\t\t\t\t</u-empty>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">模式选择</view>\n\t\t\t\t<u-table>\n\t\t\t\t\t<u-tr class=\"u-tr\">\n\t\t\t\t\t\t<u-td class=\"u-td\">\n\t\t\t\t\t\t\t<u-button :hair-line=\"false\" size=\"mini\" @click=\"modeChange('car')\">购物车为空</u-button>\n\t\t\t\t\t\t</u-td>\n\t\t\t\t\t\t<u-td class=\"u-td\">\n\t\t\t\t\t\t\t<u-button :hair-line=\"false\" size=\"mini\" @click=\"modeChange('page')\">页面不存在</u-button>\n\t\t\t\t\t\t</u-td>\n\t\t\t\t\t\t<u-td class=\"u-td\">\n\t\t\t\t\t\t\t<u-button :hair-line=\"false\" size=\"mini\" @click=\"modeChange('search')\">没有搜索结果</u-button>\n\t\t\t\t\t\t</u-td>\n\t\t\t\t\t</u-tr>\n\t\t\t\t\t<u-tr class=\"u-tr\">\n\t\t\t\t\t\t<u-td class=\"u-td\">\n\t\t\t\t\t\t\t<u-button :hair-line=\"false\" size=\"mini\" @click=\"modeChange('address')\">没有收货地址</u-button>\n\t\t\t\t\t\t</u-td>\n\t\t\t\t\t\t<u-td class=\"u-td\">\n\t\t\t\t\t\t\t<u-button :hair-line=\"false\" size=\"mini\" @click=\"modeChange('wifi')\">没有WiFi</u-button>\n\t\t\t\t\t\t</u-td>\n\t\t\t\t\t\t<u-td class=\"u-td\">\n\t\t\t\t\t\t\t<u-button :hair-line=\"false\" size=\"mini\" @click=\"modeChange('order')\">订单为空</u-button>\n\t\t\t\t\t\t</u-td>\n\t\t\t\t\t</u-tr>\n\t\t\t\t\t<u-tr class=\"u-tr\">\n\t\t\t\t\t\t<u-td class=\"u-td\">\n\t\t\t\t\t\t\t<u-button :hair-line=\"false\" size=\"mini\" @click=\"modeChange('coupon')\">没有优惠券</u-button>\n\t\t\t\t\t\t</u-td>\n\t\t\t\t\t\t<u-td class=\"u-td\">\n\t\t\t\t\t\t\t<u-button :hair-line=\"false\" size=\"mini\" @click=\"modeChange('favor')\">没有收藏</u-button>\n\t\t\t\t\t\t</u-td>\n\t\t\t\t\t\t<u-td class=\"u-td\">\n\t\t\t\t\t\t\t<u-button :hair-line=\"false\" size=\"mini\" @click=\"modeChange('permission')\">无权限</u-button>\n\t\t\t\t\t\t</u-td>\n\t\t\t\t\t</u-tr>\n\t\t\t\t\t<u-tr class=\"u-tr\">\n\t\t\t\t\t\t<u-td class=\"u-td\">\n\t\t\t\t\t\t\t<u-button :hair-line=\"false\" size=\"mini\" @click=\"modeChange('history')\">无历史记录</u-button>\n\t\t\t\t\t\t</u-td>\n\t\t\t\t\t\t<u-td class=\"u-td\">\n\t\t\t\t\t\t\t<u-button :hair-line=\"false\" size=\"mini\" @click=\"modeChange('news')\">无新闻列表</u-button>\n\t\t\t\t\t\t</u-td>\n\t\t\t\t\t\t<u-td class=\"u-td\">\n\t\t\t\t\t\t\t<u-button :hair-line=\"false\" size=\"mini\" @click=\"modeChange('message')\">消息列表为空</u-button>\n\t\t\t\t\t\t</u-td>\n\t\t\t\t\t</u-tr>\n\t\t\t\t\t<u-tr class=\"u-tr\">\n\t\t\t\t\t\t<u-td class=\"u-td\">\n\t\t\t\t\t\t\t<u-button :hair-line=\"false\" size=\"mini\" @click=\"modeChange('list')\">列表为空</u-button>\n\t\t\t\t\t\t</u-td>\n\t\t\t\t\t\t<u-td class=\"u-td\">\n\t\t\t\t\t\t\t<u-button :hair-line=\"false\" size=\"mini\" @click=\"modeChange('data')\">数据为空</u-button>\n\t\t\t\t\t\t</u-td>\n\t\t\t\t\t\t<u-td class=\"u-td\">\n\t\t\t\t\t\t\t待扩展\n\t\t\t\t\t\t</u-td>\n\t\t\t\t\t</u-tr>\n\t\t\t\t</u-table>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">传入slot</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"slotChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tmode: 'data',\n\t\t\t\tslot: false\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tmodeChange(mode = 'data') {\n\t\t\t\tthis.mode = mode;\n\t\t\t},\n\t\t\tslotChange(index) {\n\t\t\t\tthis.slot = !index;\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo-area {\n\t\theight: 160px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t}\n\t\n\t.u-demo-area .u-empty {\n\t\tpadding-top: 0;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsA/field/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\" style=\"background-color: #FFFFFF;\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-field\n\t\t\t\t\tv-model=\"mobile\"\n\t\t\t\t\tlabel=\"手机号\"\n\t\t\t\t\t:error-message=\"errorMessage\"\n\t\t\t\t\tplaceholder=\"请填写手机号\"\n\t\t\t\t\t:required=\"required\"\n\t\t\t\t\t:icon=\"icon1\"\n\t\t\t\t\t:type=\"type\"\n\t\t\t\t>\n\t\t\t\t</u-field>\n\t\t\t\t<u-field\n\t\t\t\t\tv-model=\"code\"\n\t\t\t\t\tlabel=\"验证码\"\n\t\t\t\t\tplaceholder=\"请填写验证码\"\n\t\t\t\t\t:required=\"required\"\n\t\t\t\t\t:icon=\"icon2\"\n\t\t\t\t>\n\t\t\t\t\t<u-button v-if=\"showBtn\" slot=\"right\" size=\"mini\" type=\"success\">发送验证码</u-button>\n\t\t\t\t</u-field>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">右侧按钮</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"showBtnChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">显示错误信息</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"errorMessageChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">是否必填</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"requiredChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">显示左图标和右箭头</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"customChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">第一个输入框为textarea类型</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"textareaChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tmobile: '',\n\t\t\t\tcode: '',\n\t\t\t\terrorMessage: '',\n\t\t\t\trequired: false,\n\t\t\t\tplaceholderColor: this.$u.color['tipsColor'],\n\t\t\t\tarrow: false,\n\t\t\t\tshowBtn: false,\n\t\t\t\ticon1: '',\n\t\t\t\ticon2: '',\n\t\t\t\ttype: 'text',\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tshowBtnChange(index) {\n\t\t\t\tthis.showBtn = index == 0 ? true : false;\n\t\t\t},\n\t\t\terrorMessageChange(index) {\n\t\t\t\tthis.errorMessage = index == 0 ? '手机号有误' : false\n\t\t\t},\n\t\t\trequiredChange(index) {\n\t\t\t\tthis.required = index == 0 ? true : false;\n\t\t\t},\n\t\t\tcustomChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.icon1 = 'map';\n\t\t\t\t\tthis.icon2 = 'photo';\n\t\t\t\t\tthis.arrow = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.icon1 = '';\n\t\t\t\t\tthis.icon2 = '';\n\t\t\t\t\tthis.arrow = false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttextareaChange(index) {\n\t\t\t\tthis.type = index == 0 ? 'textarea' : 'text';\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {\n\t\t\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsA/form/index.vue",
    "content": "<template>\n\t<view class=\"wrap\">\n\t\t<u-form :model=\"model\" :rules=\"rules\" ref=\"uForm\" :errorType=\"errorType\">\n\t\t\t<u-form-item :leftIconStyle=\"{color: '#888', fontSize: '32rpx'}\" left-icon=\"account\" label-width=\"120\" :label-position=\"labelPosition\" label=\"姓名\" prop=\"name\">\n\t\t\t\t<u-input :border=\"border\" placeholder=\"请输入姓名\" v-model=\"model.name\" type=\"text\"></u-input>\n\t\t\t</u-form-item>\n\t\t\t<u-form-item :label-position=\"labelPosition\" label=\"性别\" prop=\"sex\">\n\t\t\t\t<u-input :border=\"border\" type=\"select\" :select-open=\"actionSheetShow\" v-model=\"model.sex\" placeholder=\"请选择性别\" @click=\"actionSheetShow = true\"></u-input>\n\t\t\t</u-form-item>\n\t\t\t<u-form-item :label-position=\"labelPosition\" label=\"简介\" prop=\"intro\">\n\t\t\t\t<u-input type=\"textarea\" :border=\"border\" placeholder=\"请填写简介\" v-model=\"model.intro\" />\n\t\t\t</u-form-item>\n\t\t\t<u-form-item :label-position=\"labelPosition\" label=\"密码\" prop=\"password\">\n\t\t\t\t<u-input :password-icon=\"true\" :border=\"border\" type=\"password\" v-model=\"model.password\" placeholder=\"请输入密码\"></u-input>\n\t\t\t</u-form-item>\n\t\t\t<u-form-item :label-position=\"labelPosition\" label=\"确认密码\" label-width=\"150\" prop=\"rePassword\">\n\t\t\t\t<u-input :border=\"border\" type=\"password\" v-model=\"model.rePassword\" placeholder=\"请确认密码\"></u-input>\n\t\t\t</u-form-item>\n\t\t\t<u-form-item :label-position=\"labelPosition\" label=\"水果品种\" label-width=\"150\" prop=\"likeFruit\">\n\t\t\t\t<u-checkbox-group @change=\"checkboxGroupChange\" :width=\"radioCheckWidth\" :wrap=\"radioCheckWrap\">\n\t\t\t\t\t<u-checkbox v-model=\"item.checked\" v-for=\"(item, index) in checkboxList\" :key=\"index\" :name=\"item.name\">{{ item.name }}</u-checkbox>\n\t\t\t\t</u-checkbox-group>\n\t\t\t</u-form-item>\n\t\t\t<u-form-item :label-position=\"labelPosition\" label=\"结算方式\" prop=\"payType\" label-width=\"150\">\n\t\t\t\t<u-radio-group v-model=\"radio\" @change=\"radioGroupChange\" :width=\"radioCheckWidth\" :wrap=\"radioCheckWrap\">\n\t\t\t\t\t<u-radio shape=\"circle\" v-for=\"(item, index) in radioList\" :key=\"index\" :name=\"item.name\">{{ item.name }}</u-radio>\n\t\t\t\t</u-radio-group>\n\t\t\t</u-form-item>\n\t\t\t<u-form-item :label-position=\"labelPosition\" label=\"所在地区\" prop=\"region\" label-width=\"150\">\n\t\t\t\t<u-input :border=\"border\" type=\"select\" :select-open=\"pickerShow\" v-model=\"model.region\" placeholder=\"请选择地区\" @click=\"pickerShow = true\"></u-input>\n\t\t\t</u-form-item>\n\t\t\t<u-form-item :label-position=\"labelPosition\" label=\"商品类型\" prop=\"goodsType\" label-width=\"150\">\n\t\t\t\t<u-input :border=\"border\" type=\"select\" :select-open=\"selectShow\" v-model=\"model.goodsType\" placeholder=\"请选择商品类型\" @click=\"selectShow = true\"></u-input>\n\t\t\t</u-form-item>\n\t\t\t<u-form-item :rightIconStyle=\"{color: '#888', fontSize: '32rpx'}\" right-icon=\"kefu-ermai\" :label-position=\"labelPosition\" label=\"手机号码\" prop=\"phone\" label-width=\"150\">\n\t\t\t\t<u-input :border=\"border\" placeholder=\"请输入手机号\" v-model=\"model.phone\" type=\"number\"></u-input>\n\t\t\t</u-form-item>\n\t\t\t<u-form-item :label-position=\"labelPosition\" label=\"验证码\" prop=\"code\" label-width=\"150\">\n\t\t\t\t<u-input :border=\"border\" placeholder=\"请输入验证码\" v-model=\"model.code\" type=\"text\"></u-input>\n\t\t\t\t<u-button slot=\"right\" type=\"success\" size=\"mini\" @click=\"getCode\">{{codeTips}}</u-button>\n\t\t\t</u-form-item>\n\t\t\t<!-- 此处switch的slot为right，如果不填写slot名，也即<u-switch v-model=\"model.remember\"></u-switch>，将会左对齐 -->\n\t\t\t<u-form-item :label-position=\"labelPosition\" label=\"记住密码\" prop=\"remember\" label-width=\"150\">\n\t\t\t\t<u-switch v-model=\"model.remember\" slot=\"right\"></u-switch>\n\t\t\t</u-form-item>\n\t\t\t<u-form-item :label-position=\"labelPosition\" label=\"上传图片\" prop=\"photo\" label-width=\"150\">\n\t\t\t\t<u-upload width=\"160\" height=\"160\"></u-upload>\n\t\t\t</u-form-item>\n\t\t</u-form>\n\t\t<view class=\"agreement\">\n\t\t\t<u-checkbox v-model=\"check\" @change=\"checkboxChange\"></u-checkbox>\n\t\t\t<view class=\"agreement-text\">\n\t\t\t\t勾选代表同意uView的版权协议\n\t\t\t</view>\n\t\t</view>\n\t\t<u-button @click=\"submit\">提交</u-button>\n\t\t<u-action-sheet :list=\"actionSheetList\" v-model=\"actionSheetShow\" @click=\"actionSheetCallback\"></u-action-sheet>\n\t\t<u-select mode=\"single-column\" :list=\"selectList\" v-model=\"selectShow\" @confirm=\"selectConfirm\"></u-select>\n\t\t<u-picker mode=\"region\" v-model=\"pickerShow\" @confirm=\"regionConfirm\"></u-picker>\n\t\t<u-verification-code seconds=\"60\" ref=\"uCode\" @change=\"codeChange\"></u-verification-code>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">label对齐方式</view>\n\t\t\t\t<u-subsection :list=\"['左边', '上方']\" @change=\"labelPositionChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">边框</view>\n\t\t\t\t<u-subsection :current=\"borderCurrent\" :list=\"['显示', '隐藏']\" @change=\"borderChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">radio、checkbox样式</view>\n\t\t\t\t<u-subsection :list=\"['自适应', '换行', '50%宽度']\" @change=\"radioCheckboxChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">错误提示方式</view>\n\t\t\t\t<u-subsection :list=\"['message', 'toast', '下划线', '输入框']\" @change=\"errorChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\tlet that = this;\n\t\treturn {\n\t\t\tmodel: {\n\t\t\t\tname: '',\n\t\t\t\tsex: '',\n\t\t\t\tlikeFruit: '',\n\t\t\t\tintro: '',\n\t\t\t\tpayType: '支付宝',\n\t\t\t\tagreement: false,\n\t\t\t\tregion: '',\n\t\t\t\tgoodsType: '',\n\t\t\t\tphone: '',\n\t\t\t\tcode: '',\n\t\t\t\tpassword: '',\n\t\t\t\trePassword: '',\n\t\t\t\tremember: false,\n\t\t\t\tphoto: ''\n\t\t\t},\n\t\t\tselectList: [\n\t\t\t\t{\n\t\t\t\t\tvalue: '电子产品',\n\t\t\t\t\tlabel: '电子产品'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: '服装',\n\t\t\t\t\tlabel: '服装'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: '工艺品',\n\t\t\t\t\tlabel: '工艺品'\n\t\t\t\t}\n\t\t\t],\n\t\t\trules: {\n\t\t\t\tname: [\n\t\t\t\t\t{\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tmessage: '请输入姓名',\n\t\t\t\t\t\ttrigger: 'blur' ,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tmin: 3,\n\t\t\t\t\t\tmax: 5,\n\t\t\t\t\t\tmessage: '姓名长度在3到5个字符',\n\t\t\t\t\t\ttrigger: ['change','blur'],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t// 此为同步验证，可以直接返回true或者false，如果是异步验证，稍微不同，见下方说明\n\t\t\t\t\t\tvalidator: (rule, value, callback) => {\n\t\t\t\t\t\t\t// 调用uView自带的js验证规则，详见：https://www.uviewui.com/js/test.html\n\t\t\t\t\t\t\treturn this.$u.test.chinese(value);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmessage: '姓名必须为中文',\n\t\t\t\t\t\t// 触发器可以同时用blur和change，二者之间用英文逗号隔开\n\t\t\t\t\t\ttrigger: ['change','blur'],\n\t\t\t\t\t},\n\t\t\t\t\t// 异步验证，用途：比如用户注册时输入完账号，后端检查账号是否已存在\n\t\t\t\t\t// {\n\t\t\t\t\t// \ttrigger: ['blur'],\n\t\t\t\t\t// \t// 异步验证需要通过调用callback()，并且在里面抛出new Error()\n\t\t\t\t\t// \t// 抛出的内容为需要提示的信息，和其他方式的message属性的提示一样\n\t\t\t\t\t// \tasyncValidator: (rule, value, callback) => {\n\t\t\t\t\t// \t\tthis.$u.post('/ebapi/public_api/index').then(res => {\n\t\t\t\t\t// \t\t\t// 如果验证出错，需要在callback()抛出new Error('错误提示信息')\n\t\t\t\t\t// \t\t\tif(res.error) {\n\t\t\t\t\t// \t\t\t\tcallback(new Error('姓名重复'));\n\t\t\t\t\t// \t\t\t} else {\n\t\t\t\t\t// \t\t\t\t// 如果没有错误，也要执行callback()回调\n\t\t\t\t\t// \t\t\t\tcallback();\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t})\n\t\t\t\t\t// \t},\n\t\t\t\t\t// }\n\t\t\t\t],\n\t\t\t\tsex: [\n\t\t\t\t\t{\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tmessage: '请选择性别',\n\t\t\t\t\t\ttrigger: 'change'\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tintro: [\n\t\t\t\t\t{\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tmessage: '请填写简介'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tmin: 5,\n\t\t\t\t\t\tmessage: '简介不能少于5个字',\n\t\t\t\t\t\ttrigger: 'change' ,\n\t\t\t\t\t},\n\t\t\t\t\t// 正则校验示例，此处用正则校验是否中文，此处仅为示例，因为uView有this.$u.test.chinese可以判断是否中文\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: /^[\\u4e00-\\u9fa5]+$/gi,\n\t\t\t\t\t\tmessage: '简介只能为中文',\n\t\t\t\t\t\ttrigger: 'change',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tlikeFruit: [\n\t\t\t\t\t{\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tmessage: '请选择您喜欢的水果',\n\t\t\t\t\t\ttrigger: 'change',\n\t\t\t\t\t\ttype: 'array',\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tpayType: [\n\t\t\t\t\t{\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tmessage: '请选择任意一种支付方式',\n\t\t\t\t\t\ttrigger: 'change',\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tregion: [\n\t\t\t\t\t{\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tmessage: '请选择地区',\n\t\t\t\t\t\ttrigger: 'change',\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tgoodsType: [\n\t\t\t\t\t{\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tmessage: '请选择商品类型',\n\t\t\t\t\t\ttrigger: 'change',\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tphone: [\n\t\t\t\t\t{\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tmessage: '请输入手机号',\n\t\t\t\t\t\ttrigger: ['change','blur'],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalidator: (rule, value, callback) => {\n\t\t\t\t\t\t\t// 调用uView自带的js验证规则，详见：https://www.uviewui.com/js/test.html\n\t\t\t\t\t\t\treturn this.$u.test.mobile(value);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmessage: '手机号码不正确',\n\t\t\t\t\t\t// 触发器可以同时用blur和change，二者之间用英文逗号隔开\n\t\t\t\t\t\ttrigger: ['change','blur'],\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tcode: [\n\t\t\t\t\t{\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tmessage: '请输入验证码',\n\t\t\t\t\t\ttrigger: ['change','blur'],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\tmessage: '验证码只能为数字',\n\t\t\t\t\t\ttrigger: ['change','blur'],\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tpassword: [\n\t\t\t\t\t{\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tmessage: '请输入密码',\n\t\t\t\t\t\ttrigger: ['change','blur'],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t// 正则不能含有两边的引号\n\t\t\t\t\t\tpattern: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]+\\S{5,12}$/,\n\t\t\t\t\t\tmessage: '需同时含有字母和数字，长度在6-12之间',\n\t\t\t\t\t\ttrigger: ['change','blur'],\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\trePassword: [\n\t\t\t\t\t{\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tmessage: '请重新输入密码',\n\t\t\t\t\t\ttrigger: ['change','blur'],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalidator: (rule, value, callback) => {\n\t\t\t\t\t\t\treturn value === this.model.password;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmessage: '两次输入的密码不相等',\n\t\t\t\t\t\ttrigger: ['change','blur'],\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t},\n\t\t\tborder: false,\n\t\t\tcheck: false,\n\t\t\tselectStatus: 'close',\n\t\t\tcheckboxList: [\n\t\t\t\t{\n\t\t\t\t\tname: '荔枝',\n\t\t\t\t\tchecked: false,\n\t\t\t\t\tdisabled: false\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: '香蕉',\n\t\t\t\t\tchecked: false,\n\t\t\t\t\tdisabled: false\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: '橙子',\n\t\t\t\t\tchecked: false,\n\t\t\t\t\tdisabled: false\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: '草莓',\n\t\t\t\t\tchecked: false,\n\t\t\t\t\tdisabled: false\n\t\t\t\t}\n\t\t\t],\n\t\t\tradioList: [\n\t\t\t\t{\n\t\t\t\t\tname: '支付宝',\n\t\t\t\t\tchecked: true,\n\t\t\t\t\tdisabled: false\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: '微信',\n\t\t\t\t\tchecked: false,\n\t\t\t\t\tdisabled: false\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: '银联',\n\t\t\t\t\tchecked: false,\n\t\t\t\t\tdisabled: false\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: '现金',\n\t\t\t\t\tchecked: false,\n\t\t\t\t\tdisabled: false\n\t\t\t\t}\n\t\t\t],\n\t\t\tradio: '支付宝',\n\t\t\tactionSheetList: [\n\t\t\t\t{\n\t\t\t\t\ttext: '男'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: '女'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: '保密'\n\t\t\t\t}\n\t\t\t],\n\t\t\tactionSheetShow: false,\n\t\t\tpickerShow: false,\n\t\t\tselectShow: false,\n\t\t\tradioCheckWidth: 'auto',\n\t\t\tradioCheckWrap: false,\n\t\t\tlabelPosition: 'left',\n\t\t\tcodeTips: '',\n\t\t\terrorType: ['message'],\n\t\t};\n\t},\n\tonLoad() {\n\n\t},\n\tcomputed: {\n\t\tborderCurrent() {\n\t\t\treturn this.border ? 0 : 1;\n\t\t}\n\t},\n\tonReady() {\n\t\tthis.$refs.uForm.setRules(this.rules);\n\t},\n\tmethods: {\n\t\tsubmit() {\n\t\t\tthis.$refs.uForm.validate(valid => {\n\t\t\t\tif (valid) {\n\t\t\t\t\tif(!this.model.agreement) return this.$u.toast('请勾选协议');\n\t\t\t\t\tconsole.log('验证通过');\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log('验证失败');\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t// 点击actionSheet回调\n\t\tactionSheetCallback(index) {\n\t\t\tuni.hideKeyboard();\n\t\t\tthis.model.sex = this.actionSheetList[index].text;\n\t\t},\n\t\t// checkbox选择发生变化\n\t\tcheckboxGroupChange(e) {\n\t\t\tthis.model.likeFruit = e;\n\t\t},\n\t\t// radio选择发生变化\n\t\tradioGroupChange(e) {\n\t\t\tthis.model.payType = e;\n\t\t},\n\t\t// 勾选版权协议\n\t\tcheckboxChange(e) {\n\t\t\tthis.model.agreement = e.value;\n\t\t},\n\t\t// 选择地区回调\n\t\tregionConfirm(e) {\n\t\t\tthis.model.region = e.province.label + '-' + e.city.label + '-' + e.area.label;\n\t\t},\n\t\t// 选择商品类型回调\n\t\tselectConfirm(e) {\n\t\t\tthis.model.goodsType = '';\n\t\t\te.map((val, index) => {\n\t\t\t\tthis.model.goodsType += this.model.goodsType == '' ? val.label : '-' + val.label;\n\t\t\t})\n\t\t},\n\t\tborderChange(index) {\n\t\t\tthis.border = !index;\n\t\t},\n\t\tradioCheckboxChange(index) {\n\t\t\tif(index == 0) {\n\t\t\t\tthis.radioCheckWrap = false;\n\t\t\t\tthis.radioCheckWidth = 'auto';\n\t\t\t} else if(index == 1) {\n\t\t\t\tthis.radioCheckWrap = true;\n\t\t\t\tthis.radioCheckWidth = 'auto';\n\t\t\t} else if(index == 2) {\n\t\t\t\tthis.radioCheckWrap = false;\n\t\t\t\tthis.radioCheckWidth = '50%';\n\t\t\t}\n\t\t},\n\t\tlabelPositionChange(index) {\n\t\t\tthis.labelPosition = index == 0 ? 'left' : 'top';\n\t\t},\n\t\tcodeChange(text) {\n\t\t\tthis.codeTips = text;\n\t\t},\n\t\t// 获取验证码\n\t\tgetCode() {\n\t\t\tif(this.$refs.uCode.canGetCode) {\n\t\t\t\t// 模拟向后端请求验证码\n\t\t\t\tuni.showLoading({\n\t\t\t\t\ttitle: '正在获取验证码',\n\t\t\t\t\tmask: true\n\t\t\t\t})\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tuni.hideLoading();\n\t\t\t\t\t// 这里此提示会被this.start()方法中的提示覆盖\n\t\t\t\t\tthis.$u.toast('验证码已发送');\n\t\t\t\t\t// 通知验证码组件内部开始倒计时\n\t\t\t\t\tthis.$refs.uCode.start();\n\t\t\t\t}, 2000);\n\t\t\t} else {\n\t\t\t\tthis.$u.toast('倒计时结束后再发送');\n\t\t\t}\n\t\t},\n\t\terrorChange(index) {\n\t\t\tif(index == 0) this.errorType = ['message'];\n\t\t\tif(index == 1) this.errorType = ['toast'];\n\t\t\tif(index == 2) this.errorType = ['border-bottom'];\n\t\t\tif(index == 3) this.errorType = ['border'];\n\t\t}\n\t}\n};\n</script>\n\n<style scoped lang=\"scss\">\n.wrap {\n\tpadding: 30rpx;\n}\n\n.agreement {\n\tdisplay: flex;\n\talign-items: center;\n\tmargin: 40rpx 0;\n\n\t.agreement-text {\n\t\tpadding-left: 8rpx;\n\t\tcolor: $u-tips-color;\n\t}\n}\n</style>\n"
  },
  {
    "path": "pages/componentsA/fullScreen/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-no-demo-here\">\n\t\t\t\t\t通过压窗屏打开的模态框，可以遮盖顶部原生的导航栏和底部tabbar栏。\n\t\t\t\t\t注意：压窗屏只对APP有效，其他端无效。\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">状态</view>\n\t\t\t\t<u-subsection :current=\"current\" :list=\"['打开', '关闭']\" @change=\"openModal\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tcurrent: 1\n\t\t\t}\n\t\t},\n\t\tonShow() {\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.current = 1;\n\t\t\t})\n\t\t},\n\t\tmethods: {\n\t\t\topenModal(index) {\n\t\t\t\t// 可以传递参数\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.$u.route(\"/uview-ui/components/u-full-screen/u-full-screen?id=1\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/componentsA/icon/index.vue",
    "content": "<template>\n\t<view class=\"wrap\">\n\t\t<view class=\"u-border-left u-border-top inner-wrap\">\n\t\t\t<view @tap=\"selectIcon(item.name)\" class=\"u-icon-item u-border-bottom u-border-right\" v-for=\"(item, index) in iconList\" :key=\"index\">\n\t\t\t\t<u-icon :name=\"item.name\" size=\"40\" color=\"#909399\"></u-icon>\n\t\t\t\t<text class=\"u-icon-name\">{{item.name}}</text>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ticonList: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'level'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'woman'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'man'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'arrow-left-double'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'arrow-right-double'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'chat'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'chat-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'red-packet'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'red-packet-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'order'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'checkbox-mark'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'arrow-up-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'arrow-down-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'backspace'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'photo'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'photo-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'lock'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'lock-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'lock-open'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'lock-opened-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'hourglass'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'hourglass-half-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'home'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'home-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'fingerprint'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'cut'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'star'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'star-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'share'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'share-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'volume-up'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'volume-up-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'volume-off'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'volume-off-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'trash'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'trash-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'rewind-right'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'rewind-right-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'rewind-left'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'rewind-left-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'shopping-cart'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'shopping-cart-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'question'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'question-circle'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'question-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'plus'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'plus-circle'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'plus-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'tags'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'tags-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'pause'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'pause-circle'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'pause-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'play-circle'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'play-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'map'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'map-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'phone'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'phone-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'list'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'list-dot'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'man-delete'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'man-add'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'man-add-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'person-delete-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'info'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'info-circle'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'info-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'minus'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'minus-circle'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'minus-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'mic'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'mic-off'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'grid'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'grid-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'eye'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'eye-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'eye-off'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'file-text'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'file-text-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'edit-pen'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'edit-pen-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'email'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'email-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'download'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'checkmark'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'checkmark-circle'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'checkmark-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'clock'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'clock-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'close'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'close-circle'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'close-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'calendar'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'calendar-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'car'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'car-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'bell'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'bell-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'bookmark'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'bookmark-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'attach'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'play-right'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'play-right-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'play-left'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'play-left-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'error'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'error-circle'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'error-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'wifi'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'wifi-off'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'skip-back-left'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'skip-forward-right'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'search'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'setting'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'setting-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'volume'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'volume-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'more-dot-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'more-circle'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'more-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'bag'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'bag-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'arrow-upward'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'arrow-downward'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'arrow-leftward'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'arrow-rightward'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'arrow-up'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'arrow-down'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'arrow-left'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'arrow-right'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'rmb'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'rmb-circle'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'rmb-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'thumb-up'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'thumb-up-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'thumb-down'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'thumb-down-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'coupon'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'coupon-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'kefu-ermai'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'server-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'server-man'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'scan'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'warning'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'warning-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'google'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'google-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'chrome-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'ie'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'IE-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'github-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'android-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'android-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'apple-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'camera'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'camera-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'pushpin'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'pushpin-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'minus-square-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'plus-square-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'heart'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'heart-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'reload'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'account'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'account-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'minus-people-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'plus-people-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'integral'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'integral-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'zhihu'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'zhihu-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'gift'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'gift-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'zhifubao'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'zhifubao-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'weixin-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'weixin-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'twitter'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'twitter-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'taobao'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'taobao-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'weibo'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'weibo-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'qq-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'qq-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'moments'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'moments-circel-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'qzone'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'qzone-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'facebook'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'facebook-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'baidu'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'baidu-circle-fill'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'zhuanfa'\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t};\n\t\t},\n\t\tmethods: {\n\t\t\tselectIcon(name) {\n\t\t\t\t// #ifdef H5\n\t\t\t\treturn this.$u.toast('H5暂不支持复制');\n\t\t\t\t// #endif\n\t\t\t\tuni.setClipboardData({\n\t\t\t\t    data: name,\n\t\t\t\t    success: () => {\n\t\t\t\t        \n\t\t\t\t    }\n\t\t\t\t});\n\t\t\t\tuni.hideToast()\n\t\t\t\tthis.$u.toast('图标名称已复制');\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t.wrap {\n\t\tpadding: 24rpx;\n\t}\n\t\n\t.inner-wrap {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t}\n\t.u-icon-item {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\theight: 190rpx;\n\t\tflex: 0 0 33.33333333%;\n\t\tjustify-content: center;\n\t\toverflow: hidden;\n\t}\n\t\n\t.u-icon-name {\n\t\tcolor: $u-tips-color;\n\t\tword-wrap: break-word;\n\t\tword-break:break-all;\n\t\tmargin-top: 16rpx;\n\t\tfont-size: 26rpx;\n\t\tpadding: 0 14rpx;\n\t\t// 给定高度是为了图标名超出一行时，进行换行能有更好的效果\n\t\theight: 26rpx;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsA/indexList/index.vue",
    "content": "<template>\n\t<u-index-list :scrollTop=\"scrollTop\" :index-list=\"indexList\">\n\t\t<view v-for=\"(item, index) in list\" :key=\"index\">\n\t\t\t<u-index-anchor :index=\"item.letter\" />\n\t\t\t<view class=\"list-cell u-border-bottom\" v-for=\"(item1, index) in item.data\" :key=\"index\">\n\t\t\t\t{{item1.name}}\n\t\t\t</view>\n\t\t</view>\n\t</u-index-list>\n</template>\n\n<script>\n\timport indexList from \"@/common/index.list.js\";\n\tconst letterArr = indexList.list.map(val => {\n\t\treturn val.letter;\n\t})\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tscrollTop: 0,\n\t\t\t\tindexList: letterArr,\n\t\t\t\tlist: indexList.list\n\t\t\t}\n\t\t},\n\t\tonPageScroll(e) {\n\t\t\tthis.scrollTop = e.scrollTop;\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.list-cell {\n\t\tdisplay: flex;\n\t\tbox-sizing: border-box;\n\t\twidth: 100%;\n\t\tpadding: 10px 24rpx;\n\t\toverflow: hidden;\n\t\tcolor: $u-content-color;\n\t\tfont-size: 14px;\n\t\tline-height: 24px;\n\t\tbackground-color: #fff;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsA/keyboard/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"input-wrap\">\n\t\t\t\t\t<input class=\"input\" disabled type=\"text\" :value=\"input\" placeholder=\"来自键盘的输入内容\" />\n\t\t\t\t\t<u-button :custom-style=\"{height: '32px'}\" :hairLine=\"false\" class=\"clear-btn\" @tap=\"input = ''\">清空</u-button>\n\t\t\t\t</view>\n\t\t\t\t<u-keyboard :mask=\"mask\" ref=\"uKeyboard\" safe-area-inset-bottom @confirm=\"confirm\" \n\t\t\t\t:random=\"random\" :dotEnable=\"false\" :mode=\"mode\"\n\t\t\t\t:confirmBtn=\"true\" :cancelBtn=\"true\" :tooltip=\"tooltip\" v-model=\"show\" \n\t\t\t\t@change=\"change\" @backspace=\"backspace\"></u-keyboard>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置 \n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">键盘开关</view>\n\t\t\t\t<u-subsection :current=\"show == true ? 0 : 1\" :list=\"['开', '关']\" @change=\"statusChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">键盘类型</view>\n\t\t\t\t<u-subsection :list=\"['数字键盘', '身份证键盘', '车牌号键盘']\" @change=\"modeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">打乱顺序</view>\n\t\t\t\t<u-subsection :current=\"1\" :list=\"['是', '否']\" @change=\"randomChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">上方工具条</view>\n\t\t\t\t<u-subsection :list=\"['显示', '隐藏']\" @change=\"tooltipChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">是否显示遮罩</view>\n\t\t\t\t<u-subsection :list=\"['显示', '隐藏']\" @change=\"maskChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tshow: false,\n\t\t\t\tinput: '', \n\t\t\t\tmode: 'number',\n\t\t\t\trandom: false,\n\t\t\t\ttooltip: true,\n\t\t\t\tmask: true,\n\t\t\t\t\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tstatusChange(index) {\n\t\t\t\tthis.show = index == 0 ? true : false;\n\t\t\t},\n\t\t\tmodeChange(index) {\n\t\t\t\tif(index == 0) this.mode = 'number';\n\t\t\t\tif(index == 1) this.mode = 'card';\n\t\t\t\tif(index == 2) this.mode = 'car';\n\t\t\t\tthis.show = true;\n\t\t\t},\n\t\t\trandomChange(index) {\n\t\t\t\tthis.random = index == 0 ? true : false;\n\t\t\t\tthis.show = true;\n\t\t\t},\n\t\t\ttooltipChange(index) {\n\t\t\t\tthis.tooltip = index == 0 ? true : false;\n\t\t\t\tthis.show = true;\n\t\t\t},\n\t\t\tmaskChange(index) {\n\t\t\t\tthis.show = true;\n\t\t\t\tthis.mask = !index;\n\t\t\t},\n\t\t\t// 点击退格键\n\t\t\tbackspace() {\n\t\t\t\tif(this.input.length) this.input = this.input.substr(0, this.input.length - 1);\n\t\t\t},\n\t\t\t// 键盘按键发生变化\n\t\t\tchange(detail) {\n\t\t\t\tthis.input += detail;\n\t\t\t},\n\t\t\tconfirm(e) {\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.input {\n\t\tborder: 1px solid $u-light-color;\n\t\tborder-radius: 4px;\n\t\tmargin-bottom: 20px;\n\t\theight: 32px;\n\t\tfont-size: 26rpx;\n\t\tflex: 1;\n\t\tbox-sizing: border-box;\n\t}\n\t\n\t.input-wrap {\n\t\tdisplay: flex;\n\t}\n\t\n\t.clear-btn {\n\t\tmargin-left: 10px;\n\t\tfont-size: 28rpx;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsA/lazyLoad/index.vue",
    "content": "<template>\n\t<view class=\"wrap\">\n\t\t<view class=\"item-warp\">\n\t\t\t<view class=\"item\" v-for=\"(item, index) in list\" :key=\"index\">\n\t\t\t\t<u-lazy-load threshold=\"-450\" height=\"400\" img-mode=\"aspectFill\" border-radius=\"10\" :image=\"item.src\" :index=\"index\" @statusChange=\"statusChange\" @clickImg=\"clickImg\"></u-lazy-load>\n\t\t\t</view>\n\t\t</view>\n\t\t<u-loadmore :status=\"status\" @loadmore=\"getData\"></u-loadmore>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tlist: [],\n\t\t\t\tstatus: 'loadmore',\n\t\t\t\tdata: [{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i1/TB124_3NXXXXXasXVXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i7/TB1IWtgQFXXXXcmXFXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i1/TB1_f_PLXXXXXbVXpXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t// 这里会加载失败，显示错误的占位图\n\t\t\t\t\t\tsrc: \"error.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i6/TB1SIYrLXXXXXaAXpXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i1/TB11yxeNVXXXXbwXFXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i3/TB1ndJiQFXXXXctaXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i4/TB1BYGDLpXXXXbuXXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i2/TB1_9GoMVXXXXXmaXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i2/TB1cSZZNFXXXXaKaXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t// 这里会加载失败，显示错误的占位图\n\t\t\t\t\t\tsrc: \"error.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i8/TB1RVS_QpXXXXXBXXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i5/TB1xEJiLXXXXXcxaXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i6/TB1DSuHJVXXXXXmXXXXwu0bFXXX.png_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i5/TB1aMNyLpXXXXa2XXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i8/TB1JRHEQpXXXXXwXVXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i7/TB1qKEuQpXXXXXYXXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i7/TB1TlOfQFXXXXX2XXXXwu0bFXXX.png_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i1/TB1SKu.QpXXXXbDXVXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t// 这里会加载失败，显示错误的占位图\n\t\t\t\t\t\tsrc: \"error.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i8/TB1um5GQpXXXXbiaXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i1/TB1pxCTQpXXXXa2apXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i6/TB1zksMNVXXXXaRapXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i4/TB1nbrcOXXXXXXEXpXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i4/TB1CI_NQpXXXXXaXVXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i2/TB18vTdQFXXXXXlXpXXwu0bFXXX.png_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i7/TB1doDVQpXXXXcRaXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i1/TB17LgBNFXXXXaSXVXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i6/TB1fVJJQFXXXXcyXpXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i3/TB1wnBTKFXXXXcQXXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i1/TB124_3NXXXXXasXVXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i7/TB1IWtgQFXXXXcmXFXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i1/TB1_f_PLXXXXXbVXpXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i1/TB1DX3hIpXXXXXIaXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i6/TB1SIYrLXXXXXaAXpXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i1/TB11yxeNVXXXXbwXFXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i3/TB1ndJiQFXXXXctaXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i4/TB1BYGDLpXXXXbuXXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i2/TB1_9GoMVXXXXXmaXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i2/TB1cSZZNFXXXXaKaXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t// 这里会加载失败，显示错误的占位图\n\t\t\t\t\t\tsrc: \"error.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i8/TB1RVS_QpXXXXXBXXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i5/TB1xEJiLXXXXXcxaXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i6/TB1DSuHJVXXXXXmXXXXwu0bFXXX.png_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i5/TB1aMNyLpXXXXa2XXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i8/TB1JRHEQpXXXXXwXVXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i7/TB1qKEuQpXXXXXYXXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i7/TB1TlOfQFXXXXX2XXXXwu0bFXXX.png_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i1/TB1SKu.QpXXXXbDXVXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i2/TB17gJ3OXXXXXcrXpXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i8/TB1um5GQpXXXXbiaXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i1/TB1pxCTQpXXXXa2apXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i6/TB1zksMNVXXXXaRapXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i4/TB1nbrcOXXXXXXEXpXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i4/TB1CI_NQpXXXXXaXVXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i2/TB18vTdQFXXXXXlXpXXwu0bFXXX.png_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i7/TB1doDVQpXXXXcRaXXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: \"https://gtd.alicdn.com/sns_logo/i1/TB17LgBNFXXXXaSXVXXSutbFXXX.jpg_240x240xz.jpg\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t// 这里会加载失败，显示错误的占位图\n\t\t\t\t\t\tsrc: \"error.jpg\",\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t},\n\t\tonLoad() {\n\t\t\tthis.getData();\n\t\t},\n\t\tonReachBottom() {\n\t\t\tthis.getData();\n\t\t},\n\t\tmethods: {\n\t\t\tstatusChange(status) {\n\t\t\t\t//console.log(status);\n\t\t\t},\n\t\t\tclickImg(img) {\n\t\t\t\t//console.log(img);\n\t\t\t},\n\t\t\tgetData() {\n\t\t\t\tlet index = 0;\n\t\t\t\tthis.status = 'loading';\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tfor(let i = 0; i < 10; i++) {\n\t\t\t\t\t\tindex = this.$u.random(0, this.data.length - 1);\n\t\t\t\t\t\tthis.list.push({\n\t\t\t\t\t\t\tsrc: this.data[index].src\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tthis.status = 'loadmore';\n\t\t\t\t}, 1500);\n\t\t\t}\n\t\t},\n\t} \n</script>\n\n<style lang=\"scss\" scoped>\n\t.wrap {\n\t\tpadding: 30rpx;\n\t\tdisplay: block;\n\t\t\n\t}\n\t\n\t.item-warp {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tflex-wrap: wrap;\n\t}\n\t\n\t.item-warp .item {\n\t\tflex: 0 0 335rpx;\n\t\theight: 400rpx;\n\t\tmargin-bottom: 20rpx;\n\t\tborder-radius: 10rpx;\n\t\toverflow: hidden;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsA/modal/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<view class=\"u-no-demo-here\">请点击弹出弹窗查看效果</view>\n\t\t\t\t<u-modal ref=\"uModal\" v-model=\"show\" :show-cancel-button=\"true\" \n\t\t\t\t\t:show-title=\"showTitle\" :async-close=\"asyncClose\"\n\t\t\t\t\t@confirm=\"confirm\" :content=\"content\"\n\t\t\t\t>\n\t\t\t\t\t<!-- #ifndef MP-WEIXIN || MP-TOUTIAO -->\n\t\t\t\t\t<view class=\"warp\" style=\"margin: 30rpx;\" v-if=\"contentSlot\">\n\t\t\t\t\t\t<image class=\"logo\" src=\"https://uviewui.com/common/logo.png\" style=\"width: 220rpx;\" mode=\"widthFix\"></image>\n\t\t\t\t\t</view>\n\t\t\t\t\t<!-- #endif -->\n\t\t\t\t</u-modal>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">参数配置</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">状态</view>\n\t\t\t\t<u-subsection :current=\"current\" :list=\"['显示', '隐藏']\" @change=\"showChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">是否显示标题</view>\n\t\t\t\t<u-subsection current=\"0\" :list=\"['是', '否']\" @change=\"titleChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<!-- #ifndef MP-WEIXIN -->\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义内容</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"contentChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<!-- #endif -->\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">异步关闭</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"asyncChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tshow: false,\n\t\t\t\tzoom: false,\n\t\t\t\tcontent: '慈母手中线，游子身上衣',\n\t\t\t\tcontentSlot: false,\n\t\t\t\tshowTitle: true,\n\t\t\t\tasyncClose: false,\n\t\t\t};\n\t\t},\n\t\tcomputed: {\n\t\t\tcurrent() {\n\t\t\t\treturn this.show ? 0 : 1;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tshowChange(index) {\n\t\t\t\tthis.show = !index;\n\t\t\t},\n\t\t\ttitleChange(index) {\n\t\t\t\tthis.showTitle = !index;\n\t\t\t\tthis.show = true;\n\t\t\t},\n\t\t\tcontentChange(index) {\n\t\t\t\tthis.contentSlot = !index;\n\t\t\t\tthis.show = true;\n\t\t\t},\n\t\t\tasyncChange(index) {\n\t\t\t\tthis.show = true;\n\t\t\t\tthis.asyncClose = !index;\n\t\t\t},\n\t\t\tconfirm() {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.show = false;\n\t\t\t\t}, 2000)\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style scoped lang=\"scss\">\n\t.logo {\n\t\theight: auto;\n\t\twill-change: transform;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsA/navbar/index.vue",
    "content": "<template>\n\t<view class=\"\">\n\t\t<u-navbar title-color=\"#fff\" back-icon-color=\"#ffffff\" \n\t\t\t:is-fixed=\"isFixed\" :is-back=\"isBack\" \n\t\t\t:background=\"background\" \n\t\t\t:back-text-style=\"{color: '#fff'}\" :title=\"title\" \n\t\t\t:back-icon-name=\"backIconName\" :back-text=\"backText\"\n\t\t>\n\t\t\t<view class=\"slot-wrap\" v-if=\"useSlot\">\n\t\t\t\t<view class=\"search-wrap\" v-if=\"search\">\n\t\t\t\t\t<!-- 如果使用u-search组件，必须要给v-model绑定一个变量 -->\n\t\t\t\t\t<u-search v-model=\"keyword\" :show-action=\"showAction\" height=\"56\" :action-style=\"{color: '#fff'}\"></u-search>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"navbar-right\" v-if=\"rightSlot\">\n\t\t\t\t\t<view class=\"message-box right-item\">\n\t\t\t\t\t\t<u-icon name=\"chat\" size=\"38\"></u-icon>\n\t\t\t\t\t\t<u-badge count=\"18\" size=\"mini\" :offset=\"[-15, -15]\"></u-badge>\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"dot-box right-item\">\n\t\t\t\t\t\t<u-icon name=\"calendar-fill\" size=\"38\"></u-icon>\n\t\t\t\t\t\t<u-badge size=\"mini\" :is-dot=\"true\" :offset=\"[-6, -6]\"></u-badge>\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"map-wrap\" v-if=\"custom\">\n\t\t\t\t\t<u-icon name=\"map\" color=\"#ffffff\" size=\"24\"></u-icon>\n\t\t\t\t\t<text class=\"map-wrap-text\">轻舟已过万重山</text>\n\t\t\t\t\t<u-icon name=\"arrow-down-fill\" color=\"#ffffff\" size=\"22\"></u-icon>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t\t<view class=\"navbar-right\" slot=\"right\" v-if=\"slotRight\">\n\t\t\t\t<view class=\"message-box right-item\">\n\t\t\t\t\t<u-icon name=\"chat\" size=\"38\"></u-icon>\n\t\t\t\t\t<u-badge count=\"18\" size=\"mini\" :offset=\"[-15, -15]\"></u-badge>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"dot-box right-item\">\n\t\t\t\t\t<u-icon name=\"calendar-fill\" size=\"38\"></u-icon>\n\t\t\t\t\t<u-badge size=\"mini\" :is-dot=\"true\" :offset=\"[-6, -6]\"></u-badge>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</u-navbar>\n\t\t<view class=\"u-demo\">\n\t\t\t<view class=\"u-demo-wrap\">\n\t\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t\t<view class=\"u-no-demo-here\">查看顶部导航栏效果</view>\n\t\t\t\t</view> \n\t\t\t</view>\n\t\t\t<view class=\"u-config-wrap\">\n\t\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t\t参数配置\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-config-item\">\n\t\t\t\t\t<view class=\"u-item-title\">标题长度</view>\n\t\t\t\t\t<u-subsection :list=\"['短', '中', '长']\" @change=\"titleChange\"></u-subsection>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-config-item\">\n\t\t\t\t\t<view class=\"u-item-title\">隐藏左侧返回区域</view>\n\t\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"backChange\"></u-subsection>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-config-item\">\n\t\t\t\t\t<view class=\"u-item-title\">自定义左侧内容</view>\n\t\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"leftChange\"></u-subsection>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-config-item\">\n\t\t\t\t\t<view class=\"u-item-title\">自定义右侧内容</view>\n\t\t\t\t\t<u-subsection :current=\"slotRightCurrent\" :list=\"['是', '否']\" @change=\"rightChange\"></u-subsection>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-config-item\">\n\t\t\t\t\t<view class=\"u-item-title\">传入整体slot</view>\n\t\t\t\t\t<u-subsection :list=\"['无', '搜索框', '搜索+按钮', '搜索+图标']\" @change=\"searchChange\"></u-subsection>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-config-item\">\n\t\t\t\t\t<view class=\"u-item-title\">完全自定义传入内容</view>\n\t\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"customChange\"></u-subsection>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-config-item\">\n\t\t\t\t\t<view class=\"u-item-title\">背景色</view>\n\t\t\t\t\t<u-subsection :list=\"['渐变', '#39CCCC', '#B471CC', '#001f3f']\" @change=\"bgColorChange\"></u-subsection>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttitle: '新闻',\n\t\t\t\tbackText: '返回',\n\t\t\t\tbackIconName: 'nav-back',\n\t\t\t\tright: false,\n\t\t\t\tshowAction: false,\n\t\t\t\trightSlot: false,\n\t\t\t\tuseSlot: false,\n\t\t\t\tbackground: {\n\t\t\t\t\t'background-image': 'linear-gradient(45deg, rgb(28, 187, 180), rgb(141, 198, 63))'\n\t\t\t\t},\n\t\t\t\tisBack: true,\n\t\t\t\tsearch: false,\n\t\t\t\tcustom: false,\n\t\t\t\tisFixed: true,\n\t\t\t\tkeyword: '',\n\t\t\t\t// #ifdef MP\n\t\t\t\tslotRight: false,\n\t\t\t\t// #endif\n\t\t\t\t// #ifndef MP\n\t\t\t\tslotRight: true\n\t\t\t\t// #endif\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tslotRightCurrent() {\n\t\t\t\treturn this.slotRight ? 0 : 1;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\ttitleChange(index) {\n\t\t\t\tthis.useSlot = false;\n\t\t\t\tthis.title = index == 0 ? '新闻' : index == 1 ? '新闻列表' : '雨打梨花深闭门，忘了青春，误了青春';\n\t\t\t},\n\t\t\tleftChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.backText = '';\n\t\t\t\t\tthis.backIconName = 'arrow-leftward';\n\t\t\t\t} else {\n\t\t\t\t\tthis.backText = '返回';\n\t\t\t\t\tthis.backIconName = 'arrow-left';\n\t\t\t\t}\n\t\t\t},\n\t\t\tsearchChange(index) {\n\t\t\t\tthis.title = null;\n\t\t\t\tthis.useSlot = true;\n\t\t\t\tthis.search = false;\n\t\t\t\tthis.custom = false;\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.title = '新闻';\n\t\t\t\t\tthis.useSlot = false;\n\t\t\t\t\tthis.rightSlot = false;\n\t\t\t\t} else if(index == 1) {\n\t\t\t\t\tthis.showAction = false;\n\t\t\t\t\tthis.useSlot = true;\n\t\t\t\t\tthis.rightSlot = false;\n\t\t\t\t\tthis.search = true;\n\t\t\t\t\tthis.slotRight = false;\n\t\t\t\t} else if(index == 2) {\n\t\t\t\t\tthis.useSlot = true;\n\t\t\t\t\tthis.showAction = true;\n\t\t\t\t\tthis.rightSlot = false;\n\t\t\t\t\tthis.search = true;\n\t\t\t\t\tthis.slotRight = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.useSlot = true;\n\t\t\t\t\tthis.search = true;\n\t\t\t\t\tthis.showAction = false;\n\t\t\t\t\tthis.rightSlot = true;\n\t\t\t\t\tthis.slotRight = false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tbackChange(index) {\n\t\t\t\tthis.isBack = !!index;\n\t\t\t},\n\t\t\tbgColorChange(index) {\n\t\t\t\tthis.background = {};\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.background = {\n\t\t\t\t\t\t'background-image': 'linear-gradient(45deg, rgb(28, 187, 180), rgb(141, 198, 63))'\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlet color = index == 1 ? '#39CCCC' : index == 2 ? '#B471CC' : '#001f3f';\n\t\t\t\t\tthis.background = {\n\t\t\t\t\t\tbackground: color\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t},\n\t\t\trightChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.slotRight = true;\n\t\t\t\t\tthis.useSlot = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.slotRight = false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tcustomChange(index) {\n\t\t\t\tthis.search = false;\n\t\t\t\tthis.rightSlot = false;\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.custom = true;\n\t\t\t\t\tthis.title = null;\n\t\t\t\t\tthis.isBack = false;\n\t\t\t\t\tthis.useSlot = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.useSlot = false;\n\t\t\t\t\tthis.title = '新闻';\n\t\t\t\t\tthis.isBack = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {\n\t\t//height: 200vh;\n\t\theight: calc(100% - 44px);\n\t\theight: calc(100% - 44px - constant(safe-area-inset-top));\n\t\theight: calc(100% - 44px - env(safe-area-inset-top));\n\t}\n\t\n\t.wrap {\n\t\tpadding: 24rpx;\n\t}\n\t\n\t.navbar-right {\n\t\tmargin-right: 24rpx;\n\t\tdisplay: flex;\n\t}\n\t\n\t.search-wrap {\n\t\tmargin: 0 20rpx;\n\t\tflex: 1;\n\t}\n\t\n\t.right-item {\n\t\tmargin: 0 12rpx;\n\t\tposition: relative;\n\t\tcolor: #ffffff;\n\t\tdisplay: flex;\n\t}\n\t\n\t.message-box {\n\t\t\n\t}\n\t\n\t.slot-wrap {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tflex: 1;\n\t}\n\t\n\t.map-wrap {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tpadding: 4px 6px;\n\t\tbackground-color: rgba(240,240, 240, 0.35);\n\t\tcolor: #fff;\n\t\tfont-size: 22rpx;\n\t\tborder-radius: 100rpx;\n\t\tmargin-left: 30rpx;\n\t}\n\t\n\t.map-wrap-text {\n\t\tpadding: 0 6rpx;\n\t}\n</style>\n\n"
  },
  {
    "path": "pages/componentsA/noNetwork/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<text class=\"no-net-tips\">请断开手机的WiFi和移动数据来查看效果</text>\n\t\t\t\t<u-no-network :tips=\"tips\" :image=\"image\"></u-no-network>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义提示语</view>\n\t\t\t\t<u-subsection :current=\"1\" :list=\"['是', '否']\" @change=\"tipsChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义图标</view>\n\t\t\t\t<u-subsection :current=\"1\" :list=\"['是', '否']\" @change=\"imageChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\tlet image = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAEYCAMAAABFglBLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M0U3MjVFMzQwNEY1MTFFQUE4MTNDOUEzMTVBREMxQjIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6M0U3MjVFMzUwNEY1MTFFQUE4MTNDOUEzMTVBREMxQjIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozRTcyNUUzMjA0RjUxMUVBQTgxM0M5QTMxNUFEQzFCMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozRTcyNUUzMzA0RjUxMUVBQTgxM0M5QTMxNUFEQzFCMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkHIU9QAAAMAUExURdHW2OWiou7u7tve4dnc3/vw8N3g4sPCwvjn5+jo6M7Q0u6+vtyEhPXY2Li+wuikpPXW1uXo6dba3Pbg4Na5u+qurqqyt/HJydjb3fjo6LrAxO7Bwey1td6MjOrs7fbc3OTn6Maytf7+/vz19eqqqrzCxvzz87a8wLO6vuqxsf78/PDFxenr7L/FyNTY26+2u/z09MjMzqy0udnZ2dvb27G4vMjN0O7v8P339+Ll5u3v8NDS1ODj5frt7bC3vP76+u24uOKamtTW2MTIy9zc3N7e3vPQ0OCTk8DGyfDDw9LR0c7S1LussNbY2fPOztLU1cLHyrK6vvji4vrv78bKzPX29/np6crP0vjk5Ozu78bLzuepqczR1MHFyMDEyOq1tfTS0vP09cLIy9DU173Ex8bGxvHy88/U18vO0LK4vM7OzsTKzcPJzPLMzM/T1sbMz8HJy+7FxbW8wNTW18XKzvb3+MjLzczP0d3e3+Dh4r3Dxtna29zd3rK5vdPU1cfM0Prq6uOenuPm58HGyfHz8/ro6Lq/w8nO0bzCxcrKytjZ2uXm5vTU1LvBxbW7v+rp6eefn/39/eLi4u3t7Ozs7Pj4+Pr6+vX19fHx8erq6vPz8+Xl5ff39+fn5/v7+/z8/PLx8fX09Pb29ri4uOTk5PHw8OPj4/Py8ubm5vn5+e3s7Pb19fTz8/f29tfX1+7t7cvQ0+zr6/Ly8u3t7fr5+efm5quzuOvq6vT19uvr6/j5+a61uuy6uvb39/T09Ojn5+jq6621uvn6+t/i5KyzuPn4+Le+wvv6+s3S1fj4+fDw8OHk5vv7/Pr7++Xk5LS7v7y8vObl5fz9/ff4+OTj48DEx8XJy+Hk5euysu/x8re9wfn5+v38/Pv8/Pr6++vt7uLi4+Pi4ubl5uXk5dPV1tbV1fHMzNPX2e7u7ejn6PT19fX19PDw7/b29f39/vnr6+Hh4a+3u+7t7q61uePi48PHyf35+enp6fLz9PPz8qmxtuDg4N/f3/Dv7////////1cfN/UAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAlqElEQVR42uydCXwUVZrAk5CEJBAQshACCGyjIRwBJR0It6JBGZZBkRtm5PBgFXAXHBghqAMz6LjGTrd9n7lvwn0JQhARxYNxVJTMwcwOM+7uzK6Z3VXcrnTXVr2q6q7urrvfq26c+n4egXTSVfXv993veym4JkklKdoj0IBoogHRgGiiAdGAaKIB0YBoogHRgGiiAdFEA6IBUVuwx+vqet/v1YAkhxwmcNT9gvjnsAYkGcT7eN1TtThe+1TdL2o1IEkg+rrvUV90MF9oQBIqv6ijF4a3d51XA5J4jVVXx3z587ojGpDEm/QwkO9pQJJB2CvksAYk8fJUXT31xZG63ppRTwI5QgcgR35Rd1MDkgxSX1f31P33P1V3i3u936HUyc3edWSsjuEakKRRW3r9kVv+JrRsrwbklpKTnXs+z0wfONOtAUm8rJu55oqfkZ0TOzUgCZS3Zh7s54+S5RqQhNGYMsnPISkakCSiQcjkNzUgasvUDaVsBF1fb9GXd//B0ziliPzjEA2IujLqGRaMST+cawgLNpn4q30aEDV1Va+dYRqzNy00RMoYUmdpQNTzcb8sCtuKH8w9Z4iWLuIbVzQgapmOBedDOO6c0WjgENK2vKwBUUUmvBSiUbrqxwZuOU18d5MGhEe/dI6a2WvIxA0HX1hfvH7V8gUpA9Mz3x/VuVTRLxvwdAhH5aJjBj4hv39QAxIl743ITHm6azBPnOCfVLwlc6pR3upYFbLjvIuDlEUqRYZo38JYS4gVt5rNZhMQO46byksoMeG4w8QIjtvMpJA/wP1EdZ0bKvkitkh555mBA3zSLnBlSFnNnlJvEJJ95ItW3pJAamvtZhy3m/T0g7fhthJGiG+EviYgmEJ/wHFP6GsbnlZSoicoucxmGwHVguPTBz543C9LHky/Jnql1w5KxWGo8KsThsAFYneYMOb5mlnP11ZCrwOPjfgGI8RqsZuZtUOsFmbllFhZP+zEbc8vGcqzMibv7qos3rd7Mg+TrQv2vCVkiLYc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';\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttips: '哎呀，网络信号丢失',\n\t\t\t\timage: image,\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\ttipsChange(index) {\n\t\t\t\tthis.tips = index == 0 ? '人生得意须尽欢' : '哎呀，网络信号丢失';\n\t\t\t},\n\t\t\timageChange(index) {\n\t\t\t\tthis.image = index == 0 ? 'https://cdn.uviewui.com/uview/no-network/no_network.png' : image;\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t.no-net-tips {\n\t\tcolor: $u-tips-color;\n\t\tfont-size: 26rpx;\n\t}\n</style>"
  },
  {
    "path": "pages/componentsA/parse/index.vue",
    "content": "<template>\n\t<view class=\"u-content\">\n\t\t<u-parse :html=\"detail.content\"></u-parse>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tdetail: {\n\t\t\t\t\tcontent: `\n\t\t\t\t\t\t<div class=\"content_area\" id=\"content_area\" style=\"display: block;\">\n\t\t\t\t\t\t                    \n\t\t\t\t\t\t                        <!--repaste.body.begin--><p>　　巴尼小镇是云南省怒江傈僳族自治州首个易地扶贫搬迁集中安置点。从山上的金满村搬迁到巴尼小镇，近3年的时间里，搬迁户们的生活发生了可喜的变化。</p>\n\t\t\t\t\t\t<p class=\"photo_img_20190808\" style=\"text-align: center;\"><img src=\"//p2.img.cctvpic.com/photoworkspace/contentimg/2020/07/16/2020071613380766481.jpg\" alt=\"泸水市巴尼小镇易地扶贫搬迁安置点全景 李韩金摄（人民视觉）\" isflag=\"1\"></p>\n\t\t\t\t\t\t<p class=\"photo_alt_20190808\" style=\"text-align: center;\"><em></em>泸水市巴尼小镇易地扶贫搬迁安置点全景 李韩金摄（人民视觉）</p>\n\t\t\t\t\t\t<p>　　搬出四面透风、容易漏雨的“千脚落地房”，住进如今宽敞明亮的楼房，当地居民的生活不断改善。另一边，留在山上的村民在企业帮助下改种经济林果，家庭收入节节攀升。</p>\n\t\t\t\t\t\t<p class=\"photo_img_20190808\" style=\"text-align: center;\"><img src=\"//p3.img.cctvpic.com/photoworkspace/contentimg/2020/07/16/2020071613382671669.jpg\" alt=\"金满村搬迁户在巴尼小镇的扶贫车间里上班 余秀英摄（人民视觉）\" isflag=\"1\"></p>\n\t\t\t\t\t\t<p class=\"photo_alt_20190808\" style=\"text-align: center;\"><em></em>金满村搬迁户在巴尼小镇的扶贫车间里上班 余秀英摄（人民视觉）</p>\n\t\t\t\t\t\t<p>　　这阵子，52岁的米四东心里老惦记个事：吃两碗包谷稀饭。包谷稀饭是把包谷和蚕豆混在一起，有时加点腊肉，搁在三脚架上，生火煮制而成。在高黎贡山上，包谷稀饭曾是金满村人的主食，大多数人连个菜都不舍得炒，就配一碗蘸水吃。从山上搬下来快3年了，米四东说：“在山上盼着吃大米饭，如今天天吃米饭，又想念包谷稀饭了。”</p>\n\t\t\t\t\t\t<p>　　米四东的家在巴尼小镇，地处云南省怒江傈僳族自治州泸水市洛本卓白族乡，紧邻着怒江。这里是怒江州首个易地扶贫搬迁集中安置点，2017年国庆节，金满村首批40户村民入住，2018年最后11户村民入住新居。如今已有搬迁户168户744人，都属于白族支系勒墨人。</p>\n\t\t\t\t\t\t<p>　　3年时间，这里的人和生活发生了哪些变化？这个夏天，记者走进了巴尼小镇。</p>\n\t\t\t\t\t\t<p>　　曾经——</p>\n\t\t\t\t\t\t<p>　　8公里的距离，20年的差距</p>\n\t\t\t\t\t\t<p>　　村民叁益光的家里干净亮堂，客厅的墙上，挂着一家三口在老房子前的合影。由于山地太陡，找不到平地打地基，老房子都是篱笆为墙、木板为顶、木头为柱的“千脚落地房”的样子。四面透风的房子里面黑黢黢的，下面养牲畜，中间住人，上面放粮食。“一入雨季，屋里就怕漏雨，潮乎乎有虱子”。2017年搬迁前，金满村九成村民就住在这种房子里。</p>\n\t\t\t\t\t\t<p>　　从巴尼小镇往背后的高黎贡山深处走，沿着一条水泥路走上8公里，就回到了金满村村委会。金满村11个村民小组，其中5个不通公路、1个是地质灾害隐患点，这6个组如今已整体搬迁。“最远的马社王底小组有16户人家，到村委会要过悬崖、涉小河、爬陡坡，走上三四个小时。”说起过往，村委会主任沈光干嘘唏不已。</p>\n\t\t\t\t\t\t<p>　　站在村委会的院子里，只见大山围绕、白云悠悠，山外面还是山。2014年底，金满村人均收入仅有1400多元，全村1310人有建档立卡贫困户1250人。沈光干说：“在山上，一年到头辛辛苦苦，还是穷成这个样！”</p>\n\t\t\t\t\t\t<p>　　听老人们说起以前的生活，就像听“穿越故事”一样：去邻近的县背洋芋回来种，前后得一星期，头疼脑热不舍得花钱去卫生院……“过去从金满村到巴尼小镇的8公里距离，也是发展相差20年的距离。”巴尼小镇社区副主任和碧武介绍，群众刚搬出大山时，不会用电器，连起床叠被子的习惯都没有。</p>\n\t\t\t\t\t\t<p>　　不过，在宽敞明亮的楼房里住上一段时间，大家都知道了现代生活的好处。乡中心完小五年级的学生花燕梅一家去年搬到小镇上，每天早上走几分钟就能到学校。“搬下来好，在这里衣服不容易脏，老师也讲得好！”孩子的话，总是简单明了。</p>\n\t\t\t\t\t\t<p>　　如今，按照“一户一宅基地”的政策，米四东在山上的老房子拆了，一家人踏踏实实住在了小镇上。米四东感慨：“还是在山下容易赚钱。”</p>\n\t\t\t\t\t\t<p>　　山下——</p>\n\t\t\t\t\t\t<p>　　干活更方便，管理更规范</p>\n\t\t\t\t\t\t<p>　　在巴尼小镇，最常见的交通工具就是摩托车，还有不少人家门口停着机动三轮车、小货车和轿车。米四东说，有了钱，大家都愿意买辆摩托车，“干活方便了许多。”</p>\n\t\t\t\t\t\t<p>　　记者了解到，巴尼小镇目前外出务工118户282人，以本地打零工为主。在小镇上，就有家扶贫车间生产民族服装，平时有20多个女工。车间的管理人员告诉记者，一个熟练女工一个月挣三四千元没问题。</p>\n\t\t\t\t\t\t<p>　　赚得多了，还要看花得多不多，对于搬出大山的人来说，上楼后的生活成本增加了多少？</p>\n\t\t\t\t\t\t<p>　　米四东算了算账：小镇的水费一户每年20元，电费也不贵，过日子主要就是买些吃的。“这个就丰俭由己了，青菜要买，土豆南瓜山上就有。”</p>\n\t\t\t\t\t\t<p>　　和碧武介绍，随着巴尼小镇社区建设越来越规范，一些以前“难以想象”的方法都有了实打实的用处。“比如我们这里实行积分制管理，积极参加升国旗仪式、搞好卫生都有加分，居民可以到超市用积分兑换商品。”社区超市经营者玉花梅说，去年超市里兑换了2万多元的积分。</p>\n\t\t\t\t\t\t<p>　　当然，搬下来的时间并不长，对大部分人来说还是处在适应阶段。在和碧武看来，村子里的人与外界的交流还是偏少，视野和观念转变得还不够快。</p>\n\t\t\t\t\t\t<p>　　米四东就有这种体会。洛本卓白族乡是“中国民间文化艺术之乡”，金满村被列入“云南省第四批旅游特色村”。作为州级非物质文化遗产传人，米四东如今在巴尼小镇教授勒墨人的传统歌舞。“等哪天怒江大峡谷的旅游火起来了，这门技艺一定会是旅游的‘招牌’产品。”米四东心里寻思着。</p>\n\t\t\t\t\t\t<p>　　山上——</p>\n\t\t\t\t\t\t<p>　　既抓“生态账”，又算“经济账”</p>\n\t\t\t\t\t\t<p>　　一边是米四东感慨“山下容易赚钱”，另一边却是仍然留在山上的5个村民小组80户人家，如今的8公里，还有20年的发展差距吗？</p>\n\t\t\t\t\t\t<p>　　“‘两不愁三保障’早就实现了，现在村里的生活跟过去相比简直是天壤之别。眼下村里惦记的，是怎样既抓‘生态账’，又算‘经济账’。”洛本卓乡宣传委员麻继成兼任金满村党总支书记，搬迁启动前就驻村工作，到现在还扎在村里忙活调整种养殖业结构。</p>\n\t\t\t\t\t\t<p>　　靠山吃山，金满村过去是在四五十度的山坡地上开荒种包谷，如今要进行山体生态修复，除了改种经济林果，别无他法。</p>\n\t\t\t\t\t\t<p>　　麻继成说，乡里组织搬迁群众将原住地的土地林地出租、流转或退耕还林，采取“合作社+村党总支+农户+基地”模式，种植花椒、核桃、草果、香橼等经济作物。现在，1000多亩花椒、1000多亩核桃、600多亩草果和300多亩香橼已经成了山上的“绿色银行”。“村里今年准备再发展250亩香橼，香橼两年就能挂果，收益前景非常可观。”</p>\n\t\t\t\t\t\t<p>　　农产品“升了级”，收入也“开了源”。麻继成说，农民在企业承包的果园里务工，每天的工资有100元，如今每天都有二三十人在果园里干活。</p>\n\t\t\t\t\t\t<p>　　“搬出去有盼头，留下来有干劲。”如今，乡里还在加紧研究制定金满村乡村旅游规划。“等客栈、农家乐、步行街都建好了，幸福一定来敲门。”洛本卓乡党委书记郝春荣说，巩固脱贫成果、走向乡村振兴，“好日子还在后头”。</p><!--repaste.body.end-->\n\t\t\t\t\t\t                    \n\t\t\t\t\t\t                </div>\n\t\t\t\t\t`\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonLoad() {\n\t\t},\n\t\tmethods: {\n\t\t\t\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-content {\n\t\tpadding: 24rpx;\n\t\tfont-size: 32rpx;\n\t\tcolor: $u-content-color;\n\t\tline-height: 1.6;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsA/select/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-select @click=\"show = true\" :default-value=\"defaultValue\" :mode=\"mode\" v-model=\"show\" :list=\"list\" @confirm=\"confirm\" @cancel=\"cancel\"></u-select>\n\t\t\t\t<view class=\"u-demo-result-line\">select值：{{ result }}</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">参数配置</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">状态</view>\n\t\t\t\t<u-subsection :current=\"current\" :list=\"['打开', '收起']\" @change=\"statusChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">模式</view>\n\t\t\t\t<u-subsection :list=\"['单列', '多列独立', '多列联动']\" @change=\"modeChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tshow: false,\n\t\t\tresult: '尚未选择',\n\t\t\tdefaultValue: [3],\n\t\t\tmode: 'single-column', // single-column, mutil-column, mutil-column-auto\n\t\t\tlist: [],\n\t\t\tlist1: [\n\t\t\t\t{\n\t\t\t\t\tvalue: '江',\n\t\t\t\t\tlabel: '江'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: '湖',\n\t\t\t\t\tlabel: '湖'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: '夜',\n\t\t\t\t\tlabel: '夜'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: '雨',\n\t\t\t\t\tlabel: '雨'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: '十',\n\t\t\t\t\tlabel: '十'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: '年',\n\t\t\t\t\tlabel: '年'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: '灯',\n\t\t\t\t\tlabel: '灯'\n\t\t\t\t}\n\t\t\t],\n\t\t\tlist2: [\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: '昔',\n\t\t\t\t\t\tlabel: '昔'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: '去',\n\t\t\t\t\t\tlabel: '去'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: '雪',\n\t\t\t\t\t\tlabel: '雪'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: '如',\n\t\t\t\t\t\tlabel: '如'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: '花',\n\t\t\t\t\t\tlabel: '花'\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: '今',\n\t\t\t\t\t\tlabel: '今'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: '来',\n\t\t\t\t\t\tlabel: '来'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: '花',\n\t\t\t\t\t\tlabel: '花'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: '似',\n\t\t\t\t\t\tlabel: '似'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: '雪',\n\t\t\t\t\t\tlabel: '雪'\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t],\n\t\t\tlist3: [\n\t\t\t\t{\n\t\t\t\t\tlabel: '中国',\n\t\t\t\t\tvalue: '1',\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: '广西',\n\t\t\t\t\t\t\tvalue: '2',\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlabel: '南宁',\n\t\t\t\t\t\t\t\t\tvalue: '3'\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlabel: '梧州',\n\t\t\t\t\t\t\t\t\tvalue: '3'\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlabel: '柳州',\n\t\t\t\t\t\t\t\t\tvalue: '3'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: '广东',\n\t\t\t\t\t\t\tvalue: '2',\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlabel: '深圳',\n\t\t\t\t\t\t\t\t\tvalue: '3'\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlabel: '惠州',\n\t\t\t\t\t\t\t\t\tvalue: '3'\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlabel: '清远',\n\t\t\t\t\t\t\t\t\tvalue: '3'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: '美国',\n\t\t\t\t\tvalue: '1',\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: '纽约',\n\t\t\t\t\t\t\tvalue: '2',\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlabel: '皇后街道',\n\t\t\t\t\t\t\t\t\tvalue: '3'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t},\n\tonLoad() {\n\t\tthis.list = this.list1;\n\t},\n\tcomputed: {\n\t\tcurrent() {\n\t\t\treturn this.show ? 0 : 1;\n\t\t}\n\t},\n\tmethods: {\n\t\tstatusChange(index) {\n\t\t\tthis.show = !index;\n\t\t},\n\t\tmodeChange(index) {\n\t\t\tlet type = ['single-column', 'mutil-column', 'mutil-column-auto'];\n\t\t\tthis.mode = type[index];\n\t\t\tthis.list = index == 0 ? this.list1 : index == 1 ? this.list2 : this.list3;\n\t\t\tthis.show = true;\n\t\t},\n\t\tconfirm(e) {\n\t\t\tthis.result = '';\n\t\t\te.map((val, index) => {\n\t\t\t\tthis.result += this.result == '' ? val.label : '-' + val.label;\n\t\t\t})\n\t\t},\n\t\tcancel(e) {\n\t\t\tconsole.log(e);\n\t\t}\n\t}\n};\n</script>\n\n<style scoped lang=\"scss\">\n.badge-button {\n\tpadding: 4rpx 6rpx;\n\tbackground-color: $u-type-error;\n\tcolor: #fff;\n\tborder-radius: 10rpx;\n\tfont-size: 22rpx;\n\tline-height: 1;\n}\n</style>\n"
  },
  {
    "path": "pages/componentsA/slider/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<u-slider :step=\"step\" :height=\"height\" :block-width=\"blockWidth\" \n\t\t\t\t\t:active-color=\"activeColor\" :value=\"30\" \n\t\t\t\t\t:use-slot=\"useSlot\" v-model=\"value\"\n\t\t\t\t\t:min=\"min\" :max=\"max\" \n\t\t\t\t\t@end=\"end\"\n\t\t\t\t\t@moving=\"moving\"\n\t\t\t\t>\n\t\t\t\t\t<!-- #ifndef MP-WEIXIN || MP-TOUTIAO -->\n\t\t\t\t\t<view class=\"\" v-if=\"useSlot\">\n\t\t\t\t\t\t<view class=\"badge-button\">\n\t\t\t\t\t\t\t{{value}}\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</view>\n\t\t\t\t\t<!-- #endif -->\n\t\t\t\t</u-slider>\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t滑块值：{{value}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">参数配置</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义颜色</view>\n\t\t\t\t<u-subsection :list=\"['primary', 'warning', 'error', 'success']\" @change=\"typeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<!-- #ifndef MP-WEIXIN -->\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义传入内容</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"slotChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<!-- #endif -->\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义尺寸</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"sizeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">步进值</view>\n\t\t\t\t<u-subsection :list=\"['1', '10', '20']\" @change=\"stepChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">最大最小值</view>\n\t\t\t\t<u-subsection :list=\"['0-100', '40-80']\" @change=\"minMaxchange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tvalue: 30,\n\t\t\t\tuseSlot: false,\n\t\t\t\tsetp: 1,\n\t\t\t\tactiveColor: '#2979ff',\n\t\t\t\theight: 6,\n\t\t\t\tblockWidth: 30,\n\t\t\t\tstep: 1,\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 100\n\t\t\t};\n\t\t},\n\t\tonLoad() {\n\t\t\t\n\t\t},\n\t\tcomputed: {\n\t\t\tcurrent() {\n\t\t\t\treturn this.show ? 0 : 1;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\ttypeChange(index) {\n\t\t\t\tlet type = ['primary', 'warning', 'error', 'success'];\n\t\t\t\tthis.activeColor = this.$u.color[type[index]];\n\t\t\t},\n\t\t\tsizeChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.height = 4;\n\t\t\t\t\tthis.blockWidth = 30;\n\t\t\t\t} else {\n\t\t\t\t\tthis.height = 6;\n\t\t\t\t\tthis.blockWidth = 20;\n\t\t\t\t}\n\t\t\t},\n\t\t\tstepChange(index) {\n\t\t\t\tlet arr = ['1', '10', '20'];\n\t\t\t\tthis.step = arr[index];\n\t\t\t},\n\t\t\tslotChange(index) {\n\t\t\t\tthis.useSlot = !index;\n\t\t\t},\n\t\t\tminMaxchange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.min = 0;\n\t\t\t\t\tthis.max = 100;\n\t\t\t\t} else {\n\t\t\t\t\tthis.min = 40;\n\t\t\t\t\tthis.max = 80;\n\t\t\t\t}\n\t\t\t},\n\t\t\tend() {\n\t\t\t\t// console.log('end');\n\t\t\t},\n\t\t\tmoving() {\n\t\t\t\t// console.log('moving');\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style scoped lang=\"scss\">\n\t.badge-button {\n\t\tpadding: 4rpx 6rpx;\n\t\tbackground-color: $u-type-error;\n\t\tcolor: #fff;\n\t\tborder-radius: 10rpx;\n\t\tfont-size: 22rpx;\n\t\tline-height: 1;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsA/tabs/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<u-tabs v-if=\"control\" bg-color=\"#fafafa\" :bold=\"bold\" :active-color=\"activeColor\" :list=\"list\"\n\t\t\t\t@change=\"change\" :current=\"current\" :is-scroll=\"isScroll\" :offset=\"offset\"></u-tabs>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">模式选择</view>\n\t\t\t\t<u-subsection :current=\"sectionCurrent\" :list=\"['滚动', '非滚动']\" @change=\"modeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">标签个数(非滚动模式)</view>\n\t\t\t\t<u-subsection :list=\"['2', '3',  '4']\" @change=\"countChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">活动选项字颜色</view>\n\t\t\t\t<u-subsection mode=\"button\" :list=\"['primary', 'success', 'error', 'warning']\" @change=\"colorChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">字体加粗</view>\n\t\t\t\t<u-subsection mode=\"button\" :list=\"['是', '否']\" @change=\"boldChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tlist: [],\n\t\t\t\tdata: [{\n\t\t\t\t\tname: '关注',\n\t\t\t\t\tcount: 100\n\t\t\t\t}, {\n\t\t\t\t\tname:  '推荐',\n\t\t\t\t\tcount: 7\n\t\t\t\t}, {\n\t\t\t\t\tname: '电影'\n\t\t\t\t},{\n\t\t\t\t\tname: '电视剧'\n\t\t\t\t},{\n\t\t\t\t\tname: '小视频'\n\t\t\t\t}, {\n\t\t\t\t\tname:  '游戏'\n\t\t\t\t}, {\n\t\t\t\t\tname: '校园'\n\t\t\t\t},{\n\t\t\t\t\tname: '影视'\n\t\t\t\t},{\n\t\t\t\t\tname: '音乐'\n\t\t\t\t}],\n\t\t\t\tcurrent: 0,\n\t\t\t\tsectionCurrent: 0,\n\t\t\t\tisScroll: true,\n\t\t\t\ttabCountIndex: 0,\n\t\t\t\tactiveColor: this.$u.color['primary'],\n\t\t\t\tbold: true,\n\t\t\t\tcontrol: true,\n\t\t\t\toffset: [5, -5]\n\t\t\t}\n\t\t},\n\t\tonLoad() {\n\t\t\tthis.list = this.data;\n\t\t},\n\t\tmethods: {\n\t\t\tcountChange(index) {\n\t\t\t\tthis.sectionCurrent = 1;\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.list = [];\n\t\t\t\t\tthis.list.push(this.data[0]);\n\t\t\t\t\tthis.list.push(this.data[1]);\n\t\t\t\t\tthis.offset = [5, 60]\n\t\t\t\t} else if(index == 1) {\n\t\t\t\t\tthis.list = [];\n\t\t\t\t\tthis.list.push(this.data[0]);\n\t\t\t\t\tthis.list.push(this.data[1]);\n\t\t\t\t\tthis.list.push(this.data[2]);\n\t\t\t\t\tthis.offset = [5, 20]\n\t\t\t\t} else {\n\t\t\t\t\tthis.list = [];\n\t\t\t\t\tthis.list.push(this.data[0]);\n\t\t\t\t\tthis.list.push(this.data[1]);\n\t\t\t\t\tthis.list.push(this.data[2]);\n\t\t\t\t\tthis.list.push(this.data[3]);\n\t\t\t\t\tthis.offset = [5, 5]\n\t\t\t\t}\n\t\t\t\tthis.tabCountIndex = index;\n\t\t\t\tthis.isScroll = false;\n\t\t\t},\n\t\t\tchange(index) {\n\t\t\t\tthis.current = index;\n\t\t\t},\n\t\t\tmodeChange(index) {\n\t\t\t\tthis.control = false;\n\t\t\t\tthis.current = 0;\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.isScroll = true;\n\t\t\t\t\tthis.list = this.data;\n\t\t\t\t\tthis.offset = [5, -5]\n\t\t\t\t} else {\n\t\t\t\t\tthis.isScroll = false;\n\t\t\t\t\tthis.countChange(this.tabCountIndex);\n\t\t\t\t}\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.control = true;\n\t\t\t\t})\n\t\t\t},\n\t\t\tcolorChange(e) {\n\t\t\t\tlet color = 'primary';\n\t\t\t\tswitch(e) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tcolor = 'primary';break;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tcolor = 'success';break;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tcolor = 'error';break;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\tcolor = 'warning';break;\n\t\t\t\t}\n\t\t\t\tthis.activeColor = this.$u.color[color];\n\t\t\t},\n\t\t\tboldChange(e) {\n\t\t\t\tswitch(e) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tthis.bold = true;break;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tthis.bold = false;break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-config-wrap {\n\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsA/tag/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<u-tag :text=\"text\" :type=\"type\" :shape=\"shape\" :closeable=\"closeable\" :mode=\"mode\" @close=\"close\" @click=\"click\" :show=\"show\" :size=\"size\" />\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">参数配置</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">模式选择</view>\n\t\t\t\t<u-subsection :list=\"['light', 'dark', 'plain']\" @change=\"modeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">显示内容</view>\n\t\t\t\t<u-subsection :list=\"['蒹葭苍苍', '白露为霜', '在水一方']\" @change=\"textChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">主题选择</view>\n\t\t\t\t<u-subsection current=\"2\" :list=\"['primary', 'success', 'error', 'warning', 'info']\" @change=\"typeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">形状</view>\n\t\t\t\t<u-subsection :list=\"['square', 'circle', 'circleLeft', 'circleRight']\" @change=\"shapeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">尺寸</view>\n\t\t\t\t<u-subsection :list=\"['default', 'mini']\" @change=\"sizeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">关闭图标</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"closeableChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\ttext: '蒹葭苍苍',\n\t\t\tmode: 'light',\n\t\t\ttype: 'error',\n\t\t\tsize: 'default',\n\t\t\tshape: 'square',\n\t\t\tcloseable: true,\n\t\t\tshow: true\n\t\t};\n\t},\n\tmethods: {\n\t\tmodeChange(index) {\n\t\t\tthis.mode = index == 0 ? 'light' : index == 1 ? 'dark' : 'plain';\n\t\t},\n\t\ttextChange(index) {\n\t\t\tthis.text = index == 0 ? '蒹葭苍苍' : index == 1 ? '白露为霜' : '在水一方';\n\t\t},\n\t\ttypeChange(index) {\n\t\t\tthis.type = index == 0 ? 'primary' : index == 1 ? 'success' : index == 2 ? 'error' : index == 3 ? 'warning' : 'info';\n\t\t},\n\t\tshapeChange(index) {\n\t\t\tthis.shape = index == 0 ? 'square' : index == 1 ? 'circle' : index == 2 ? 'circleLeft' : 'circleRight';\n\t\t},\n\t\tsizeChange(index) {\n\t\t\tthis.size = index == 0 ? 'default' : 'mini';\n\t\t},\n\t\tcloseableChange(index) {\n\t\t\tthis.closeable = index == 0 ? true : false;\n\t\t},\n\t\tclick(index) {\n\t\t\tthis.$refs.uToast.show({\n\t\t\t\ttitle: `第${index + 1}个标签被点击`,\n\t\t\t\ttype: 'success'\n\t\t\t});\n\t\t},\n\t\tclose(index) {\n\t\t\tthis.$refs.uToast.show({\n\t\t\t\ttitle: `关闭图标被点击`,\n\t\t\t\ttype: 'success'\n\t\t\t});\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.u-demo {\n}\n</style>\n"
  },
  {
    "path": "pages/componentsA/test/index.vue",
    "content": "<template>\n    <u-form\n        :model=\"form\"\n        ref=\"uForm\"\n    >\n        <u-form-item label=\"姓名\">\n            <u-input v-model=\"form.name\" />\n        </u-form-item>\n        <u-form-item label=\"简介\">\n            <u-input v-model=\"form.intro\" />\n        </u-form-item>\n        <u-form-item label=\"性别\">\n            <u-input\n                v-model=\"form.sex\"\n                type=\"select\"\n            />\n        </u-form-item>\n        <u-form-item label=\"水果\">\n            <u-checkbox-group>\n                <u-checkbox\n                    v-model=\"item.checked\"\n                    v-for=\"(item, index) in checkboxList\"\n                    :key=\"index\"\n                    :name=\"item.name\"\n                >\n                    {{ item.name }}\n                </u-checkbox>\n            </u-checkbox-group>\n        </u-form-item>\n        <u-form-item label=\"味道\">\n            <u-radio-group v-model=\"radio\">\n                <u-radio\n                    v-for=\"(item, index) in radioList\"\n                    :key=\"index\"\n                    :name=\"item.name\"\n                    :disabled=\"item.disabled\"\n                >\n                    {{ item.name }}\n                </u-radio>\n            </u-radio-group>\n        </u-form-item>\n        <u-form-item label=\"开关\">\n            <u-switch\n                slot=\"right\"\n                v-model=\"switchVal\"\n            ></u-switch>\n        </u-form-item>\n    </u-form>\n</template>\n\n<script>\n    export default {\n        data() {\n            return {\n                form: {\n                    name: '',\n                    intro: '',\n                    sex: ''\n                },\n                checkboxList: [{\n                        name: '苹果',\n                        checked: false,\n                        disabled: false\n                    },\n                    {\n                        name: '雪梨',\n                        checked: false,\n                        disabled: false\n                    },\n                    {\n                        name: '柠檬',\n                        checked: false,\n                        disabled: false\n                    }\n                ],\n                radioList: [{\n                        name: '鲜甜',\n                        disabled: false\n                    },\n                    {\n                        name: '麻辣',\n                        disabled: false\n                    }\n                ],\n                radio: '',\n                switchVal: false\n            };\n        }\n    };\n</script>\n"
  },
  {
    "path": "pages/componentsA/timeLine/index.vue",
    "content": "<template>\n\t<view class=\"wrap\">\n\t\t<u-time-line>\n\t\t\t<u-time-line-item nodeTop=\"2\">\n\t\t\t\t<template v-slot:node>\n\t\t\t\t\t<view class=\"u-node\" style=\"background: #19be6b;\">\n\t\t\t\t\t\t<u-icon name=\"pushpin-fill\" color=\"#fff\" :size=\"24\"></u-icon>\n\t\t\t\t\t</view>\n\t\t\t\t</template>\n\t\t\t\t<template v-slot:content>\n\t\t\t\t\t<view>\n\t\t\t\t\t\t<view class=\"u-order-title\">待取件</view>\n\t\t\t\t\t\t<view class=\"u-order-desc\">[自提柜]您的快件已放在楼下侧门，直走前方53.6米，左拐约10步，再右拐直走，见一红灯笼停下，叩门三下，喊“芝麻开门”即可。</view>\n\t\t\t\t\t\t<view class=\"u-order-time\">2019-05-08 12:12</view>\n\t\t\t\t\t</view>\n\t\t\t\t</template>\n\t\t\t</u-time-line-item>\n\t\t\t<u-time-line-item nodeTop=\"2\">\n\t\t\t\t<template v-slot:node>\n\t\t\t\t\t<view class=\"u-node\">\n\t\t\t\t\t\t<u-icon name=\"account-fill\" color=\"#fff\" :size=\"24\"></u-icon>\n\t\t\t\t\t</view>\n\t\t\t\t</template>\n\t\t\t\t<template v-slot:content>\n\t\t\t\t\t<view>\n\t\t\t\t\t\t<view class=\"u-order-title unacive\">派送中</view>\n\t\t\t\t\t\t<view class=\"u-order-desc\">【深圳市】快件已到达目的地，派件员为国产锦衣卫007号，电话：<text class=\"tel\">13833882438</text>，请留意快递信息</view>\n\t\t\t\t\t\t<view class=\"u-order-time\">2019-05-08 06:03</view>\n\t\t\t\t\t</view>\n\t\t\t\t</template>\n\t\t\t</u-time-line-item>\n\t\t\t<u-time-line-item nodeTop=\"2\">\n\t\t\t\t<template v-slot:node>\n\t\t\t\t\t<view class=\"u-node\">\n\t\t\t\t\t\t<u-icon name=\"car-fill\" color=\"#fff\" :size=\"24\"></u-icon>\n\t\t\t\t\t</view>\n\t\t\t\t</template>\n\t\t\t\t<template v-slot:content>\n\t\t\t\t\t<view>\n\t\t\t\t\t\t<view class=\"u-order-title unacive\">运输中</view>\n\t\t\t\t\t\t<view class=\"u-order-desc\">【深圳市】快递已到达 深圳固戍一部</view>\n\t\t\t\t\t\t<view class=\"u-order-time\">2019-05-07 08:05</view>\n\t\t\t\t\t</view>\n\t\t\t\t</template>\n\t\t\t</u-time-line-item>\n\t\t\t<u-time-line-item>\n\t\t\t\t<template v-slot:content>\n\t\t\t\t\t<view>\n\t\t\t\t\t\t<view class=\"u-order-desc\">【深圳市】快件已从深圳运转中心发出，正在发往深圳宝安一部</view>\n\t\t\t\t\t\t<view class=\"u-order-time\">2019-12-06 22:30</view>\n\t\t\t\t\t</view>\n\t\t\t\t</template>\n\t\t\t</u-time-line-item>\n\t\t\t<u-time-line-item>\n\t\t\t\t<template v-slot:content>\n\t\t\t\t\t<view>\n\t\t\t\t\t\t<view class=\"u-order-desc\">【深圳市】快件已到达 深圳运转中心</view>\n\t\t\t\t\t\t<view class=\"u-order-time\">2019-12-04 16:42</view>\n\t\t\t\t\t</view>\n\t\t\t\t</template>\n\t\t\t</u-time-line-item>\n\t\t\t<u-time-line-item>\n\t\t\t\t<template v-slot:content>\n\t\t\t\t\t<view>\n\t\t\t\t\t\t<view class=\"u-order-desc\">【郑州市】快件已从郑州运转中心出发，正在发往深圳运转中心</view>\n\t\t\t\t\t\t<view class=\"u-order-time\">2019-12-02 12:55</view>\n\t\t\t\t\t</view>\n\t\t\t\t</template>\n\t\t\t</u-time-line-item>\n\t\t\t<u-time-line-item>\n\t\t\t\t<template v-slot:content>\n\t\t\t\t\t<view>\n\t\t\t\t\t\t<view class=\"u-order-desc\">【郑州市】快件已到达 郑州运转中心</view>\n\t\t\t\t\t\t<view class=\"u-order-time\">2019-12-02 08:23</view>\n\t\t\t\t\t</view>\n\t\t\t\t</template>\n\t\t\t</u-time-line-item>\n\t\t\t<u-time-line-item nodeTop=\"0\">\n\t\t\t\t<template v-slot:node>\n\t\t\t\t\t<view class=\"u-node\">\n\t\t\t\t\t\t<u-icon name=\"file-text-fill\" color=\"#fff\" :size=\"24\"></u-icon>\n\t\t\t\t\t</view>\n\t\t\t\t</template>\n\t\t\t\t<template v-slot:content>\n\t\t\t\t\t<view>\n\t\t\t\t\t\t<view class=\"u-order-desc\">您购买的商品【尚方宝剑，先斩后奏】，经由北京军区仓库发货，国内快递承运人【中南海保镖】。</view>\n\t\t\t\t\t\t<view class=\"u-order-time\">2019-12-01 07:00</view>\n\t\t\t\t\t</view>\n\t\t\t\t</template>\n\t\t\t</u-time-line-item>\n\t\t</u-time-line>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.wrap {\n\t\tpadding: 24rpx 24rpx 24rpx 40rpx;\n\t}\n\t\n\t.u-node {\n\t\twidth: 44rpx;\n\t\theight: 44rpx;\n\t\tborder-radius: 100rpx;\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\tbackground: #d0d0d0;\n\t}\n\t\n\t.u-order-title {\n\t\tcolor: #333333;\n\t\tfont-weight: bold;\n\t\tfont-size: 32rpx;\n\t}\n\t\n\t.u-order-title.unacive {\n\t\tcolor: rgb(150, 150, 150);\n\t}\n\t\n\t.u-order-desc {\n\t\tcolor: rgb(150, 150, 150);\n\t\tfont-size: 28rpx;\n\t\tmargin-bottom: 6rpx;\n\t}\n\t\n\t.u-order-time {\n\t\tcolor: rgb(200, 200, 200);\n\t\tfont-size: 26rpx;\n\t}\n\t\n\t.tel {\n\t\tcolor: $u-type-primary;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsA/toast/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast :type=\"type\" ref=\"uToast\"></u-toast>\n\t\t\t\t<text class=\"no-mode-here\">见弹出toast</text>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">主题</view>\n\t\t\t\t<u-subsection :current=\"4\" :list=\"['primary', 'success', 'error', 'warning', 'default']\" @change=\"typeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">结束后自动跳转</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"urlChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">位置</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['顶部', '中部', '底部']\" @change=\"positionChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">显示图标</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"iconChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttype: 'success',\n\t\t\t\ttitle: '桃花潭水深千尺',\n\t\t\t\ticon: true,\n\t\t\t\tposition: 'center',\n\t\t\t\turl: '',\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\ttypeChange(index) {\n\t\t\t\tthis.type = index == 0 ? 'primary' : index == 1 ? 'success' : index == 2 ? 'error' : index == 3 ? 'warning'  : 'default';\n\t\t\t\tthis.show();\n\t\t\t},\n\t\t\tpositionChange(index) {\n\t\t\t\tthis.position = index == 0 ? 'top' : index == 1 ? 'center' : 'bottom';\n\t\t\t\tthis.show();\n\t\t\t},\n\t\t\ticonChange(index) {\n\t\t\t\tthis.icon = index == 0 ? true : false;\n\t\t\t\tthis.show();\n\t\t\t},\n\t\t\turlChange(index) {\n\t\t\t\tthis.url = index == 0 ? '/pages/components/button/index' : '';\n\t\t\t\tthis.show();\n\t\t\t},\n\t\t\tshow() {\n\t\t\t\tthis.$refs.uToast.show({\n\t\t\t\t\ttitle: this.title,\n\t\t\t\t\tposition: this.position,\n\t\t\t\t\ttype: this.type,\n\t\t\t\t\ticon: this.icon,\n\t\t\t\t\turl: this.url,\n\t\t\t\t});\n\t\t\t},\n\t\t\thide() {\n\t\t\t\tthis.$refs.uToast.hide();\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.no-mode-here {\n\t\tcolor: $u-tips-color;\n\t\tfont-size: 28rpx;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsA/topTips/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-top-tips ref=\"uTips\"></u-top-tips>\n\t\t\t\t<text class=\"u-no-demo-here\">点击参数配置查看效果</text>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">主题选择</view>\n\t\t\t\t<u-subsection :list=\"['primary', 'success', 'error', 'warning', 'info']\" @change=\"typeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">显示时间</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['长', '正常', '短']\" @change=\"durationChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tduration: 2000,\n\t\t\t\ttitle: '忽如一夜春风来，千树万树梨花开',\n\t\t\t\ttype: 'primary'\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tshowTips() {\n\t\t\t\tthis.$refs.uTips.show({\n\t\t\t\t\tduration: this.duration,\n\t\t\t\t\ttitle: this.title,\n\t\t\t\t\ttype: this.type\n\t\t\t\t});\n\t\t\t},\n\t\t\ttypeChange(index) {\n\t\t\t\tthis.type = index == 0 ? 'primary' : index == 1 ? 'success' : index == 2 ? 'error' : index == 3 ? 'warning'  : 'info';\n\t\t\t\tthis.showTips();\n\t\t\t},\n\t\t\tdurationChange(index) {\n\t\t\t\tthis.duration = index == 0 ? 4000 : index == 1 ? 2000 : 500;\n\t\t\t\tthis.showTips();\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>"
  },
  {
    "path": "pages/componentsA/verificationCode/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<u-verification-code :keep-running=\"true\" :seconds=\"seconds\" @end=\"end\" @start=\"start\" ref=\"uCode\" \n\t\t\t\t@change=\"codeChange\" :startText=\"startText\" :changeText=\"changeText\" \n\t\t\t\t:endText=\"endText\"></u-verification-code>\n\t\t\t\t<u-button @click=\"getCode\">{{tips}}</u-button>\n\t\t\t\t<u-button :custom-style=\"{marginTop: '30rpx'}\" @tap=\"reset\" style=\"margin-top: 30rpx;\">重置</u-button>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">倒计时间</view>\n\t\t\t\t<u-subsection :current=\"0\" :list=\"['60s', '10s', '5s']\" @change=\"secondsChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义提示语</view>\n\t\t\t\t<u-subsection :current=\"1\" :list=\"['是', '否']\" @change=\"textChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttips: '',\n\t\t\t\tseconds: 60,\n\t\t\t\trefCode: null,\n\t\t\t\tstartText: '获取验证码',\n\t\t\t\tchangeText: 'X秒重新获取',\n\t\t\t\tendText: '重新获取'\n\t\t\t}\n\t\t},\n\t\tonReady() {\n\t\t\t// 注意这里为错误示例，目前微信小程序最新稳定版开发工具如此\n\t\t\t// 赋值会报错，很诡异，其他端无此问题\n\t\t\t// this.refCode = this.$refs.uCode;\n\t\t},\n\t\tmethods: {\n\t\t\tcodeChange(text) {\n\t\t\t\t// console.log(text);\n\t\t\t\tthis.tips = text;\n\t\t\t},\n\t\t\tgetCode() {\n\t\t\t\tif(this.$refs.uCode.canGetCode) {\n\t\t\t\t\t// 模拟向后端请求验证码\n\t\t\t\t\tuni.showLoading({\n\t\t\t\t\t\ttitle: '正在获取验证码'\n\t\t\t\t\t})\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tuni.hideLoading();\n\t\t\t\t\t\t// 这里此提示会被this.start()方法中的提示覆盖\n\t\t\t\t\t\tthis.$u.toast('验证码已发送');\n\t\t\t\t\t\t// 通知验证码组件内部开始倒计时\n\t\t\t\t\t\tthis.$refs.uCode.start();\n\t\t\t\t\t}, 2000);\n\t\t\t\t} else {\n\t\t\t\t\tthis.$u.toast('倒计时结束后再发送');\n\t\t\t\t}\n\t\t\t},\n\t\t\tsecondsChange(index) {\n\t\t\t\tthis.seconds = index == 0 ? 60 : index == 1 ? 10 : 5;\n\t\t\t},\n\t\t\ttextChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.startText = '点一下获取',\n\t\t\t\t\tthis.changeText = '重新获取Xs',\n\t\t\t\t\tthis.endText = '再次获取'\n\t\t\t\t} else {\n\t\t\t\t\tthis.startText = '获取验证码',\n\t\t\t\t\tthis.changeText = 'X秒重新获取',\n\t\t\t\t\tthis.endText = '重新获取'\n\t\t\t\t}\n\t\t\t},\n\t\t\tend() {\n\t\t\t\tthis.$u.toast('倒计时结束');\n\t\t\t},\n\t\t\tstart() {\n\t\t\t\tthis.$u.toast('倒计时开始');\n\t\t\t},\n\t\t\treset() {\n\t\t\t\tthis.$refs.uCode.reset();\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/componentsB/card/index.vue",
    "content": "<template>\n\t<view class=\"\">\n\t\t<view class=\"u-card-wrap\">\n\t\t\t<u-card @click=\"click\" @head-click=\"headClick\" :title=\"title\" :sub-title=\"subTitle\" :thumb=\"thumb\" :padding=\"padding\" :border=\"border\">\n\t\t\t\t<view class=\"\" slot=\"body\"> \n\t\t\t\t\t<view class=\"u-body-item u-flex u-border-bottom u-col-between u-p-t-0\">\n\t\t\t\t\t\t<view class=\"u-body-item-title u-line-2\">\n\t\t\t\t\t\t\t瓶身描绘的牡丹一如你初妆，冉冉檀香透过窗心事我了然，宣纸上走笔至此搁一半\n\t\t\t\t\t\t</view>\n\t\t\t\t\t\t<image src=\"https://img11.360buyimg.com/n7/jfs/t1/94448/29/2734/524808/5dd4cc16E990dfb6b/59c256f85a8c3757.jpg\" mode=\"aspectFill\"></image>\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"u-body-item u-flex u-row-between u-p-b-0\">\n\t\t\t\t\t\t<view class=\"u-body-item-title u-line-2\">\n\t\t\t\t\t\t\t釉色渲染仕女图韵味被私藏，而你嫣然的一笑如含苞待放\n\t\t\t\t\t\t</view>\n\t\t\t\t\t\t<image src=\"https://img12.360buyimg.com/n7/jfs/t1/102191/19/9072/330688/5e0af7cfE17698872/c91c00d713bf729a.jpg\" mode=\"aspectFill\"></image>\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"\" slot=\"foot\">\n\t\t\t\t\t<u-icon v-if=\"bottomSlot\" name=\"chat-fill\" size=\"34\" label=\"30评论\"></u-icon>\n\t\t\t\t</view>\n\t\t\t</u-card>\n\t\t</view>\n\t\t<view class=\"u-config-wrap u-demo\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">左上角图标</view>\n\t\t\t\t<u-subsection :list=\"['显示', '隐藏']\" @change=\"thumbChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">内边距</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['20', '30', '40']\" @change=\"paddingChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">底部</view>\n\t\t\t\t<u-subsection :list=\"['显示', '隐藏']\" @change=\"bottomChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">外边框</view>\n\t\t\t\t<u-subsection :list=\"['显示', '隐藏']\" @change=\"borderChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttitle: '素胚勾勒出青花，笔锋浓转淡',\n\t\t\t\tsubTitle: '2020-05-15',\n\t\t\t\tthumb: 'http://pic2.sc.chinaz.com/Files/pic/pic9/202002/hpic2119_s.jpg',\n\t\t\t\tpadding: 20,\n\t\t\t\tbottomSlot: true,\n\t\t\t\tborder: true\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tthumbChange(index) {\n\t\t\t\tthis.thumb = index == 0 ? 'http://pic2.sc.chinaz.com/Files/pic/pic9/202002/hpic2119_s.jpg' : '';\n\t\t\t},\n\t\t\tpaddingChange(index) {\n\t\t\t\tthis.padding = [20, 30, 40][index];\n\t\t\t},\n\t\t\tbottomChange(index) {\n\t\t\t\tthis.bottomSlot = !index;\n\t\t\t},\n\t\t\tborderChange(index) {\n\t\t\t\tthis.border = !index;\n\t\t\t},\n\t\t\tclick(index) {\n\t\t\t\tconsole.log(index);\n\t\t\t},\n\t\t\theadClick(index) {\n\t\t\t\tconsole.log(index);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t.u-demo {\n\t\tpadding-top: 0;\n\t}\n\t\n\t.u-card-wrap { \n\t\tbackground-color: $u-bg-color;\n\t\tpadding: 1px;\n\t}\n\t\n\t.u-body-item {\n\t\tfont-size: 32rpx;\n\t\tcolor: #333;\n\t\tpadding: 20rpx 10rpx;\n\t}\n\t\t\n\t.u-body-item image {\n\t\twidth: 120rpx;\n\t\tflex: 0 0 120rpx;\n\t\theight: 120rpx;\n\t\tborder-radius: 8rpx;\n\t\tmargin-left: 12rpx;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsB/checkbox/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"\">\n\t\t\t\t\t<u-checkbox-group :size=\"size\" :width=\"width\" \n\t\t\t\t\t\t:wrap=\"wrap\" :max=\"max\" \n\t\t\t\t\t\t@change=\"checkboxGroupChange\" \n\t\t\t\t\t\t:activeColor=\"activeColor\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<u-checkbox @change=\"checkboxChange\"\n\t\t\t\t\t\t\tv-model=\"item.checked\" v-for=\"(item, index) in list\" \n\t\t\t\t\t\t\t:key=\"index\" :name=\"item.name\"\n\t\t\t\t\t\t\t:shape=\"shape\"\n\t\t\t\t\t\t\t:disabled=\"item.disabled\"\n\t\t\t\t\t\t>{{item.name}}</u-checkbox>\n\t\t\t\t\t</u-checkbox-group>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t{{result.length ? `选中了\"${getResult}\"` : '请选择'}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">形状</view>\n\t\t\t\t<u-subsection :list=\"['方形', '圆形']\" @change=\"shapeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">整体大小(单位rpx)</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['30', '40', '50']\" @change=\"sizeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">激活颜色</view>\n\t\t\t\t<u-subsection :list=\"['primary', 'error', 'warning', 'success', 'info']\" @change=\"activeColorChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">默认选中第一个</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"defaultChooseChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">每个占一行</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"wrapChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">每个宽度50%</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"widthChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">最大选择数量</view>\n\t\t\t\t<u-subsection current=\"2\" :list=\"['1', '2', '3']\" @change=\"maxChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">禁用第一个</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"disabledChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tlist: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: '荔枝',\n\t\t\t\t\t\tchecked: false,\n\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: '香蕉',\n\t\t\t\t\t\tchecked: false,\n\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: '橙子',\n\t\t\t\t\t\tchecked: false,\n\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: '草莓',\n\t\t\t\t\t\tchecked: false,\n\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tdisabled: false,\n\t\t\t\tchecked: true,\n\t\t\t\tresult: [],\n\t\t\t\tshape: 'square',\n\t\t\t\tmax: 3,\n\t\t\t\tactiveColor: '#2979ff',\n\t\t\t\tsize: 34,\n\t\t\t\twrap: false,\n\t\t\t\twidth: 'auto'\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tgetResult() {\n\t\t\t\treturn this.result.join(\",\");\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tshapeChange(index) {\n\t\t\t\tthis.shape = index == 0 ? 'square' : 'circle';\n\t\t\t},\n\t\t\tsizeChange(index) {\n\t\t\t\tthis.size = index == 0 ? 30 : index == 1 ? 40 : 50;\n\t\t\t},\n\t\t\tdefaultChooseChange(index) {\n\t\t\t\t// 特别处理对第一个选的选中的情况，涉及到提示语，选中状态等\n\t\t\t\t// 实际开发中不会存在这些情况，只是演示用\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.list[0].checked = true;\n\t\t\t\t\tthis.result = [this.list[0].name];\n\t\t\t\t} else {\n\t\t\t\t\tthis.list[0].checked = false;\n\t\t\t\t\tthis.result.splice(this.result.indexOf(this.list[0].name), 1);\n\t\t\t\t}\n\t\t\t},\n\t\t\tmaxChange(index) {\n\t\t\t\tthis.max = index + 1;\n\t\t\t},\n\t\t\tdisabledChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.list[0].disabled = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.list[0].disabled = false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tactiveColorChange(index) {\n\t\t\t\t// 如果用户尚未勾选任何checkbox，切换颜色时，默认选中第一个让用户看到效果，因为勾选了才有效果\n\t\t\t\tif(!this.result.length) this.list[0].checked = true;\n\t\t\t\tlet theme = index == 0 ? 'primary' : index == 1 ? 'error' : index == 2 ? 'warning' : index == 3 ? 'success' : 'info';\n\t\t\t\tthis.activeColor = this.$u.color[theme];\n\t\t\t},\n\t\t\t// 选中某个复选框时，由checkbox时触发\n\t\t\tcheckboxChange(e) {\n\t\t\t\t// console.log(e);\n\t\t\t},\n\t\t\t// 选中任一checkbox时，由checkbox-group触发\n\t\t\tcheckboxGroupChange(e) {\n\t\t\t\tthis.result = e;\n\t\t\t},\n\t\t\twidthChange(index) {\n\t\t\t\tthis.width = index == 0 ? '50%' : '';\n\t\t\t},\n\t\t\twrapChange(index) {\n\t\t\t\tthis.wrap = !index;\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/componentsB/divider/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-divider :type=\"type\" :borderColor=\"borderColor\" :bg-color=\"bgColor\" @click=\"click\"\n\t\t\t\t:half-width=\"halfWidth\" :color=\"color\" :font-size=\"fontSize\">{{text}}</u-divider>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">提示内容</view>\n\t\t\t\t<u-subsection :list=\"['没有更多了', '到底了']\" @change=\"textChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">单边线宽</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['50', '150', '250']\" @change=\"halfWidthChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">横线颜色</view>\n\t\t\t\t<u-subsection :list=\"['#dcdfe6', 'primary', 'error', 'warning', 'success']\" @change=\"borderColorChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">内容样式</view>\n\t\t\t\t<u-subsection :list=\"['默认', '自定义']\" @change=\"contentChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttext: '没有更多了',\n\t\t\t\tbgColor: '#fafafa',\n\t\t\t\thalfWidth: 150,\n\t\t\t\tborderColor: '#dcdfe6',\n\t\t\t\ttype: 'primary',\n\t\t\t\tcolor: '#909399',\n\t\t\t\tfontSize: '26'\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\ttextChange(index) {\n\t\t\t\tthis.text = index == 0 ? '没有更多了' : '到底了';\n\t\t\t},\n\t\t\thalfWidthChange(index) {\n\t\t\t\tthis.halfWidth = index == 0 ? 50 : index == 1 ? 150 : 250;\n\t\t\t},\n\t\t\tborderColorChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.borderColor = '#dcdfe6';\n\t\t\t\t} else {\n\t\t\t\t\t// 因为border-color参数优先级高于type，要让type起作用，就需要设置border-color为空\n\t\t\t\t\tthis.borderColor = '';\n\t\t\t\t\tthis.type = index == 1 ? 'primary' : index == 2 ? 'error' : index == 3 ? 'warning' : 'success';\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontentChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\t this.color = '#909399';\n\t\t\t\t\t this.fontSize = 26;\n\t\t\t\t} else {\n\t\t\t\t\tthis.color = this.$u.color['primary'];\n\t\t\t\t\tthis.fontSize = 30;\n\t\t\t\t}\n\t\t\t},\n\t\t\tclick() {\n\t\t\t\tconsole.log('click');\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/componentsB/dropdown/index.vue",
    "content": "<template>\n\t<view class=\"\">\n\t\t<view class=\"u-m-p-50\">\n\t\t\t<view class=\"u-demo-area u-flex u-row-center\">\n\t\t\t\t<u-dropdown :close-on-click-mask=\"mask\" ref=\"uDropdown\" :activeColor=\"activeColor\" :borderBottom=\"borderBottom\">\n\t\t\t\t\t<u-dropdown-item @change=\"change\" v-model=\"value1\" title=\"距离\" :options=\"options1\"></u-dropdown-item>\n\t\t\t\t\t<u-dropdown-item @change=\"change\" v-model=\"value2\" title=\"温度\" :options=\"options2\"></u-dropdown-item>\n\t\t\t\t\t<u-dropdown-item title=\"属性\">\n\t\t\t\t\t\t<view class=\"slot-content\">\n\t\t\t\t\t\t\t<view class=\"item-box\">\n\t\t\t\t\t\t\t\t<view class=\"item\" :class=\"[item.active ? 'active' : '']\" @tap=\"tagClick(index)\" v-for=\"(item, index) in list\" :key=\"index\">\n\t\t\t\t\t\t\t\t\t{{item.label}}\n\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t<u-button type=\"primary\" @click=\"closeDropdown\">确定</u-button>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</u-dropdown-item>\n\t\t\t\t</u-dropdown>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">下边框</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['有', '无']\" @change=\"borderChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">激活颜色</view>\n\t\t\t\t<u-subsection :list=\"['#2979ff', '#ff9900', '#19be6b']\" @change=\"activeColorChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">遮罩是否可点击</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"maskChange\"></u-subsection>\n\t\t\t</view> \n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() { \n\t\t\treturn {\n\t\t\t\tvalue1: '',\n\t\t\t\tvalue2: '2',\n\t\t\t\tmask: true,\n\t\t\t\toptions1: [{\n\t\t\t\t\t\tlabel: '默认排序',\n\t\t\t\t\t\tvalue: 1,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: '距离优先',\n\t\t\t\t\t\tvalue: 2,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: '价格优先',\n\t\t\t\t\t\tvalue: 3,\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\toptions2: [{\n\t\t\t\t\t\tlabel: '去冰',\n\t\t\t\t\t\tvalue: 1,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: '加冰',\n\t\t\t\t\t\tvalue: 2,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: '正常温',\n\t\t\t\t\t\tvalue: 3,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: '加热',\n\t\t\t\t\t\tvalue: 4,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: '极寒风暴',\n\t\t\t\t\t\tvalue: 5,\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tlist: [{\n\t\t\t\t\t\tlabel: '琪花瑶草',\n\t\t\t\t\t\tactive: true,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: '清词丽句',\n\t\t\t\t\t\tactive: false,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: '宛转蛾眉',\n\t\t\t\t\t\tactive: false,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: '煦色韶光',\n\t\t\t\t\t\tactive: false,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: '鱼沉雁落',\n\t\t\t\t\t\tactive: false,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: '章台杨柳',\n\t\t\t\t\t\tactive: false,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: '霞光万道',\n\t\t\t\t\t\tactive: false,\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tborderBottom: false,\n\t\t\t\tactiveColor: '#2979ff'\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tborderChange(index) {\n\t\t\t\tthis.borderBottom = !index;\n\t\t\t},\n\t\t\tactiveColorChange(index) {\n\t\t\t\tthis.activeColor = ['#2979ff', '#ff9900', '#19be6b'][index];\n\t\t\t},\n\t\t\tchange(index) {\n\t\t\t\tthis.$u.toast(`点击了第${index}项`);\n\t\t\t},\n\t\t\tcloseDropdown() {\n\t\t\t\tthis.$refs.uDropdown.close();\n\t\t\t},\n\t\t\ttagClick(index) {\n\t\t\t\tthis.list[index].active = !this.list[index].active;\n\t\t\t},\n\t\t\tmaskChange(index) {\n\t\t\t\tthis.mask = !index;\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t.u-config-wrap {\n\t\tpadding: 40rpx;\n\t}\n\t\n\t.slot-content {\n\t\tbackground-color: #FFFFFF;\n\t\tpadding: 24rpx;\n\t\t\n\t\t.item-box {\n\t\t\tmargin-bottom: 50rpx;\n\t\t\tdisplay: flex;\n\t\t\tflex-wrap: wrap;\n\t\t\tjustify-content: space-between;\n\t\t\t\n\t\t\t.item {\n\t\t\t\tborder: 1px solid $u-type-primary;\n\t\t\t\tcolor: $u-type-primary;\n\t\t\t\tpadding: 8rpx 40rpx;\n\t\t\t\tborder-radius: 100rpx;\n\t\t\t\tmargin-top: 30rpx;\n\t\t\t}\n\t\t\t\n\t\t\t.active {\n\t\t\t\tcolor: #FFFFFF;\n\t\t\t\tbackground-color: $u-type-primary;\n\t\t\t}\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsB/image/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area u-flex u-row-center\">\n\t\t\t\t<u-image :shape=\"shape\" ref=\"uImage\" :width=\"width\" :height=\"height\" :src=\"src\" mode=\"aspectFill\">\n\t\t\t\t\t<u-loading size=\"44\" mode=\"flower\" slot=\"loading\" v-if=\"loadingSlot\"></u-loading>\n\t\t\t\t\t<view v-if=\"errorSlot\" slot=\"error\" style=\"font-size: 24rpx;\">加载失败</view>\n\t\t\t\t</u-image>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">参数配置</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">状态</view>\n\t\t\t\t<u-subsection :current=\"statusCurrent\" :list=\"['加载成功', '加载中', '加载失败']\" @change=\"statusChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<!-- 微信小程序中，无法动态切换slot，所以隐藏此部分的演示 -->\n\t\t\t<!-- #ifndef MP-WEIXIN -->\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">加载中状态</view>\n\t\t\t\t<u-subsection :list=\"['默认', '自定义']\" @change=\"loadingChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<!-- #endif -->\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">加载失败状态</view>\n\t\t\t\t<u-subsection :list=\"['默认', '自定义']\" @change=\"errorChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">形状</view>\n\t\t\t\t<u-subsection :list=\"['方形', '圆形']\" @change=\"shapeChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tsrc: 'https://cdn.uviewui.com/uview/example/fade.jpg',\n\t\t\twidth: '200',\n\t\t\theight: '200',\n\t\t\tloadingSlot: false,\n\t\t\tstatusCurrent: 0,\n\t\t\terrorSlot: false,\n\t\t\tshape: 'square'\n\t\t};\n\t},\n\tcomputed: {\n\t\t// statusCurrent() {\n\t\t// }\n\t},\n\tmethods: {\n\t\tstatusChange(index) {\n\t\t\t// 此处通过ref操作组件内部状态，仅是为了演示使用，实际中无需这些操作，由内部的图片加载事件自动完成\n\t\t\tif (index == 0) {\n\t\t\t\tthis.src = 'http://img5.imgtn.bdimg.com/it/u=2438062088,2808868405&fm=26&gp=0.jpg';\n\t\t\t\tthis.$refs.uImage.loading = false;\n\t\t\t\tthis.$refs.uImage.isError = false;\n\t\t\t} else if (index == 1) {\n\t\t\t\tthis.$refs.uImage.loading = true;\n\t\t\t} else {\n\t\t\t\tthis.$refs.uImage.loading = false;\n\t\t\t\tthis.$refs.uImage.isError = true;\n\t\t\t}\n\t\t},\n\t\tloadingChange(index) {\n\t\t\tthis.statusCurrent = 1;\n\t\t\tthis.statusChange(1);\n\t\t\tif (index == 0) {\n\t\t\t\tthis.loadingSlot = false;\n\t\t\t} else {\n\t\t\t\tthis.loadingSlot = true;\n\t\t\t}\n\t\t},\n\t\terrorChange(index) {\n\t\t\tthis.statusCurrent = 2;\n\t\t\tthis.statusChange(2);\n\t\t\tif (index == 0) {\n\t\t\t\tthis.errorSlot = false;\n\t\t\t} else {\n\t\t\t\tthis.errorSlot = true;\n\t\t\t}\n\t\t},\n\t\tshapeChange(index) {\n\t\t\tthis.shape = index == 0 ? 'square' : 'circle';\n\t\t}\n\t}\n};\n</script>\n\n<style scoped lang=\"scss\">\n.u-demo-area {\n}\n</style>\n"
  },
  {
    "path": "pages/componentsB/line/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area u-flex u-row-center\">\n\t\t\t\t<!-- 头条小程序因为兼容性，必须要给组件写上u-line类 -->\n\t\t\t\t<u-line class=\"u-line\" :border-style=\"borderStyle\" color=\"red\" :color=\"color\" :length=\"length\" :direction=\"direction\" :hair-line=\"hairLine\"></u-line>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">颜色</view>\n\t\t\t\t<u-subsection :list=\"['primary', 'success', 'warning', 'error', 'info']\" @change=\"colorChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">线条类型</view>\n\t\t\t\t<u-subsection :list=\"['实线', '方形虚线', '圆点虚线']\" @change=\"borderStyleChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">细边</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"hairLineChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">方向</view>\n\t\t\t\t<u-subsection :list=\"['水平', '垂直']\" @change=\"directionChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tdirection: 'row',\n\t\t\t\thairLine: true,\n\t\t\t\tlength: '100%',\n\t\t\t\tcolor: this.$u.color['primary'],\n\t\t\t\tborderStyle: 'solid'\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tcolorChange(index) {\n\t\t\t\tthis.color = this.$u.color[['primary', 'success', 'warning', 'error', 'info'][index]];\n\t\t\t},\n\t\t\thairLineChange(index) {\n\t\t\t\tthis.hairLine = !index;\n\t\t\t},\n\t\t\tdirectionChange(index) {\n\t\t\t\tthis.direction = index == 0 ? 'row' : 'col';\n\t\t\t\tif(index == 0) this.length = '100%';\n\t\t\t\telse this.length = '50rpx';\n\t\t\t},\n\t\t\tborderStyleChange(index) {\n\t\t\t\tthis.borderStyle = ['solid', 'dashed', 'dotted'][index];\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t.u-demo-area {\n\t\t\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsB/loading/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-loading :mode=\"mode\" :show=\"show\" :color=\"color\" :size=\"size\"></u-loading>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">模式</view>\n\t\t\t\t<u-subsection :list=\"['圆圈', '花朵']\" @change=\"modeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">颜色(只对圆圈模式有效)</view>\n\t\t\t\t<u-subsection :list=\"['default', 'primary', 'error', 'warning', 'success']\" @change=\"colorChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">尺寸(单位rpx)</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['28', '34', '40']\" @change=\"sizeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">是否显示</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['否', '是']\" @change=\"showChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tmode: 'circle',\n\t\t\t\tcolor: '#c7c7c7',\n\t\t\t\tsize: '34', \n\t\t\t\tshow: true\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tmodeChange(index) {\n\t\t\t\tthis.mode = index == 0 ? 'circle' : 'flower';\n\t\t\t},\n\t\t\tcolorChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.color = '#c7c7c7';\n\t\t\t\t} else {\n\t\t\t\t\tlet color = index == 1 ? 'primary' : index == 2 ? 'error' : index == 3 ? 'warning' : 'success';\n\t\t\t\t\tthis.color = this.$u.color[color];\n\t\t\t\t}\n\t\t\t},\n\t\t\tsizeChange(index) {\n\t\t\t\tthis.size = index == 0 ? '28' : index == 1 ? '34' : '40';\n\t\t\t},\n\t\t\tshowChange(index) {\n\t\t\t\t// 两个!!可以把0变成false，1变成true\n\t\t\t\tthis.show = !!index;\n\t\t\t},\n\t\t\t// 选中某个复选框时，由checkbox时触发\n\t\t\tcheckboxChange(e) {\n\t\t\t\t//console.log(e);\n\t\t\t},\n\t\t\t// 选中任一checkbox时，由checkbox-group触发\n\t\t\tcheckboxGroupChange(e) {\n\t\t\t\tthis.result = e;\n\t\t\t\t// console.log(this.result);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/componentsB/noticeBar/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast :type=\"type\" ref=\"uToast\"></u-toast>\n\t\t\t\t<u-notice-bar :autoplay=\"autoplay\" :playState=\"playState\" :speed=\"speed\" @getMore=\"getMore\" \n\t\t\t\t:mode=\"mode\" @end=\"end\" @close=\"close\" @click=\"click\" :show=\"show\" :type=\"type\" :list=\"list\"\n\t\t\t\t:moreIcon=\"moreIcon\" :volumeIcon=\"volumeIcon\" :duration=\"duration\" :isCircular=\"isCircular\"></u-notice-bar>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">主题</view>\n\t\t\t\t<u-subsection :current=\"3\" :list=\"['primary', 'success', 'error', 'warning', 'none']\" @change=\"typeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">滚动模式</view>\n\t\t\t\t<u-subsection :current=\"current\" :list=\"['水平', '垂直']\" @change=\"modeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">是否衔接(水平模式有效)</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"isCircularChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">状态</view>\n\t\t\t\t<u-subsection :list=\"['播放', '暂停']\" @change=\"playStateChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">速度</view>\n\t\t\t\t<u-subsection :current=\"1\" :list=\"['慢', '正常', '快']\" @change=\"speedChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">图标</view>\n\t\t\t\t<u-subsection :list=\"['显示', '隐藏']\" @change=\"iconChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tshow: true,\n\t\t\t\tautoplay: false,\n\t\t\t\ttype: 'warning',\n\t\t\t\tlist: [\n\t\t\t\t\t'锦瑟无端五十弦，一弦一柱思华年',\n\t\t\t\t\t'庄生晓梦迷蝴蝶，望帝春心托杜鹃',\n\t\t\t\t\t'沧海月明珠有泪，蓝田日暖玉生烟'\n\t\t\t\t],\n\t\t\t\tmode: 'horizontal',\n\t\t\t\tplayState: 'play',\n\t\t\t\tspeed: 160,\n\t\t\t\tduration: 2000,\n\t\t\t\tmoreIcon: true,\n\t\t\t\tvolumeIcon: true,\n\t\t\t\tisCircular: true,\n\t\t\t\tcurrent: 0\n\t\t\t}\n\t\t},\n\t\tonLoad() {\n\t\t\t\n\t\t},\n\t\tmethods: {\n\t\t\ttypeChange(index) {\n\t\t\t\tlet type = ['primary', 'success', 'error', 'warning', 'none'];\n\t\t\t\tthis.type = type[index];\n\t\t\t},\n\t\t\tmodeChange(index) {\n\t\t\t\tthis.current = index;\n\t\t\t\tthis.mode = index == 0 ? 'horizontal' : 'vertical';\n\t\t\t},\n\t\t\tplayStateChange(index) {\n\t\t\t\tthis.playState = index == 0 ? 'play' : 'paused';\n\t\t\t},\n\t\t\tspeedChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.speed = 50;\n\t\t\t\t\t\tthis.duration = 6000;\n\t\t\t\t\t})\n\t\t\t\t} else if(index == 1) {\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.speed = 160;\n\t\t\t\t\t\tthis.duration = 2000;\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.speed = 350;\n\t\t\t\t\t\tthis.duration = 400;\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t},\n\t\t\ticonChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.moreIcon = true;\n\t\t\t\t\tthis.volumeIcon = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.moreIcon = false;\n\t\t\t\t\tthis.volumeIcon = false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tisCircularChange(index) {\n\t\t\t\tthis.isCircular = index == 0 ? true : false;\n\t\t\t\tthis.current = 0;\n\t\t\t\tthis.mode = 'horizontal';\n\t\t\t},\n\t\t\tclose() {\n\t\t\t\tthis.toast(`点击了关闭图标`);\n\t\t\t},\n\t\t\tclick(index) {\n\t\t\t\tif(this.mode == 'horizontal' && this.isCircular) {\n\t\t\t\t\tthis.toast('此模式无法获取Index值');\n\t\t\t\t} else {\n\t\t\t\t\tthis.toast(`点击了第${index + 1}条消息`);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t},\n\t\t\tgetMore() {\n\t\t\t\tthis.toast(`点击了更多图标`);\n\t\t\t},\n\t\t\ttoast(title) {\n\t\t\t\tthis.$refs.uToast.show({\n\t\t\t\t\ttitle: title,\n\t\t\t\t\ttype: 'warning'\n\t\t\t\t})\n\t\t\t},\n\t\t\tend() {\n\t\t\t\t// console.log('end');\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.item {\n\t\tmargin-top: 30px;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsB/picker/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-demo-result-line\">{{ input ? input : 'Picker值' }}</view>\n\t\t\t\t<u-picker\n\t\t\t\t\t:mode=\"mode\"\n\t\t\t\t\t:defaultTime=\"defaultTime\"\n\t\t\t\t\tv-model=\"show\"\n\t\t\t\t\t:defaultRegion=\"defaultRegion\"\n\t\t\t\t\t:params=\"params\"\n\t\t\t\t\tend-year=\"2030\"\n\t\t\t\t\t@confirm=\"confirm\"\n\t\t\t\t\t:defaultSelector=\"defaultSelector\"\n\t\t\t\t\t:range=\"range\"\n\t\t\t\t\t:range-key=\"rangKey\"\n\t\t\t\t\t@columnchange=\"columnchange\"\n\t\t\t\t></u-picker>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">参数配置</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">Picker开关</view>\n\t\t\t\t<u-subsection :current=\"status\" :list=\"['显示', '隐藏']\" @change=\"statusChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">模式选择</view>\n\t\t\t\t<u-subsection :list=\"['单列', '多列', '时间', '地区']\" @change=\"modeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">默认时间</view>\n\t\t\t\t<u-subsection :list=\"['2019-12-11 20:15:35', '2020-02-05 13:09:42']\" @change=\"defaultTimeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">显示时分秒</view>\n\t\t\t\t<u-subsection :list=\"['显示', '隐藏']\" @change=\"minSecChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">默认地区</view>\n\t\t\t\t<u-subsection :list=\"['广东-深圳-宝安', '海南-三亚-海棠']\" @change=\"defaultRegionChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tshow: false,\n\t\t\tinput: '',\n\t\t\trangKey: 'name',\n\t\t\tmode: 'selector',\n\t\t\trange: ['一', '片', '冰', '心', '在', '玉', '壶'],\n\t\t\tdefaultTime: '2019-12-11 20:15:35',\n\t\t\tdefaultSelector: [0],\n\t\t\tdefaultRegion: ['广东省', '深圳市', '宝安区'],\n\t\t\tparams: {\n\t\t\t\tyear: true,\n\t\t\t\tmonth: true,\n\t\t\t\tday: true,\n\t\t\t\thour: true,\n\t\t\t\tminute: true,\n\t\t\t\tsecond: true,\n\t\t\t\tprovince: true,\n\t\t\t\tcity: true,\n\t\t\t\tarea: true,\n\t\t\t\ttimestamp: true\n\t\t\t}\n\t\t};\n\t},\n\tcomputed: {\n\t\tstatus() {\n\t\t\treturn this.show == true ? 0 : 1;\n\t\t}\n\t},\n\tmethods: {\n\t\tstatusChange(index) {\n\t\t\tthis.show = index == 0 ? true : false;\n\t\t},\n\t\tmodeChange(index) {\n\t\t\tthis.mode = ['selector', 'multiSelector', 'time', 'region'][index];\n\t\t\tif (this.mode == 'selector') {\n\t\t\t\tthis.range = ['一', '片', '冰', '心', '在', '玉', '壶'];\n\t\t\t\tthis.defaultSelector = [0];\n\t\t\t}\n\t\t\tif (this.mode == 'multiSelector') {\n\t\t\t\tthis.range = [['亚洲', '欧洲'], ['中国', '日本'], ['北京', '上海', '广州']];\n\t\t\t\tthis.defaultSelector = [0, 0, 0];\n\t\t\t}\n\t\t\tthis.show = true;\n\t\t},\n\t\tdefaultTimeChange(index) {\n\t\t\tthis.defaultTime = index == 0 ? '2019-12-11 20:15:35' : '2020-02-05 13:09:42';\n\t\t\tthis.mode = 'time';\n\t\t\tthis.show = true;\n\t\t},\n\t\tdefaultRegionChange(index) {\n\t\t\tthis.defaultRegion = index == 0 ? ['广东省', '深圳市', '宝安区'] : ['海南省', '三亚市', '海棠区'];\n\t\t\tthis.mode = 'region';\n\t\t\tthis.show = true;\n\t\t},\n\t\tminSecChange(index) {\n\t\t\tif (index == 0) {\n\t\t\t\tthis.params.hour = true;\n\t\t\t\tthis.params.minute = true;\n\t\t\t\tthis.params.second = true;\n\t\t\t}\n\t\t\tif (index == 1) {\n\t\t\t\tthis.params.hour = false;\n\t\t\t\tthis.params.minute = false;\n\t\t\t\tthis.params.second = false;\n\t\t\t}\n\t\t\tthis.mode = 'time';\n\t\t\tthis.show = true;\n\t\t},\n\t\tconfirm(e) {\n\t\t\t// console.log(e);\n\t\t\tthis.input = '';\n\t\t\tif (this.mode == 'time') {\n\t\t\t\tif (this.params.year) this.input += e.year;\n\t\t\t\tif (this.params.month) this.input += '-' + e.month;\n\t\t\t\tif (this.params.day) this.input += '-' + e.day;\n\t\t\t\tif (this.params.hour) this.input += ' ' + e.hour;\n\t\t\t\tif (this.params.minute) this.input += ':' + e.minute;\n\t\t\t\tif (this.params.second) this.input += ':' + e.second;\n\t\t\t} else if (this.mode == 'region') {\n\t\t\t\tthis.input = e.province.label + '-' + e.city.label + '-' + e.area.label;\n\t\t\t} else if (this.mode == 'selector') {\n\t\t\t\tthis.input = this.range[e[0]];\n\t\t\t} else if (this.mode == 'multiSelector') {\n\t\t\t\tthis.input = this.range[0][e[0]] + '-' + this.range[1][e[1]] + '-' + this.range[2][e[2]];\n\t\t\t}\n\t\t},\n\t\tcolumnchange(e) {\n\t\t\tlet column = e.column, index = e.index;\n\t\t\tthis.defaultSelector[column] = index;\n\t\t\tswitch (column) {\n\t\t\t\tcase 0: \n\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\tthis.range[1] = ['中国', '日本']\n\t\t\t\t\t\t\tthis.range[2] = ['北京', '上海', '广州']\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\tthis.range[1] = ['英国', '法国']\n\t\t\t\t\t\t\tthis.range[2] = ['伦敦', '曼彻斯特']\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tthis.defaultSelector.splice(1, 1, 0)\n\t\t\t\t\tthis.defaultSelector.splice(2, 1, 0)\n\t\t\t\t\tbreak\n\t\t\t\tcase 1: //拖动第2列\n\t\t\t\t\tswitch (this.defaultSelector[0]) { //判断第一列是什么\n\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\tswitch (this.defaultSelector[1]) {\n\t\t\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t\t\tthis.range[2] = ['北京', '上海', '广州']\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t\t\tthis.range[2] = ['东京','北海道']\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\tswitch (this.defaultSelector[1]) {\n\t\t\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t\t\tthis.range[2] = ['伦敦', '曼彻斯特']\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t\t\tthis.range[2] = ['巴黎', '马赛']\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tthis.defaultSelector.splice(2, 1, 0)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.input {\n\tborder: 1px solid $u-light-color;\n\tborder-radius: 4px;\n\tmargin-bottom: 20px;\n\theight: 30px;\n\tfont-size: 26rpx;\n\tflex: 1;\n}\n\n.input-wrap {\n\tdisplay: flex;\n}\n</style>\n"
  },
  {
    "path": "pages/componentsB/radio/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"\">\n\t\t\t\t\t<u-radio-group :shape=\"shape\" :size=\"size\" :width=\"width\" :wrap=\"wrap\" v-model=\"value\" @change=\"radioGroupChange\" :activeColor=\"activeColor\">\n\t\t\t\t\t\t<u-radio @change=\"radioChange\" v-for=\"(item, index) in list\" :disabled=\"item.disabled\"\n\t\t\t\t\t\t\t:key=\"index\" :name=\"item.name\"\n\t\t\t\t\t\t>{{item.name}}</u-radio>\n\t\t\t\t\t</u-radio-group>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t{{value ? `选中了\"${result}\"` : '请选择'}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">形状</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['方形', '圆形']\" @change=\"shapeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">整体大小(单位rpx)</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['30', '40', '50']\" @change=\"sizeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">激活颜色</view>\n\t\t\t\t<u-subsection :list=\"['primary', 'error', 'warning', 'success', 'info']\" @change=\"activeColorChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">每个占一行</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"wrapChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">每个宽度50%</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"widthChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">默认选中第一个</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"defaultChooseChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">禁用第一个</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"disabledChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tlist: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: '荔枝',\n\t\t\t\t\t\tchecked: true,\n\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: '香蕉',\n\t\t\t\t\t\tchecked: false,\n\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: '橙子',\n\t\t\t\t\t\tchecked: false,\n\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: '草莓',\n\t\t\t\t\t\tchecked: false,\n\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tdisabled: false,\n\t\t\t\tresult: '荔枝',\n\t\t\t\tshape: 'circle', \n\t\t\t\tvalue: '荔枝',\n\t\t\t\tactiveColor: '#2979ff',\n\t\t\t\tsize: 34,\n\t\t\t\twrap: false,\n\t\t\t\twidth: 'auto'\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tshapeChange(index) {\n\t\t\t\tthis.shape = index == 0 ? 'square' : 'circle';\n\t\t\t},\n\t\t\tsizeChange(index) {\n\t\t\t\tthis.size = index == 0 ? 30 : index == 1 ? 40 : 50;\n\t\t\t},\n\t\t\tdefaultChooseChange(index) {\n\t\t\t\t// 特别处理对第一个选的选中的情况，涉及到提示语，选中状态等\n\t\t\t\t// 实际开发中不会存在这些情况，只是演示用\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.result = this.value = this.list[0].name;\n\t\t\t\t} else {\n\t\t\t\t\tif(this.value == this.list[0].name) {\n\t\t\t\t\t\tthis.result = this.value = '';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tactiveColorChange(index) {\n\t\t\t\t// 如果用户尚未勾选任何radio，切换颜色时，默认选中第一个让用户看到效果，因为勾选了才有效果\n\t\t\t\tif(!this.result) this.result = this.value = this.list[0].name;\n\t\t\t\tlet theme = index == 0 ? 'primary' : index == 1 ? 'error' : index == 2 ? 'warning' : index == 3 ? 'success' : 'info';\n\t\t\t\tthis.activeColor = this.$u.color[theme];\n\t\t\t},\n\t\t\tdisabledChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.list[0].disabled = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.list[0].disabled = false;\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 选中某个单选框时，由radio时触发\n\t\t\tradioChange(e) {\n\t\t\t\t//console.log(e);\n\t\t\t},\n\t\t\t// 选中任一radio时，由radio-group触发\n\t\t\tradioGroupChange(e) {\n\t\t\t\tthis.result = e;\n\t\t\t\t//console.log(e);\n\t\t\t},\n\t\t\twidthChange(index) {\n\t\t\t\tthis.width = index == 0 ? '50%' : '';\n\t\t\t},\n\t\t\twrapChange(index) {\n\t\t\t\tthis.wrap = !index;\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/componentsB/rate/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-rate v-model=\"value\" :count=\"count\" @change=\"change\"\n\t\t\t\t:active-color=\"activeColor\" :inaction-color=\"inactiveColor\"\n\t\t\t\t:active-icon=\"activeIcon\" :inactive-icon=\"inactiveIcon\"\n\t\t\t\t:disabled=\"disabled\" :colors=\"colors\" :icons=\"icons\"></u-rate>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">初始值</view>\n\t\t\t\t<u-subsection :list=\"[1, 2, 3, 4]\" @change=\"currentChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">镂空状态</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"plainChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义样式</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"styleChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义图标</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"iconChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">是否分层</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"decimalChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">是否禁用</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"disabledChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">星星数量</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"[4, 5, 6]\" @change=\"countChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\t// 1.4.5后推荐使用v-model双向绑定，弃用current\n\t\t\t\t// current: 1,\n\t\t\t\tactiveColor: '#FA3534',\n\t\t\t\tinactiveColor: '#b2b2b2',\n\t\t\t\tdisabled: false,\n\t\t\t\tcount: 5,\n\t\t\t\tcustomIcon: false,\n\t\t\t\tplain: false,\n\t\t\t\tvalue: 0,\n\t\t\t\tcolors: [],\n\t\t\t\ticons: []\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\tvalue(n) {\n\t\t\t\t// console.log(n);\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tactiveIcon() {\n\t\t\t\tlet icon = this.customIcon ? 'heart' : 'star';\n\t\t\t\treturn this.plain ? icon : icon + '-fill'\n\t\t\t},\n\t\t\tinactiveIcon() {\n\t\t\t\tlet icon = this.customIcon ? 'heart' : 'star';\n\t\t\t\treturn this.plain ? icon : icon + '-fill'\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tcurrentChange(index) {\n\t\t\t\tthis.value = index == 0 ? 1 : index == 1 ? 2 : index == 2 ? 3 : 4;\n\t\t\t},\n\t\t\tplainChange(index) {\n\t\t\t\tthis.plain = !index;\n\t\t\t},\n\t\t\tdisabledChange(index) {\n\t\t\t\tthis.disabled = index == 0 ? true : false;\n\t\t\t},\n\t\t\tcountChange(index) {\n\t\t\t\tthis.count = index == 0 ? 4 : index == 1 ? 5 : 6;\n\t\t\t},\n\t\t\tstyleChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.activeColor = this.$u.color['primary'];\n\t\t\t\t\tthis.inactiveColor = this.$u.color['info'];\n\t\t\t\t} else {\n\t\t\t\t\tthis.activeColor = '#FA3534';\n\t\t\t\t\tthis.inactiveColor = '#b2b2b2';\n\t\t\t\t}\n\t\t\t},\n\t\t\tdecimalChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.colors = ['#ffc454', '#ffb409', '#ff9500'];\n\t\t\t\t\tthis.icons = ['thumb-down-fill', 'thumb-down-fill', 'thumb-up-fill', 'thumb-up-fill'];\n\t\t\t\t} else {\n\t\t\t\t\tthis.colors = [];\n\t\t\t\t\tthis.icons = [];\n\t\t\t\t}\n\t\t\t},\n\t\t\ticonChange(index) {\n\t\t\t\tthis.customIcon = !index;\n\t\t\t},\n\t\t\tchange(val) {\n\t\t\t\t// console.log(val);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/componentsB/readMore/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-read-more @open=\"open\" @close=\"close\" :toggle=\"toggle\" :show-height=\"showHeight\" ref=\"uReadMore\">\n\t\t\t\t\t<!-- u-parse组件在微信小程序渲染慢，支付宝小程序rich-text不支持nodes属性 -->\n\t\t\t\t\t<!-- #ifdef MP-ALIPAY -->\n\t\t\t\t\t<u-parse :html=\"content\"></u-parse>\n\t\t\t\t\t<!-- #endif -->\n\t\t\t\t\t<!-- #ifndef MP-ALIPAY -->\n\t\t\t\t\t<rich-text :nodes=\"content\"></rich-text>\n\t\t\t\t\t<!-- #endif -->\n\t\t\t\t</u-read-more>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">超出高度隐藏</view>\n\t\t\t\t<u-subsection current=\"1\"  :list=\"['100', '200', '400']\" @change=\"showHeightChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">展开后可关闭</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"toggleChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script> \n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tcontent: `浔阳江头夜送客，枫叶荻花秋瑟瑟。主人下马客在船，举酒欲饮无管弦。醉不成欢惨将别，别时茫茫江浸月。\n\t\t\t\t\t忽闻水上琵琶声，主人忘归客不发。寻声暗问弹者谁，琵琶声停欲语迟。移船相近邀相见，添酒回灯重开宴。千呼万唤始出来，犹抱琵琶半遮面。转轴拨弦三两声，未成曲调先有情。弦弦掩抑声声思，似诉平生不得志。低眉信手续续弹，说尽心中无限事。轻拢慢捻抹复挑，初为《霓裳》后《六幺》。大弦嘈嘈如急雨，小弦切切如私语。嘈嘈切切错杂弹，大珠小珠落玉盘。间关莺语花底滑，幽咽泉流冰下难。冰泉冷涩弦凝绝，凝绝不通声暂歇。别有幽愁暗恨生，此时无声胜有声。银瓶乍破水浆迸，铁骑突出刀枪鸣。曲终收拨当心画，四弦一声如裂帛。东船西舫悄无言，唯见江心秋月白。\n\t\t\t\t\t沉吟放拨插弦中，整顿衣裳起敛容。自言本是京城女，家在虾蟆陵下住。十三学得琵琶成，名属教坊第一部。曲罢曾教善才服，妆成每被秋娘妒。五陵年少争缠头，一曲红绡不知数。钿头银篦击节碎，血色罗裙翻酒污。今年欢笑复明年，秋月春风等闲度。弟走从军阿姨死，暮去朝来颜色故。门前冷落鞍马稀，老大嫁作商人妇。商人重利轻别离，前月浮梁买茶去。去来江口守空船，绕船月明江水寒。夜深忽梦少年事，梦啼妆泪红阑干。\n\t\t\t\t\t我闻琵琶已叹息，又闻此语重唧唧。同是天涯沦落人，相逢何必曾相识！我从去年辞帝京，谪居卧病浔阳城。浔阳地僻无音乐，终岁不闻丝竹声。住近湓江地低湿，黄芦苦竹绕宅生。其间旦暮闻何物？杜鹃啼血猿哀鸣。春江花朝秋月夜，往往取酒还独倾。岂无山歌与村笛？呕哑嘲哳难为听。今夜闻君琵琶语，如听仙乐耳暂明。莫辞更坐弹一曲，为君翻作《琵琶行》。感我此言良久立，却坐促弦弦转急。凄凄不似向前声，满座重闻皆掩泣。座中泣下谁最多？江州司马青衫湿。`,\n\t\t\t\tshowHeight: 200,\n\t\t\t\ttoggle: false,\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tshowHeightChange(index) {\n\t\t\t\tthis.showHeight = index == 0 ? 100 : index == 1 ? 200 : 400;\n\t\t\t},\n\t\t\ttoggleChange(index) {\n\t\t\t\tthis.toggle = index == 0 ? true : false;\n\t\t\t},\n\t\t\topen() {\n\t\t\t\t// console.log('open');\n\t\t\t},\n\t\t\tclose() {\n\t\t\t\t// console.log('close');\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t// 通过/deep/样式穿透去控制组件的内容\n\t.wrap /deep/ .u-content {\n\t\tcolor: #666!important;\n\t}\n</style>"
  },
  {
    "path": "pages/componentsB/search/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<u-search v-model=\"value\" @change=\"change\" @custom=\"custom\" @search=\"search\" :shape=\"shape\" :clearabled=\"clearabled\" \n\t\t\t\t:show-action=\"showAction\" :input-align=\"inputAlign\" @clear=\"clear\"></u-search>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">初始值</view>\n\t\t\t\t<u-subsection :list=\"['空', '天山雪莲']\" @change=\"valueChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">搜索框形状</view>\n\t\t\t\t<u-subsection :list=\"['圆形', '方形']\" @change=\"shapeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">清除控件</view>\n\t\t\t\t<u-subsection :list=\"['启用', '关闭']\" @change=\"clearabledChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">右侧控件</view>\n\t\t\t\t<u-subsection :list=\"['启用', '关闭']\" @change=\"showActionChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">水平对齐方式</view>\n\t\t\t\t<u-subsection :list=\"['左', '中', '右']\" @change=\"inputAlignChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tvalue: '',\n\t\t\t\tshape: 'round',\n\t\t\t\tclearabled: true,\n\t\t\t\tshowAction: true,\n\t\t\t\tinputAlign: 'left'\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\t// 这里的演示为证明通过v-model绑定值，它是双向绑定的，意味着您无需监听change事件\n\t\t\t// 也能知道value值当前的内容\n\t\t\tvalue(val) {\n\t\t\t\t// console.log(val);\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tvalueChange(index) {\n\t\t\t\tthis.value = index == 0 ? '' : '天山雪莲';\n\t\t\t},\n\t\t\tshapeChange(index) {\n\t\t\t\tthis.shape = index == 0 ? 'round' : 'square';\n\t\t\t},\n\t\t\tclearabledChange(index) {\n\t\t\t\tthis.clearabled = index == 0 ? true : false;\n\t\t\t},\n\t\t\tshowActionChange(index) {\n\t\t\t\tthis.showAction = index == 0 ? true : false;\n\t\t\t},\n\t\t\tinputAlignChange(index) {\n\t\t\t\tthis.inputAlign = index == 0 ? 'left' : index == 1 ? 'center' : 'right';\n\t\t\t},\n\t\t\tchange(value) {\n\t\t\t\t// 搜索框内容变化时，会触发此事件，value值为输入框的内容\n\t\t\t\t//console.log(value);\n\t\t\t},\n\t\t\tcustom(value) {\n\t\t\t\t//console.log(value);\n\t\t\t\tthis.$u.toast('输入值为：' + value)\n\t\t\t},\n\t\t\tsearch(value) {\n\t\t\t\tthis.$refs.uToast.show({\n\t\t\t\t\ttitle: '搜索内容为：' + value,\n\t\t\t\t\ttype: 'success'\n\t\t\t\t})\n\t\t\t},\n\t\t\tclear() {\n\t\t\t\t// console.log(this.value);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/componentsB/skeleton/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<view class=\"container u-skeleton\">\n\t\t\t\t\t<view class=\"userinfo\">\n\t\t\t\t\t\t<block>\n\t\t\t\t\t\t\t<!--u-skeleton-circle 绘制圆形-->\n\t\t\t\t\t\t\t<image class=\"userinfo-avatar u-skeleton-circle\" :src=\"userInfo.avatarUrl\"></image>\n\t\t\t\t\t\t\t<!--u-skeleton-fillet 绘制圆角矩形-->\n\t\t\t\t\t\t\t<text class=\"u-skeleton-fillet\">{{userInfo.nickName}}</text>\n\t\t\t\t\t\t</block>\n\t\t\t\t\t</view>\n\t\t\t\t\t<view style=\"margin: 20px 0\">\n\t\t\t\t\t\t<!--u-skeleton-rect 绘制矩形-->\n\t\t\t\t\t\t<view class=\"u-skeleton-rect lists\" v-for=\"(item,index) in lists\" :key=\"index\">\n\t\t\t\t\t\t\t<text>{{item}}</text>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<!--引用组件-->\n\t\t\t\t<u-skeleton bg-color=\"rgb(250, 250, 250)\" :loading=\"loading\" :animation=\"animation\" \n\t\t\t\t:el-color=\"elColor\" :border-radius=\"borderRadius\"></u-skeleton>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">加载状态</view>\n\t\t\t\t<u-subsection :current=\"current\" :list=\"['请求中', '请求结束']\" @change=\"loadingChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">骨架动画</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"animationChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义样式</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"styleChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tuserInfo: {\n\t\t\t\t\tavatarUrl: 'https://cdn.uviewui.com/uview/common/logo.png',\n\t\t\t\t\tnickName: 'uView'\n\t\t\t\t},\n\t\t\t\tlists: [\n\t\t\t\t\t'君不见，黄河之水天上来，奔流到海不复回。君不见，高堂明镜悲白发，朝如青丝暮成雪。',\n\t\t\t\t\t'人生得意须尽欢，莫使金樽空对月',\n\t\t\t\t\t'天生我材必有用，千金散尽还复来',\n\t\t\t\t],\n\t\t\t\tloading: true, // 是否显示骨架屏组件\n\t\t\t\tanimation: false,\n\t\t\t\telColor: '#e5e5e5',\n\t\t\t\tborderRadius: 10,\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tcurrent() {\n\t\t\t\treturn this.loading ? 0 : 1;\n\t\t\t},\n\t\t},\n\t\tonLoad() {\n\t\t\tthis.getData();\n\t\t},\n\t\tmethods: {\n\t\t\tanimationChange(index) {\n\t\t\t\tthis.animation = index == 0 ? true : false;\n\t\t\t\tthis.getData();\n\t\t\t},\n\t\t\tloadingChange(index) {\n\t\t\t\tthis.loading = index == 0 ? true : false;\n\t\t\t\tif(index == 0) this.getData();\n\t\t\t},\n\t\t\tstyleChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.elColor = this.$u.color['primary'];\n\t\t\t\t\tthis.borderRadius = 14;\n\t\t\t\t} else {\n\t\t\t\t\tthis.elColor = '#e5e5e5';\n\t\t\t\t\tthis.borderRadius = 10;\n\t\t\t\t}\n\t\t\t\tthis.getData();\n\t\t\t},\n\t\t\tgetData() {\n\t\t\t\tthis.loading = true;\n\t\t\t\t// 通过延时模拟向后端请求数据，调隐藏骨架屏\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t}, 3000)\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.container {\n\t\ttext-align: left;\n\t\tfont-size: 28rpx;\n\t\tcolor: $u-content-color;\n\t}\n\n\t.userinfo {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t}\n\n\t.userinfo-avatar {\n\t\twidth: 128rpx;\n\t\theight: 128rpx;\n\t\tmargin: 20rpx;\n\t\tborder-radius: 50%;\n\t}\n\n\t.lists {\n\t\tmargin: 10px 0;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsB/steps/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-steps :direction=\"direction\" :current=\"current\" :list=\"steps\" :mode=\"mode\" :icon=\"icon\"></u-steps>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">模式</view>\n\t\t\t\t<u-subsection :list=\"['number', 'dot']\" @change=\"modeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">方向</view>\n\t\t\t\t<u-subsection :list=\"['横向', '竖向']\" @change=\"directionChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义图标</view>\n\t\t\t\t<u-subsection :list=\"['否', '是']\" @change=\"iconChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">当前步值</view>\n\t\t\t\t<u-subsection :list=\"['1', '2', '3', '4']\" @change=\"stepChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tsteps: [{\n\t\t\t\t\tname: '下单'\n\t\t\t\t}, {\n\t\t\t\t\tname: '出库'\n\t\t\t\t}, {\n\t\t\t\t\tname: '运输'\n\t\t\t\t}, {\n\t\t\t\t\tname: '签收'\n\t\t\t\t}, ],\n\t\t\t\tcurrent: 0,\n\t\t\t\ticon: 'checkmark',\n\t\t\t\tmode: 'number',\n\t\t\t\tdirection: 'row'\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tmodeChange(index) {\n\t\t\t\tthis.mode = index == 0 ? 'number' : 'dot';\n\t\t\t},\n\t\t\tstepChange(index) {\n\t\t\t\tthis.current = [0, 1, 2, 3][index];\n\t\t\t},\n\t\t\ticonChange(index) {\n\t\t\t\tthis.icon = index == 0 ? 'checkmark' : 'map-fill';\n\t\t\t},\n\t\t\tdirectionChange(index) {\n\t\t\t\tthis.direction = index == 0 ? 'row' : 'column';\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.wrap {\n\t\tpadding: 24rpx;\n\t}\n\t\n\t.box {\n\t\tmargin: 50rpx 0;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsB/sticky/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<u-sticky :offset-top=\"offsetTop\" :enable=\"enable\" @fixed=\"fixed\" @unfixed=\"unfixed\">\n\t\t\t\t\t<view class=\"sticky\">\n\t\t\t\t\t\t宝剑锋从磨砺出,梅花香自苦寒来\n\t\t\t\t\t</view>\n\t\t\t\t</u-sticky>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">吸顶高度</view>\n\t\t\t\t<u-subsection :list=\"[0, 120, 200]\" @change=\"offsetTopChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">状态</view>\n\t\t\t\t<u-subsection :list=\"['允许吸顶', '禁止吸顶']\" @change=\"enableChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\toffsetTop: 0,\n\t\t\t\tenable: true,\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\toffsetTopChange(index) {\n\t\t\t\tthis.offsetTop = index == 0 ? 0 : index == 1 ? 120 : 200;\n\t\t\t\tuni.pageScrollTo({\n\t\t\t\t\tscrollTop: 0,\n\t\t\t\t\tduration: 0\n\t\t\t\t})\n\t\t\t},\n\t\t\tenableChange(index) {\n\t\t\t\tthis.enable = index == 0 ? true : false;\n\t\t\t},\n\t\t\tfixed() {\n\t\t\t\tthis.$refs.uToast.show({\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\ttitle: '触发吸顶'\n\t\t\t\t})\n\t\t\t},\n\t\t\tunfixed() {\n\t\t\t\tthis.$refs.uToast.show({\n\t\t\t\t\ttype: 'success',\n\t\t\t\t\ttitle: '取消吸顶'\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo-area {\n\t\toverflow: hidden;\n\t}\n\t\n\t.u-config-wrap {\n\t\theight: 200vh;\n\t}\n\t\n\t.u-demo-title {\n\t\tmargin-bottom: 140rpx;\n\t}\n\t\n\t.sticky {\n\t\tbackground-color: $u-type-primary;\n\t\tcolor: #fff;\n\t\tpadding: 24rpx;\n\t\tmargin: auto;\n\t\tfont-size: 28rpx;\n\t\tline-height: 1;\n\t\tborder-radius: 5px;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsB/swipeAction/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<u-swipe-action\n\t\t\t\t\tbg-color=\"rgb(250, 250, 250)\"\n\t\t\t\t\t@open=\"open\"\n\t\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t\t:index=\"index\"\n\t\t\t\t\tv-for=\"(item, index) in list\"\n\t\t\t\t\t:key=\"item.id\"\n\t\t\t\t\t:show=\"item.show\"\n\t\t\t\t\t@click=\"click\"\n\t\t\t\t\t:btn-width=\"btnWidth\"\n\t\t\t\t\t@close=\"close\"\n\t\t\t\t\t:options=\"options\"\n\t\t\t\t\t@content-click=\"contentClick\"\n\t\t\t\t>\n\t\t\t\t\t<view class=\"item u-border-bottom\">\n\t\t\t\t\t\t<image mode=\"aspectFill\" :src=\"item.images\" />\n\t\t\t\t\t\t<!-- 此层wrap在此为必写的，否则可能会出现标题定位错误 -->\n\t\t\t\t\t\t<view class=\"title-wrap\">\n\t\t\t\t\t\t\t<text class=\"title u-line-2\">{{ item.title }}</text>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</view>\n\t\t\t\t</u-swipe-action>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">参数配置</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">状态(操作第一个)</view>\n\t\t\t\t<u-subsection :current=\"1\" :list=\"['打开', '关闭']\" @change=\"showChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">禁止滑动</view>\n\t\t\t\t<u-subsection :current=\"1\" :list=\"['是', '否']\" @change=\"disabledChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tlist1: [\n\t\t\t\t{\n\t\t\t\t\tid: 1,\n\t\t\t\t\ttitle: '长安回望绣成堆，山顶千门次第开，一骑红尘妃子笑，无人知是荔枝来',\n\t\t\t\t\timages: 'https://cdn.uviewui.com/uview/common/logo.png',\n\t\t\t\t\tshow: false\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 2,\n\t\t\t\t\ttitle: '新丰绿树起黄埃，数骑渔阳探使回，霓裳一曲千峰上，舞破中原始下来',\n\t\t\t\t\timages: 'https://cdn.uviewui.com/uview/common/logo.png',\n\t\t\t\t\tshow: false\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 3,\n\t\t\t\t\ttitle: '登临送目，正故国晚秋，天气初肃。千里澄江似练，翠峰如簇',\n\t\t\t\t\timages: 'https://cdn.uviewui.com/uview/common/logo.png',\n\t\t\t\t\tshow: false,\n\t\t\t\t}\n\t\t\t],\n\t\t\tlist: [],\n\t\t\tdisabled: false,\n\t\t\tbtnWidth: 180,\n\t\t\tshow: false,\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\ttext: '收藏',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tbackgroundColor: '#007aff'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: '删除',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tbackgroundColor: '#dd524d'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t},\n\tonLoad() {\n\t\tsetTimeout(() => {\n\t\t\tthis.list = this.list1;\n\t\t}, 0)\n\t},\n\tmethods: {\n\t\tdisabledChange(index) {\n\t\t\tthis.disabled = index == 0 ? true : false;\n\t\t},\n\t\tshowChange(index) {\n\t\t\tif (index == 0) {\n\t\t\t\tthis.list.map((val, ids) => {\n\t\t\t\t\tif (ids != 0) val.show = false;\n\t\t\t\t\telse val.show = true;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.list[0].show = false;\n\t\t\t}\n\t\t},\n\t\tclick(index, index1) {\n\t\t\tif(index1 == 1) {\n\t\t\t\tthis.list.splice(index, 1);\n\t\t\t\tthis.$u.toast(`删除了第${index}个cell`);\n\t\t\t} else {\n\t\t\t\tthis.list[index].show = false;\n\t\t\t\tthis.$u.toast(`收藏成功`);\n\t\t\t}\n\t\t},\n\t\topen(index) {\n\t\t\tthis.list[index].show = true;\n\t\t\tthis.list.map((val, idx) => {\n\t\t\t\tif (index != idx) this.list[idx].show = false;\n\t\t\t});\n\t\t},\n\t\tclose(index) {\n\t\t\tthis.list[index].show = false;\n\t\t},\n\t\tcontentClick(index) {\n\t\t\t// console.log(index);\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.item {\n\tdisplay: flex;\n\tpadding: 20rpx;\n}\n\nimage {\n\twidth: 120rpx;\n\tflex: 0 0 120rpx;\n\theight: 120rpx;\n\tmargin-right: 20rpx;\n\tborder-radius: 12rpx;\n}\n\n.title {\n\ttext-align: left;\n\tfont-size: 28rpx;\n\tcolor: $u-content-color;\n\tmargin-top: 20rpx;\n}\n</style>\n"
  },
  {
    "path": "pages/componentsB/swiper/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<u-swiper @change=\"change\" :height=\"250\" :list=\"list\" :title=\"title\" :effect3d=\"effect3d\" \n\t\t\t\t:indicator-pos=\"indicatorPos\" :mode=\"mode\" :interval=\"3000\" @click=\"click\"></u-swiper>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">指示器模式</view>\n\t\t\t\t<u-subsection :list=\"['round', 'rect', 'number', 'none']\" @change=\"modeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">标题</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['显示', '隐藏']\" @change=\"titleChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">指示器位置</view>\n\t\t\t\t<u-subsection current=\"3\" :list=\"['上左', '上右', '下左', '下中', '下右']\" @change=\"indicatorPosChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">3D效果</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['开启', '关闭']\" @change=\"effect3dChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tlist: [{\n\t\t\t\t\t\timage: 'https://cdn.uviewui.com/uview/swiper/1.jpg',\n\t\t\t\t\t\ttitle: '昨夜星辰昨夜风，画楼西畔桂堂东'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\timage: 'https://cdn.uviewui.com/uview/swiper/2.jpg',\n\t\t\t\t\t\ttitle: '身无彩凤双飞翼，心有灵犀一点通'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\timage: 'https://cdn.uviewui.com/uview/swiper/3.jpg',\n\t\t\t\t\t\ttitle: '谁念西风独自凉，萧萧黄叶闭疏窗，沉思往事立残阳'\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\ttitle: false,\n\t\t\t\tmode: 'round',\n\t\t\t\tindicatorPos: 'bottomCenter',\n\t\t\t\teffect3d: false,\n\t\t\t\t\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\ttitleChange(index) {\n\t\t\t\tthis.title = index == 0 ? true : false;\n\t\t\t},\n\t\t\tmodeChange(index) {\n\t\t\t\tthis.mode = index == 0 ? 'round' : index == 1 ? 'rect' : index == 2 ? 'number' : 'none';\n\t\t\t},\n\t\t\tindicatorPosChange(index) {\n\t\t\t\tthis.indicatorPos = index == 0 ? 'topLeft' : index == 1 ? 'topRight' : index == 2 ? 'bottomLeft' : index == 3 ? 'bottomCenter'  : 'bottomRight';\n\t\t\t},\n\t\t\teffect3dChange(index) {\n\t\t\t\tthis.effect3d = index == 0 ? true : false;\n\t\t\t},\n\t\t\tclick(index) {\n\t\t\t\tthis.$refs.uToast.show({\n\t\t\t\t\ttitle: `点击了第${index + 1}张图片`,\n\t\t\t\t\ttype: 'success'\n\t\t\t\t})\n\t\t\t},\n\t\t\tchange(index) {\n\t\t\t\t// console.log(index);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.item {\n\t\tmargin: 30rpx 0;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsB/switch/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-switch v-model=\"checked\" :loading=\"loading\" \n\t\t\t\t\t:size=\"size\" @change=\"change\" \n\t\t\t\t\t:active-color=\"activeColor\"\n\t\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t\t:activeValue=\"100\"\n\t\t\t\t\t:inactiveValue=\"1\"\n\t\t\t\t></u-switch>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">状态</view>\n\t\t\t\t<u-subsection :list=\"['关闭', '打开']\" @change=\"modelChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">颜色</view>\n\t\t\t\t<u-subsection :list=\"['primary', 'error', 'warning', 'success']\" @change=\"colorChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">尺寸(单位rpx)</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['40', '60', '80']\" @change=\"sizeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">加载中</view>\n\t\t\t\t<u-subsection :list=\"['否', '是']\" @change=\"loadingChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">禁用</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"disabledChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">异步控制</view>\n\t\t\t\t<u-subsection :list=\"['关闭', '打开']\" @change=\"asyncChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tchecked: false,\n\t\t\t\tactiveColor: '#2979ff',\n\t\t\t\tsize: 50,\n\t\t\t\tloading: false,\n\t\t\t\tdisabled: false\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tmodelChange(index) {\n\t\t\t\t// 两个!!可以把0变成false，1变成true\n\t\t\t\tthis.checked = !!index;\n\t\t\t},\n\t\t\tcolorChange(index) {\n\t\t\t\tlet color = index == 0 ? 'primary' : index == 1 ? 'error' : index == 2 ? 'warning' : 'success';\n\t\t\t\tthis.activeColor = this.$u.color[color];\n\t\t\t},\n\t\t\tsizeChange(index) {\n\t\t\t\tthis.size = index == 0 ? '40' : index == 1 ? '60' : '80';\n\t\t\t},\n\t\t\tloadingChange(index) {\n\t\t\t\tthis.loading = !!index;\n\t\t\t},\n\t\t\tdisabledChange(index) {\n\t\t\t\tthis.disabled = index == 0 ? true : false;\n\t\t\t},\n\t\t\tasyncChange(index) {\n\t\t\t\tif(this.checked && index == 1) {\n\t\t\t\t\tthis.$u.toast('请先关闭选择器');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif(!this.checked && index == 0) {\n\t\t\t\t\tthis.$u.toast('请先打开选择器');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlet str = index == 0 ? '是否要关闭？' : '是否要打开？';\n\t\t\t\tthis.loading = true;\n\t\t\t\tlet oldStatus = this.checked;\n\t\t\t\tthis.checked = true;\n\t\t\t\tuni.showModal({\n\t\t\t\t\ttitle: '提示',\n\t\t\t\t\tcontent: str,\n\t\t\t\t\tcomplete: (res) => {\n\t\t\t\t\t\tthis.loading = false;\n\t\t\t\t\t\tif(res.confirm) {\n\t\t\t\t\t\t\tif(oldStatus) this.checked = false;\n\t\t\t\t\t\t\telse this.checked = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif(!oldStatus) this.checked = false;\n\t\t\t\t\t\t\telse this.checked = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\t\t\tchange(value) {\n\t\t\t\t// console.log(value);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/componentsB/tabbar/index.vue",
    "content": "<template>\n\t<view class=\"\">\n\t\t<view class=\"u-demo\">\n\t\t\t<view class=\"u-config-wrap\">\n\t\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t\t参数配置\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-config-item\">\n\t\t\t\t\t<view class=\"u-item-title\">状态</view>\n\t\t\t\t\t<u-subsection :list=\"['显示', '隐藏']\" @change=\"showChange\"></u-subsection>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-config-item\">\n\t\t\t\t\t<view class=\"u-item-title\">凸起按钮</view>\n\t\t\t\t\t<u-subsection :list=\"['显示', '隐藏']\" @change=\"minButtonChange\"></u-subsection>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-config-item\">\n\t\t\t\t\t<view class=\"u-item-title\">背景色</view>\n\t\t\t\t\t<u-subsection :list=\"['#ffffff', '#1f1f1d']\" @change=\"bgColorChange\"></u-subsection>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-config-item\">\n\t\t\t\t\t<view class=\"u-item-title\">顶部边框</view>\n\t\t\t\t\t<u-subsection :list=\"['显示', '隐藏']\" @change=\"borderTopChange\"></u-subsection>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-config-item\">\n\t\t\t\t\t<view class=\"u-item-title\">提示角标</view>\n\t\t\t\t\t<u-subsection :list=\"['显示', '隐藏']\" @change=\"badgeChange\"></u-subsection>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<u-tabbar\n\t\t    v-model=\"current\"\n\t\t    :show=\"show\"\n\t\t    :bg-color=\"bgColor\"\n\t\t    :border-top=\"borderTop\"\n\t\t    :list=\"list\"\n\t\t\t:mid-button=\"midButton\"\n\t\t\t:inactive-color=\"inactiveColor\"\n\t\t\t:activeColor=\"activeColor\"\n\t\t></u-tabbar>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tcurrent: 0,\n\t\t\t\tshow: true,\n\t\t\t\tbgColor: '#ffffff',\n\t\t\t\tborderTop: true,\n\t\t\t\tlist: [{\n\t\t\t\t\t\ticonPath: \"home\",\n\t\t\t\t\t\tselectedIconPath: \"home-fill\",\n\t\t\t\t\t\ttext: '首页',\n\t\t\t\t\t\tcount: 2,\n\t\t\t\t\t\tisDot: true,\n\t\t\t\t\t\tcustomIcon: false,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ticonPath: \"photo\",\n\t\t\t\t\t\tselectedIconPath: \"photo-fill\",\n\t\t\t\t\t\ttext: '放映厅',\n\t\t\t\t\t\tcustomIcon: false,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ticonPath: \"/static/uview/example/min_button.png\",\n\t\t\t\t\t\tselectedIconPath: \"/static/uview/example/min_button_select.png\",\n\t\t\t\t\t\ttext: '发布',\n\t\t\t\t\t\tmidButton: true,\n\t\t\t\t\t\tcustomIcon: false,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ticonPath: \"play-right\",\n\t\t\t\t\t\tselectedIconPath: \"play-right-fill\",\n\t\t\t\t\t\ttext: '直播',\n\t\t\t\t\t\tcustomIcon: false,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ticonPath: \"account\",\n\t\t\t\t\t\tselectedIconPath: \"account-fill\",\n\t\t\t\t\t\ttext: '我的',\n\t\t\t\t\t\tcount: 23,\n\t\t\t\t\t\tisDot: false,\n\t\t\t\t\t\tcustomIcon: false,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tmidButton: true,\n\t\t\t\tinactiveColor: '#909399',\n\t\t\t\tactiveColor: '#5098FF'\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tbeforeSwitch(index) {\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tshowChange(index) {\n\t\t\t\tthis.show = !index;\n\t\t\t},\n\t\t\tbgColorChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.activeColor = '#5098FF';\n\t\t\t\t\tthis.inactiveColor = '#909399';\n\t\t\t\t}\n\t\t\t\tif(index == 1) {\n\t\t\t\t\tthis.activeColor = '#D0D0D0';\n\t\t\t\t\tthis.inactiveColor = '#5A5A5A';\n\t\t\t\t}\n\t\t\t\tthis.bgColor = ['#ffffff', '#1f1f1d'][index];\n\t\t\t},\n\t\t\tborderTopChange(index) {\n\t\t\t\tthis.borderTop = !index;\n\t\t\t},\n\t\t\tbadgeChange(index) {\n\t\t\t\tif (index == 1) {\n\t\t\t\t\tthis.list[0].count = 0;\n\t\t\t\t\tthis.list[4].count = 0;\n\t\t\t\t} else {\n\t\t\t\t\tthis.list[0].count = 2;\n\t\t\t\t\tthis.list[4].count = 23;\n\t\t\t\t}\n\t\t\t},\n\t\t\tminButtonChange(index) {\n\t\t\t\tthis.midButton = !index;\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t.u-demo-area {\n\t\tmargin: 0 -40rpx;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsB/table/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<u-table :align=\"align\" :borderColor=\"borderColor\">\n\t\t\t\t\t<u-tr class=\"u-tr\">\n\t\t\t\t\t\t<u-th class=\"u-th\">姓名</u-th>\n\t\t\t\t\t\t<u-th class=\"u-th\">年龄</u-th>\n\t\t\t\t\t\t<u-th class=\"u-th\">籍贯</u-th>\n\t\t\t\t\t\t<u-th class=\"u-th\">性别</u-th>\n\t\t\t\t\t</u-tr>\n\t\t\t\t\t<u-tr class=\"u-tr\">\n\t\t\t\t\t\t<u-td class=\"u-td\">吕布</u-td>\n\t\t\t\t\t\t<u-td class=\"u-td\">22</u-td>\n\t\t\t\t\t\t<u-td class=\"u-td\">楚河</u-td>\n\t\t\t\t\t\t<u-td class=\"u-td\">男</u-td>\n\t\t\t\t\t</u-tr>\n\t\t\t\t\t<u-tr class=\"u-tr\">\n\t\t\t\t\t\t<u-td class=\"u-td\">项羽</u-td>\n\t\t\t\t\t\t<u-td class=\"u-td\">28</u-td>\n\t\t\t\t\t\t<u-td class=\"u-td\">汉界</u-td>\n\t\t\t\t\t\t<u-td class=\"u-td\">男</u-td>\n\t\t\t\t\t</u-tr>\n\t\t\t\t\t<u-tr class=\"u-tr\">\n\t\t\t\t\t\t<u-td class=\"u-td\">木兰</u-td>\n\t\t\t\t\t\t<u-td class=\"u-td\">24</u-td>\n\t\t\t\t\t\t<u-td class=\"u-td\">南国</u-td>\n\t\t\t\t\t\t<u-td class=\"u-td\">女</u-td>\n\t\t\t\t\t</u-tr>\n\t\t\t\t</u-table>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">边框颜色</view>   \n\t\t\t\t<u-subsection :list=\"['gray', 'primary', 'warning']\" @change=\"borderColorChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">对齐方式</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['左', '中', '右']\" @change=\"alignChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tmode: false,\n\t\t\t\tborderColor: '#e4e7ed',\n\t\t\t\talign: 'center',\n\t\t\t\tindex: 0,\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tmodeChange(index) {\n\t\t\t\t// #ifdef MP-WEIXIN\n\t\t\t\treturn this.$u.toast('微信小程序暂不支持单元格合并')\n\t\t\t\t// #endif\n\t\t\t\tthis.mode = index == 0 ? true : false;\n\t\t\t\tthis.key ++;\n\t\t\t},\n\t\t\tborderColorChange(index) {\n\t\t\t\tthis.borderColor = index == 0 ? '#e4e7ed' : index == 1 ? '#2979ff' : '#ff9900';\n\t\t\t},\n\t\t\talignChange(index) {\n\t\t\t\tthis.align = index == 0 ? 'left' : index == 1 ? 'center' : 'right';\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.wrap {\n\t\tpadding: 24rpx;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsB/upload/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<view class=\"pre-box\" v-if=\"!showUploadList\">\n\t\t\t\t\t<view class=\"pre-item\" v-for=\"(item, index) in lists\" :key=\"index\">\n\t\t\t\t\t\t<image class=\"pre-item-image\" :src=\"item.url\" mode=\"aspectFill\"></image>\n\t\t\t\t\t\t<view class=\"u-delete-icon\" @tap.stop=\"deleteItem(index)\">\n\t\t\t\t\t\t\t<u-icon name=\"close\" size=\"20\" color=\"#ffffff\"></u-icon>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t\t<u-line-progress v-if=\"item.progress > 0 && !item.error\" :show-percent=\"false\" height=\"16\" class=\"u-progress\"\n\t\t\t\t\t\t :percent=\"item.progress\"></u-line-progress>\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<u-upload @on-choose-fail=\"onChooseFail\" :before-remove=\"beforeRemove\" ref=\"uUpload\" :custom-btn=\"customBtn\" :show-upload-list=\"showUploadList\" :action=\"action\" :auto-upload=\"autoUpload\" :file-list=\"fileList\"\n\t\t\t\t :show-progress=\"showProgress\" :deletable=\"deletable\" :max-count=\"maxCount\" @on-list-change=\"onListChange\">\n\t\t\t\t\t<view v-if=\"customBtn\" slot=\"addBtn\" class=\"slot-btn\" hover-class=\"slot-btn__hover\" hover-stay-time=\"150\">\n\t\t\t\t\t\t<u-icon name=\"photo\" size=\"60\" :color=\"$u.color['lightColor']\"></u-icon>\n\t\t\t\t\t</view>\n\t\t\t\t</u-upload>\n\t\t\t\t<u-button :custom-style=\"{marginTop: '20rpx'}\" @click=\"upload\">上传</u-button>\n\t\t\t\t<u-button :custom-style=\"{marginTop: '40rpx'}\" @click=\"clear\">清空列表</u-button>\n\t\t\t\t<!-- <u-button :custom-style=\"{marginTop: '40rpx'}\" @click=\"reUpload\">重新上传</u-button> -->\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">上传方式</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['自动上传', '手动上传']\" @change=\"autoUploadChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义控件(进度条和删除按钮)</view>\n\t\t\t\t<u-subsection :list=\"['显示', '隐藏']\" @change=\"controlChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">最大上传数量</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['1', '2', '4']\" @change=\"maxCountChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义样式(预览区域和上传按钮)</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"customStyleChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\taction: 'http://127.0.0.1:7001/upload',\n\t\t\t\t// 预置上传列表\n\t\t\t\tfileList: [],\n\t\t\t\t// fileList: [{\n\t\t\t\t// \turl: 'http://pics.sc.chinaz.com/files/pic/pic9/201912/hpic1886.jpg',\n\t\t\t\t// \terror: false,\n\t\t\t\t// \tprogress: 100\n\t\t\t\t// }],\n\t\t\t\tshowUploadList: true,\n\t\t\t\tcustomBtn: false,\n\t\t\t\tautoUpload: false,\n\t\t\t\tshowProgress: true,\n\t\t\t\tdeletable: true,\n\t\t\t\tcustomStyle: false,\n\t\t\t\tmaxCount: 2,\n\t\t\t\tlists: [], // 组件内部的文件列表\n\t\t\t}\n\t\t},\n\t\tonLoad() {\n\t\t\t\n\t\t},\n\t\tmethods: {\n\t\t\treUpload() {\n\t\t\t\tthis.$refs.uUpload.reUpload();\n\t\t\t},\n\t\t\tclear() {\n\t\t\t\tthis.$refs.uUpload.clear();\n\t\t\t},\n\t\t\tautoUploadChange(index) {\n\t\t\t\tthis.autoUpload = index == 0 ? true : false;\n\t\t\t},\n\t\t\tcontrolChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.showProgress = true;\n\t\t\t\t\tthis.deletable = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.showProgress = false;\n\t\t\t\t\tthis.deletable = false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tmaxCountChange(index) {\n\t\t\t\tthis.maxCount = index == 0 ? 1 : index == 1 ? 2 : 4;\n\t\t\t},\n\t\t\tcustomStyleChange(index) {\n\t\t\t\tif (index == 0) {\n\t\t\t\t\tthis.showUploadList = false;\n\t\t\t\t\tthis.customBtn = true;\n\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\tthis.showUploadList = true;\n\t\t\t\t\tthis.customBtn = false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tupload() {\n\t\t\t\tthis.$refs.uUpload.upload();\n\t\t\t},\n\t\t\tdeleteItem(index) {\n\t\t\t\tthis.$refs.uUpload.remove(index);\n\t\t\t},\n\t\t\tonOversize(file, lists) {\n\t\t\t\t// console.log('onOversize', file, lists);\n\t\t\t},\n\t\t\tonPreview(url, lists) {\n\t\t\t\t// console.log('onPreview', url, lists);\n\t\t\t},\n\t\t\tonRemove(index, lists) {\n\t\t\t\t// console.log('onRemove', index, lists);\n\t\t\t},\n\t\t\tonSuccess(data, index, lists) {\n\t\t\t\t// console.log('onSuccess', data, index, lists);\n\t\t\t},\n\t\t\tonChange(res, index, lists) {\n\t\t\t\t// console.log('onChange', res, index, lists);\n\t\t\t},\n\t\t\terror(res, index, lists) {\n\t\t\t\t// console.log('onError', res, index, lists);\n\t\t\t},\n\t\t\tonProgress(res, index, lists) {\n\t\t\t\t// console.log('onProgress', res, index, lists);\n\t\t\t},\n\t\t\tonUploaded(lists) {\n\t\t\t\t// console.log('onUploaded', lists);\n\t\t\t},\n\t\t\tonListChange(lists) {\n\t\t\t\t// console.log('onListChange', lists);\n\t\t\t\tthis.lists = lists;\n\t\t\t},\n\t\t\tbeforeRemove(index, lists) {\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tonChooseFail(e) {\n\t\t\t\t// console.log(e);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\">\n\t.u-demo-wrap {\n\t\tbackground-color: #FFFFFF;\n\t\tpadding: 40rpx 8rpx;\n\t\tmargin-left: -14rpx;\n\t\tmargin-right: -14rpx;\n\t}\n\t\n\t.u-add-wrap {\n\t\tflex-direction: column;\n\t\tcolor: $u-content-color;\n\t\tfont-size: 28rpx;\n\t}\n\t\n\t/deep/ .slot-btn {\n\t\twidth: 329rpx;\n\t\theight: 140rpx;\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\tbackground: rgb(244, 245, 246);\n\t\tborder-radius: 10rpx;\n\t}\n\n\t.slot-btn__hover {\n\t\tbackground-color: rgb(235, 236, 238);\n\t}\n\n\t.pre-box {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tflex-wrap: wrap;\n\t}\n\n\t.pre-item {\n\t\tflex: 0 0 48.5%;\n\t\tborder-radius: 10rpx;\n\t\theight: 140rpx;\n\t\toverflow: hidden;\n\t\tposition: relative;\n\t\tmargin-bottom: 20rpx;\n\t}\n\n\t.u-progress {\n\t\tposition: absolute;\n\t\tbottom: 10rpx;\n\t\tleft: 8rpx;\n\t\tright: 8rpx;\n\t\tz-index: 9;\n\t\twidth: auto;\n\t}\n\n\t.pre-item-image {\n\t\twidth: 100%;\n\t\theight: 140rpx;\n\t}\n\n\t.u-delete-icon {\n\t\tposition: absolute;\n\t\ttop: 10rpx;\n\t\tright: 10rpx;\n\t\tz-index: 10;\n\t\tbackground-color: $u-type-error;\n\t\tborder-radius: 100rpx;\n\t\twidth: 44rpx;\n\t\theight: 44rpx;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsB/waterfall/index.vue",
    "content": "<template>\n\t<view class=\"wrap\">\n\t\t<u-waterfall v-model=\"flowList\" ref=\"uWaterfall\">\n\t\t\t<template v-slot:left=\"{ leftList }\">\n\t\t\t\t<view class=\"demo-warter\" v-for=\"(item, index) in leftList\" :key=\"index\">\n\t\t\t\t\t<!-- 微信小程序需要hx2.8.11版本才支持在template中引入其他组件，比如下方的u-lazy-load组件 -->\n\t\t\t\t\t<u-lazy-load threshold=\"-450\" border-radius=\"10\" :image=\"item.image\" :index=\"index\"></u-lazy-load>\n\t\t\t\t\t<view class=\"demo-title\">{{ item.title }}</view>\n\t\t\t\t\t<view class=\"demo-price\">{{ item.price }}元</view>\n\t\t\t\t\t<view class=\"demo-tag\">\n\t\t\t\t\t\t<view class=\"demo-tag-owner\">自营</view>\n\t\t\t\t\t\t<view class=\"demo-tag-text\">放心购</view>\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"demo-shop\">{{ item.shop }}</view>\n\t\t\t\t\t<view class=\"u-close\">\n\t\t\t\t\t\t<u-icon name=\"close-circle-fill\" color=\"#fa3534\" size=\"34\" @click=\"remove(item.id)\"></u-icon>\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t</template>\n\t\t\t<template v-slot:right=\"{ rightList }\">\n\t\t\t\t<view class=\"demo-warter\" v-for=\"(item, index) in rightList\" :key=\"index\">\n\t\t\t\t\t<u-lazy-load threshold=\"-450\" border-radius=\"10\" :image=\"item.image\" :index=\"index\"></u-lazy-load>\n\t\t\t\t\t<view class=\"demo-title\">{{ item.title }}</view>\n\t\t\t\t\t<view class=\"demo-price\">{{ item.price }}元</view>\n\t\t\t\t\t<view class=\"demo-tag\">\n\t\t\t\t\t\t<view class=\"demo-tag-owner\">自营</view>\n\t\t\t\t\t\t<view class=\"demo-tag-text\">放心购</view>\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"demo-shop\">{{ item.shop }}</view>\n\t\t\t\t\t<view class=\"u-close\">\n\t\t\t\t\t\t<u-icon name=\"close-circle-fill\" color=\"#fa3534\" size=\"34\" @click=\"remove(item.id)\"></u-icon>\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t</template>\n\t\t</u-waterfall>\n\t\t<u-loadmore bg-color=\"rgb(240, 240, 240)\" :status=\"loadStatus\" @loadmore=\"addRandomData\"></u-loadmore>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tloadStatus: 'loadmore',\n\t\t\tflowList: [],\n\t\t\tlist: [\n\t\t\t\t{\n\t\t\t\t\tprice: 35,\n\t\t\t\t\ttitle: '北国风光，千里冰封，万里雪飘',\n\t\t\t\t\tshop: '李白杜甫白居易旗舰店',\n\t\t\t\t\timage: 'http://pic.sc.chinaz.com/Files/pic/pic9/202002/zzpic23327_s.jpg'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprice: 75,\n\t\t\t\t\ttitle: '望长城内外，惟余莽莽',\n\t\t\t\t\tshop: '李白杜甫白居易旗舰店',\n\t\t\t\t\timage: 'http://pic.sc.chinaz.com/Files/pic/pic9/202002/zzpic23325_s.jpg'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprice: 385,\n\t\t\t\t\ttitle: '大河上下，顿失滔滔',\n\t\t\t\t\tshop: '李白杜甫白居易旗舰店',\n\t\t\t\t\timage: 'http://pic2.sc.chinaz.com/Files/pic/pic9/202002/hpic2119_s.jpg'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprice: 784,\n\t\t\t\t\ttitle: '欲与天公试比高',\n\t\t\t\t\tshop: '李白杜甫白居易旗舰店',\n\t\t\t\t\timage: 'http://pic2.sc.chinaz.com/Files/pic/pic9/202002/zzpic23369_s.jpg'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprice: 7891,\n\t\t\t\t\ttitle: '须晴日，看红装素裹，分外妖娆',\n\t\t\t\t\tshop: '李白杜甫白居易旗舰店',\n\t\t\t\t\timage: 'http://pic2.sc.chinaz.com/Files/pic/pic9/202002/hpic2130_s.jpg'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprice: 2341,\n\t\t\t\t\tshop: '李白杜甫白居易旗舰店',\n\t\t\t\t\ttitle: '江山如此多娇，引无数英雄竞折腰',\n\t\t\t\t\timage: 'http://pic1.sc.chinaz.com/Files/pic/pic9/202002/zzpic23346_s.jpg'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprice: 661,\n\t\t\t\t\tshop: '李白杜甫白居易旗舰店',\n\t\t\t\t\ttitle: '惜秦皇汉武，略输文采',\n\t\t\t\t\timage: 'http://pic1.sc.chinaz.com/Files/pic/pic9/202002/zzpic23344_s.jpg'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprice: 1654,\n\t\t\t\t\ttitle: '唐宗宋祖，稍逊风骚',\n\t\t\t\t\tshop: '李白杜甫白居易旗舰店',\n\t\t\t\t\timage: 'http://pic1.sc.chinaz.com/Files/pic/pic9/202002/zzpic23343_s.jpg'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprice: 1678,\n\t\t\t\t\ttitle: '一代天骄，成吉思汗',\n\t\t\t\t\tshop: '李白杜甫白居易旗舰店',\n\t\t\t\t\timage: 'http://pic1.sc.chinaz.com/Files/pic/pic9/202002/zzpic23343_s.jpg'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprice: 924,\n\t\t\t\t\ttitle: '只识弯弓射大雕',\n\t\t\t\t\tshop: '李白杜甫白居易旗舰店',\n\t\t\t\t\timage: 'http://pic1.sc.chinaz.com/Files/pic/pic9/202002/zzpic23343_s.jpg'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprice: 8243,\n\t\t\t\t\ttitle: '俱往矣，数风流人物，还看今朝',\n\t\t\t\t\tshop: '李白杜甫白居易旗舰店',\n\t\t\t\t\timage: 'http://pic1.sc.chinaz.com/Files/pic/pic9/202002/zzpic23343_s.jpg'\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t},\n\tonLoad() {\n\t\tthis.addRandomData();\n\t},\n\tonReachBottom() {\n\t\tthis.loadStatus = 'loading';\n\t\t// 模拟数据加载\n\t\tsetTimeout(() => {\n\t\t\tthis.addRandomData();\n\t\t\tthis.loadStatus = 'loadmore';\n\t\t}, 1000);\n\t},\n\tmethods: {\n\t\taddRandomData() {\n\t\t\tfor (let i = 0; i < 10; i++) {\n\t\t\t\tlet index = this.$u.random(0, this.list.length - 1);\n\t\t\t\t// 先转成字符串再转成对象，避免数组对象引用导致数据混乱\n\t\t\t\tlet item = JSON.parse(JSON.stringify(this.list[index]));\n\t\t\t\titem.id = this.$u.guid();\n\t\t\t\tthis.flowList.push(item);\n\t\t\t}\n\t\t},\n\t\tremove(id) {\n\t\t\tthis.$refs.uWaterfall.remove(id);\n\t\t},\n\t\tclear() {\n\t\t\tthis.$refs.uWaterfall.clear();\n\t\t}\n\t}\n};\n</script>\n\n<style>\n/* page不能写带scope的style标签中，否则无效 */\npage {\n\tbackground-color: rgb(240, 240, 240);\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.demo-warter {\n\tborder-radius: 8px;\n\tmargin: 5px;\n\tbackground-color: #ffffff;\n\tpadding: 8px;\n\tposition: relative;\n}\n\n.u-close {\n\tposition: absolute;\n\ttop: 32rpx;\n\tright: 32rpx;\n}\n\n.demo-img-wrap {\n}\n\n.demo-image {\n\twidth: 100%;\n\tborder-radius: 4px;\n}\n\n.demo-title {\n\tfont-size: 30rpx;\n\tmargin-top: 5px;\n\tcolor: $u-main-color;\n\tword-break: break-all;\n}\n\n.demo-tag {\n\tdisplay: flex;\n\tmargin-top: 5px;\n}\n\n.demo-tag-owner {\n\tbackground-color: $u-type-error;\n\tcolor: #ffffff;\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 4rpx 14rpx;\n\tborder-radius: 50rpx;\n\tfont-size: 20rpx;\n\tline-height: 1;\n}\n\n.demo-tag-text {\n\tborder: 1px solid $u-type-primary;\n\tcolor: $u-type-primary;\n\tmargin-left: 10px;\n\tborder-radius: 50rpx;\n\tline-height: 1;\n\tpadding: 4rpx 14rpx;\n\tdisplay: flex;\n\talign-items: center;\n\tborder-radius: 50rpx;\n\tfont-size: 20rpx;\n}\n\n.demo-price {\n\tfont-size: 30rpx;\n\tcolor: $u-type-error;\n\tmargin-top: 5px;\n}\n\n.demo-shop {\n\tfont-size: 22rpx;\n\tcolor: $u-tips-color;\n\tmargin-top: 5px;\n}\n</style>\n"
  },
  {
    "path": "pages/componentsC/actionSheet/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<u-button @click=\"showAction\">唤起ActionSheet</u-button>\n\t\t\t\t<u-action-sheet :cancel-btn=\"cancel\" :mask-close-able=\"maskClick\" :tips=\"tips\" \n\t\t\t\t@click=\"click\" :list=\"list\" v-model=\"show\" :safe-area-inset-bottom=\"true\"></u-action-sheet>\n\t\t\t</view> \n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">取消按钮</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"cancelChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">点击遮罩关闭</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"maskClickChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tlist: [{\n\t\t\t\t\ttext: '最是人间留不住',\n\t\t\t\t}, {\n\t\t\t\t\ttext: '朱颜辞镜花辞树',\n\t\t\t\t\tdisabled: true\n\t\t\t\t}, {\n\t\t\t\t\ttext: '正是江南好风景',\n\t\t\t\t\tsubText: '春江水暖鸭先知'\n\t\t\t\t}, {\n\t\t\t\t\ttext: '落花时节又逢君'\n\t\t\t\t}],\n\t\t\t\ttips: {\n\t\t\t\t\ttext: ''\n\t\t\t\t},\n\t\t\t\tshow: false,\n\t\t\t\tcancel: true,\n\t\t\t\tmaskClick: true\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tshowAction() {\n\t\t\t\tthis.show = true;\n\t\t\t},\n\t\t\tclick(index) {\n\t\t\t\tthis.$refs.uToast.show({\n\t\t\t\t\ttype: 'success',\n\t\t\t\t\ttitle: '点击了第' + (index + 1) + '项'\n\t\t\t\t})\n\t\t\t},\n\t\t\ttipsChange(index) {\n\t\t\t\tif(index == 0) this.show = true;\n\t\t\t\tthis.tips.text = index == 0 ? '请谨慎执行您的操作' : ''\n\t\t\t},\n\t\t\tcancelChange(index) {\n\t\t\t\tthis.show = true;\n\t\t\t\tthis.cancel = index == 0 ? true : false\n\t\t\t},\n\t\t\tmaskClickChange(index) {\n\t\t\t\tif(index == 1) this.cancel = true;\n\t\t\t\tthis.show = true;\n\t\t\t\tthis.maskClick = index == 0 ? true : false\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.wrap {\n\t\tpadding: 24rpx;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsC/alertTips/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<u-alert-tips @close=\"close\" :closeAble=\"closeAble\" :show=\"show\" @click=\"click\"\n\t\t\t\t:type=\"type\" :title=\"title\" :description=\"description\" :showIcon=\"showIcon\"></u-alert-tips>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">左侧图标</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"showIconChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">关闭图标</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['显示', '隐藏']\" @change=\"closeAbleChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">主题</view>\n\t\t\t\t<u-subsection current=\"3\" :list=\"['primary', 'success', 'error', 'warning', 'info']\" @change=\"typeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">状态</view>\n\t\t\t\t<u-subsection :current=\"current\" :list=\"['开启', '关闭']\" @change=\"showChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttitle: '大漠孤烟直，长河落日圆',\n\t\t\t\tdescription: \"月落乌啼霜满天，江枫渔火对愁眠。姑苏城外寒山寺，夜半钟声到客船。飞流直下三千尺，疑是银河落九天！\",\n\t\t\t\tshow: true,\n\t\t\t\tcloseAble: false,\n\t\t\t\tshowIcon: false,\n\t\t\t\ttype: 'warning',\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tcurrent() {\n\t\t\t\treturn this.show ? 0 : 1;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tshowIconChange(index) {\n\t\t\t\tthis.showIcon = index == 0 ? true : false;\n\t\t\t},\n\t\t\tshowChange(index) {\n\t\t\t\tthis.show = index == 0 ? true : false;\n\t\t\t},\n\t\t\tcloseAbleChange(index) {\n\t\t\t\tthis.closeAble = index == 0 ? true : false;\n\t\t\t},\n\t\t\ttypeChange(index) {\n\t\t\t\tthis.type = index == 0 ? 'primary' : index == 1 ? 'success' : index == 2 ? 'error' : index == 3 ? 'warning'  : 'info';\n\t\t\t},\n\t\t\tclose() {\n\t\t\t\tthis.show = false;\n\t\t\t\tthis.$refs.uToast.show({\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\ttitle: '点击关闭按钮'\n\t\t\t\t})\n\t\t\t},\n\t\t\tclick() {\n\t\t\t\tthis.$refs.uToast.show({\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\ttitle: '点击内容'\n\t\t\t\t})\n\t\t\t},\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.wrap {\n\t\tpadding: 24rpx;\n\t}\n\t\n\t.item {\n\t\tmargin: 30rpx 0;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsC/badge/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-badge-wrap\"><u-badge :is-center=\"isCenter\" :type=\"type\" :count=\"count\" :is-dot=\"isDot\" :offset=\"offset\" :size=\"size\"></u-badge></view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">参数配置</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">数值显示</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"[0, 8, 15, 106, 209]\" @change=\"countChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">主题选择</view>\n\t\t\t\t<u-subsection current=\"2\" :list=\"['primary', 'success', 'error', 'warning', 'info']\" @change=\"typeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">显示点</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"isDotChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">尺寸</view>\n\t\t\t\t<u-subsection :list=\"['default', 'mini']\" @change=\"sizeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">位置偏移</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['[20, 20]', '[-8, -8]', '[-20, -20]']\" @change=\"offsetChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">中心点与父右上角重合</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"isCenterChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tcount: 8,\n\t\t\ttype: 'error',\n\t\t\tisDot: false,\n\t\t\toffset: [-8, -8],\n\t\t\tsize: 'default',\n\t\t\tisCenter: false\n\t\t};\n\t},\n\tmethods: {\n\t\tcountChange(index) {\n\t\t\tthis.count = index == 0 ? 0 : index == 1 ? 8 : index == 2 ? 15 : index == 3 ? 106 : 209;\n\t\t},\n\t\ttypeChange(index) {\n\t\t\tthis.type = index == 0 ? 'primary' : index == 1 ? 'success' : index == 2 ? 'error' : index == 3 ? 'warning' : 'info';\n\t\t},\n\t\tsizeChange(index) {\n\t\t\tthis.size = index == 0 ? 'default' : 'mini';\n\t\t},\n\t\tisDotChange(index) {\n\t\t\tthis.isDot = index == 0 ? true : false;\n\t\t},\n\t\toffsetChange(index) {\n\t\t\tthis.offset = index == 0 ? [20, 20] : index == 1 ? [-8, -8] : [-20, -20];\n\t\t},\n\t\tisCenterChange(index) {\n\t\t\tthis.isCenter = index == 0 ? true : false;\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.u-badge-wrap {\n\twidth: 60px;\n\theight: 60px;\n\tborder-radius: 6px;\n\tbackground-color: $u-light-color;\n\tposition: relative;\n\tmargin: auto;\n}\n</style>\n"
  },
  {
    "path": "pages/componentsC/button/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-button @click=\"btnClick\" data-name=\"3333\" :loading=\"loading\" :plain=\"plain\" :shape=\"shape\" :size=\"size\" :ripple=\"ripple\" :hairLine=\"hairLine\" :type=\"type\">山川异域，风月同天</u-button>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">主题选择</view>\n\t\t\t\t<u-subsection :list=\"['default', 'primary', 'error', 'warning', 'success']\" @change=\"typeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">尺寸大小</view>\n\t\t\t\t<u-subsection :list=\"['默认', '中等', '迷你']\" @change=\"sizeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">形状</view>\n\t\t\t\t<u-subsection :list=\"['直角', '圆角']\" @change=\"shapeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">镂空</view>\n\t\t\t\t<u-subsection :current=\"1\" :list=\"['是', '否']\" @change=\"plainChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">水波纹(感觉哪里有问题？点击顶部的按钮试试)</view>\n\t\t\t\t<u-subsection :current=\"1\" :list=\"['是', '否']\" @change=\"rippleChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">细边框</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"hairLineChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">加载中</view>\n\t\t\t\t<u-subsection :current=\"1\" :list=\"['是', '否']\" @change=\"loadingChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\thairLine: true,\n\t\t\t\ttype: 'default',\n\t\t\t\tsize: 'default',\n\t\t\t\tshape: 'square',\n\t\t\t\tplain: false,\n\t\t\t\tripple: false,\n\t\t\t\tloading: false,\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\ttypeChange(e) {\n\t\t\t\tswitch (e) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tthis.type = 'default';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tthis.type = 'primary';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tthis.type = 'error';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\tthis.type = 'warning';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\tthis.type = 'success';\n\t\t\t\t\t\tbreak;s\n\t\t\t\t}\n\t\t\t},\n\t\t\tsizeChange(e) {\n\t\t\t\tswitch (e) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tthis.size = 'default';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tthis.size = 'medium';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tthis.size = 'mini';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tshapeChange(e) {\n\t\t\t\tthis.shape = e == 0 ? 'square' : 'circle';\n\t\t\t},\n\t\t\tplainChange(e) {\n\t\t\t\tthis.plain = e == 0 ? true : false;\n\t\t\t},\n\t\t\trippleChange(e) {\n\t\t\t\tthis.ripple = e == 0 ? true : false;\n\t\t\t},\n\t\t\thairLineChange(e) {\n\t\t\t\tthis.hairLine = e == 0 ? true : false;\n\t\t\t},\n\t\t\tloadingChange(index) {\n\t\t\t\tthis.loading = index == 0 ? true : false;\n\t\t\t},\n\t\t\tbtnClick() {\n\t\t\t\tthis.$u.toast('按钮被点击')\n\t\t\t},\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.box {\n\t\tpadding: 30rpx;\n\t}\n\n\t.box /deep/ button {\n\t\tmargin-bottom: 40rpx;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsC/cell/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\" style=\"padding-left:0;padding-right:0;margin-left: -40rpx;margin-right: -40rpx;\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-cell-group title=\"读万卷书\">\n\t\t\t\t\t<u-cell-item center :is-link=\"true\" :label=\"label\" value=\"铁马冰河入梦来\" i ndex=\"index\" @click=\"click\" :hover-class=\"hoverClass\"\n\t\t\t\t\t :arrow=\"arrow\" :title=\"title\" :icon=\"icon\">\n\t\t\t\t\t\t<u-badge :absolute=\"false\" v-if=\"rightSlot == 'badge'\" count=\"105\" slot=\"right-icon\"></u-badge>\n\t\t\t\t\t\t<u-switch v-if=\"rightSlot == 'switch'\" slot=\"right-icon\" v-model=\"checked\"></u-switch>\n\t\t\t\t\t</u-cell-item>\n\t\t\t\t\t<u-cell-item :border-bottom=\"false\" value=\"\" title=\"铁马冰河入梦来\" value=\"行万里路\" :arrow=\"false\">\n\t\t\t\t\t\t<u-icon slot=\"icon\" size=\"34\" name=\"calendar\" style=\"margin-right: 5px;\"></u-icon>\n\t\t\t\t\t\t<u-icon slot=\"right-icon\" size=\"34\" name=\"calendar\"></u-icon>\n\t\t\t\t\t\t<u-field slot=\"value\"></u-field>\n\t\t\t\t\t</u-cell-item>\n\t\t\t\t</u-cell-group>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">更换图标</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"iconChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<!-- 小程序无法动态切换slot -->\n\t\t\t<!-- #ifndef MP -->\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义右侧内容</view>\n\t\t\t\t<u-subsection :list=\"['文字', 'Switch组件', 'Badge组件']\" @change=\"rightSlotChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<!-- #endif -->\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">描述信息</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"lableChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">更换标题</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"titleChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">右侧箭头</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"arrowChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ticon: 'setting',\n\t\t\t\tarrow: true,\n\t\t\t\tlabel: '',\n\t\t\t\ttitle: '青山一道同云雨',\n\t\t\t\trightSlot: true,\n\t\t\t\tchecked: false,\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\thoverClass() {\n\t\t\t\t// 如果右侧是switch步进器组件的话，去掉cell的点击反馈，因为这个时候点击的反馈应该在switch上\n\t\t\t\treturn this.rightSlot == 'switch' ? 'none' : 'u-cell-hover';\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\ticonChange(index) {\n\t\t\t\tthis.icon = index == 0 ? 'setting' : 'file-text'\n\t\t\t},\n\t\t\tarrowChange(index) {\n\t\t\t\tthis.arrow = index == 0 ? true : false\n\t\t\t},\n\t\t\tlableChange(index) {\n\t\t\t\tthis.label = index == 0 ? '岂曰无衣，与子同裳' : ''\n\t\t\t},\n\t\t\ttitleChange(index) {\n\t\t\t\tthis.title = index == 0 ? '青山一道同云雨' : '明月何曾是两乡'\n\t\t\t},\n\t\t\trightSlotChange(index) {\n\t\t\t\tthis.rightSlot = index == 0 ? 'text' : index == 1 ? 'switch' : 'badge'\n\t\t\t\tif (index == 0) this.arrow = true;\n\t\t\t\telse this.arrow = false;\n\t\t\t},\n\t\t\tclick(index) {\n\t\t\t\t// console.log(index);\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style lang=\"scss\" scoped>\n\t.gab {\n\t\tbackground-color: rgb(245, 245, 245);\n\t\theight: 20rpx;\n\t}\n\n\t.wrap {\n\t\theight: 100vh;\n\t\tbackground-color: rgb(241, 241, 241);\n\t}\n\n\t.box {\n\t\tpadding: 30rpx 00rpx;\n\t\tfont-size: 28rpx;\n\t\tcolor: $u-type-info;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsC/circleProgress/index.vue",
    "content": "<template>\n\t<view class=\"wrap\">\n\t\t<view class=\"item\">\n\t\t\t<u-circle-progress type=\"warning\" :percent=\"percent\">\n\t\t\t\t<view class=\"u-progress-content\">\n\t\t\t\t\t<view class=\"u-progress-dot\"></view>\n\t\t\t\t\t<text class='u-progress-info'>查找中</text>\n\t\t\t\t</view>\n\t\t\t</u-circle-progress>\n\t\t\t<u-circle-progress type=\"warning\" :width=\"150\" :percent=\"percent\">\n\t\t\t\t<view class=\"u-progress-content\">\n\t\t\t\t\t<view class=\"u-progress-dot\"></view>\n\t\t\t\t\t<text class='u-progress-info'>查找中</text>\n\t\t\t\t</view>\n\t\t\t</u-circle-progress>\n\t\t</view>\n\t\t<view class=\"item\">\n\t\t\t<u-line-progress></u-line-progress>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tpercent: 33\n\t\t\t}\n\t\t},\n\t\tonLoad() {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.percent = 50;\n\t\t\t}, 1500);\n\t\t},\n\t\tmethods: {\n\t\t\t\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.wrap {\n\t\tpadding: 24rpx;\n\t}\n\t\n\t.u-progress-content {\n\t\tposition: absolute;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t}\n\t\n\t.u-progress-dot {\n\t\twidth: 16rpx;\n\t\theight: 16rpx;\n\t\tborder-radius: 50%;\n\t\tbackground-color: #fb9126;\n\t}\n\t\n\t.u-progress-info {\n\t\tfont-size: 28rpx;\n\t\tpadding-left: 16rpx;\n\t\tletter-spacing: 2rpx\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsC/collapse/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\" style=\"background-color: #ffffff;\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<u-collapse v-if=\"key\" :item-style=\"itemStyle\" event-type=\"close\" :arrow=\"arrow\" :accordion=\"accordion\" @change=\"change\">\n\t\t\t\t\t<u-collapse-item :index=\"index\" @change=\"itemChange\" :title=\"item.head\" v-for=\"(item, index) in itemList\" :key=\"index\">\n\t\t\t\t\t\t{{item.body}}\n\t\t\t\t\t</u-collapse-item>\n\t\t\t\t</u-collapse>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">手风琴模式</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"accordionChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">右侧箭头</view>\n\t\t\t\t<u-subsection :list=\"['显示', '隐藏']\" @change=\"arrowChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义样式</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"styleChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\titemList: [{\n\t\t\t\t\thead: \"赏识在于角度的转换\",\n\t\t\t\t\tbody: \"只要我们正确择取一个合适的参照物乃至稍降一格去看待他人，值得赏识的东西便会扑面而来：闪光的道德、妙异的智慧、优美的人情…… 赏识不是单向的施舍，是智慧与智慧的主动碰撞\",\n\t\t\t\t\tshow: false,\n\t\t\t\t}, {\n\t\t\t\t\thead: \"生活中不是缺少美，而是缺少发现美的眼睛\",\n\t\t\t\t\tbody: \"学会欣赏，实际是一种积极生活的态度，是生活的调味品，会在欣赏中发现生活的美\",\n\t\t\t\t\tshow: false,\n\t\t\t\t}, {\n\t\t\t\t\thead: \"周围一些不起眼的人、事、物，或许都隐藏着不同凡响的智慧\",\n\t\t\t\t\tbody: \"但是据说雕刻大卫像所用的这块大理石，曾被多位雕刻家批评得一无是处，有些人认为这块大理石采凿得不好，有些人嫌它的纹路不够美，用它绝对雕不出好的艺术品，总之它被批评为一块不受人赏识的普通石头\",\n\t\t\t\t\tshow: false,\n\t\t\t\t}, {\n\t\t\t\t\thead: \"点燃心中的火焰，找回了自信和人生的价值\",\n\t\t\t\t\tbody: \"他随手翻了几页，竟被一篇题名为《童年》的小说所吸引，作者是一个初出茅庐的无名小辈，但屠格涅夫却十分欣赏，钟爱有加\",\n\t\t\t\t\tshow: false,\n\t\t\t\t}, {\n\t\t\t\t\thead: \"因为赏识，那块被人不耻的石头变成了雕塑\",\n\t\t\t\t\tbody: \"这个材料反应的就是赏识的问题，赏识是一种理解和信任，包含了肯定与欣赏，也是一种激励和引导，可以使人悔过自新，扬长避短，更健康地成长和进步\",\n\t\t\t\t\tshow: false,\n\t\t\t\t}],\n\t\t\t\taccordion: true,\n\t\t\t\tarrow: true,\n\t\t\t\thoverClass: 'hover2',\n\t\t\t\titemStyle: {},\n\t\t\t\tkey: true\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\taccordionChange(index) {\n\t\t\t\tthis.accordion = index == 0 ? true : false;\n\t\t\t},\n\t\t\tarrowChange(index) {\n\t\t\t\tthis.arrow = index == 0 ? true : false;\n\t\t\t\tthis.changeStatus();\n\t\t\t},\n\t\t\tstyleChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.itemStyle = {\n\t\t\t\t\t\tborder: '1px solid rgb(230, 230, 230)',\n\t\t\t\t\t\tmarginTop: '20px',\n\t\t\t\t\t\tpadding: '0 8rpx'\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.itemStyle = {}\n\t\t\t\t}\n\t\t\t\tthis.changeStatus();\n\t\t\t},\n\t\t\tchange(index) {\n\t\t\t\tlet str = '';\n\t\t\t\tif(Array.isArray(index)) {\n\t\t\t\t\tlet arr = index.map(val => {\n\t\t\t\t\t\treturn Number(val) + 1;\n\t\t\t\t\t})\n\t\t\t\t\tindex = arr.join(',');\n\t\t\t\t} else {\n\t\t\t\t\tindex = Number(index) + 1;\n\t\t\t\t}\n\t\t\t\tthis.$refs.uToast.show({\n\t\t\t\t\ttitle: `点击了第${index}个`,\n\t\t\t\t\ttype: 'warning'\n\t\t\t\t})\n\t\t\t},\n\t\t\titemChange(e) {\n\t\t\t\tconsole.log(e);\n\t\t\t},\n\t\t\tchangeStatus() {\n\t\t\t\tthis.key = false;\n\t\t\t\tthis.$nextTick(function(){\n\t\t\t\t\tthis.key = true;\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style>\n\t.hover1 {\n\t\tbackground-color: red;\n\t}\n</style>\n\n<style lang=\"scss\" scoped>\n\t.wrap {\n\t\t// padding: 24rpx;\n\t}\n\n\t.item {\n\t\t//padding: 0 24rpx;\n\t}\n\n\t.head {\n\t\tfont-size: 30rpx;\n\t\tcolor: $u-main-color;\n\t\tline-height: 1;\n\t\tpadding: 24rpx 24rpx;\n\t}\n\n\t.body {\n\t\tfont-size: 28rpx;\n\t\tcolor: $u-tips-color;\n\t\tline-height: 1.4;\n\t\tpadding: 24rpx;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsC/color/index.vue",
    "content": "<template>\n\t<view class=\"wrap\">\n\t\t<view class=\"item\">\n\t\t\t<view class=\"title\">\n\t\t\t\t主色调\n\t\t\t</view>\n\t\t\t<view class=\"color-box\">\n\t\t\t\t<view class=\"color-item\" style=\"background: #2979ff;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\tPrimary\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#2979ff\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"color-item\" style=\"background: #2b85e4;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\tDark\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#2b85e4\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"color-item\" style=\"background: #a0cfff;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\tDisabled\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#a0cfff\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"color-item\" style=\"background: #ecf5ff;color: #909399;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\tLight\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#ecf5ff\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"item\">\n\t\t\t<view class=\"title\">\n\t\t\t\tError\n\t\t\t</view>\n\t\t\t<view class=\"color-box\">\n\t\t\t\t<view class=\"color-item\" style=\"background: #fa3534;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\tError\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#fa3534\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"color-item\" style=\"background: #dd6161;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\tDark\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#dd6161\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"color-item\" style=\"background: #fab6b6;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\tDisabled\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#fab6b6\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"color-item\" style=\"background: #fef0f0;color: #909399;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\tLight\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#fef0f0\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"item\">\n\t\t\t<view class=\"title\">\n\t\t\t\tWarning\n\t\t\t</view>\n\t\t\t<view class=\"color-box\">\n\t\t\t\t<view class=\"color-item\" style=\"background: #ff9900;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\tWarning\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#ff9900\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"color-item\" style=\"background: #f29100;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\tDark\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#f29100\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"color-item\" style=\"background: #fcbd71;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\tDisabled\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#fcbd71\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"color-item\" style=\"background: #fdf6ec;color: #909399;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\tLight\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#fdf6ec\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"item\">\n\t\t\t<view class=\"title\">\n\t\t\t\tInfo\n\t\t\t</view>\n\t\t\t<view class=\"color-box\">\n\t\t\t\t<view class=\"color-item\" style=\"background: #909399;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\tInfo\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#909399\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"color-item\" style=\"background: #82848a;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\tDark\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#82848a\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"color-item\" style=\"background: #c8c9cc;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\tDisabled\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#c8c9cc\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"color-item\" style=\"background: #f4f4f5;color: #909399;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\tLight\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#f4f4f5\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"item\">\n\t\t\t<view class=\"title\">\n\t\t\t\tSuccess\n\t\t\t</view>\n\t\t\t<view class=\"color-box\">\n\t\t\t\t<view class=\"color-item\" style=\"background: #19be6b;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\tSuccess\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#19be6b\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"color-item\" style=\"background: #18b566;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\tDark\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#18b566\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"color-item\" style=\"background: #71d5a1;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\tDisabled\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#71d5a1\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"color-item\" style=\"background: #dbf1e1;color: #909399;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\tLight\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#dbf1e1\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"item\">\n\t\t\t<view class=\"title\">\n\t\t\t\t文字颜色\n\t\t\t</view>\n\t\t\t<view class=\"color-box\">\n\t\t\t\t<view class=\"color-item\" style=\"background: #303133;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\t主要文字\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#303133\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"color-item\" style=\"background: #606266;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\t常规文字\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#606266\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"color-item\" style=\"background: #909399;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\t次要文字\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#909399\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"color-item\" style=\"background: #c0c4cc;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\t占位文字\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#c0c4cc\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"item\">\n\t\t\t<view class=\"title\">                                                                                                          \n\t\t\t\t边框颜色\n\t\t\t</view>\n\t\t\t<view class=\"color-box\">\n\t\t\t\t<view class=\"color-item\" style=\"background: #dcdfe6;color: #909399;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\t一级边框\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#dcdfe6\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"color-item\" style=\"background: #e4e7ed;color: #909399;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\t二级边框\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#e4e7ed\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"color-item\" style=\"background: #ebeef5;color: #909399;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\t三级边框\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#ebeef5\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"color-item\" style=\"background: #f2f6fc;color: #909399;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\t四级边框\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#f2f6fc\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"item\">\n\t\t\t<view class=\"title\">\n\t\t\t\t背景颜色\n\t\t\t</view>\n\t\t\t<view class=\"color-box\">\n\t\t\t\t<view class=\"color-item\" style=\"background: #f3f4f6;color: #909399;\">\n\t\t\t\t\t<view class=\"color-title\">\n\t\t\t\t\t\t背景颜色\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"color-value\">\n\t\t\t\t\t\t#f3f4f6\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tonLoad() {\n\t\t\tgetApp().globalData.username = 'test12';\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.wrap {\n\t\tpadding: 18rpx;\n\t}\n\t\n\t.item {\n\t\tmargin: 30rpx 0;\n\t\tmargin-top: 44rpx;\n\t\t\n\t\t&:first-child {\n\t\t\tmargin-top: 0;\n\t\t}\n\t\t\n\t\t&:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t\n\t\t.title {\n\t\t\tfont-size: 30rpx;\n\t\t\tposition: relative;\n\t\t\tline-height: 1;\n\t\t\tpadding-left: 22rpx;\n\t\t\t\n\t\t\t&:before {\n\t\t\t\twidth: 4px;\n\t\t\t\theight: 15px;\n\t\t\t\tborder-radius: 100rpx;\n\t\t\t\tbackground-color: $u-content-color;\n\t\t\t\tcontent: '';\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 6rpx;\n\t\t\t\ttop: -1px;\n\t\t\t}\n\t\t}\n\t\t\n\t\t.color-box {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: space-between;\n\t\t\tcolor: #fff;\n\t\t\ttext-align: center;\n\t\t\tmargin-top: 20rpx;\n\t\t\t\n\t\t\t.color-item {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex: 1;\n\t\t\t\tmargin: 0 8rpx;\n\t\t\t\tflex-direction: column;\n\t\t\t\tborder-radius: 6rpx;\n\t\t\t\tpadding: 12rpx 0;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t.color-title {\n\t\t\t\tfont-size: 28rpx;\n\t\t\t}\n\t\t\t\n\t\t\t.color-value {\n\t\t\t\tfont-size: 24rpx;\n\t\t\t}\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsC/countDown/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<u-count-down class=\"count-down-demo\"  :timestamp=\"timestamp\" :separator=\"separator\" :showBorder=\"showBorder\"\n\t\t\t\t:separator-color=\"separatorColor\" :showDays=\"showDays\" :fontSize=\"fontSize\" @change=\"change\" ref=\"uCountDown\"\n\t\t\t\t:border-color=\"borderColor\" :color=\"color\" @end=\"end\" bg-color=\"rgb(250, 250, 250)\"></u-count-down>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">调整时间</view>\n\t\t\t\t<u-subsection :list=\"['60', '86400', '983272']\" @change=\"timestampChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">分隔符</view>\n\t\t\t\t<u-subsection :list=\"['英文冒号', '中文名称']\" @change=\"separatorChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义样式</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"styleChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">显示天</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"showDaysChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">字体大小</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['26', '30', '34']\" @change=\"fontSizeChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\ttimestamp: 60,\n\t\t\tseparator: 'colon',\n\t\t\tshowBorder: false,\n\t\t\tborderColor: '#303133',\n\t\t\tcolor: '#303133',\n\t\t\tshowDays: false,\n\t\t\tfontSize: 30,\n\t\t\tseparatorColor: '#303133',\n\t\t};\n\t},\n\tmethods: {\n\t\ttimestampChange(index) {\n\t\t\tthis.timestamp = index == 0 ? 60 : index == 1 ? 86400 : 983272;\n\t\t},\n\t\tseparatorChange(index) {\n\t\t\tthis.separator = index == 0 ? 'colon' : 'zh';\n\t\t},\n\t\tstyleChange(index) {\n\t\t\tif(index == 0) {\n\t\t\t\tthis.showBorder = true;\n\t\t\t\tthis.borderColor = this.$u.color['primary'];\n\t\t\t\tthis.color = this.$u.color['primary'];\n\t\t\t\tthis.separatorColor = this.$u.color['primary'];\n\t\t\t} else {\n\t\t\t\tthis.showBorder = false;\n\t\t\t\tthis.borderColor = '#303133';\n\t\t\t\tthis.color = '#303133';\n\t\t\t\tthis.separatorColor = '#303133';\n\t\t\t}\n\t\t},\n\t\tshowDaysChange(index) {\n\t\t\tthis.showDays = index == 0 ? true : false;\n\t\t},\n\t\tfontSizeChange(index) {\n\t\t\tthis.fontSize = index == 0 ? 26 : index == 1 ? 30 : 34;\n\t\t},\n\t\tend() {\n\t\t\tthis.$refs.uToast.show({\n\t\t\t\ttitle: '倒计时结束',\n\t\t\t\ttype: 'warning'\n\t\t\t})\n\t\t},\n\t\tchange(timestamp) {\n\t\t\t// console.log(timestamp);\n\t\t},\n\t\tgetSeconds() {\n\t\t\t// console.log(this.$refs.uCountDown.seconds);\n\t\t}\n\t}\n};\n</script>\n\n<style scoped lang=\"scss\">\n.count-down-demo {\n\tjustify-content: center;\n}\n</style>\n"
  },
  {
    "path": "pages/componentsC/countTo/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<view class=\"u-no-demo-here\">如果使用text-align: center对齐，数字滚动期间可能会抖动，见文档说明</view>\n\t\t\t\t<view class=\"count-to-demo\">\n\t\t\t\t\t<u-count-to\n\t\t\t\t\t\tclass=\"count-to\"\n\t\t\t\t\t\t:useEasing=\"useEasing\"\n\t\t\t\t\t\tref=\"uCountTo\"\n\t\t\t\t\t\t:autoplay=\"autoplay\"\n\t\t\t\t\t\t:startVal=\"startVal\"\n\t\t\t\t\t\t:endVal=\"endVal\"\n\t\t\t\t\t\t:duration=\"duration\"\n\t\t\t\t\t\t:decimals=\"decimals\"\n\t\t\t\t\t\t:bold=\"bold\"\n\t\t\t\t\t\t@end=\"end\"\n\t\t\t\t\t></u-count-to>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">参数配置</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">状态</view>\n\t\t\t\t<u-subsection :current=\"current\" :list=\"['启动', '暂停', '继续', '重置']\" @change=\"statusChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">目标值</view>\n\t\t\t\t<u-subsection :list=\"[608, 5604, 45617]\" @change=\"endValChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">滚动时间</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"[1000, 2000, 3000]\" @change=\"durationChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">显示小数</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"decimalsChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">字体加粗</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"boldChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tstartVal: 0,\n\t\t\tendVal: 608,\n\t\t\tseparator: ',',\n\t\t\tdecimals: 0,\n\t\t\tduration: 2000,\n\t\t\tautoplay: false,\n\t\t\tuseEasing: true,\n\t\t\tcurrent: 3,\n\t\t\tisStop: false, // 如果开没启动前，不允许点击状态选项的\"继续\"按钮，否则会导致显示NaN\n\t\t\tbold: false\n\t\t};\n\t},\n\tmethods: {\n\t\tendValChange(index) {\n\t\t\tthis.endVal = index == 0 ? 608 : index == 1 ? 5604 : 45617;\n\t\t\tthis.reset();\n\t\t\tthis.start();\n\t\t},\n\t\tdurationChange(index) {\n\t\t\tthis.duration = index == 0 ? 1000 : index == 1 ? 2000 : 3000;\n\t\t},\n\t\tboldChange(index) {\n\t\t\tthis.bold = !!!index;\n\t\t},\n\t\tdecimalsChange(index) {\n\t\t\tthis.decimals = index == 0 ? 2 : 0;\n\t\t},\n\t\tstatusChange(index) {\n\t\t\tthis.current = index;\n\t\t\tif (index == 0) {\n\t\t\t\tthis.start();\n\t\t\t} else if (index == 1) {\n\t\t\t\tthis.stop();\n\t\t\t} else if (index == 2) {\n\t\t\t\tthis.resume();\n\t\t\t} else {\n\t\t\t\tthis.reset();\n\t\t\t}\n\t\t},\n\t\tend() {\n\t\t\tthis.current = 3;\n\t\t\tthis.$refs.uToast.show({\n\t\t\t\ttype: 'warning',\n\t\t\t\ttitle: '滚动结束'\n\t\t\t});\n\t\t},\n\t\tstart() {\n\t\t\tthis.current = 0;\n\t\t\tthis.isStop = true;\n\t\t\tthis.$refs.uCountTo.start();\n\t\t},\n\t\tstop() {\n\t\t\tthis.$refs.uCountTo.stop();\n\t\t},\n\t\tresume() {\n\t\t\tif (!this.isStop) {\n\t\t\t\tthis.$refs.uToast.show({\n\t\t\t\t\ttype: 'error',\n\t\t\t\t\ttitle: '请开始并暂停后才能继续'\n\t\t\t\t});\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.current = 3;\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.$refs.uCountTo.resume();\n\t\t},\n\t\treset() {\n\t\t\tthis.$refs.uCountTo.reset();\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.count-to-demo {\n\ttext-align: center;\n}\n</style>\n"
  },
  {
    "path": "pages/componentsC/gap/index.vue",
    "content": "<!--\n * @Desc: ---   ----\n * @Date: 2020-04-22 12:29:21\n * @LastEditors: 王\n * @LastEditTime: 2020-04-22 18:33:28\n -->\n<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-gap :bg-color=\"bgColor\" :height=\"height\" :margin-top=\"marginTop\" :margin-bottom=\"marginBottom\"></u-gap>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">参数配置</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">背景颜色</view>\n\t\t\t\t<u-subsection :list=\"['default', 'primary', 'error', 'warning', 'success']\" @change=\"bgColorChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">高度</view>\n\t\t\t\t<u-subsection :list=\"['30', '50', '70']\" @change=\"heightChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">上下外边距</view>\n\t\t\t\t<u-subsection :list=\"['30', '50', '70']\" @change=\"marginChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\theight: 30,\n\t\t\tbgColor: this.$u.color.bgColor,\n\t\t\tmarginTop: 30,\n\t\t\tmarginBottom: 30\n\t\t};\n\t},\n\tmethods: {\n\t\tbgColorChange(index) {\n\t\t\tlet color = index == 0 ? 'default' : index == 1 ? 'primary' : index == 2 ? 'error' : index == 3 ? 'warning' : 'success';\n\t\t\tthis.bgColor = color == 'default' ? this.$u.color['bgColor'] : this.$u.color[color];\n\t\t},\n\t\theightChange(index) {\n\t\t\tthis.height = index == 0 ? 30 : index == 1 ? 50 : 70;\n\t\t},\n\t\tmarginChange(index) {\n\t\t\tthis.marginTop = ['30', '50', '70'][index];\n\t\t\tthis.marginBottom = this.marginTop;\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.wrap {\n\tpadding: 24rpx;\n}\n</style>\n"
  },
  {
    "path": "pages/componentsC/grid/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<u-grid :col=\"col\" @click=\"click\" v-if=\"!isSwiper\" :border=\"border\">\n\t\t\t\t\t<u-grid-item name=\"item1\" :index=\"0\" @click=\"itemClick\">\n\t\t\t\t\t\t<u-badge count=\"9\" :offset=\"[col == 3 ? 20 : 14, col == 3 ? 30 : 20]\"></u-badge>\n\t\t\t\t\t\t<u-icon name=\"photo\" :size=\"46\"></u-icon>\n\t\t\t\t\t\t<view class=\"grid-text\">图片</view>\n\t\t\t\t\t</u-grid-item>\n\t\t\t\t\t<u-grid-item :index=\"1\">\n\t\t\t\t\t\t<u-icon name=\"lock\" :size=\"46\"></u-icon>\n\t\t\t\t\t\t<view class=\"grid-text\">锁头</view>\n\t\t\t\t\t</u-grid-item>\n\t\t\t\t\t<u-grid-item :index=\"2\">\n\t\t\t\t\t\t<image src=\"https://cdn.uviewui.com/uview/grid/hot5.png\" :style=\"{\n\t\t\t\t\t\t\ttop: col == 3 ? '14rpx' : '8rpx',\n\t\t\t\t\t\t\tright: col == 3 ? '40rpx' : '28rpx'\n\t\t\t\t\t\t}\" style=\"width: 34rpx;height: 34rpx;\" class=\"badge-icon\" mode=\"widthFix\"></image>\n\t\t\t\t\t\t<u-icon name=\"hourglass\" :size=\"46\"></u-icon>\n\t\t\t\t\t\t<view class=\"grid-text\">沙漏</view>\n\t\t\t\t\t</u-grid-item>\n\t\t\t\t\t<u-grid-item :index=\"3\">\n\t\t\t\t\t\t<u-icon name=\"home\" :size=\"46\"></u-icon>\n\t\t\t\t\t\t<view class=\"grid-text\">首页</view>\n\t\t\t\t\t</u-grid-item>\n\t\t\t\t\t<u-grid-item :index=\"4\">\n\t\t\t\t\t\t<u-icon name=\"star\" :size=\"46\"></u-icon>\n\t\t\t\t\t\t<view class=\"grid-text\">星星</view>\n\t\t\t\t\t</u-grid-item>\n\t\t\t\t\t<u-grid-item :index=\"5\">\n\t\t\t\t\t\t<u-icon name=\"volume-up\" :size=\"46\"></u-icon>\n\t\t\t\t\t\t<view class=\"grid-text\">音量</view>\n\t\t\t\t\t</u-grid-item>\n\t\t\t\t\t<u-grid-item :index=\"6\">\n\t\t\t\t\t\t<image src=\"https://cdn.uviewui.com/uview/grid/hot6.png\" style=\"width: 44rpx;height: 44rpx;top:0;right:0;\" class=\"badge-icon\"></image>\n\t\t\t\t\t\t<u-icon name=\"trash\" :size=\"46\"></u-icon>\n\t\t\t\t\t\t<view class=\"grid-text\">回收站</view>\n\t\t\t\t\t</u-grid-item>\n\t\t\t\t\t<u-grid-item :index=\"7\">\n\t\t\t\t\t\t<u-icon name=\"rewind-right\" :size=\"46\"></u-icon>\n\t\t\t\t\t\t<view class=\"grid-text\">快进</view>\n\t\t\t\t\t</u-grid-item>\n\t\t\t\t\t<u-grid-item :index=\"8\">\n\t\t\t\t\t\t<u-icon name=\"shopping-cart\" :size=\"46\"></u-icon>\n\t\t\t\t\t\t<view class=\"grid-text\">购物车</view>\n\t\t\t\t\t</u-grid-item>\n\t\t\t\t</u-grid>\n\t\t\t\t<swiper class=\"swiper\" v-else @change=\"change\">\n\t\t\t\t\t<swiper-item>\n\t\t\t\t\t\t<u-grid :border=\"border\" :col=\"col\" @click=\"click\" hover-class=\"hover-class\">\n\t\t\t\t\t\t\t<u-grid-item v-for=\"(item, index) in list\" :index=\"index\" :key=\"index\">\n\t\t\t\t\t\t\t\t<u-icon :name=\"item\" :size=\"46\"></u-icon>\n\t\t\t\t\t\t\t\t<text class=\"grid-text\">{{ '宫格' + (index + 1) }}</text>\n\t\t\t\t\t\t\t</u-grid-item>\n\t\t\t\t\t\t</u-grid>\n\t\t\t\t\t</swiper-item>\n\t\t\t\t\t<swiper-item>\n\t\t\t\t\t\t<u-grid :border=\"border\" :col=\"col\" @click=\"click\">\n\t\t\t\t\t\t\t<u-grid-item v-for=\"(item, index) in list\" :index=\"index + 9\" :key=\"index\">\n\t\t\t\t\t\t\t\t<u-icon :name=\"item\" :size=\"46\"></u-icon>\n\t\t\t\t\t\t\t\t<text class=\"grid-text\">{{ '宫格' + (index + 1) }}</text>\n\t\t\t\t\t\t\t</u-grid-item>\n\t\t\t\t\t\t</u-grid>\n\t\t\t\t\t</swiper-item>\n\t\t\t\t\t<swiper-item>\n\t\t\t\t\t\t<u-grid :border=\"border\" :col=\"col\" @click=\"click\">\n\t\t\t\t\t\t\t<u-grid-item v-for=\"(item, index) in list\" :index=\"index + 18\" :key=\"index\">\n\t\t\t\t\t\t\t\t<u-icon :name=\"item\" :size=\"46\"></u-icon>\n\t\t\t\t\t\t\t\t<text class=\"grid-text\">{{ '宫格' + (index + 1) }}</text>\n\t\t\t\t\t\t\t</u-grid-item>\n\t\t\t\t\t\t</u-grid>\n\t\t\t\t\t</swiper-item>\n\t\t\t\t</swiper>\n\t\t\t\t<view class=\"indicator-dots\" v-if=\"isSwiper\">\n\t\t\t\t\t<view class=\"indicator-dots-item\" :class=\"[current == 0 ? 'indicator-dots-active' : '']\">\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"indicator-dots-item\" :class=\"[current == 1 ? 'indicator-dots-active' : '']\">\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"indicator-dots-item\" :class=\"[current == 2 ? 'indicator-dots-active' : '']\">\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">是否显示边框</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"borderChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">是否可滑动</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"isSwiperChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">修改列数</view>\n\t\t\t\t<u-subsection :list=\"['3', '4']\" @change=\"colChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tlist: ['integral', 'kefu-ermai', 'coupon', 'gift', 'scan', 'pause-circle', 'wifi', 'email', 'list'],\n\t\t\t\tisSwiper: false,\n\t\t\t\tcurrent: 0,\n\t\t\t\tborder: true,\n\t\t\t\tcol: 3\n\t\t\t};\n\t\t},\n\t\tmethods: {\n\t\t\tisSwiperChange(index) {\n\t\t\t\tthis.isSwiper = index == 0 ? true : false;\n\t\t\t},\n\t\t\tborderChange(index) {\n\t\t\t\tthis.border = index == 0 ? true : false;\n\t\t\t},\n\t\t\tcolChange(index) {\n\t\t\t\tthis.col = index == 0 ? 3 : 4;\n\t\t\t},\n\t\t\tclick(index) {\n\t\t\t\tthis.$refs.uToast.show({\n\t\t\t\t\ttitle: `点击了第${index + 1}宫格`,\n\t\t\t\t\ttype: 'warning'\n\t\t\t\t})\n\t\t\t},\n\t\t\tchange(e) {\n\t\t\t\tthis.current = e.detail.current;\n\t\t\t},\n\t\t\t// 针对单个grid-item的事件\n\t\t\titemClick(index) {\n\t\t\t\t// console.log(index);\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style scoped lang=\"scss\">\n.grid-text {\n\tfont-size: 28rpx;\n\tmargin-top: 4rpx;\n\tcolor: $u-type-info;\n}\n\n.badge-icon {\n\tposition: absolute;\n\twidth: 40rpx;\n\theight: 40rpx;\n}\n\n.swiper {\n\theight: 480rpx;\n}\n\n.indicator-dots {\n\tmargin-top: 40rpx;\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n}\n\n.indicator-dots-item {\n\tbackground-color: $u-tips-color;\n\theight: 6px;\n\twidth: 6px;\n\tborder-radius: 10px;\n\tmargin: 0 3px;\n}\n\n.indicator-dots-active {\n\tbackground-color: $u-type-primary;\n}\n</style>\n"
  },
  {
    "path": "pages/componentsC/layout/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-row :justify=\"justify\" @click=\"rowClick\">\n\t\t\t\t\t<u-col :span=\"span\" :offset=\"offset\" @click=\"click\" stop>\n\t\t\t\t\t\t<view class=\"demo-layout bg-purple-dark\">\n\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</u-col>\n\t\t\t\t\t<u-col :span=\"span\" :offset=\"offset\">\n\t\t\t\t\t\t<view class=\"demo-layout bg-purple-dark\">\n\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</u-col>\n\t\t\t\t\t<u-col :span=\"span\" :offset=\"offset\">\n\t\t\t\t\t\t<view class=\"demo-layout bg-purple-dark\">\n\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</u-col>\n\t\t\t\t</u-row>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">每个栅格占用栏数(演示共3个栅格)</view>\n\t\t\t\t<u-subsection :current=\"2\" :list=\"[1, 2, 3, 4]\" @change=\"spanChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">分栏偏移</view>\n\t\t\t\t<u-subsection :list=\"[0, 1, 2, 3]\" @change=\"offsetChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<!-- #ifndef MP -->\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">水平排列方式(微信小程序无效)</view>\n\t\t\t\t<u-subsection :list=\"['start', 'end', 'around', 'between']\" @change=\"justifyChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<!-- #endif -->\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tspan: 3,\n\t\t\t\toffset: 0,\n\t\t\t\tjustify: 'start'\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tclick() {\n\t\t\t\tconsole.log('col click');\n\t\t\t},\n\t\t\trowClick() {\n\t\t\t\tconsole.log('row click');\n\t\t\t},\n\t\t\tspanChange(e) {\n\t\t\t\tswitch (e) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tthis.span = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tthis.span = 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tthis.span = 3;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\tthis.span = 4;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\tthis.span = 5;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\toffsetChange(e) {\n\t\t\t\tswitch (e) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tthis.offset = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tthis.offset = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tthis.offset = 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\tthis.offset = 3;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tjustifyChange(e) {\n\t\t\t\tswitch (e) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tthis.justify = 'start';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tthis.justify = 'end';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tthis.justify = 'around';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\tthis.justify = 'between';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t.demo-layout {\n\t\theight: 70rpx;\n\t\tborder-radius: 8rpx;\n\t\tmargin: 20rpx 0;\n\t}\n\n\t.bg-purple {\n\t\tbackground: #d3dce6;\n\t}\n\n\t.bg-purple-light {\n\t\tbackground: #e5e9f2;\n\t}\n\n\t.bg-purple-dark {\n\t\tbackground: #99a9bf;\n\t}\n\n\t// H5中，电脑端文档演示时，可能会导致演示块挤出边界，特别处理。\n\t// 真实使用环境不会产生此问题\n\t/* #ifdef H5 */\n\t.u-demo-area /deep/ .u-row {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t}\n\t/* #endif */\n</style>\n"
  },
  {
    "path": "pages/componentsC/link/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-link :color=\"color\" :font-size=\"fontSize\" :under-line=\"underLine\" :href=\"href\">点此链接，跳转uView官网</u-link>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">下划线</view>\n\t\t\t\t<u-subsection :list=\"['显示', '隐藏']\" @change=\"underLineChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义样式</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"styleChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\thref: 'https://www.uviewui.com',\n\t\t\t\tunderLine: true,\n\t\t\t\tfontSize: 28,\n\t\t\t\tcolor: '#2979ff'\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tunderLineChange(index) {\n\t\t\t\tthis.underLine = index == 0 ? true : false;\n\t\t\t},\n\t\t\tstyleChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.color = this.$u.color['tipsColor'];\n\t\t\t\t\tthis.fontSize = 34;\n\t\t\t\t} else {\n\t\t\t\t\tthis.color = this.$u.color['primary'];\n\t\t\t\t\tthis.fontSize = 28;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/componentsC/loadmore/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\" />\n\t\t\t\t<u-loadmore :status=\"status\" :loadText=\"loadText\"\n\t\t\t\t:icon-type=\"iconType\" :is-dot=\"isDot\" @loadmore=\"loadmore\"/>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">模式选择</view>\n\t\t\t\t<u-subsection :current=\"current\" :list=\"['加载前', '加载中', '加载后', '没有更多']\" @change=\"statusChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义提示语</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"loadTextChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">加载中图标样式</view>\n\t\t\t\t<u-subsection :list=\"['circle', 'flower']\" @change=\"styleChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">没有更多时用点替代</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"isDotChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tstatus: 'loadmore',\n\t\t\t\ticonType: 'circle',\n\t\t\t\tisDot: false,\n\t\t\t\tloadText: {\n\t\t\t\t\tloadmore: '点击或上拉加载更多',\n\t\t\t\t\tloading: '正在加载...',\n\t\t\t\t\tnomore: '没有更多了'\n\t\t\t\t},\n\t\t\t\tcurrent: 0\n\t\t\t}\n\t\t},\n\t\tonReachBottom() {\n\t\t\t// 在此请求下一页\n\t\t},\n\t\tmethods: {\n\t\t\tstatusChange(index) {\n\t\t\t\tthis.current = index;\n\t\t\t\tthis.status = index == 0 ? 'loadmore' : index == 1 ? 'loading' : index == 2 ? 'loadmore' : 'nomore';\n\t\t\t},\n\t\t\tloadTextChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.loadText = {\n\t\t\t\t\t\tloadmore: '用力往上拉',\n\t\t\t\t\t\tloading: '正在加载，请喝杯茶...',\n\t\t\t\t\t\tnomore: '我也是有底线的'\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.loadText = {\n\t\t\t\t\t\tloadmore: '点击或上拉加载更多',\n\t\t\t\t\t\tloading: '正在加载...',\n\t\t\t\t\t\tnomore: '没有更多了'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tstyleChange(index) {\n\t\t\t\tthis.current = 1;\n\t\t\t\tthis.statusChange(1);\n\t\t\t\tthis.iconType = index == 0 ? 'circle' : 'flower';\n\t\t\t},\n\t\t\tisDotChange(index) {\n\t\t\t\tthis.current = 3;\n\t\t\t\tthis.statusChange(3);\n\t\t\t\tthis.isDot = index == 0 ? true : false;\n\t\t\t},\n\t\t\t// 点击组件，触发加载更多事件(status为'loadmore'状态下才触发)\n\t\t\tloadmore() {\n\t\t\t\tthis.$refs.uToast.show({\n\t\t\t\t\ttitle: '点击触发加载更多',\n\t\t\t\t\ttype: 'success'\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>"
  },
  {
    "path": "pages/componentsC/mask/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<view class=\"u-no-demo-here\">\n\t\t\t\t\t请点击弹出遮罩查看效果\n\t\t\t\t</view>\n\t\t\t\t<u-mask :show=\"show\" @click=\"show = false\" :zoom=\"zoom\" :duration=\"duration\">\n\t\t\t\t\t<view class=\"warp\" v-if=\"content\">\n\t\t\t\t\t\t<view class=\"rect\" @tap.stop></view>\n\t\t\t\t\t</view>\n\t\t\t\t</u-mask>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">状态</view>\n\t\t\t\t<u-subsection :current=\"current\" :list=\"['显示', '隐藏']\" @change=\"showChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">缩放效果</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"zoomChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">内容填充</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"contentChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">动画时长(ms)</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['100', '300', '800']\" @change=\"durationChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tshow: false,\n\t\t\t\tzoom: true,\n\t\t\t\tduration: 300,\n\t\t\t\tcontent: false,\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tcurrent() {\n\t\t\t\treturn this.show ? 0 : 1;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tshowChange(index) {\n\t\t\t\tthis.show = index == 0 ? true : false;\n\t\t\t},\n\t\t\tzoomChange(index) {\n\t\t\t\tthis.zoom = index == 0 ? true : false;\n\t\t\t\tthis.show = true;\n\t\t\t},\n\t\t\tdurationChange(index) {\n\t\t\t\tthis.duration = index == 0 ? 100 : index == 1 ? 300 : 800;\n\t\t\t\tthis.show = true;\n\t\t\t},\n\t\t\tcontentChange(index) {\n\t\t\t\tthis.content = index == 0 ? true : false;\n\t\t\t\tthis.show = true;\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t.warp {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\theight: 100%;\n\t}\n\n\t.rect {\n\t\twidth: 120px;\n\t\theight: 120px;\n\t\tbackground-color: #fff;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsC/messageInput/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<u-message-input :mode=\"mode\" :maxlength=\"maxlength\" :value=\"value\"\n\t\t\t\t:breathe=\"breathe\" :bold=\"bold\" @finish=\"finish\" :dot-fill=\"dotFill\"></u-message-input>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">模式选择</view>\n\t\t\t\t<u-subsection :list=\"['方框', '下划线', '中划线']\" @change=\"modeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">输入长度</view>\n\t\t\t\t<u-subsection :list=\"[4, 5, 6]\" @change=\"maxLengthChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<!-- #ifdef MP-WEIXIN -->\n\t\t\t\t<view class=\"u-item-title\">初始值(为满足演示需要，微信小程序切换会有抖动，非性能问题)</view>\n\t\t\t\t<!-- #endif -->\n\t\t\t\t<!-- #ifndef MP-WEIXIN -->\n\t\t\t\t<view class=\"u-item-title\">初始值</view>\n\t\t\t\t<!-- #endif -->\n\t\t\t\t<u-subsection :list=\"['空', '23', '678']\" @change=\"valueChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">呼吸灯效果</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"breatheChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">是否加粗</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"boldChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">点替代输入值</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"dotFillChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tmode: 'box',\n\t\t\t\tmaxlength: 4,\n\t\t\t\tvalue: '', \n\t\t\t\tbold: true,\n\t\t\t\tbreathe: true,\n\t\t\t\tdotFill: false,\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\n\t\t},\n\t\tonLoad() {\n\n\t\t},\n\t\tmethods: {\n\t\t\tmodeChange(index) {\n\t\t\t\tthis.mode = index == 0 ? 'box' : index == 1 ? 'bottomLine' : 'middleLine';\n\t\t\t},\n\t\t\tmaxLengthChange(index) {\n\t\t\t\tthis.maxlength = index == 0 ? 4 : index == 1 ? 5 : 6;\n\t\t\t},\n\t\t\tvalueChange(index) {\n\t\t\t\tthis.value = index == 0 ? '' : index == 1 ? '23' : '678';\n\t\t\t},\n\t\t\tbreatheChange(index) {\n\t\t\t\tthis.breathe = index == 0 ? true : false;\n\t\t\t},\n\t\t\tboldChange(index) {\n\t\t\t\tthis.bold = index == 0 ? true : false;\n\t\t\t},\n\t\t\tdotFillChange(index) {\n\t\t\t\tthis.dotFill = index == 0 ? true : false;\n\t\t\t},\n\t\t\tfinish(value) {\n\t\t\t\tthis.$refs.uToast.show({\n\t\t\t\t\ttitle: '输入完成，值为：' + value,\n\t\t\t\t\ttype: 'success'\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/componentsC/numberBox/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-number-box v-model=\"value\" :bg-color=\"bgColor\" :color=\"color\" :min=\"0\"\n\t\t\t\t:step=\"step\" :disabled=\"disabled\" @change=\"change\" @focus=\"focus\"></u-number-box>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">初始值</view>\n\t\t\t\t<u-subsection :list=\"[1, 5, 18]\" @change=\"valueChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义样式</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"styleChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">是否禁用</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"disabledChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">步进值</view>\n\t\t\t\t<u-subsection :list=\"[1, 3, 5, 8]\" @change=\"stepChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tvalue: 1,\n\t\t\tbgColor: \"#F2F3F5\",\n\t\t\tcolor: '#323233',\n\t\t\tdisabled: false,\n\t\t\tstep: 1,\n\t\t\t\n\t\t};\n\t},\n\tmethods: {\n\t\tvalueChange(index) {\n\t\t\tthis.value = index == 0 ? 1 : index == 1 ? 5 : 18;\n\t\t},\n\t\tstyleChange(index) {\n\t\t\tif(index == 0) {\n\t\t\t\tthis.bgColor = '#ff6d00';\n\t\t\t\tthis.color = '#fff';\n\t\t\t} else {\n\t\t\t\tthis.bgColor = \"#F2F3F5\";\n\t\t\t\tthis.color = '#323233';\n\t\t\t}\n\t\t},\n\t\tdisabledChange(index) {\n\t\t\tthis.disabled = index == 0 ? true : false;\n\t\t},\n\t\tstepChange(index) {\n\t\t\tthis.step = index == 0 ? 1 : index == 1 ? 3 : index == 2 ? 5 : 8;\n\t\t},\n\t\tchange(e) {\n\t\t\t//console.log(e.value);\n\t\t},\n\t\tfocus() {\n\t\t\tconsole.log('focus');\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/componentsC/popup/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<u-button @click=\"btnClick\">唤起弹窗</u-button>\n\t\t\t\t<u-popup border-radius=\"10\" v-model=\"show\" \n\t\t\t\t\t@close=\"close\" @open=\"open\" :mode=\"mode\" \n\t\t\t\t\tlength=\"50%\" :mask=\"mask\"\n\t\t\t\t\t:closeable=\"closeable\"\n\t\t\t\t\t:close-icon-pos=\"closeIconPos\"\n\t\t\t\t>\n\t\t\t\t\t<view v-if=\"mode == 'center'\" style=\"height: 400rpx\">\n\t\t\t\t\t\t<view class=\"close-btn\">\n\t\t\t\t\t\t\t<u-button @click=\"show = false;\" size=\"medium\">关闭弹窗</u-button>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"close-btn\" v-if=\"mode != 'center'\">\n\t\t\t\t\t\t<u-button size=\"medium\" @click=\"show = false;\">关闭弹窗</u-button>\n\t\t\t\t\t</view>\n\t\t\t\t</u-popup>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">状态</view>\n\t\t\t\t<u-subsection :current=\"show == false ? 1 : 0\" :list=\"['打开', '关闭']\" @change=\"showChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">弹出方向</view>\n\t\t\t\t<u-subsection :current=\"2\" :list=\"['上', '下', '左', '右', '中']\" @change=\"modeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">关闭按钮</view>\n\t\t\t\t<u-subsection :list=\"['显示', '隐藏']\" @change=\"closeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">关闭按钮位置</view>\n\t\t\t\t<u-subsection :current=\"1\" :list=\"['左上角', '右上角', '左下角', '右下角']\" @change=\"closePosChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tshow: false,\n\t\t\t\tmode: 'left',\n\t\t\t\tmask: true, // 是否显示遮罩\n\t\t\t\tcloseable: true,\n\t\t\t\tcloseIconPos: 'top-right'\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\tshow(n) {\n\t\t\t\t// console.log(n);\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tmodeChange(index) {\n\t\t\t\tthis.mode = index == 0 ? 'top' : index == 1 ? 'bottom' : index == 2 ? 'left' : index == 3 ? 'right' : 'center';\n\t\t\t\tthis.show = true;\n\t\t\t},\n\t\t\tshowChange(index) {\n\t\t\t\tthis.show = index == 0 ? true : false;\n\t\t\t},\n\t\t\tcloseChange(index) {\n\t\t\t\tthis.closeable = !index;\n\t\t\t},\n\t\t\tclosePosChange(index) {\n\t\t\t\tthis.closeIconPos = ['top-left', 'top-right', 'bottom-left', 'bottom-right'][index];\n\t\t\t},\n\t\t\tclose() {\n\t\t\t\t// console.log('close');\n\t\t\t},\n\t\t\topen() {\n\t\t\t\t// console.log('open');\n\t\t\t},\n\t\t\tbtnClick() {\n\t\t\t\tthis.show = true;\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.wrap {\n\t\tpadding: 24rpx;\n\t}\n\t\n\t.close-btn {\n\t\theight: 100%;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsC/progress/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-line-progress v-if=\"mode == 'line'\" :percent=\"percent\" :active-color=\"activeColor\" \n\t\t\t\t:striped=\"striped\" :stripedActive=\"stripedActive\"></u-line-progress>\n\t\t\t\t<u-circle-progress v-else :percent=\"percent\" :active-color=\"activeColor\" \n\t\t\t\tbg-color=\"rgb(250, 250, 250)\">\n\t\t\t\t\t<view class=\"u-progress-content\">\n\t\t\t\t\t\t<view class=\"u-progress-dot\"></view>\n\t\t\t\t\t\t<text class='u-progress-info'>查找中</text>\n\t\t\t\t\t</view>\n\t\t\t\t</u-circle-progress>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">模式选择</view>\n\t\t\t\t<u-subsection :current=\"current\" :list=\"['线型', '圆型']\" @change=\"modeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">增减</view>\n\t\t\t\t<u-subsection :list=\"['减少30%', '增加30%']\" @change=\"calcChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">自定义样式(线型时有效)</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"styleChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">动态条纹(线型时有效)</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"stripedChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tpercent: 50,\n\t\t\t\tmode: 'line',\n\t\t\t\tactiveColor: '#19be6b',\n\t\t\t\tstriped: false,\n\t\t\t\tstripedActive: false,\n\t\t\t\tcurrent: 0,\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tmodeChange(index) {\n\t\t\t\tthis.current = index;\n\t\t\t\tthis.mode = index == 0 ? 'line' : 'circle';\n\t\t\t},\n\t\t\tcalcChange(index) {\n\t\t\t\tthis.percent = index == 0 ? (this.percent - 30) : (this.percent + 30);\n\t\t\t\tif(this.percent > 100) this.percent = 100;\n\t\t\t\tif(this.percent < 0) this.percent = 0;\n\t\t\t},\n\t\t\tstyleChange(index) {\n\t\t\t\tthis.activeColor = index == 0 ? this.$u.color['error'] : '#19be6b';\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.mode = 'line';\n\t\t\t\t\tthis.current = 0;\n\t\t\t\t}\n\t\t\t},\n\t\t\tstripedChange(index) {\n\t\t\t\tthis.striped = index == 0 ? true : false;\n\t\t\t\tthis.stripedActive = this.striped;\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.mode = 'line';\n\t\t\t\t\tthis.current = 0;\n\t\t\t\t}\n\t\t\t},\n\t\t\t\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-progress-content {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t}\n\t\n\t.u-progress-dot {\n\t\twidth: 16rpx;\n\t\theight: 16rpx;\n\t\tborder-radius: 50%;\n\t\tbackground-color: #fb9126;\n\t}\n\t\n\t.u-progress-info {\n\t\tfont-size: 28rpx;\n\t\tpadding-left: 16rpx;\n\t\tletter-spacing: 2rpx\n\t}\n</style>\n"
  },
  {
    "path": "pages/componentsC/section/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-section :title=\"title\" :right=\"right\" :bold=\"bold\" :color=\"color\" :show-line=\"showLine\"></u-section>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">更换主标题</view>\n\t\t\t\t<u-subsection :current=\"1\" :list=\"['是', '否']\" @change=\"titleChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">竖条状态</view>\n\t\t\t\t<u-subsection :list=\"['显示', '隐藏']\" @change=\"showLineChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">是否显示右边部分</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"rightChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">主标题粗体</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"boldChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">主标题颜色</view>\n\t\t\t\t<u-subsection :list=\"['默认', '自定义']\" @change=\"colorChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttitle: '红豆生南国',\n\t\t\t\tbold: true,\n\t\t\t\tright: true,\n\t\t\t\tcolor: this.$u.color['mainColor'],\n\t\t\t\tshowLine: true\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\ttitleChange(index) {\n\t\t\t\tif(index == 0) this.title = '春来发几枝';\n\t\t\t\telse  this.title = '红豆生南国';\n\t\t\t},\n\t\t\trightChange(index) {\n\t\t\t\tthis.right = index == 0 ? true : false;\n\t\t\t},\n\t\t\tboldChange(index) {\n\t\t\t\tthis.bold = index == 0 ? true : false;\n\t\t\t},\n\t\t\tcolorChange(index) {\n\t\t\t\tthis.color = index == 0 ? this.$u.color['mainColor'] : this.$u.color['primary'];\n\t\t\t},\n\t\t\tshowLineChange(index) {\n\t\t\t\tthis.showLine = !index;\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/componentsC/subsection/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-subsection v-if=\"change\" :bold=\"bold\" :active-color=\"activeColor\" :current=\"current\" :mode=\"mode\" :list=\"['代付款', '待收货', '待评价']\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">模式选择(为满足演示需要，切换会有抖动，非性能问题)</view>\n\t\t\t\t<u-subsection mode=\"button\" :list=\"['button', 'subsection']\" @change=\"modeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">Current值</view>\n\t\t\t\t<u-subsection mode=\"button\" :list=\"[0, 1, 2]\" @change=\"currentChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">活动选项字颜色</view>\n\t\t\t\t<u-subsection mode=\"button\" :list=\"['primary', 'success', 'error', 'warning']\" @change=\"colorChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">字体加粗</view>\n\t\t\t\t<u-subsection mode=\"button\" :list=\"['是', '否']\" @change=\"boldChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tmode: 'button',\n\t\t\t\tcurrent: 0,\n\t\t\t\tactiveColor: this.$u.color['warning'],\n\t\t\t\tbold: true,\n\t\t\t\tchange: true,\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tmodeChange(e) {\n\t\t\t\tswitch(e) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tthis.mode = 'button';break;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tthis.mode = 'subsection';break;\n\t\t\t\t}\n\t\t\t\tthis.change = false;\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.change = true;\n\t\t\t\t})\n\t\t\t},\n\t\t\tcurrentChange(e) {\n\t\t\t\tthis.current = e;\n\t\t\t},\n\t\t\tcolorChange(e) {\n\t\t\t\tlet color = 'primary';\n\t\t\t\tswitch(e) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tcolor = 'primary';break;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tcolor = 'success';break;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tcolor = 'error';break;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\tcolor = 'warning';break;\n\t\t\t\t}\n\t\t\t\tthis.activeColor = this.$u.color[color];\n\t\t\t},\n\t\t\tboldChange(e) {\n\t\t\t\tswitch(e) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tthis.bold = true;break;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tthis.bold = false;break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/componentsC/test/index.vue",
    "content": "<template>\n\t<view></view>\n</template>"
  },
  {
    "path": "pages/example/components.config.js",
    "content": "\nexport default [{\n\t\tgroupName: '基础组件',\n\t\tgroupName_en: 'Basic components',\n\t\tlist: [{\n\t\t\tpath: '/pages/componentsC/color/index',\n\t\t\ticon: 'color',\n\t\t\ttitle: 'Color 色彩',\n\t\t\ttitle_en: 'Color',\n\t\t}, {\n\t\t\tpath: '/pages/componentsA/icon/index',\n\t\t\ticon: 'icon',\n\t\t\ttitle: 'Icon 图标',\n\t\t\ttitle_en: 'Icon',\n\t\t},{\n\t\t\tpath: '/pages/componentsB/image/index',\n\t\t\ticon: 'image',\n\t\t\ttitle: 'Image 图片',\n\t\t\ttitle_en: 'Image',\n\t\t}, {\n\t\t\tpath: '/pages/componentsC/button/index',\n\t\t\ticon: 'button',\n\t\t\ttitle: 'Button 按钮',\n\t\t\ttitle_en: 'Button',\n\t\t}, {\n\t\t\tpath: '/pages/componentsC/layout/index',\n\t\t\ticon: 'layout',\n\t\t\ttitle: 'Layout 布局',\n\t\t\ttitle_en: 'Layout',\n\t\t}, {\n\t\t\tpath: '/pages/componentsC/cell/index',\n\t\t\ticon: 'cell',\n\t\t\ttitle: 'Cell 单元格',\n\t\t\ttitle_en: 'Cell',\n\t\t}, {\n\t\t\tpath: '/pages/componentsC/badge/index',\n\t\t\ticon: 'badge',\n\t\t\ttitle: 'Badge 徽标数',\n\t\t\ttitle_en: 'Badge',\n\t\t}, {\n\t\t\tpath: '/pages/componentsA/tag/index',\n\t\t\ticon: 'tag',\n\t\t\ttitle: 'Tag 标签',\n\t\t\ttitle_en: 'Tag',\n\t\t}]\n\t},\n\t{\n\t\tgroupName: '表单组件',\n\t\tgroupName_en: 'Form components',\n\t\tlist: [{\n\t\t\tpath: '/pages/componentsA/form/index',\n\t\t\ticon: 'form',\n\t\t\ttitle: 'Form 表单',\n\t\t\ttitle_en: 'Form',\n\t\t}, {\n\t\t\tpath: '/pages/componentsA/calendar/index',\n\t\t\ticon: 'calendar',\n\t\t\ttitle: 'Calendar 日历',\n\t\t\ttitle_en: 'Calendar',\n\t\t}, {\n\t\t\tpath: '/pages/componentsA/select/index',\n\t\t\ticon: 'select',\n\t\t\ttitle: 'Select 列选择器',\n\t\t\ttitle_en: 'Select',\n\t\t}, {\n\t\t\tpath: '/pages/componentsA/keyboard/index',\n\t\t\ticon: 'keyboard',\n\t\t\ttitle: 'Keyboard 键盘',\n\t\t\ttitle_en: 'Keyboard',\n\t\t}, {\n\t\t\tpath: '/pages/componentsB/picker/index',\n\t\t\ticon: 'picker',\n\t\t\ttitle: 'Picker 选择器',\n\t\t\ttitle_en: 'Picker',\n\t\t}, {\n\t\t\tpath: '/pages/componentsB/rate/index',\n\t\t\ticon: 'rate',\n\t\t\ttitle: 'Rate 评分',\n\t\t\ttitle_en: 'Rate',\n\t\t}, {\n\t\t\tpath: '/pages/componentsB/search/index',\n\t\t\ticon: 'search',\n\t\t\ttitle: 'Search 搜索',\n\t\t\ttitle_en: 'Search',\n\t\t}, {\n\t\t\tpath: '/pages/componentsC/numberBox/index',\n\t\t\ticon: 'numberBox',\n\t\t\ttitle: 'NumberBox 步进器',\n\t\t\ttitle_en: 'NumberBox',\n\t\t}, {\n\t\t\tpath: '/pages/componentsB/upload/index',\n\t\t\ticon: 'upload',\n\t\t\ttitle: 'Upload 上传',\n\t\t\ttitle_en: 'Upload',\n\t\t}, {\n\t\t\tpath: '/pages/componentsA/verificationCode/index',\n\t\t\ticon: 'verificationCode',\n\t\t\ttitle: 'VerificationCode 验证码倒计时',\n\t\t\ttitle_en: 'VerificationCode',\n\t\t}, {\n\t\t\tpath: '/pages/componentsA/field/index',\n\t\t\ticon: 'field',\n\t\t\ttitle: 'Field 输入框',\n\t\t\ttitle_en: 'Field',\n\t\t}, {\n\t\t\tpath: '/pages/componentsB/checkbox/index',\n\t\t\ticon: 'checkbox',\n\t\t\ttitle: 'Checkbox 复选框',\n\t\t\ttitle_en: 'Checkbox',\n\t\t}, {\n\t\t\tpath: '/pages/componentsB/radio/index',\n\t\t\ticon: 'radio',\n\t\t\ttitle: 'Radio 单选框',\n\t\t\ttitle_en: 'Radio',\n\t\t}, {\n\t\t\tpath: '/pages/componentsB/switch/index',\n\t\t\ticon: 'switch',\n\t\t\ttitle: 'Switch 开关选择器',\n\t\t\ttitle_en: 'Switch',\n\t\t}, {\n\t\t\tpath: '/pages/componentsA/slider/index',\n\t\t\ticon: 'slider',\n\t\t\ttitle: 'Slider 滑动选择器',\n\t\t\ttitle_en: 'Slider',\n\t\t}]\n\t}, {\n\t\tgroupName: '数据组件',\n\t\tgroupName_en: 'Data components',\n\t\tlist: [{\n\t\t\tpath: '/pages/componentsC/progress/index',\n\t\t\ticon: 'progress',\n\t\t\ttitle: 'Progress 进度条',\n\t\t\ttitle_en: 'Progress',\n\t\t}, {\n\t\t\tpath: '/pages/componentsB/table/index',\n\t\t\ticon: 'table',\n\t\t\ttitle: 'Table 表格',\n\t\t\ttitle_en: 'Table',\n\t\t}, {\n\t\t\tpath: '/pages/componentsC/countDown/index',\n\t\t\ticon: 'countDown',\n\t\t\ttitle: 'CountDown 倒计时',\n\t\t\ttitle_en: 'CountDown',\n\t\t}, {\n\t\t\tpath: '/pages/componentsC/countTo/index',\n\t\t\ticon: 'countTo',\n\t\t\ttitle: 'CountTo 数字滚动',\n\t\t\ttitle_en: 'CountTo',\n\t\t}]\n\t}, {\n\t\tgroupName: '反馈组件',\n\t\tgroupName_en: 'Feedback components',\n\t\tlist: [{\n\t\t\tpath: '/pages/componentsC/actionSheet/index',\n\t\t\ticon: 'actionSheet',\n\t\t\ttitle: 'ActionSheet 操作菜单',\n\t\t\ttitle_en: 'ActionSheet',\n\t\t}, {\n\t\t\tpath: '/pages/componentsC/alertTips/index',\n\t\t\ticon: 'alertTips',\n\t\t\ttitle: 'AlertTips 警告提示',\n\t\t\ttitle_en: 'AlertTips',\n\t\t}, {\n\t\t\tpath: '/pages/componentsA/toast/index',\n\t\t\ticon: 'toast',\n\t\t\ttitle: 'Toast 消息提示',\n\t\t\ttitle_en: 'Toast',\n\t\t}, {\n\t\t\tpath: '/pages/componentsB/noticeBar/index',\n\t\t\ticon: 'noticeBar',\n\t\t\ttitle: 'NoticeBar 滚动通知',\n\t\t\ttitle_en: 'NoticeBar',\n\t\t}, {\n\t\t\tpath: '/pages/componentsA/topTips/index',\n\t\t\ticon: 'topTips',\n\t\t\ttitle: 'TopTips 顶部提示',\n\t\t\ttitle_en: 'TopTips',\n\t\t}, {\n\t\t\tpath: '/pages/componentsB/swipeAction/index',\n\t\t\ticon: 'swipeAction',\n\t\t\ttitle: 'SwipeAction 滑动单元格',\n\t\t\ttitle_en: 'SwipeAction',\n\t\t}, {\n\t\t\tpath: '/pages/componentsC/collapse/index',\n\t\t\ticon: 'collapse',\n\t\t\ttitle: 'Collapse 折叠面板',\n\t\t\ttitle_en: 'Collapse',\n\t\t}, {\n\t\t\tpath: '/pages/componentsC/popup/index',\n\t\t\ticon: 'popup',\n\t\t\ttitle: 'Popup 弹出层',\n\t\t\ttitle_en: 'Popup',\n\t\t}, {\n\t\t\tpath: '/pages/componentsA/modal/index',\n\t\t\ticon: 'modal',\n\t\t\ttitle: 'Modal 模态框',\n\t\t\ttitle_en: 'Modal',\n\t\t}, {\n\t\t\tpath: '/pages/componentsA/fullScreen/index',\n\t\t\ticon: 'pressingScreen',\n\t\t\ttitle: 'fullScreen 压窗屏',\n\t\t\ttitle_en: 'fullScreen',\n\t\t}]\n\t}, {\n\t\tgroupName: '布局组件',\n\t\tgroupName_en: 'Layout components',\n\t\tlist: [{\n\t\t\tpath: '/pages/componentsB/line/index',\n\t\t\ticon: 'line',\n\t\t\ttitle: 'Line 线条',\n\t\t\ttitle_en: 'Line',\n\t\t}, {\n\t\t\tpath: '/pages/componentsB/card/index',\n\t\t\ticon: 'card',\n\t\t\ttitle: 'Card 卡片',\n\t\t\ttitle_en: 'Card',\n\t\t}, {\n\t\t\tpath: '/pages/componentsC/mask/index',\n\t\t\ticon: 'mask',\n\t\t\ttitle: 'Mask 遮罩层',\n\t\t\ttitle_en: 'Mask',\n\t\t}, \n\t\t// #ifndef MP-TOUTIAO\n\t\t{\n\t\t\tpath: '/pages/componentsA/noNetwork/index',\n\t\t\ticon: 'noNetwork',\n\t\t\ttitle: 'NoNetwork 无网络提示',\n\t\t\ttitle_en: 'NoNetwork',\n\t\t}, \n\t\t// #endif\n\t\t{\n\t\t\tpath: '/pages/componentsC/grid/index',\n\t\t\ticon: 'grid',\n\t\t\ttitle: 'Grid 宫格布局',\n\t\t\ttitle_en: 'Grid',\n\t\t}, {\n\t\t\tpath: '/pages/componentsB/swiper/index',\n\t\t\ticon: 'swiper',\n\t\t\ttitle: 'Swiper 轮播图',\n\t\t\ttitle_en: 'Swiper',\n\t\t}, {\n\t\t\tpath: '/pages/componentsA/timeLine/index',\n\t\t\ticon: 'timeLine',\n\t\t\ttitle: 'TimeLine 时间轴',\n\t\t\ttitle_en: 'TimeLine',\n\t\t}, {\n\t\t\tpath: '/pages/componentsB/skeleton/index',\n\t\t\ticon: 'skeleton',\n\t\t\ttitle: 'Skeleton 骨架屏',\n\t\t\ttitle_en: 'Skeleton',\n\t\t}, {\n\t\t\tpath: '/pages/componentsB/sticky/index',\n\t\t\ticon: 'sticky',\n\t\t\ttitle: 'Sticky 吸顶',\n\t\t\ttitle_en: 'Sticky',\n\t\t}, \n\t\t// #ifndef MP-TOUTIAO\n\t\t{\n\t\t\tpath: '/pages/componentsB/waterfall/index',\n\t\t\ticon: 'waterfall',\n\t\t\ttitle: 'Waterfall 瀑布流',\n\t\t\ttitle_en: 'Waterfall',\n\t\t},\n\t\t// #endif\n\t\t{\n\t\t\tpath: '/pages/componentsB/divider/index',\n\t\t\ticon: 'divider',\n\t\t\ttitle: 'Divider 分割线',\n\t\t\ttitle_en: 'Divider',\n\t\t}]\n\t}, {\n\t\tgroupName: '导航组件',\n\t\tgroupName_en: 'Navigation components',\n\t\tlist: [{\n\t\t\tpath: '/pages/componentsB/dropdown/index',\n\t\t\ticon: 'dropdown',\n\t\t\ttitle: 'Dropdown 下拉菜单',\n\t\t\ttitle_en: 'Dropdown',\n\t\t},{\n\t\t\tpath: '/pages/componentsB/tabbar/index',\n\t\t\ticon: 'tabbar',\n\t\t\ttitle: 'Tabbar 底部导航栏',\n\t\t\ttitle_en: 'Tabbar',\n\t\t},{\n\t\t\tpath: '/pages/componentsA/backTop/index',\n\t\t\ticon: 'backTop',\n\t\t\ttitle: 'BackTop 返回顶部',\n\t\t\ttitle_en: 'BackTop',\n\t\t},{\n\t\t\tpath: '/pages/componentsA/navbar/index',\n\t\t\ticon: 'navbar',\n\t\t\ttitle: 'Navbar 导航栏',\n\t\t\ttitle_en: 'Navbar',\n\t\t}, {\n\t\t\tpath: '/pages/componentsA/tabs/index',\n\t\t\ticon: 'tabs',\n\t\t\ttitle: 'Tabs 标签',\n\t\t\ttitle_en: 'Tabs',\n\t\t}, \n\t\t// #ifndef MP-ALIPAY\n\t\t{\n\t\t\tpath: '/pages/template/order/index',\n\t\t\ticon: 'tabsSwiper',\n\t\t\ttitle: 'TabsSwiper 全屏选项卡',\n\t\t\ttitle_en: 'TabsSwiper',\n\t\t},\n\t\t// #endif\n\t\t{\n\t\t\tpath: '/pages/componentsC/subsection/index',\n\t\t\ticon: 'subsection',\n\t\t\ttitle: 'Subsection 分段器',\n\t\t\ttitle_en: 'Subsection',\n\t\t}, {\n\t\t\tpath: '/pages/componentsA/indexList/index',\n\t\t\ticon: 'indexList',\n\t\t\ttitle: 'IndexList 索引列表',\n\t\t\ttitle_en: 'IndexList',\n\t\t}, {\n\t\t\tpath: '/pages/componentsB/steps/index',\n\t\t\ticon: 'steps',\n\t\t\ttitle: 'Steps 步骤条',\n\t\t\ttitle_en: 'Steps',\n\t\t}, {\n\t\t\tpath: '/pages/componentsA/empty/index',\n\t\t\ticon: 'empty',\n\t\t\ttitle: 'Empty 内容为空',\n\t\t\ttitle_en: 'Empty',\n\t\t}, {\n\t\t\tpath: '/pages/componentsC/section/index',\n\t\t\ticon: 'section',\n\t\t\ttitle: 'Section 查看更多',\n\t\t\ttitle_en: 'Section',\n\t\t}]\n\t}, {\n\t\tgroupName: '其他组件',\n\t\tgroupName_en: 'Other components',\n\t\tlist: [{\n\t\t\tpath: '/pages/componentsA/parse/index',\n\t\t\ticon: 'parse',\n\t\t\ttitle: 'Parse 富文本解析器',\n\t\t\ttitle_en: 'Parse',\n\t\t},{\n\t\t\tpath: '/pages/componentsC/messageInput/index',\n\t\t\ticon: 'messageInput',\n\t\t\ttitle: 'MessageInput 验证码输入',\n\t\t\ttitle_en: 'MessageInput',\n\t\t}, {\n\t\t\tpath: '/pages/componentsA/avatarCropper/index',\n\t\t\ticon: 'avatarCropper',\n\t\t\ttitle: 'AvatarCropper 头像裁剪',\n\t\t\ttitle_en: 'AvatarCropper',\n\t\t}, {\n\t\t\tpath: '/pages/componentsC/loadmore/index',\n\t\t\ticon: 'loadmore', \n\t\t\ttitle: 'Loadmore 加载更多',\n\t\t\ttitle_en: 'Loadmore',\n\t\t}, {\n\t\t\tpath: '/pages/componentsB/readMore/index',\n\t\t\ticon: 'readMore',\n\t\t\ttitle: 'ReadMore 展开阅读更多',\n\t\t\ttitle_en: 'ReadMore',\n\t\t}, {\n\t\t\tpath: '/pages/componentsA/lazyLoad/index',\n\t\t\ticon: 'lazyLoad',\n\t\t\ttitle: 'LazyLoad 懒加载',\n\t\t\ttitle_en: 'LazyLoad',\n\t\t}, {\n\t\t\tpath: '/pages/componentsC/gap/index',\n\t\t\ticon: 'gap',\n\t\t\ttitle: 'Gap 间隔槽',\n\t\t\ttitle_en: 'Gap',\n\t\t}, {\n\t\t\tpath: '/pages/componentsA/avatar/index',\n\t\t\ticon: 'avatar',\n\t\t\ttitle: 'Avatar 头像',\n\t\t\ttitle_en: 'Avatar',\n\t\t}, {\n\t\t\tpath: '/pages/componentsC/link/index',\n\t\t\ticon: 'link',\n\t\t\ttitle: 'Link 超链接',\n\t\t\ttitle_en: 'Link',\n\t\t}, {\n\t\t\tpath: '/pages/componentsB/loading/index',\n\t\t\ticon: 'loading',\n\t\t\ttitle: 'Loading 加载动画',\n\t\t\ttitle_en: 'Loading',\n\t\t}]\n\t},\n]\n"
  },
  {
    "path": "pages/example/components.vue",
    "content": "<template>\n\t<view class=\"wrap\">\n\t\t<page-nav :desc=\"desc\" title=\"nav.components\"></page-nav>\n\t\t<view class=\"list-wrap\">\n\t\t\t<u-cell-group title-bg-color=\"rgb(243, 244, 246)\" :title=\"getGroupTitle(item)\" v-for=\"(item, index) in list\" :key=\"index\">\n\t\t\t\t<u-cell-item :titleStyle=\"{fontWeight: 500}\" @click=\"openPage(item1.path)\" :title=\"getFieldTitle(item1)\"\n\t\t\t\t v-for=\"(item1, index1) in item.list\" :key=\"index1\">\n\t\t\t\t\t<image slot=\"icon\" class=\"u-cell-icon\" :src=\"getIcon(item1.icon)\" mode=\"widthFix\"></image>\n\t\t\t\t</u-cell-item>\n\t\t\t</u-cell-group>\n\t\t</view>\n\t\t<u-gap height=\"70\"></u-gap>\n\t\t<!-- <u-tabbar :list=\"vuex_tabbar\" :mid-button=\"true\"></u-tabbar> -->\n\t</view>\n</template>\n\n<script>\n\timport list from \"./components.config.js\";\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tlist: list,\n\t\t\t\t//desc: '众多组件覆盖开发过程的各个需求，组件功能丰富，多端兼容。让你快速集成，开箱即用。',\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tgetIcon() {\n\t\t\t\treturn path => {\n\t\t\t\t\treturn 'https://cdn.uviewui.com/uview/example/' + path + '.png';\n\t\t\t\t}\n\t\t\t},\n\t\t\tdesc() {\n\t\t\t\treturn this.$t('components.desc');\n\t\t\t}\n\t\t},\n\t\tonShow() {\n\t\t\tuni.setNavigationBarTitle({\n\t\t\t\ttitle: this.$t('nav.components')\n\t\t\t});\n\t\t},\n\t\tcreated() {\n\t\t\t\n\t\t},\n\t\tmethods: {\n\t\t\topenPage(path) {\n\t\t\t\tthis.$u.route({ \n\t\t\t\t\turl: path\n\t\t\t\t})\n\t\t\t},\n\t\t\tgetGroupTitle(item) {\n\t\t\t\treturn this.$i18n.locale == 'zh' ? item.groupName : item.groupName_en\n\t\t\t},\n\t\t\tgetFieldTitle(item) {\n\t\t\t\treturn this.$i18n.locale == 'zh' ? item.title : item.title_en\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style>\n\t/* page {\n\t\tbackground-color: rgb(240, 242, 244);\n\t} */\n</style>\n\n<style lang=\"scss\" scoped>\n\t\n\t.u-cell-icon {\n\t\twidth: 36rpx;\n\t\theight: 36rpx;\n\t\tmargin-right: 8rpx;\n\t}\n</style>\n"
  },
  {
    "path": "pages/example/js.config.js",
    "content": "export default [\n\t{\n\t\tgroupName: '网络',\n\t\tgroupName_en: 'Network',\n\t\tlist: [\n\t\t\t{\n\t\t\t\tpath: 'http',\n\t\t\t\ticon: 'http',\n\t\t\t\ttitle: 'Http 请求',\n\t\t\t\ttitle_en: 'Http',\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tgroupName: '全局变量',\n\t\tgroupName_en: 'Global variable',\n\t\tlist: [\n\t\t\t{\n\t\t\t\tpath: 'globalVariable',\n\t\t\t\ticon: 'globalVariable',\n\t\t\t\ttitle: 'GlobalVariable 全局变量',\n\t\t\t\ttitle_en: 'GlobalVariable',\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tgroupName: '工具库',\n\t\tgroupName_en: 'Tool library',\n\t\tlist: [\n\t\t\t{\n\t\t\t\tpath: 'debounce',\n\t\t\t\ticon: 'debounce',\n\t\t\t\ttitle: 'Throttle | Debounce 节流防抖',\n\t\t\t\ttitle_en: 'Throttle | Debounce',\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: 'deepMerge',\n\t\t\t\ticon: 'deepMerge',\n\t\t\t\ttitle: 'DeepMerge 对象深度合并',\n\t\t\t\ttitle_en: 'DeepMerge',\n\t\t\t},{\n\t\t\t\tpath: 'deepClone',\n\t\t\t\ticon: 'deepClone',\n\t\t\t\ttitle: 'DeepClone 对象深度克隆',\n\t\t\t\ttitle_en: 'DeepClone',\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: 'timeFormat',\n\t\t\t\ticon: 'timeFormat',\n\t\t\t\ttitle: 'TimeFormat 时间格式化',\n\t\t\t\ttitle_en: 'TimeFormat',\n\t\t\t},{\n\t\t\t\tpath: 'timeFrom',\n\t\t\t\ticon: 'timeFrom',\n\t\t\t\ttitle: 'TimeFrom 多久之前',\n\t\t\t\ttitle_en: 'TimeFrom',\n\t\t\t},{\n\t\t\t\tpath: 'guid',\n\t\t\t\ticon: 'guid',\n\t\t\t\ttitle: 'Guid 全局唯一id',\n\t\t\t\ttitle_en: 'Guid',\n\t\t\t},{\n\t\t\t\tpath: 'route',\n\t\t\t\ticon: 'route',\n\t\t\t\ttitle: 'Route 路由跳转',\n\t\t\t\ttitle_en: 'Route',\n\t\t\t},{\n\t\t\t\tpath: 'randomArray',\n\t\t\t\ticon: 'randomArray',\n\t\t\t\ttitle: 'RandomArray 数组乱序',\n\t\t\t\ttitle_en: 'RandomArray',\n\t\t\t},{\n\t\t\t\tpath: 'colorSwitch',\n\t\t\t\ticon: 'colorSwitch',\n\t\t\t\ttitle: 'ColorSwitch 颜色转换',\n\t\t\t\ttitle_en: 'ColorSwitch',\n\t\t\t},{\n\t\t\t\tpath: 'color',\n\t\t\t\ticon: 'color',\n\t\t\t\ttitle: 'Color 颜色值',\n\t\t\t\ttitle_en: 'Color',\n\t\t\t},{\n\t\t\t\tpath: 'queryParams',\n\t\t\t\ticon: 'queryParams',\n\t\t\t\ttitle: 'QueryParams 对象转URL参数',\n\t\t\t\ttitle_en: 'QueryParams',\n\t\t\t},{\n\t\t\t\tpath: 'test',\n\t\t\t\ticon: 'test',\n\t\t\t\ttitle: 'Test 规则校验',\n\t\t\t\ttitle_en: 'Test',\n\t\t\t},{\n\t\t\t\tpath: 'md5',\n\t\t\t\ticon: 'md5',\n\t\t\t\ttitle: 'Md5 md5加密',\n\t\t\t\ttitle_en: 'Md5',\n\t\t\t},{\n\t\t\t\tpath: 'random',\n\t\t\t\ticon: 'random',\n\t\t\t\ttitle: 'Random 随机数值',\n\t\t\t\ttitle_en: 'Random',\n\t\t\t},{\n\t\t\t\tpath: 'trim',\n\t\t\t\ticon: 'trim',\n\t\t\t\ttitle: 'Trim 去除空格',\n\t\t\t\ttitle_en: 'Trim',\n\t\t\t},{\n\t\t\t\tpath: 'getRect',\n\t\t\t\ticon: 'getRect',\n\t\t\t\ttitle: 'GetRect 节点信息',\n\t\t\t\ttitle_en: 'GetRect',\n\t\t\t},{\n\t\t\t\tpath: 'mpShare',\n\t\t\t\ticon: 'mpShare',\n\t\t\t\ttitle: 'MpShare 小程序分享',\n\t\t\t\ttitle_en: 'MpShare',\n\t\t\t}\n\t\t]\n\t}\n]"
  },
  {
    "path": "pages/example/js.vue",
    "content": "<template>\n\t<view class=\"wrap\">\n\t\t<page-nav :desc=\"desc\" title=\"nav.js\"></page-nav>\n\t\t<view class=\"list-wrap\">\n\t\t\t<u-cell-group title-bg-color=\"rgb(243, 244, 246)\" :title=\"getGroupTitle(item)\" v-for=\"(item, index) in list\" :key=\"index\">\n\t\t\t\t<u-cell-item :titleStyle=\"{fontWeight: 500}\" @click=\"openPage(item1.path)\" :title=\"getFieldTitle(item1)\"\n\t\t\t\t v-for=\"(item1, index1) in item.list\" :key=\"index1\">\n\t\t\t\t\t<image slot=\"icon\" class=\"u-cell-icon\" :src=\"getIcon(item1.icon)\" mode=\"widthFix\"></image>\n\t\t\t\t</u-cell-item>\n\t\t\t</u-cell-group>\n\t\t</view>\n\t\t<u-gap height=\"70\"></u-gap>\n\t\t<!-- <u-tabbar :list=\"vuex_tabbar\" :mid-button=\"true\"></u-tabbar> -->\n\t</view>\n</template>\n\n<script>\n\timport list from \"./js.config.js\";\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tlist: list,\n\t\t\t\t// desc: '众多的贴心小工具，是你开发过程中召之即来的利器，让你飞镖在手，百步穿杨'\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tgetIcon() {\n\t\t\t\treturn path => {\n\t\t\t\t\treturn 'https://cdn.uviewui.com/uview/example/' + path + '.png';\n\t\t\t\t}\n\t\t\t},\n\t\t\tdesc() {\n\t\t\t\treturn this.$t('js.desc');\n\t\t\t}\n\t\t},\n\t\tonShow() {\n\t\t\tuni.setNavigationBarTitle({\n\t\t\t\ttitle: this.$t('nav.js')\n\t\t\t});\n\t\t},\n\t\tmethods: {\n\t\t\topenPage(path) {\n\t\t\t\tthis.$u.route({\n\t\t\t\t\turl: '/pages/library/' + path + '/index'\n\t\t\t\t})\n\t\t\t},\n\t\t\tgetGroupTitle(item) {\n\t\t\t\treturn this.$i18n.locale == 'zh' ? item.groupName : item.groupName_en\n\t\t\t},\n\t\t\tgetFieldTitle(item) {\n\t\t\t\treturn this.$i18n.locale == 'zh' ? item.title : item.title_en\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style>\n\t/* page {\n\t\tbackground-color: rgb(240, 242, 244);\n\t} */\n</style>\n\n<style lang=\"scss\" scoped>\n\t.u-cell-icon {\n\t\twidth: 36rpx;\n\t\theight: 36rpx;\n\t\tmargin-right: 8rpx;\n\t}\n</style>\n"
  },
  {
    "path": "pages/example/template.config.js",
    "content": "export default [\n\t{\n\t\tgroupName: '部件',\n\t\tgroupName_en: 'Parts',\n\t\tlist: [\n\t\t\t{\n\t\t\t\tpath: 'coupon',\n\t\t\t\ticon: 'coupon',\n\t\t\t\ttitle: 'Coupon 优惠券',\n\t\t\t\ttitle_en: 'Coupon',\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tgroupName: '页面',\n\t\tgroupName_en: 'Page',\n\t\tlist: [\n\t\t\t{\n\t\t\t\tpath: '/pages/template/wxCenter/index',\n\t\t\t\ticon: 'wxCenter',\n\t\t\t\ttitle: 'WxCenter 仿微信个人中心',\n\t\t\t\ttitle_en: 'WxCenter',\n\t\t\t},\n\t\t\t// {\n\t\t\t// \tpath: '/pages/template/douyin/index',\n\t\t\t// \ticon: 'douyin',\n\t\t\t// \ttitle: 'Douyin 仿抖音',\n\t\t\t// },\n\t\t\t{\n\t\t\t\tpath: '/pages/template/keyboardPay/index',\n\t\t\t\ticon: 'keyboardPay',\n\t\t\t\ttitle: 'KeyboardPay 自定义键盘支付模板',\n\t\t\t\ttitle_en: 'KeyboardPay',\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: '/pages/template/mallMenu/index1',\n\t\t\t\ticon: 'mall_menu_1',\n\t\t\t\ttitle: 'MallMenu 垂直分类(左右独立)',\n\t\t\t\ttitle_en: 'MallMenu 1',\n\t\t\t},{\n\t\t\t\tpath: '/pages/template/mallMenu/index2',\n\t\t\t\ticon: 'mall_menu_2',\n\t\t\t\ttitle: 'MallMenu 垂直分类(左右联动)',\n\t\t\t\ttitle_en: 'MallMenu 2',\n\t\t\t},{\n\t\t\t\tpath: 'submitBar',\n\t\t\t\ticon: 'submitBar',\n\t\t\t\ttitle: 'SubmitBar 提交订单栏',\n\t\t\t\ttitle_en: 'SubmitBar',\n\t\t\t},{\n\t\t\t\tpath: 'comment',\n\t\t\t\ticon: 'comment',\n\t\t\t\ttitle: 'Comment 评论列表',\n\t\t\t\ttitle_en: 'Comment',\n\t\t\t},{\n\t\t\t\tpath: 'order',\n\t\t\t\ticon: 'order',\n\t\t\t\ttitle: 'Order 订单列表',\n\t\t\t\ttitle_en: 'Order',\n\t\t\t},{\n\t\t\t\tpath: 'login',\n\t\t\t\ticon: 'login',\n\t\t\t\ttitle: 'Login 登录界面',\n\t\t\t\ttitle_en: 'Login',\n\t\t\t},{\n\t\t\t\tpath: 'address',\n\t\t\t\ticon: 'address',\n\t\t\t\ttitle: 'Address 收货地址',\n\t\t\t\ttitle_en: 'Address',\n\t\t\t},{\n\t\t\t\tpath: 'citySelect',\n\t\t\t\ticon: 'citySelect',\n\t\t\t\ttitle: 'CitySelect 城市选择',\n\t\t\t\ttitle_en: 'CitySelect',\n\t\t\t}\n\t\t]\n\t}\n]"
  },
  {
    "path": "pages/example/template.vue",
    "content": "<template>\n\t<view class=\"wrap\">\n\t\t<page-nav :desc=\"desc\" title=\"nav.template\"></page-nav>\n\t\t<view class=\"list-wrap\">\n\t\t\t<u-cell-group title-bg-color=\"rgb(243, 244, 246)\" :title=\"getGroupTitle(item)\" v-for=\"(item, index) in list\" :key=\"index\">\n\t\t\t\t<u-cell-item :titleStyle=\"{fontWeight: 500}\" @click=\"openPage(item1.path)\" :title=\"getFieldTitle(item1)\"\n\t\t\t\t v-for=\"(item1, index1) in item.list\" :key=\"index1\">\n\t\t\t\t\t<image slot=\"icon\" class=\"u-cell-icon\" :src=\"getIcon(item1.icon)\" mode=\"widthFix\"></image>\n\t\t\t\t</u-cell-item>\n\t\t\t</u-cell-group>\n\t\t</view>\n\t\t<u-gap height=\"70\"></u-gap>\n\t\t<!-- <u-tabbar :list=\"vuex_tabbar\" :mid-button=\"true\"></u-tabbar> -->\n\t</view>\n</template>\n\n<script>\n\timport list from \"./template.config.js\";\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tlist: list,\n\t\t\t\t// desc: '收集众多的常用页面和布局，减少开发者的重复工作，让你专注逻辑，事半功倍'\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tgetIcon() {\n\t\t\t\treturn path => {\n\t\t\t\t\treturn 'https://cdn.uviewui.com/uview/example/' + path + '.png';\n\t\t\t\t}\n\t\t\t},\n\t\t\tdesc() {\n\t\t\t\treturn this.$t('template.desc');\n\t\t\t}\n\t\t},\n\t\tonShow() {\n\t\t\tuni.setNavigationBarTitle({\n\t\t\t\ttitle: this.$t('nav.template')\n\t\t\t});\n\t\t},\n\t\tmethods: {\n\t\t\topenPage(path) {\n\t\t\t\tthis.$u.route({\n\t\t\t\t\turl: path.indexOf('/page') == 0 ? path : '/pages/template/' + path + '/index'\n\t\t\t\t})\n\t\t\t},\n\t\t\tgetGroupTitle(item) {\n\t\t\t\treturn this.$i18n.locale == 'zh' ? item.groupName : item.groupName_en\n\t\t\t},\n\t\t\tgetFieldTitle(item) {\n\t\t\t\treturn this.$i18n.locale == 'zh' ? item.title : item.title_en\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style>\n\t/* page {\n\t\tbackground-color: rgb(240, 242, 244);\n\t} */\n</style>\n\n<style lang=\"scss\" scoped>\n\t.u-cell-icon {\n\t\twidth: 36rpx;\n\t\theight: 36rpx;\n\t\tmargin-right: 8rpx;\n\t}\n</style>\n"
  },
  {
    "path": "pages/library/color/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-no-demo-here\" style=\"text-align: left;\">\n\t\t\t\t\t此处演示为通过JS调用框架内置颜色值，此外还可以通过scss变量调用。\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-demo-result-line\" :style=\"{color: color, backgroundColor: '#ffffff'}\">\n\t\t\t\t\t晓镜但愁云鬓改，夜吟应觉月光寒\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">主题</view>\n\t\t\t\t<u-subsection :list=\"['primary', 'success', 'error', 'warning', 'info']\" @change=\"modeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">常用颜色</view>\n\t\t\t\t<u-subsection :list=\"['主要文字', '常规文字', '次要文字', '占位文字', '边框颜色']\" @change=\"colorChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tcolor: this.$u.color['primary'],\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tmodeChange(index) {\n\t\t\t\tlet colorName = index == 0 ? 'primary' : index == 1 ? 'success' : index == 2 ? 'error' : index == 3 ? 'warning'  : 'info';\n\t\t\t\tthis.color = this.$u.color[colorName];\n\t\t\t},\n\t\t\tcolorChange(index) {\n\t\t\t\tthis.color = index == 0 ? '#303133' : index == 1 ? '#606266' : index == 2 ? '#909399' : index == 3 ? '#c0c4cc' : '#e4e7ed';\n\t\t\t},\n\t\t\tgetResult() {\n\t\t\t\tthis.result = this.$u.trim(this.string, this.pos);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/library/colorSwitch/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t{{result}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">GRB转HEX</view>\n\t\t\t\t<u-subsection :list=\"['rgb(12,57,231)', 'rgb(15,148,32)', 'rgb(91,52,210)']\" @change=\"rgbToHexChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">HEX转GRB</view>\n\t\t\t\t<u-subsection :list=\"['#0edc8a', '#d0a73c', '#3308dd']\" @change=\"hexToRgbChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">颜色渐变(rgb(21,21,21)-rgb(56,56,56)，分10份)</view>\n\t\t\t\t<u-button @click=\"colorGradientChange\">执行</u-button>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tresult: null\n\t\t\t}\n\t\t},\n\t\tonLoad() {\n\t\t\tthis.result = this.$u.rgbToHex('rgb(12,57,231)')\n\t\t},\n\t\tmethods: {\n\t\t\trgbToHexChange(index) {\n\t\t\t\tlet color = index == 0 ? 'rgb(12,57,231)' : index == 1 ? 'rgb(15,148,32)' : 'rgb(91,52,210)';\n\t\t\t\tthis.result = this.$u.rgbToHex(color)\n\t\t\t},\n\t\t\thexToRgbChange(index) {\n\t\t\t\tlet color = index == 0 ? '#0edc8a' : index == 1 ? '#d0a73c' : '#3308dd';\n\t\t\t\tthis.result = this.$u.hexToRgb(color)\n\t\t\t},\n\t\t\tcolorGradientChange(index) { \n\t\t\t\tthis.result = JSON.stringify(this.$u.colorGradient('rgb(21,21,21)', 'rgb(56,56,56)', 10))\n\t\t\t},\n\t\t\tgetResult() {\n\t\t\t\tthis.result = this.$u.guid(this.length, this.firstU, this.radix);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/library/debounce/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"no-mode-here\">\n\t\t\t\t\t选择节流或者防抖模式，点击按钮，将会执行回调并显示在下方：\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-demo-result-line\" v-if=\"result.length\">\n\t\t\t\t\t<view v-for=\"(item, index) in result\" :key=\"index\">{{(index >= 1) ? '-' : ''}}回调</view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-button\" hover-class=\"u-button--hover\" hover-stay-time=\"150\" @tap=\"btnClick\">\n\t\t\t\t点击触发\n\t\t\t</view>\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">模式</view>\n\t\t\t\t<u-subsection :list=\"['节流', '防抖']\" @change=\"modeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">时间间隔</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['500ms', '1000ms', '2000ms']\" @change=\"timeoutChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">执行时机</view>\n\t\t\t\t<u-subsection :list=\"['开始处', '结束处']\" @change=\"immediateChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tresult: [],\n\t\t\t\ttimeout: 1000,\n\t\t\t\timmediate: true,\n\t\t\t\tmode: 'throttle'\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tmodeChange(index) {\n\t\t\t\tthis.mode = index ? 'debouncd' : 'throttle';\n\t\t\t},\n\t\t\ttimeoutChange(index) {\n\t\t\t\tthis.timeout = [500, 1000, 2000][index];\n\t\t\t},\n\t\t\timmediateChange(index) {\n\t\t\t\tthis.immediate = !index;\n\t\t\t},\n\t\t\tgetResult() {\n\t\t\t\tif(this.result.length >= 6) this.result = [];\n\t\t\t\tthis.result.push(0);\n\t\t\t},\n\t\t\tbtnClick() {\n\t\t\t\tif(this.mode == 'throttle') {\n\t\t\t\t\tthis.$u.throttle(this.getResult, this.timeout, this.immediate);\n\t\t\t\t} else {\n\t\t\t\t\tthis.$u.debounce(this.getResult, this.timeout, this.immediate);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-button {\n\t\tmargin-top: 50rpx;\n\t\tmargin-bottom: 50rpx;\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\theight: 80rpx;\n\t\tborder-radius: 6rpx;\n\t\tborder: 1px solid $u-type-primary;\n\t\tcolor: $u-type-primary;\n\t}\n\t\n\t.u-button--hover {\n\t\tcolor: #fff;\n\t\tbackground-color: $u-type-primary;\n\t}\n\t\n\t.u-demo-result-line {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t}\n</style>\n"
  },
  {
    "path": "pages/library/deepClone/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-no-demo-here\">\n\t\t\t\t\t源对象为：\"{info: {name: 'mary'}}\"\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t{{result}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tobj: {\n\t\t\t\t\tinfo: {\n\t\t\t\t\t\tname: 'mary'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tresult: ''\n\t\t\t}\n\t\t},\n\t\tonLoad() {\n\t\t\tthis.result = this.$u.deepClone(this.obj);\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/library/deepMerge/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-no-demo-here\">\n\t\t\t\t\t源对象1为：\"{info: {name: 'mary'}}\"\n\t\t\t\t\t<view class=\"\">\n\t\t\t\t\t\t\n\t\t\t\t\t</view>\n\t\t\t\t\t源对象2为：\"{info: {age: '22'}}\"\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t{{result}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">模式</view>\n\t\t\t\t<u-subsection :list=\"['浅拷贝', '深拷贝']\" @change=\"modeChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tobj1: {\n\t\t\t\t\tinfo: {\n\t\t\t\t\t\tname: 'mary'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tobj2: {\n\t\t\t\t\tinfo: {\n\t\t\t\t\t\tage: '22'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// obj1和obj3一样，原因是Object.assign(this.obj1, this.obj2)会修改obj1的值\n\t\t\t\tobj3: {\n\t\t\t\t\tinfo: {\n\t\t\t\t\t\tname: 'mary'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tresult: ''\n\t\t\t}\n\t\t},\n\t\tonLoad() {\n\t\t\tthis.result = Object.assign(this.obj1, this.obj2);\n\t\t\t// 重新修改obj1为原来的值\n\t\t\tthis.obj1 = this.$u.deepClone(this.obj3);\n\t\t},\n\t\tmethods: {\n\t\t\tmodeChange(index) {\n\t\t\t\tif(!index) {\n\t\t\t\t\tthis.result = Object.assign(this.obj1, this.obj2);\n\t\t\t\t\t// 重新修改obj1为原来的值\n\t\t\t\t\tthis.obj1 = this.$u.deepClone(this.obj3);\n\t\t\t\t} else {\n\t\t\t\t\tthis.result = this.$u.deepMerge(this.obj1, this.obj2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/library/getRect/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"\" :style=\"{\n\t\t\t\t\tdisplay: !top ? 'block' : 'none'\n\t\t\t\t}\">\n\t\t\t\t\t<view class=\"rect-block-1\">第一个节点</view>\n\t\t\t\t\t<view class=\"rect-block-2\">第2个节点</view>\n\t\t\t\t\t<view class=\"u-no-demo-here\">节点信息为</view>\n\t\t\t\t\t<view class=\"u-demo-result-line\">{{ JSON.stringify(result) }}</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"jump-to-top\">\n\t\t\t\t\t<u-button @click=\"scrollToTop\" :style=\"{\n\t\t\t\t\t\tdisplay: top ? 'block' : 'none'\n\t\t\t\t\t}\">\n\t\t\t\t\t\t点我自动滚动到顶部\n\t\t\t\t\t</u-button>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">参数配置</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">元素</view>\n\t\t\t\t<u-subsection :list=\"['第一个节点', '第2个节点']\" @change=\"elChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">指定元素置顶</view>\n\t\t\t\t<u-subsection current=\"1\" :list=\"['是', '否']\" @change=\"topChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tresult: '',\n\t\t\tscrollTop: 0,\n\t\t\ttop: false\n\t\t};\n\t},\n\tonReady() {\n\t\tthis.elChange(0);\n\t},\n\tonPageScroll(e) {\n\t\tthis.scrollTop = e.scrollTop;\n\t},\n\tmethods: {\n\t\tasync elChange(index) {\n\t\t\tlet el = index == 0 ? '.rect-block-1' : '.rect-block-2';\n\t\t\tthis.result = await this.$u.getRect(el);\n\t\t},\n\t\tscrollToTop() {\n\t\t\tthis.$u.getRect('.jump-to-top').then(res => {\n\t\t\t\tuni.pageScrollTo({\n\t\t\t\t\tscrollTop: this.scrollTop + res.top,\n\t\t\t\t\tduration: 0\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\ttopChange(index) {\n\t\t\tthis.top = index == 0 ? true : false;\n\t\t\tif(index == 1) {\n\t\t\t\tuni.pageScrollTo({\n\t\t\t\t\tscrollTop: 0,\n\t\t\t\t\tduration: 0\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.u-demo {\n\tmin-height: 200vh;\n}\t\n\n.rect-block-1 {\n\tbackground-color: #a0cfff;\n\tpadding: 26rpx 60rpx;\n\tcolor: #ffffff;\n\tdisplay: inline-flex;\n\tmargin: auto;\n}\n\n.rect-block-2 {\n\tbackground-color: #fcbd71;\n\tpadding: 12rpx 8rpx;\n\twidth: 60%;\n\tcolor: #ffffff;\n\tmargin: 30rpx auto;\n}\n</style>\n"
  },
  {
    "path": "pages/library/globalVariable/globalData.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-no-demo-here\">\n\t\t\t\t\t此处为演示globalData全局变量的使用，需手动更新\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t{{result}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">修改globalData为如下值</view>\n\t\t\t\t<u-subsection :list=\"['雅蓝', '皓白', '橘黄']\" @change=\"globalDataChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tresult: null\n\t\t\t}\n\t\t},\n\t\tonShow() {\n\t\t\t// 对globalData的使用，应在onShow生命周期，而不是onLoad生命周期\n\t\t\tthis.result = getApp().globalData.username;\n\t\t},\n\t\tmethods: {\n\t\t\tglobalDataChange(index) {\n\t\t\t\tgetApp().globalData.username = index == 0 ? '雅蓝' : index == 1 ? '皓白' : '橘黄';\n\t\t\t\t// 在此改变了globalData，想要再次触发本页内容更细，还必须手动操作\n\t\t\t\tthis.result = getApp().globalData.username;\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/library/globalVariable/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-no-demo-here\">\n\t\t\t\t\tglobalData方案的值为(曲折实现，全局动态响应)\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t{{globalData}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-no-demo-here\">\n\t\t\t\t\tVue.prototype方案的值为(非动态响应，微信小程序无效)\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t{{vuePrototype}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-no-demo-here\">\n\t\t\t\t\tvuex方案的值为(全局动态响应，推荐)\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t{{vuex_demo}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">实现方式</view>\n\t\t\t\t<view class=\"btn-wrap\">\n\t\t\t\t\t<u-button @click=\"modeChange(0)\">globalData</u-button>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"btn-wrap\">\n\t\t\t\t\t<u-button @click=\"modeChange(1)\">Vue.prototype</u-button>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"btn-wrap\">\n\t\t\t\t\t<u-button @click=\"modeChange(2)\">vuex</u-button>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tglobalData: ''\n\t\t\t}\n\t\t},\n\t\tonShow() {\n\t\t\t// 对globalData的使用，应在onShow生命周期，而不是onLoad生命周期\n\t\t\tthis.globalData = getApp().globalData.username;\n\t\t},\n\t\tmethods: {\n\t\t\tmodeChange(index) {\n\t\t\t\tlet url = '';\n\t\t\t\tif(index == 0) url = '/pages/library/globalVariable/globalData'; \n\t\t\t\tif(index == 1) url = '/pages/library/globalVariable/prototype';\n\t\t\t\tif(index == 2) url = '/pages/library/globalVariable/vuex';\n\t\t\t\tthis.$u.route(url);\n\t\t\t},\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo-area {\n\t\tmargin-top: 50rpx;\n\t}\n\t\n\t.btn-wrap {\n\t\tmargin-top: 40rpx;\n\t\tpadding: 0 10%;\n\t}\n</style>\n"
  },
  {
    "path": "pages/library/globalVariable/prototype.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-no-demo-here\" style=\"text-align: left;\">\n\t\t\t\t\t此处为演示定义在main.js中的\"Vue.prototype\"全局变量的使用，它不是动态响应的，修改后本页面和上一个页面的值，都不会自动刷新\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t{{vuePrototype}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">修改vuePrototype为如下值</view>\n\t\t\t\t<u-subsection :list=\"['鹅黄', '橙黄', '茶绿']\" @change=\"vuePrototypeChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tresult: null\n\t\t\t}\n\t\t},\n\t\tonShow() {\n\t\t\t\n\t\t},\n\t\tmethods: {\n\t\t\tvuePrototypeChange(index) {\n\t\t\t\t// 你会发现，此处修改/main.js中通过Vue.prototype绑定的值，它是静态的\n\t\t\t\t// 此页面修改后，返回上一个页面，无法全局响应\n\t\t\t\tthis.vuePrototype = index == 0 ? '鹅黄' : index == 1 ? '橙黄' : '茶绿';\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/library/globalVariable/vuex.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-no-demo-here\">\n\t\t\t\t\t此处为演示vuex全局变量的使用\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t{{vuex_demo}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">修改vuex变量为如下值</view>\n\t\t\t\t<u-subsection :list=\"['墨绿', '黛蓝', '浅紫']\" @change=\"vuexChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tmethods: {\n\t\t\tvuexChange(index) {\n\t\t\t\tlet val = index == 0 ? '墨绿' : index == 1 ? '黛蓝' : '浅紫';\n\t\t\t\t// 通过this.$u.vuex使用，方法见uView文档\n\t\t\t\tthis.$u.vuex('vuex_demo', val);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>"
  },
  {
    "path": "pages/library/guid/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t{{result}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">长度</view>\n\t\t\t\t<u-subsection current=\"2\" :list=\"['10', '16', '32', 'rfc4122标准']\" @change=\"lengthChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">首字符为\"u\"</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"fristUChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">取值基数(进制)</view>\n\t\t\t\t<u-subsection current=\"3\" :list=\"['二', '八', '十', '六十二']\" @change=\"radixChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tlength: 32,\n\t\t\t\tfirstU: true,\n\t\t\t\tradix: 62,\n\t\t\t\tresult: null\n\t\t\t}\n\t\t},\n\t\tonLoad() {\n\t\t\tthis.getResult();\n\t\t},\n\t\tmethods: {\n\t\t\tlengthChange(index) {\n\t\t\t\tthis.length = index == 0 ? 10 : index == 1 ? 16 : index == 2 ? 32 : null;\n\t\t\t\tthis.getResult();\n\t\t\t},\n\t\t\tfristUChange(index) {\n\t\t\t\tthis.firstU = index == 0 ? true : false;\n\t\t\t\tthis.getResult();\n\t\t\t},\n\t\t\tradixChange(index) {\n\t\t\t\tthis.radix = index == 0 ? 2 : index == 1 ? 8 : index == 2 ? 10 : 62;\n\t\t\t\tthis.getResult();\n\t\t\t},\n\t\t\tgetResult() {\n\t\t\t\tthis.result = this.$u.guid(this.length, this.firstU, this.radix);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/library/http/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"no-mode-here\">\n\t\t\t\t\t请求结果为：\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t{{JSON.stringify(result)}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">请求方式</view>\n\t\t\t\t<u-subsection :list=\"['get', 'post']\" @change=\"getResult\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tresult: {}\n\t\t\t}\n\t\t},\n\t\tonLoad() {\n\t\t\tthis.getGet();\n\t\t},\n\t\tmethods: {\n\t\t\tgetGet() {\n\t\t\t\tthis.$u.get('/ebapi/store_api/hot_search', {\n\t\t\t\t\tid: 2\n\t\t\t\t}).then(res => {\n\t\t\t\t\tthis.result = res;\n\t\t\t\t})\n\t\t\t},\n\t\t\tgetPost() {\n\t\t\t\tthis.$u.post('/ebapi/public_api/index', {\n\t\t\t\t\tid: 1\n\t\t\t\t}).then(res => {\n\t\t\t\t\tthis.result = res.banner;\n\t\t\t\t})\n\t\t\t},\n\t\t\tgetResult(index) {\n\t\t\t\tindex == 0 ? this.getGet() : this.getPost();\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/library/md5/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t{{result}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">源字符串</view>\n\t\t\t\t<u-subsection :list=\"['Take me', 'to', 'your heart']\" @change=\"getResult\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\timport md5Libs from \"uview-ui/libs/function/md5\";\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tresult: null,\n\t\t\t\tstring: 'Take me'\n\t\t\t}\n\t\t},\n\t\tonLoad() {\n\t\t\tthis.getResult();\n\t\t},\n\t\tmethods: {\n\t\t\tgetResult(index) {\n\t\t\t\tthis.string = index == 0 ? 'Take me' : index == 1 ? 'to' : 'you heart';\n\t\t\t\tthis.result = md5Libs.md5(this.string);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/library/mpShare/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-no-demo-here\">\n\t\t\t\t\t只对各家小程序有效，点击右上角的\"胶囊\"，即可弹出分享菜单\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/library/queryParams/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-no-demo-here\">源对象：{{JSON.stringify(params)}}</view>\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t{{result}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">是否带问号</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"prefixChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tprefix: true,\n\t\t\t\tparams: {\n\t\t\t\t\tname: '典韦',\n\t\t\t\t\tage: 32\n\t\t\t\t},\n\t\t\t\tresult: ''\n\t\t\t}\n\t\t},\n\t\tonLoad() {\n\t\t\tthis.getResult();\n\t\t},\n\t\tmethods: {\n\t\t\tprefixChange(index) {\n\t\t\t\tthis.prefix = index == 0 ? true : false;\n\t\t\t\tthis.getResult();\n\t\t\t},\n\t\t\tasync getResult() {\n\t\t\t\tthis.result = this.$u.queryParams(this.params, this.prefix)\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/library/random/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t{{result}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">操作</view>\n\t\t\t\t<u-subsection :list=\"['min=0, max=5', 'min=541, max=8164']\" @change=\"paramsChange\"></u-subsection>\n\t\t\t\t<view class=\"u-btn-wrap\">\n\t\t\t\t\t<u-button @click=\"getResult\">执行</u-button>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 5,\n\t\t\t\tresult: ''\n\t\t\t}\n\t\t},\n\t\tonLoad() {\n\t\t\tthis.getResult();\n\t\t},\n\t\tmethods: {\n\t\t\tparamsChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.min = 0;\n\t\t\t\t\tthis.max = 5;\n\t\t\t\t} else {\n\t\t\t\t\tthis.min = 541;\n\t\t\t\t\tthis.max = 8164;\n\t\t\t\t}\n\t\t\t\tthis.getResult();\n\t\t\t},\n\t\t\tgetResult() {\n\t\t\t\tthis.result = this.$u.random(this.min, this.max);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-btn-wrap {\n\t\tmargin-top: 50rpx;\n\t}\n</style>\n"
  },
  {
    "path": "pages/library/randomArray/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-no-demo-here\">\n\t\t\t\t\t源数组为：[1, 2, 3, 4, 5]\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t{{`[${result.join(', ')}]`}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">操作</view>\n\t\t\t\t<u-button @click=\"getResult\">执行</u-button>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\torginArray: [1, 2, 3, 4, 5],\n\t\t\t\tresult: [],\n\t\t\t}\n\t\t},\n\t\tonLoad() {\n\t\t\tthis.getResult();\n\t\t},\n\t\tmethods: {\n\t\t\tgetResult() {\n\t\t\t\tthis.result = this.$u.randomArray(this.orginArray);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/library/route/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-button @click=\"openPage\">点击跳转</u-button>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">类型</view>\n\t\t\t\t<u-subsection :list=\"['navigateTo', 'switchTab', 'navigateBack']\" @change=\"typeChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">携带参数(针对type=navigateTo)</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"paramsChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">窗口动画(App且type=navigateTo||navigateBack时有效)</view>\n\t\t\t\t<u-subsection :list=\"['是', '否']\" @change=\"animateChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttype: 'to',\n\t\t\t\tparams: {\n\t\t\t\t\tage: 22,\n\t\t\t\t\tname: '李商隐'\n\t\t\t\t},\n\t\t\t\tanimate: 'slide-in-bottom',\n\t\t\t\turl: ''\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tjumpUrl() {\n\t\t\t\tlet url = '';\n\t\t\t\tif(this.type == 'to') {\n\t\t\t\t\turl = '/pages/library/route/routeTo';\n\t\t\t\t} else if(this.type == 'tab') {\n\t\t\t\t\turl = '/pages/example/template';\n\t\t\t\t}\n\t\t\t\treturn url;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\topenPage() {\n\t\t\t\tthis.$u.route({\n\t\t\t\t\ttype: this.type,\n\t\t\t\t\tparams: this.params,\n\t\t\t\t\turl: this.jumpUrl,\n\t\t\t\t\tanimationType: this.animate\n\t\t\t\t});\n\t\t\t},\n\t\t\ttypeChange(index) {\n\t\t\t\tthis.type = index == 0 ? 'to' : index == 1 ? 'tab' : 'back';\n\t\t\t},\n\t\t\tparamsChange(index) {\n\t\t\t\tif(!index) {\n\t\t\t\t\tthis.params = {\n\t\t\t\t\t\tage: 22,\n\t\t\t\t\t\tname: '李商隐'\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.params = {}\n\t\t\t\t}\n\t\t\t},\n\t\t\tanimateChange(index) {\n\t\t\t\tthis.animate = index == 0 ? 'slide-in-bottom' : '';\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.wrap {\n\t\tpadding: 24rpx;\n\t}\n</style>\n"
  },
  {
    "path": "pages/library/route/routeTo.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-no-demo-here\">\n\t\t\t\t\t收到的参数为：{{paramsStr}}\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-btn-wrap\">\n\t\t\t\t\t<u-button @click=\"back\">返回</u-button>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default { \n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tparams: {}\n\t\t\t}\n\t\t},\n\t\tonLoad(option) {\n\t\t\tthis.params = option;\n\t\t},\n\t\tcomputed: {\n\t\t\tparamsStr() {\n\t\t\t\treturn JSON.stringify(this.params);\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tback() {\n\t\t\t\tthis.$u.route({\n\t\t\t\t\ttype: 'back',\n\t\t\t\t\tanimationType: 'slide-in-top'\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.wrap {\n\t\tpadding: 24rpx;\n\t}\n\t\n\t.u-btn-wrap {\n\t\tmargin-top: 50rpx;\n\t}\n</style>\n"
  },
  {
    "path": "pages/library/test/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<view class=\"u-no-demo-here\" style=\"text-align: left;\">\n\t\t\t\t\t这里仅对部分验证规则进行演示，目前总的验证规则有如下：\n\t\t\t\t</view>\n\t\t\t\t<u-table style=\"margin-top: 20rpx;\">\n\t\t\t\t\t<u-tr>\n\t\t\t\t\t\t<u-td>邮箱号</u-td>\n\t\t\t\t\t\t<u-td>手机号</u-td>\n\t\t\t\t\t\t<u-td>URL</u-td>\n\t\t\t\t\t\t<u-td>普通日期</u-td>\n\t\t\t\t\t</u-tr>\n\t\t\t\t\t<u-tr>\n\t\t\t\t\t\t<u-td>十进制数</u-td>\n\t\t\t\t\t\t<u-td>身份证号</u-td>\n\t\t\t\t\t\t<u-td>车牌号</u-td>\n\t\t\t\t\t\t<u-td>金额</u-td>\n\t\t\t\t\t</u-tr>\n\t\t\t\t\t<u-tr>\n\t\t\t\t\t\t<u-td>汉字</u-td>\n\t\t\t\t\t\t<u-td>字母</u-td>\n\t\t\t\t\t\t<u-td>字母|数字</u-td>\n\t\t\t\t\t\t<u-td>包含值</u-td>\n\t\t\t\t\t</u-tr>\n\t\t\t\t\t<u-tr>\n\t\t\t\t\t\t<u-td>数值范围</u-td>\n\t\t\t\t\t\t<u-td>长度范围</u-td>\n\t\t\t\t\t\t<u-td width=\"50%\"></u-td>\n\t\t\t\t\t</u-tr>\n\t\t\t\t</u-table>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">邮箱</view>\n\t\t\t\t<u-subsection :list=\"email\" @change=\"emailChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">手机号</view>\n\t\t\t\t<u-subsection :list=\"mobile\" @change=\"mobileChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">中文</view>\n\t\t\t\t<u-subsection :list=\"chinese\" @change=\"chineseChange\"></u-subsection>\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">整数</view>\n\t\t\t\t<u-subsection :list=\"digits\" @change=\"digitsChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\temail: ['google@gmail.com', 'google艾特gmail.com'],\n\t\t\t\tmobile: ['13478561273', '0778-3423082'],\n\t\t\t\tchinese: ['天青色等烟雨', 'Beat it'],\n\t\t\t\tdigits: [283, '下雨的声音']\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\ttoast(type) {\n\t\t\t\tthis.$refs.uToast.show({\n\t\t\t\t\ttype: type ? 'success' : 'error',\n\t\t\t\t\ttitle: type ? '验证通过' : '验证失败'\n\t\t\t\t})\n\t\t\t},\n\t\t\temailChange(index)  {\n\t\t\t\tthis.toast(this.$u.test.email(this.email[index]));\n\t\t\t},\n\t\t\tmobileChange(index) {\n\t\t\t\tthis.toast(this.$u.test.mobile(this.mobile[index]));\n\t\t\t},\n\t\t\tchineseChange(index) {\n\t\t\t\tthis.toast(this.$u.test.chinese(this.chinese[index]));\n\t\t\t},\n\t\t\tdigitsChange(index) {\n\t\t\t\tthis.toast(this.$u.test.digits(this.digits[index]));\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/library/timeFormat/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-no-demo-here\">输入时间：{{timestamp}}</view>\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t{{result}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">格式</view>\n\t\t\t\t<u-subsection :list=\"['yyyy-mm-dd', 'yyyy年-mm月-dd日']\" @change=\"format1Change\"></u-subsection>\n\t\t\t\t<view style=\"margin-top: 50rpx;\">\n\t\t\t\t\t<u-subsection  :list=\"['mm-dd', 'yyyy-mm-dd hh:MM']\" @change=\"format2Change\"></u-subsection>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttimestamp: '2020-11-02T02:59:24.732Z',\n\t\t\t\tresult: null\n\t\t\t}\n\t\t},\n\t\tonLoad() {\n\t\t\t// 本时间格式化方法，也支持模板中过滤器形式写法，如\n\t\t\t// {{1585926095536 | date('yyyy-mm-dd')}} 或者 {{1585926095536 | date}}，因为'yyyy-mm-dd'为默认的参数\n\t\t\tthis.getResult('yyyy-mm-dd');\n\t\t},\n\t\tmethods: {\n\t\t\tformat1Change(index) {\n\t\t\t\tlet format = index == 0 ? 'yyyy-mm-dd' : 'yyyy年-mm月-dd日';\n\t\t\t\tthis.getResult(format);\n\t\t\t},\n\t\t\tformat2Change(index) {\n\t\t\t\tlet format = index == 0 ? 'mm-dd' : 'yyyy-mm-dd hh:MM';\n\t\t\t\tthis.getResult(format);\n\t\t\t},\n\t\t\tgetResult(format) {\n\t\t\t\tthis.result = this.$u.timeFormat(this.timestamp, format);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/library/timeFrom/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<u-toast ref=\"uToast\"></u-toast>\n\t\t\t\t<view class=\"u-no-demo-here\" style=\"text-align: left;\">\n\t\t\t\t\t根据当前时间，返回类似\"刚刚，5分钟前，8小时前，3天前\"等字样\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t{{result}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">时间</view>\n\t\t\t\t<u-subsection :list=\"timeArr1\" @change=\"timeArr1Change\"></u-subsection>\n\t\t\t\t<u-gap></u-gap>\n\t\t\t\t<u-subsection style=\"margin-top: 40rpx;\" :list=\"timeArr2\" @change=\"timeArr2Change\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\t// 微信小程序无法动态修改u-subsection的list参数，导致onLoad中赋值timeArr1，timeArr2无效，故在data中直接赋值\n\t\t\tlet nowTime = Number(+ new Date());\n\t\t\tlet threeDayAgo = nowTime - 2 * 86400000;\n\t\t\tlet arr1 = [0, 0], arr2 = [0, 0];\n\t\t\t[0, 0].map((val, index) => {\n\t\t\t\tarr1[index] = this.$u.timeFormat(this.$u.random(threeDayAgo, nowTime), 'yyyy/mm/dd hh:MM:ss');\n\t\t\t\tarr2[index] = this.$u.timeFormat(this.$u.random(threeDayAgo, nowTime), 'yyyy/mm/dd hh:MM:ss');\n\t\t\t})\n\t\t\treturn {\n\t\t\t\ttimeArr1: arr1,\n\t\t\t\ttimeArr2: arr2,\n\t\t\t\tresult: null\n\t\t\t}\n\t\t},\n\t\tonLoad() {\n\t\t\tthis.timeArr1Change(0);\n\t\t},\n\t\tmethods: {\n\t\t\ttimeArr1Change(index) {\n\t\t\t\tthis.result = this.$u.timeFrom((new Date(this.timeArr1[index])).getTime());\n\t\t\t},\n\t\t\ttimeArr2Change(index) {\n\t\t\t\tthis.result = this.$u.timeFrom((new Date(this.timeArr2[index])).getTime());\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/library/trim/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<view class=\"u-no-demo-here\">\n\t\t\t\t\t源字符串：{{`\"${string}\"`}}\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-demo-result-line\">\n\t\t\t\t\t{{`\"${result}\"`}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">\n\t\t\t\t参数配置\n\t\t\t</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">模式选择</view>\n\t\t\t\t<u-subsection :list=\"['左空格', '全部空格', '两边空格', '右空格']\" @change=\"modeChange\"></u-subsection>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tstring: \"  我用十年  青春，赴你  最后之约  \",\n\t\t\t\tresult: '',\n\t\t\t\tpos: 'left'\n\t\t\t}\n\t\t},\n\t\tonLoad() {\n\t\t\tthis.getResult();\n\t\t},\n\t\tmethods: {\n\t\t\tparamsChange(index) {\n\t\t\t\tif(index == 0) {\n\t\t\t\t\tthis.min = 0;\n\t\t\t\t\tthis.max = 5;\n\t\t\t\t} else {\n\t\t\t\t\tthis.min = 541;\n\t\t\t\t\tthis.max = 8164;\n\t\t\t\t}\n\t\t\t\tthis.getResult();\n\t\t\t},\n\t\t\tmodeChange(index) {\n\t\t\t\tthis.pos = index == 0 ? 'left' : index == 1 ? 'all' : index == 2 ? 'both' : 'right';\n\t\t\t\tthis.getResult();\n\t\t\t},\n\t\t\tgetResult() {\n\t\t\t\tthis.result = this.$u.trim(this.string, this.pos);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-demo {}\n</style>\n"
  },
  {
    "path": "pages/template/address/addSite.vue",
    "content": "<template>\n\t<view class=\"wrap\">\n\t\t<view class=\"top\">\n\t\t\t<view class=\"item\">\n\t\t\t\t<view class=\"left\">收货人</view>\n\t\t\t\t<input type=\"text\" placeholder-class=\"line\" placeholder=\"请填写收货人姓名\" />\n\t\t\t</view>\n\t\t\t<view class=\"item\">\n\t\t\t\t<view class=\"left\">手机号码</view>\n\t\t\t\t<input type=\"text\" placeholder-class=\"line\" placeholder=\"请填写收货人手机号\" />\n\t\t\t</view>\n\t\t\t<view class=\"item\" @tap=\"showRegionPicker\">\n\t\t\t\t<view class=\"left\">所在地区</view>\n\t\t\t\t<input disabled type=\"text\" placeholder-class=\"line\" placeholder=\"省市区县、乡镇等\" />\n\t\t\t</view>\n\t\t\t<view class=\"item address\">\n\t\t\t\t<view class=\"left\">详细地址</view>\n\t\t\t\t<textarea type=\"text\" placeholder-class=\"line\" placeholder=\"街道、楼牌等\" />\n\t\t\t</view>\n\t\t\t<!-- <view class=\"site-clipboard\">\n\t\t\t\t<textarea placeholder-class=\"line\" value=\"\" placeholder=\"粘贴文本,可自动识别姓名和地址等\" />\n\t\t\t\t<view class=\"clipboard\">\n\t\t\t\t\t地址粘贴板\n\t\t\t\t\t<u-icon name=\"arrow-down\" class=\"icon\" :size=\"20\"></u-icon>\n\t\t\t\t</view>\n\t\t\t</view> -->\n\t\t</view>\n\t\t<view class=\"bottom\">\n\t\t\t<view class=\"tag\">\n\t\t\t\t<view class=\"left\">标签</view>\n\t\t\t\t<view class=\"right\">\n\t\t\t\t\t<text class=\"tags\">家</text>\n\t\t\t\t\t<text class=\"tags\">公司</text>\n\t\t\t\t\t<text class=\"tags\">学校</text>\n\t\t\t\t\t<view class=\"tags plus\"><u-icon size=\"22\" name=\"plus\"></u-icon></view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t\t<view class=\"default\">\n\t\t\t\t<view class=\"left\">\n\t\t\t\t\t<view class=\"set\">设置默认地址</view>\n\t\t\t\t\t<view class=\"tips\">提醒：每次下单会默认推荐该地址</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"right\"><switch color=\"red\" @change=\"setDefault\" /></view>\n\t\t\t</view>\n\t\t</view>\n\t\t<u-picker mode=\"region\" ref=\"uPicker\" v-model=\"show\" />\n\t</view>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tshow: false\n\t\t};\n\t},\n\tmethods: {\n\t\tsetDefault() {},\n\t\tshowRegionPicker() {\n\t\t\tthis.show = true;\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n/deep/ .line {\n\tcolor: $u-light-color;\n\tfont-size: 28rpx;\n}\n.wrap {\n\tbackground-color: #f2f2f2;\n\t.top {\n\t\tbackground-color: #ffffff;\n\t\tborder-top: solid 2rpx $u-border-color;\n\t\tpadding: 22rpx;\n\t\t.item {\n\t\t\tdisplay: flex;\n\t\t\tfont-size: 32rpx;\n\t\t\tline-height: 100rpx;\n\t\t\talign-items: center;\n\t\t\tborder-bottom: solid 2rpx $u-border-color;\n\t\t\t.left {\n\t\t\t\twidth: 180rpx;\n\t\t\t}\n\t\t\tinput {\n\t\t\t\ttext-align: left;\n\t\t\t}\n\t\t}\n\t\t\n\t\t.address {\n\t\t\tpadding: 20rpx 0;\n\t\t\ttextarea {\n\t\t\t\t// width: 100%;\n\t\t\t\theight: 150rpx;\n\t\t\t\tbackground-color: #f7f7f7;\n\t\t\t\tline-height: 60rpx;\n\t\t\t\tmargin: 40rpx auto;\n\t\t\t\tpadding: 20rpx;\n\t\t\t}\n\t\t}\n\t\t.site-clipboard {\n\t\t\tpadding-right: 40rpx;\n\t\t\ttextarea {\n\t\t\t\t// width: 100%;\n\t\t\t\theight: 150rpx;\n\t\t\t\tbackground-color: #f7f7f7;\n\t\t\t\tline-height: 60rpx;\n\t\t\t\tmargin: 40rpx auto;\n\t\t\t\tpadding: 20rpx;\n\t\t\t}\n\t\t\t.clipboard {\n\t\t\t\tdisplay: flex;\n\t\t\t\tjustify-content: center;\n\t\t\t\talign-items: center;\n\t\t\t\tfont-size: 26rpx;\n\t\t\t\tcolor: $u-tips-color;\n\t\t\t\theight: 80rpx;\n\t\t\t\t.icon {\n\t\t\t\t\tmargin-top: 6rpx;\n\t\t\t\t\tmargin-left: 10rpx;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t.bottom {\n\t\tmargin-top: 20rpx;\n\t\tpadding: 40rpx;\n\t\tpadding-right: 0;\n\t\tbackground-color: #ffffff;\n\t\tfont-size: 28rpx;\n\t\t.tag {\n\t\t\tdisplay: flex;\n\t\t\t.left {\n\t\t\t\twidth: 160rpx;\n\t\t\t}\n\t\t\t.right {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-wrap: wrap;\n\t\t\t\t.tags {\n\t\t\t\t\twidth: 140rpx;\n\t\t\t\t\tpadding: 16rpx 8rpx;\n\t\t\t\t\tborder: solid 2rpx $u-border-color;\n\t\t\t\t\ttext-align: center;\n\t\t\t\t\tborder-radius: 50rpx;\n\t\t\t\t\tmargin: 0 10rpx 20rpx;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\tfont-size: 28rpx;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\tcolor: $u-content-color;\n\t\t\t\t\tline-height: 1;\n\t\t\t\t}\n\t\t\t\t.plus {\n\t\t\t\t\t//padding: 10rpx 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t.default {\n\t\t\tmargin-top: 50rpx;\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t\tborder-bottom: solid 2rpx $u-border-color;\n\t\t\tline-height: 64rpx;\n\t\t\t.tips {\n\t\t\t\tfont-size: 24rpx;\n\t\t\t}\n\t\t\t.right {\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n"
  },
  {
    "path": "pages/template/address/index.vue",
    "content": "<template>\n\t<view>\n\t\t<view class=\"item\" v-for=\"(res, index) in siteList\" :key=\"res.id\">\n\t\t\t<view class=\"top\">\n\t\t\t\t<view class=\"name\">{{ res.name }}</view>\n\t\t\t\t<view class=\"phone\">{{ res.phone }}</view>\n\t\t\t\t<view class=\"tag\">\n\t\t\t\t\t<text v-for=\"(item, index) in res.tag\" :key=\"index\" :class=\"{red:item.tagText=='默认'}\">{{ item.tagText }}</text>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t\t<view class=\"bottom\">\n\t\t\t\t广东省深圳市宝安区 自由路66号\n\t\t\t\t<u-icon name=\"edit-pen\" :size=\"40\" color=\"#999999\"></u-icon>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"addSite\" @tap=\"toAddSite\">\n\t\t\t<view class=\"add\">\n\t\t\t\t<u-icon name=\"plus\" color=\"#ffffff\" class=\"icon\" :size=\"30\"></u-icon>新建收货地址\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tsiteList: []\n\t\t};\n\t},\n\tonLoad() {\n\t\tthis.getData();\n\t},\n\tmethods: {\n\t\tgetData() {\n\t\t\tthis.siteList = [\n\t\t\t\t{\n\t\t\t\t\tid: 1,\n\t\t\t\t\tname: '游X',\n\t\t\t\t\tphone: '183****5523',\n\t\t\t\t\ttag: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttagText: '默认'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttagText: '家'\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\tsite: '广东省深圳市宝安区 自由路66号'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 2,\n\t\t\t\t\tname: '李XX',\n\t\t\t\t\tphone: '183****5555',\n\t\t\t\t\ttag: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttagText: '公司'\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\tsite: '广东省深圳市宝安区 翻身路xx号'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 3,\n\t\t\t\t\tname: '王YY',\n\t\t\t\t\tphone: '153****5555',\n\t\t\t\t\ttag: [],\n\t\t\t\t\tsite: '广东省深圳市宝安区 平安路13号'\n\t\t\t\t}\n\t\t\t];\n\t\t},\n\t\ttoAddSite(){\n\t\t\tuni.navigateTo({\n\t\t\t    url: '/pages/template/address/addSite'\n\t\t\t});\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.item {\n\tpadding: 40rpx 20rpx;\n\t.top {\n\t\tdisplay: flex;\n\t\tfont-weight: bold;\n\t\tfont-size: 34rpx;\n\t\t.phone {\n\t\t\tmargin-left: 60rpx;\n\t\t}\n\t\t.tag {\n\t\t\tdisplay: flex;\n\t\t\tfont-weight: normal;\n\t\t\talign-items: center;\n\t\t\ttext {\n\t\t\t\tdisplay: block;\n\t\t\t\twidth: 60rpx;\n\t\t\t\theight: 34rpx;\n\t\t\t\tline-height: 34rpx;\n\t\t\t\tcolor: #ffffff;\n\t\t\t\tfont-size: 20rpx;\n\t\t\t\tborder-radius: 6rpx;\n\t\t\t\ttext-align: center;\n\t\t\t\tmargin-left: 30rpx;\n\t\t\t\tbackground-color:rgb(49, 145, 253);\n\t\t\t}\n\t\t\t.red{\n\t\t\t\tbackground-color:red\n\t\t\t}\n\t\t}\n\t}\n\t.bottom {\n\t\tdisplay: flex;\n\t\tmargin-top: 20rpx;\n\t\tfont-size: 28rpx;\n\t\tjustify-content: space-between;\n\t\tcolor: #999999;\n\t}\n}\n.addSite {\n\tdisplay: flex;\n\tjustify-content: space-around;\n\twidth: 600rpx;\n\tline-height: 100rpx;\n\tposition: absolute;\n\tbottom: 30rpx;\n\tleft: 80rpx;\n\tbackground-color: red;\n\tborder-radius: 60rpx;\n\tfont-size: 30rpx;\n\t.add{\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolor: #ffffff;\n\t\t.icon{\n\t\t\tmargin-right: 10rpx;\n\t\t}\n\t}\n}\n</style>\n"
  },
  {
    "path": "pages/template/citySelect/index.vue",
    "content": "<template>\n\t<view class=\"u-demo\">\n\t\t<view class=\"u-demo-wrap\">\n\t\t\t<view class=\"u-demo-title\">演示效果</view>\n\t\t\t<view class=\"u-demo-area\">\n\t\t\t\t<city-select v-model=\"value\" @city-change=\"cityChange\"></city-select>\n\t\t\t\t<view class=\"u-demo-result-line\">{{ input ? input : 'Picker值' }}</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-config-wrap\">\n\t\t\t<view class=\"u-config-title u-border-bottom\">参数配置</view>\n\t\t\t<view class=\"u-config-item\">\n\t\t\t\t<view class=\"u-item-title\">状态</view>\n\t\t\t\t<u-button @click=\"value = true\">打开Picker</u-button>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nimport citySelect from './u-city-select.vue';\nexport default {\n\tcomponents: {\n\t\tcitySelect\n\t},\n\tdata() {\n\t\treturn {\n\t\t\theight: 30,\n\t\t\tbgColor: this.$u.color.bgColor,\n\t\t\tmarginTop: 30,\n\t\t\tmarginBottom: 30,\n\t\t\tvalue: false,\n\t\t\tinput: '',\n\t\t};\n\t},\n\tmethods: {\n\t\tcityChange(e) {\n\t\t\tthis.input = e.province.label + '-' + e.city.label + '-' + e.area.label;\n\t\t}\n\t}\n};\n</script>\n\n<style scoped>\n\t.btn-wrap {\n\t\tmargin: 100rpx 30rpx;\n\t}\n</style>\n"
  },
  {
    "path": "pages/template/citySelect/u-city-select.vue",
    "content": "<template>\n\t<u-popup v-model=\"value\" mode=\"bottom\" :popup=\"false\" :mask=\"true\" :closeable=\"true\" :safe-area-inset-bottom=\"true\"\n\t close-icon-color=\"#ffffff\" :z-index=\"uZIndex\" :maskCloseAble=\"maskCloseAble\" @close=\"close\">\n\t\t<u-tabs v-if=\"value\" :list=\"genTabsList\" :is-scroll=\"true\" :current=\"tabsIndex\" @change=\"tabsChange\" ref=\"tabs\"></u-tabs>\n\t\t<view class=\"area-box\">\n\t\t\t<view class=\"u-flex\" :class=\"{ 'change':isChange }\">\n\t\t\t\t<view class=\"area-item\">\n\t\t\t\t\t<view class=\"u-padding-10 u-bg-gray\" style=\"height: 100%;\">\n\t\t\t\t\t\t<scroll-view :scroll-y=\"true\" style=\"height: 100%\">\n\t\t\t\t\t\t\t<u-cell-group>\n\t\t\t\t\t\t\t\t<u-cell-item v-for=\"(item,index) in provinces\" :title=\"item.label\" :arrow=\"false\" :index=\"index\" :key=\"index\"\n\t\t\t\t\t\t\t\t @click=\"provinceChange\">\n\t\t\t\t\t\t\t\t\t<u-icon v-if=\"isChooseP&&province===index\" slot=\"right-icon\" size=\"34\" name=\"checkbox-mark\"></u-icon>\n\t\t\t\t\t\t\t\t</u-cell-item>\n\t\t\t\t\t\t\t</u-cell-group>\n\t\t\t\t\t\t</scroll-view>\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"area-item\">\n\t\t\t\t\t<view class=\"u-padding-10 u-bg-gray\" style=\"height: 100%;\">\n\t\t\t\t\t\t<scroll-view :scroll-y=\"true\" style=\"height: 100%\">\n\t\t\t\t\t\t\t<u-cell-group v-if=\"isChooseP\">\n\t\t\t\t\t\t\t\t<u-cell-item v-for=\"(item,index) in citys\" :title=\"item.label\" :arrow=\"false\" :index=\"index\" :key=\"index\"\n\t\t\t\t\t\t\t\t @click=\"cityChange\">\n\t\t\t\t\t\t\t\t\t<u-icon v-if=\"isChooseC&&city===index\" slot=\"right-icon\" size=\"34\" name=\"checkbox-mark\"></u-icon>\n\t\t\t\t\t\t\t\t</u-cell-item>\n\t\t\t\t\t\t\t</u-cell-group>\n\t\t\t\t\t\t</scroll-view>\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\n\t\t\t\t<view class=\"area-item\">\n\t\t\t\t\t<view class=\"u-padding-10 u-bg-gray\" style=\"height: 100%;\">\n\t\t\t\t\t\t<scroll-view :scroll-y=\"true\" style=\"height: 100%\">\n\t\t\t\t\t\t\t<u-cell-group v-if=\"isChooseC\">\n\t\t\t\t\t\t\t\t<u-cell-item v-for=\"(item,index) in areas\" :title=\"item.label\" :arrow=\"false\" :index=\"index\" :key=\"index\"\n\t\t\t\t\t\t\t\t @click=\"areaChange\">\n\t\t\t\t\t\t\t\t\t<u-icon v-if=\"isChooseA&&area===index\" slot=\"right-icon\" size=\"34\" name=\"checkbox-mark\"></u-icon>\n\t\t\t\t\t\t\t\t</u-cell-item>\n\t\t\t\t\t\t\t</u-cell-group>\n\t\t\t\t\t\t</scroll-view>\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t</u-popup>\n</template>\n\n<script>\n\timport provinces from \"uview-ui/libs/util/province.js\";\n\timport citys from \"uview-ui/libs/util/city.js\";\n\timport areas from \"uview-ui/libs/util/area.js\";\n\t/**\n\t * city-select 省市区级联选择器\n\t * @property {String Number} z-index 弹出时的z-index值（默认1075）\n\t * @property {Boolean} mask-close-able 是否允许通过点击遮罩关闭Picker（默认true）\n\t * @property {String} default-region 默认选中的地区，中文形式\n\t * @property {String} default-code 默认选中的地区，编号形式\n\t */\n\texport default {\n\t\tname: 'u-city-select',\n\t\tprops: {\n\t\t\t// 通过双向绑定控制组件的弹出与收起\n\t\t\tvalue: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 默认显示的地区，可传类似[\"河北省\", \"秦皇岛市\", \"北戴河区\"]\n\t\t\tdefaultRegion: {\n\t\t\t\ttype: Array,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 默认显示地区的编码，defaultRegion和areaCode同时存在，areaCode优先，可传类似[\"13\", \"1303\", \"130304\"]\n\t\t\tareaCode: {\n\t\t\t\ttype: Array,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 是否允许通过点击遮罩关闭Picker\n\t\t\tmaskCloseAble: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 弹出的z-index值\n\t\t\tzIndex: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 0\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tcityValue: \"\",\n\t\t\t\tisChooseP: false, //是否已经选择了省\n\t\t\t\tprovince: 0, //省级下标\n\t\t\t\tprovinces: provinces,\n\t\t\t\tisChooseC: false, //是否已经选择了市\n\t\t\t\tcity: 0, //市级下标\n\t\t\t\tcitys: citys[0],\n\t\t\t\tisChooseA: false, //是否已经选择了区\n\t\t\t\tarea: 0, //区级下标\n\t\t\t\tareas: areas[0][0],\n\t\t\t\ttabsIndex: 0,\n\t\t\t}\n\t\t},\n\t\tmounted() {\n\t\t\tthis.init();\n\t\t},\n\t\tcomputed: {\n\t\t\tisChange() {\n\t\t\t\treturn this.tabsIndex > 1;\n\t\t\t},\n\t\t\tgenTabsList() {\n\t\t\t\tlet tabsList = [{\n\t\t\t\t\tname: \"请选择\"\n\t\t\t\t}];\n\t\t\t\tif (this.isChooseP) {\n\t\t\t\t\ttabsList[0]['name'] = this.provinces[this.province]['label'];\n\t\t\t\t\ttabsList[1] = {\n\t\t\t\t\t\tname: \"请选择\"\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (this.isChooseC) {\n\t\t\t\t\ttabsList[1]['name'] = this.citys[this.city]['label'];\n\t\t\t\t\ttabsList[2] = {\n\t\t\t\t\t\tname: \"请选择\"\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (this.isChooseA) {\n\t\t\t\t\ttabsList[2]['name'] = this.areas[this.area]['label'];\n\t\t\t\t}\n\t\t\t\treturn tabsList;\n\t\t\t},\n\t\t\tuZIndex() {\n\t\t\t\t// 如果用户有传递z-index值，优先使用\n\t\t\t\treturn this.zIndex ? this.zIndex : this.$u.zIndex.popup;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tinit() {\n\t\t\t\tif (this.areaCode.length == 3) {\n\t\t\t\t\tthis.setProvince(\"\", this.areaCode[0]);\n\t\t\t\t\tthis.setCity(\"\", this.areaCode[1]);\n\t\t\t\t\tthis.setArea(\"\", this.areaCode[2]);\n\t\t\t\t} else if (this.defaultRegion.length == 3) {\n\t\t\t\t\tthis.setProvince(this.defaultRegion[0], \"\");\n\t\t\t\t\tthis.setCity(this.defaultRegion[1], \"\");\n\t\t\t\t\tthis.setArea(this.defaultRegion[2], \"\");\n\t\t\t\t};\n\t\t\t},\n\t\t\tsetProvince(label = \"\", value = \"\") {\n\t\t\t\tthis.provinces.map((v, k) => {\n\t\t\t\t\tif (value ? v.value == value : v.label == label) {\n\t\t\t\t\t\tthis.provinceChange(k);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\t\t\tsetCity(label = \"\", value = \"\") {\n\t\t\t\tthis.citys.map((v, k) => {\n\t\t\t\t\tif (value ? v.value == value : v.label == label) {\n\t\t\t\t\t\tthis.cityChange(k);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\t\t\tsetArea(label = \"\", value = \"\") {\n\t\t\t\tthis.areas.map((v, k) => {\n\t\t\t\t\tif (value ? v.value == value : v.label == label) {\n\t\t\t\t\t\tthis.isChooseA = true;\n\t\t\t\t\t\tthis.area = k;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\t\t\tclose() {\n\t\t\t\tthis.$emit('input', false);\n\t\t\t},\n\t\t\ttabsChange(index) {\n\t\t\t\tthis.tabsIndex = index;\n\t\t\t},\n\t\t\tprovinceChange(index) {\n\t\t\t\tthis.isChooseP = true;\n\t\t\t\tthis.isChooseC = false;\n\t\t\t\tthis.isChooseA = false;\n\t\t\t\tthis.province = index;\n\t\t\t\tthis.citys = citys[index];\n\t\t\t\tthis.tabsIndex = 1;\n\t\t\t},\n\t\t\tcityChange(index) {\n\t\t\t\tthis.isChooseC = true;\n\t\t\t\tthis.isChooseA = false;\n\t\t\t\tthis.city = index;\n\t\t\t\tthis.areas = areas[this.province][index];\n\t\t\t\tthis.tabsIndex = 2;\n\t\t\t},\n\t\t\tareaChange(index) {\n\t\t\t\tthis.isChooseA = true;\n\t\t\t\tthis.area = index;\n\t\t\t\tlet result = {};\n\t\t\t\tresult.province = this.provinces[this.province];\n\t\t\t\tresult.city = this.citys[this.city];\n\t\t\t\tresult.area = this.areas[this.area];\n\t\t\t\tthis.$emit('city-change', result);\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t}\n\n\t}\n</script>\n<style lang=\"scss\">\n\t.area-box {\n\t\twidth: 100%;\n\t\toverflow: hidden;\n\t\theight: 800rpx;\n\n\t\t>view {\n\t\t\twidth: 150%;\n\t\t\ttransition: transform 0.3s ease-in-out 0s;\n\t\t\ttransform: translateX(0);\n\n\t\t\t&.change {\n\t\t\t\ttransform: translateX(-33.3333333%);\n\t\t\t}\n\t\t}\n\n\t\t.area-item {\n\t\t\twidth: 33.3333333%;\n\t\t\theight: 800rpx;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "pages/template/comment/index.vue",
    "content": "<template>\n\t<view>\n\t\t<view class=\"comment\" v-for=\"(res, index) in commentList\" :key=\"res.id\">\n\t\t\t<view class=\"left\"><image :src=\"res.url\" mode=\"aspectFill\"></image></view>\n\t\t\t<view class=\"right\">\n\t\t\t\t<view class=\"top\">\n\t\t\t\t\t<view class=\"name\">{{ res.name }}</view>\n\t\t\t\t\t<view class=\"like\" :class=\"{ highlight: res.isLike }\">\n\t\t\t\t\t\t<view class=\"num\">{{ res.likeNum }}</view>\n\t\t\t\t\t\t<u-icon v-if=\"!res.isLike\" name=\"thumb-up\" :size=\"30\" color=\"#9a9a9a\" @click=\"getLike(index)\"></u-icon>\n\t\t\t\t\t\t<u-icon v-if=\"res.isLike\" name=\"thumb-up-fill\" :size=\"30\" @click=\"getLike(index)\"></u-icon>\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"content\">{{ res.contentText }}</view>\n\t\t\t\t<view class=\"reply-box\">\n\t\t\t\t\t<view class=\"item\" v-for=\"(item, index) in res.replyList\" :key=\"item.index\">\n\t\t\t\t\t\t<view class=\"username\">{{ item.name }}</view>\n\t\t\t\t\t\t<view class=\"text\">{{ item.contentStr }}</view>\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"all-reply\" @tap=\"toAllReply\" v-if=\"res.replyList != undefined\">\n\t\t\t\t\t\t共{{ res.allReply }}条回复\n\t\t\t\t\t\t<u-icon class=\"more\" name=\"arrow-right\" :size=\"26\"></u-icon>\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"bottom\">\n\t\t\t\t\t{{ res.date }}\n\t\t\t\t\t<view class=\"reply\">回复</view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tcommentList: []\n\t\t};\n\t},\n\tonLoad() {\n\t\tthis.getComment();\n\t},\n\tmethods: {\n\t\t// 跳转到全部回复\n\t\ttoAllReply() {\n\t\t\tuni.navigateTo({\n\t\t\t\turl: '/pages/template/comment/reply'\n\t\t\t});\n\t\t},\n\t\t// 点赞\n\t\tgetLike(index) {\n\t\t\tthis.commentList[index].isLike = !this.commentList[index].isLike;\n\t\t\tif (this.commentList[index].isLike == true) {\n\t\t\t\tthis.commentList[index].likeNum++;\n\t\t\t} else {\n\t\t\t\tthis.commentList[index].likeNum--;\n\t\t\t}\n\t\t},\n\t\t// 评论列表\n\t\tgetComment() {\n\t\t\tthis.commentList = [\n\t\t\t\t{\n\t\t\t\t\tid: 1,\n\t\t\t\t\tname: '叶轻眉',\n\t\t\t\t\tdate: '12-25 18:58',\n\t\t\t\t\tcontentText: '我不信伊朗会没有后续反应，美国肯定会为今天的事情付出代价的',\n\t\t\t\t\turl: 'https://cdn.uviewui.com/uview/template/SmilingDog.jpg',\n\t\t\t\t\tallReply: 12,\n\t\t\t\t\tlikeNum: 33,\n\t\t\t\t\tisLike: false,\n\t\t\t\t\treplyList: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'uview',\n\t\t\t\t\t\t\tcontentStr: 'uview是基于uniapp的一个UI框架，代码优美简洁，宇宙超级无敌彩虹旋转好用，用它！'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: '粘粘',\n\t\t\t\t\t\t\tcontentStr: '今天吃什么，明天吃什么，晚上吃什么，我只是一只小猫咪为什么要烦恼这么多'\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 2,\n\t\t\t\t\tname: '叶轻眉1',\n\t\t\t\t\tdate: '01-25 13:58',\n\t\t\t\t\tcontentText: '我不信伊朗会没有后续反应，美国肯定会为今天的事情付出代价的',\n\t\t\t\t\tallReply: 0,\n\t\t\t\t\tlikeNum: 11,\n\t\t\t\t\tisLike: false,\n\t\t\t\t\turl: 'https://cdn.uviewui.com/uview/template/niannian.jpg',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 3,\n\t\t\t\t\tname: '叶轻眉2',\n\t\t\t\t\tdate: '03-25 13:58',\n\t\t\t\t\tcontentText: '我不信伊朗会没有后续反应，美国肯定会为今天的事情付出代价的',\n\t\t\t\t\tallReply: 0,\n\t\t\t\t\tlikeNum: 21,\n\t\t\t\t\tisLike: false,\n\t\t\t\t\tallReply: 2,\n\t\t\t\t\turl: '../../../static/logo.png',\n\t\t\t\t\treplyList: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'uview',\n\t\t\t\t\t\t\tcontentStr: 'uview是基于uniapp的一个UI框架，代码优美简洁，宇宙超级无敌彩虹旋转好用，用它！'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: '豆包',\n\t\t\t\t\t\t\tcontentStr: '想吃冰糖葫芦粘豆包，但没钱5555.........'\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 4,\n\t\t\t\t\tname: '叶轻眉3',\n\t\t\t\t\tdate: '06-20 13:58',\n\t\t\t\t\tcontentText: '我不信伊朗会没有后续反应，美国肯定会为今天的事情付出代价的',\n\t\t\t\t\turl: 'https://cdn.uviewui.com/uview/template/SmilingDog.jpg',\n\t\t\t\t\tallReply: 0,\n\t\t\t\t\tlikeNum: 150,\n\t\t\t\t\tisLike: false\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.comment {\n\tdisplay: flex;\n\tpadding: 30rpx;\n\t.left {\n\t\timage {\n\t\t\twidth: 64rpx;\n\t\t\theight: 64rpx;\n\t\t\tborder-radius: 50%;\n\t\t\tbackground-color: #f2f2f2;\n\t\t}\n\t}\n\t.right {\n\t\tflex: 1;\n\t\tpadding-left: 20rpx;\n\t\tfont-size: 30rpx;\n\t\t.top {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t\talign-items: center;\n\t\t\tmargin-bottom: 10rpx;\n\t\t\t.name {\n\t\t\t\tcolor: #5677fc;\n\t\t\t}\n\t\t\t.like {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tcolor: #9a9a9a;\n\t\t\t\tfont-size: 26rpx;\n\t\t\t\t.num {\n\t\t\t\t\tmargin-right: 4rpx;\n\t\t\t\t\tcolor: #9a9a9a;\n\t\t\t\t}\n\t\t\t}\n\t\t\t.highlight {\n\t\t\t\tcolor: #5677fc;\n\t\t\t\t.num {\n\t\t\t\t\tcolor: #5677fc;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t.content {\n\t\t\tmargin-bottom: 10rpx;\n\t\t}\n\t\t.reply-box {\n\t\t\tbackground-color: rgb(242, 242, 242);\n\t\t\tborder-radius: 12rpx;\n\t\t\t.item {\n\t\t\t\tpadding: 20rpx;\n\t\t\t\tborder-bottom: solid 2rpx $u-border-color;\n\t\t\t\t.username {\n\t\t\t\t\tfont-size: 24rpx;\n\t\t\t\t\tcolor: #999999;\n\t\t\t\t}\n\t\t\t}\n\t\t\t.all-reply {\n\t\t\t\tpadding: 20rpx;\n\t\t\t\tdisplay: flex;\n\t\t\t\tcolor: #5677fc;\n\t\t\t\talign-items: center;\n\t\t\t\t.more {\n\t\t\t\t\tmargin-left: 6rpx;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t.bottom {\n\t\t\tmargin-top: 20rpx;\n\t\t\tdisplay: flex;\n\t\t\tfont-size: 24rpx;\n\t\t\tcolor: #9a9a9a;\n\t\t\t.reply {\n\t\t\t\tcolor: #5677fc;\n\t\t\t\tmargin-left: 10rpx;\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n"
  },
  {
    "path": "pages/template/comment/reply.vue",
    "content": "<template>\n\t<view class=\"wrap\">\n\t\t<view class=\"comment\">\n\t\t\t<view class=\"top\">\n\t\t\t\t<view class=\"left\">\n\t\t\t\t\t<view class=\"heart-photo\"><image :src=\"comment.url\" mode=\"\"></image></view>\n\t\t\t\t\t<view class=\"user-info\">\n\t\t\t\t\t\t<view class=\"name\">{{ comment.name }}</view>\n\t\t\t\t\t\t<view class=\"date\">06-25 13:58</view>\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"right\" :class=\"{ highlight: comment.isLike }\">\n\t\t\t\t\t{{ comment.likeNum }}\n\t\t\t\t\t<u-icon v-if=\"!comment.isLike\" name=\"thumb-up\" class=\"like\" color=\"#9a9a9a\" :size=\"30\" @click=\"getLike\"></u-icon>\n\t\t\t\t\t<u-icon v-if=\"comment.isLike\" name=\"thumb-up-fill\" class=\"like\" :size=\"30\" @click=\"getLike\"></u-icon>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t\t<view class=\"content\">{{ comment.contentText }}</view>\n\t\t</view>\n\t\t<view class=\"all-reply\">\n\t\t\t<view class=\"all-reply-top\">全部回复（{{ comment.allReply }}）</view>\n\t\t\t<view class=\"item\" v-for=\"(item, index) in commentList\" :key=\"index\">\n\t\t\t\t<view class=\"comment\">\n\t\t\t\t\t<view class=\"top\">\n\t\t\t\t\t\t<view class=\"left\">\n\t\t\t\t\t\t\t<view class=\"heart-photo\"><image :src=\"item.url\" mode=\"\"></image></view>\n\t\t\t\t\t\t\t<view class=\"user-info\">\n\t\t\t\t\t\t\t\t<view class=\"name\">{{ item.name }}</view>\n\t\t\t\t\t\t\t\t<view class=\"date\">{{ item.date }}</view>\n\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t\t<view class=\"right\"  :class=\"{ highlight: item.isLike }\">\n\t\t\t\t\t\t\t<view class=\"num\">{{ item.likeNum }}</view>\n\t\t\t\t\t\t\t<u-icon v-if=\"!item.isLike\" name=\"thumb-up\" class=\"like\" :size=\"30\" color=\"#9a9a9a\" @click=\"getLike(index)\"></u-icon>\n\t\t\t\t\t\t\t<u-icon v-if=\"item.isLike\" name=\"thumb-up-fill\" class=\"like\" :size=\"30\" @click=\"getLike(index)\"></u-icon>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"reply\" v-if=\"item.reply\">\n\t\t\t\t\t\t<view class=\"username\">{{ item.reply.name }}</view>\n\t\t\t\t\t\t<view class=\"text\">{{ item.reply.contentStr }}</view>\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"content\">{{ item.contentText }}</view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tcommentList: [],\n\t\t\tcomment: ''\n\t\t};\n\t},\n\tonLoad() {\n\t\tthis.getReply();\n\t},\n\tmethods: {\n\t\t// 点赞\n\t\tgetLike(index) {\n\t\t\tif (index === 0 || index > 0) {\n\t\t\t\tthis.commentList[index].isLike = !this.commentList[index].isLike;\n\t\t\t\tif (this.commentList[index].isLike == true) {\n\t\t\t\t\tthis.commentList[index].likeNum++;\n\t\t\t\t} else {\n\t\t\t\t\tthis.commentList[index].likeNum--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this.comment.isLike == true) {\n\t\t\t\t\tthis.comment.isLike = !this.comment.isLike;\n\t\t\t\t\tthis.comment.likeNum--;\n\t\t\t\t} else {\n\t\t\t\t\tthis.comment.isLike = !this.comment.isLike;\n\t\t\t\t\tthis.comment.likeNum++;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// 回复列表\n\t\tgetReply() {\n\t\t\tthis.comment = {\n\t\t\t\tid: 1,\n\t\t\t\tname: '叶轻眉',\n\t\t\t\tdate: '12-25 18:58',\n\t\t\t\tcontentText: '我不信伊朗会没有后续反应，美国肯定会为今天的事情付出代价的',\n\t\t\t\turl: 'https://cdn.uviewui.com/uview/template/SmilingDog.jpg',\n\t\t\t\tallReply: 12,\n\t\t\t\tlikeNum: 33,\n\t\t\t\tisLikes: false\n\t\t\t};\n\t\t\tthis.commentList = [\n\t\t\t\t{\n\t\t\t\t\tname: '新八几',\n\t\t\t\t\tdate: '12-25 18:58',\n\t\t\t\t\tcontentText: '不要乱打广告啊喂！虽然是真的超好用',\n\t\t\t\t\turl: 'https://cdn.uviewui.com/uview/template/SmilingDog.jpg',\n\t\t\t\t\tlikeNum: 33,\n\t\t\t\t\tisLike: false,\n\t\t\t\t\treply: {\n\t\t\t\t\t\tname: 'uview',\n\t\t\t\t\t\tcontentStr: 'uview是基于uniapp的一个UI框架，代码优美简洁，宇宙超级无敌彩虹旋转好用，用它！'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: '叶轻眉1',\n\t\t\t\t\tdate: '01-25 13:58',\n\t\t\t\t\turl: 'https://cdn.uviewui.com/uview/template/SmilingDog.jpg',\n\t\t\t\t\tcontentText: '我不信伊朗会没有后续反应，美国肯定会为今天的事情付出代价的',\n\t\t\t\t\tallReply: 0,\n\t\t\t\t\tlikeNum: 11,\n\t\t\t\t\tisLike: false,\n\t\t\t\t\treply: {\n\t\t\t\t\t\tname: '粘粘',\n\t\t\t\t\t\tcontentStr: '今天吃什么，明天吃什么，晚上吃什么，我只是一只小猫咪为什么要烦恼这么多'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: '叶轻眉2',\n\t\t\t\t\tdate: '03-25 13:58',\n\t\t\t\t\tcontentText: '我不信伊朗会没有后续反应，美国肯定会为今天的事情付出代价的',\n\t\t\t\t\tallReply: 0,\n\t\t\t\t\tlikeNum: 21,\n\t\t\t\t\turl: 'https://cdn.uviewui.com/uview/template/SmilingDog.jpg',\n\t\t\t\t\tisLike: false,\n\t\t\t\t\tallReply: 2,\n\t\t\t\t\treply: {\n\t\t\t\t\t\tname: '豆包',\n\t\t\t\t\t\tcontentStr: '想吃冰糖葫芦粘豆包，但没钱5555.........'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: '叶轻眉3',\n\t\t\t\t\tdate: '06-20 13:58',\n\t\t\t\t\tcontentText: '我不信伊朗会没有后续反应，美国肯定会为今天的事情付出代价的',\n\t\t\t\t\tallReply: 0,\n\t\t\t\t\tlikeNum: 150,\n\t\t\t\t\turl: 'https://cdn.uviewui.com/uview/template/SmilingDog.jpg',\n\t\t\t\t\tisLike: false\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\npage {\n\tbackground-color: #f2f2f2;\n}\n.comment {\n\tpadding: 30rpx;\n\tfont-size: 32rpx;\n\tbackground-color: #ffffff;\n\t.top {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t}\n\t.left {\n\t\tdisplay: flex;\n\t\t.heart-photo {\n\t\t\timage {\n\t\t\t\twidth: 64rpx;\n\t\t\t\theight: 64rpx;\n\t\t\t\tborder-radius: 50%;\n\t\t\t\tbackground-color: #f2f2f2;\n\t\t\t}\n\t\t}\n\t\t.user-info {\n\t\t\tmargin-left: 10rpx;\n\t\t\t.name {\n\t\t\t\tcolor: #5677fc;\n\t\t\t\tfont-size: 28rpx;\n\t\t\t\tmargin-bottom: 4rpx;\n\t\t\t}\n\t\t\t.date {\n\t\t\t\tfont-size: 20rpx;\n\t\t\t\tcolor: $u-light-color;\n\t\t\t}\n\t\t}\n\t}\n\t.right {\n\t\tdisplay: flex;\n\t\tfont-size: 20rpx;\n\t\talign-items: center;\n\t\tcolor: #9a9a9a;\n\t\t.like {\n\t\t\tmargin-left: 6rpx;\n\t\t}\n\t\t.num{\n\t\t\tfont-size: 26rpx;\n\t\t\tcolor: #9a9a9a;\n\t\t}\n\t}\n\t.highlight {\n\t\tcolor: #5677fc;\n\t\t.num{\n\t\t\tcolor: #5677fc;\n\t\t}\n\t}\n}\n.all-reply {\n\tmargin-top: 10rpx;\n\tpadding-top: 20rpx;\n\tbackground-color: #ffffff;\n\t.all-reply-top {\n\t\tmargin-left: 20rpx;\n\t\tpadding-left: 20rpx;\n\t\tborder-left: solid 4rpx #5677fc;\n\t\tfont-size: 30rpx;\n\t\tfont-weight: bold;\n\t}\n\t.item {\n\t\tborder-bottom: solid 2rpx $u-border-color;\n\t}\n\t.reply {\n\t\tpadding: 20rpx;\n\t\tbackground-color: rgb(242, 242, 242);\n\t\tborder-radius: 12rpx;\n\t\tmargin: 10rpx 0;\n\t\t.username {\n\t\t\tfont-size: 24rpx;\n\t\t\tcolor: #7a7a7a;\n\t\t}\n\t}\n}\n</style>\n"
  },
  {
    "path": "pages/template/coupon/index.vue",
    "content": "<template>\n\t<view class=\"u-wrap\">\n\t\t<view class=\"meituan\">\n\t\t\t<view class=\"content\">\n\t\t\t\t<view class=\"left\">\n\t\t\t\t\t<view class=\"sum\">\n\t\t\t\t\t\t￥\n\t\t\t\t\t\t<text class=\"num\">8</text>\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"type\">抵用券</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"centre\">\n\t\t\t\t\t<view class=\"title\">【洗牙】8元无门槛红包</view>\n\t\t\t\t\t<view class=\"valid-date\">今日到期</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"right\">\n\t\t\t\t\t<view size=\"mini\" class=\"immediate-use\" :round=\"true\">立即使用</view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t\t<view class=\"tips\">\n\t\t\t\t<view class=\"circle-left\"></view>\n\t\t\t\t<view class=\"circle-right\"></view>\n\t\t\t\t<view class=\"explain u-line-1\">满8.1元可用、限最新版本客户端使用</view>\n\t\t\t\t<view class=\"rule u-line-1\" @tap=\"xxx122\">\n\t\t\t\t\t<text>使用规则</text>\n\t\t\t\t\t<u-icon name=\"arrow-right\" color=\"\" :size=\"20\" @click=\"\"></u-icon>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"jingdong\">\n\t\t\t<view class=\"left\">\n\t\t\t\t<view class=\"sum\">\n\t\t\t\t\t￥\n\t\t\t\t\t<text class=\"num\">100</text>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"type\">满149元可用</view>\n\t\t\t</view>\n\t\t\t<view class=\"right\">\n\t\t\t\t<view class=\"top\">\n\t\t\t\t\t<view class=\"title\">\n\t\t\t\t\t\t<text class=\"tag\">限品类东券</text>\n\t\t\t\t\t\t<text>仅可购买个人护理部分商品</text>\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"bottom\">\n\t\t\t\t\t\t<view class=\"date u-line-1\">2020.01.01-2020.01.31</view>\n\t\t\t\t\t\t<view class=\"immediate-use\">立即使用</view>\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"tips\">\n\t\t\t\t\t<view class=\"explain\">\n\t\t\t\t\t\t<u-icon name=\"zhuanfa\" class=\"transpond\" :size=\"24\"></u-icon>\n\t\t\t\t\t\t<text>可赠送</text>\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"taobao\">\n\t\t\t<view class=\"title\">\n\t\t\t\t<view class=\"left\">\n\t\t\t\t\t<image class=\"buddha\" src=\"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1975388697,1068670603&fm=26&gp=0.jpg\" mode=\"aspectFill\"></image>\n\t\t\t\t\t<view class=\"store\">袜子精保护协会</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"entrance\">进店</view>\n\t\t\t</view>\n\t\t\t<view class=\"ticket\">\n\t\t\t\t<view class=\"left\">\n\t\t\t\t\t<image\n\t\t\t\t\t\tclass=\"picture\"\n\t\t\t\t\t\tsrc=\"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1578059523488&di=5f592ac19c1b983005d3e85add469756&imgtype=0&src=http%3A%2F%2Fimg010.hc360.cn%2Fg7%2FM00%2F2D%2FB9%2FwKhQs1QfUo6EdeM-AAAAALwk1hM072.jpg\"\n\t\t\t\t\t\tmode=\"widthFix\"\n\t\t\t\t\t></image>\n\t\t\t\t\t<view class=\"introduce\">\n\t\t\t\t\t\t<view class=\"top\">\n\t\t\t\t\t\t\t￥\n\t\t\t\t\t\t\t<text class=\"big\">3</text>\n\t\t\t\t\t\t\t满88减3\n\t\t\t\t\t\t</view>\n\t\t\t\t\t\t<view class=\"type\">店铺优惠券</view>\n\t\t\t\t\t\t<view class=\"date u-line-1\">2019.11.28-2020.1.24</view>\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"right\">\n\t\t\t\t\t<view class=\"use immediate-use\" :round=\"true\">去使用</view>\n\t\t\t\t</view>\n\t\t\t\t\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\t\n};\n</script>\n\n<style lang=\"scss\" scoped>\npage {\n\theight: 100%;\n\tbackground-color: rgb(244, 244, 244);\n}\n.u-wrap {\n\tpadding: 24rpx;\n}\n\n.meituan {\n\tmargin: 30rpx auto;\n\tbackground-color: #ffffff;\n\twidth: 700rpx;\n\t// border: 10rpx;\n\tcolor: $u-type-warning;\n\tfont-size: 28rpx;\n\t.content {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tpadding: 80rpx 20rpx;\n\t\tborder: 10rpx;\n\t\tbackground-color: #fff5f4;\n\t\t.left {\n\t\t\t.sum {\n\t\t\t\tfont-size: 32rpx;\n\t\t\t\t.num {\n\t\t\t\t\tfont-size: 60rpx;\n\t\t\t\t\tfont-weight: bold;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t.centre {\n\t\t\tmargin-left: 40rpx;\n\t\t\t.title {\n\t\t\t\tfont-size: 32rpx;\n\t\t\t\tfont-weight: bold;\n\t\t\t\tcolor: $u-main-color;\n\t\t\t\tmargin-bottom: 20rpx;\n\t\t\t}\n\t\t}\n\t\t.right {\n\t\t\tmargin-left: 30rpx;\n\t\t\t.immediate-use {\n\t\t\t\tpadding: 0 20rpx;\n\t\t\t\theight: 50rpx;\n\t\t\t\tborder-radius: 25rpx;\n\t\t\t\tline-height: 50rpx;\n\t\t\t\tbackground-color: $u-type-warning!important;\n\t\t\t\tcolor: #ffffff!important;\n\t\t\t\tfont-size: 24rpx;\n\t\t\t\tborder: none;\n\t\t\t\tword-break: keep-all;\n\t\t\t}\n\t\t}\n\t}\n\t.tips {\n\t\tpadding: 0 20rpx;\n\t\tborder: 10rpx;\n\t\tbackground-color: $u-type-info-light;\n\t\tposition: relative;\n\t\tcolor: $u-tips-color;\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tline-height: 60rpx;\n\t\tfont-size: 24rpx;\n\t\t.circle-left,\n\t\t.circle-right {\n\t\t\tposition: absolute;\n\t\t\theight: 36rpx;\n\t\t\twidth: 18rpx;\n\t\t\tbackground-color: #f2f2f2;\n\t\t}\n\n\t\t.circle-right {\n\t\t\tborder-radius: 40rpx 0 0 40rpx;\n\t\t\tright: 0;\n\t\t\ttop: -18rpx;\n\t\t}\n\n\t\t.circle-left {\n\t\t\tborder-radius: 0 40rpx 40rpx 0;\n\t\t\tleft: 0;\n\t\t\ttop: -18rpx;\n\t\t}\n\t\t.rule {\n\t\t\tfont-size: 24rpx;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\ttext {\n\t\t\t\tmargin-right: 10rpx;\n\t\t\t\tflex: 1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n.jingdong {\n\tmargin-top: 40rpx;\n\twidth: 700rpx;\n\theight: auto;\n\tbackground-color: #ffffff;\n\tdisplay: flex;\n\t.left {\n\t\tpadding: 0 30rpx;\n\t\tbackground-color: rgb(95, 148, 224); //rgb(94, 152, 225);\n\t\ttext-align: center;\n\t\tfont-size: 28rpx;\n\t\tcolor: #ffffff;\n\t\t.sum {\n\t\t\tmargin-top: 50rpx;\n\t\t\tfont-weight: bold;\n\t\t\tfont-size: 32rpx;\n\t\t\t.num {\n\t\t\t\tfont-size: 80rpx;\n\t\t\t}\n\t\t}\n\t\t.type {\n\t\t\tmargin-bottom: 50rpx;\n\t\t\tfont-size: 24rpx;\n\t\t}\n\t}\n\t.right {\n\t\tpadding: 20rpx 20rpx 0;\n\t\tfont-size: 28rpx;\n\t\t.top {\n\t\t\tborder-bottom: 2rpx dashed $u-border-color;\n\t\t\t.title {\n\t\t\t\tmargin-right: 60rpx;\n\t\t\t\tline-height: 40rpx;\n\t\t\t\t.tag {\n\t\t\t\t\tpadding: 4rpx 20rpx;\n\t\t\t\t\tbackground-color: rgb(73, 154, 201);\n\t\t\t\t\tborder-radius: 20rpx;\n\t\t\t\t\tcolor: #ffffff;\n\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\tfont-size: 24rpx;\n\t\t\t\t\tmargin-right: 10rpx;\n\t\t\t\t}\n\t\t\t}\n\t\t\t.bottom {\n\t\t\t\tdisplay: flex;\n\t\t\t\tmargin-top: 20rpx;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: space-between;\n\t\t\t\tmargin-bottom: 10rpx;\n\t\t\t\t.date {\n\t\t\t\t\tfont-size: 20rpx;\n\t\t\t\t\tflex: 1;\n\t\t\t\t}\n\t\t\t\t.immediate-use {\n\t\t\t\t\theight: auto;\n\t\t\t\t\tpadding: 0 20rpx;\n\t\t\t\t\tfont-size: 24rpx;\n\t\t\t\t\tborder-radius: 40rpx;\n\t\t\t\t\tline-height: 40rpx;\n\t\t\t\t\tcolor: rgb(117, 142, 165);\n\t\t\t\t\tborder: 2rpx solid rgb(117, 142, 165);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t.tips {\n\t\t\twidth: 100%;\n\t\t\tline-height: 50rpx;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: space-between;\n\t\t\tfont-size: 24rpx;\n\t\t\t.transpond {\n\t\t\t\tmargin-right: 10rpx;\n\t\t\t}\n\t\t\t.explain {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t}\n\t\t\t.particulars {\n\t\t\t\twidth: 30rpx;\n\t\t\t\theight: 30rpx;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tpadding-top: 8rpx;\n\t\t\t\tborder-radius: 50%;\n\t\t\t\tbackground-color: $u-type-info-disabled;\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t}\n\t}\n}\n\n.taobao {\n\tmargin-top: 40rpx;\n\twidth: 700rpx;\n\tbackground-color: white;\n\tpadding: 30rpx 20rpx 20rpx;\n\tborder-radius: 20rpx;\n\t.title {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tmargin-bottom: 20rpx;\n\t\tfont-size: 30rpx;\n\t\t.left {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t}\n\t\t.store {\n\t\t\tfont-weight: 500;\n\t\t}\n\t\t.buddha {\n\t\t\twidth: 70rpx;\n\t\t\theight: 70rpx;\n\t\t\tborder-radius: 10rpx;\n\t\t\tmargin-right: 10rpx;\n\t\t}\n\t\t.entrance {\n\t\t\tcolor: $u-type-info;\n\t\t\tborder: solid 2rpx $u-type-info;\n\t\t\tline-height: 48rpx;\n\t\t\tpadding: 0 30rpx;\n\t\t\tbackground: none;\n\t\t\tborder-radius: 15px;\n\t\t}\n\t}\n\t.ticket {\n\t\tdisplay: flex;\n\t\t.left {\n\t\t\twidth: 70%;\n\t\t\tpadding: 30rpx 20rpx;\n\t\t\tbackground-color: rgb(255, 245, 244);\n\t\t\tborder-radius: 20rpx;\n\t\t\tborder-right: dashed 2rpx rgb(224, 215, 211);\n\t\t\tdisplay: flex;\n\t\t\t.picture {\n\t\t\t\twidth: 172rpx;\n\t\t\t\tborder-radius: 20rpx;\n\t\t\t}\n\t\t\t.introduce {\n\t\t\t\tmargin-left: 10rpx;\n\t\t\t\t.top{\n\t\t\t\t\tcolor:$u-type-warning;\n\t\t\t\t\tfont-size: 28rpx;\n\t\t\t\t\t.big{\n\t\t\t\t\t\tfont-size: 60rpx;\n\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\tmargin-right: 10rpx;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.type{\n\t\t\t\t\tfont-size: 28rpx;\n\t\t\t\t\tcolor: $u-type-info-dark;\n\t\t\t\t}\n\t\t\t\t.date{\n\t\t\t\t\tmargin-top: 10rpx;\n\t\t\t\t\tfont-size: 20rpx;\n\t\t\t\t\tcolor: $u-type-info-dark;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t.right {\n\t\t\twidth: 30%;\n\t\t\tpadding: 40rpx 20rpx;\n\t\t\tbackground-color: rgb(255, 245, 244);\n\t\t\tborder-radius: 20rpx;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\t.use{\n\t\t\t\theight: auto;\n\t\t\t\tpadding: 0 20rpx;\n\t\t\t\tfont-size: 24rpx;\n\t\t\t\tborder-radius: 40rpx;\n\t\t\t\tcolor: #ffffff!important;\n\t\t\t\tbackground-color: $u-type-warning!important;\n\t\t\t\tline-height: 40rpx;\n\t\t\t\tcolor: rgb(117, 142, 165);\n\t\t\t\tmargin-left: 20rpx;\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n"
  },
  {
    "path": "pages/template/douyin/index.nvue",
    "content": "<template>\n</template>\n\n<script>\n</script>\n\n<style>\n\t.div {\n\t\t\n\t}\n</style>\n"
  },
  {
    "path": "pages/template/keyboardPay/index.vue",
    "content": "<template>\n\t<view>\n\t\t<view class=\"u-padding-40\">\n\t\t\t<u-button type=\"success\" @click=\"showPop(true)\">\n\t\t\t\t<u-icon name=\"red-packet\"></u-icon>\n\t\t\t\t<text class=\"u-padding-left-10\">发送1.00元红包</text>\n\t\t\t</u-button>\n\t\t</view>\t\t\n\t\t<u-keyboard \n\t\t\tdefault=\"\"\n\t\t\tref=\"uKeyboard\" \n\t\t\tmode=\"number\" \n\t\t\t:mask=\"true\" \n\t\t\t:mask-close-able=\"false\"\n\t\t\t:dot-enabled=\"false\" \n\t\t\tv-model=\"show\"\n\t\t\t:safe-area-inset-bottom=\"true\"\n\t\t\t:tooltip=\"false\"\n\t\t\t@change=\"onChange\"\n\t\t\t@backspace=\"onBackspace\">\n\t\t\t<view>\n\t\t\t\t<view class=\"u-text-center u-padding-20 money\">\n\t\t\t\t\t<text>1.00</text>\n\t\t\t\t\t<text class=\"u-font-20 u-padding-left-10\">元</text>\n\t\t\t\t\t<view class=\"u-padding-10 close\" data-flag=\"false\" @tap=\"showPop(false)\">\n\t\t\t\t\t\t<u-icon name=\"close\" color=\"#333333\" size=\"28\"></u-icon>\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-flex u-row-center\">\n\t\t\t\t\t<u-message-input \n\t\t\t\t\t\tmode=\"box\" \n\t\t\t\t\t\t:maxlength=\"6\"\n\t\t\t\t\t\t:dot-fill=\"true\"\n\t\t\t\t\t\tv-model=\"password\"\n\t\t\t\t\t\t:disabled-keyboard=\"true\"\n\t\t\t\t\t\t@finish=\"finish\"\n\t\t\t\t\t></u-message-input>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-text-center u-padding-top-10 u-padding-bottom-20 tips\">支付键盘</view>\n\t\t\t</view>\n\t\t</u-keyboard>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tshow:false,\n\t\t\t\tpassword:''\n\t\t\t}\n\t\t},\n\t\tonLoad() {\n\t\t\t\n\t\t},\n\t\tmethods: {\n\t\t\tonChange(val){\n\t\t\t\tif(this.password.length<6){\n\t\t\t\t\tthis.password += val;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.password.length>=6){\n\t\t\t\t\tthis.pay();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonBackspace(e){\n\t\t\t\tif(this.password.length>0){\n\t\t\t\t\tthis.password = this.password.substring(0,this.password.length-1);\n\t\t\t\t}\n\t\t\t},\n\t\t\tpay(){\n\t\t\t\tuni.showLoading({\n\t\t\t\t\ttitle:'支付中'\n\t\t\t\t})\n\t\t\t\t\n\t\t\t\tsetTimeout(()=>{\n\t\t\t\t\tuni.hideLoading();\n\t\t\t\t\tthis.show = false;\n\t\t\t\t\tuni.showToast({\n\t\t\t\t\t\ticon:'success',\n\t\t\t\t\t\ttitle:'支付成功'\n\t\t\t\t\t})\n\t\t\t\t},2000);\n\t\t\t},\n\t\t\tshowPop(flag = true){\n\t\t\t\tthis.password = '';\n\t\t\t\tthis.show = flag;\n\t\t\t},\n\t\t\tfinish(){\n\t\t\t\tconsole.log(11111)\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\">\n\t.money{\n\t\tfont-size: 80rpx;\n\t\tcolor: $u-type-warning;\n\t\tposition: relative;\n\t\t\n\t\t.close{\n\t\t\tposition: absolute;\n\t\t\ttop: 20rpx;\n\t\t\tright: 20rpx;\n\t\t\tline-height: 28rpx;\n\t\t\tfont-size: 28rpx;\n\t\t}\n\t}\n\t.tips{\n\t\tcolor:$u-tips-color;\n\t}\n</style>"
  },
  {
    "path": "pages/template/login/code.vue",
    "content": "<template>\n\t<view class=\"wrap\">\n\t\t<view class=\"key-input\">\n\t\t\t<view class=\"title\">输入验证码</view>\n\t\t\t<view class=\"tips\">验证码已发送至 +150****9320</view>\n\t\t\t<u-message-input :focus=\"true\" :value=\"value\" @change=\"change\" @finish=\"finish\" mode=\"bottomLine\" :maxlength=\"maxlength\"></u-message-input>\n\t\t\t<text :class=\"{ error: error }\">验证码错误，请重新输入</text>\n\t\t\t<view class=\"captcha\">\n\t\t\t\t<text :class=\"{ noCaptcha: show }\" @tap=\"noCaptcha\">收不到验证码点这里</text>\n\t\t\t\t<text :class=\"{ regain: !show }\">{{ second }}秒后重新获取验证码</text>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tmaxlength: 4,\n\t\t\tvalue: '',\n\t\t\tsecond: 3,\n\t\t\tshow: false,\n\t\t\terror: false\n\t\t};\n\t},\n\tcomputed: {},\n\tonLoad() {\n\t\t// this.getCaptcha()\n\t\tlet interval = setInterval(() => {\n\t\t\tthis.second--;\n\t\t\tif (this.second <= 0) {\n\t\t\t\tthis.show = true;\n\t\t\t\tif (this.value.lenth != 4) {\n\t\t\t\t\tthis.error = true;\n\t\t\t\t}\n\t\t\t\tclearInterval(interval);\n\t\t\t}\n\t\t}, 1000);\n\t},\n\tmethods: {\n\t\t// 收不到验证码选择时的选择\n\t\tnoCaptcha() {\n\t\t\tuni.showActionSheet({\n\t\t\t\titemList: ['重新获取验证码', '接听语音验证码'],\n\t\t\t\tsuccess: function(res) {\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\tfail: function(res) {\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t// change事件侦听\n\t\tchange(value) {\n\t\t\t// console.log('change', value);\n\t\t},\n\t\t// 输入完验证码最后一位执行\n\t\tfinish(value) {\n\t\t\t// console.log('finish', value);\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.wrap {\n\tpadding: 80rpx;\n}\n\n.box {\n\tmargin: 30rpx 0;\n\tfont-size: 30rpx;\n\tcolor: 555;\n}\n\n.key-input {\n\tpadding: 30rpx 0;\n\ttext {\n\t\tdisplay: none;\n\t}\n\t.error {\n\t\tdisplay: block;\n\t\tcolor: red;\n\t\tfont-size: 30rpx;\n\t\tmargin: 20rpx 0;\n\t}\n}\n\n.title {\n\tfont-size: 50rpx;\n\tcolor: #333;\n}\n\n.key-input .tips {\n\tfont-size: 30rpx;\n\tcolor: #333;\n\tmargin-top: 20rpx;\n\tmargin-bottom: 60rpx;\n}\n.captcha {\n\tcolor: $u-type-warning;\n\tfont-size: 30rpx;\n\tmargin-top: 40rpx;\n\t.noCaptcha {\n\t\tdisplay: block;\n\t}\n\t.regain {\n\t\tdisplay: block;\n\t}\n}\n</style>\n"
  },
  {
    "path": "pages/template/login/index.vue",
    "content": "<template>\n\t<view class=\"wrap\">\n\t\t<view class=\"top\"></view>\n\t\t<view class=\"content\">\n\t\t\t<view class=\"title\">欢迎登录美团</view>\n\t\t\t<input class=\"u-border-bottom\" type=\"number\" v-model=\"tel\" placeholder=\"请输入手机号\" />\n\t\t\t<view class=\"tips\">未注册的手机号验证后自动创建美团账号</view>\n\t\t\t<button @tap=\"submit\" :style=\"[inputStyle]\" class=\"getCaptcha\">获取短信验证码</button>\n\t\t\t<view class=\"alternative\">\n\t\t\t\t<view class=\"password\">密码登录</view>\n\t\t\t\t<view class=\"issue\">遇到问题</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"buttom\">\n\t\t\t<view class=\"loginType\">\n\t\t\t\t<view class=\"wechat item\">\n\t\t\t\t\t<view class=\"icon\"><u-icon size=\"70\" name=\"weixin-fill\" color=\"rgb(83,194,64)\"></u-icon></view>\n\t\t\t\t\t微信\n\t\t\t\t</view>\n\t\t\t\t<view class=\"QQ item\">\n\t\t\t\t\t<view class=\"icon\"><u-icon size=\"70\" name=\"qq-fill\" color=\"rgb(17,183,233)\"></u-icon></view>\n\t\t\t\t\tQQ\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t\t<view class=\"hint\">\n\t\t\t\t登录代表同意\n\t\t\t\t<text class=\"link\">美团点评用户协议、隐私政策，</text>\n\t\t\t\t并授权使用您的美团点评账号信息（如昵称、头像、收获地址）以便您统一管理\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\ttel: ''\n\t\t}\n\t},\n\tcomputed: {\n\t\tinputStyle() {\n\t\t\tlet style = {};\n\t\t\tif(this.tel) {\n\t\t\t\tstyle.color = \"#fff\";\n\t\t\t\tstyle.backgroundColor = this.$u.color['warning'];\n\t\t\t}\n\t\t\treturn style;\n\t\t}\n\t},\n\tmethods: {\n\t\tsubmit() {\n\t\t\tif(this.$u.test.mobile(this.tel)) {\n\t\t\t\tthis.$u.route({\n\t\t\t\t\turl: 'pages/template/login/code'\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.wrap {\n\tfont-size: 28rpx;\n\t.content {\n\t\twidth: 600rpx;\n\t\tmargin: 80rpx auto 0;\n\n\t\t.title {\n\t\t\ttext-align: left;\n\t\t\tfont-size: 60rpx;\n\t\t\tfont-weight: 500;\n\t\t\tmargin-bottom: 100rpx;\n\t\t}\n\t\tinput {\n\t\t\ttext-align: left;\n\t\t\tmargin-bottom: 10rpx;\n\t\t\tpadding-bottom: 6rpx;\n\t\t}\n\t\t.tips {\n\t\t\tcolor: $u-type-info;\n\t\t\tmargin-bottom: 60rpx;\n\t\t\tmargin-top: 8rpx;\n\t\t}\n\t\t.getCaptcha {\n\t\t\tbackground-color: rgb(253, 243, 208);\n\t\t\tcolor: $u-tips-color;\n\t\t\tborder: none;\n\t\t\tfont-size: 30rpx;\n\t\t\tpadding: 12rpx 0;\n\t\t\t\n\t\t\t&::after {\n\t\t\t\tborder: none;\n\t\t\t}\n\t\t}\n\t\t.alternative {\n\t\t\tcolor: $u-tips-color;\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t\tmargin-top: 30rpx;\n\t\t}\n\t}\n\t.buttom {\n\t\t.loginType {\n\t\t\tdisplay: flex;\n\t\t\tpadding: 350rpx 150rpx 150rpx 150rpx;\n\t\t\tjustify-content:space-between;\n\t\t\t\n\t\t\t.item {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\talign-items: center;\n\t\t\t\tcolor: $u-content-color;\n\t\t\t\tfont-size: 28rpx;\n\t\t\t}\n\t\t}\n\t\t\n\t\t.hint {\n\t\t\tpadding: 20rpx 40rpx;\n\t\t\tfont-size: 20rpx;\n\t\t\tcolor: $u-tips-color;\n\t\t\t\n\t\t\t.link {\n\t\t\t\tcolor: $u-type-warning;\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n"
  },
  {
    "path": "pages/template/mallMenu/index1.vue",
    "content": "<template>\n\t<view class=\"u-wrap\">\n\t\t<view class=\"u-search-box\">\n\t\t\t<view class=\"u-search-inner\">\n\t\t\t\t<u-icon name=\"search\" color=\"#909399\" :size=\"28\"></u-icon>\n\t\t\t\t<text class=\"u-search-text\">搜索uView</text>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-menu-wrap\">\n\t\t\t<scroll-view scroll-y scroll-with-animation class=\"u-tab-view menu-scroll-view\" :scroll-top=\"scrollTop\">\n\t\t\t\t<view v-for=\"(item,index) in tabbar\" :key=\"index\" class=\"u-tab-item\" :class=\"[current==index ? 'u-tab-item-active' : '']\"\n\t\t\t\t :data-current=\"index\" @tap.stop=\"swichMenu(index)\">\n\t\t\t\t\t<text class=\"u-line-1\">{{item.name}}</text>\n\t\t\t\t</view>\n\t\t\t</scroll-view>\n\t\t\t<block v-for=\"(item,index) in tabbar\" :key=\"index\">\n\t\t\t\t<scroll-view scroll-y class=\"right-box\" v-if=\"current==index\">\n\t\t\t\t\t<view class=\"page-view\">\n\t\t\t\t\t\t<view class=\"class-item\">\n\t\t\t\t\t\t\t<view class=\"item-title\">\n\t\t\t\t\t\t\t\t<text>{{item.name}}</text>\n\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t<view class=\"item-container\">\n\t\t\t\t\t\t\t\t<view class=\"thumb-box\" v-for=\"(item1, index1) in item.foods\" :key=\"index1\">\n\t\t\t\t\t\t\t\t\t<image class=\"item-menu-image\" :src=\"item1.icon\" mode=\"\"></image>\n\t\t\t\t\t\t\t\t\t<view class=\"item-menu-name\">{{item1.name}}</view>\n\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</view>\n\t\t\t\t</scroll-view>\n\t\t\t</block>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\timport classifyData from \"@/common/classify.data.js\";\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttabbar: classifyData,\n\t\t\t\tscrollTop: 0, //tab标题的滚动条位置\n\t\t\t\tcurrent: 0, // 预设当前项的值\n\t\t\t\tmenuHeight: 0, // 左边菜单的高度\n\t\t\t\tmenuItemHeight: 0, // 左边菜单item的高度\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\t\n\t\t},\n\t\tmethods: {\n\t\t\tgetImg() {\n\t\t\t\treturn Math.floor(Math.random() * 35);\n\t\t\t},\n\t\t\t// 点击左边的栏目切换\n\t\t\tasync swichMenu(index) {\n\t\t\t\tif(index == this.current) return ;\n\t\t\t\tthis.current = index;\n\t\t\t\t// 如果为0，意味着尚未初始化\n\t\t\t\tif(this.menuHeight == 0 || this.menuItemHeight == 0) {\n\t\t\t\t\tawait this.getElRect('menu-scroll-view', 'menuHeight');\n\t\t\t\t\tawait this.getElRect('u-tab-item', 'menuItemHeight');\n\t\t\t\t}\n\t\t\t\t// 将菜单菜单活动item垂直居中\n\t\t\t\tthis.scrollTop = index * this.menuItemHeight + this.menuItemHeight / 2 - this.menuHeight / 2;\n\t\t\t},\n\t\t\t// 获取一个目标元素的高度\n\t\t\tgetElRect(elClass, dataVal) {\n\t\t\t\tnew Promise((resolve, reject) => {\n\t\t\t\t\tconst query = uni.createSelectorQuery().in(this);\n\t\t\t\t\tquery.select('.' + elClass).fields({size: true},res => {\n\t\t\t\t\t\t// 如果节点尚未生成，res值为null，循环调用执行\n\t\t\t\t\t\tif(!res) {\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tthis.getElRect(elClass);\n\t\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\t\treturn ;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis[dataVal] = res.height;\n\t\t\t\t\t}).exec();\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-wrap {\n\t\theight: calc(100vh);\n\t\t/* #ifdef H5 */\n\t\theight: calc(100vh - var(--window-top));\n\t\t/* #endif */\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t}\n\n\t.u-search-box {\n\t\tpadding: 18rpx 30rpx;\n\t}\n\n\t.u-menu-wrap {\n\t\tflex: 1;\n\t\tdisplay: flex;\n\t\toverflow: hidden;\n\t}\n\n\t.u-search-inner {\n\t\tbackground-color: rgb(234, 234, 234);\n\t\tborder-radius: 100rpx;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tpadding: 10rpx 16rpx;\n\t}\n\n\t.u-search-text {\n\t\tfont-size: 26rpx;\n\t\tcolor: $u-tips-color;\n\t\tmargin-left: 10rpx;\n\t}\n\n\t.u-tab-view {\n\t\twidth: 200rpx;\n\t\theight: 100%;\n\t}\n\n\t.u-tab-item {\n\t\theight: 110rpx;\n\t\tbackground: #f6f6f6;\n\t\tbox-sizing: border-box;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tfont-size: 26rpx;\n\t\tcolor: #444;\n\t\tfont-weight: 400;\n\t\tline-height: 1;\n\t}\n\t\n\t.u-tab-item-active {\n\t\tposition: relative;\n\t\tcolor: #000;\n\t\tfont-size: 30rpx;\n\t\tfont-weight: 600;\n\t\tbackground: #fff;\n\t}\n\t\n\t.u-tab-item-active::before {\n\t\tcontent: \"\";\n\t\tposition: absolute;\n\t\tborder-left: 4px solid $u-type-primary;\n\t\theight: 32rpx;\n\t\tleft: 0;\n\t\ttop: 39rpx;\n\t}\n\n\t.u-tab-view {\n\t\theight: 100%;\n\t}\n\t\n\t.right-box {\n\t\tbackground-color: rgb(250, 250, 250);\n\t}\n\t\n\t.page-view {\n\t\tpadding: 16rpx;\n\t}\n\t\n\t.class-item {\n\t\tmargin-bottom: 30rpx;\n\t\tbackground-color: #fff;\n\t\tpadding: 16rpx;\n\t\tborder-radius: 8rpx;\n\t}\n\t\n\t.item-title {\n\t\tfont-size: 26rpx;\n\t\tcolor: $u-main-color;\n\t\tfont-weight: bold;\n\t}\n\t\n\t.item-menu-name {\n\t\tfont-weight: normal;\n\t\tfont-size: 24rpx;\n\t\tcolor: $u-main-color;\n\t}\n\t\n\t.item-container {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t}\n\t\n\t.thumb-box {\n\t\twidth: 33.333333%;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tflex-direction: column;\n\t\tmargin-top: 20rpx;\n\t}\n\t\n\t.item-menu-image {\n\t\twidth: 120rpx;\n\t\theight: 120rpx;\n\t}\n</style>\n"
  },
  {
    "path": "pages/template/mallMenu/index2.vue",
    "content": "<template>\n\t<view class=\"u-wrap\">\n\t\t<view class=\"u-search-box\">\n\t\t\t<view class=\"u-search-inner\">\n\t\t\t\t<u-icon name=\"search\" color=\"#909399\" :size=\"28\"></u-icon>\n\t\t\t\t<text class=\"u-search-text\">搜索</text>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-menu-wrap\">\n\t\t\t<scroll-view scroll-y scroll-with-animation class=\"u-tab-view menu-scroll-view\" :scroll-top=\"scrollTop\"\n\t\t\t :scroll-into-view=\"itemId\">\n\t\t\t\t<view v-for=\"(item,index) in tabbar\" :key=\"index\" class=\"u-tab-item\" :class=\"[current == index ? 'u-tab-item-active' : '']\"\n\t\t\t\t @tap.stop=\"swichMenu(index)\">\n\t\t\t\t\t<text class=\"u-line-1\">{{item.name}}</text>\n\t\t\t\t</view>\n\t\t\t</scroll-view>\n\t\t\t<scroll-view :scroll-top=\"scrollRightTop\" scroll-y scroll-with-animation class=\"right-box\" @scroll=\"rightScroll\">\n\t\t\t\t<view class=\"page-view\">\n\t\t\t\t\t<view class=\"class-item\" :id=\"'item' + index\" v-for=\"(item , index) in tabbar\" :key=\"index\">\n\t\t\t\t\t\t<view class=\"item-title\">\n\t\t\t\t\t\t\t<text>{{item.name}}</text>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t\t<view class=\"item-container\">\n\t\t\t\t\t\t\t<view class=\"thumb-box\" v-for=\"(item1, index1) in item.foods\" :key=\"index1\">\n\t\t\t\t\t\t\t\t<image class=\"item-menu-image\" :src=\"item1.icon\" mode=\"\"></image>\n\t\t\t\t\t\t\t\t<view class=\"item-menu-name\">{{item1.name}}</view>\n\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t</scroll-view>\n\t\t</view>\n\t</view>\n</template>\n<script>\n\timport classifyData from '@/common/classify.data.js';\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tscrollTop: 0, //tab标题的滚动条位置\n\t\t\t\toldScrollTop: 0,\n\t\t\t\tcurrent: 0, // 预设当前项的值\n\t\t\t\tmenuHeight: 0, // 左边菜单的高度\n\t\t\t\tmenuItemHeight: 0, // 左边菜单item的高度\n\t\t\t\titemId: '', // 栏目右边scroll-view用于滚动的id\n\t\t\t\ttabbar: classifyData,\n\t\t\t\tmenuItemPos: [],\n\t\t\t\tarr: [],\n\t\t\t\tscrollRightTop: 0, // 右边栏目scroll-view的滚动条高度\n\t\t\t\ttimer: null, // 定时器\n\t\t\t\t\n\t\t\t}\n\t\t},\n\t\tonLoad() {\n\t\t\t\n\t\t},\n\t\tonReady() {\n\t\t\tthis.getMenuItemTop()\n\t\t},\n\t\tmethods: {\n\t\t\t// 点击左边的栏目切换\n\t\t\tasync swichMenu(index) {\n\t\t\t\tif(this.arr.length == 0) {\n\t\t\t\t\tawait this.getMenuItemTop();\n\t\t\t\t}\n\t\t\t\tif (index == this.current) return;\n\t\t\t\tthis.scrollRightTop = this.oldScrollTop;\n\t\t\t\tthis.$nextTick(function(){\n\t\t\t\t\tthis.scrollRightTop = this.arr[index];\n\t\t\t\t\tthis.current = index;\n\t\t\t\t\tthis.leftMenuStatus(index);\n\t\t\t\t})\n\t\t\t},\n\t\t\t// 获取一个目标元素的高度\n\t\t\tgetElRect(elClass, dataVal) {\n\t\t\t\tnew Promise((resolve, reject) => {\n\t\t\t\t\tconst query = uni.createSelectorQuery().in(this);\n\t\t\t\t\tquery.select('.' + elClass).fields({\n\t\t\t\t\t\tsize: true\n\t\t\t\t\t}, res => {\n\t\t\t\t\t\t// 如果节点尚未生成，res值为null，循环调用执行\n\t\t\t\t\t\tif (!res) {\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tthis.getElRect(elClass);\n\t\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis[dataVal] = res.height;\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t}).exec();\n\t\t\t\t})\n\t\t\t},\n\t\t\t// 观测元素相交状态\n\t\t\tasync observer() {\n\t\t\t\tthis.tabbar.map((val, index) => {\n\t\t\t\t\tlet observer = uni.createIntersectionObserver(this);\n\t\t\t\t\t// 检测右边scroll-view的id为itemxx的元素与right-box的相交状态\n\t\t\t\t\t// 如果跟.right-box底部相交，就动态设置左边栏目的活动状态\n\t\t\t\t\tobserver.relativeTo('.right-box', {\n\t\t\t\t\t\ttop: 0\n\t\t\t\t\t}).observe('#item' + index, res => {\n\t\t\t\t\t\tif (res.intersectionRatio > 0) {\n\t\t\t\t\t\t\tlet id = res.id.substring(4);\n\t\t\t\t\t\t\tthis.leftMenuStatus(id);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t},\n\t\t\t// 设置左边菜单的滚动状态\n\t\t\tasync leftMenuStatus(index) {\n\t\t\t\tthis.current = index;\n\t\t\t\t// 如果为0，意味着尚未初始化\n\t\t\t\tif (this.menuHeight == 0 || this.menuItemHeight == 0) {\n\t\t\t\t\tawait this.getElRect('menu-scroll-view', 'menuHeight');\n\t\t\t\t\tawait this.getElRect('u-tab-item', 'menuItemHeight');\n\t\t\t\t}\n\t\t\t\t// 将菜单活动item垂直居中\n\t\t\t\tthis.scrollTop = index * this.menuItemHeight + this.menuItemHeight / 2 - this.menuHeight / 2;\n\t\t\t},\n\t\t\t// 获取右边菜单每个item到顶部的距离\n\t\t\tgetMenuItemTop() {\n\t\t\t\tnew Promise(resolve => {\n\t\t\t\t\tlet selectorQuery = uni.createSelectorQuery();\n\t\t\t\t\tselectorQuery.selectAll('.class-item').boundingClientRect((rects) => {\n\t\t\t\t\t\t// 如果节点尚未生成，rects值为[](因为用selectAll，所以返回的是数组)，循环调用执行\n\t\t\t\t\t\tif(!rects.length) {\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tthis.getMenuItemTop();\n\t\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\t\treturn ;\n\t\t\t\t\t\t}\n\t\t\t\t\t\trects.forEach((rect) => {\n\t\t\t\t\t\t\t// 这里减去rects[0].top，是因为第一项顶部可能不是贴到导航栏(比如有个搜索框的情况)\n\t\t\t\t\t\t\tthis.arr.push(rect.top - rects[0].top);\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t})\n\t\t\t\t\t}).exec()\n\t\t\t\t})\n\t\t\t},\n\t\t\t// 右边菜单滚动\n\t\t\tasync rightScroll(e) {\n\t\t\t\tthis.oldScrollTop = e.detail.scrollTop;\n\t\t\t\tif(this.arr.length == 0) {\n\t\t\t\t\tawait this.getMenuItemTop();\n\t\t\t\t}\n\t\t\t\tif(this.timer) return ;\n\t\t\t\tif(!this.menuHeight) {\n\t\t\t\t\tawait this.getElRect('menu-scroll-view', 'menuHeight');\n\t\t\t\t}\n\t\t\t\tsetTimeout(() => { // 节流\n\t\t\t\t\tthis.timer = null;\n\t\t\t\t\t// scrollHeight为右边菜单垂直中点位置\n\t\t\t\t\tlet scrollHeight = e.detail.scrollTop + this.menuHeight / 2;\n\t\t\t\t\tfor (let i = 0; i < this.arr.length; i++) {\n\t\t\t\t\t\tlet height1 = this.arr[i];\n\t\t\t\t\t\tlet height2 = this.arr[i + 1];\n\t\t\t\t\t\t// 如果不存在height2，意味着数据循环已经到了最后一个，设置左边菜单为最后一项即可\n\t\t\t\t\t\tif (!height2 || scrollHeight >= height1 && scrollHeight < height2) {\n\t\t\t\t\t\t\tthis.leftMenuStatus(i);\n\t\t\t\t\t\t\treturn ;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, 10)\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.u-wrap {\n\t\theight: calc(100vh);\n\t\t/* #ifdef H5 */\n\t\theight: calc(100vh - var(--window-top));\n\t\t/* #endif */\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t}\n\n\t.u-search-box {\n\t\tpadding: 18rpx 30rpx;\n\t}\n\n\t.u-menu-wrap {\n\t\tflex: 1;\n\t\tdisplay: flex;\n\t\toverflow: hidden;\n\t}\n\n\t.u-search-inner {\n\t\tbackground-color: rgb(234, 234, 234);\n\t\tborder-radius: 100rpx;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tpadding: 10rpx 16rpx;\n\t}\n\n\t.u-search-text {\n\t\tfont-size: 26rpx;\n\t\tcolor: $u-tips-color;\n\t\tmargin-left: 10rpx;\n\t}\n\n\t.u-tab-view {\n\t\twidth: 200rpx;\n\t\theight: 100%;\n\t}\n\n\t.u-tab-item {\n\t\theight: 110rpx;\n\t\tbackground: #f6f6f6;\n\t\tbox-sizing: border-box;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tfont-size: 26rpx;\n\t\tcolor: #444;\n\t\tfont-weight: 400;\n\t\tline-height: 1;\n\t}\n\n\t.u-tab-item-active {\n\t\tposition: relative;\n\t\tcolor: #000;\n\t\tfont-size: 30rpx;\n\t\tfont-weight: 600;\n\t\tbackground: #fff;\n\t}\n\n\t.u-tab-item-active::before {\n\t\tcontent: \"\";\n\t\tposition: absolute;\n\t\tborder-left: 4px solid $u-type-primary;\n\t\theight: 32rpx;\n\t\tleft: 0;\n\t\ttop: 39rpx;\n\t}\n\n\t.u-tab-view {\n\t\theight: 100%;\n\t}\n\n\t.right-box {\n\t\tbackground-color: rgb(250, 250, 250);\n\t}\n\n\t.page-view {\n\t\tpadding: 16rpx;\n\t}\n\n\t.class-item {\n\t\tmargin-bottom: 30rpx;\n\t\tbackground-color: #fff;\n\t\tpadding: 16rpx;\n\t\tborder-radius: 8rpx;\n\t}\n\n\t.class-item:last-child {\n\t\tmin-height: 100vh;\n\t}\n\n\t.item-title {\n\t\tfont-size: 26rpx;\n\t\tcolor: $u-main-color;\n\t\tfont-weight: bold;\n\t}\n\n\t.item-menu-name {\n\t\tfont-weight: normal;\n\t\tfont-size: 24rpx;\n\t\tcolor: $u-main-color;\n\t}\n\n\t.item-container {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t}\n\n\t.thumb-box {\n\t\twidth: 33.333333%;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tflex-direction: column;\n\t\tmargin-top: 20rpx;\n\t}\n\n\t.item-menu-image {\n\t\twidth: 120rpx;\n\t\theight: 120rpx;\n\t}\n</style>\n"
  },
  {
    "path": "pages/template/order/index.vue",
    "content": "<template>\n\t<view>\n\t\t<view class=\"wrap\">\n\t\t\t<view class=\"u-tabs-box\">\n\t\t\t\t<u-tabs-swiper activeColor=\"#f29100\" ref=\"tabs\" :list=\"list\" :current=\"current\" @change=\"change\" :is-scroll=\"false\" swiperWidth=\"750\"></u-tabs-swiper>\n\t\t\t</view>\n\t\t\t<swiper class=\"swiper-box\" :current=\"swiperCurrent\" @transition=\"transition\" @animationfinish=\"animationfinish\">\n\t\t\t\t<swiper-item class=\"swiper-item\">\n\t\t\t\t\t<scroll-view scroll-y style=\"height: 100%;width: 100%;\" @scrolltolower=\"reachBottom\">\n\t\t\t\t\t\t<view class=\"page-box\">\n\t\t\t\t\t\t\t<view class=\"order\" v-for=\"(res, index) in orderList[0]\" :key=\"res.id\">\n\t\t\t\t\t\t\t\t<view class=\"top\">\n\t\t\t\t\t\t\t\t\t<view class=\"left\">\n\t\t\t\t\t\t\t\t\t\t<u-icon name=\"home\" :size=\"30\" color=\"rgb(94,94,94)\"></u-icon>\n\t\t\t\t\t\t\t\t\t\t<view class=\"store\">{{ res.store }}</view>\n\t\t\t\t\t\t\t\t\t\t<u-icon name=\"arrow-right\" color=\"rgb(203,203,203)\" :size=\"26\"></u-icon>\n\t\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t\t<view class=\"right\">{{ res.deal }}</view>\n\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t<view class=\"item\" v-for=\"(item, index) in res.goodsList\" :key=\"index\">\n\t\t\t\t\t\t\t\t\t<view class=\"left\"><image :src=\"item.goodsUrl\" mode=\"aspectFill\"></image></view>\n\t\t\t\t\t\t\t\t\t<view class=\"content\">\n\t\t\t\t\t\t\t\t\t\t<view class=\"title u-line-2\">{{ item.title }}</view>\n\t\t\t\t\t\t\t\t\t\t<view class=\"type\">{{ item.type }}</view>\n\t\t\t\t\t\t\t\t\t\t<view class=\"delivery-time\">发货时间 {{ item.deliveryTime }}</view>\n\t\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t\t<view class=\"right\">\n\t\t\t\t\t\t\t\t\t\t<view class=\"price\">\n\t\t\t\t\t\t\t\t\t\t\t￥{{ priceInt(item.price) }}\n\t\t\t\t\t\t\t\t\t\t\t<text class=\"decimal\">.{{ priceDecimal(item.price) }}</text>\n\t\t\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t\t\t<view class=\"number\">x{{ item.number }}</view>\n\t\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t<view class=\"total\">\n\t\t\t\t\t\t\t\t\t共{{ totalNum(res.goodsList) }}件商品 合计:\n\t\t\t\t\t\t\t\t\t<text class=\"total-price\">\n\t\t\t\t\t\t\t\t\t\t￥{{ priceInt(totalPrice(res.goodsList)) }}.\n\t\t\t\t\t\t\t\t\t\t<text class=\"decimal\">{{ priceDecimal(totalPrice(res.goodsList)) }}</text>\n\t\t\t\t\t\t\t\t\t</text>\n\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t<view class=\"bottom\">\n\t\t\t\t\t\t\t\t\t<view class=\"more\"><u-icon name=\"more-dot-fill\" color=\"rgb(203,203,203)\"></u-icon></view>\n\t\t\t\t\t\t\t\t\t<view class=\"logistics btn\">查看物流</view>\n\t\t\t\t\t\t\t\t\t<view class=\"exchange btn\">卖了换钱</view>\n\t\t\t\t\t\t\t\t\t<view class=\"evaluate btn\">评价</view>\n\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t<u-loadmore :status=\"loadStatus[0]\" bgColor=\"#f2f2f2\"></u-loadmore>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</scroll-view>\n\t\t\t\t</swiper-item>\n\t\t\t\t<swiper-item class=\"swiper-item\">\n\t\t\t\t\t<scroll-view scroll-y style=\"height: 100%;width: 100%;\" @scrolltolower=\"reachBottom\">\n\t\t\t\t\t\t<view class=\"page-box\">\n\t\t\t\t\t\t\t<view class=\"order\" v-for=\"(res, index) in  orderList[1]\" :key=\"res.id\">\n\t\t\t\t\t\t\t\t<view class=\"top\">\n\t\t\t\t\t\t\t\t\t<view class=\"left\">\n\t\t\t\t\t\t\t\t\t\t<u-icon name=\"home\" :size=\"30\" color=\"rgb(94,94,94)\"></u-icon>\n\t\t\t\t\t\t\t\t\t\t<view class=\"store\">{{ res.store }}</view>\n\t\t\t\t\t\t\t\t\t\t<u-icon name=\"arrow-right\" color=\"rgb(203,203,203)\" :size=\"26\"></u-icon>\n\t\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t\t<view class=\"right\">{{ res.deal }}</view>\n\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t<view class=\"item\" v-for=\"(item, index) in res.goodsList\" :key=\"index\">\n\t\t\t\t\t\t\t\t\t<view class=\"left\"><image :src=\"item.goodsUrl\" mode=\"aspectFill\"></image></view>\n\t\t\t\t\t\t\t\t\t<view class=\"content\">\n\t\t\t\t\t\t\t\t\t\t<view class=\"title u-line-2\">{{ item.title }}</view>\n\t\t\t\t\t\t\t\t\t\t<view class=\"type\">{{ item.type }}</view>\n\t\t\t\t\t\t\t\t\t\t<view class=\"delivery-time\">发货时间 {{ item.deliveryTime }}</view>\n\t\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t\t<view class=\"right\">\n\t\t\t\t\t\t\t\t\t\t<view class=\"price\">\n\t\t\t\t\t\t\t\t\t\t\t￥{{ priceInt(item.price) }}\n\t\t\t\t\t\t\t\t\t\t\t<text class=\"decimal\">.{{ priceDecimal(item.price) }}</text>\n\t\t\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t\t\t<view class=\"number\">x{{ item.number }}</view>\n\t\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t<view class=\"total\">\n\t\t\t\t\t\t\t\t\t共{{ totalNum(res.goodsList) }}件商品 合计:\n\t\t\t\t\t\t\t\t\t<text class=\"total-price\">\n\t\t\t\t\t\t\t\t\t\t￥{{ priceInt(totalPrice(res.goodsList)) }}.\n\t\t\t\t\t\t\t\t\t\t<text class=\"decimal\">{{ priceDecimal(totalPrice(res.goodsList)) }}</text>\n\t\t\t\t\t\t\t\t\t</text>\n\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t<view class=\"bottom\">\n\t\t\t\t\t\t\t\t\t<view class=\"more\"><u-icon name=\"more-dot-fill\" color=\"rgb(203,203,203)\"></u-icon></view>\n\t\t\t\t\t\t\t\t\t<view class=\"logistics btn\">查看物流</view>\n\t\t\t\t\t\t\t\t\t<view class=\"exchange btn\">卖了换钱</view>\n\t\t\t\t\t\t\t\t\t<view class=\"evaluate btn\">评价</view>\n\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t<u-loadmore :status=\"loadStatus[1]\" bgColor=\"#f2f2f2\"></u-loadmore>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</scroll-view>\n\t\t\t\t</swiper-item>\n\t\t\t\t<swiper-item class=\"swiper-item\">\n\t\t\t\t\t<scroll-view scroll-y style=\"height: 100%;width: 100%;\">\n\t\t\t\t\t\t<view class=\"page-box\">\n\t\t\t\t\t\t\t<view>\n\t\t\t\t\t\t\t\t<view class=\"centre\">\n\t\t\t\t\t\t\t\t\t<image src=\"https://cdn.uviewui.com/uview/template/taobao-order.png\" mode=\"\"></image>\n\t\t\t\t\t\t\t\t\t<view class=\"explain\">\n\t\t\t\t\t\t\t\t\t\t您还没有相关的订单\n\t\t\t\t\t\t\t\t\t\t<view class=\"tips\">可以去看看有那些想买的</view>\n\t\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t\t<view class=\"btn\">随便逛逛</view>\n\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</scroll-view>\n\t\t\t\t</swiper-item>\n\t\t\t\t<swiper-item class=\"swiper-item\">\n\t\t\t\t\t<scroll-view scroll-y style=\"height: 100%;width: 100%;\" @scrolltolower=\"reachBottom\">\n\t\t\t\t\t\t<view class=\"page-box\">\n\t\t\t\t\t\t\t<view class=\"order\" v-for=\"(res, index) in  orderList[3]\" :key=\"res.id\">\n\t\t\t\t\t\t\t\t<view class=\"top\">\n\t\t\t\t\t\t\t\t\t<view class=\"left\">\n\t\t\t\t\t\t\t\t\t\t<u-icon name=\"home\" :size=\"30\" color=\"rgb(94,94,94)\"></u-icon>\n\t\t\t\t\t\t\t\t\t\t<view class=\"store\">{{ res.store }}</view>\n\t\t\t\t\t\t\t\t\t\t<u-icon name=\"arrow-right\" color=\"rgb(203,203,203)\" :size=\"26\"></u-icon>\n\t\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t\t<view class=\"right\">{{ res.deal }}</view>\n\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t<view class=\"item\" v-for=\"(item, index) in res.goodsList\" :key=\"index\">\n\t\t\t\t\t\t\t\t\t<view class=\"left\"><image :src=\"item.goodsUrl\" mode=\"aspectFill\"></image></view>\n\t\t\t\t\t\t\t\t\t<view class=\"content\">\n\t\t\t\t\t\t\t\t\t\t<view class=\"title u-line-2\">{{ item.title }}</view>\n\t\t\t\t\t\t\t\t\t\t<view class=\"type\">{{ item.type }}</view>\n\t\t\t\t\t\t\t\t\t\t<view class=\"delivery-time\">发货时间 {{ item.deliveryTime }}</view>\n\t\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t\t<view class=\"right\">\n\t\t\t\t\t\t\t\t\t\t<view class=\"price\">\n\t\t\t\t\t\t\t\t\t\t\t￥{{ priceInt(item.price) }}\n\t\t\t\t\t\t\t\t\t\t\t<text class=\"decimal\">.{{ priceDecimal(item.price) }}</text>\n\t\t\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t\t\t<view class=\"number\">x{{ item.number }}</view>\n\t\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t<view class=\"total\">\n\t\t\t\t\t\t\t\t\t共{{ totalNum(res.goodsList) }}件商品 合计:\n\t\t\t\t\t\t\t\t\t<text class=\"total-price\">\n\t\t\t\t\t\t\t\t\t\t￥{{ priceInt(totalPrice(res.goodsList)) }}.\n\t\t\t\t\t\t\t\t\t\t<text class=\"decimal\">{{ priceDecimal(totalPrice(res.goodsList)) }}</text>\n\t\t\t\t\t\t\t\t\t</text>\n\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t\t<view class=\"bottom\">\n\t\t\t\t\t\t\t\t\t<view class=\"more\"><u-icon name=\"more-dot-fill\" color=\"rgb(203,203,203)\"></u-icon></view>\n\t\t\t\t\t\t\t\t\t<view class=\"logistics btn\">查看物流</view>\n\t\t\t\t\t\t\t\t\t<view class=\"exchange btn\">卖了换钱</view>\n\t\t\t\t\t\t\t\t\t<view class=\"evaluate btn\">评价</view>\n\t\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t\t<u-loadmore :status=\"loadStatus[3]\" bgColor=\"#f2f2f2\"></u-loadmore>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</scroll-view>\n\t\t\t\t</swiper-item>\n\t\t\t</swiper>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\torderList: [[], [], [], []],\n\t\t\tdataList: [\n\t\t\t\t{\n\t\t\t\t\tid: 1,\n\t\t\t\t\tstore: '夏日流星限定贩卖',\n\t\t\t\t\tdeal: '交易成功',\n\t\t\t\t\tgoodsList: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgoodsUrl: '//img13.360buyimg.com/n7/jfs/t1/103005/7/17719/314825/5e8c19faEb7eed50d/5b81ae4b2f7f3bb7.jpg',\n\t\t\t\t\t\t\ttitle: '【冬日限定】现货 原创jk制服女2020冬装新款小清新宽松软糯毛衣外套女开衫短款百搭日系甜美风',\n\t\t\t\t\t\t\ttype: '灰色;M',\n\t\t\t\t\t\t\tdeliveryTime: '付款后30天内发货',\n\t\t\t\t\t\t\tprice: '348.58',\n\t\t\t\t\t\t\tnumber: 2\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgoodsUrl: '//img12.360buyimg.com/n7/jfs/t1/102191/19/9072/330688/5e0af7cfE17698872/c91c00d713bf729a.jpg',\n\t\t\t\t\t\t\ttitle: '【葡萄藤】现货 小清新学院风制服格裙百褶裙女短款百搭日系甜美风原创jk制服女2020新款',\n\t\t\t\t\t\t\ttype: '45cm;S',\n\t\t\t\t\t\t\tdeliveryTime: '付款后30天内发货',\n\t\t\t\t\t\t\tprice: '135.00',\n\t\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 2,\n\t\t\t\t\tstore: '江南皮革厂',\n\t\t\t\t\tdeal: '交易失败',\n\t\t\t\t\tgoodsList: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgoodsUrl: '//img14.360buyimg.com/n7/jfs/t1/60319/15/6105/406802/5d43f68aE9f00db8c/0affb7ac46c345e2.jpg',\n\t\t\t\t\t\t\ttitle: '【冬日限定】现货 原创jk制服女2020冬装新款小清新宽松软糯毛衣外套女开衫短款百搭日系甜美风',\n\t\t\t\t\t\t\ttype: '粉色;M',\n\t\t\t\t\t\t\tdeliveryTime: '付款后7天内发货',\n\t\t\t\t\t\t\tprice: '128.05',\n\t\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 3,\n\t\t\t\t\tstore: '三星旗舰店',\n\t\t\t\t\tdeal: '交易失败',\n\t\t\t\t\tgoodsList: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgoodsUrl: '//img11.360buyimg.com/n7/jfs/t1/94448/29/2734/524808/5dd4cc16E990dfb6b/59c256f85a8c3757.jpg',\n\t\t\t\t\t\t\ttitle: '三星（SAMSUNG）京品家电 UA65RUF70AJXXZ 65英寸4K超高清 HDR 京东微联 智能语音 教育资源液晶电视机',\n\t\t\t\t\t\t\ttype: '4K，广色域',\n\t\t\t\t\t\t\tdeliveryTime: '保质5年',\n\t\t\t\t\t\t\tprice: '1998',\n\t\t\t\t\t\t\tnumber: 3\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgoodsUrl: '//img14.360buyimg.com/n7/jfs/t6007/205/4099529191/294869/ae4e6d4f/595dcf19Ndce3227d.jpg!q90.jpg',\n\t\t\t\t\t\t\ttitle: '美的(Midea)639升 对开门冰箱 19分钟急速净味 一级能效冷藏双开门杀菌智能家用双变频节能 BCD-639WKPZM(E)',\n\t\t\t\t\t\t\ttype: '容量大，速冻',\n\t\t\t\t\t\t\tdeliveryTime: '保质5年',\n\t\t\t\t\t\t\tprice: '2354',\n\t\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 4,\n\t\t\t\t\tstore: '三星旗舰店',\n\t\t\t\t\tdeal: '交易失败',\n\t\t\t\t\tgoodsList: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgoodsUrl: '//img10.360buyimg.com/n7/jfs/t22300/31/1505958241/171936/9e201a89/5b2b12ffNe6dbb594.jpg!q90.jpg',\n\t\t\t\t\t\t\ttitle: '法国进口红酒 拉菲（LAFITE）传奇波尔多干红葡萄酒750ml*6整箱装',\n\t\t\t\t\t\t\ttype: '4K，广色域',\n\t\t\t\t\t\t\tdeliveryTime: '珍藏10年好酒',\n\t\t\t\t\t\t\tprice: '1543',\n\t\t\t\t\t\t\tnumber: 3\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgoodsUrl: '//img10.360buyimg.com/n7/jfs/t1/107598/17/3766/525060/5e143aacE9a94d43c/03573ae60b8bf0ee.jpg',\n\t\t\t\t\t\t\ttitle: '蓝妹（BLUE GIRL）酷爽啤酒 清啤 原装进口啤酒 罐装 500ml*9听 整箱装',\n\t\t\t\t\t\t\ttype: '一打',\n\t\t\t\t\t\t\tdeliveryTime: '口感好',\n\t\t\t\t\t\t\tprice: '120',\n\t\t\t\t\t\t\tnumber: 1\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 5,\n\t\t\t\t\tstore: '三星旗舰店',\n\t\t\t\t\tdeal: '交易成功',\n\t\t\t\t\tgoodsList: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgoodsUrl: '//img12.360buyimg.com/n7/jfs/t1/52408/35/3554/78293/5d12e9cfEfd118ba1/ba5995e62cbd747f.jpg!q90.jpg',\n\t\t\t\t\t\t\ttitle: '企业微信 中控人脸指纹识别考勤机刷脸机 无线签到异地多店打卡机WX108',\n\t\t\t\t\t\t\ttype: '识别效率高',\n\t\t\t\t\t\t\tdeliveryTime: '使用方便',\n\t\t\t\t\t\t\tprice: '451',\n\t\t\t\t\t\t\tnumber: 9\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\tlist: [\n\t\t\t\t{\n\t\t\t\t\tname: '待付款'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: '待发货'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: '待收货'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: '待评价',\n\t\t\t\t\tcount: 12\n\t\t\t\t}\n\t\t\t],\n\t\t\tcurrent: 0,\n\t\t\tswiperCurrent: 0,\n\t\t\ttabsHeight: 0,\n\t\t\tdx: 0,\n\t\t\tloadStatus: ['loadmore','loadmore','loadmore','loadmore'],\n\t\t};\n\t},\n\tonLoad() {\n\t\tthis.getOrderList(0);\n\t\tthis.getOrderList(1);\n\t\tthis.getOrderList(3);\n\t},\n\tcomputed: {\n\t\t// 价格小数\n\t\tpriceDecimal() {\n\t\t\treturn val => {\n\t\t\t\tif (val !== parseInt(val)) return val.slice(-2);\n\t\t\t\telse return '00';\n\t\t\t};\n\t\t},\n\t\t// 价格整数\n\t\tpriceInt() {\n\t\t\treturn val => {\n\t\t\t\tif (val !== parseInt(val)) return val.split('.')[0];\n\t\t\t\telse return val;\n\t\t\t};\n\t\t}\n\t},\n\tmethods: {\n\t\treachBottom() {\n\t\t\t// 此tab为空数据\n\t\t\tif(this.current != 2) {\n\t\t\t\tthis.loadStatus.splice(this.current,1,\"loading\")\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.getOrderList(this.current);\n\t\t\t\t}, 1200);\n\t\t\t}\n\t\t},\n\t\t// 页面数据\n\t\tgetOrderList(idx) {\n\t\t\tfor(let i = 0; i < 5; i++) {\n\t\t\t\tlet index = this.$u.random(0, this.dataList.length - 1);\n\t\t\t\tlet data = JSON.parse(JSON.stringify(this.dataList[index]));\n\t\t\t\tdata.id = this.$u.guid();\n\t\t\t\tthis.orderList[idx].push(data);\n\t\t\t}\n\t\t\tthis.loadStatus.splice(this.current,1,\"loadmore\")\n\t\t},\n\t\t// 总价\n\t\ttotalPrice(item) {\n\t\t\tlet price = 0;\n\t\t\titem.map(val => {\n\t\t\t\tprice += parseFloat(val.price);\n\t\t\t});\n\t\t\treturn price.toFixed(2);\n\t\t},\n\t\t// 总件数\n\t\ttotalNum(item) {\n\t\t\tlet num = 0;\n\t\t\titem.map(val => {\n\t\t\t\tnum += val.number;\n\t\t\t});\n\t\t\treturn num;\n\t\t},\n\t\t// tab栏切换\n\t\tchange(index) {\n\t\t\tthis.swiperCurrent = index;\n\t\t\tthis.getOrderList(index);\n\t\t},\n\t\ttransition({ detail: { dx } }) {\n\t\t\tthis.$refs.tabs.setDx(dx);\n\t\t},\n\t\tanimationfinish({ detail: { current } }) {\n\t\t\tthis.$refs.tabs.setFinishCurrent(current);\n\t\t\tthis.swiperCurrent = current;\n\t\t\tthis.current = current;\n\t\t}\n\t}\n};\n</script>\n\n<style>\n/* #ifndef H5 */\npage {\n\theight: 100%;\n\tbackground-color: #f2f2f2;\n}\n/* #endif */\n</style>\n\n<style lang=\"scss\" scoped>\n.order {\n\twidth: 710rpx;\n\tbackground-color: #ffffff;\n\tmargin: 20rpx auto;\n\tborder-radius: 20rpx;\n\tbox-sizing: border-box;\n\tpadding: 20rpx;\n\tfont-size: 28rpx;\n\t.top {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\t.left {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\t.store {\n\t\t\t\tmargin: 0 10rpx;\n\t\t\t\tfont-size: 32rpx;\n\t\t\t\tfont-weight: bold;\n\t\t\t}\n\t\t}\n\t\t.right {\n\t\t\tcolor: $u-type-warning-dark;\n\t\t}\n\t}\n\t.item {\n\t\tdisplay: flex;\n\t\tmargin: 20rpx 0 0;\n\t\t.left {\n\t\t\tmargin-right: 20rpx;\n\t\t\timage {\n\t\t\t\twidth: 200rpx;\n\t\t\t\theight: 200rpx;\n\t\t\t\tborder-radius: 10rpx;\n\t\t\t}\n\t\t}\n\t\t.content {\n\t\t\t.title {\n\t\t\t\tfont-size: 28rpx;\n\t\t\t\tline-height: 50rpx;\n\t\t\t}\n\t\t\t.type {\n\t\t\t\tmargin: 10rpx 0;\n\t\t\t\tfont-size: 24rpx;\n\t\t\t\tcolor: $u-tips-color;\n\t\t\t}\n\t\t\t.delivery-time {\n\t\t\t\tcolor: #e5d001;\n\t\t\t\tfont-size: 24rpx;\n\t\t\t}\n\t\t}\n\t\t.right {\n\t\t\tmargin-left: 10rpx;\n\t\t\tpadding-top: 20rpx;\n\t\t\ttext-align: right;\n\t\t\t.decimal {\n\t\t\t\tfont-size: 24rpx;\n\t\t\t\tmargin-top: 4rpx;\n\t\t\t}\n\t\t\t.number {\n\t\t\t\tcolor: $u-tips-color;\n\t\t\t\tfont-size: 24rpx;\n\t\t\t}\n\t\t}\n\t}\n\t.total {\n\t\tmargin-top: 20rpx;\n\t\ttext-align: right;\n\t\tfont-size: 24rpx;\n\t\t.total-price {\n\t\t\tfont-size: 32rpx;\n\t\t}\n\t}\n\t.bottom {\n\t\tdisplay: flex;\n\t\tmargin-top: 40rpx;\n\t\tpadding: 0 10rpx;\n\t\tjustify-content: space-between;\n\t\talign-items: center;\n\t\t.btn {\n\t\t\tline-height: 52rpx;\n\t\t\twidth: 160rpx;\n\t\t\tborder-radius: 26rpx;\n\t\t\tborder: 2rpx solid $u-border-color;\n\t\t\tfont-size: 26rpx;\n\t\t\ttext-align: center;\n\t\t\tcolor: $u-type-info-dark;\n\t\t}\n\t\t.evaluate {\n\t\t\tcolor: $u-type-warning-dark;\n\t\t\tborder-color: $u-type-warning-dark;\n\t\t}\n\t}\n}\n.centre {\n\ttext-align: center;\n\tmargin: 200rpx auto;\n\tfont-size: 32rpx;\n\timage {\n\t\twidth: 164rpx;\n\t\theight: 164rpx;\n\t\tborder-radius: 50%;\n\t\tmargin-bottom: 20rpx;\n\t}\n\t.tips {\n\t\tfont-size: 24rpx;\n\t\tcolor: #999999;\n\t\tmargin-top: 20rpx;\n\t}\n\t.btn {\n\t\tmargin: 80rpx auto;\n\t\twidth: 200rpx;\n\t\tborder-radius: 32rpx;\n\t\tline-height: 64rpx;\n\t\tcolor: #ffffff;\n\t\tfont-size: 26rpx;\n\t\tbackground: linear-gradient(270deg, rgba(249, 116, 90, 1) 0%, rgba(255, 158, 1, 1) 100%);\n\t}\n}\n.wrap {\n\tdisplay: flex;\n\tflex-direction: column;\n\theight: calc(100vh - var(--window-top));\n\twidth: 100%;\n}\n.swiper-box {\n\tflex: 1;\n}\n.swiper-item {\n\theight: 100%;\n}\n</style>\n"
  },
  {
    "path": "pages/template/submitBar/index.vue",
    "content": "<template>\n\t<view class=\"navigation\">\n\t\t<view class=\"left\">\n\t\t\t<view class=\"item\">\n\t\t\t\t<u-icon name=\"server-fill\" :size=\"40\" :color=\"$u.color['contentColor']\"></u-icon>\n\t\t\t\t<view class=\"text u-line-1\">客服</view>\n\t\t\t</view>\n\t\t\t<view class=\"item\">\n\t\t\t\t<u-icon name=\"home\" :size=\"40\" :color=\"$u.color['contentColor']\"></u-icon>\n\t\t\t\t<view class=\"text u-line-1\">店铺</view>\n\t\t\t</view>\n\t\t\t<view class=\"item car\">\n\t\t\t\t<u-badge class=\"car-num\" :count=\"9\" type=\"error\" :offset=\"[-3, -6]\"></u-badge>\n\t\t\t\t<u-icon name=\"shopping-cart\" :size=\"40\" :color=\"$u.color['contentColor']\"></u-icon>\n\t\t\t\t<view class=\"text u-line-1\">购物车</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"right\">\n\t\t\t<view class=\"cart btn u-line-1\">加入购物车</view>\n\t\t\t<view class=\"buy btn u-line-1\">立即购买</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\t\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.navigation {\n\tdisplay: flex;\n\tmargin-top: 100rpx;\n\tborder: solid 2rpx #f2f2f2;\n\tbackground-color: #ffffff;\n\tpadding: 16rpx 0;\n\t.left {\n\t\tdisplay: flex;\n\t\tfont-size: 20rpx;\n\t\t.item {\n\t\t\tmargin: 0 30rpx;\n\t\t\t&.car {\n\t\t\t\ttext-align: center;\n\t\t\t\tposition: relative;\n\t\t\t\t.car-num {\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\ttop: -10rpx;\n\t\t\t\t\tright: -10rpx;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t.right {\n\t\tdisplay: flex;\n\t\tfont-size: 28rpx;\n\t\talign-items: center;\n\t\t.btn {\n\t\t\tline-height: 66rpx;\n\t\t\tpadding: 0 30rpx;\n\t\t\tborder-radius: 36rpx;\n\t\t\tcolor: #ffffff;\n\t\t}\n\t\t.cart {\n\t\t\tbackground-color: #ed3f14;\n\t\t\tmargin-right: 30rpx;\n\t\t}\n\t\t.buy {\n\t\t\tbackground-color: #ff7900;\n\t\t}\n\t}\n}\n</style>\n"
  },
  {
    "path": "pages/template/wxCenter/index.vue",
    "content": "<template>\n\t<view>\n\t\t<u-navbar :is-back=\"false\" title=\"　\" :border-bottom=\"false\">\n\t\t\t<view class=\"u-flex u-row-right\" style=\"width: 100%;\">\n\t\t\t\t<view class=\"camera u-flex u-row-center\">\n\t\t\t\t\t<u-icon name=\"camera-fill\" color=\"#000000\" size=\"48\"></u-icon>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</u-navbar>\n\t\t<view class=\"u-flex user-box u-p-l-30 u-p-r-20 u-p-b-30\">\n\t\t\t<view class=\"u-m-r-10\">\n\t\t\t\t<u-avatar :src=\"pic\" size=\"140\"></u-avatar>\n\t\t\t</view>\n\t\t\t<view class=\"u-flex-1\">\n\t\t\t\t<view class=\"u-font-18 u-p-b-20\">uView ui</view>\n\t\t\t\t<view class=\"u-font-14 u-tips-color\">微信号:helang_uView</view>\n\t\t\t</view>\n\t\t\t<view class=\"u-m-l-10 u-p-10\">\n\t\t\t\t<u-icon name=\"scan\" color=\"#969799\" size=\"28\"></u-icon>\n\t\t\t</view>\n\t\t\t<view class=\"u-m-l-10 u-p-10\">\n\t\t\t\t<u-icon name=\"arrow-right\" color=\"#969799\" size=\"28\"></u-icon>\n\t\t\t</view>\n\t\t</view>\n\t\t\n\t\t<view class=\"u-m-t-20\">\n\t\t\t<u-cell-group>\n\t\t\t\t<u-cell-item icon=\"rmb-circle\" title=\"支付\"></u-cell-item>\n\t\t\t</u-cell-group>\n\t\t</view>\n\t\t\n\t\t<view class=\"u-m-t-20\">\n\t\t\t<u-cell-group>\n\t\t\t\t<u-cell-item icon=\"star\" title=\"收藏\"></u-cell-item>\n\t\t\t\t<u-cell-item icon=\"photo\" title=\"相册\"></u-cell-item>\n\t\t\t\t<u-cell-item icon=\"coupon\" title=\"卡券\"></u-cell-item>\n\t\t\t\t<u-cell-item icon=\"heart\" title=\"关注\"></u-cell-item>\n\t\t\t</u-cell-group>\n\t\t</view>\n\t\t\n\t\t<view class=\"u-m-t-20\">\n\t\t\t<u-cell-group>\n\t\t\t\t<u-cell-item icon=\"setting\" title=\"设置\"></u-cell-item>\n\t\t\t</u-cell-group>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tpic:'https://uviewui.com/common/logo.png',\n\t\t\t\tshow:true\n\t\t\t}\n\t\t},\n\t\tonLoad() {\n\t\t\t\n\t\t},\n\t\tmethods: {\n\t\t\t\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\">\npage{\n\tbackground-color: #ededed;\n}\n\n.camera{\n\twidth: 54px;\n\theight: 44px;\n\t\n\t&:active{\n\t\tbackground-color: #ededed;\n\t}\n}\n.user-box{\n\tbackground-color: #fff;\n}\n</style>\n"
  },
  {
    "path": "pages.json",
    "content": "{\n\t\"easycom\": {\n\t\t\"^u-(.*)\": \"@/uview-ui/components/u-$1/u-$1.vue\"\n\t},\n\t// \"condition\": { //模式配置，仅开发期间生效\n\t// \t\"current\": 0, //当前激活的模式(list 的索引项)\n\t// \t\"list\": [{\n\t// \t\t\"name\": \"test\", //模式名称\n\t// \t\t\"path\": \"pages/componentsC/test/index\", //启动页面，必选\n\t// \t\t\"query\": \"uuid=c4bba940-f69e-11ea-a419-6bafda9d095e&__id__=1\" //启动参数，在页面的onLoad函数里面得到\n\t// \t}]\n\t// },\n\t\"pages\": [\n\t\t// 演示-组件\n\t\t{\n\t\t\t\"path\": \"pages/example/components\",\n\t\t\t\"style\": {\n\t\t\t\t\"navigationBarTitleText\": \"组件\"\n\t\t\t}\n\t\t},\n\t\t// avatarCropper-头像裁剪\n\t\t{\n\t\t\t\"path\": \"uview-ui/components/u-avatar-cropper/u-avatar-cropper\",\n\t\t\t\"style\": {\n\t\t\t\t\"navigationBarTitleText\": \"头像裁剪\",\n\t\t\t\t\"navigationBarBackgroundColor\": \"#000000\"\n\t\t\t}\n\t\t},\n\t\t// 演示-工具\n\t\t{\n\t\t\t\"path\": \"pages/example/js\",\n\t\t\t\"style\": {\n\t\t\t\t\"navigationBarTitleText\": \"工具\"\n\t\t\t}\n\t\t},\n\t\t// 演示-模板\n\t\t{\n\t\t\t\"path\": \"pages/example/template\",\n\t\t\t\"style\": {\n\t\t\t\t\"navigationBarTitleText\": \"模板\"\n\t\t\t}\n\t\t},\n\t\t// fullScreen-压窗屏\n\t\t{\n\t\t\t\"path\": \"uview-ui/components/u-full-screen/u-full-screen\",\n\t\t\t\"style\": {\n\t\t\t\t\"navigationStyle\": \"custom\",\n\t\t\t\t\"app-plus\": {\n\t\t\t\t\t\"animationType\": \"fade-in\",\n\t\t\t\t\t\"background\": \"transparent\",\n\t\t\t\t\t\"backgroundColor\": \"rgba(0,0,0,0)\",\n\t\t\t\t\t\"popGesture\": \"none\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t],\n\t\"subPackages\": [{\n\t\t\t\"root\": \"pages/componentsC\",\n\t\t\t\"pages\": [\n\t\t\t\t// test-测试\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"test/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"Test\"\n\t\t\t\t\t\t// \"navigationStyle\": \"custom\" ,// 隐藏系统导航栏\n\t\t\t\t\t\t// \"navigationBarTextStyle\": \"white\" // 状态栏字体为白色\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// gap-间隔槽\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"gap/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"gap-间隔槽\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// subsection分段器\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"subsection/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"subsection-分段器\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// section 查看更多\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"section/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"section-查看更多\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// link链接\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"link/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"link-链接\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// mask遮罩层\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"mask/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"mask-遮罩层\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// countTo数字滚动\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"countTo/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"countTo-数字滚动\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// color颜色\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"color/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"color-颜色\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// countDown倒计时\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"countDown/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"countDown-倒计时\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// progress进度条\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"progress/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"progress-进度条\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// alertTips警告提示\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"alertTips/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"alertTips-警告提示\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// badge 徽标数\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"badge/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"badge-徽标数\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// button按钮\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"button/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"button-按钮\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// collapse折叠面板\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"collapse/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"collapse-折叠面板\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// actionSheet操作菜单\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"actionSheet/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"actionSheet-操作菜单\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// messageInput验证码输入\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"messageInput/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"messageInput-验证码输入\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// popup弹窗\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"popup/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"popup-弹窗\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// listCell\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"cell/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"listCell-列表\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// numberBox数字输入框\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"numberBox/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"numberBox-步进器\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// grid宫格布局\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"grid/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"grid-宫格布局\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// layout栅格布局\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"layout/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"layout-栅格布局\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// 加载更多\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"loadmore/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"loadmore-加载更多\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"root\": \"pages/template\",\n\t\t\t\"pages\": [\n\t\t\t\t// wxCenter 仿微信个人中心\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"wxCenter/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"wxCenter 仿微信个人中心\",\n\t\t\t\t\t\t\"navigationStyle\": \"custom\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// keyboardPay 自定义键盘支付\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"keyboardPay/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"keyboardPay 自定义键盘支付\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// douyin 仿抖音\n\t\t\t\t// {\n\t\t\t\t// \t\"path\": \"douyin/index\",\n\t\t\t\t// \t\"style\": {\n\t\t\t\t// \t\t\"navigationBarTitleText\": \"douyin 仿抖音\"\n\t\t\t\t// \t}\n\t\t\t\t// },\n\t\t\t\t// mallMenu商城分类\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"mallMenu/index2\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"mallMenu-商城分类\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// mallMenu商城分类\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"mallMenu/index1\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"mallMenu-商城分类\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// coupon优惠券\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"coupon/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"coupon-优惠券\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"login/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"美团登录\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// 城市选择\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"citySelect/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"城市选择\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// SubmitBar提交订单栏\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"submitBar/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"提交订单栏\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// comment评论\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"comment/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"评论\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// comment评论详情\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"comment/reply\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"评论详情\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// order订单\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"order/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"订单\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// login登录获取验证码\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"login/code\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"登录获取验证码\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// address用户地址\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"address/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"用户地址\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// address添加用户地址\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"address/addSite\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"添加用户地址\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"root\": \"pages/library\",\n\t\t\t\"pages\": [\n\t\t\t\t// debounce-节流防抖\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"debounce/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"throttle | debounce-节流防抖\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// deepClone-对象深度克隆\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"deepClone/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"deepClone-对象深度克隆\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// deepMerge-对象深度合并\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"deepMerge/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"deepMerge-对象深度合并\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// getRect-元素节点\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"getRect/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"getRect-元素节点\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// timeFrom-多久之前\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"timeFrom/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"timeFrom-多久之前\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// globalData-全局变量\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"globalVariable/globalData\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"globalData-全局变量\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// prototype-全局变量\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"globalVariable/prototype\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"prototype-全局变量\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// vuex-全局变量\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"globalVariable/vuex\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"vuex-全局变量\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// globalVariable-全局变量\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"globalVariable/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"globalVariable-全局变量\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// http-请求\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"http/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"http-请求\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// test-规则验证\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"test/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"test-规则验证\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// mpShare-小程序分享\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"mpShare/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"mpShare-小程序分享\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// color-JS调用颜色\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"color/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"color-JS调用颜色\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// trim-去除空格\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"trim/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"trim-去除空格\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// random-随机数生成\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"random/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"random-随机数生成\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// md5加密\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"md5/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"md5-加密\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// colorSwitch颜色转换\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"colorSwitch/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"colorSwitch-颜色转换\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// randomArray数组乱序\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"randomArray/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"randomArray-数组乱序\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// guid全局唯一标识符\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"guid/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"guid-全局唯一标识符\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// timeFormat时间格式化\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"timeFormat/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"timeFormat-时间格式化\"\n\t\t\t\t\t}\n\t\t\t\t}, // route-路由\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"route/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"route-路由\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// route-路由跳转\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"route/routeTo\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"route-路由跳转\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// queryParams-对象转URL参数\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"queryParams/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"queryParams-对象转URL参数\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"root\": \"pages/componentsA\",\n\t\t\t\"pages\": [\n\t\t\t\t// parse-富文本解析器\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"parse/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"parse-富文本解析器\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// backTop-返回顶部\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"backTop/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"backTop-返回顶部\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// calendar-日历\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"calendar/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"calendar-日历\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// form-表单\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"form/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"form-表单\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// select-列选择器\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"select/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"select-列选择器\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// slider-滑动选择器\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"slider/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"slider-滑动选择器\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// fullScreen-压窗屏\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"fullScreen/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"fullScreen-压窗屏\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// navbar-自定义导航栏\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"navbar/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t// \"navigationBarTitleText\": \"navbar-自定义导航栏\",\n\t\t\t\t\t\t\"navigationStyle\": \"custom\", // 隐藏系统导航栏\n\t\t\t\t\t\t\"navigationBarTextStyle\": \"white\" // 状态栏字体为白色\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// field-输入框\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"field/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"field-输入框\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// modal-模态框\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"modal/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"modal-模态框\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// indexList索引列表\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"indexList/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"indexList-索引列表\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// empty内容为空\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"empty/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"empty-内容为空\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// avatarCropper-头像裁剪\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"avatarCropper/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"avatarCropper-头像裁剪\"\n\t\t\t\t\t}\n\t\t\t\t}, // noNetwork没有网络\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"noNetwork/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"noNetwork-没有网络\"\n\t\t\t\t\t}\n\t\t\t\t}, // icon字体图标\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"icon/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"icon-字体图标\"\n\t\t\t\t\t}\n\t\t\t\t}, // avatar-用户头像展示\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"avatar/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"avatar-用户头像展示\"\n\t\t\t\t\t}\n\t\t\t\t}, // keyboard键盘\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"keyboard/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"keyboard-键盘\"\n\t\t\t\t\t}\n\t\t\t\t}, // 图片懒加载\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"lazyLoad/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"lazyLoad-懒加载\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// tabs切换\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"tabs/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"Tabs-切换\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// tag标签\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"tag/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"tag-标签\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// timeLine时间轴\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"timeLine/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"timeLine-时间轴\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// toast轻提示\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"toast/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"toast-轻提示\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// topTips消息提示\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"topTips/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"topTips-消息提示\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// Code-验证码倒计时\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"verificationCode/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"Code-验证码倒计时\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"root\": \"pages/componentsB\",\n\t\t\t\"pages\": [\n\t\t\t\t// dropdown-下拉菜单\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"dropdown/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"dropdown-下拉菜单\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// tabbar-底部导航栏\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"tabbar/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"tabbar-底部导航栏\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// line-线条\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"line/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"line-线条\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// image-图片\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"image/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"image-图片\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// card-卡片\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"card/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"card-卡片\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// divider-分割线\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"divider/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"divider-分割线\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// picker选择器\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"picker/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"picker-选择器\"\n\t\t\t\t\t}\n\t\t\t\t}, // noticeBar通告栏\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"noticeBar/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"noticeBar-通告栏\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// checkbox-复选框\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"checkbox/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"checkbox-复选框\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// radio-单选框\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"radio/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"radio-单选框\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// loading-加载动画\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"loading/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"loading-加载动画\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// switch-开关选择器\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"switch/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"switch-开关选择器\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// 骨架屏\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"skeleton/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"skeleton-骨架屏\"\n\t\t\t\t\t}\n\t\t\t\t}, // upload上传\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"upload/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"upload-上传\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// waterfall瀑布流\n\t\t\t\t// #ifndef MP-TOUTIAO \n\t\t\t\t{\n\t\t\t\t\t\"path\": \"waterfall/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"waterfall-瀑布流\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// #endif\n\t\t\t\t// table表格\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"table/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"table-表格\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// rate评分\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"rate/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"rate-评分\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// readMore显示更多\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"readMore/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"readMore-查看更多\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// search搜索框\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"search/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"search-搜索框\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// steps步骤条\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"steps/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"steps-步骤条\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// sticky吸顶\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"sticky/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"sticky-吸顶\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// swiper轮播图\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"swiper/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"swiper-轮播图\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// swipeAction-左滑删除\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"swipeAction/index\",\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"navigationBarTitleText\": \"swipeAction-左滑删除\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t],\n\t\"preloadRule\": {\n\t\t\"pages/example/components\": {\n\t\t\t\"network\": \"all\",\n\t\t\t\"packages\": [\"pages/componentsA\", \"pages/componentsB\", \"pages/componentsC\"]\n\t\t}\n\t},\n\t\"globalStyle\": {\n\t\t\"navigationBarTextStyle\": \"black\",\n\t\t\"navigationBarTitleText\": \"uView\",\n\t\t\"navigationBarBackgroundColor\": \"#FFFFFF\",\n\t\t\"backgroundColor\": \"#FFFFFF\"\n\t},\n\t\"tabBar\": {\n\t\t\"color\": \"#909399\",\n\t\t\"selectedColor\": \"#303133\",\n\t\t\"backgroundColor\": \"#FFFFFF\",\n\t\t\"borderStyle\": \"black\",\n\t\t\"list\": [{\n\t\t\t\t\"pagePath\": \"pages/example/components\",\n\t\t\t\t\"iconPath\": \"static/uview/example/component.png\",\n\t\t\t\t\"selectedIconPath\": \"static/uview/example/component_select.png\",\n\t\t\t\t\"text\": \"组件\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"pagePath\": \"pages/example/js\",\n\t\t\t\t\"iconPath\": \"static/uview/example/js.png\",\n\t\t\t\t\"selectedIconPath\": \"static/uview/example/js_select.png\",\n\t\t\t\t\"text\": \"工具\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"pagePath\": \"pages/example/template\",\n\t\t\t\t\"iconPath\": \"static/uview/example/template.png\",\n\t\t\t\t\"selectedIconPath\": \"static/uview/example/template_select.png\",\n\t\t\t\t\"text\": \"模板\"\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "static/common/js/touch-emulator.js",
    "content": "(function(window, document, exportName, undefined) {\n    \"use strict\";\n\n    var isMultiTouch = false;\n    var multiTouchStartPos;\n    var eventTarget;\n    var touchElements = {};\n\n    // polyfills\n    if(!document.createTouch) {\n        document.createTouch = function(view, target, identifier, pageX, pageY, screenX, screenY, clientX, clientY) {\n            // auto set\n            if(clientX == undefined || clientY == undefined) {\n                clientX = pageX - window.pageXOffset;\n                clientY = pageY - window.pageYOffset;\n            }\n\n            return new Touch(target, identifier, {\n                pageX: pageX,\n                pageY: pageY,\n                screenX: screenX,\n                screenY: screenY,\n                clientX: clientX,\n                clientY: clientY\n            });\n        };\n    }\n\n    if(!document.createTouchList) {\n        document.createTouchList = function() {\n            var touchList = new TouchList();\n            for (var i = 0; i < arguments.length; i++) {\n                touchList[i] = arguments[i];\n            }\n            touchList.length = arguments.length;\n            return touchList;\n        };\n    }\n\n    /**\n     * create an touch point\n     * @constructor\n     * @param target\n     * @param identifier\n     * @param pos\n     * @param deltaX\n     * @param deltaY\n     * @returns {Object} touchPoint\n     */\n    function Touch(target, identifier, pos, deltaX, deltaY) {\n        deltaX = deltaX || 0;\n        deltaY = deltaY || 0;\n\n        this.identifier = identifier;\n        this.target = target;\n        this.clientX = pos.clientX + deltaX;\n        this.clientY = pos.clientY + deltaY;\n        this.screenX = pos.screenX + deltaX;\n        this.screenY = pos.screenY + deltaY;\n        this.pageX = pos.pageX + deltaX;\n        this.pageY = pos.pageY + deltaY;\n    }\n\n    /**\n     * create empty touchlist with the methods\n     * @constructor\n     * @returns touchList\n     */\n    function TouchList() {\n        var touchList = [];\n\n        touchList.item = function(index) {\n            return this[index] || null;\n        };\n\n        // specified by Mozilla\n        touchList.identifiedTouch = function(id) {\n            return this[id + 1] || null;\n        };\n\n        return touchList;\n    }\n\n\n    /**\n     * Simple trick to fake touch event support\n     * this is enough for most libraries like Modernizr and Hammer\n     */\n    function fakeTouchSupport() {\n        var objs = [window, document.documentElement];\n        var props = ['ontouchstart', 'ontouchmove', 'ontouchcancel', 'ontouchend'];\n\n        for(var o=0; o<objs.length; o++) {\n            for(var p=0; p<props.length; p++) {\n                if(objs[o] && objs[o][props[p]] == undefined) {\n                    objs[o][props[p]] = null;\n                }\n            }\n        }\n    }\n\n    /**\n     * we don't have to emulate on a touch device\n     * @returns {boolean}\n     */\n    function hasTouchSupport() {\n        return (\"ontouchstart\" in window) || // touch events\n               (window.Modernizr && window.Modernizr.touch) || // modernizr\n               (navigator.msMaxTouchPoints || navigator.maxTouchPoints) > 2; // pointer events\n    }\n\n    /**\n     * disable mouseevents on the page\n     * @param ev\n     */\n    function preventMouseEvents(ev) {\n\t\t// 注释启用默认事件\n        // ev.preventDefault();\n        // ev.stopPropagation();\n    }\n\n    /**\n     * only trigger touches when the left mousebutton has been pressed\n     * @param touchType\n     * @returns {Function}\n     */\n    function onMouse(touchType) {\n        return function(ev) {\n            // prevent mouse events\n            preventMouseEvents(ev);\n\n            if (ev.which !== 1) {\n                return;\n            }\n\n            // The EventTarget on which the touch point started when it was first placed on the surface,\n            // even if the touch point has since moved outside the interactive area of that element.\n            // also, when the target doesnt exist anymore, we update it\n            if (ev.type == 'mousedown' || !eventTarget || (eventTarget && !eventTarget.dispatchEvent)) {\n                eventTarget = ev.target;\n            }\n\n            // shiftKey has been lost, so trigger a touchend\n            if (isMultiTouch && !ev.shiftKey) {\n                triggerTouch('touchend', ev);\n                isMultiTouch = false;\n            }\n\n            triggerTouch(touchType, ev);\n\n            // we're entering the multi-touch mode!\n            if (!isMultiTouch && ev.shiftKey) {\n                isMultiTouch = true;\n                multiTouchStartPos = {\n                    pageX: ev.pageX,\n                    pageY: ev.pageY,\n                    clientX: ev.clientX,\n                    clientY: ev.clientY,\n                    screenX: ev.screenX,\n                    screenY: ev.screenY\n                };\n                triggerTouch('touchstart', ev);\n            }\n\n            // reset\n            if (ev.type == 'mouseup') {\n                multiTouchStartPos = null;\n                isMultiTouch = false;\n                eventTarget = null;\n            }\n        }\n    }\n\n    /**\n     * trigger a touch event\n     * @param eventName\n     * @param mouseEv\n     */\n    function triggerTouch(eventName, mouseEv) {\n        var touchEvent = document.createEvent('Event');\n        touchEvent.initEvent(eventName, true, true);\n\n        touchEvent.altKey = mouseEv.altKey;\n        touchEvent.ctrlKey = mouseEv.ctrlKey;\n        touchEvent.metaKey = mouseEv.metaKey;\n        touchEvent.shiftKey = mouseEv.shiftKey;\n\n        touchEvent.touches = getActiveTouches(mouseEv, eventName);\n        touchEvent.targetTouches = getActiveTouches(mouseEv, eventName);\n        touchEvent.changedTouches = getChangedTouches(mouseEv, eventName);\n\n        eventTarget.dispatchEvent(touchEvent);\n    }\n\n    /**\n     * create a touchList based on the mouse event\n     * @param mouseEv\n     * @returns {TouchList}\n     */\n    function createTouchList(mouseEv) {\n        var touchList = new TouchList();\n\n        if (isMultiTouch) {\n            var f = TouchEmulator.multiTouchOffset;\n            var deltaX = multiTouchStartPos.pageX - mouseEv.pageX;\n            var deltaY = multiTouchStartPos.pageY - mouseEv.pageY;\n\n            touchList.push(new Touch(eventTarget, 1, multiTouchStartPos, (deltaX*-1) - f, (deltaY*-1) + f));\n            touchList.push(new Touch(eventTarget, 2, multiTouchStartPos, deltaX+f, deltaY-f));\n        } else {\n            touchList.push(new Touch(eventTarget, 1, mouseEv, 0, 0));\n        }\n\n        return touchList;\n    }\n\n    /**\n     * receive all active touches\n     * @param mouseEv\n     * @returns {TouchList}\n     */\n    function getActiveTouches(mouseEv, eventName) {\n        // empty list\n        if (mouseEv.type == 'mouseup') {\n            return new TouchList();\n        }\n\n        var touchList = createTouchList(mouseEv);\n        if(isMultiTouch && mouseEv.type != 'mouseup' && eventName == 'touchend') {\n            touchList.splice(1, 1);\n        }\n        return touchList;\n    }\n\n    /**\n     * receive a filtered set of touches with only the changed pointers\n     * @param mouseEv\n     * @param eventName\n     * @returns {TouchList}\n     */\n    function getChangedTouches(mouseEv, eventName) {\n        var touchList = createTouchList(mouseEv);\n\n        // we only want to return the added/removed item on multitouch\n        // which is the second pointer, so remove the first pointer from the touchList\n        //\n        // but when the mouseEv.type is mouseup, we want to send all touches because then\n        // no new input will be possible\n        if(isMultiTouch && mouseEv.type != 'mouseup' &&\n            (eventName == 'touchstart' || eventName == 'touchend')) {\n            touchList.splice(0, 1);\n        }\n\n        return touchList;\n    }\n\n    /**\n     * show the touchpoints on the screen\n     */\n    function showTouches(ev) {\n        var touch, i, el, styles;\n\n        // first all visible touches\n        for(i = 0; i < ev.touches.length; i++) {\n            touch = ev.touches[i];\n            el = touchElements[touch.identifier];\n            if(!el) {\n                el = touchElements[touch.identifier] = document.createElement(\"div\");\n                document.body.appendChild(el);\n            }\n\n            styles = TouchEmulator.template(touch);\n            for(var prop in styles) {\n                el.style[prop] = styles[prop];\n            }\n        }\n\n        // remove all ended touches\n        if(ev.type == 'touchend' || ev.type == 'touchcancel') {\n            for(i = 0; i < ev.changedTouches.length; i++) {\n                touch = ev.changedTouches[i];\n                el = touchElements[touch.identifier];\n                if(el) {\n                    el.parentNode.removeChild(el);\n                    delete touchElements[touch.identifier];\n                }\n            }\n        }\n    }\n\n    /**\n     * TouchEmulator initializer\n     */\n    function TouchEmulator() {\n        if (hasTouchSupport()) {\n            return;\n        }\n\n        fakeTouchSupport();\n\n        window.addEventListener(\"mousedown\", onMouse('touchstart'), true);\n        window.addEventListener(\"mousemove\", onMouse('touchmove'), true);\n        window.addEventListener(\"mouseup\", onMouse('touchend'), true);\n\n        window.addEventListener(\"mouseenter\", preventMouseEvents, true);\n        window.addEventListener(\"mouseleave\", preventMouseEvents, true);\n        window.addEventListener(\"mouseout\", preventMouseEvents, true);\n        window.addEventListener(\"mouseover\", preventMouseEvents, true);\n\n        // it uses itself!\n        window.addEventListener(\"touchstart\", showTouches, true);\n        window.addEventListener(\"touchmove\", showTouches, true);\n        window.addEventListener(\"touchend\", showTouches, true);\n        window.addEventListener(\"touchcancel\", showTouches, true);\n    }\n\n    // start distance when entering the multitouch mode\n    TouchEmulator.multiTouchOffset = 75;\n\n    /**\n     * css template for the touch rendering\n     * @param touch\n     * @returns object\n     */\n    TouchEmulator.template = function(touch) {\n        var size = 0;\n        var transform = 'translate('+ (touch.clientX-(size/2)) +'px, '+ (touch.clientY-(size/2)) +'px)';\n        return {\n            position: 'fixed',\n            left: 0,\n            top: 0,\n            background: '#fff',\n            border: 'solid 1px #999',\n            opacity: .6,\n            borderRadius: '100%',\n            height: size + 'px',\n            width: size + 'px',\n            padding: 0,\n            margin: 0,\n            display: 'block',\n            overflow: 'hidden',\n            pointerEvents: 'none',\n            webkitUserSelect: 'none',\n            mozUserSelect: 'none',\n            userSelect: 'none',\n            webkitTransform: transform,\n            mozTransform: transform,\n            transform: transform,\n            zIndex: 100\n        }\n    };\n\n    // export\n    if (typeof define == \"function\" && define.amd) {\n        define(function() {\n            return TouchEmulator;\n        });\n    } else if (typeof module != \"undefined\" && module.exports) {\n        module.exports = TouchEmulator;\n    } else {\n        window[exportName] = TouchEmulator;\n    }\n})(window, document, \"TouchEmulator\");"
  },
  {
    "path": "store/$u.mixin.js",
    "content": "import { mapState } from 'vuex'\nimport store from \"@/store\"\n\n// 尝试将用户在根目录中的store/index.js的vuex的state变量，全部加载到全局变量中\nlet $uStoreKey = [];\ntry{\n\t$uStoreKey = store.state ? Object.keys(store.state) : [];\n}catch(e){\n\t\n}\n\nmodule.exports = {\n\tbeforeCreate() {\n\t\t// 将vuex方法挂在到$u中\n\t\t// 使用方法为：如果要修改vuex的state中的user.name变量为\"史诗\" => this.$u.vuex('user.name', '史诗')\n\t\t// 如果要修改vuex的state的version变量为1.0.1 => this.$u.vuex('version', '1.0.1')\n\t\tthis.$u.vuex = (name, value) => {\n\t\t\tthis.$store.commit('$uStore', {\n\t\t\t\tname,value\n\t\t\t})\n\t\t}\n\t},\n\tcomputed: {\n\t\t// 将vuex的state中的所有变量，解构到全局混入的mixin中\n\t\t...mapState($uStoreKey)\n\t}\n}"
  },
  {
    "path": "store/index.js",
    "content": "import Vue from 'vue'\nimport Vuex from 'vuex'\nVue.use(Vuex)\n\nlet lifeData = {};\n\ntry{\n\t// 尝试获取本地是否存在lifeData变量，第一次启动APP时是不存在的\n\tlifeData = uni.getStorageSync('lifeData');\n}catch(e){\n\t\n}\n\n// 需要永久存储，且下次APP启动需要取出的，在state中的变量名\nlet saveStateKeys = ['vuex_user', 'vuex_token'];\n\n// 保存变量到本地存储中\nconst saveLifeData = function(key, value){\n\t// 判断变量名是否在需要存储的数组中\n\tif(saveStateKeys.indexOf(key) != -1) {\n\t\t// 获取本地存储的lifeData对象，将变量添加到对象中\n\t\tlet tmp = uni.getStorageSync('lifeData');\n\t\t// 第一次打开APP，不存在lifeData变量，故放一个{}空对象\n\t\ttmp = tmp ? tmp : {};\n\t\ttmp[key] = value;\n\t\t// 执行这一步后，所有需要存储的变量，都挂载在本地的lifeData对象中\n\t\tuni.setStorageSync('lifeData', tmp);\n\t}\n}\nconst store = new Vuex.Store({\n\tstate: {\n\t\t// 如果上面从本地获取的lifeData对象下有对应的属性，就赋值给state中对应的变量\n\t\t// 加上vuex_前缀，是防止变量名冲突，也让人一目了然\n\t\tvuex_user: lifeData.vuex_user ? lifeData.vuex_user : {name: '明月'},\n\t\tvuex_token: lifeData.vuex_token ? lifeData.vuex_token : '',\n\t\t// 如果vuex_version无需保存到本地永久存储，无需lifeData.vuex_version方式\n\t\tvuex_version: '1.0.1',\n\t\tvuex_demo: '绛紫',\n\t\t// 自定义tabbar数据\n\t\tvuex_tabbar: [{\n\t\t\t\ticonPath: \"/static/uview/example/component.png\",\n\t\t\t\tselectedIconPath: \"/static/uview/example/component_select.png\",\n\t\t\t\ttext: '组件',\n\t\t\t\tpagePath: '/pages/example/components'\n\t\t\t},\n\t\t\t{\n\t\t\t\ticonPath: \"/static/uview/example/js.png\",\n\t\t\t\tselectedIconPath: \"/static/uview/example/js_select.png\",\n\t\t\t\ttext: '工具',\n\t\t\t\tmidButton: true,\n\t\t\t\tpagePath: '/pages/example/js'\n\t\t\t},\n\t\t\t{\n\t\t\t\ticonPath: \"/static/uview/example/template.png\",\n\t\t\t\tselectedIconPath: \"/static/uview/example/template_select.png\",\n\t\t\t\ttext: '模板',\n\t\t\t\tpagePath: '/pages/example/template'\n\t\t\t}\n\t\t]\n\t},\n\tmutations: {\n\t\t$uStore(state, payload) {\n\t\t\t// 判断是否多层级调用，state中为对象存在的情况，诸如user.info.score = 1\n\t\t\tlet nameArr = payload.name.split('.');\n\t\t\tlet saveKey = '';\n\t\t\tlet len = nameArr.length;\n\t\t\tif(len >= 2) {\n\t\t\t\tlet obj = state[nameArr[0]];\n\t\t\t\tfor(let i = 1; i < len - 1; i ++) {\n\t\t\t\t\tobj = obj[nameArr[i]];\n\t\t\t\t}\n\t\t\t\tobj[nameArr[len - 1]] = payload.value;\n\t\t\t\tsaveKey = nameArr[0];\n\t\t\t} else {\n\t\t\t\t// 单层级变量，在state就是一个普通变量的情况\n\t\t\t\tstate[payload.name] = payload.value;\n\t\t\t\tsaveKey = payload.name;\n\t\t\t}\n\t\t\t// 保存变量到本地，见顶部函数定义\n\t\t\tsaveLifeData(saveKey, state[saveKey])\n\t\t}\n\t}\n})\n\nexport default store\n"
  },
  {
    "path": "template.h5.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n\t\t<link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"https://cdn.uviewui.com/uview/common/favicon.webp\">\n\t\t<meta name=\"viewport\" content=\"width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0\">\n\t\t<title>\n\t\t\t<%= htmlWebpackPlugin.options.title %>\n\t\t</title>\n\t\t<!-- 正式发布的时候使用，开发期间不启用。↓ -->\n        <script src=\"/static/common/js/touch-emulator.js\"></script>\n\t\t<script>\n            TouchEmulator();\n\t\t</script>\n        <style>\n            ::-webkit-scrollbar{\n                display: none;\n            }\n        </style>\n        <!-- 正式发布的时候使用，开发期间不启用。↑ -->\n\t\t<script>\n\t\t\tdocument.addEventListener('DOMContentLoaded', function() {\n\t\t\t\tdocument.documentElement.style.fontSize = document.documentElement.clientWidth / 20 + 'px'\n\t\t\t})\n\t\t</script>\n\t\t<link rel=\"stylesheet\" href=\"<%= BASE_URL %>static/index.css\" />\n\t</head>\n\t<body>\n\t\t<!-- 该文件为 H5 平台的模板 HTML，并非应用入口。 -->\n\t\t<!-- 请勿在此文件编写页面代码或直接运行此文件。 -->\n\t\t<!-- 详见文档：https://uniapp.dcloud.io/collocation/manifest?id=h5-template -->\n\t\t<noscript>\n\t\t\t<strong>本站点必须要开启JavaScript才能运行</strong>\n\t\t</noscript>\n\t\t<div id=\"app\"></div>\n\t\t<!-- built files will be auto injected -->\n\t\t<script>\n\t\t\t/*BAIDU_STAT*/\n\t\t</script>\n\t</body>\n</html>\n"
  },
  {
    "path": "uni.scss",
    "content": "/**\n * 下方引入的为uView UI的集成样式文件，为scss预处理器，其中包含了一些\"u-\"开头的自定义变量\n * 使用的时候，请将下面的一行复制到您的uniapp项目根目录的uni.scss中即可\n * uView自定义的css类名和scss变量，均以\"u-\"开头，不会造成冲突，请放心使用 \n */\n@import 'uview-ui/theme.scss';\n\n"
  },
  {
    "path": "uview-ui/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2023 www.uviewui.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "uview-ui/README.md",
    "content": "<p align=\"center\">\n    <img alt=\"logo\" src=\"https://uviewui.com/common/logo.png\" width=\"120\" height=\"120\" style=\"margin-bottom: 10px;\">\n</p>\n<h3 align=\"center\" style=\"margin: 30px 0 30px;font-weight: bold;font-size:40px;\">uView</h3>\n<h3 align=\"center\">多平台快速开发的UI框架</h3>\n\n\n## 说明\n\nuView UI，是[uni-app](https://uniapp.dcloud.io/)生态优秀的UI框架，全面的组件和便捷的工具会让您信手拈来，如鱼得水\n\n## 特性\n\n- 兼容安卓，iOS，微信小程序，H5，QQ小程序，百度小程序，支付宝小程序，头条小程序\n- 60+精选组件，功能丰富，多端兼容，让您快速集成，开箱即用\n- 众多贴心的JS利器，让您飞镖在手，召之即来，百步穿杨\n- 众多的常用页面和布局，让您专注逻辑，事半功倍\n- 详尽的文档支持，现代化的演示效果\n- 按需引入，精简打包体积\n\n\n## 安装\n\n```bash\n# npm方式安装\nnpm i uview-ui\n```\n\n## 快速上手\n\n1. `main.js`引入uView库\n```js\n// main.js\nimport uView from 'uview-ui';\nVue.use(uView);\n```\n\n2. `App.vue`引入基础样式(注意style标签需声明scss属性支持)\n```css\n/* App.vue */\n<style lang=\"scss\">\n@import \"uview-ui/index.scss\";\n</style>\n```\n\n3. `uni.scss`引入全局scss变量文件\n```css\n/* uni.scss */\n@import \"uview-ui/theme.scss\";\n```\n\n4. `pages.json`配置easycom规则(按需引入)\n\n```js\n// pages.json\n{\n\t\"easycom\": {\n\t\t// npm安装的方式不需要前面的\"@/\"，下载安装的方式需要\"@/\"\n\t\t// npm安装方式\n\t\t\"^u-(.*)\": \"uview-ui/components/u-$1/u-$1.vue\"\n\t\t// 下载安装方式\n\t\t// \"^u-(.*)\": \"@/uview-ui/components/u-$1/u-$1.vue\"\n\t},\n\t// 此为本身已有的内容\n\t\"pages\": [\n\t\t// ......\n\t]\n}\n```\n\n请通过[快速上手](https://uviewui.com/components/quickstart.html)了解更详细的内容 \n\n## 使用方法\n配置easycom规则后，自动按需引入，无需`import`组件，直接引用即可。\n\n```html\n<template>\n\t<u-button>按钮</u-button>\n</template>\n```\n\n请通过[快速上手](https://uviewui.com/components/quickstart.html)了解更详细的内容 \n\n## 链接\n\n- [官方文档](https://uviewui.com/)\n- [更新日志](https://uviewui.com/components/changelog.html)\n- [升级指南](https://uviewui.com/components/changelog.html)\n- [关于我们](https://uviewui.com/cooperation/about.html)\n\n## 预览\n\n您可以通过**微信**扫码，查看最佳的演示效果。\n<br>\n<br>\n<img src=\"https://uviewui.com/common/weixin_mini_qrcode.png\" width=\"220\" height=\"220\" >\n\n<!-- ## 捐赠uView的研发\n\nuView文档和源码全部开源免费，如果您认为uView帮到了您的开发工作，您可以捐赠uView的研发工作，捐赠无门槛，哪怕是一杯可乐也好(相信这比打赏主播更有意义)。\n\n<img src=\"https://uviewui.com/common/wechat.png\" width=\"220\" >\n<img style=\"margin-left: 100px;\" src=\"https://uviewui.com/common/alipay.png\" width=\"220\" >\n -->\n## 版权信息\nuView遵循[MIT](https://en.wikipedia.org/wiki/MIT_License)开源协议，意味着您无需支付任何费用，也无需授权，即可将uView应用到您的产品中。\n"
  },
  {
    "path": "uview-ui/components/u-action-sheet/u-action-sheet.vue",
    "content": "<template>\n\t<u-popup mode=\"bottom\" :border-radius=\"borderRadius\" :popup=\"false\" v-model=\"value\" :maskCloseAble=\"maskCloseAble\"\n\t    length=\"auto\" :safeAreaInsetBottom=\"safeAreaInsetBottom\" @close=\"popupClose\" :z-index=\"uZIndex\">\n\t\t<view class=\"u-tips u-border-bottom\" v-if=\"tips.text\" :style=\"[tipsStyle]\">\n\t\t\t{{tips.text}}\n\t\t</view>\n\t\t<block v-for=\"(item, index) in list\" :key=\"index\">\n\t\t\t<view \n\t\t\t\t@touchmove.stop.prevent \n\t\t\t\t@tap=\"itemClick(index)\" \n\t\t\t\t:style=\"[itemStyle(index)]\" \n\t\t\t\tclass=\"u-action-sheet-item u-line-1\" \n\t\t\t\t:class=\"[index < list.length - 1 ? 'u-border-bottom' : '']\"\n\t\t\t\t:hover-stay-time=\"150\"\n\t\t\t>\n\t\t\t\t<text>{{item.text}}</text>\n\t\t\t\t<text class=\"u-action-sheet-item__subtext u-line-1\" v-if=\"item.subText\">{{item.subText}}</text>\n\t\t\t</view>\n\t\t</block>\n\t\t<view class=\"u-gab\" v-if=\"cancelBtn\">\n\t\t</view>\n\t\t<view @touchmove.stop.prevent class=\"u-actionsheet-cancel u-action-sheet-item\" hover-class=\"u-hover-class\"\n\t\t    :hover-stay-time=\"150\" v-if=\"cancelBtn\" @tap=\"close\">{{cancelText}}</view>\n\t</u-popup>\n</template>\n\n<script>\n\t/**\n\t * actionSheet 操作菜单\n\t * @description 本组件用于从底部弹出一个操作菜单，供用户选择并返回结果。本组件功能类似于uni的uni.showActionSheetAPI，配置更加灵活，所有平台都表现一致。\n\t * @tutorial https://www.uviewui.com/components/actionSheet.html\n\t * @property {Array<Object>} list 按钮的文字数组，见官方文档示例\n\t * @property {Object} tips 顶部的提示文字，见官方文档示例\n\t * @property {String} cancel-text 取消按钮的提示文字\n\t * @property {Boolean} cancel-btn 是否显示底部的取消按钮（默认true）\n\t * @property {Number String} border-radius 弹出部分顶部左右的圆角值，单位rpx（默认0）\n\t * @property {Boolean} mask-close-able 点击遮罩是否可以关闭（默认true）\n\t * @property {Boolean} safe-area-inset-bottom 是否开启底部安全区适配（默认false）\n\t * @property {Number String} z-index z-index值（默认1075）\n\t * @property {String} cancel-text 取消按钮的提示文字\n\t * @event {Function} click 点击ActionSheet列表项时触发\n\t * @event {Function} close 点击取消按钮时触发\n\t * @example <u-action-sheet :list=\"list\" @click=\"click\" v-model=\"show\"></u-action-sheet>\n\t */\n\texport default {\n\t\tname: \"u-action-sheet\",\n\t\tprops: {\n\t\t\t// 点击遮罩是否可以关闭actionsheet\n\t\t\tmaskCloseAble: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 按钮的文字数组，可以自定义颜色和字体大小，字体单位为rpx\n\t\t\tlist: {\n\t\t\t\ttype: Array,\n\t\t\t\tdefault () {\n\t\t\t\t\t// 如下\n\t\t\t\t\t// return [{\n\t\t\t\t\t// \ttext: '确定',\n\t\t\t\t\t// \tcolor: '',\n\t\t\t\t\t// \tfontSize: ''\n\t\t\t\t\t// }]\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 顶部的提示文字\n\t\t\ttips: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\tcolor: '',\n\t\t\t\t\t\tfontSize: '26'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 底部的取消按钮\n\t\t\tcancelBtn: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 是否开启底部安全区适配，开启的话，会在iPhoneX机型底部添加一定的内边距\n\t\t\tsafeAreaInsetBottom: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 通过双向绑定控制组件的弹出与收起\n\t\t\tvalue: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 弹出的顶部圆角值\n\t\t\tborderRadius: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 0\n\t\t\t},\n\t\t\t// 弹出的z-index值\n\t\t\tzIndex: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 0\n\t\t\t},\n\t\t\t// 取消按钮的文字提示\n\t\t\tcancelText: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '取消'\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\t// 顶部提示的样式\n\t\t\ttipsStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\tif (this.tips.color) style.color = this.tips.color;\n\t\t\t\tif (this.tips.fontSize) style.fontSize = this.tips.fontSize + 'rpx';\n\t\t\t\treturn style;\n\t\t\t},\n\t\t\t// 操作项目的样式\n\t\t\titemStyle() {\n\t\t\t\treturn (index) => {\n\t\t\t\t\tlet style = {};\n\t\t\t\t\tif (this.list[index].color) style.color = this.list[index].color;\n\t\t\t\t\tif (this.list[index].fontSize) style.fontSize = this.list[index].fontSize + 'rpx';\n\t\t\t\t\t// 选项被禁用的样式\n\t\t\t\t\tif (this.list[index].disabled) style.color = '#c0c4cc';\n\t\t\t\t\treturn style;\n\t\t\t\t}\n\t\t\t},\n\t\t\tuZIndex() {\n\t\t\t\t// 如果用户有传递z-index值，优先使用\n\t\t\t\treturn this.zIndex ? this.zIndex : this.$u.zIndex.popup;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\t// 点击取消按钮\n\t\t\tclose() {\n\t\t\t\t// 发送input事件，并不会作用于父组件，而是要设置组件内部通过props传递的value参数\n\t\t\t\t// 这是一个vue发送事件的特殊用法\n\t\t\t\tthis.popupClose();\n\t\t\t\tthis.$emit('close');\n\t\t\t},\n\t\t\t// 弹窗关闭\n\t\t\tpopupClose() {\n\t\t\t\tthis.$emit('input', false);\n\t\t\t},\n\t\t\t// 点击某一个item\n\t\t\titemClick(index) {\n\t\t\t\t// disabled的项禁止点击\n\t\t\t\tif(this.list[index].disabled) return;\n\t\t\t\tthis.$emit('click', index);\n\t\t\t\tthis.$emit('input', false);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\n\t.u-tips {\n\t\tfont-size: 26rpx;\n\t\ttext-align: center;\n\t\tpadding: 34rpx 0;\n\t\tline-height: 1;\n\t\tcolor: $u-tips-color;\n\t}\n\n\t.u-action-sheet-item {\n\t\t@include vue-flex;;\n\t\tline-height: 1;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\tfont-size: 32rpx;\n\t\tpadding: 34rpx 0;\n\t\tflex-direction: column;\n\t}\n\t\n\t.u-action-sheet-item__subtext {\n\t\tfont-size: 24rpx;\n\t\tcolor: $u-tips-color;\n\t\tmargin-top: 20rpx;\n\t}\n\n\t.u-gab {\n\t\theight: 12rpx;\n\t\tbackground-color: rgb(234, 234, 236);\n\t}\n\n\t.u-actionsheet-cancel {\n\t\tcolor: $u-main-color;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-alert-tips/u-alert-tips.vue",
    "content": "<template>\n\t<view class=\"u-alert-tips\" v-if=\"show\" :class=\"[\n\t\t!show ? 'u-close-alert-tips': '',\n\t\ttype ? 'u-alert-tips--bg--' + type + '-light' : '',\n\t\ttype ? 'u-alert-tips--border--' + type + '-disabled' : '',\n\t]\" :style=\"{\n\t\tbackgroundColor: bgColor,\n\t\tborderColor: borderColor\n\t}\">\n\t\t<view class=\"u-icon-wrap\">\n\t\t\t<u-icon v-if=\"showIcon\" :name=\"uIcon\" :size=\"description ? 40 : 32\" class=\"u-icon\" :color=\"uIconType\" :custom-style=\"iconStyle\"></u-icon>\n\t\t</view>\n\t\t<view class=\"u-alert-content\" @tap.stop=\"click\">\n\t\t\t<view class=\"u-alert-title\" :style=\"[uTitleStyle]\">\n\t\t\t\t{{title}}\n\t\t\t</view>\n\t\t\t<view v-if=\"description\" class=\"u-alert-desc\" :style=\"[descStyle]\">\n\t\t\t\t{{description}}\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-icon-wrap\">\n\t\t\t<u-icon @click=\"close\" v-if=\"closeAble && !closeText\" hoverClass=\"u-type-error-hover-color\" name=\"close\" color=\"#c0c4cc\"\n\t\t\t :size=\"22\" class=\"u-close-icon\" :style=\"{\n\t\t\t\ttop: description ? '18rpx' : '24rpx'\n\t\t\t}\"></u-icon>\n\t\t</view>\n\t\t<text v-if=\"closeAble && closeText\" class=\"u-close-text\" :style=\"{\n\t\t\ttop: description ? '18rpx' : '24rpx'\n\t\t}\">{{closeText}}</text>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * alertTips 警告提示\n\t * @description 警告提示，展现需要关注的信息\n\t * @tutorial https://uviewui.com/components/alertTips.html\n\t * @property {String} title 显示的标题文字\n\t * @property {String} description 辅助性文字，颜色比title浅一点，字号也小一点，可选\n\t * @property {String} type 关闭按钮(默认为叉号icon图标)\n\t * @property {String} icon 图标名称\n\t * @property {Object} icon-style 图标的样式，对象形式\n\t * @property {Object} title-style 标题的样式，对象形式\n\t * @property {Object} desc-style 描述的样式，对象形式\n\t * @property {String} close-able 用文字替代关闭图标，close-able为true时有效\n\t * @property {Boolean} show-icon 是否显示左边的辅助图标\n\t * @property {Boolean} show 显示或隐藏组件\n\t * @event {Function} click 点击组件时触发\n\t * @event {Function} close 点击关闭按钮时触发\n\t */\n\texport default {\n\t\tname: 'u-alert-tips',\n\t\tprops: {\n\t\t\t// 显示文字\n\t\t\ttitle: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 主题，success/warning/info/error\n\t\t\ttype: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'warning'\n\t\t\t},\n\t\t\t// 辅助性文字\n\t\t\tdescription: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 是否可关闭\n\t\t\tcloseAble: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 关闭按钮自定义文本\n\t\t\tcloseText: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 是否显示图标\n\t\t\tshowIcon: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 文字颜色，如果定义了color值，icon会失效\n\t\t\tcolor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 背景颜色\n\t\t\tbgColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 边框颜色\n\t\t\tborderColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 是否显示\n\t\t\tshow: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 左边显示的icon\n\t\t\ticon: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// icon的样式\n\t\t\ticonStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault() {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 标题的样式\n\t\t\ttitleStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault() {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 描述文字的样式\n\t\t\tdescStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault() {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tuTitleStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\t// 如果有描述文字的话，标题进行加粗\n\t\t\t\tstyle.fontWeight = this.description ? 500 : 'normal';\n\t\t\t\t// 将用户传入样式对象和style合并，传入的优先级比style高，同属性会被覆盖\n\t\t\t\treturn this.$u.deepMerge(style, this.titleStyle);\n\t\t\t},\n\t\t\tuIcon() {\n\t\t\t\t// 如果有设置icon名称就使用，否则根据type主题，推定一个默认的图标\n\t\t\t\treturn this.icon ? this.icon : this.$u.type2icon(this.type);\n\t\t\t},\n\t\t\tuIconType() {\n\t\t\t\t// 如果有设置图标的样式，优先使用，没有的话，则用type的样式\n\t\t\t\treturn Object.keys(this.iconStyle).length ? '' : this.type;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\t// 点击内容\n\t\t\tclick() {\n\t\t\t\tthis.$emit('click');\n\t\t\t},\n\t\t\t// 点击关闭按钮\n\t\t\tclose() {\n\t\t\t\tthis.$emit('close');\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-alert-tips {\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tpadding: 16rpx 30rpx;\n\t\tborder-radius: 8rpx;\n\t\tposition: relative;\n\t\ttransition: all 0.3s linear;\n\t\tborder: 1px solid #fff;\n\t\t\n\t\t&--bg--primary-light {\n\t\t\tbackground-color: $u-type-primary-light;\n\t\t}\n\t\t\n\t\t&--bg--info-light {\n\t\t\tbackground-color: $u-type-info-light;\n\t\t}\n\t\t\n\t\t&--bg--success-light {\n\t\t\tbackground-color: $u-type-success-light;\n\t\t}\n\t\t\n\t\t&--bg--warning-light {\n\t\t\tbackground-color: $u-type-warning-light;\n\t\t}\n\t\t\n\t\t&--bg--error-light {\n\t\t\tbackground-color: $u-type-error-light;\n\t\t}\n\t\t\n\t\t&--border--primary-disabled {\n\t\t\tborder-color: $u-type-primary-disabled;\n\t\t}\n\t\t\n\t\t&--border--success-disabled {\n\t\t\tborder-color: $u-type-success-disabled;\n\t\t}\n\t\t\n\t\t&--border--error-disabled {\n\t\t\tborder-color: $u-type-error-disabled;\n\t\t}\n\t\t\n\t\t&--border--warning-disabled {\n\t\t\tborder-color: $u-type-warning-disabled;\n\t\t}\n\t\t\n\t\t&--border--info-disabled {\n\t\t\tborder-color: $u-type-info-disabled;\n\t\t}\n\t}\n\n\t.u-close-alert-tips {\n\t\topacity: 0;\n\t\tvisibility: hidden;\n\t}\n\n\t.u-icon {\n\t\tmargin-right: 16rpx;\n\t}\n\n\t.u-alert-title {\n\t\tfont-size: 28rpx;\n\t\tcolor: $u-main-color;\n\t}\n\n\t.u-alert-desc {\n\t\tfont-size: 26rpx;\n\t\ttext-align: left;\n\t\tcolor: $u-content-color;\n\t}\n\n\t.u-close-icon {\n\t\tposition: absolute;\n\t\ttop: 20rpx;\n\t\tright: 20rpx;\n\t}\n\n\t.u-close-hover {\n\t\tcolor: red;\n\t}\n\t\n\t.u-close-text {\n\t\tfont-size: 24rpx;\n\t\tcolor: $u-tips-color;\n\t\tposition: absolute;\n\t\ttop: 20rpx;\n\t\tright: 20rpx;\n\t\tline-height: 1;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-avatar/u-avatar.vue",
    "content": "<template>\n\t<view class=\"u-avatar\" :style=\"[wrapStyle]\" @tap=\"click\">\n\t\t<image\n\t\t\t@error=\"loadError\"\n\t\t\t:style=\"[imgStyle]\"\n\t\t\tclass=\"u-avatar__img\"\n\t\t\tv-if=\"!uText && avatar\"\n\t\t\t:src=\"avatar\" \n\t\t\t:mode=\"imgMode\"\n\t\t></image>\n\t\t<text class=\"u-line-1\" v-else-if=\"uText\" :style=\"{\n\t\t\tfontSize: '38rpx'\n\t\t}\">{{uText}}</text>\n\t\t<slot v-else></slot>\n\t\t<view class=\"u-avatar__sex\" v-if=\"showSex\" :class=\"['u-avatar__sex--' + sexIcon]\" :style=\"[uSexStyle]\">\n\t\t\t<u-icon :name=\"sexIcon\" size=\"20\"></u-icon>\n\t\t</view>\n\t\t<view class=\"u-avatar__level\" v-if=\"showLevel\" :style=\"[uLevelStyle]\">\n\t\t\t<u-icon :name=\"levelIcon\" size=\"20\"></u-icon>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\tlet base64Avatar = \"data:image/jpg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QMraHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjREMEQwRkY0RjgwNDExRUE5OTY2RDgxODY3NkJFODMxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjREMEQwRkY1RjgwNDExRUE5OTY2RDgxODY3NkJFODMxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NEQwRDBGRjJGODA0MTFFQTk5NjZEODE4Njc2QkU4MzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NEQwRDBGRjNGODA0MTFFQTk5NjZEODE4Njc2QkU4MzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAGBAQEBQQGBQUGCQYFBgkLCAYG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\";\n\t/**\n\t * avatar 头像\n\t * @description 本组件一般用于展示头像的地方，如个人中心，或者评论列表页的用户头像展示等场所。\n\t * @tutorial https://www.uviewui.com/components/avatar.html\n\t * @property {String} bg-color 背景颜色，一般显示文字时用（默认#ffffff）\n\t * @property {String} src 头像路径，如加载失败，将会显示默认头像\n\t * @property {String Number} size 头像尺寸，可以为指定字符串(large, default, mini)，或者数值，单位rpx（默认default）\n\t * @property {String} mode 显示类型，见上方说明（默认circle）\n\t * @property {String} sex-icon 性别图标，man-男，woman-女（默认man）\n\t * @property {String} level-icon 等级图标（默认level）\n\t * @property {String} sex-bg-color 性别图标背景颜色\n\t * @property {String} level-bg-color 等级图标背景颜色\n\t * @property {String} show-sex 是否显示性别图标（默认false）\n\t * @property {String} show-level 是否显示等级图标（默认false）\n\t * @property {String} img-mode 头像图片的裁剪类型，与uni的image组件的mode参数一致，如效果达不到需求，可尝试传widthFix值（默认aspectFill）\n\t * @property {String} index 用户传递的标识符值，如果是列表循环，可穿v-for的index值\n\t * @event {Function} click 头像被点击\n\t * @example <u-avatar :src=\"src\"></u-avatar>\n\t */\n\texport default {\n\t\tname: 'u-avatar',\n\t\tprops: {\n\t\t\t// 背景颜色\n\t\t\tbgColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'transparent'\n\t\t\t},\n\t\t\t// 头像路径\n\t\t\tsrc: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 尺寸，large-大，default-中等，mini-小，如果为数值，则单位为rpx\n\t\t\t// 宽度等于高度\n\t\t\tsize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 'default'\n\t\t\t},\n\t\t\t// 头像模型，square-带圆角方形，circle-圆形\n\t\t\tmode: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'circle'\n\t\t\t},\n\t\t\t// 文字内容\n\t\t\ttext: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 图片的裁剪模型\n\t\t\timgMode: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'aspectFill'\n\t\t\t},\n\t\t\t// 标识符\n\t\t\tindex: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 右上角性别角标，man-男，woman-女\n\t\t\tsexIcon: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'man'\n\t\t\t},\n\t\t\t// 右下角的等级图标\n\t\t\tlevelIcon: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'level'\n\t\t\t},\n\t\t\t// 右下角等级图标背景颜色\n\t\t\tlevelBgColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 右上角性别图标的背景颜色\n\t\t\tsexBgColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 是否显示性别图标\n\t\t\tshowSex: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 是否显示等级图标\n\t\t\tshowLevel: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\terror: false,\n\t\t\t\t// 头像的地址，因为如果加载错误，需要赋值为默认图片，props值无法修改，所以需要一个中间值\n                avatar: this.src ? this.src : base64Avatar, \n\t\t\t}\n\t\t},\n        watch: {\n            src(n) {\n                // 用户可能会在头像加载失败时，再次修改头像值，所以需要重新赋值\n                if(!n) {\n\t\t\t\t\t// 如果传入null或者''，或者undefined，显示默认头像\n\t\t\t\t\tthis.avatar = base64Avatar;\n\t\t\t\t\tthis.error = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.avatar = n;\n\t\t\t\t\tthis.error = false;\n\t\t\t\t}\n            }\n        },\n\t\tcomputed: {\n\t\t\twrapStyle() {\n\t\t\t\tlet style = {};  \n\t\t\t\tstyle.height = this.size == 'large' ? '120rpx' : this.size == 'default' ?\n\t\t\t\t'90rpx' : this.size == 'mini' ? '70rpx' : this.size + 'rpx';\n\t\t\t\tstyle.width = style.height;\n\t\t\t\tstyle.flex = `0 0 ${style.height}`;\n\t\t\t\tstyle.backgroundColor = this.bgColor;\n\t\t\t\tstyle.borderRadius = this.mode == 'circle' ? '500px' : '5px';\n\t\t\t\tif(this.text) style.padding = `0 6rpx`;\n\t\t\t\treturn style;\n\t\t\t},\n\t\t\timgStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\tstyle.borderRadius = this.mode == 'circle' ? '500px' : '5px';\n\t\t\t\treturn style;\n\t\t\t},\n\t\t\t// 取字符串的第一个字符\n\t\t\tuText() {\n\t\t\t\treturn String(this.text)[0];\n\t\t\t},\n\t\t\t// 性别图标的自定义样式\n\t\t\tuSexStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\tif(this.sexBgColor) style.backgroundColor = this.sexBgColor;\n\t\t\t\treturn style;\n\t\t\t},\n\t\t\t// 等级图标的自定义样式\n\t\t\tuLevelStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\tif(this.levelBgColor) style.backgroundColor = this.levelBgColor;\n\t\t\t\treturn style;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\t// 图片加载错误时，显示默认头像\n\t\t\tloadError() {\n\t\t\t\tthis.error = true;\n                this.avatar = base64Avatar;\n\t\t\t},\n\t\t\tclick() {\n\t\t\t\tthis.$emit('click', this.index);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\n\t.u-avatar {\n\t\t/* #ifndef APP-NVUE */\n\t\tdisplay: inline-flex;\t\t\n\t\t/* #endif */\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tfont-size: 28rpx;\n\t\tcolor: $u-content-color;\n\t\tborder-radius: 10px;\n\t\tposition: relative;\n\t\t\n\t\t&__img {\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t}\n\t\t\n\t\t&__sex {\n\t\t\tposition: absolute;\n\t\t\twidth: 32rpx;\n\t\t\tcolor: #ffffff;\n\t\t\theight: 32rpx;\n\t\t\t@include vue-flex;\n\t\t\tjustify-content: center;\n\t\t\talign-items: center;\n\t\t\tborder-radius: 100rpx;\n\t\t\ttop: 5%;\n\t\t\tz-index: 1;\n\t\t\tright: -7%;\n\t\t\tborder: 1px #ffffff solid;\n\t\t\t\n\t\t\t&--man {\n\t\t\t\tbackground-color: $u-type-primary;\n\t\t\t}\n\t\t\t\n\t\t\t&--woman {\n\t\t\t\tbackground-color: $u-type-error;\n\t\t\t}\n\t\t\t\n\t\t\t&--none {\n\t\t\t\tbackground-color: $u-type-warning;\n\t\t\t}\n\t\t}\n\t\t\n\t\t&__level {\n\t\t\tposition: absolute;\n\t\t\twidth: 32rpx;\n\t\t\tcolor: #ffffff;\n\t\t\theight: 32rpx;\n\t\t\t@include vue-flex;\n\t\t\tjustify-content: center;\n\t\t\talign-items: center;\n\t\t\tborder-radius: 100rpx;\n\t\t\tbottom: 5%; \n\t\t\tz-index: 1;\n\t\t\tright: -7%;\n\t\t\tborder: 1px #ffffff solid;\n\t\t\tbackground-color: $u-type-warning;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue",
    "content": "<template>\n\t<view class=\"content\">\n\t\t<view class=\"cropper-wrapper\" :style=\"{ height: cropperOpt.height + 'px' }\">\n\t\t\t<canvas\n\t\t\t\tclass=\"cropper\"\n\t\t\t\t:disable-scroll=\"true\"\n\t\t\t\t@touchstart=\"touchStart\"\n\t\t\t\t@touchmove=\"touchMove\"\n\t\t\t\t@touchend=\"touchEnd\"\n\t\t\t\t:style=\"{ width: cropperOpt.width, height: cropperOpt.height, backgroundColor: 'rgba(0, 0, 0, 0.8)' }\"\n\t\t\t\tcanvas-id=\"cropper\"\n\t\t\t\tid=\"cropper\"\n\t\t\t></canvas>\n\t\t\t<canvas\n\t\t\t\tclass=\"cropper\"\n\t\t\t\t:disable-scroll=\"true\"\n\t\t\t\t:style=\"{\n\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\ttop: `-${cropperOpt.width * cropperOpt.pixelRatio}px`,\n\t\t\t\t\tleft: `-${cropperOpt.height * cropperOpt.pixelRatio}px`,\n\t\t\t\t\twidth: `${cropperOpt.width * cropperOpt.pixelRatio}px`,\n\t\t\t\t\theight: `${cropperOpt.height * cropperOpt.pixelRatio}`\n\t\t\t\t}\"\n\t\t\t\tcanvas-id=\"targetId\"\n\t\t\t\tid=\"targetId\"\n\t\t\t></canvas>\n\t\t</view>\n\t\t<view class=\"cropper-buttons safe-area-padding\" :style=\"{ height: bottomNavHeight + 'px' }\">\n\t\t\t<!-- #ifdef H5 -->\n\t\t\t<view class=\"upload\" @tap=\"uploadTap\">选择图片</view>\n\t\t\t<!-- #endif -->\n\t\t\t<!-- #ifndef H5 -->\n\t\t\t<view class=\"upload\" @tap=\"uploadTap\">重新选择</view>\n\t\t\t<!-- #endif -->\n\t\t\t<view class=\"getCropperImage\" @tap=\"getCropperImage(false)\">确定</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nimport WeCropper from './weCropper.js';\nexport default {\n\tprops: {\n\t\t// 裁剪矩形框的样式，其中可包含的属性为lineWidth-边框宽度(单位rpx)，color: 边框颜色，\n\t\t// mask-遮罩颜色，一般设置为一个rgba的透明度，如\"rgba(0, 0, 0, 0.35)\"\n\t\tboundStyle: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {\n\t\t\t\t\tlineWidth: 4,\n\t\t\t\t\tborderColor: 'rgb(245, 245, 245)',\n\t\t\t\t\tmask: 'rgba(0, 0, 0, 0.35)'\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\t// // 裁剪框宽度，单位rpx\n\t\t// rectWidth: {\n\t\t// \ttype: [String, Number],\n\t\t// \tdefault: 400\n\t\t// },\n\t\t// // 裁剪框高度，单位rpx\n\t\t// rectHeight: {\n\t\t// \ttype: [String, Number],\n\t\t// \tdefault: 400\n\t\t// },\n\t\t// // 输出图片宽度，单位rpx\n\t\t// destWidth: {\n\t\t// \ttype: [String, Number],\n\t\t// \tdefault: 400\n\t\t// },\n\t\t// // 输出图片高度，单位rpx\n\t\t// destHeight: {\n\t\t// \ttype: [String, Number],\n\t\t// \tdefault: 400\n\t\t// },\n\t\t// // 输出的图片类型，如果发现裁剪的图片很大，可能是因为设置为了\"png\"，改成\"jpg\"即可\n\t\t// fileType: {\n\t\t// \ttype: String,\n\t\t// \tdefault: 'jpg',\n\t\t// },\n\t\t// // 生成的图片质量\n\t\t// // H5上无效，目前不考虑使用此参数\n\t\t// quality: {\n\t\t// \ttype: [Number, String],\n\t\t// \tdefault: 1\n\t\t// }\n\t},\n\tdata() {\n\t\treturn {\n\t\t\t// 底部导航的高度\n\t\t\tbottomNavHeight: 50,\n\t\t\toriginWidth: 200,\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\tcropperOpt: {\n\t\t\t\tid: 'cropper',\n\t\t\t\ttargetId: 'targetCropper',\n\t\t\t\tpixelRatio: 1,\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0,\n\t\t\t\tscale: 2.5,\n\t\t\t\tzoom: 8,\n\t\t\t\tcut: {\n\t\t\t\t\tx: (this.width - this.originWidth) / 2,\n\t\t\t\t\ty: (this.height - this.originWidth) / 2,\n\t\t\t\t\twidth: this.originWidth,\n\t\t\t\t\theight: this.originWidth\n\t\t\t\t},\n\t\t\t\tboundStyle: {\n\t\t\t\t\tlineWidth: uni.upx2px(this.boundStyle.lineWidth),\n\t\t\t\t\tmask: this.boundStyle.mask,\n\t\t\t\t\tcolor: this.boundStyle.borderColor\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 裁剪框和输出图片的尺寸，高度默认等于宽度\n\t\t\t// 输出图片宽度，单位px\n\t\t\tdestWidth: 200,\n\t\t\t// 裁剪框宽度，单位px\n\t\t\trectWidth: 200,\n\t\t\t// 输出的图片类型，如果'png'类型发现裁剪的图片太大，改成\"jpg\"即可\n\t\t\tfileType: 'jpg',\n\t\t\tsrc: '', // 选择的图片路径，用于在点击确定时，判断是否选择了图片\n\t\t};\n\t},\n\tonLoad(option) {\n\t\tlet rectInfo = uni.getSystemInfoSync();\n\t\tthis.width = rectInfo.windowWidth;\n\t\tthis.height = rectInfo.windowHeight - this.bottomNavHeight;\n\t\tthis.cropperOpt.width = this.width;\n\t\tthis.cropperOpt.height = this.height;\n\t\tthis.cropperOpt.pixelRatio = rectInfo.pixelRatio;\n\n\t\tif (option.destWidth) this.destWidth = option.destWidth;\n\t\tif (option.rectWidth) {\n\t\t\tlet rectWidth = Number(option.rectWidth);\n\t\t\tthis.cropperOpt.cut = {\n\t\t\t\tx: (this.width - rectWidth) / 2,\n\t\t\t\ty: (this.height - rectWidth) / 2,\n\t\t\t\twidth: rectWidth,\n\t\t\t\theight: rectWidth\n\t\t\t};\n\t\t}\n\t\tthis.rectWidth = option.rectWidth;\n\t\tif (option.fileType) this.fileType = option.fileType;\n\t\t// 初始化\n\t\tthis.cropper = new WeCropper(this.cropperOpt)\n\t\t\t.on('ready', ctx => {\n\t\t\t\t// wecropper is ready for work!\n\t\t\t})\n\t\t\t.on('beforeImageLoad', ctx => {\n\t\t\t\t// before picture loaded, i can do something\n\t\t\t})\n\t\t\t.on('imageLoad', ctx => {\n\t\t\t\t// picture loaded\n\t\t\t})\n\t\t\t.on('beforeDraw', (ctx, instance) => {\n\t\t\t\t// before canvas draw,i can do something\n\t\t\t});\n\t\t// 设置导航栏样式，以免用户在page.json中没有设置为黑色背景\n\t\tuni.setNavigationBarColor({\n\t\t\tfrontColor: '#ffffff',\n\t\t\tbackgroundColor: '#000000'\n\t\t});\n\t\tuni.chooseImage({\n\t\t\tcount: 1, // 默认9\n\t\t\tsizeType: ['compressed'], // 可以指定是原图还是压缩图，默认二者都有\n\t\t\tsourceType: ['album', 'camera'], // 可以指定来源是相册还是相机，默认二者都有\n\t\t\tsuccess: res => {\n\t\t\t\tthis.src = res.tempFilePaths[0];\n\t\t\t\t//  获取裁剪图片资源后，给data添加src属性及其值\n\t\t\t\tthis.cropper.pushOrign(this.src);\n\t\t\t}\n\t\t});\n\t},\n\tmethods: {\n\t\ttouchStart(e) {\n\t\t\tthis.cropper.touchStart(e);\n\t\t},\n\t\ttouchMove(e) {\n\t\t\tthis.cropper.touchMove(e);\n\t\t},\n\t\ttouchEnd(e) {\n\t\t\tthis.cropper.touchEnd(e);\n\t\t},\n\t\tgetCropperImage(isPre = false) {\n\t\t\tif(!this.src) return this.$u.toast('请先选择图片再裁剪');\n\n\t\t\tlet cropper_opt = {\n\t\t\t\tdestHeight: Number(this.destWidth), // uni.canvasToTempFilePath要求这些参数为数值\n\t\t\t\tdestWidth: Number(this.destWidth),\n\t\t\t\tfileType: this.fileType\n\t\t\t};\n\t\t\tthis.cropper.getCropperImage(cropper_opt, (path, err) => {\n\t\t\t\tif (err) {\n\t\t\t\t\tuni.showModal({\n\t\t\t\t\t\ttitle: '温馨提示',\n\t\t\t\t\t\tcontent: err.message\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif (isPre) {\n\t\t\t\t\t\tuni.previewImage({\n\t\t\t\t\t\t\tcurrent: '', // 当前显示图片的 http 链接\n\t\t\t\t\t\t\turls: [path] // 需要预览的图片 http 链接列表\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tuni.$emit('uAvatarCropper', path);\n\t\t\t\t\t\tthis.$u.route({\n\t\t\t\t\t\t\ttype: 'back'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tuploadTap() {\n\t\t\tconst self = this;\n\t\t\tuni.chooseImage({\n\t\t\t\tcount: 1, // 默认9\n\t\t\t\tsizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图，默认二者都有\n\t\t\t\tsourceType: ['album', 'camera'], // 可以指定来源是相册还是相机，默认二者都有\n\t\t\t\tsuccess: (res) => {\n\t\t\t\t\tself.src = res.tempFilePaths[0];\n\t\t\t\t\t//  获取裁剪图片资源后，给data添加src属性及其值\n\n\t\t\t\t\tself.cropper.pushOrign(this.src);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import '../../libs/css/style.components.scss';\n\n.content {\n\tbackground: rgba(255, 255, 255, 1);\n}\n\n.cropper {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\tz-index: 11;\n}\n\n.cropper-buttons {\n\tbackground-color: #000000;\n\tcolor: #eee;\n}\n\n.cropper-wrapper {\n\tposition: relative;\n\t@include vue-flex;\n\tflex-direction: row;\n\tjustify-content: space-between;\n\talign-items: center;\n\twidth: 100%;\n\tbackground-color: #000;\n}\n\n.cropper-buttons {\n\twidth: 100vw;\n\t@include vue-flex;\n\tflex-direction: row;\n\tjustify-content: space-between;\n\talign-items: center;\n\tposition: fixed;\n\tbottom: 0;\n\tleft: 0;\n\tfont-size: 28rpx;\n}\n\n.cropper-buttons .upload,\n.cropper-buttons .getCropperImage {\n\twidth: 50%;\n\ttext-align: center;\n}\n\n.cropper-buttons .upload {\n\ttext-align: left;\n\tpadding-left: 50rpx;\n}\n\n.cropper-buttons .getCropperImage {\n\ttext-align: right;\n\tpadding-right: 50rpx;\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-avatar-cropper/weCropper.js",
    "content": "/**\n * we-cropper v1.3.9\n * (c) 2020 dlhandsome\n * @license MIT\n */\n(function(global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\t\ttypeof define === 'function' && define.amd ? define(factory) :\n\t\t(global.WeCropper = factory());\n}(this, (function() {\n\t'use strict';\n\n\tvar device = void 0;\n\tvar TOUCH_STATE = ['touchstarted', 'touchmoved', 'touchended'];\n\n\tfunction firstLetterUpper(str) {\n\t\treturn str.charAt(0).toUpperCase() + str.slice(1)\n\t}\n\n\tfunction setTouchState(instance) {\n\t\tvar arg = [],\n\t\t\tlen = arguments.length - 1;\n\t\twhile (len-- > 0) arg[len] = arguments[len + 1];\n\n\t\tTOUCH_STATE.forEach(function(key, i) {\n\t\t\tif (arg[i] !== undefined) {\n\t\t\t\tinstance[key] = arg[i];\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction validator(instance, o) {\n\t\tObject.defineProperties(instance, o);\n\t}\n\n\tfunction getDevice() {\n\t\tif (!device) {\n\t\t\tdevice = uni.getSystemInfoSync();\n\t\t}\n\t\treturn device\n\t}\n\n\tvar tmp = {};\n\n\tvar ref = getDevice();\n\tvar pixelRatio = ref.pixelRatio;\n\n\tvar DEFAULT = {\n\t\tid: {\n\t\t\tdefault: 'cropper',\n\t\t\tget: function get() {\n\t\t\t\treturn tmp.id\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tif (typeof(value) !== 'string') {\n\t\t\t\t\tconsole.error((\"id：\" + value + \" is invalid\"));\n\t\t\t\t}\n\t\t\t\ttmp.id = value;\n\t\t\t}\n\t\t},\n\t\twidth: {\n\t\t\tdefault: 750,\n\t\t\tget: function get() {\n\t\t\t\treturn tmp.width\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tif (typeof(value) !== 'number') {\n\t\t\t\t\tconsole.error((\"width：\" + value + \" is invalid\"));\n\t\t\t\t}\n\t\t\t\ttmp.width = value;\n\t\t\t}\n\t\t},\n\t\theight: {\n\t\t\tdefault: 750,\n\t\t\tget: function get() {\n\t\t\t\treturn tmp.height\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tif (typeof(value) !== 'number') {\n\t\t\t\t\tconsole.error((\"height：\" + value + \" is invalid\"));\n\t\t\t\t}\n\t\t\t\ttmp.height = value;\n\t\t\t}\n\t\t},\n\t\tpixelRatio: {\n\t\t\tdefault: pixelRatio,\n\t\t\tget: function get() {\n\t\t\t\treturn tmp.pixelRatio\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tif (typeof(value) !== 'number') {\n\t\t\t\t\tconsole.error((\"pixelRatio：\" + value + \" is invalid\"));\n\t\t\t\t}\n\t\t\t\ttmp.pixelRatio = value;\n\t\t\t}\n\t\t},\n\t\tscale: {\n\t\t\tdefault: 2.5,\n\t\t\tget: function get() {\n\t\t\t\treturn tmp.scale\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tif (typeof(value) !== 'number') {\n\t\t\t\t\tconsole.error((\"scale：\" + value + \" is invalid\"));\n\t\t\t\t}\n\t\t\t\ttmp.scale = value;\n\t\t\t}\n\t\t},\n\t\tzoom: {\n\t\t\tdefault: 5,\n\t\t\tget: function get() {\n\t\t\t\treturn tmp.zoom\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tif (typeof(value) !== 'number') {\n\t\t\t\t\tconsole.error((\"zoom：\" + value + \" is invalid\"));\n\t\t\t\t} else if (value < 0 || value > 10) {\n\t\t\t\t\tconsole.error(\"zoom should be ranged in 0 ~ 10\");\n\t\t\t\t}\n\t\t\t\ttmp.zoom = value;\n\t\t\t}\n\t\t},\n\t\tsrc: {\n\t\t\tdefault: '',\n\t\t\tget: function get() {\n\t\t\t\treturn tmp.src\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tif (typeof(value) !== 'string') {\n\t\t\t\t\tconsole.error((\"src：\" + value + \" is invalid\"));\n\t\t\t\t}\n\t\t\t\ttmp.src = value;\n\t\t\t}\n\t\t},\n\t\tcut: {\n\t\t\tdefault: {},\n\t\t\tget: function get() {\n\t\t\t\treturn tmp.cut\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tif (typeof(value) !== 'object') {\n\t\t\t\t\tconsole.error((\"cut：\" + value + \" is invalid\"));\n\t\t\t\t}\n\t\t\t\ttmp.cut = value;\n\t\t\t}\n\t\t},\n\t\tboundStyle: {\n\t\t\tdefault: {},\n\t\t\tget: function get() {\n\t\t\t\treturn tmp.boundStyle\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tif (typeof(value) !== 'object') {\n\t\t\t\t\tconsole.error((\"boundStyle：\" + value + \" is invalid\"));\n\t\t\t\t}\n\t\t\t\ttmp.boundStyle = value;\n\t\t\t}\n\t\t},\n\t\tonReady: {\n\t\t\tdefault: null,\n\t\t\tget: function get() {\n\t\t\t\treturn tmp.ready\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\ttmp.ready = value;\n\t\t\t}\n\t\t},\n\t\tonBeforeImageLoad: {\n\t\t\tdefault: null,\n\t\t\tget: function get() {\n\t\t\t\treturn tmp.beforeImageLoad\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\ttmp.beforeImageLoad = value;\n\t\t\t}\n\t\t},\n\t\tonImageLoad: {\n\t\t\tdefault: null,\n\t\t\tget: function get() {\n\t\t\t\treturn tmp.imageLoad\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\ttmp.imageLoad = value;\n\t\t\t}\n\t\t},\n\t\tonBeforeDraw: {\n\t\t\tdefault: null,\n\t\t\tget: function get() {\n\t\t\t\treturn tmp.beforeDraw\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\ttmp.beforeDraw = value;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar ref$1 = getDevice();\n\tvar windowWidth = ref$1.windowWidth;\n\n\tfunction prepare() {\n\t\tvar self = this;\n\n\t\t// v1.4.0 版本中将不再自动绑定we-cropper实例\n\t\tself.attachPage = function() {\n\t\t\tvar pages = getCurrentPages();\n\t\t\t// 获取到当前page上下文\n\t\t\tvar pageContext = pages[pages.length - 1];\n\t\t\t// 把this依附在Page上下文的wecropper属性上，便于在page钩子函数中访问\n\t\t\tObject.defineProperty(pageContext, 'wecropper', {\n\t\t\t\tget: function get() {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t'Instance will not be automatically bound to the page after v1.4.0\\n\\n' +\n\t\t\t\t\t\t'Please use a custom instance name instead\\n\\n' +\n\t\t\t\t\t\t'Example: \\n' +\n\t\t\t\t\t\t'this.mycropper = new WeCropper(options)\\n\\n' +\n\t\t\t\t\t\t'// ...\\n' +\n\t\t\t\t\t\t'this.mycropper.getCropperImage()'\n\t\t\t\t\t);\n\t\t\t\t\treturn self\n\t\t\t\t},\n\t\t\t\tconfigurable: true\n\t\t\t});\n\t\t};\n\n\t\tself.createCtx = function() {\n\t\t\tvar id = self.id;\n\t\t\tvar targetId = self.targetId;\n\n\t\t\tif (id) {\n\t\t\t\tself.ctx = self.ctx || uni.createCanvasContext(id);\n\t\t\t\tself.targetCtx = self.targetCtx || uni.createCanvasContext(targetId);\n\t\t\t} else {\n\t\t\t\tconsole.error(\"constructor: create canvas context failed, 'id' must be valuable\");\n\t\t\t}\n\t\t};\n\n\t\tself.deviceRadio = windowWidth / 750;\n\t}\n\n\tvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !==\n\t\t'undefined' ? self : {};\n\n\n\n\n\n\tfunction createCommonjsModule(fn, module) {\n\t\treturn module = {\n\t\t\texports: {}\n\t\t}, fn(module, module.exports), module.exports;\n\t}\n\n\tvar tools = createCommonjsModule(function(module, exports) {\n\t\t/**\n\t\t * String type check\n\t\t */\n\t\texports.isStr = function(v) {\n\t\t\treturn typeof v === 'string';\n\t\t};\n\t\t/**\n\t\t * Number type check\n\t\t */\n\t\texports.isNum = function(v) {\n\t\t\treturn typeof v === 'number';\n\t\t};\n\t\t/**\n\t\t * Array type check\n\t\t */\n\t\texports.isArr = Array.isArray;\n\t\t/**\n\t\t * undefined type check\n\t\t */\n\t\texports.isUndef = function(v) {\n\t\t\treturn v === undefined;\n\t\t};\n\n\t\texports.isTrue = function(v) {\n\t\t\treturn v === true;\n\t\t};\n\n\t\texports.isFalse = function(v) {\n\t\t\treturn v === false;\n\t\t};\n\t\t/**\n\t\t * Function type check\n\t\t */\n\t\texports.isFunc = function(v) {\n\t\t\treturn typeof v === 'function';\n\t\t};\n\t\t/**\n\t\t * Quick object check - this is primarily used to tell\n\t\t * Objects from primitive values when we know the value\n\t\t * is a JSON-compliant type.\n\t\t */\n\t\texports.isObj = exports.isObject = function(obj) {\n\t\t\treturn obj !== null && typeof obj === 'object'\n\t\t};\n\n\t\t/**\n\t\t * Strict object type check. Only returns true\n\t\t * for plain JavaScript objects.\n\t\t */\n\t\tvar _toString = Object.prototype.toString;\n\t\texports.isPlainObject = function(obj) {\n\t\t\treturn _toString.call(obj) === '[object Object]'\n\t\t};\n\n\t\t/**\n\t\t * Check whether the object has the property.\n\t\t */\n\t\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\t\texports.hasOwn = function(obj, key) {\n\t\t\treturn hasOwnProperty.call(obj, key)\n\t\t};\n\n\t\t/**\n\t\t * Perform no operation.\n\t\t * Stubbing args to make Flow happy without leaving useless transpiled code\n\t\t * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/)\n\t\t */\n\t\texports.noop = function(a, b, c) {};\n\n\t\t/**\n\t\t * Check if val is a valid array index.\n\t\t */\n\t\texports.isValidArrayIndex = function(val) {\n\t\t\tvar n = parseFloat(String(val));\n\t\t\treturn n >= 0 && Math.floor(n) === n && isFinite(val)\n\t\t};\n\t});\n\n\tvar tools_7 = tools.isFunc;\n\tvar tools_10 = tools.isPlainObject;\n\n\tvar EVENT_TYPE = ['ready', 'beforeImageLoad', 'beforeDraw', 'imageLoad'];\n\n\tfunction observer() {\n\t\tvar self = this;\n\n\t\tself.on = function(event, fn) {\n\t\t\tif (EVENT_TYPE.indexOf(event) > -1) {\n\t\t\t\tif (tools_7(fn)) {\n\t\t\t\t\tevent === 'ready' ?\n\t\t\t\t\t\tfn(self) :\n\t\t\t\t\t\tself[(\"on\" + (firstLetterUpper(event)))] = fn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.error((\"event: \" + event + \" is invalid\"));\n\t\t\t}\n\t\t\treturn self\n\t\t};\n\t}\n\n\tfunction wxPromise(fn) {\n\t\treturn function(obj) {\n\t\t\tvar args = [],\n\t\t\t\tlen = arguments.length - 1;\n\t\t\twhile (len-- > 0) args[len] = arguments[len + 1];\n\n\t\t\tif (obj === void 0) obj = {};\n\t\t\treturn new Promise(function(resolve, reject) {\n\t\t\t\tobj.success = function(res) {\n\t\t\t\t\tresolve(res);\n\t\t\t\t};\n\t\t\t\tobj.fail = function(err) {\n\t\t\t\t\treject(err);\n\t\t\t\t};\n\t\t\t\tfn.apply(void 0, [obj].concat(args));\n\t\t\t})\n\t\t}\n\t}\n\n\tfunction draw(ctx, reserve) {\n\t\tif (reserve === void 0) reserve = false;\n\n\t\treturn new Promise(function(resolve) {\n\t\t\tctx.draw(reserve, resolve);\n\t\t})\n\t}\n\n\tvar getImageInfo = wxPromise(uni.getImageInfo);\n\n\tvar canvasToTempFilePath = wxPromise(uni.canvasToTempFilePath);\n\n\tvar base64 = createCommonjsModule(function(module, exports) {\n\t\t/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n\t\t(function(root) {\n\n\t\t\t// Detect free variables `exports`.\n\t\t\tvar freeExports = 'object' == 'object' && exports;\n\n\t\t\t// Detect free variable `module`.\n\t\t\tvar freeModule = 'object' == 'object' && module &&\n\t\t\t\tmodule.exports == freeExports && module;\n\n\t\t\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t\t\t// it as `root`.\n\t\t\tvar freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal;\n\t\t\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\t\t\troot = freeGlobal;\n\t\t\t}\n\n\t\t\t/*--------------------------------------------------------------------------*/\n\n\t\t\tvar InvalidCharacterError = function(message) {\n\t\t\t\tthis.message = message;\n\t\t\t};\n\t\t\tInvalidCharacterError.prototype = new Error;\n\t\t\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\t\t\tvar error = function(message) {\n\t\t\t\t// Note: the error messages used throughout this file match those used by\n\t\t\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\t\t\tthrow new InvalidCharacterError(message);\n\t\t\t};\n\n\t\t\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t\t\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\t\t\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t\t\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t\t\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t\t\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t\t\t// implementation. https://gist.github.com/atk/1020396\n\t\t\tvar decode = function(input) {\n\t\t\t\tinput = String(input)\n\t\t\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\t\t\tvar length = input.length;\n\t\t\t\tif (length % 4 == 0) {\n\t\t\t\t\tinput = input.replace(/==?$/, '');\n\t\t\t\t\tlength = input.length;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tlength % 4 == 1 ||\n\t\t\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t\t\t) {\n\t\t\t\t\terror(\n\t\t\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tvar bitCounter = 0;\n\t\t\t\tvar bitStorage;\n\t\t\t\tvar buffer;\n\t\t\t\tvar output = '';\n\t\t\t\tvar position = -1;\n\t\t\t\twhile (++position < length) {\n\t\t\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn output;\n\t\t\t};\n\n\t\t\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t\t\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\t\t\tvar encode = function(input) {\n\t\t\t\tinput = String(input);\n\t\t\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\t\t\terror(\n\t\t\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t\t\t'Latin1 range.'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tvar padding = input.length % 3;\n\t\t\t\tvar output = '';\n\t\t\t\tvar position = -1;\n\t\t\t\tvar a;\n\t\t\t\tvar b;\n\t\t\t\tvar c;\n\t\t\t\tvar buffer;\n\t\t\t\t// Make sure any padding is handled outside of the loop.\n\t\t\t\tvar length = input.length - padding;\n\n\t\t\t\twhile (++position < length) {\n\t\t\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\t\t\tc = input.charCodeAt(++position);\n\t\t\t\t\tbuffer = a + b + c;\n\t\t\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t\t\t// matching character for each of them to the output.\n\t\t\t\t\toutput += (\n\t\t\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (padding == 2) {\n\t\t\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\t\t\tb = input.charCodeAt(++position);\n\t\t\t\t\tbuffer = a + b;\n\t\t\t\t\toutput += (\n\t\t\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t\t\t'='\n\t\t\t\t\t);\n\t\t\t\t} else if (padding == 1) {\n\t\t\t\t\tbuffer = input.charCodeAt(position);\n\t\t\t\t\toutput += (\n\t\t\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t\t\t'=='\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn output;\n\t\t\t};\n\n\t\t\tvar base64 = {\n\t\t\t\t'encode': encode,\n\t\t\t\t'decode': decode,\n\t\t\t\t'version': '0.1.0'\n\t\t\t};\n\n\t\t\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t\t\t// like the following:\n\t\t\tif (\n\t\t\t\ttypeof undefined == 'function' &&\n\t\t\t\ttypeof undefined.amd == 'object' &&\n\t\t\t\tundefined.amd\n\t\t\t) {\n\t\t\t\tundefined(function() {\n\t\t\t\t\treturn base64;\n\t\t\t\t});\n\t\t\t} else if (freeExports && !freeExports.nodeType) {\n\t\t\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\t\t\tfreeModule.exports = base64;\n\t\t\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\t\t\tfor (var key in base64) {\n\t\t\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else { // in Rhino or a web browser\n\t\t\t\troot.base64 = base64;\n\t\t\t}\n\n\t\t}(commonjsGlobal));\n\t});\n\n\tfunction makeURI(strData, type) {\n\t\treturn 'data:' + type + ';base64,' + strData\n\t}\n\n\tfunction fixType(type) {\n\t\ttype = type.toLowerCase().replace(/jpg/i, 'jpeg');\n\t\tvar r = type.match(/png|jpeg|bmp|gif/)[0];\n\t\treturn 'image/' + r\n\t}\n\n\tfunction encodeData(data) {\n\t\tvar str = '';\n\t\tif (typeof data === 'string') {\n\t\t\tstr = data;\n\t\t} else {\n\t\t\tfor (var i = 0; i < data.length; i++) {\n\t\t\t\tstr += String.fromCharCode(data[i]);\n\t\t\t}\n\t\t}\n\t\treturn base64.encode(str)\n\t}\n\n\t/**\n\t * 获取图像区域隐含的像素数据\n\t * @param canvasId canvas标识\n\t * @param x 将要被提取的图像数据矩形区域的左上角 x 坐标\n\t * @param y 将要被提取的图像数据矩形区域的左上角 y 坐标\n\t * @param width 将要被提取的图像数据矩形区域的宽度\n\t * @param height 将要被提取的图像数据矩形区域的高度\n\t * @param done 完成回调\n\t */\n\tfunction getImageData(canvasId, x, y, width, height, done) {\n\t\tuni.canvasGetImageData({\n\t\t\tcanvasId: canvasId,\n\t\t\tx: x,\n\t\t\ty: y,\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tsuccess: function success(res) {\n\t\t\t\tdone(res, null);\n\t\t\t},\n\t\t\tfail: function fail(res) {\n\t\t\t\tdone(null, res);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * 生成bmp格式图片\n\t * 按照规则生成图片响应头和响应体\n\t * @param oData 用来描述 canvas 区域隐含的像素数据 { data, width, height } = oData\n\t * @returns {*} base64字符串\n\t */\n\tfunction genBitmapImage(oData) {\n\t\t//\n\t\t// BITMAPFILEHEADER: http://msdn.microsoft.com/en-us/library/windows/desktop/dd183374(v=vs.85).aspx\n\t\t// BITMAPINFOHEADER: http://msdn.microsoft.com/en-us/library/dd183376.aspx\n\t\t//\n\t\tvar biWidth = oData.width;\n\t\tvar biHeight = oData.height;\n\t\tvar biSizeImage = biWidth * biHeight * 3;\n\t\tvar bfSize = biSizeImage + 54; // total header size = 54 bytes\n\n\t\t//\n\t\t//  typedef struct tagBITMAPFILEHEADER {\n\t\t//  \tWORD bfType;\n\t\t//  \tDWORD bfSize;\n\t\t//  \tWORD bfReserved1;\n\t\t//  \tWORD bfReserved2;\n\t\t//  \tDWORD bfOffBits;\n\t\t//  } BITMAPFILEHEADER;\n\t\t//\n\t\tvar BITMAPFILEHEADER = [\n\t\t\t// WORD bfType -- The file type signature; must be \"BM\"\n\t\t\t0x42, 0x4D,\n\t\t\t// DWORD bfSize -- The size, in bytes, of the bitmap file\n\t\t\tbfSize & 0xff, bfSize >> 8 & 0xff, bfSize >> 16 & 0xff, bfSize >> 24 & 0xff,\n\t\t\t// WORD bfReserved1 -- Reserved; must be zero\n\t\t\t0, 0,\n\t\t\t// WORD bfReserved2 -- Reserved; must be zero\n\t\t\t0, 0,\n\t\t\t// DWORD bfOffBits -- The offset, in bytes, from the beginning of the BITMAPFILEHEADER structure to the bitmap bits.\n\t\t\t54, 0, 0, 0\n\t\t];\n\n\t\t//\n\t\t//  typedef struct tagBITMAPINFOHEADER {\n\t\t//  \tDWORD biSize;\n\t\t//  \tLONG  biWidth;\n\t\t//  \tLONG  biHeight;\n\t\t//  \tWORD  biPlanes;\n\t\t//  \tWORD  biBitCount;\n\t\t//  \tDWORD biCompression;\n\t\t//  \tDWORD biSizeImage;\n\t\t//  \tLONG  biXPelsPerMeter;\n\t\t//  \tLONG  biYPelsPerMeter;\n\t\t//  \tDWORD biClrUsed;\n\t\t//  \tDWORD biClrImportant;\n\t\t//  } BITMAPINFOHEADER, *PBITMAPINFOHEADER;\n\t\t//\n\t\tvar BITMAPINFOHEADER = [\n\t\t\t// DWORD biSize -- The number of bytes required by the structure\n\t\t\t40, 0, 0, 0,\n\t\t\t// LONG biWidth -- The width of the bitmap, in pixels\n\t\t\tbiWidth & 0xff, biWidth >> 8 & 0xff, biWidth >> 16 & 0xff, biWidth >> 24 & 0xff,\n\t\t\t// LONG biHeight -- The height of the bitmap, in pixels\n\t\t\tbiHeight & 0xff, biHeight >> 8 & 0xff, biHeight >> 16 & 0xff, biHeight >> 24 & 0xff,\n\t\t\t// WORD biPlanes -- The number of planes for the target device. This value must be set to 1\n\t\t\t1, 0,\n\t\t\t// WORD biBitCount -- The number of bits-per-pixel, 24 bits-per-pixel -- the bitmap\n\t\t\t// has a maximum of 2^24 colors (16777216, Truecolor)\n\t\t\t24, 0,\n\t\t\t// DWORD biCompression -- The type of compression, BI_RGB (code 0) -- uncompressed\n\t\t\t0, 0, 0, 0,\n\t\t\t// DWORD biSizeImage -- The size, in bytes, of the image. This may be set to zero for BI_RGB bitmaps\n\t\t\tbiSizeImage & 0xff, biSizeImage >> 8 & 0xff, biSizeImage >> 16 & 0xff, biSizeImage >> 24 & 0xff,\n\t\t\t// LONG biXPelsPerMeter, unused\n\t\t\t0, 0, 0, 0,\n\t\t\t// LONG biYPelsPerMeter, unused\n\t\t\t0, 0, 0, 0,\n\t\t\t// DWORD biClrUsed, the number of color indexes of palette, unused\n\t\t\t0, 0, 0, 0,\n\t\t\t// DWORD biClrImportant, unused\n\t\t\t0, 0, 0, 0\n\t\t];\n\n\t\tvar iPadding = (4 - ((biWidth * 3) % 4)) % 4;\n\n\t\tvar aImgData = oData.data;\n\n\t\tvar strPixelData = '';\n\t\tvar biWidth4 = biWidth << 2;\n\t\tvar y = biHeight;\n\t\tvar fromCharCode = String.fromCharCode;\n\n\t\tdo {\n\t\t\tvar iOffsetY = biWidth4 * (y - 1);\n\t\t\tvar strPixelRow = '';\n\t\t\tfor (var x = 0; x < biWidth; x++) {\n\t\t\t\tvar iOffsetX = x << 2;\n\t\t\t\tstrPixelRow += fromCharCode(aImgData[iOffsetY + iOffsetX + 2]) +\n\t\t\t\t\tfromCharCode(aImgData[iOffsetY + iOffsetX + 1]) +\n\t\t\t\t\tfromCharCode(aImgData[iOffsetY + iOffsetX]);\n\t\t\t}\n\n\t\t\tfor (var c = 0; c < iPadding; c++) {\n\t\t\t\tstrPixelRow += String.fromCharCode(0);\n\t\t\t}\n\n\t\t\tstrPixelData += strPixelRow;\n\t\t} while (--y)\n\n\t\tvar strEncoded = encodeData(BITMAPFILEHEADER.concat(BITMAPINFOHEADER)) + encodeData(strPixelData);\n\n\t\treturn strEncoded\n\t}\n\n\t/**\n\t * 转换为图片base64\n\t * @param canvasId canvas标识\n\t * @param x 将要被提取的图像数据矩形区域的左上角 x 坐标\n\t * @param y 将要被提取的图像数据矩形区域的左上角 y 坐标\n\t * @param width 将要被提取的图像数据矩形区域的宽度\n\t * @param height 将要被提取的图像数据矩形区域的高度\n\t * @param type 转换图片类型\n\t * @param done 完成回调\n\t */\n\tfunction convertToImage(canvasId, x, y, width, height, type, done) {\n\t\tif (done === void 0) done = function() {};\n\n\t\tif (type === undefined) {\n\t\t\ttype = 'png';\n\t\t}\n\t\ttype = fixType(type);\n\t\tif (/bmp/.test(type)) {\n\t\t\tgetImageData(canvasId, x, y, width, height, function(data, err) {\n\t\t\t\tvar strData = genBitmapImage(data);\n\t\t\t\ttools_7(done) && done(makeURI(strData, 'image/' + type), err);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.error('暂不支持生成\\'' + type + '\\'类型的base64图片');\n\t\t}\n\t}\n\n\tvar CanvasToBase64 = {\n\t\tconvertToImage: convertToImage,\n\t\t// convertToPNG: function (width, height, done) {\n\t\t//   return convertToImage(width, height, 'png', done)\n\t\t// },\n\t\t// convertToJPEG: function (width, height, done) {\n\t\t//   return convertToImage(width, height, 'jpeg', done)\n\t\t// },\n\t\t// convertToGIF: function (width, height, done) {\n\t\t//   return convertToImage(width, height, 'gif', done)\n\t\t// },\n\t\tconvertToBMP: function(ref, done) {\n\t\t\tif (ref === void 0) ref = {};\n\t\t\tvar canvasId = ref.canvasId;\n\t\t\tvar x = ref.x;\n\t\t\tvar y = ref.y;\n\t\t\tvar width = ref.width;\n\t\t\tvar height = ref.height;\n\t\t\tif (done === void 0) done = function() {};\n\n\t\t\treturn convertToImage(canvasId, x, y, width, height, 'bmp', done)\n\t\t}\n\t};\n\n\tfunction methods() {\n\t\tvar self = this;\n\n\t\tvar boundWidth = self.width; // 裁剪框默认宽度，即整个画布宽度\n\t\tvar boundHeight = self.height; // 裁剪框默认高度，即整个画布高度\n\n\t\tvar id = self.id;\n\t\tvar targetId = self.targetId;\n\t\tvar pixelRatio = self.pixelRatio;\n\n\t\tvar ref = self.cut;\n\t\tvar x = ref.x;\n\t\tif (x === void 0) x = 0;\n\t\tvar y = ref.y;\n\t\tif (y === void 0) y = 0;\n\t\tvar width = ref.width;\n\t\tif (width === void 0) width = boundWidth;\n\t\tvar height = ref.height;\n\t\tif (height === void 0) height = boundHeight;\n\n\t\tself.updateCanvas = function(done) {\n\t\t\tif (self.croperTarget) {\n\t\t\t\t//  画布绘制图片\n\t\t\t\tself.ctx.drawImage(\n\t\t\t\t\tself.croperTarget,\n\t\t\t\t\tself.imgLeft,\n\t\t\t\t\tself.imgTop,\n\t\t\t\t\tself.scaleWidth,\n\t\t\t\t\tself.scaleHeight\n\t\t\t\t);\n\t\t\t}\n\t\t\ttools_7(self.onBeforeDraw) && self.onBeforeDraw(self.ctx, self);\n\n\t\t\tself.setBoundStyle(self.boundStyle); //\t设置边界样式\n\n\t\t\tself.ctx.draw(false, done);\n\t\t\treturn self\n\t\t};\n\n\t\tself.pushOrigin = self.pushOrign = function(src) {\n\t\t\tself.src = src;\n\n\t\t\ttools_7(self.onBeforeImageLoad) && self.onBeforeImageLoad(self.ctx, self);\n\n\t\t\treturn getImageInfo({\n\t\t\t\t\tsrc: src\n\t\t\t\t})\n\t\t\t\t.then(function(res) {\n\t\t\t\t\tvar innerAspectRadio = res.width / res.height;\n\t\t\t\t\tvar customAspectRadio = width / height;\n\n\t\t\t\t\tself.croperTarget = res.path;\n\n\t\t\t\t\tif (innerAspectRadio < customAspectRadio) {\n\t\t\t\t\t\tself.rectX = x;\n\t\t\t\t\t\tself.baseWidth = width;\n\t\t\t\t\t\tself.baseHeight = width / innerAspectRadio;\n\t\t\t\t\t\tself.rectY = y - Math.abs((height - self.baseHeight) / 2);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.rectY = y;\n\t\t\t\t\t\tself.baseWidth = height * innerAspectRadio;\n\t\t\t\t\t\tself.baseHeight = height;\n\t\t\t\t\t\tself.rectX = x - Math.abs((width - self.baseWidth) / 2);\n\t\t\t\t\t}\n\n\t\t\t\t\tself.imgLeft = self.rectX;\n\t\t\t\t\tself.imgTop = self.rectY;\n\t\t\t\t\tself.scaleWidth = self.baseWidth;\n\t\t\t\t\tself.scaleHeight = self.baseHeight;\n\n\t\t\t\t\tself.update();\n\n\t\t\t\t\treturn new Promise(function(resolve) {\n\t\t\t\t\t\tself.updateCanvas(resolve);\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.then(function() {\n\t\t\t\t\ttools_7(self.onImageLoad) && self.onImageLoad(self.ctx, self);\n\t\t\t\t})\n\t\t};\n\n\t\tself.removeImage = function() {\n\t\t\tself.src = '';\n\t\t\tself.croperTarget = '';\n\t\t\treturn draw(self.ctx)\n\t\t};\n\n\t\tself.getCropperBase64 = function(done) {\n\t\t\tif (done === void 0) done = function() {};\n\n\t\t\tCanvasToBase64.convertToBMP({\n\t\t\t\tcanvasId: id,\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t}, done);\n\t\t};\n\n\t\tself.getCropperImage = function(opt, fn) {\n\t\t\tvar customOptions = opt;\n\n\t\t\tvar canvasOptions = {\n\t\t\t\tcanvasId: id,\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t};\n\n\t\t\tvar task = function() {\n\t\t\t\treturn Promise.resolve();\n\t\t\t};\n\n\t\t\tif (\n\t\t\t\ttools_10(customOptions) &&\n\t\t\t\tcustomOptions.original\n\t\t\t) {\n\t\t\t\t// original mode\n\t\t\t\ttask = function() {\n\t\t\t\t\tself.targetCtx.drawImage(\n\t\t\t\t\t\tself.croperTarget,\n\t\t\t\t\t\tself.imgLeft * pixelRatio,\n\t\t\t\t\t\tself.imgTop * pixelRatio,\n\t\t\t\t\t\tself.scaleWidth * pixelRatio,\n\t\t\t\t\t\tself.scaleHeight * pixelRatio\n\t\t\t\t\t);\n\n\t\t\t\t\tcanvasOptions = {\n\t\t\t\t\t\tcanvasId: targetId,\n\t\t\t\t\t\tx: x * pixelRatio,\n\t\t\t\t\t\ty: y * pixelRatio,\n\t\t\t\t\t\twidth: width * pixelRatio,\n\t\t\t\t\t\theight: height * pixelRatio\n\t\t\t\t\t};\n\n\t\t\t\t\treturn draw(self.targetCtx)\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn task()\n\t\t\t\t.then(function() {\n\t\t\t\t\tif (tools_10(customOptions)) {\n\t\t\t\t\t\tcanvasOptions = Object.assign({}, canvasOptions, customOptions);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (tools_7(customOptions)) {\n\t\t\t\t\t\tfn = customOptions;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar arg = canvasOptions.componentContext ?\n\t\t\t\t\t\t[canvasOptions, canvasOptions.componentContext] :\n\t\t\t\t\t\t[canvasOptions];\n\n\t\t\t\t\treturn canvasToTempFilePath.apply(null, arg)\n\t\t\t\t})\n\t\t\t\t.then(function(res) {\n\t\t\t\t\tvar tempFilePath = res.tempFilePath;\n\n\t\t\t\t\treturn tools_7(fn) ?\n\t\t\t\t\t\tfn.call(self, tempFilePath, null) :\n\t\t\t\t\t\ttempFilePath\n\t\t\t\t})\n\t\t\t\t.catch(function(err) {\n\t\t\t\t\tif (tools_7(fn)) {\n\t\t\t\t\t\tfn.call(self, null, err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow err\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t};\n\t}\n\n\t/**\n\t * 获取最新缩放值\n\t * @param oldScale 上一次触摸结束后的缩放值\n\t * @param oldDistance 上一次触摸结束后的双指距离\n\t * @param zoom 缩放系数\n\t * @param touch0 第一指touch对象\n\t * @param touch1 第二指touch对象\n\t * @returns {*}\n\t */\n\tvar getNewScale = function(oldScale, oldDistance, zoom, touch0, touch1) {\n\t\tvar xMove, yMove, newDistance;\n\t\t// 计算二指最新距离\n\t\txMove = Math.round(touch1.x - touch0.x);\n\t\tyMove = Math.round(touch1.y - touch0.y);\n\t\tnewDistance = Math.round(Math.sqrt(xMove * xMove + yMove * yMove));\n\n\t\treturn oldScale + 0.001 * zoom * (newDistance - oldDistance)\n\t};\n\n\tfunction update() {\n\t\tvar self = this;\n\n\t\tif (!self.src) {\n\t\t\treturn\n\t\t}\n\n\t\tself.__oneTouchStart = function(touch) {\n\t\t\tself.touchX0 = Math.round(touch.x);\n\t\t\tself.touchY0 = Math.round(touch.y);\n\t\t};\n\n\t\tself.__oneTouchMove = function(touch) {\n\t\t\tvar xMove, yMove;\n\t\t\t// 计算单指移动的距离\n\t\t\tif (self.touchended) {\n\t\t\t\treturn self.updateCanvas()\n\t\t\t}\n\t\t\txMove = Math.round(touch.x - self.touchX0);\n\t\t\tyMove = Math.round(touch.y - self.touchY0);\n\n\t\t\tvar imgLeft = Math.round(self.rectX + xMove);\n\t\t\tvar imgTop = Math.round(self.rectY + yMove);\n\n\t\t\tself.outsideBound(imgLeft, imgTop);\n\n\t\t\tself.updateCanvas();\n\t\t};\n\n\t\tself.__twoTouchStart = function(touch0, touch1) {\n\t\t\tvar xMove, yMove, oldDistance;\n\n\t\t\tself.touchX1 = Math.round(self.rectX + self.scaleWidth / 2);\n\t\t\tself.touchY1 = Math.round(self.rectY + self.scaleHeight / 2);\n\n\t\t\t// 计算两指距离\n\t\t\txMove = Math.round(touch1.x - touch0.x);\n\t\t\tyMove = Math.round(touch1.y - touch0.y);\n\t\t\toldDistance = Math.round(Math.sqrt(xMove * xMove + yMove * yMove));\n\n\t\t\tself.oldDistance = oldDistance;\n\t\t};\n\n\t\tself.__twoTouchMove = function(touch0, touch1) {\n\t\t\tvar oldScale = self.oldScale;\n\t\t\tvar oldDistance = self.oldDistance;\n\t\t\tvar scale = self.scale;\n\t\t\tvar zoom = self.zoom;\n\n\t\t\tself.newScale = getNewScale(oldScale, oldDistance, zoom, touch0, touch1);\n\n\t\t\t//  设定缩放范围\n\t\t\tself.newScale <= 1 && (self.newScale = 1);\n\t\t\tself.newScale >= scale && (self.newScale = scale);\n\n\t\t\tself.scaleWidth = Math.round(self.newScale * self.baseWidth);\n\t\t\tself.scaleHeight = Math.round(self.newScale * self.baseHeight);\n\t\t\tvar imgLeft = Math.round(self.touchX1 - self.scaleWidth / 2);\n\t\t\tvar imgTop = Math.round(self.touchY1 - self.scaleHeight / 2);\n\n\t\t\tself.outsideBound(imgLeft, imgTop);\n\n\t\t\tself.updateCanvas();\n\t\t};\n\n\t\tself.__xtouchEnd = function() {\n\t\t\tself.oldScale = self.newScale;\n\t\t\tself.rectX = self.imgLeft;\n\t\t\tself.rectY = self.imgTop;\n\t\t};\n\t}\n\n\tvar handle = {\n\t\t//  图片手势初始监测\n\t\ttouchStart: function touchStart(e) {\n\t\t\tvar self = this;\n\t\t\tvar ref = e.touches;\n\t\t\tvar touch0 = ref[0];\n\t\t\tvar touch1 = ref[1];\n\n\t\t\tif (!self.src) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tsetTouchState(self, true, null, null);\n\n\t\t\t// 计算第一个触摸点的位置，并参照改点进行缩放\n\t\t\tself.__oneTouchStart(touch0);\n\n\t\t\t// 两指手势触发\n\t\t\tif (e.touches.length >= 2) {\n\t\t\t\tself.__twoTouchStart(touch0, touch1);\n\t\t\t}\n\t\t},\n\n\t\t//  图片手势动态缩放\n\t\ttouchMove: function touchMove(e) {\n\t\t\tvar self = this;\n\t\t\tvar ref = e.touches;\n\t\t\tvar touch0 = ref[0];\n\t\t\tvar touch1 = ref[1];\n\n\t\t\tif (!self.src) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tsetTouchState(self, null, true);\n\n\t\t\t// 单指手势时触发\n\t\t\tif (e.touches.length === 1) {\n\t\t\t\tself.__oneTouchMove(touch0);\n\t\t\t}\n\t\t\t// 两指手势触发\n\t\t\tif (e.touches.length >= 2) {\n\t\t\t\tself.__twoTouchMove(touch0, touch1);\n\t\t\t}\n\t\t},\n\n\t\ttouchEnd: function touchEnd(e) {\n\t\t\tvar self = this;\n\n\t\t\tif (!self.src) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tsetTouchState(self, false, false, true);\n\t\t\tself.__xtouchEnd();\n\t\t}\n\t};\n\n\tfunction cut() {\n\t\tvar self = this;\n\t\tvar boundWidth = self.width; // 裁剪框默认宽度，即整个画布宽度\n\t\tvar boundHeight = self.height;\n\t\t// 裁剪框默认高度，即整个画布高度\n\t\tvar ref = self.cut;\n\t\tvar x = ref.x;\n\t\tif (x === void 0) x = 0;\n\t\tvar y = ref.y;\n\t\tif (y === void 0) y = 0;\n\t\tvar width = ref.width;\n\t\tif (width === void 0) width = boundWidth;\n\t\tvar height = ref.height;\n\t\tif (height === void 0) height = boundHeight;\n\n\t\t/**\n\t\t * 设置边界\n\t\t * @param imgLeft 图片左上角横坐标值\n\t\t * @param imgTop 图片左上角纵坐标值\n\t\t */\n\t\tself.outsideBound = function(imgLeft, imgTop) {\n\t\t\tself.imgLeft = imgLeft >= x ?\n\t\t\t\tx :\n\t\t\t\tself.scaleWidth + imgLeft - x <= width ?\n\t\t\t\tx + width - self.scaleWidth :\n\t\t\t\timgLeft;\n\n\t\t\tself.imgTop = imgTop >= y ?\n\t\t\t\ty :\n\t\t\t\tself.scaleHeight + imgTop - y <= height ?\n\t\t\t\ty + height - self.scaleHeight :\n\t\t\t\timgTop;\n\t\t};\n\n\t\t/**\n\t\t * 设置边界样式\n\t\t * @param color\t边界颜色\n\t\t */\n\t\tself.setBoundStyle = function(ref) {\n\t\t\tif (ref === void 0) ref = {};\n\t\t\tvar color = ref.color;\n\t\t\tif (color === void 0) color = '#04b00f';\n\t\t\tvar mask = ref.mask;\n\t\t\tif (mask === void 0) mask = 'rgba(0, 0, 0, 0.3)';\n\t\t\tvar lineWidth = ref.lineWidth;\n\t\t\tif (lineWidth === void 0) lineWidth = 1;\n\n\t\t\tvar half = lineWidth / 2;\n\t\t\tvar boundOption = [{\n\t\t\t\t\tstart: {\n\t\t\t\t\t\tx: x - half,\n\t\t\t\t\t\ty: y + 10 - half\n\t\t\t\t\t},\n\t\t\t\t\tstep1: {\n\t\t\t\t\t\tx: x - half,\n\t\t\t\t\t\ty: y - half\n\t\t\t\t\t},\n\t\t\t\t\tstep2: {\n\t\t\t\t\t\tx: x + 10 - half,\n\t\t\t\t\t\ty: y - half\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tstart: {\n\t\t\t\t\t\tx: x - half,\n\t\t\t\t\t\ty: y + height - 10 + half\n\t\t\t\t\t},\n\t\t\t\t\tstep1: {\n\t\t\t\t\t\tx: x - half,\n\t\t\t\t\t\ty: y + height + half\n\t\t\t\t\t},\n\t\t\t\t\tstep2: {\n\t\t\t\t\t\tx: x + 10 - half,\n\t\t\t\t\t\ty: y + height + half\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tstart: {\n\t\t\t\t\t\tx: x + width - 10 + half,\n\t\t\t\t\t\ty: y - half\n\t\t\t\t\t},\n\t\t\t\t\tstep1: {\n\t\t\t\t\t\tx: x + width + half,\n\t\t\t\t\t\ty: y - half\n\t\t\t\t\t},\n\t\t\t\t\tstep2: {\n\t\t\t\t\t\tx: x + width + half,\n\t\t\t\t\t\ty: y + 10 - half\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tstart: {\n\t\t\t\t\t\tx: x + width + half,\n\t\t\t\t\t\ty: y + height - 10 + half\n\t\t\t\t\t},\n\t\t\t\t\tstep1: {\n\t\t\t\t\t\tx: x + width + half,\n\t\t\t\t\t\ty: y + height + half\n\t\t\t\t\t},\n\t\t\t\t\tstep2: {\n\t\t\t\t\t\tx: x + width - 10 + half,\n\t\t\t\t\t\ty: y + height + half\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t];\n\n\t\t\t// 绘制半透明层\n\t\t\tself.ctx.beginPath();\n\t\t\tself.ctx.setFillStyle(mask);\n\t\t\tself.ctx.fillRect(0, 0, x, boundHeight);\n\t\t\tself.ctx.fillRect(x, 0, width, y);\n\t\t\tself.ctx.fillRect(x, y + height, width, boundHeight - y - height);\n\t\t\tself.ctx.fillRect(x + width, 0, boundWidth - x - width, boundHeight);\n\t\t\tself.ctx.fill();\n\n\t\t\tboundOption.forEach(function(op) {\n\t\t\t\tself.ctx.beginPath();\n\t\t\t\tself.ctx.setStrokeStyle(color);\n\t\t\t\tself.ctx.setLineWidth(lineWidth);\n\t\t\t\tself.ctx.moveTo(op.start.x, op.start.y);\n\t\t\t\tself.ctx.lineTo(op.step1.x, op.step1.y);\n\t\t\t\tself.ctx.lineTo(op.step2.x, op.step2.y);\n\t\t\t\tself.ctx.stroke();\n\t\t\t});\n\t\t};\n\t}\n\n\tvar version = \"1.3.9\";\n\n\tvar WeCropper = function WeCropper(params) {\n\t\tvar self = this;\n\t\tvar _default = {};\n\n\t\tvalidator(self, DEFAULT);\n\n\t\tObject.keys(DEFAULT).forEach(function(key) {\n\t\t\t_default[key] = DEFAULT[key].default;\n\t\t});\n\t\tObject.assign(self, _default, params);\n\n\t\tself.prepare();\n\t\tself.attachPage();\n\t\tself.createCtx();\n\t\tself.observer();\n\t\tself.cutt();\n\t\tself.methods();\n\t\tself.init();\n\t\tself.update();\n\n\t\treturn self\n\t};\n\n\tWeCropper.prototype.init = function init() {\n\t\tvar self = this;\n\t\tvar src = self.src;\n\n\t\tself.version = version;\n\n\t\ttypeof self.onReady === 'function' && self.onReady(self.ctx, self);\n\n\t\tif (src) {\n\t\t\tself.pushOrign(src);\n\t\t} else {\n\t\t\tself.updateCanvas();\n\t\t}\n\t\tsetTouchState(self, false, false, false);\n\n\t\tself.oldScale = 1;\n\t\tself.newScale = 1;\n\n\t\treturn self\n\t};\n\n\tObject.assign(WeCropper.prototype, handle);\n\n\tWeCropper.prototype.prepare = prepare;\n\tWeCropper.prototype.observer = observer;\n\tWeCropper.prototype.methods = methods;\n\tWeCropper.prototype.cutt = cut;\n\tWeCropper.prototype.update = update;\n\n\treturn WeCropper;\n\n})));\n"
  },
  {
    "path": "uview-ui/components/u-back-top/u-back-top.vue",
    "content": "<template>\n\t<view @tap=\"backToTop\" class=\"u-back-top\" :class=\"['u-back-top--mode--' + mode]\" :style=\"[{\n\t\tbottom: bottom + 'rpx',\n\t\tright: right + 'rpx',\n\t\tborderRadius: mode == 'circle' ? '10000rpx' : '8rpx',\n\t\tzIndex: uZIndex,\n\t\topacity: opacity\n\t}, customStyle]\">\n\t\t<view class=\"u-back-top__content\" v-if=\"!$slots.default && !$slots.$default\">\n\t\t\t<u-icon @click=\"backToTop\" :name=\"icon\" :custom-style=\"iconStyle\"></u-icon>\n\t\t\t<view class=\"u-back-top__content__tips\">\n\t\t\t\t{{tips}}\n\t\t\t</view>\n\t\t</view>\n\t\t<slot v-else />\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tname: 'u-back-top',\n\t\tprops: {\n\t\t\t// 返回顶部的形状，circle-圆形，square-方形\n\t\t\tmode: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'circle'\n\t\t\t},\n\t\t\t// 自定义图标\n\t\t\ticon: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'arrow-upward'\n\t\t\t},\n\t\t\t// 提示文字\n\t\t\ttips: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 返回顶部滚动时间\n\t\t\tduration: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 100\n\t\t\t},\n\t\t\t// 滚动距离\n\t\t\tscrollTop: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 0\n\t\t\t},\n\t\t\t// 距离顶部多少距离显示，单位rpx\n\t\t\ttop: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 400\n\t\t\t},\n\t\t\t// 返回顶部按钮到底部的距离，单位rpx\n\t\t\tbottom: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 200\n\t\t\t},\n\t\t\t// 返回顶部按钮到右边的距离，单位rpx\n\t\t\tright: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 40\n\t\t\t},\n\t\t\t// 层级\n\t\t\tzIndex: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: '9'\n\t\t\t},\n\t\t\t// 图标的样式，对象形式\n\t\t\ticonStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcolor: '#909399',\n\t\t\t\t\t\tfontSize: '38rpx'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 整个组件的样式\n\t\t\tcustomStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault() {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\tshowBackTop(nVal, oVal) {\n\t\t\t\t// 当组件的显示与隐藏状态发生跳变时，修改组件的层级和不透明度\n\t\t\t\t// 让组件有显示和消失的动画效果，如果用v-if控制组件状态，将无设置动画效果\n\t\t\t\tif(nVal) {\n\t\t\t\t\tthis.uZIndex = this.zIndex;\n\t\t\t\t\tthis.opacity = 1;\n\t\t\t\t} else {\n\t\t\t\t\tthis.uZIndex = -1;\n\t\t\t\t\tthis.opacity = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tshowBackTop() {\n\t\t\t\t// 由于scrollTop为页面的滚动距离，默认为px单位，这里将用于传入的top(rpx)值\n\t\t\t\t// 转为px用于比较，如果滚动条到顶的距离大于设定的距离，就显示返回顶部的按钮\n\t\t\t\treturn this.scrollTop > uni.upx2px(this.top);\n\t\t\t},\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\t// 不透明度，为了让组件有一个显示和隐藏的过渡动画\n\t\t\t\topacity: 0,\n\t\t\t\t// 组件的z-index值，隐藏时设置为-1，就会看不到\n\t\t\t\tuZIndex: -1\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tbackToTop() {\n\t\t\t\tuni.pageScrollTo({\n\t\t\t\t\tscrollTop: 0,\n\t\t\t\t\tduration: this.duration\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-back-top {\n\t\twidth: 80rpx;\n\t\theight: 80rpx;\n\t\tposition: fixed;\n\t\tz-index: 9;\n\t\t@include vue-flex;\n\t\tflex-direction: column;\n\t\tjustify-content: center;\n\t\tbackground-color: #E1E1E1;\n\t\tcolor: $u-content-color;\n\t\talign-items: center;\n\t\ttransition: opacity 0.4s;\n\t\t\n\t\t&__content {\n\t\t\t@include vue-flex;\n\t\t\tflex-direction: column;\n\t\t\talign-items: center;\n\t\t\t\n\t\t\t&__tips {\n\t\t\t\tfont-size: 24rpx;\n\t\t\t\ttransform: scale(0.8);\n\t\t\t\tline-height: 1;\n\t\t\t}\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-badge/u-badge.vue",
    "content": "<template>\n\t<view v-if=\"show\" class=\"u-badge\" :class=\"[\n\t\t\tisDot ? 'u-badge-dot' : '', \n\t\t\tsize == 'mini' ? 'u-badge-mini' : '',\n\t\t\ttype ? 'u-badge--bg--' + type : ''\n\t\t]\" :style=\"[{\n\t\t\ttop: offset[0] + 'rpx',\n\t\t\tright: offset[1] + 'rpx',\n\t\t\tfontSize: fontSize + 'rpx',\n\t\t\tposition: absolute ? 'absolute' : 'static',\n\t\t\tcolor: color,\n\t\t\tbackgroundColor: bgColor\n\t\t}, boxStyle]\"\n\t>\n\t\t{{showText}}\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * badge 角标\n\t * @description 本组件一般用于展示头像的地方，如个人中心，或者评论列表页的用户头像展示等场所。\n\t * @tutorial https://www.uviewui.com/components/badge.html\n\t * @property {String Number} count 展示的数字，大于 overflowCount 时显示为 ${overflowCount}+，为0且show-zero为false时隐藏\n\t * @property {Boolean} is-dot 不展示数字，只有一个小点（默认false）\n\t * @property {Boolean} absolute 组件是否绝对定位，为true时，offset参数才有效（默认true）\n\t * @property {String Number} overflow-count 展示封顶的数字值（默认99）\n\t * @property {String} type 使用预设的背景颜色（默认error）\n\t * @property {Boolean} show-zero 当数值为 0 时，是否展示 Badge（默认false）\n\t * @property {String} size Badge的尺寸，设为mini会得到小一号的Badge（默认default）\n\t * @property {Array} offset 设置badge的位置偏移，格式为 [x, y]，也即设置的为top和right的值，单位rpx。absolute为true时有效（默认[20, 20]）\n\t * @property {String} color 字体颜色（默认#ffffff）\n\t * @property {String} bgColor 背景颜色，优先级比type高，如设置，type参数会失效\n\t * @property {Boolean} is-center 组件中心点是否和父组件右上角重合，优先级比offset高，如设置，offset参数会失效（默认false）\n\t * @example <u-badge type=\"error\" count=\"7\"></u-badge>\n\t */\n\texport default {\n\t\tname: 'u-badge',\n\t\tprops: {\n\t\t\t// primary,warning,success,error,info\n\t\t\ttype: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'error'\n\t\t\t},\n\t\t\t// default, mini\n\t\t\tsize: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'default'\n\t\t\t},\n\t\t\t//是否是圆点\n\t\t\tisDot: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 显示的数值内容\n\t\t\tcount: {\n\t\t\t\ttype: [Number, String],\n\t\t\t},\n\t\t\t// 展示封顶的数字值\n\t\t\toverflowCount: {\n\t\t\t\ttype: Number,\n\t\t\t\tdefault: 99\n\t\t\t},\n\t\t\t// 当数值为 0 时，是否展示 Badge\n\t\t\tshowZero: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 位置偏移\n\t\t\toffset: {\n\t\t\t\ttype: Array,\n\t\t\t\tdefault: () => {\n\t\t\t\t\treturn [20, 20]\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 是否开启绝对定位，开启了offset才会起作用\n\t\t\tabsolute: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 字体大小\n\t\t\tfontSize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: '24'\n\t\t\t},\n\t\t\t// 字体演示\n\t\t\tcolor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#ffffff'\n\t\t\t},\n\t\t\t// badge的背景颜色\n\t\t\tbgColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 是否让badge组件的中心点和父组件右上角重合，配置的话，offset将会失效\n\t\t\tisCenter: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\t// 是否将badge中心与父组件右上角重合\n\t\t\tboxStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\tif(this.isCenter) {\n\t\t\t\t\tstyle.top = 0;\n\t\t\t\t\tstyle.right = 0;\n\t\t\t\t\t// Y轴-50%，意味着badge向上移动了badge自身高度一半，X轴50%，意味着向右移动了自身宽度一半\n\t\t\t\t\tstyle.transform = \"translateY(-50%) translateX(50%)\";\n\t\t\t\t} else {\n\t\t\t\t\tstyle.top = this.offset[0] + 'rpx';\n\t\t\t\t\tstyle.right = this.offset[1] + 'rpx';\n\t\t\t\t\tstyle.transform = \"translateY(0) translateX(0)\";\n\t\t\t\t}\n\t\t\t\t// 如果尺寸为mini，后接上scale()\n\t\t\t\tif(this.size == 'mini') {\n\t\t\t\t\tstyle.transform = style.transform + \" scale(0.8)\";\n\t\t\t\t}\n\t\t\t\treturn style;\n\t\t\t},\n\t\t\t// isDot类型时，不显示文字\n\t\t\tshowText() {\n\t\t\t\tif(this.isDot) return '';\n\t\t\t\telse {\n\t\t\t\t\tif(this.count > this.overflowCount) return `${this.overflowCount}+`;\n\t\t\t\t\telse return this.count;\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 是否显示组件\n\t\t\tshow() {\n\t\t\t\t// 如果count的值为0，并且showZero设置为false，不显示组件\n\t\t\t\tif(this.count == 0 && this.showZero == false) return false;\n\t\t\t\telse return true;\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-badge {\n\t\t/* #ifndef APP-NVUE */\n\t\tdisplay: inline-flex;\n\t\t/* #endif */\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\tline-height: 24rpx;\n\t\tpadding: 4rpx 8rpx;\n\t\tborder-radius: 100rpx;\n\t\tz-index: 9;\n\t\t\n\t\t&--bg--primary {\n\t\t\tbackground-color: $u-type-primary;\n\t\t}\n\t\t\n\t\t&--bg--error {\n\t\t\tbackground-color: $u-type-error;\n\t\t}\n\t\t\n\t\t&--bg--success {\n\t\t\tbackground-color: $u-type-success;\n\t\t}\n\t\t\n\t\t&--bg--info {\n\t\t\tbackground-color: $u-type-info;\n\t\t}\n\t\t\n\t\t&--bg--warning {\n\t\t\tbackground-color: $u-type-warning;\n\t\t}\n\t}\n\t\n\t.u-badge-dot {\n\t\theight: 16rpx;\n\t\twidth: 16rpx;\n\t\tborder-radius: 100rpx;\n\t\tline-height: 1;\n\t}\n\t\n\t.u-badge-mini {\n\t\ttransform: scale(0.8);\n\t\ttransform-origin: center center;\n\t}\n\t\n\t// .u-primary {\n\t// \tbackground: $u-type-primary;\n\t// \tcolor: #fff;\n\t// }\n\t\n\t// .u-error {\n\t// \tbackground: $u-type-error;\n\t// \tcolor: #fff;\n\t// }\n\t\n\t// .u-warning {\n\t// \tbackground: $u-type-warning;\n\t// \tcolor: #fff;\n\t// }\n\t\n\t// .u-success {\n\t// \tbackground: $u-type-success;\n\t// \tcolor: #fff;\n\t// }\n\t\n\t// .u-black {\n\t// \tbackground: #585858;\n\t// \tcolor: #fff;\n\t// }\n\t\n\t.u-info {\n\t\tbackground-color: $u-type-info;\n\t\tcolor: #fff;\n\t}\n</style>"
  },
  {
    "path": "uview-ui/components/u-button/u-button.vue",
    "content": "<template>\n\t<button\n\t\tid=\"u-wave-btn\"\n\t\tclass=\"u-btn u-line-1 u-fix-ios-appearance\"\n\t\t:class=\"[\n\t\t\t'u-size-' + size,\n\t\t\tplain ? 'u-btn--' + type + '--plain' : '',\n\t\t\tloading ? 'u-loading' : '',\n\t\t\tshape == 'circle' ? 'u-round-circle' : '',\n\t\t\thairLine ? showHairLineBorder : 'u-btn--bold-border',\n\t\t\t'u-btn--' + type,\n\t\t\tdisabled ? `u-btn--${type}--disabled` : '',\n\t\t]\"\n\t\t:hover-start-time=\"Number(hoverStartTime)\"\n\t\t:hover-stay-time=\"Number(hoverStayTime)\"\n\t\t:disabled=\"disabled\"\n\t\t:form-type=\"formType\"\n\t\t:open-type=\"openType\"\n\t\t:app-parameter=\"appParameter\"\n\t\t:hover-stop-propagation=\"hoverStopPropagation\"\n\t\t:send-message-title=\"sendMessageTitle\"\n\t\tsend-message-path=\"sendMessagePath\"\n\t\t:lang=\"lang\"\n\t\t:data-name=\"dataName\"\n\t\t:session-from=\"sessionFrom\"\n\t\t:send-message-img=\"sendMessageImg\"\n\t\t:show-message-card=\"showMessageCard\"\n\t\t@getphonenumber=\"getphonenumber\"\n\t\t@getuserinfo=\"getuserinfo\"\n\t\t@error=\"error\"\n\t\t@opensetting=\"opensetting\"\n\t\t@launchapp=\"launchapp\"\n\t\t:style=\"[customStyle, {\n\t\t\toverflow: ripple ? 'hidden' : 'visible'\n\t\t}]\"\n\t\t@tap.stop=\"click($event)\"\n\t\t:hover-class=\"getHoverClass\"\n\t\t:loading=\"loading\"\n\t>\n\t\t<slot></slot>\n\t\t<view\n\t\t\tv-if=\"ripple\"\n\t\t\tclass=\"u-wave-ripple\"\n\t\t\t:class=\"[waveActive ? 'u-wave-active' : '']\"\n\t\t\t:style=\"{\n\t\t\t\ttop: rippleTop + 'px',\n\t\t\t\tleft: rippleLeft + 'px',\n\t\t\t\twidth: fields.targetWidth + 'px',\n\t\t\t\theight: fields.targetWidth + 'px',\n\t\t\t\t'background-color': rippleBgColor || 'rgba(0, 0, 0, 0.15)'\n\t\t\t}\"\n\t\t></view>\n\t</button>\n</template>\n\n<script>\n/**\n * button 按钮\n * @description Button 按钮\n * @tutorial https://www.uviewui.com/components/button.html\n * @property {String} size 按钮的大小\n * @property {Boolean} ripple 是否开启点击水波纹效果\n * @property {String} ripple-bg-color 水波纹的背景色，ripple为true时有效\n * @property {String} type 按钮的样式类型\n * @property {Boolean} plain 按钮是否镂空，背景色透明\n * @property {Boolean} disabled 是否禁用\n * @property {Boolean} hair-line 是否显示按钮的细边框(默认true)\n * @property {Boolean} shape 按钮外观形状，见文档说明\n * @property {Boolean} loading 按钮名称前是否带 loading 图标(App-nvue 平台，在 ios 上为雪花，Android上为圆圈)\n * @property {String} form-type 用于 <form> 组件，点击分别会触发 <form> 组件的 submit/reset 事件\n * @property {String} open-type 开放能力\n * @property {String} data-name 额外传参参数，用于小程序的data-xxx属性，通过target.dataset.name获取\n * @property {String} hover-class 指定按钮按下去的样式类。当 hover-class=\"none\" 时，没有点击态效果(App-nvue 平台暂不支持)\n * @property {Number} hover-start-time 按住后多久出现点击态，单位毫秒\n * @property {Number} hover-stay-time 手指松开后点击态保留时间，单位毫秒\n * @property {Object} custom-style 对按钮的自定义样式，对象形式，见文档说明\n * @event {Function} click 按钮点击\n * @event {Function} getphonenumber open-type=\"getPhoneNumber\"时有效\n * @event {Function} getuserinfo 用户点击该按钮时，会返回获取到的用户信息，从返回参数的detail中获取到的值同uni.getUserInfo\n * @event {Function} error 当使用开放能力时，发生错误的回调\n * @event {Function} opensetting 在打开授权设置页并关闭后回调\n * @event {Function} launchapp 打开 APP 成功的回调\n * @example <u-button>月落</u-button>\n */\nexport default {\n\tname: 'u-button',\n\tprops: {\n\t\t// 是否细边框\n\t\thairLine: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 按钮的预置样式，default，primary，error，warning，success\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tdefault: 'default'\n\t\t},\n\t\t// 按钮尺寸，default，medium，mini\n\t\tsize: {\n\t\t\ttype: String,\n\t\t\tdefault: 'default'\n\t\t},\n\t\t// 按钮形状，circle（两边为半圆），square（带圆角）\n\t\tshape: {\n\t\t\ttype: String,\n\t\t\tdefault: 'square'\n\t\t},\n\t\t// 按钮是否镂空\n\t\tplain: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 是否禁止状态\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 是否加载中\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 开放能力，具体请看uniapp稳定关于button组件部分说明\n\t\t// https://uniapp.dcloud.io/component/button\n\t\topenType: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 用于 <form> 组件，点击分别会触发 <form> 组件的 submit/reset 事件\n\t\t// 取值为submit（提交表单），reset（重置表单）\n\t\tformType: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 打开 APP 时，向 APP 传递的参数，open-type=launchApp时有效\n\t\t// 只微信小程序、QQ小程序有效\n\t\tappParameter: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 指定是否阻止本节点的祖先节点出现点击态，微信小程序有效\n\t\thoverStopPropagation: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 指定返回用户信息的语言，zh_CN 简体中文，zh_TW 繁体中文，en 英文。只微信小程序有效\n\t\tlang: {\n\t\t\ttype: String,\n\t\t\tdefault: 'en'\n\t\t},\n\t\t// 会话来源，open-type=\"contact\"时有效。只微信小程序有效\n\t\tsessionFrom: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 会话内消息卡片标题，open-type=\"contact\"时有效\n\t\t// 默认当前标题，只微信小程序有效\n\t\tsendMessageTitle: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 会话内消息卡片点击跳转小程序路径，open-type=\"contact\"时有效\n\t\t// 默认当前分享路径，只微信小程序有效\n\t\tsendMessagePath: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 会话内消息卡片图片，open-type=\"contact\"时有效\n\t\t// 默认当前页面截图，只微信小程序有效\n\t\tsendMessageImg: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 是否显示会话内消息卡片，设置此参数为 true，用户进入客服会话会在右下角显示\"可能要发送的小程序\"提示，\n\t\t// 用户点击后可以快速发送小程序消息，open-type=\"contact\"时有效\n\t\tshowMessageCard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 手指按（触摸）按钮时按钮时的背景颜色\n\t\thoverBgColor: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 水波纹的背景颜色\n\t\trippleBgColor: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 是否开启水波纹效果\n\t\tripple: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 按下的类名\n\t\thoverClass: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 自定义样式，对象形式\n\t\tcustomStyle: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t\t// 额外传参参数，用于小程序的data-xxx属性，通过target.dataset.name获取\n\t\tdataName: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 节流，一定时间内只能触发一次\n\t\tthrottleTime: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 1000\n\t\t},\n\t\t// 按住后多久出现点击态，单位毫秒\n\t\thoverStartTime: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 20\n\t\t},\n\t\t// 手指松开后点击态保留时间，单位毫秒\n\t\thoverStayTime: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 150\n\t\t},\n\t},\n\tcomputed: {\n\t\t// 当没有传bgColor变量时，按钮按下去的颜色类名\n\t\tgetHoverClass() {\n\t\t\t// 如果开启水波纹效果，则不启用hover-class效果\n\t\t\tif (this.loading || this.disabled || this.ripple || this.hoverClass) return '';\n\t\t\tlet hoverClass = '';\n\t\t\thoverClass = this.plain ? 'u-' + this.type + '-plain-hover' : 'u-' + this.type + '-hover';\n\t\t\treturn hoverClass;\n\t\t},\n\t\t// 在'primary', 'success', 'error', 'warning'类型下，不显示边框，否则会造成四角有毛刺现象\n\t\tshowHairLineBorder() {\n\t\t\tif (['primary', 'success', 'error', 'warning'].indexOf(this.type) >= 0 && !this.plain) {\n\t\t\t\treturn '';\n\t\t\t} else {\n\t\t\t\treturn 'u-hairline-border';\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\trippleTop: 0, // 水波纹的起点Y坐标到按钮上边界的距离\n\t\t\trippleLeft: 0, // 水波纹起点X坐标到按钮左边界的距离\n\t\t\tfields: {}, // 波纹按钮节点信息\n\t\t\twaveActive: false // 激活水波纹\n\t\t};\n\t},\n\tmethods: {\n\t\t// 按钮点击\n\t\tclick(e) {\n\t\t\t// 进行节流控制，每this.throttle毫秒内，只在开始处执行\n\t\t\tthis.$u.throttle(() => {\n\t\t\t\t// 如果按钮时disabled和loading状态，不触发水波纹效果\n\t\t\t\tif (this.loading === true || this.disabled === true) return;\n\t\t\t\t// 是否开启水波纹效果\n\t\t\t\tif (this.ripple) {\n\t\t\t\t\t// 每次点击时，移除上一次的类，再次添加，才能触发动画效果\n\t\t\t\t\tthis.waveActive = false;\n\t\t\t\t\tthis.$nextTick(function() {\n\t\t\t\t\t\tthis.getWaveQuery(e);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis.$emit('click', e);\n\t\t\t}, this.throttleTime);\n\t\t},\n\t\t// 查询按钮的节点信息\n\t\tgetWaveQuery(e) {\n\t\t\tthis.getElQuery().then(res => {\n\t\t\t\t// 查询返回的是一个数组节点\n\t\t\t\tlet data = res[0];\n\t\t\t\t// 查询不到节点信息，不操作\n\t\t\t\tif (!data.width || !data.width) return;\n\t\t\t\t// 水波纹的最终形态是一个正方形(通过border-radius让其变为一个圆形)，这里要保证正方形的边长等于按钮的最长边\n\t\t\t\t// 最终的方形（变换后的圆形）才能覆盖整个按钮\n\t\t\t\tdata.targetWidth = data.height > data.width ? data.height : data.width;\n\t\t\t\tif (!data.targetWidth) return;\n\t\t\t\tthis.fields = data;\n\t\t\t\tlet touchesX = '',\n\t\t\t\t\ttouchesY = '';\n\t\t\t\t// #ifdef MP-BAIDU\n\t\t\t\ttouchesX = e.changedTouches[0].clientX;\n\t\t\t\ttouchesY = e.changedTouches[0].clientY;\n\t\t\t\t// #endif\n\t\t\t\t// #ifdef MP-ALIPAY\n\t\t\t\ttouchesX = e.detail.clientX;\n\t\t\t\ttouchesY = e.detail.clientY;\n\t\t\t\t// #endif\n\t\t\t\t// #ifndef MP-BAIDU || MP-ALIPAY\n\t\t\t\ttouchesX = e.touches[0].clientX;\n\t\t\t\ttouchesY = e.touches[0].clientY;\n\t\t\t\t// #endif\n\t\t\t\t// 获取触摸点相对于按钮上边和左边的x和y坐标，原理是通过屏幕的触摸点（touchesY），减去按钮的上边界data.top\n\t\t\t\t// 但是由于`transform-origin`默认是center，所以这里再减去半径才是水波纹view应该的位置\n\t\t\t\t// 总的来说，就是把水波纹的矩形（变换后的圆形）的中心点，移动到我们的触摸点位置\n\t\t\t\tthis.rippleTop = touchesY - data.top - data.targetWidth / 2;\n\t\t\t\tthis.rippleLeft = touchesX - data.left - data.targetWidth / 2;\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.waveActive = true;\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\t// 获取节点信息\n\t\tgetElQuery() {\n\t\t\treturn new Promise(resolve => {\n\t\t\t\tlet queryInfo = '';\n\t\t\t\t// 获取元素节点信息，请查看uniapp相关文档\n\t\t\t\t// https://uniapp.dcloud.io/api/ui/nodes-info?id=nodesrefboundingclientrect\n\t\t\t\tqueryInfo = uni.createSelectorQuery().in(this);\n\t\t\t\t//#ifdef MP-ALIPAY\n\t\t\t\tqueryInfo = uni.createSelectorQuery();\n\t\t\t\t//#endif\n\t\t\t\tqueryInfo.select('.u-btn').boundingClientRect();\n\t\t\t\tqueryInfo.exec(data => {\n\t\t\t\t\tresolve(data);\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\t// 下面为对接uniapp官方按钮开放能力事件回调的对接\n\t\tgetphonenumber(res) {\n\t\t\tthis.$emit('getphonenumber', res);\n\t\t},\n\t\tgetuserinfo(res) {\n\t\t\tthis.$emit('getuserinfo', res);\n\t\t},\n\t\terror(res) {\n\t\t\tthis.$emit('error', res);\n\t\t},\n\t\topensetting(res) {\n\t\t\tthis.$emit('opensetting', res);\n\t\t},\n\t\tlaunchapp(res) {\n\t\t\tthis.$emit('launchapp', res);\n\t\t}\n\t}\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import '../../libs/css/style.components.scss';\n.u-btn::after {\n\tborder: none;\n}\n\n.u-btn {\n\tposition: relative;\n\tborder: 0;\n\t//border-radius: 10rpx;\n\t/* #ifndef APP-NVUE */\n\tdisplay: inline-flex;\t\t\n\t/* #endif */\n\t// 避免边框某些场景可能被“裁剪”，不能设置为hidden\n\toverflow: visible;\n\tline-height: 1;\n\t@include vue-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tcursor: pointer;\n\tpadding: 0 40rpx;\n\tz-index: 1;\n\tbox-sizing: border-box;\n\ttransition: all 0.15s;\n\t\n\t&--bold-border {\n\t\tborder: 1px solid #ffffff;\n\t}\n\t\n\t&--default {\n\t\tcolor: $u-content-color;\n\t\tborder-color: #c0c4cc;\n\t\tbackground-color: #ffffff;\n\t}\n\t\n\t&--primary {\n\t\tcolor: #ffffff;\n\t\tborder-color: $u-type-primary;\n\t\tbackground-color: $u-type-primary;\n\t}\n\t\n\t&--success {\n\t\tcolor: #ffffff;\n\t\tborder-color: $u-type-success;\n\t\tbackground-color: $u-type-success;\n\t}\n\t\n\t&--error {\n\t\tcolor: #ffffff;\n\t\tborder-color: $u-type-error;\n\t\tbackground-color: $u-type-error;\n\t}\n\t\n\t&--warning {\n\t\tcolor: #ffffff;\n\t\tborder-color: $u-type-warning;\n\t\tbackground-color: $u-type-warning;\n\t}\n\t\n\t&--default--disabled {\n\t\tcolor: #ffffff;\n\t\tborder-color: #e4e7ed;\n\t\tbackground-color: #ffffff;\n\t}\n\t\n\t&--primary--disabled {\n\t\tcolor: #ffffff!important;\n\t\tborder-color: $u-type-primary-disabled!important;\n\t\tbackground-color: $u-type-primary-disabled!important;\n\t}\n\t\n\t&--success--disabled {\n\t\tcolor: #ffffff!important;\n\t\tborder-color: $u-type-success-disabled!important;\n\t\tbackground-color: $u-type-success-disabled!important;\n\t}\n\t\n\t&--error--disabled {\n\t\tcolor: #ffffff!important;\n\t\tborder-color: $u-type-error-disabled!important;\n\t\tbackground-color: $u-type-error-disabled!important;\n\t}\n\t\n\t&--warning--disabled {\n\t\tcolor: #ffffff!important;\n\t\tborder-color: $u-type-warning-disabled!important;\n\t\tbackground-color: $u-type-warning-disabled!important;\n\t}\n\t\n\t&--primary--plain {\n\t\tcolor: $u-type-primary!important;\n\t\tborder-color: $u-type-primary-disabled!important;\n\t\tbackground-color: $u-type-primary-light!important;\n\t}\n\t\n\t&--success--plain {\n\t\tcolor: $u-type-success!important;\n\t\tborder-color: $u-type-success-disabled!important;\n\t\tbackground-color: $u-type-success-light!important;\n\t}\n\t\n\t&--error--plain {\n\t\tcolor: $u-type-error!important;\n\t\tborder-color: $u-type-error-disabled!important;\n\t\tbackground-color: $u-type-error-light!important;\n\t}\n\t\n\t&--warning--plain {\n\t\tcolor: $u-type-warning!important;\n\t\tborder-color: $u-type-warning-disabled!important;\n\t\tbackground-color: $u-type-warning-light!important;\n\t}\n}\n\n.u-hairline-border:after {\n\tcontent: ' ';\n\tposition: absolute;\n\tpointer-events: none;\n\t// 设置为border-box，意味着下面的scale缩小为0.5，实际上缩小的是伪元素的内容（border-box意味着内容不含border）\n\tbox-sizing: border-box;\n\t// 中心点作为变形(scale())的原点\n\t-webkit-transform-origin: 0 0;\n\ttransform-origin: 0 0;\n\tleft: 0;\n\ttop: 0;\n\twidth: 199.8%;\n\theight: 199.7%;\n\t-webkit-transform: scale(0.5, 0.5);\n\ttransform: scale(0.5, 0.5);\n\tborder: 1px solid currentColor;\n\tz-index: 1;\n}\n\n.u-wave-ripple {\n\tz-index: 0;\n\tposition: absolute;\n\tborder-radius: 100%;\n\tbackground-clip: padding-box;\n\tpointer-events: none;\n\tuser-select: none;\n\ttransform: scale(0);\n\topacity: 1;\n\ttransform-origin: center;\n}\n\n.u-wave-ripple.u-wave-active {\n\topacity: 0;\n\ttransform: scale(2);\n\ttransition: opacity 1s linear, transform 0.4s linear;\n}\n\n.u-round-circle {\n\tborder-radius: 100rpx;\n}\n\n.u-round-circle::after {\n\tborder-radius: 100rpx;\n}\n\n.u-loading::after {\n\tbackground-color: hsla(0, 0%, 100%, 0.35);\n}\n\n.u-size-default {\n\tfont-size: 30rpx;\n\theight: 80rpx;\n\tline-height: 80rpx;\n}\n\n.u-size-medium {\n\t/* #ifndef APP-NVUE */\n\tdisplay: inline-flex;\t\t\n\t/* #endif */\n\twidth: auto;\n\tfont-size: 26rpx;\n\theight: 70rpx;\n\tline-height: 70rpx;\n\tpadding: 0 80rpx;\n}\n\n.u-size-mini {\n\t/* #ifndef APP-NVUE */\n\tdisplay: inline-flex;\t\t\n\t/* #endif */\n\twidth: auto;\n\tfont-size: 22rpx;\n\tpadding-top: 1px;\n\theight: 50rpx;\n\tline-height: 50rpx;\n\tpadding: 0 20rpx;\n}\n\n.u-primary-plain-hover {\n\tcolor: #ffffff !important;\n\tbackground: $u-type-primary-dark !important;\n}\n\n.u-default-plain-hover {\n\tcolor: $u-type-primary-dark !important;\n\tbackground: $u-type-primary-light !important;\n}\n\n.u-success-plain-hover {\n\tcolor: #ffffff !important;\n\tbackground: $u-type-success-dark !important;\n}\n\n.u-warning-plain-hover {\n\tcolor: #ffffff !important;\n\tbackground: $u-type-warning-dark !important;\n}\n\n.u-error-plain-hover {\n\tcolor: #ffffff !important;\n\tbackground: $u-type-error-dark !important;\n}\n\n.u-info-plain-hover {\n\tcolor: #ffffff !important;\n\tbackground: $u-type-info-dark !important;\n}\n\n.u-default-hover {\n\tcolor: $u-type-primary-dark !important;\n\tborder-color: $u-type-primary-dark !important;\n\tbackground-color: $u-type-primary-light !important;\n}\n\n.u-primary-hover {\n\tbackground: $u-type-primary-dark !important;\n\tcolor: #fff;\n}\n\n.u-success-hover {\n\tbackground: $u-type-success-dark !important;\n\tcolor: #fff;\n}\n\n.u-info-hover {\n\tbackground: $u-type-info-dark !important;\n\tcolor: #fff;\n}\n\n.u-warning-hover {\n\tbackground: $u-type-warning-dark !important;\n\tcolor: #fff;\n}\n\n.u-error-hover {\n\tbackground: $u-type-error-dark !important;\n\tcolor: #fff;\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-calendar/u-calendar.vue",
    "content": "<template>\n\t<u-popup closeable :maskCloseAble=\"maskCloseAble\" mode=\"bottom\" :popup=\"false\" v-model=\"value\" length=\"auto\"\n\t :safeAreaInsetBottom=\"safeAreaInsetBottom\" @close=\"close\" :z-index=\"uZIndex\" :border-radius=\"borderRadius\" :closeable=\"closeable\">\n\t\t<view class=\"u-calendar\">\n\t\t\t<view class=\"u-calendar__header\">\n\t\t\t\t<view class=\"u-calendar__header__text\" v-if=\"!$slots['tooltip']\">\n\t\t\t\t\t{{toolTip}}\n\t\t\t\t</view>\n\t\t\t\t<slot v-else name=\"tooltip\" />\n\t\t\t</view>\n\t\t\t<view class=\"u-calendar__action u-flex u-row-center\">\n\t\t\t\t<view class=\"u-calendar__action__icon\">\n\t\t\t\t\t<u-icon v-if=\"changeYear\" name=\"arrow-left-double\" :color=\"yearArrowColor\" @click=\"changeYearHandler(0)\"></u-icon>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-calendar__action__icon\">\n\t\t\t\t\t<u-icon v-if=\"changeMonth\" name=\"arrow-left\" :color=\"monthArrowColor\" @click=\"changeMonthHandler(0)\"></u-icon>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-calendar__action__text\">{{ showTitle }}</view>\n\t\t\t\t<view class=\"u-calendar__action__icon\">\n\t\t\t\t\t<u-icon v-if=\"changeMonth\" name=\"arrow-right\" :color=\"monthArrowColor\" @click=\"changeMonthHandler(1)\"></u-icon>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-calendar__action__icon\">\n\t\t\t\t\t<u-icon v-if=\"changeYear\" name=\"arrow-right-double\" :color=\"yearArrowColor\" @click=\"changeYearHandler(1)\"></u-icon>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t\t<view class=\"u-calendar__week-day\">\n\t\t\t\t<view class=\"u-calendar__week-day__text\" v-for=\"(item, index) in weekDayZh\" :key=\"index\">{{item}}</view>\n\t\t\t</view>\n\t\t\t<view class=\"u-calendar__content\">\n\t\t\t\t<!-- 前置空白部分 -->\n\t\t\t\t<block v-for=\"(item, index) in weekdayArr\" :key=\"index\">\n\t\t\t\t\t<view class=\"u-calendar__content__item\"></view>\n\t\t\t\t</block>\n\t\t\t\t<view class=\"u-calendar__content__item\" :class=\"{\n\t\t\t\t\t'u-hover-class':openDisAbled(year,month,index+1),\n\t\t\t\t\t'u-calendar__content--start-date': (mode == 'range' && startDate==`${year}-${month}-${index+1}`) || mode== 'date',\n\t\t\t\t\t'u-calendar__content--end-date':(mode== 'range' && endDate==`${year}-${month}-${index+1}`) || mode == 'date'\n\t\t\t\t}\" :style=\"{backgroundColor: getColor(index,1)}\" v-for=\"(item, index) in daysArr\" :key=\"index\"\n\t\t\t\t @tap=\"dateClick(index)\">\n\t\t\t\t\t<view class=\"u-calendar__content__item__inner\" :style=\"{color: getColor(index,2)}\">\n\t\t\t\t\t\t<view>{{ index + 1 }}</view>\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"u-calendar__content__item__tips\" :style=\"{color:activeColor}\" v-if=\"mode== 'range' && startDate==`${year}-${month}-${index+1}` && startDate!=endDate\">{{startText}}</view>\n\t\t\t\t\t<view class=\"u-calendar__content__item__tips\" :style=\"{color:activeColor}\" v-if=\"mode== 'range' && endDate==`${year}-${month}-${index+1}`\">{{endText}}</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-calendar__content__bg-month\">{{month}}</view>\n\t\t\t</view>\n\t\t\t<view class=\"u-calendar__bottom\">\n\t\t\t\t<view class=\"u-calendar__bottom__choose\">\n\t\t\t\t\t<text>{{mode == 'date' ? activeDate : startDate}}</text>\n\t\t\t\t\t<text v-if=\"endDate\">至{{endDate}}</text>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-calendar__bottom__btn\">\n\t\t\t\t\t<u-button :type=\"btnType\" shape=\"circle\" size=\"default\" @click=\"btnFix(false)\">确定</u-button>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t</u-popup>\n</template>\n<script>\n\t/**\n\t * calendar 日历\n\t * @description 此组件用于单个选择日期，范围选择日期等，日历被包裹在底部弹起的容器中。\n\t * @tutorial http://uviewui.com/components/calendar.html\n\t * @property {String} mode 选择日期的模式，date-为单个日期，range-为选择日期范围\n\t * @property {Boolean} v-model 布尔值变量，用于控制日历的弹出与收起\n\t * @property {Boolean} safe-area-inset-bottom 是否开启底部安全区适配(默认false)\n\t * @property {Boolean} change-year 是否显示顶部的切换年份方向的按钮(默认true)\n\t * @property {Boolean} change-month 是否显示顶部的切换月份方向的按钮(默认true)\n\t * @property {String Number} max-year 可切换的最大年份(默认2050)\n\t * @property {String Number} min-year 可切换的最小年份(默认1950)\n\t * @property {String Number} min-date 最小可选日期(默认1950-01-01)\n\t * @property {String Number} max-date 最大可选日期(默认当前日期)\n\t * @property {String Number} 弹窗顶部左右两边的圆角值，单位rpx(默认20)\n\t * @property {Boolean} mask-close-able 是否允许通过点击遮罩关闭日历(默认true)\n\t * @property {String} month-arrow-color 月份切换按钮箭头颜色(默认#606266)\n\t * @property {String} year-arrow-color 年份切换按钮箭头颜色(默认#909399)\n\t * @property {String} color 日期字体的默认颜色(默认#303133)\n\t * @property {String} active-bg-color 起始/结束日期按钮的背景色(默认#2979ff)\n\t * @property {String Number} z-index 弹出时的z-index值(默认10075)\n\t * @property {String} active-color 起始/结束日期按钮的字体颜色(默认#ffffff)\n\t * @property {String} range-bg-color 起始/结束日期之间的区域的背景颜色(默认rgba(41,121,255,0.13))\n\t * @property {String} range-color 选择范围内字体颜色(默认#2979ff)\n\t * @property {String} start-text 起始日期底部的提示文字(默认 '开始')\n\t * @property {String} end-text 结束日期底部的提示文字(默认 '结束')\n\t * @property {String} btn-type 底部确定按钮的主题(默认 'primary')\n\t * @property {String} toolTip 顶部提示文字，如设置名为tooltip的slot，此参数将失效(默认 '选择日期')\n\t * @property {Boolean} closeable 是否显示右上角的关闭图标(默认true)\n\t * @example <u-calendar v-model=\"show\" :mode=\"mode\"></u-calendar>\n\t */\n\t\n\texport default {\n\t\tname: 'u-calendar',\n\t\tprops: {\n\t\t\tsafeAreaInsetBottom: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 是否允许通过点击遮罩关闭Picker\n\t\t\tmaskCloseAble: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 通过双向绑定控制组件的弹出与收起\n\t\t\tvalue: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 弹出的z-index值\n\t\t\tzIndex: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 0\n\t\t\t},\n\t\t\t// 是否允许切换年份\n\t\t\tchangeYear: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 是否允许切换月份\n\t\t\tchangeMonth: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// date-单个日期选择，range-开始日期+结束日期选择\n\t\t\tmode: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'date'\n\t\t\t},\n\t\t\t// 可切换的最大年份\n\t\t\tmaxYear: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 2050\n\t\t\t},\n\t\t\t// 可切换的最小年份\n\t\t\tminYear: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 1950\n\t\t\t},\n\t\t\t// 最小可选日期(不在范围内日期禁用不可选)\n\t\t\tminDate: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: '1950-01-01'\n\t\t\t},\n\t\t\t/**\n\t\t\t * 最大可选日期\n\t\t\t * 默认最大值为今天，之后的日期不可选\n\t\t\t * 2030-12-31\n\t\t\t * */\n\t\t\tmaxDate: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 弹窗顶部左右两边的圆角值\n\t\t\tborderRadius: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 20\n\t\t\t},\n\t\t\t// 月份切换按钮箭头颜色\n\t\t\tmonthArrowColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#606266'\n\t\t\t},\n\t\t\t// 年份切换按钮箭头颜色\n\t\t\tyearArrowColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#909399'\n\t\t\t},\n\t\t\t// 默认日期字体颜色\n\t\t\tcolor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#303133'\n\t\t\t},\n\t\t\t// 选中|起始结束日期背景色\n\t\t\tactiveBgColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#2979ff'\n\t\t\t},\n\t\t\t// 选中|起始结束日期字体颜色\n\t\t\tactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#ffffff'\n\t\t\t},\n\t\t\t// 范围内日期背景色\n\t\t\trangeBgColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'rgba(41,121,255,0.13)'\n\t\t\t}, \n\t\t\t// 范围内日期字体颜色\n\t\t\trangeColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#2979ff'\n\t\t\t},\n\t\t\t// mode=range时生效，起始日期自定义文案\n\t\t\tstartText: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '开始'\n\t\t\t},\n\t\t\t// mode=range时生效，结束日期自定义文案\n\t\t\tendText: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '结束'\n\t\t\t},\n\t\t\t//按钮样式类型\n\t\t\tbtnType: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'primary'\n\t\t\t},\n\t\t\t// 当前选中日期带选中效果\n\t\t\tisActiveCurrent: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 切换年月是否触发事件 mode=date时生效\n\t\t\tisChange: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 是否显示右上角的关闭图标\n\t\t\tcloseable: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 顶部的提示文字\n\t\t\ttoolTip: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '选择日期'\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\t// 星期几,值为1-7\n\t\t\t\tweekday: 1, \n\t\t\t\tweekdayArr:[],\n\t\t\t\t// 当前月有多少天\n\t\t\t\tdays: 0, \n\t\t\t\tdaysArr:[],\n\t\t\t\tshowTitle: '',\n\t\t\t\tyear: 2020,\n\t\t\t\tmonth: 0,\n\t\t\t\tday: 0,\n\t\t\t\tstartYear: 0,\n\t\t\t\tstartMonth: 0,\n\t\t\t\tstartDay: 0,\n\t\t\t\tendYear: 0,\n\t\t\t\tendMonth: 0,\n\t\t\t\tendDay: 0,\n\t\t\t\ttoday: '',\n\t\t\t\tactiveDate: '',\n\t\t\t\tstartDate: '',\n\t\t\t\tendDate: '',\n\t\t\t\tisStart: true,\n\t\t\t\tmin: null,\n\t\t\t\tmax: null,\n\t\t\t\tweekDayZh: ['日', '一', '二', '三', '四', '五', '六']\n\t\t\t};\n\t\t},\n\t\tcomputed: {\n\t\t\tdataChange() {\n\t\t\t\treturn `${this.mode}-${this.minDate}-${this.maxDate}`;\n\t\t\t},\n\t\t\tuZIndex() {\n\t\t\t\t// 如果用户有传递z-index值，优先使用\n\t\t\t\treturn this.zIndex ? this.zIndex : this.$u.zIndex.popup;\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\tdataChange(val) {\n\t\t\t\tthis.init()\n\t\t\t}\n\t\t},\n\t\tcreated() {\n\t\t\tthis.init()\n\t\t},\n\t\tmethods: {\n\t\t\tgetColor(index, type) {\n\t\t\t\tlet color = type == 1 ? '' : this.color;\n\t\t\t\tlet day = index + 1\n\t\t\t\tlet date = `${this.year}-${this.month}-${day}`\n\t\t\t\tlet timestamp = new Date(date.replace(/\\-/g, '/')).getTime();\n\t\t\t\tlet start = this.startDate.replace(/\\-/g, '/')\n\t\t\t\tlet end = this.endDate.replace(/\\-/g, '/')\n\t\t\t\tif ((this.isActiveCurrent && this.activeDate == date) || this.startDate == date || this.endDate == date) {\n\t\t\t\t\tcolor = type == 1 ? this.activeBgColor : this.activeColor;\n\t\t\t\t} else if (this.endDate && timestamp > new Date(start).getTime() && timestamp < new Date(end).getTime()) {\n\t\t\t\t\tcolor = type == 1 ? this.rangeBgColor : this.rangeColor;\n\t\t\t\t}\n\t\t\t\treturn color;\n\t\t\t},\n\t\t\tinit() {\n\t\t\t\tlet now = new Date();\n\t\t\t\tlet minDate = new Date(this.minDate);\n\t\t\t\tlet maxDate = new Date(this.maxDate);\n\t\t\t\tif (now < minDate) now = minDate;\n\t\t\t\tif (now > maxDate) now = maxDate;\n\t\t\t\tthis.year = now.getFullYear();\n\t\t\t\tthis.month = now.getMonth() + 1;\n\t\t\t\tthis.day = now.getDate();\n\t\t\t\tthis.today = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}`;\n\t\t\t\tthis.activeDate = this.today;\n\t\t\t\tthis.min = this.initDate(this.minDate);\n\t\t\t\tthis.max = this.initDate(this.maxDate || this.today);\n\t\t\t\tthis.startDate = \"\";\n\t\t\t\tthis.startYear = 0;\n\t\t\t\tthis.startMonth = 0;\n\t\t\t\tthis.startDay = 0;\n\t\t\t\tthis.endYear = 0;\n\t\t\t\tthis.endMonth = 0;\n\t\t\t\tthis.endDay = 0;\n\t\t\t\tthis.endDate = \"\";\n\t\t\t\tthis.isStart = true;\n\t\t\t\tthis.changeData();\n\t\t\t},\n\t\t\t//日期处理\n\t\t\tinitDate(date) {\n\t\t\t\tlet fdate = date.split('-');\n\t\t\t\treturn {\n\t\t\t\t\tyear: Number(fdate[0] || 1920),\n\t\t\t\t\tmonth: Number(fdate[1] || 1),\n\t\t\t\t\tday: Number(fdate[2] || 1)\n\t\t\t\t}\n\t\t\t},\n\t\t\topenDisAbled: function(year, month, day) {\n\t\t\t\tlet bool = true;\n\t\t\t\tlet date = `${year}/${month}/${day}`;\n\t\t\t\t// let today = this.today.replace(/\\-/g, '/');\n\t\t\t\tlet min = `${this.min.year}/${this.min.month}/${this.min.day}`;\n\t\t\t\tlet max = `${this.max.year}/${this.max.month}/${this.max.day}`;\n\t\t\t\tlet timestamp = new Date(date).getTime();\n\t\t\t\tif (timestamp >= new Date(min).getTime() && timestamp <= new Date(max).getTime()) {\n\t\t\t\t\tbool = false;\n\t\t\t\t}\n\t\t\t\treturn bool;\n\t\t\t},\n\t\t\tgenerateArray: function(start, end) {\n\t\t\t\treturn Array.from(new Array(end + 1).keys()).slice(start);\n\t\t\t},\n\t\t\tformatNum: function(num) {\n\t\t\t\treturn num < 10 ? '0' + num : num + '';\n\t\t\t},\n\t\t\t//一个月有多少天\n\t\t\tgetMonthDay(year, month) {\n\t\t\t\tlet days = new Date(year, month, 0).getDate();\n\t\t\t\treturn days;\n\t\t\t},\n\t\t\tgetWeekday(year, month) {\n\t\t\t\tlet date = new Date(`${year}/${month}/01 00:00:00`);\n\t\t\t\treturn date.getDay();\n\t\t\t},\n\t\t\tcheckRange(year) {\n\t\t\t\tlet overstep = false;\n\t\t\t\tif (year < this.minYear || year > this.maxYear) {\n\t\t\t\t\tuni.showToast({\n\t\t\t\t\t\ttitle: \"日期超出范围啦~\",\n\t\t\t\t\t\ticon: 'none'\n\t\t\t\t\t})\n\t\t\t\t\toverstep = true;\n\t\t\t\t}\n\t\t\t\treturn overstep;\n\t\t\t},\n\t\t\tchangeMonthHandler(isAdd) {\n\t\t\t\tif (isAdd) {\n\t\t\t\t\tlet month = this.month + 1;\n\t\t\t\t\tlet year = month > 12 ? this.year + 1 : this.year;\n\t\t\t\t\tif (!this.checkRange(year)) {\n\t\t\t\t\t\tthis.month = month > 12 ? 1 : month;\n\t\t\t\t\t\tthis.year = year;\n\t\t\t\t\t\tthis.changeData();\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tlet month = this.month - 1;\n\t\t\t\t\tlet year = month < 1 ? this.year - 1 : this.year;\n\t\t\t\t\tif (!this.checkRange(year)) {\n\t\t\t\t\t\tthis.month = month < 1 ? 12 : month;\n\t\t\t\t\t\tthis.year = year;\n\t\t\t\t\t\tthis.changeData();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tchangeYearHandler(isAdd) {\n\t\t\t\tlet year = isAdd ? this.year + 1 : this.year - 1;\n\t\t\t\tif (!this.checkRange(year)) {\n\t\t\t\t\tthis.year = year;\n\t\t\t\t\tthis.changeData();\n\t\t\t\t}\n\t\t\t},\n\t\t\tchangeData() {\n\t\t\t\tthis.days = this.getMonthDay(this.year, this.month);\n\t\t\t\tthis.daysArr=this.generateArray(1,this.days)\n\t\t\t\tthis.weekday = this.getWeekday(this.year, this.month);\n\t\t\t\tthis.weekdayArr=this.generateArray(1,this.weekday)\n\t\t\t\tthis.showTitle = `${this.year}年${this.month}月`;\n\t\t\t\tif (this.isChange && this.mode == 'date') {\n\t\t\t\t\tthis.btnFix(true);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdateClick: function(day) {\n\t\t\t\tday += 1;\n\t\t\t\tif (!this.openDisAbled(this.year, this.month, day)) {\n\t\t\t\t\tthis.day = day;\n\t\t\t\t\tlet date = `${this.year}-${this.month}-${day}`;\n\t\t\t\t\tif (this.mode == 'date') {\n\t\t\t\t\t\tthis.activeDate = date;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet compare = new Date(date.replace(/\\-/g, '/')).getTime() < new Date(this.startDate.replace(/\\-/g, '/')).getTime()\n\t\t\t\t\t\tif (this.isStart || compare) {\n\t\t\t\t\t\t\tthis.startDate = date;\n\t\t\t\t\t\t\tthis.startYear = this.year;\n\t\t\t\t\t\t\tthis.startMonth = this.month;\n\t\t\t\t\t\t\tthis.startDay = this.day;\n\t\t\t\t\t\t\tthis.endYear = 0;\n\t\t\t\t\t\t\tthis.endMonth = 0;\n\t\t\t\t\t\t\tthis.endDay = 0;\n\t\t\t\t\t\t\tthis.endDate = \"\";\n\t\t\t\t\t\t\tthis.activeDate = \"\";\n\t\t\t\t\t\t\tthis.isStart = false;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.endDate = date;\n\t\t\t\t\t\t\tthis.endYear = this.year;\n\t\t\t\t\t\t\tthis.endMonth = this.month;\n\t\t\t\t\t\t\tthis.endDay = this.day;\n\t\t\t\t\t\t\tthis.isStart = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tclose() {\n\t\t\t\t// 修改通过v-model绑定的父组件变量的值为false，从而隐藏日历弹窗\n\t\t\t\tthis.$emit('input', false);\n\t\t\t},\n\t\t\tgetWeekText(date) {\n\t\t\t\tdate = new Date(`${date.replace(/\\-/g, '/')} 00:00:00`);\n\t\t\t\tlet week = date.getDay();\n\t\t\t\treturn '星期' + ['日', '一', '二', '三', '四', '五', '六'][week];\n\t\t\t},\n\t\t\tbtnFix(show) {\n\t\t\t\tif (!show) {\n\t\t\t\t\tthis.close();\n\t\t\t\t}\n\t\t\t\tif (this.mode == 'date') {\n\t\t\t\t\tlet arr = this.activeDate.split('-')\n\t\t\t\t\tlet year = this.isChange ? this.year : Number(arr[0]);\n\t\t\t\t\tlet month = this.isChange ? this.month : Number(arr[1]);\n\t\t\t\t\tlet day = this.isChange ? this.day : Number(arr[2]);\n\t\t\t\t\t//当前月有多少天\n\t\t\t\t\tlet days = this.getMonthDay(year, month);\n\t\t\t\t\tlet result = `${year}-${this.formatNum(month)}-${this.formatNum(day)}`;\n\t\t\t\t\tlet weekText = this.getWeekText(result);\n\t\t\t\t\tlet isToday = false;\n\t\t\t\t\tif (`${year}-${month}-${day}` == this.today) {\n\t\t\t\t\t\t//今天\n\t\t\t\t\t\tisToday = true;\n\t\t\t\t\t}\n\t\t\t\t\tthis.$emit('change', {\n\t\t\t\t\t\tyear: year,\n\t\t\t\t\t\tmonth: month,\n\t\t\t\t\t\tday: day,\n\t\t\t\t\t\tdays: days,\n\t\t\t\t\t\tresult: result,\n\t\t\t\t\t\tweek: weekText,\n\t\t\t\t\t\tisToday: isToday,\n\t\t\t\t\t\t// switch: show //是否是切换年月操作\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif (!this.startDate || !this.endDate) return;\n\t\t\t\t\tlet startMonth = this.formatNum(this.startMonth);\n\t\t\t\t\tlet startDay = this.formatNum(this.startDay);\n\t\t\t\t\tlet startDate = `${this.startYear}-${startMonth}-${startDay}`;\n\t\t\t\t\tlet startWeek = this.getWeekText(startDate)\n\n\t\t\t\t\tlet endMonth = this.formatNum(this.endMonth);\n\t\t\t\t\tlet endDay = this.formatNum(this.endDay);\n\t\t\t\t\tlet endDate = `${this.endYear}-${endMonth}-${endDay}`;\n\t\t\t\t\tlet endWeek = this.getWeekText(endDate);\n\t\t\t\t\tthis.$emit('change', {\n\t\t\t\t\t\tstartYear: this.startYear,\n\t\t\t\t\t\tstartMonth: this.startMonth,\n\t\t\t\t\t\tstartDay: this.startDay,\n\t\t\t\t\t\tstartDate: startDate,\n\t\t\t\t\t\tstartWeek: startWeek,\n\t\t\t\t\t\tendYear: this.endYear,\n\t\t\t\t\t\tendMonth: this.endMonth,\n\t\t\t\t\t\tendDay: this.endDay,\n\t\t\t\t\t\tendDate: endDate,\n\t\t\t\t\t\tendWeek: endWeek\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style scoped lang=\"scss\">\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-calendar {\n\t\tcolor: $u-content-color;\n\t\t\n\t\t&__header {\n\t\t\twidth: 100%;\n\t\t\tbox-sizing: border-box;\n\t\t\tfont-size: 30rpx;\n\t\t\tbackground-color: #fff;\n\t\t\tcolor: $u-main-color;\n\t\t\t\n\t\t\t&__text {\n\t\t\t\tmargin-top: 30rpx;\n\t\t\t\tpadding: 0 60rpx;\n\t\t\t\t@include vue-flex;\n\t\t\t\tjustify-content: center;\n\t\t\t\talign-items: center;\n\t\t\t}\n\t\t}\n\t\t\n\t\t&__action {\n\t\t\tpadding: 40rpx 0 40rpx 0;\n\t\t\t\n\t\t\t&__icon {\n\t\t\t\tmargin: 0 16rpx;\n\t\t\t}\n\t\t\t\n\t\t\t&__text {\n\t\t\t\tpadding: 0 16rpx;\n\t\t\t\tcolor: $u-main-color;\n\t\t\t\tfont-size: 32rpx;\n\t\t\t\tline-height: 32rpx;\n\t\t\t\tfont-weight: bold;\n\t\t\t}\n\t\t}\n\t\n\t\t&__week-day {\n\t\t\t@include vue-flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tpadding: 6px 0;\n\t\t\toverflow: hidden;\n\t\t\t\n\t\t\t&__text {\n\t\t\t\tflex: 1;\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t}\n\t\n\t\t&__content {\n\t\t\twidth: 100%;\n\t\t\t@include vue-flex;\n\t\t\tflex-wrap: wrap;\n\t\t\tpadding: 6px 0;\n\t\t\tbox-sizing: border-box;\n\t\t\tbackground-color: #fff;\n\t\t\tposition: relative;\n\t\t\t\n\t\t\t&--end-date {\n\t\t\t\tborder-top-right-radius: 8rpx;\n\t\t\t\tborder-bottom-right-radius: 8rpx;\n\t\t\t}\n\t\t\t\n\t\t\t&--start-date {\n\t\t\t\tborder-top-left-radius: 8rpx;\n\t\t\t\tborder-bottom-left-radius: 8rpx;\n\t\t\t}\n\t\t\t\n\t\t\t&__item {\n\t\t\t\twidth: 14.2857%;\n\t\t\t\t@include vue-flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\tpadding: 6px 0;\n\t\t\t\toverflow: hidden;\n\t\t\t\tposition: relative;\n\t\t\t\tz-index: 2;\n\t\t\t\t\n\t\t\t\t&__inner {\n\t\t\t\t\theight: 84rpx;\n\t\t\t\t\t@include vue-flex;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\tflex-direction: column;\n\t\t\t\t\tfont-size: 32rpx;\n\t\t\t\t\tposition: relative;\n\t\t\t\t\tborder-radius: 50%;\n\t\t\t\t\t\n\t\t\t\t\t&__desc {\n\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t\tfont-size: 24rpx;\n\t\t\t\t\t\tline-height: 24rpx;\n\t\t\t\t\t\ttransform: scale(0.75);\n\t\t\t\t\t\ttransform-origin: center center;\n\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\tleft: 0;\n\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\tbottom: 2rpx;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t&__tips {\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\tfont-size: 24rpx;\n\t\t\t\t\tline-height: 24rpx;\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\tleft: 0;\n\t\t\t\t\ttransform: scale(0.8);\n\t\t\t\t\ttransform-origin: center center;\n\t\t\t\t\ttext-align: center;\n\t\t\t\t\tbottom: 8rpx;\n\t\t\t\t\tz-index: 2;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t&__bg-month {\n\t\t\t\tposition: absolute;\n\t\t\t\tfont-size: 130px;\n\t\t\t\tline-height: 130px;\n\t\t\t\tleft: 50%;\n\t\t\t\ttop: 50%;\n\t\t\t\ttransform: translate(-50%, -50%);\n\t\t\t\tcolor: #e4e7ed;\n\t\t\t\tz-index: 1;\n\t\t\t}\n\t\t}\n\t\n\t\t&__bottom {\n\t\t\twidth: 100%;\n\t\t\t@include vue-flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tflex-direction: column;\n\t\t\tbackground-color: #fff;\n\t\t\tpadding: 0 40rpx 30rpx;\n\t\t\tbox-sizing: border-box;\n\t\t\tfont-size: 24rpx;\n\t\t\tcolor: $u-tips-color;\n\t\t\t\n\t\t\t&__choose {\n\t\t\t\theight: 50rpx;\n\t\t\t}\n\t\t\t\n\t\t\t&__btn {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-car-keyboard/u-car-keyboard.vue",
    "content": "<template>\n\t<view class=\"u-keyboard\" @touchmove.stop.prevent=\"() => {}\">\n\t\t<view class=\"u-keyboard-grids\">\n\t\t\t<block>\n\t\t\t\t<view class=\"u-keyboard-grids-item\" v-for=\"(group, i) in abc ? EngKeyBoardList : areaList\" :key=\"i\">\n\t\t\t\t\t<view :hover-stay-time=\"100\" @tap=\"carInputClick(i, j)\" hover-class=\"u-carinput-hover\" class=\"u-keyboard-grids-btn\"\n\t\t\t\t\t v-for=\"(item, j) in group\" :key=\"j\">\n\t\t\t\t\t\t{{ item }}\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view @touchstart=\"backspaceClick\" @touchend=\"clearTimer\" :hover-stay-time=\"100\" class=\"u-keyboard-back\"\n\t\t\t\t hover-class=\"u-hover-class\">\n\t\t\t\t\t<u-icon :size=\"38\" name=\"backspace\" :bold=\"true\"></u-icon>\n\t\t\t\t</view>\n\t\t\t\t<view :hover-stay-time=\"100\" class=\"u-keyboard-change\" hover-class=\"u-carinput-hover\" @tap=\"changeCarInputMode\">\n\t\t\t\t\t<text class=\"zh\" :class=\"[!abc ? 'active' : 'inactive']\">中</text>\n\t\t\t\t\t/\n\t\t\t\t\t<text class=\"en\" :class=\"[abc ? 'active' : 'inactive']\">英</text>\n\t\t\t\t</view>\n\t\t\t</block>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tname: \"u-keyboard\",\n\t\tprops: {\n\t\t\t// 是否打乱键盘按键的顺序\n\t\t\trandom: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\t// 车牌输入时，abc=true为输入车牌号码，bac=false为输入省份中文简称\n\t\t\t\tabc: false\n\t\t\t};\n\t\t},\n\t\tcomputed: {\n\t\t\tareaList() {\n\t\t\t\tlet data = [\n\t\t\t\t\t'京',\n\t\t\t\t\t'沪',\n\t\t\t\t\t'粤',\n\t\t\t\t\t'津',\n\t\t\t\t\t'冀',\n\t\t\t\t\t'豫',\n\t\t\t\t\t'云',\n\t\t\t\t\t'辽',\n\t\t\t\t\t'黑',\n\t\t\t\t\t'湘',\n\t\t\t\t\t'皖',\n\t\t\t\t\t'鲁',\n\t\t\t\t\t'苏',\n\t\t\t\t\t'浙',\n\t\t\t\t\t'赣',\n\t\t\t\t\t'鄂',\n\t\t\t\t\t'桂',\n\t\t\t\t\t'甘',\n\t\t\t\t\t'晋',\n\t\t\t\t\t'陕',\n\t\t\t\t\t'蒙',\n\t\t\t\t\t'吉',\n\t\t\t\t\t'闽',\n\t\t\t\t\t'贵',\n\t\t\t\t\t'渝',\n\t\t\t\t\t'川',\n\t\t\t\t\t'青',\n\t\t\t\t\t'琼',\n\t\t\t\t\t'宁',\n\t\t\t\t\t'挂',\n\t\t\t\t\t'藏',\n\t\t\t\t\t'港',\n\t\t\t\t\t'澳',\n\t\t\t\t\t'新',\n\t\t\t\t\t'使',\n\t\t\t\t\t'学'\n\t\t\t\t];\n\t\t\t\tlet tmp = [];\n\t\t\t\t// 打乱顺序\n\t\t\t\tif (this.random) data = this.$u.randomArray(data);\n\t\t\t\t// 切割成二维数组\n\t\t\t\ttmp[0] = data.slice(0, 10);\n\t\t\t\ttmp[1] = data.slice(10, 20);\n\t\t\t\ttmp[2] = data.slice(20, 30);\n\t\t\t\ttmp[3] = data.slice(30, 36);\n\t\t\t\treturn tmp;\n\t\t\t},\n\t\t\tEngKeyBoardList() {\n\t\t\t\tlet data = [\n\t\t\t\t\t1,\n\t\t\t\t\t2,\n\t\t\t\t\t3,\n\t\t\t\t\t4,\n\t\t\t\t\t5,\n\t\t\t\t\t6,\n\t\t\t\t\t7,\n\t\t\t\t\t8,\n\t\t\t\t\t9,\n\t\t\t\t\t0,\n\t\t\t\t\t'Q',\n\t\t\t\t\t'W',\n\t\t\t\t\t'E',\n\t\t\t\t\t'R',\n\t\t\t\t\t'T',\n\t\t\t\t\t'Y',\n\t\t\t\t\t'U',\n\t\t\t\t\t'I',\n\t\t\t\t\t'O',\n\t\t\t\t\t'P',\n\t\t\t\t\t'A',\n\t\t\t\t\t'S',\n\t\t\t\t\t'D',\n\t\t\t\t\t'F',\n\t\t\t\t\t'G',\n\t\t\t\t\t'H',\n\t\t\t\t\t'J',\n\t\t\t\t\t'K',\n\t\t\t\t\t'L',\n\t\t\t\t\t'Z',\n\t\t\t\t\t'X',\n\t\t\t\t\t'C',\n\t\t\t\t\t'V',\n\t\t\t\t\t'B',\n\t\t\t\t\t'N',\n\t\t\t\t\t'M'\n\t\t\t\t];\n\t\t\t\tlet tmp = [];\n\t\t\t\tif (this.random) data = this.$u.randomArray(data);\n\t\t\t\ttmp[0] = data.slice(0, 10);\n\t\t\t\ttmp[1] = data.slice(10, 20);\n\t\t\t\ttmp[2] = data.slice(20, 30);\n\t\t\t\ttmp[3] = data.slice(30, 36);\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\t// 点击键盘按钮\n\t\t\tcarInputClick(i, j) {\n\t\t\t\tlet value = '';\n\t\t\t\t// 不同模式，获取不同数组的值\n\t\t\t\tif (this.abc) value = this.EngKeyBoardList[i][j];\n\t\t\t\telse value = this.areaList[i][j];\n\t\t\t\tthis.$emit('change', value);\n\t\t\t},\n\t\t\t// 修改汽车牌键盘的输入模式，中文|英文\n\t\t\tchangeCarInputMode() {\n\t\t\t\tthis.abc = !this.abc;\n\t\t\t},\n\t\t\t// 点击退格键\n\t\t\tbackspaceClick() {\n\t\t\t\tthis.$emit('backspace');\n\t\t\t\tclearInterval(this.timer); //再次清空定时器，防止重复注册定时器\n\t\t\t\tthis.timer = null;\n\t\t\t\tthis.timer = setInterval(() => {\n\t\t\t\t\tthis.$emit('backspace');\n\t\t\t\t}, 250);\n\t\t\t},\n\t\t\tclearTimer() {\n\t\t\t\tclearInterval(this.timer);\n\t\t\t\tthis.timer = null;\n\t\t\t},\n\t\t}\n\t};\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\n\t.u-keyboard-grids {\n\t\tbackground: rgb(215, 215, 217);\n\t\tpadding: 24rpx 0;\n\t\tposition: relative;\n\t}\n\n\t.u-keyboard-grids-item {\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t}\n\n\t.u-keyboard-grids-btn {\n\t\ttext-decoration: none;\n\t\twidth: 62rpx;\n\t\tflex: 0 0 64rpx;\n\t\theight: 80rpx;\n\t\t/* #ifndef APP-NVUE */\n\t\tdisplay: inline-flex;\t\t\n\t\t/* #endif */\n\t\tfont-size: 36rpx;\n\t\ttext-align: center;\n\t\tline-height: 80rpx;\n\t\tbackground-color: #fff;\n\t\tmargin: 8rpx 5rpx;\n\t\tborder-radius: 8rpx;\n\t\tbox-shadow: 0 2rpx 0rpx #888992;\n\t\tfont-weight: 500;\n\t\tjustify-content: center;\n\t}\n\n\t.u-carinput-hover {\n\t\tbackground-color: rgb(185, 188, 195) !important;\n\t}\n\n\t.u-keyboard-back {\n\t\tposition: absolute;\n\t\twidth: 96rpx;\n\t\tright: 22rpx;\n\t\tbottom: 32rpx;\n\t\theight: 80rpx;\n\t\tbackground-color: rgb(185, 188, 195);\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tborder-radius: 8rpx;\n\t\tjustify-content: center;\n\t\tbox-shadow: 0 2rpx 0rpx #888992;\n\t}\n\n\t.u-keyboard-change {\n\t\tfont-size: 24rpx;\n\t\tbox-shadow: 0 2rpx 0rpx #888992;\n\t\tposition: absolute;\n\t\twidth: 96rpx;\n\t\tleft: 22rpx;\n\t\tline-height: 1;\n\t\tbottom: 32rpx;\n\t\theight: 80rpx;\n\t\tbackground-color: #ffffff;\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tborder-radius: 8rpx;\n\t\tjustify-content: center;\n\t}\n\n\t.u-keyboard-change .inactive.zh {\n\t\ttransform: scale(0.85) translateY(-10rpx);\n\t}\n\n\t.u-keyboard-change .inactive.en {\n\t\ttransform: scale(0.85) translateY(10rpx);\n\t}\n\n\t.u-keyboard-change .active {\n\t\tcolor: rgb(237, 112, 64);\n\t\tfont-size: 30rpx;\n\t}\n\n\t.u-keyboard-change .zh {\n\t\ttransform: translateY(-10rpx);\n\t}\n\n\t.u-keyboard-change .en {\n\t\ttransform: translateY(10rpx);\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-card/u-card.vue",
    "content": "<template>\n\t<view\n\t\tclass=\"u-card\"\n\t\t@tap.stop=\"click\"\n\t\t:class=\"{ 'u-border': border, 'u-card-full': full, 'u-card--border': borderRadius > 0 }\"\n\t\t:style=\"{\n\t\t\tborderRadius: borderRadius + 'rpx',\n\t\t\tmargin: margin,\n\t\t\tboxShadow: boxShadow\n\t\t}\"\n\t>\n\t\t<view\n\t\t\tv-if=\"showHead\"\n\t\t\tclass=\"u-card__head\"\n\t\t\t:style=\"[{padding: padding + 'rpx'}, headStyle]\"\n\t\t\t:class=\"{\n\t\t\t\t'u-border-bottom': headBorderBottom\n\t\t\t}\"\n\t\t\t@tap=\"headClick\"\n\t\t>\n\t\t\t<view v-if=\"!$slots.head\" class=\"u-flex u-row-between\">\n\t\t\t\t<view class=\"u-card__head--left u-flex u-line-1\" v-if=\"title\">\n\t\t\t\t\t<image\n\t\t\t\t\t\t:src=\"thumb\"\n\t\t\t\t\t\tclass=\"u-card__head--left__thumb\"\n\t\t\t\t\t\tmode=\"aspectFill\"\n\t\t\t\t\t\tv-if=\"thumb\"\n\t\t\t\t\t\t:style=\"{ \n\t\t\t\t\t\t\theight: thumbWidth + 'rpx', \n\t\t\t\t\t\t\twidth: thumbWidth + 'rpx', \n\t\t\t\t\t\t\tborderRadius: thumbCircle ? '100rpx' : '6rpx' \n\t\t\t\t\t\t}\"\n\t\t\t\t\t></image>\n\t\t\t\t\t<text\n\t\t\t\t\t\tclass=\"u-card__head--left__title u-line-1\"\n\t\t\t\t\t\t:style=\"{\n\t\t\t\t\t\t\tfontSize: titleSize + 'rpx',\n\t\t\t\t\t\t\tcolor: titleColor\n\t\t\t\t\t\t}\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ title }}\n\t\t\t\t\t</text>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-card__head--right u-line-1\" v-if=\"subTitle\">\n\t\t\t\t\t<text\n\t\t\t\t\t\tclass=\"u-card__head__title__text\"\n\t\t\t\t\t\t:style=\"{\n\t\t\t\t\t\t\tfontSize: subTitleSize + 'rpx',\n\t\t\t\t\t\t\tcolor: subTitleColor\n\t\t\t\t\t\t}\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ subTitle }}\n\t\t\t\t\t</text>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t\t<slot name=\"head\" v-else />\n\t\t</view>\n\t\t<view @tap=\"bodyClick\" class=\"u-card__body\" :style=\"[{padding: padding + 'rpx'}, bodyStyle]\"><slot name=\"body\" /></view>\n\t\t<view\n\t\t\tv-if=\"showFoot\"\n\t\t\tclass=\"u-card__foot\"\n\t\t\t @tap=\"footClick\"\n\t\t\t:style=\"[{padding: $slots.foot ? padding + 'rpx' : 0}, footStyle]\"\n\t\t\t:class=\"{\n\t\t\t\t'u-border-top': footBorderTop\n\t\t\t}\"\n\t\t>\n\t\t\t<slot name=\"foot\" />\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n/**\n * card 卡片\n * @description 卡片组件一般用于多个列表条目，且风格统一的场景\n * @tutorial https://www.uviewui.com/components/card.html\n * @property {Boolean} full 卡片与屏幕两侧是否留空隙（默认false）\n * @property {String} title 头部左边的标题\n * @property {String} title-color 标题颜色（默认#303133）\n * @property {String | Number} title-size 标题字体大小，单位rpx（默认30）\n * @property {String} sub-title 头部右边的副标题\n * @property {String} sub-title-color 副标题颜色（默认#909399）\n * @property {String | Number} sub-title-size 副标题字体大小（默认26）\n * @property {Boolean} border 是否显示边框（默认true）\n * @property {String | Number} index 用于标识点击了第几个卡片\n * @property {String} box-shadow 卡片外围阴影，字符串形式（默认none）\n * @property {String} margin 卡片与屏幕两边和上下元素的间距，需带单位，如\"30rpx 20rpx\"（默认30rpx）\n * @property {String | Number} border-radius 卡片整体的圆角值，单位rpx（默认16）\n * @property {Object} head-style 头部自定义样式，对象形式\n * @property {Object} body-style 中部自定义样式，对象形式\n * @property {Object} foot-style 底部自定义样式，对象形式\n * @property {Boolean} head-border-bottom 是否显示头部的下边框（默认true）\n * @property {Boolean} foot-border-top 是否显示底部的上边框（默认true）\n * @property {Boolean} show-head 是否显示头部（默认true）\n * @property {Boolean} show-head 是否显示尾部（默认true）\n * @property {String} thumb 缩略图路径，如设置将显示在标题的左边，不建议使用相对路径\n * @property {String | Number} thumb-width 缩略图的宽度，高等于宽，单位rpx（默认60）\n * @property {Boolean} thumb-circle 缩略图是否为圆形（默认false）\n * @event {Function} click 整个卡片任意位置被点击时触发\n * @event {Function} head-click 卡片头部被点击时触发\n * @event {Function} body-click 卡片主体部分被点击时触发\n * @event {Function} foot-click 卡片底部部分被点击时触发\n * @example <u-card padding=\"30\" title=\"card\"></u-card>\n */\nexport default {\n\tname: 'u-card',\n\tprops: {\n\t\t// 与屏幕两侧是否留空隙\n\t\tfull: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 标题\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 标题颜色\n\t\ttitleColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#303133'\n\t\t},\n\t\t// 标题字体大小，单位rpx\n\t\ttitleSize: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: '30'\n\t\t},\n\t\t// 副标题\n\t\tsubTitle: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 副标题颜色\n\t\tsubTitleColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#909399'\n\t\t},\n\t\t// 副标题字体大小，单位rpx\n\t\tsubTitleSize: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: '26'\n\t\t},\n\t\t// 是否显示外部边框，只对full=false时有效(卡片与边框有空隙时)\n\t\tborder: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 用于标识点击了第几个\n\t\tindex: {\n\t\t\ttype: [Number, String, Object],\n\t\t\tdefault: ''\n\t\t},\n\t\t// 用于隔开上下左右的边距，带单位的写法，如：\"30rpx 30rpx\"，\"20rpx 20rpx 30rpx 30rpx\"\n\t\tmargin: {\n\t\t\ttype: String,\n\t\t\tdefault: '30rpx'\n\t\t},\n\t\t// card卡片的圆角\n\t\tborderRadius: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: '16'\n\t\t},\n\t\t// 头部自定义样式，对象形式\n\t\theadStyle: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t\t// 主体自定义样式，对象形式\n\t\tbodyStyle: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t\t// 底部自定义样式，对象形式\n\t\tfootStyle: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t\t// 头部是否下边框\n\t\theadBorderBottom: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 底部是否有上边框\n\t\tfootBorderTop: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 标题左边的缩略图\n\t\tthumb: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 缩略图宽高，单位rpx\n\t\tthumbWidth: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: '60'\n\t\t},\n\t\t// 缩略图是否为圆形\n\t\tthumbCircle: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 给head，body，foot的内边距\n\t\tpadding: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: '30'\n\t\t},\n\t\t// 是否显示头部\n\t\tshowHead: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 是否显示尾部\n\t\tshowFoot: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 卡片外围阴影，字符串形式\n\t\tboxShadow: {\n\t\t\ttype: String,\n\t\t\tdefault: 'none'\n\t\t}\n\t},\n\tdata() {\n\t\treturn {};\n\t},\n\tmethods: {\n\t\tclick() {\n\t\t\tthis.$emit('click', this.index);\n\t\t},\n\t\theadClick() {\n\t\t\tthis.$emit('head-click', this.index);\n\t\t},\n\t\tbodyClick() {\n\t\t\tthis.$emit('body-click', this.index);\n\t\t},\n\t\tfootClick() {\n\t\t\tthis.$emit('foot-click', this.index);\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../libs/css/style.components.scss\";\n\t\n.u-card {\n\tposition: relative;\n\toverflow: hidden;\n\tfont-size: 28rpx;\n\tbackground-color: #ffffff;\n\tbox-sizing: border-box;\n\t\n\t&-full {\n\t\t// 如果是与屏幕之间不留空隙，应该设置左右边距为0\n\t\tmargin-left: 0 !important;\n\t\tmargin-right: 0 !important;\n\t\twidth: 100%;\n\t}\n\t\n\t&--border:after {\n\t\tborder-radius: 16rpx;\n\t}\n\n\t&__head {\n\t\t&--left {\n\t\t\tcolor: $u-main-color;\n\t\t\t\n\t\t\t&__thumb {\n\t\t\t\tmargin-right: 16rpx;\n\t\t\t}\n\t\t\t\n\t\t\t&__title {\n\t\t\t\tmax-width: 400rpx;\n\t\t\t}\n\t\t}\n\n\t\t&--right {\n\t\t\tcolor: $u-tips-color;\n\t\t\tmargin-left: 6rpx;\n\t\t}\n\t}\n\n\t&__body {\n\t\tcolor: $u-content-color;\n\t}\n\n\t&__foot {\n\t\tcolor: $u-tips-color;\n\t}\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-cell-group/u-cell-group.vue",
    "content": "<template>\n\t<view class=\"u-cell-box\">\n\t\t<view class=\"u-cell-title\" v-if=\"title\" :style=\"[titleStyle]\">\n\t\t\t{{title}}\n\t\t</view>\n\t\t<view class=\"u-cell-item-box\" :class=\"{'u-border-bottom u-border-top': border}\">\n\t\t\t<slot />\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * cellGroup 单元格父组件Group\n\t * @description cell单元格一般用于一组列表的情况，比如个人中心页，设置页等。搭配u-cell-item\n\t * @tutorial https://www.uviewui.com/components/cell.html\n\t * @property {String} title 分组标题\n\t * @property {Boolean} border 是否显示外边框（默认true）\n\t * @property {Object} title-style 分组标题的的样式，对象形式，如{'font-size': '24rpx'} 或 {'fontSize': '24rpx'}\n\t * @example <u-cell-group title=\"设置喜好\">\n\t */\n\texport default {\n\t\tname: \"u-cell-group\",\n\t\tprops: {\n\t\t\t// 分组标题\n\t\t\ttitle: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 是否显示分组list上下边框\n\t\t\tborder: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 分组标题的样式，对象形式，注意驼峰属性写法\n\t\t\t// 类似 {'font-size': '24rpx'} 和 {'fontSize': '24rpx'}\n\t\t\ttitleStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn {};\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tindex: 0,\n\t\t\t}\n\t\t},\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-cell-box {\n\t\twidth: 100%;\n\t}\n\n\t.u-cell-title {\n\t\tpadding: 30rpx 32rpx 10rpx 32rpx;\n\t\tfont-size: 30rpx;\n\t\ttext-align: left;\n\t\tcolor: $u-tips-color;\n\t}\n\n\t.u-cell-item-box {\n\t\tbackground-color: #FFFFFF;\n\t\tflex-direction: row;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-cell-item/u-cell-item.vue",
    "content": "<template>\n\t<view\n\t\t@tap=\"click\"\n\t\tclass=\"u-cell\"\n\t\t:class=\"{ 'u-border-bottom': borderBottom, 'u-border-top': borderTop, 'u-col-center': center, 'u-cell--required': required }\"\n\t\thover-stay-time=\"150\"\n\t\t:hover-class=\"hoverClass\"\n\t\t:style=\"{\n\t\t\tbackgroundColor: bgColor\n\t\t}\"\n\t>\n\t\t<u-icon :size=\"iconSize\" :name=\"icon\" v-if=\"icon\" :custom-style=\"iconStyle\" class=\"u-cell__left-icon-wrap\"></u-icon>\n\t\t<view class=\"u-flex\" v-else>\n\t\t\t<slot name=\"icon\"></slot>\n\t\t</view>\n\t\t<view\n\t\t\tclass=\"u-cell_title\"\n\t\t\t:style=\"[\n\t\t\t\t{\n\t\t\t\t\twidth: titleWidth ? titleWidth + 'rpx' : 'auto'\n\t\t\t\t},\n\t\t\t\ttitleStyle\n\t\t\t]\"\n\t\t>\n\t\t\t<block v-if=\"title !== ''\">{{ title }}</block>\n\t\t\t<slot name=\"title\" v-else></slot>\n\n\t\t\t<view class=\"u-cell__label\" v-if=\"label || $slots.label\" :style=\"[labelStyle]\">\n\t\t\t\t<block v-if=\"label !== ''\">{{ label }}</block>\n\t\t\t\t<slot name=\"label\" v-else></slot>\n\t\t\t</view>\n\t\t</view>\n\n\t\t<view class=\"u-cell__value\" :style=\"[valueStyle]\">\n\t\t\t<block class=\"u-cell__value\" v-if=\"value !== ''\">{{ value }}</block>\n\t\t\t<slot v-else></slot>\n\t\t</view>\n\t\t<view class=\"u-flex u-cell_right\" v-if=\"$slots['right-icon']\">\n\t\t\t<slot name=\"right-icon\"></slot>\n\t\t</view>\n\t\t<u-icon v-if=\"arrow\" name=\"arrow-right\" :style=\"[arrowStyle]\" class=\"u-icon-wrap u-cell__right-icon-wrap\"></u-icon>\n\t</view>\n</template>\n\n<script>\n/**\n * cellItem 单元格Item\n * @description cell单元格一般用于一组列表的情况，比如个人中心页，设置页等。搭配u-cell-group使用\n * @tutorial https://www.uviewui.com/components/cell.html\n * @property {String} title 左侧标题\n * @property {String} icon 左侧图标名，只支持uView内置图标，见Icon 图标\n * @property {Object} icon-style 左边图标的样式，对象形式\n * @property {String} value 右侧内容\n * @property {String} label 标题下方的描述信息\n * @property {Boolean} border-bottom 是否显示cell的下边框（默认true）\n * @property {Boolean} border-top 是否显示cell的上边框（默认false）\n * @property {Boolean} center 是否使内容垂直居中（默认false）\n * @property {String} hover-class 是否开启点击反馈，none为无效果（默认true）\n * // @property {Boolean} border-gap border-bottom为true时，Cell列表中间的条目的下边框是否与左边有一个间隔（默认true）\n * @property {Boolean} arrow 是否显示右侧箭头（默认true）\n * @property {Boolean} required 箭头方向，可选值（默认right）\n * @property {Boolean} arrow-direction 是否显示左边表示必填的星号（默认false）\n * @property {Object} title-style 标题样式，对象形式\n * @property {Object} value-style 右侧内容样式，对象形式\n * @property {Object} label-style 标题下方描述信息的样式，对象形式\n * @property {String} bg-color 背景颜色（默认transparent）\n * @property {String Number} index 用于在click事件回调中返回，标识当前是第几个Item\n * @property {String Number} title-width 标题的宽度，单位rpx\n * @example <u-cell-item icon=\"integral-fill\" title=\"会员等级\" value=\"新版本\"></u-cell-item>\n */\nexport default {\n\tname: 'u-cell-item',\n\tprops: {\n\t\t// 左侧图标名称(只能uView内置图标)，或者图标src\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 左侧标题\n\t\ttitle: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: ''\n\t\t},\n\t\t// 右侧内容\n\t\tvalue: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: ''\n\t\t},\n\t\t// 标题下方的描述信息\n\t\tlabel: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: ''\n\t\t},\n\t\t// 是否显示下边框\n\t\tborderBottom: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 是否显示上边框\n\t\tborderTop: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 多个cell中，中间的cell显示下划线时，下划线是否给一个到左边的距离\n\t\t// 1.4.0版本废除此参数，默认边框由border-top和border-bottom提供，此参数会造成干扰\n\t\t// borderGap: {\n\t\t// \ttype: Boolean,\n\t\t// \tdefault: true\n\t\t// },\n\t\t// 是否开启点击反馈，即点击时cell背景为灰色，none为无效果\n\t\thoverClass: {\n\t\t\ttype: String,\n\t\t\tdefault: 'u-cell-hover'\n\t\t},\n\t\t// 是否显示右侧箭头\n\t\tarrow: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 内容是否垂直居中\n\t\tcenter: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 是否显示左边表示必填的星号\n\t\trequired: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 标题的宽度，单位rpx\n\t\ttitleWidth: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: ''\n\t\t},\n\t\t// 右侧箭头方向，可选值：right|up|down，默认为right\n\t\tarrowDirection: {\n\t\t\ttype: String,\n\t\t\tdefault: 'right'\n\t\t},\n\t\t// 控制标题的样式\n\t\ttitleStyle: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t\t// 右侧显示内容的样式\n\t\tvalueStyle: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t\t// 描述信息的样式\n\t\tlabelStyle: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t\t// 背景颜色\n\t\tbgColor: {\n\t\t\ttype: String,\n\t\t\tdefault: 'transparent'\n\t\t},\n\t\t// 用于识别被点击的是第几个cell\n\t\tindex: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: ''\n\t\t},\n\t\t// 是否使用lable插槽\n\t\tuseLabelSlot: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 左边图标的大小，单位rpx，只对传入icon字段时有效\n\t\ticonSize: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 34\n\t\t},\n\t\t// 左边图标的样式，对象形式\n\t\ticonStyle: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\n\t\t};\n\t},\n\tcomputed: {\n\t\tarrowStyle() {\n\t\t\tlet style = {};\n\t\t\tif (this.arrowDirection == 'up') style.transform = 'rotate(-90deg)';\n\t\t\telse if (this.arrowDirection == 'down') style.transform = 'rotate(90deg)';\n\t\t\telse style.transform = 'rotate(0deg)';\n\t\t\treturn style;\n\t\t}\n\t},\n\tmethods: {\n\t\tclick() {\n\t\t\tthis.$emit('click', this.index);\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../libs/css/style.components.scss\";\n.u-cell {\n\t@include vue-flex;\n\talign-items: center;\n\tposition: relative;\n\t/* #ifndef APP-NVUE */\n\tbox-sizing: border-box;\n\t/* #endif */\n\twidth: 100%;\n\tpadding: 26rpx 32rpx;\n\tfont-size: 28rpx;\n\tline-height: 54rpx;\n\tcolor: $u-content-color;\n\tbackground-color: #fff;\n\ttext-align: left;\n}\n\n.u-cell_title {\n\tfont-size: 28rpx;\n}\n\n.u-cell__left-icon-wrap {\n\tmargin-right: 10rpx;\n\tfont-size: 32rpx;\n}\n\n.u-cell__right-icon-wrap {\n\tmargin-left: 10rpx;\n\tcolor: #969799;\n\tfont-size: 28rpx;\n}\n\n.u-cell__left-icon-wrap,\n.u-cell__right-icon-wrap {\n\t@include vue-flex;\n\talign-items: center;\n\theight: 48rpx;\n}\n\n.u-cell-border:after {\n\tposition: absolute; \n\t/* #ifndef APP-NVUE */\n\tbox-sizing: border-box;\n\tcontent: ' ';\n\tpointer-events: none;\n\tborder-bottom: 1px solid $u-border-color;\n\t/* #endif */\n\tright: 0;\n\tleft: 0;\n\ttop: 0;\n\ttransform: scaleY(0.5);\n}\n\n.u-cell-border {\n\tposition: relative;\n}\n\n.u-cell__label {\n\tmargin-top: 6rpx;\n\tfont-size: 26rpx;\n\tline-height: 36rpx;\n\tcolor: $u-tips-color;\n\t/* #ifndef APP-NVUE */\n\tword-wrap: break-word;\n\t/* #endif */\n}\n\n.u-cell__value {\n\toverflow: hidden;\n\ttext-align: right;\n\t/* #ifndef APP-NVUE */\n\tvertical-align: middle;\n\t/* #endif */\n\tcolor: $u-tips-color;\n\tfont-size: 26rpx;\n}\n\n.u-cell__title,\n.u-cell__value {\n\tflex: 1;\n}\n\n.u-cell--required {\n\t/* #ifndef APP-NVUE */\n\toverflow: visible;\n\t/* #endif */\n\t@include vue-flex;\n\talign-items: center;\n}\n\n.u-cell--required:before {\n\tposition: absolute;\n\t/* #ifndef APP-NVUE */\n\tcontent: '*';\n\t/* #endif */\n\tleft: 8px;\n\tmargin-top: 4rpx;\n\tfont-size: 14px;\n\tcolor: $u-type-error;\n}\n\n.u-cell_right {\n\tline-height: 1;\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-checkbox/u-checkbox.vue",
    "content": "<template>\n\t<view class=\"u-checkbox\" :style=\"[checkboxStyle]\">\n\t\t<view class=\"u-checkbox__icon-wrap\" @tap=\"toggle\" :class=\"[iconClass]\" :style=\"[iconStyle]\">\n\t\t\t<u-icon class=\"u-checkbox__icon-wrap__icon\" name=\"checkbox-mark\" :size=\"checkboxIconSize\" :color=\"iconColor\"/>\n\t\t</view>\n\t\t<view class=\"u-checkbox__label\" @tap=\"onClickLabel\" :style=\"{\n\t\t\tfontSize: $u.addUnit(labelSize)\n\t\t}\">\n\t\t\t<slot />\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * checkbox 复选框\n\t * @description 该组件需要搭配checkboxGroup组件使用，以便用户进行操作时，获得当前复选框组的选中情况。\n\t * @tutorial https://www.uviewui.com/components/checkbox.html\n\t * @property {String Number} icon-size 图标大小，单位rpx（默认20）\n\t * @property {String Number} label-size label字体大小，单位rpx（默认28）\n\t * @property {String Number} name checkbox组件的标示符\n\t * @property {String} shape 形状，见官网说明（默认circle）\n\t * @property {Boolean} disabled 是否禁用\n\t * @property {Boolean} label-disabled 是否禁止点击文本操作checkbox\n\t * @property {String} active-color 选中时的颜色，如设置CheckboxGroup的active-color将失效\n\t * @event {Function} change 某个checkbox状态发生变化时触发，回调为一个对象\n\t * @example <u-checkbox v-model=\"checked\" :disabled=\"false\">天涯</u-checkbox>\n\t */\n\texport default {\n\t\tname: \"u-checkbox\",\n\t\tprops: {\n\t\t\t// checkbox的名称\n\t\t\tname: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 形状，square为方形，circle为原型\n\t\t\tshape: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 是否为选中状态\n\t\t\tvalue: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 是否禁用\n\t\t\tdisabled: {\n\t\t\t\ttype: [String, Boolean],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 是否禁止点击提示语选中复选框\n\t\t\tlabelDisabled: {\n\t\t\t\ttype: [String, Boolean],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 选中状态下的颜色，如设置此值，将会覆盖checkboxGroup的activeColor值\n\t\t\tactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 图标的大小，单位rpx\n\t\t\ticonSize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// label的字体大小，rpx单位\n\t\t\tlabelSize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 组件的整体大小\n\t\t\tsize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tparentDisabled: false,\n\t\t\t\tnewParams: {},\n\t\t\t};\n\t\t},\n\t\tcreated() {\n\t\t\t// 支付宝小程序不支持provide/inject，所以使用这个方法获取整个父组件，在created定义，避免循环应用\n\t\t\tthis.parent = this.$u.$parent.call(this, 'u-checkbox-group');\n\t\t\t// 如果存在u-checkbox-group，将本组件的this塞进父组件的children中\n\t\t\tthis.parent && this.parent.children.push(this);\n\t\t},\n\t\tcomputed: {\n\t\t\t// 是否禁用，如果父组件u-checkbox-group禁用的话，将会忽略子组件的配置\n\t\t\tisDisabled() {\n\t\t\t\treturn this.disabled !== '' ? this.disabled : this.parent ? this.parent.disabled : false;\n\t\t\t},\n\t\t\t// 是否禁用label点击\n\t\t\tisLabelDisabled() {\n\t\t\t\treturn this.labelDisabled !== '' ? this.labelDisabled : this.parent ? this.parent.labelDisabled : false;\n\t\t\t},\n\t\t\t// 组件尺寸，对应size的值，默认值为34rpx\n\t\t\tcheckboxSize() {\n\t\t\t\treturn this.size ? this.size : (this.parent ? this.parent.size : 34);\n\t\t\t},\n\t\t\t// 组件的勾选图标的尺寸，默认20\n\t\t\tcheckboxIconSize() {\n\t\t\t\treturn this.iconSize ? this.iconSize : (this.parent ? this.parent.iconSize : 20);\n\t\t\t},\n\t\t\t// 组件选中激活时的颜色\n\t\t\telActiveColor() {\n\t\t\t\treturn this.activeColor ? this.activeColor : (this.parent ? this.parent.activeColor : 'primary');\n\t\t\t},\n\t\t\t// 组件的形状\n\t\t\telShape() {\n\t\t\t\treturn this.shape ? this.shape : (this.parent ? this.parent.shape : 'square');\n\t\t\t},\n\t\t\ticonStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\t// 既要判断是否手动禁用，还要判断用户v-model绑定的值，如果绑定为false，那么也无法选中\n\t\t\t\tif (this.elActiveColor && this.value && !this.isDisabled) {\n\t\t\t\t\tstyle.borderColor = this.elActiveColor; \n\t\t\t\t\tstyle.backgroundColor = this.elActiveColor;\n\t\t\t\t}\n\t\t\t\tstyle.width = this.$u.addUnit(this.checkboxSize);\n\t\t\t\tstyle.height = this.$u.addUnit(this.checkboxSize);\n\t\t\t\treturn style;\n\t\t\t},\n\t\t\t// checkbox内部的勾选图标，如果选中状态，为白色，否则为透明色即可\n\t\t\ticonColor() {\n\t\t\t\treturn this.value ? '#ffffff' : 'transparent';\n\t\t\t},\n\t\t\ticonClass() {\n\t\t\t\tlet classes = [];\n\t\t\t\tclasses.push('u-checkbox__icon-wrap--' + this.elShape);\n\t\t\t\tif (this.value == true) classes.push('u-checkbox__icon-wrap--checked');\n\t\t\t\tif (this.isDisabled) classes.push('u-checkbox__icon-wrap--disabled');\n\t\t\t\tif (this.value && this.isDisabled) classes.push('u-checkbox__icon-wrap--disabled--checked');\n\t\t\t\t// 支付宝小程序无法动态绑定一个数组类名，否则解析出来的结果会带有\",\"，而导致失效\n\t\t\t\treturn classes.join(' ');\n\t\t\t},\n\t\t\tcheckboxStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\tif(this.parent && this.parent.width) {\n\t\t\t\t\tstyle.width = this.parent.width;\n\t\t\t\t\t// #ifdef MP\n\t\t\t\t\t// 各家小程序因为它们特殊的编译结构，使用float布局\n\t\t\t\t\tstyle.float = 'left';\n\t\t\t\t\t// #endif\n\t\t\t\t\t// #ifndef MP\n\t\t\t\t\t// H5和APP使用flex布局\n\t\t\t\t\tstyle.flex = `0 0 ${this.parent.width}`;\n\t\t\t\t\t// #endif\n\t\t\t\t}\n\t\t\t\tif(this.parent && this.parent.wrap) {\n\t\t\t\t\tstyle.width = '100%';\n\t\t\t\t\t// #ifndef MP\n\t\t\t\t\t// H5和APP使用flex布局，将宽度设置100%，即可自动换行\n\t\t\t\t\tstyle.flex = '0 0 100%';\n\t\t\t\t\t// #endif\n\t\t\t\t}\n\t\t\t\treturn style;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tonClickLabel() {\n\t\t\t\tif (!this.isLabelDisabled && !this.isDisabled) {\n\t\t\t\t\tthis.setValue();\n\t\t\t\t}\n\t\t\t},\n\t\t\ttoggle() {\n\t\t\t\tif (!this.isDisabled) {\n\t\t\t\t\tthis.setValue();\n\t\t\t\t}\n\t\t\t},\n\t\t\temitEvent() {\n\t\t\t\tthis.$emit('change', {\n\t\t\t\t\tvalue: !this.value,\n\t\t\t\t\tname: this.name\n\t\t\t\t})\n\t\t\t\t// 执行父组件u-checkbox-group的事件方法\n\t\t\t\t// 等待下一个周期再执行，因为this.$emit('input')作用于父组件，再反馈到子组件内部，需要时间\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif(this.parent && this.parent.emitEvent) this.parent.emitEvent();\n\t\t\t\t}, 80);\n\t\t\t},\n\t\t\t// 设置input的值，这里通过input事件，设置通过v-model绑定的组件的值\n\t\t\tsetValue() {\n\t\t\t\t// 判断是否超过了可选的最大数量\n\t\t\t\tlet checkedNum = 0;\n\t\t\t\tif(this.parent && this.parent.children) {\n\t\t\t\t\t// 只要父组件的某一个子元素的value为true，就加1(已有的选中数量)\n\t\t\t\t\tthis.parent.children.map(val => {\n\t\t\t\t\t\tif (val.value) checkedNum++;\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\t// 如果原来为选中状态，那么可以取消\n\t\t\t\tif (this.value == true) {\n\t\t\t\t\tthis.emitEvent();\n\t\t\t\t\tthis.$emit('input', !this.value);\n\t\t\t\t} else {\n\t\t\t\t\t// 如果超出最多可选项，提示\n\t\t\t\t\tif(this.parent && checkedNum >= this.parent.max) {\n\t\t\t\t\t\treturn this.$u.toast(`最多可选${this.parent.max}项`);\n\t\t\t\t\t}\n\t\t\t\t\t// 如果原来为未选中状态，需要选中的数量少于父组件中设置的max值，才可以选中\n\t\t\t\t\tthis.emitEvent();\n\t\t\t\t\tthis.$emit('input', !this.value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\n\t.u-checkbox {\n\t\t/* #ifndef APP-NVUE */\n\t\tdisplay: inline-flex;\n\t\t/* #endif */\n\t\talign-items: center;\n\t\toverflow: hidden;\n\t\tuser-select: none;\n\t\tline-height: 1.8;\n\t\t\n\t\t&__icon-wrap {\n\t\t\tcolor: $u-content-color;\n\t\t\tflex: none;\n\t\t\tdisplay: -webkit-flex;\n\t\t\t@include vue-flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tbox-sizing: border-box;\n\t\t\twidth: 42rpx;\n\t\t\theight: 42rpx;\n\t\t\tcolor: transparent;\n\t\t\ttext-align: center;\n\t\t\ttransition-property: color, border-color, background-color;\n\t\t\tfont-size: 20px;\n\t\t\tborder: 1px solid #c8c9cc;\n\t\t\ttransition-duration: 0.2s;\n\t\t\t\n\t\t\t/* #ifdef MP-TOUTIAO */\n\t\t\t// 头条小程序兼容性问题，需要设置行高为0，否则图标偏下\n\t\t\t&__icon {\n\t\t\t\tline-height: 0;\n\t\t\t}\n\t\t\t/* #endif */\n\t\t\t\n\t\t\t&--circle {\n\t\t\t\tborder-radius: 100%;\n\t\t\t}\n\t\t\t\n\t\t\t&--square {\n\t\t\t\tborder-radius: 6rpx;\n\t\t\t}\n\t\t\t\n\t\t\t&--checked {\n\t\t\t\tcolor: #fff;\n\t\t\t\tbackground-color: $u-type-primary;\n\t\t\t\tborder-color: $u-type-primary;\n\t\t\t}\n\t\t\t\n\t\t\t&--disabled {\n\t\t\t\tbackground-color: #ebedf0;\n\t\t\t\tborder-color: #c8c9cc;\n\t\t\t}\n\t\t\t\n\t\t\t&--disabled--checked {\n\t\t\t\tcolor: #c8c9cc !important;\n\t\t\t}\n\t\t}\n\t\n\t\t&__label {\n\t\t\tword-wrap: break-word;\n\t\t\tmargin-left: 10rpx;\n\t\t\tmargin-right: 24rpx;\n\t\t\tcolor: $u-content-color;\n\t\t\tfont-size: 30rpx;\n\t\t\t\n\t\t\t&--disabled {\n\t\t\t\tcolor: #c8c9cc;\n\t\t\t}\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-checkbox-group/u-checkbox-group.vue",
    "content": "<template>\n\t<view class=\"u-checkbox-group u-clearfix\">\n\t\t<slot></slot>\n\t</view>\n</template>\n\n<script>\n\timport Emitter from '../../libs/util/emitter.js';\n\t/**\n\t * checkboxGroup 开关选择器父组件Group\n\t * @description 复选框组件一般用于需要多个选择的场景，该组件功能完整，使用方便\n\t * @tutorial https://www.uviewui.com/components/checkbox.html\n\t * @property {String Number} max 最多能选中多少个checkbox（默认999）\n\t * @property {String Number} size 组件整体的大小，单位rpx（默认40）\n\t * @property {Boolean} disabled 是否禁用所有checkbox（默认false）\n\t * @property {String Number} icon-size 图标大小，单位rpx（默认20）\n\t * @property {Boolean} label-disabled 是否禁止点击文本操作checkbox(默认false)\n\t * @property {String} width 宽度，需带单位\n\t * @property {String} width 宽度，需带单位\n\t * @property {String} shape 外观形状，shape-方形，circle-圆形(默认circle)\n\t * @property {Boolean} wrap 是否每个checkbox都换行（默认false）\n\t * @property {String} active-color 选中时的颜色，应用到所有子Checkbox组件（默认#2979ff）\n\t * @event {Function} change 任一个checkbox状态发生变化时触发，回调为一个对象\n\t * @example <u-checkbox-group></u-checkbox-group>\n\t */\n\texport default {\n\t\tname: 'u-checkbox-group',\n\t\tmixins: [Emitter],\n\t\tprops: {\n\t\t\t// 最多能选中多少个checkbox\n\t\t\tmax: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 999\n\t\t\t},\n\t\t\t// 所有选中项的 name\n\t\t\t// value: {\n\t\t\t// \tdefault: Array,\n\t\t\t// \tdefault() {\n\t\t\t// \t\treturn []\n\t\t\t// \t}\n\t\t\t// },\n\t\t\t// 是否禁用所有复选框\n\t\t\tdisabled: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 在表单内提交时的标识符\n\t\t\tname: {\n\t\t\t\ttype: [Boolean, String],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 是否禁止点击提示语选中复选框\n\t\t\tlabelDisabled: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 形状，square为方形，circle为原型\n\t\t\tshape: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'square'\n\t\t\t},\n\t\t\t// 选中状态下的颜色\n\t\t\tactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#2979ff'\n\t\t\t},\n\t\t\t// 组件的整体大小\n\t\t\tsize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 34\n\t\t\t},\n\t\t\t// 每个checkbox占u-checkbox-group的宽度\n\t\t\twidth: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'auto'\n\t\t\t},\n\t\t\t// 是否每个checkbox都换行\n\t\t\twrap: { \n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 图标的大小，单位rpx\n\t\t\ticonSize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 20\n\t\t\t},\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t}\n\t\t},\n\t\tcreated() {\n\t\t\t// 如果将children定义在data中，在微信小程序会造成循环引用而报错\n\t\t\tthis.children = [];\n\t\t},\n\t\tmethods: {\n\t\t\temitEvent() {\n\t\t\t\tlet values = [];\n\t\t\t\tthis.children.map(val => {\n\t\t\t\t\tif(val.value) values.push(val.name);\n\t\t\t\t})\n\t\t\t\tthis.$emit('change', values);\n\t\t\t\t// 发出事件，用于在表单组件中嵌入checkbox的情况，进行验证\n\t\t\t\t// 由于头条小程序执行迟钝，故需要用几十毫秒的延时\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t// 将当前的值发送到 u-form-item 进行校验\n\t\t\t\t\tthis.dispatch('u-form-item', 'on-form-change', values);\n\t\t\t\t}, 60)\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\n\t.u-checkbox-group {\n\t\t/* #ifndef MP || APP-NVUE */\n\t\tdisplay: inline-flex;\n\t\tflex-wrap: wrap;\n\t\t/* #endif */\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-circle-progress/u-circle-progress.vue",
    "content": "<template>\n\t<view\n\t\tclass=\"u-circle-progress\"\n\t\t:style=\"{\n\t\t\twidth: widthPx + 'px',\n\t\t\theight: widthPx + 'px',\n\t\t\tbackgroundColor: bgColor\n\t\t}\"\n\t>\n\t\t<!-- 支付宝小程序不支持canvas-id属性，必须用id属性 -->\n\t\t<canvas\n\t\t\tclass=\"u-canvas-bg\"\n\t\t\t:canvas-id=\"elBgId\"\n\t\t\t:id=\"elBgId\"\n\t\t\t:style=\"{\n\t\t\t\twidth: widthPx + 'px',\n\t\t\t\theight: widthPx + 'px'\n\t\t\t}\"\n\t\t></canvas>\n\t\t<canvas\n\t\t\tclass=\"u-canvas\"\n\t\t\t:canvas-id=\"elId\"\n\t\t\t:id=\"elId\"\n\t\t\t:style=\"{\n\t\t\t\twidth: widthPx + 'px',\n\t\t\t\theight: widthPx + 'px'\n\t\t\t}\"\n\t\t></canvas>\n\t\t<slot></slot>\n\t</view>\n</template>\n\n<script>\n/**\n * circleProgress 环形进度条\n * @description 展示操作或任务的当前进度，比如上传文件，是一个圆形的进度条。注意：此组件的percent值只能动态增加，不能动态减少。\n * @tutorial https://www.uviewui.com/components/circleProgress.html\n * @property {String Number} percent 圆环进度百分比值，为数值类型，0-100\n * @property {String} inactive-color 圆环的底色，默认为灰色(该值无法动态变更)（默认#ececec）\n * @property {String} active-color 圆环激活部分的颜色(该值无法动态变更)（默认#19be6b）\n * @property {String Number} width 整个圆环组件的宽度，高度默认等于宽度值，单位rpx（默认200）\n * @property {String Number} border-width 圆环的边框宽度，单位rpx（默认14）\n * @property {String Number} duration 整个圆环执行一圈的时间，单位ms（默认呢1500）\n * @property {String} type 如设置，active-color值将会失效\n * @property {String} bg-color 整个组件背景颜色，默认为白色\n * @example <u-circle-progress active-color=\"#2979ff\" :percent=\"80\"></u-circle-progress>\n */\nexport default {\n\tname: 'u-circle-progress',\n\tprops: {\n\t\t// 圆环进度百分比值\n\t\tpercent: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t\t// 限制值在0到100之间\n\t\t\tvalidator: val => {\n\t\t\t\treturn val >= 0 && val <= 100;\n\t\t\t}\n\t\t},\n\t\t// 底部圆环的颜色（灰色的圆环）\n\t\tinactiveColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#ececec'\n\t\t},\n\t\t// 圆环激活部分的颜色\n\t\tactiveColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#19be6b'\n\t\t},\n\t\t// 圆环线条的宽度，单位rpx\n\t\tborderWidth: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 14\n\t\t},\n\t\t// 整个圆形的宽度，单位rpx\n\t\twidth: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 200\n\t\t},\n\t\t// 整个圆环执行一圈的时间，单位ms\n\t\tduration: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 1500\n\t\t},\n\t\t// 主题类型\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 整个圆环进度区域的背景色\n\t\tbgColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#ffffff'\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\t// #ifdef MP-WEIXIN\n\t\t\telBgId: 'uCircleProgressBgId', // 微信小程序中不能使用this.$u.guid()形式动态生成id值，否则会报错\n\t\t\telId: 'uCircleProgressElId',\n\t\t\t// #endif\n\t\t\t// #ifndef MP-WEIXIN\n\t\t\telBgId: this.$u.guid(), // 非微信端的时候，需用动态的id，否则一个页面多个圆形进度条组件数据会混乱\n\t\t\telId: this.$u.guid(),\n\t\t\t// #endif\n\t\t\twidthPx: uni.upx2px(this.width), // 转成px后的整个组件的背景宽度\n\t\t\tborderWidthPx: uni.upx2px(this.borderWidth), // 转成px后的圆环的宽度\n\t\t\tstartAngle: -Math.PI / 2, // canvas画圆的起始角度，默认为3点钟方向，定位到12点钟方向\n\t\t\tprogressContext: null, // 活动圆的canvas上下文\n\t\t\tnewPercent: 0, // 当动态修改进度值的时候，保存进度值的变化前后值，用于比较用\n\t\t\toldPercent: 0 // 当动态修改进度值的时候，保存进度值的变化前后值，用于比较用\n\t\t};\n\t},\n\twatch: {\n\t\tpercent(nVal, oVal = 0) {\n\t\t\tif (nVal > 100) nVal = 100;\n\t\t\tif (nVal < 0) oVal = 0;\n\t\t\t// 此值其实等于this.percent，命名一个新\n\t\t\tthis.newPercent = nVal;\n\t\t\tthis.oldPercent = oVal;\n\t\t\tsetTimeout(() => {\n\t\t\t\t// 无论是百分比值增加还是减少，需要操作还是原来的旧的百分比值\n\t\t\t\t// 将此值减少或者新增到新的百分比值\n\t\t\t\tthis.drawCircleByProgress(oVal);\n\t\t\t}, 50);\n\t\t}\n\t},\n\tcreated() {\n\t\t// 赋值，用于加载后第一个画圆使用\n\t\tthis.newPercent = this.percent;\n\t\tthis.oldPercent = 0;\n\t},\n\tcomputed: {\n\t\t// 有type主题时，优先起作用\n\t\tcircleColor() {\n\t\t\tif (['success', 'error', 'info', 'primary', 'warning'].indexOf(this.type) >= 0) return this.$u.color[this.type];\n\t\t\telse return this.activeColor;\n\t\t}\n\t},\n\tmounted() {\n\t\t// 在h5端，必须要做一点延时才起作用，this.$nextTick()无效(HX2.4.7)\n\t\tsetTimeout(() => {\n\t\t\tthis.drawProgressBg();\n\t\t\tthis.drawCircleByProgress(this.oldPercent);\n\t\t}, 50);\n\t},\n\tmethods: {\n\t\tdrawProgressBg() {\n\t\t\tlet ctx = uni.createCanvasContext(this.elBgId, this);\n\t\t\tctx.setLineWidth(this.borderWidthPx); // 设置圆环宽度\n\t\t\tctx.setStrokeStyle(this.inactiveColor); // 线条颜色\n\t\t\tctx.beginPath(); // 开始描绘路径\n\t\t\t// 设置一个原点(110,110)，半径为100的圆的路径到当前路径\n\t\t\tlet radius = this.widthPx / 2;\n\t\t\tctx.arc(radius, radius, radius - this.borderWidthPx, 0, 2 * Math.PI, false);\n\t\t\tctx.stroke(); // 对路径进行描绘\n\t\t\tctx.draw();\n\t\t},\n\t\tdrawCircleByProgress(progress) {\n\t\t\t// 第一次操作进度环时将上下文保存到了this.data中，直接使用即可\n\t\t\tlet ctx = this.progressContext;\n\t\t\tif (!ctx) {\n\t\t\t\tctx = uni.createCanvasContext(this.elId, this);\n\t\t\t\tthis.progressContext = ctx;\n\t\t\t}\n\t\t\t// 表示进度的两端为圆形\n\t\t\tctx.setLineCap('round');\n\t\t\t// 设置线条的宽度和颜色\n\t\t\tctx.setLineWidth(this.borderWidthPx);\n\t\t\tctx.setStrokeStyle(this.circleColor);\n\t\t\t// 将总过渡时间除以100，得出每修改百分之一进度所需的时间\n\t\t\tlet time = Math.floor(this.duration / 100);\n\t\t\t// 结束角的计算依据为：将2π分为100份，乘以当前的进度值，得出终止点的弧度值，加起始角，为整个圆从默认的\n\t\t\t// 3点钟方向开始画图，转为更好理解的12点钟方向开始作图，这需要起始角和终止角同时加上this.startAngle值\n\t\t\tlet endAngle = ((2 * Math.PI) / 100) * progress + this.startAngle;\n\t\t\tctx.beginPath();\n\t\t\t// 半径为整个canvas宽度的一半\n\t\t\tlet radius = this.widthPx / 2;\n\t\t\tctx.arc(radius, radius, radius - this.borderWidthPx, this.startAngle, endAngle, false);\n\t\t\tctx.stroke();\n\t\t\tctx.draw();\n\t\t\t// 如果变更后新值大于旧值，意味着增大了百分比\n\t\t\tif (this.newPercent > this.oldPercent) {\n\t\t\t\t// 每次递增百分之一\n\t\t\t\tprogress++;\n\t\t\t\t// 如果新增后的值，大于需要设置的值百分比值，停止继续增加\n\t\t\t\tif (progress > this.newPercent) return;\n\t\t\t} else {\n\t\t\t\t// 同理于上面\n\t\t\t\tprogress--;\n\t\t\t\tif (progress < this.newPercent) return;\n\t\t\t}\n\t\t\tsetTimeout(() => {\n\t\t\t\t// 定时器，每次操作间隔为time值，为了让进度条有动画效果\n\t\t\t\tthis.drawCircleByProgress(progress);\n\t\t\t}, time);\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../libs/css/style.components.scss\";\n.u-circle-progress {\n\tposition: relative;\n\t/* #ifndef APP-NVUE */\n\tdisplay: inline-flex;\t\t\n\t/* #endif */\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.u-canvas-bg {\n\tposition: absolute;\n}\n\n.u-canvas {\n\tposition: absolute;\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-circle-progress/u-line-progress/u-line-progress.vue",
    "content": "<template>\n\t<view class=\"u-progress\" :style=\"{\n\t\tborderRadius: round ? '100rpx' : 0,\n\t\theight: height + 'rpx',\n\t\tbackgroundColor: inactiveColor\n\t}\">\n\t\t<view :class=\"[\n\t\t\ttype ? `u-type-${type}-bg` : '',\n\t\t\tstriped ? 'u-striped' : '',\n\t\t\tstriped && stripedActive ? 'u-striped-active' : ''\n\t\t]\" class=\"u-active\" :style=\"[progressStyle]\">\n\t\t\t<slot v-if=\"$slots.default || $slots.$default\" />\n\t\t\t<block v-else-if=\"showPercent\">\n\t\t\t\t{{percent + '%'}}\n\t\t\t</block>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * lineProgress 线型进度条\n\t * @description 展示操作或任务的当前进度，比如上传文件，是一个线形的进度条。\n\t * @tutorial https://www.uviewui.com/components/lineProgress.html\n\t * @property {String Number} percent 进度条百分比值，为数值类型，0-100\n\t * @property {Boolean} round 进度条两端是否为半圆（默认true）\n\t * @property {String} type 如设置，active-color值将会失效\n\t * @property {String} active-color 进度条激活部分的颜色（默认#19be6b）\n\t * @property {String} inactive-color 进度条的底色（默认#ececec）\n\t * @property {Boolean} show-percent 是否在进度条内部显示当前的百分比值数值（默认true）\n\t * @property {String Number} height 进度条的高度，单位rpx（默认28）\n\t * @property {Boolean} striped 是否显示进度条激活部分的条纹（默认false）\n\t * @property {Boolean} striped-active 条纹是否具有动态效果（默认false）\n\t * @example <u-line-progress :percent=\"70\" :show-percent=\"true\"></u-line-progress>\n\t */\n\texport default {\n\t\tname: \"u-line-progress\",\n\t\tprops: {\n\t\t\t// 两端是否显示半圆形\n\t\t\tround: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 主题颜色\n\t\t\ttype: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 激活部分的颜色\n\t\t\tactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#19be6b'\n\t\t\t},\n\t\t\tinactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#ececec'\n\t\t\t},\n\t\t\t// 进度百分比，数值\n\t\t\tpercent: {\n\t\t\t\ttype: Number,\n\t\t\t\tdefault: 0\n\t\t\t},\n\t\t\t// 是否在进度条内部显示百分比的值\n\t\t\tshowPercent: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 进度条的高度，单位rpx\n\t\t\theight: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 28\n\t\t\t},\n\t\t\t// 是否显示条纹\n\t\t\tstriped: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 条纹是否显示活动状态\n\t\t\tstripedActive: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tprogressStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\tstyle.width = this.percent + '%';\n\t\t\t\tif(this.activeColor) style.backgroundColor = this.activeColor;\n\t\t\t\treturn style;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-progress {\n\t\toverflow: hidden;\n\t\theight: 15px;\n\t\t/* #ifndef APP-NVUE */\n\t\tdisplay: inline-flex;\n\t\t/* #endif */\n\t\talign-items: center;\n\t\twidth: 100%;\n\t\tborder-radius: 100rpx;\n\t}\n\n\t.u-active {\n\t\twidth: 0;\n\t\theight: 100%;\n\t\talign-items: center;\n\t\t@include vue-flex;\n\t\tjustify-items: flex-end;\n\t\tjustify-content: space-around;\n\t\tfont-size: 20rpx;\n\t\tcolor: #ffffff;\n\t\ttransition: all 0.4s ease;\n\t}\n\n\t.u-striped {\n\t\tbackground-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n\t\tbackground-size: 39px 39px;\n\t}\n\n\t.u-striped-active {\n\t\tanimation: progress-stripes 2s linear infinite;\n\t}\n\n\t@keyframes progress-stripes {\n\t\t0% {\n\t\t\tbackground-position: 0 0;\n\t\t}\n\n\t\t100% {\n\t\t\tbackground-position: 39px 0;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-col/u-col.vue",
    "content": "<template>\n\t<view class=\"u-col\" :class=\"[\n\t\t'u-col-' + span\n\t]\" :style=\"{\n\t\tpadding: `0 ${Number(gutter)/2 + 'rpx'}`,\n\t\tmarginLeft: 100 / 12 * offset + '%',\n\t\tflex: `0 0 ${100 / 12 * span}%`,\n\t\talignItems: uAlignItem,\n\t\tjustifyContent: uJustify,\n\t\ttextAlign: textAlign\n\t}\"\n\t @tap=\"click\">\n\t\t<slot></slot>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * col 布局单元格\n\t * @description 通过基础的 12 分栏，迅速简便地创建布局（搭配<u-row>使用）\n\t * @tutorial https://www.uviewui.com/components/layout.html\n\t * @property {String Number} span 栅格占据的列数，总12等分（默认0）\n\t * @property {String} text-align 文字水平对齐方式（默认left）\n\t * @property {String Number} offset 分栏左边偏移，计算方式与span相同（默认0）\n\t * @example <u-col span=\"3\"><view class=\"demo-layout bg-purple\"></view></u-col>\n\t */\n\texport default {\n\t\tname: \"u-col\",\n\t\tprops: {\n\t\t\t// 占父容器宽度的多少等分，总分为12份\n\t\t\tspan: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 12\n\t\t\t},\n\t\t\t// 指定栅格左侧的间隔数(总12栏)\n\t\t\toffset: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 0\n\t\t\t},\n\t\t\t// 水平排列方式，可选值为`start`(或`flex-start`)、`end`(或`flex-end`)、`center`、`around`(或`space-around`)、`between`(或`space-between`)\n\t\t\tjustify: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'start'\n\t\t\t},\n\t\t\t// 垂直对齐方式，可选值为top、center、bottom\n\t\t\talign: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'center'\n\t\t\t},\n\t\t\t// 文字对齐方式\n\t\t\ttextAlign: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'left'\n\t\t\t},\n\t\t\t// 是否阻止事件传播\n\t\t\tstop: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tgutter: 20, // 给col添加间距，左右边距各占一半，从父组件u-row获取\n\t\t\t}\n\t\t},\n\t\tcreated() {\n\t\t\tthis.parent = false;\n\t\t},\n\t\tmounted() {\n\t\t\t// 获取父组件实例，并赋值给对应的参数\n\t\t\tthis.parent = this.$u.$parent.call(this, 'u-row');\n\t\t\tif (this.parent) {\n\t\t\t\tthis.gutter = this.parent.gutter;\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tuJustify() {\n\t\t\t\tif (this.justify == 'end' || this.justify == 'start') return 'flex-' + this.justify;\n\t\t\t\telse if (this.justify == 'around' || this.justify == 'between') return 'space-' + this.justify;\n\t\t\t\telse return this.justify;\n\t\t\t},\n\t\t\tuAlignItem() {\n\t\t\t\tif (this.align == 'top') return 'flex-start';\n\t\t\t\tif (this.align == 'bottom') return 'flex-end';\n\t\t\t\telse return this.align;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tclick(e) {\n\t\t\t\tthis.$emit('click');\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\">\n\t@import \"../../libs/css/style.components.scss\";\n\n\t.u-col {\n\t\t/* #ifdef MP-WEIXIN || MP-QQ || MP-TOUTIAO */\n\t\tfloat: left;\n\t\t/* #endif */\n\t}\n\n\t.u-col-0 {\n\t\twidth: 0;\n\t}\n\n\t.u-col-1 {\n\t\twidth: calc(100%/12);\n\t}\n\n\t.u-col-2 {\n\t\twidth: calc(100%/12 * 2);\n\t}\n\n\t.u-col-3 {\n\t\twidth: calc(100%/12 * 3);\n\t}\n\n\t.u-col-4 {\n\t\twidth: calc(100%/12 * 4);\n\t}\n\n\t.u-col-5 {\n\t\twidth: calc(100%/12 * 5);\n\t}\n\n\t.u-col-6 {\n\t\twidth: calc(100%/12 * 6);\n\t}\n\n\t.u-col-7 {\n\t\twidth: calc(100%/12 * 7);\n\t}\n\n\t.u-col-8 {\n\t\twidth: calc(100%/12 * 8);\n\t}\n\n\t.u-col-9 {\n\t\twidth: calc(100%/12 * 9);\n\t}\n\n\t.u-col-10 {\n\t\twidth: calc(100%/12 * 10);\n\t}\n\n\t.u-col-11 {\n\t\twidth: calc(100%/12 * 11);\n\t}\n\n\t.u-col-12 {\n\t\twidth: calc(100%/12 * 12);\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-collapse/u-collapse.vue",
    "content": "<template>\n\t<view class=\"u-collapse\">\n\t\t<slot />\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * collapse 手风琴\n\t * @description 通过折叠面板收纳内容区域\n\t * @tutorial https://www.uviewui.com/components/collapse.html\n\t * @property {Boolean} accordion 是否手风琴模式（默认true）\n\t * @property {Boolean} arrow 是否显示标题右侧的箭头（默认true）\n\t * @property {String} arrow-color 标题右侧箭头的颜色（默认#909399）\n\t * @property {Object} head-style 标题自定义样式，对象形式\n\t * @property {Object} body-style 主体自定义样式，对象形式\n\t * @property {String} hover-class 样式类名，按下时有效（默认u-hover-class）\n\t * @event {Function} change 当前激活面板展开时触发(如果是手风琴模式，参数activeNames类型为String，否则为Array)\n\t * @example <u-collapse></u-collapse>\n\t */\n\texport default {\n\t\tname:\"u-collapse\",\n\t\tprops: {\n\t\t\t// 是否手风琴模式\n\t\t\taccordion: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 头部的样式\n\t\t\theadStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 主体的样式\n\t\t\tbodyStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 每一个item的样式\n\t\t\titemStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 是否显示右侧的箭头\n\t\t\tarrow: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 箭头的颜色\n\t\t\tarrowColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#909399'\n\t\t\t},\n\t\t\t// 标题部分按压时的样式类，\"none\"为无效果\n\t\t\thoverClass: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'u-hover-class'\n\t\t\t}\n\t\t},\n\t\tcreated() {\n\t\t\tthis.childrens = []\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\t// 重新初始化一次内部的所有子元素的高度计算，用于异步获取数据渲染的情况\n\t\t\tinit() {\n\t\t\t\tthis.childrens.forEach((vm, index) => {\n\t\t\t\t\tvm.init();\n\t\t\t\t})\n\t\t\t},\n\t\t\t// collapse item被点击，由collapse item调用父组件方法\n\t\t\tonChange() {\n\t\t\t\tlet activeItem = [];\n\t\t\t\tthis.childrens.forEach((vm, index) => {\n\t\t\t\t\tif (vm.isShow) {\n\t\t\t\t\t\tactiveItem.push(vm.nameSync);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t// 如果是手风琴模式，只有一个匹配结果，也即activeItem长度为1，将其转为字符串\n\t\t\t\tif (this.accordion) activeItem = activeItem.join('');\n\t\t\t\tthis.$emit('change', activeItem);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-collapse-item/u-collapse-item.vue",
    "content": "<template>\n\t<view class=\"u-collapse-item\" :style=\"[itemStyle]\">\n\t\t<view :hover-stay-time=\"200\" class=\"u-collapse-head\" @tap.stop=\"headClick\" :hover-class=\"hoverClass\" :style=\"[headStyle]\">\n\t\t\t<block v-if=\"!$slots['title-all']\">\n\t\t\t\t<view v-if=\"!$slots['title']\" class=\"u-collapse-title u-line-1\" :style=\"[{ textAlign: align ? align : 'left' },\n\t\t\t\t\tisShow && activeStyle && !arrow ? activeStyle : '']\">\n\t\t\t\t\t{{ title }}\n\t\t\t\t</view>\n\t\t\t\t<slot v-else name=\"title\" />\n\t\t\t\t<view class=\"u-icon-wrap\">\n\t\t\t\t\t<u-icon v-if=\"arrow\" :color=\"arrowColor\" :class=\"{ 'u-arrow-down-icon-active': isShow }\"\n\t\t\t\t\t class=\"u-arrow-down-icon\" name=\"arrow-down\"></u-icon>\n\t\t\t\t</view>\n\t\t\t</block>\n\t\t\t<slot v-else name=\"title-all\" />\n\t\t</view>\n\t\t<view class=\"u-collapse-body\" :style=\"[{\n\t\t\t\theight: isShow ? height + 'px' : '0'\n\t\t\t}]\">\n\t\t\t<view class=\"u-collapse-content\" :id=\"elId\" :style=\"[bodyStyle]\">\n\t\t\t\t<slot></slot>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * collapseItem 手风琴Item\n\t * @description 通过折叠面板收纳内容区域（搭配u-collapse使用）\n\t * @tutorial https://www.uviewui.com/components/collapse.html\n\t * @property {String} title 面板标题\n\t * @property {String Number} index 主要用于事件的回调，标识那个Item被点击\n\t * @property {Boolean} disabled 面板是否可以打开或收起（默认false）\n\t * @property {Boolean} open 设置某个面板的初始状态是否打开（默认false）\n\t * @property {String Number} name 唯一标识符，如不设置，默认用当前collapse-item的索引值\n\t * @property {String} align 标题的对齐方式（默认left）\n\t * @property {Object} active-style 不显示箭头时，可以添加当前选择的collapse-item活动样式，对象形式\n\t * @event {Function} change 某个item被打开或者收起时触发\n\t * @example <u-collapse-item :title=\"item.head\" v-for=\"(item, index) in itemList\" :key=\"index\">{{item.body}}</u-collapse-item>\n\t */\n\texport default {\n\t\tname: \"u-collapse-item\",\n\t\tprops: {\n\t\t\t// 标题\n\t\t\ttitle: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 标题的对齐方式\n\t\t\talign: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'left'\n\t\t\t},\n\t\t\t// 是否可以点击收起\n\t\t\tdisabled: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// collapse显示与否\n\t\t\topen: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 唯一标识符\n\t\t\tname: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t//活动样式\n\t\t\tactiveStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 标识当前为第几个\n\t\t\tindex: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: ''\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tisShow: false,\n\t\t\t\telId: this.$u.guid(),\n\t\t\t\theight: 0, // body内容的高度\n\t\t\t\theadStyle: {}, // 头部样式，对象形式\n\t\t\t\tbodyStyle: {}, // 主体部分样式\n\t\t\t\titemStyle: {}, // 每个item的整体样式\n\t\t\t\tarrowColor: '', // 箭头的颜色\n\t\t\t\thoverClass: '', // 头部按下时的效果样式类\n\t\t\t\tarrow: true, // 是否显示右侧箭头\n\t\t\t\t\n\t\t\t};\n\t\t},\n\t\twatch: {\n\t\t\topen(val) {\n\t\t\t\tthis.isShow = val;\n\t\t\t}\n\t\t},\n\t\tcreated() {\n\t\t\tthis.parent = false;\n\t\t\t// 获取u-collapse的信息，放在u-collapse是为了方便，不用每个u-collapse-item写一遍\n\t\t\tthis.isShow = this.open;\n\t\t},\n\t\tmethods: {\n\t\t\t// 异步获取内容，或者动态修改了内容时，需要重新初始化\n\t\t\tinit() {\n\t\t\t\tthis.parent = this.$u.$parent.call(this, 'u-collapse');\n\t\t\t\tif(this.parent) {\n\t\t\t\t\tthis.nameSync = this.name ? this.name : this.parent.childrens.length;\n\t\t\t\t\t// 不存在时才添加本实例\n\t\t\t\t\t!this.parent.childrens.includes(this) && this.parent.childrens.push(this);\n\t\t\t\t\tthis.headStyle = this.parent.headStyle;\n\t\t\t\t\tthis.bodyStyle = this.parent.bodyStyle;\n\t\t\t\t\tthis.arrowColor = this.parent.arrowColor;\n\t\t\t\t\tthis.hoverClass = this.parent.hoverClass;\n\t\t\t\t\tthis.arrow = this.parent.arrow;\n\t\t\t\t\tthis.itemStyle = this.parent.itemStyle;\n\t\t\t\t}\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.queryRect();\n\t\t\t\t});\n\t\t\t},\n\t\t\t// 点击collapsehead头部\n\t\t\theadClick() {\n\t\t\t\tif (this.disabled) return;\n\t\t\t\tif (this.parent && this.parent.accordion == true) {\n\t\t\t\t\tthis.parent.childrens.map(val => {\n\t\t\t\t\t\t// 自身不设置为false，因为后面有this.isShow = !this.isShow;处理了\n\t\t\t\t\t\tif (this != val) {\n\t\t\t\t\t\t\tval.isShow = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tthis.isShow = !this.isShow;\n\t\t\t\t// 触发本组件的事件\n\t\t\t\tthis.$emit('change', {\n\t\t\t\t\tindex: this.index,\n\t\t\t\t\tshow: this.isShow\n\t\t\t\t})\n\t\t\t\t// 只有在打开时才发出事件\n\t\t\t\tif (this.isShow) this.parent && this.parent.onChange();\n\t\t\t\tthis.$forceUpdate();\n\t\t\t},\n\t\t\t// 查询内容高度\n\t\t\tqueryRect() {\n\t\t\t\t// $uGetRect为uView自带的节点查询简化方法，详见文档介绍：https://www.uviewui.com/js/getRect.html\n\t\t\t\t// 组件内部一般用this.$uGetRect，对外的为this.$u.getRect，二者功能一致，名称不同\n\t\t\t\tthis.$uGetRect('#' + this.elId).then(res => {\n\t\t\t\t\tthis.height = res.height;\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\tmounted() {\n\t\t\tthis.init();\n\t\t}\n\t};\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-collapse-head {\n\t\tposition: relative;\n\t\t@include vue-flex;\n\t\tjustify-content: space-between;\n\t\talign-items: center;\n\t\tcolor: $u-main-color;\n\t\tfont-size: 30rpx;\n\t\tline-height: 1;\n\t\tpadding: 24rpx 0;\n\t\ttext-align: left;\n\t}\n\n\t.u-collapse-title {\n\t\tflex: 1;\n\t\toverflow: hidden;\n\t}\n\n\t.u-arrow-down-icon {\n\t\ttransition: all 0.3s;\n\t\tmargin-right: 20rpx;\n\t\tmargin-left: 14rpx;\n\t}\n\n\t.u-arrow-down-icon-active {\n\t\ttransform: rotate(180deg);\n\t\ttransform-origin: center center;\n\t}\n\n\t.u-collapse-body {\n\t\toverflow: hidden;\n\t\ttransition: all 0.3s;\n\t}\n\n\t.u-collapse-content {\n\t\toverflow: hidden;\n\t\tfont-size: 28rpx;\n\t\tcolor: $u-tips-color;\n\t\ttext-align: left;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-column-notice/u-column-notice.vue",
    "content": "<template>\n\t<view\n\t\tclass=\"u-notice-bar\"\n\t\t:style=\"{\n\t\t\tbackground: computeBgColor,\n\t\t\tpadding: padding\n\t\t}\"\n\t\t:class=\"[\n\t\t\ttype ? `u-type-${type}-light-bg` : ''\n\t\t]\"\n\t>\n\t\t<view class=\"u-icon-wrap\">\n\t\t\t<u-icon class=\"u-left-icon\" v-if=\"volumeIcon\" name=\"volume-fill\" :size=\"volumeSize\" :color=\"computeColor\"></u-icon>\n\t\t</view>\n\t\t<swiper :disable-touch=\"disableTouch\" @change=\"change\" :autoplay=\"autoplay && playState == 'play'\" :vertical=\"vertical\" circular :interval=\"duration\" class=\"u-swiper\">\n\t\t\t<swiper-item v-for=\"(item, index) in list\" :key=\"index\" class=\"u-swiper-item\">\n\t\t\t\t<view\n\t\t\t\t\tclass=\"u-news-item u-line-1\"\n\t\t\t\t\t:style=\"[textStyle]\"\n\t\t\t\t\t@tap=\"click(index)\"\n\t\t\t\t\t:class=\"['u-type-' + type]\"\n\t\t\t\t>\n\t\t\t\t\t{{ item }}\n\t\t\t\t</view>\n\t\t\t</swiper-item>\n\t\t</swiper>\n\t\t<view class=\"u-icon-wrap\">\n\t\t\t<u-icon @click=\"getMore\" class=\"u-right-icon\" v-if=\"moreIcon\" name=\"arrow-right\" :size=\"26\" :color=\"computeColor\"></u-icon>\n\t\t\t<u-icon @click=\"close\" class=\"u-right-icon\" v-if=\"closeIcon\" name=\"close\" :size=\"24\" :color=\"computeColor\"></u-icon>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tprops: {\n\t\t// 显示的内容，数组\n\t\tlist: {\n\t\t\ttype: Array,\n\t\t\tdefault() {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\t\t// 显示的主题，success|error|primary|info|warning\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tdefault: 'warning'\n\t\t},\n\t\t// 是否显示左侧的音量图标\n\t\tvolumeIcon: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 是否显示右侧的右箭头图标\n\t\tmoreIcon: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 是否显示右侧的关闭图标\n\t\tcloseIcon: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 是否自动播放\n\t\tautoplay: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 文字颜色，各图标也会使用文字颜色\n\t\tcolor: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 背景颜色\n\t\tbgColor: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 滚动方向，row-水平滚动，column-垂直滚动\n\t\tdirection: {\n\t\t\ttype: String,\n\t\t\tdefault: 'row'\n\t\t},\n\t\t// 是否显示\n\t\tshow: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 字体大小，单位rpx\n\t\tfontSize: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 26\n\t\t},\n\t\t// 滚动一个周期的时间长，单位ms\n\t\tduration: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 2000\n\t\t},\n\t\t// 音量喇叭的大小\n\t\tvolumeSize: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 34\n\t\t},\n\t\t// 水平滚动时的滚动速度，即每秒滚动多少rpx，这有利于控制文字无论多少时，都能有一个恒定的速度\n\t\tspeed: {\n\t\t\ttype: Number,\n\t\t\tdefault: 160\n\t\t},\n\t\t// 水平滚动时，是否采用衔接形式滚动\n\t\tisCircular: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 滚动方向，horizontal-水平滚动，vertical-垂直滚动\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\tdefault: 'horizontal'\n\t\t},\n\t\t// 播放状态，play-播放，paused-暂停\n\t\tplayState: {\n\t\t\ttype: String,\n\t\t\tdefault: 'play'\n\t\t},\n\t\t// 是否禁止用手滑动切换\n\t\t// 目前HX2.6.11，只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序\n\t\tdisableTouch: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 通知的边距\n\t\tpadding: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: '18rpx 24rpx'\n\t\t}\n\t},\n\tcomputed: {\n\t\t// 计算字体颜色，如果没有自定义的，就用uview主题颜色\n\t\tcomputeColor() {\n\t\t\tif (this.color) return this.color;\n\t\t\t// 如果是无主题，就默认使用content-color\n\t\t\telse if(this.type == 'none') return '#606266';\n\t\t\telse return this.type;\n\t\t},\n\t\t// 文字内容的样式\n\t\ttextStyle() {\n\t\t\tlet style = {};\n\t\t\tif (this.color) style.color = this.color;\n\t\t\telse if(this.type == 'none') style.color = '#606266';\n\t\t\tstyle.fontSize = this.fontSize + 'rpx';\n\t\t\treturn style;\n\t\t},\n\t\t// 垂直或者水平滚动\n\t\tvertical() {\n\t\t\tif(this.mode == 'horizontal') return false;\n\t\t\telse return true;\n\t\t},\n\t\t// 计算背景颜色\n\t\tcomputeBgColor() {\n\t\t\tif (this.bgColor) return this.bgColor;\n\t\t\telse if(this.type == 'none') return 'transparent';\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\t// animation: false\n\t\t};\n\t},\n\tmethods: {\n\t\t// 点击通告栏\n\t\tclick(index) {\n\t\t\tthis.$emit('click', index);\n\t\t},\n\t\t// 点击关闭按钮\n\t\tclose() {\n\t\t\tthis.$emit('close');\n\t\t},\n\t\t// 点击更多箭头按钮\n\t\tgetMore() {\n\t\t\tthis.$emit('getMore');\n\t\t},\n\t\tchange(e) {\n\t\t\tlet index = e.detail.current;\n\t\t\tif(index == this.list.length - 1) {\n\t\t\t\tthis.$emit('end');\n\t\t\t}\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../libs/css/style.components.scss\";\n\n.u-notice-bar {\n\twidth: 100%;\n\t@include vue-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex-wrap: nowrap;\n\tpadding: 18rpx 24rpx;\n\toverflow: hidden;\n}\n\n.u-swiper {\n\tfont-size: 26rpx;\n\theight: 32rpx;\n\t@include vue-flex;\n\talign-items: center;\n\tflex: 1;\n\tmargin-left: 12rpx;\n}\n\n.u-swiper-item {\n\t@include vue-flex;\n\talign-items: center;\n\toverflow: hidden;\n}\n\n.u-news-item {\n\toverflow: hidden;\n}\n\n.u-right-icon {\n\tmargin-left: 12rpx;\n\t/* #ifndef APP-NVUE */\n\tdisplay: inline-flex;\t\t\n\t/* #endif */\n\talign-items: center;\n}\n\n.u-left-icon {\n\t/* #ifndef APP-NVUE */\n\tdisplay: inline-flex;\t\t\n\t/* #endif */\n\talign-items: center;\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-count-down/u-count-down.vue",
    "content": "<template>\n\t<view class=\"u-countdown\">\n\t\t<view class=\"u-countdown-item\" :style=\"[itemStyle]\" v-if=\"showDays && (hideZeroDay || (!hideZeroDay && d != '00'))\">\n\t\t\t<view class=\"u-countdown-time\" :style=\"[letterStyle]\">\n\t\t\t\t{{ d }}\n\t\t\t</view>\n\t\t</view>\n\t\t<view\n\t\t\tclass=\"u-countdown-colon\"\n\t\t\t:style=\"{fontSize: separatorSize + 'rpx', color: separatorColor, paddingBottom: separator == 'colon' ? '4rpx' : 0}\"\n\t\t\tv-if=\"showDays && (hideZeroDay || (!hideZeroDay && d != '00'))\"\n\t\t>\n\t\t\t{{ separator == 'colon' ? ':' : '天' }}\n\t\t</view>\n\t\t<view class=\"u-countdown-item\" :style=\"[itemStyle]\" v-if=\"showHours\">\n\t\t\t<view class=\"u-countdown-time\" :style=\"{ fontSize: fontSize + 'rpx', color: color}\">\n\t\t\t\t{{ h }}\n\t\t\t</view>\n\t\t</view>\n\t\t<view\n\t\t\tclass=\"u-countdown-colon\"\n\t\t\t:style=\"{fontSize: separatorSize + 'rpx', color: separatorColor, paddingBottom: separator == 'colon' ? '4rpx' : 0}\"\n\t\t\tv-if=\"showHours\"\n\t\t>\n\t\t\t{{ separator == 'colon' ? ':' : '时' }}\n\t\t</view>\n\t\t<view class=\"u-countdown-item\" :style=\"[itemStyle]\" v-if=\"showMinutes\">\n\t\t\t<view class=\"u-countdown-time\" :style=\"{ fontSize: fontSize + 'rpx', color: color}\">\n\t\t\t\t{{ i }}\n\t\t\t</view>\n\t\t</view>\n\t\t<view\n\t\t\tclass=\"u-countdown-colon\"\n\t\t\t:style=\"{fontSize: separatorSize + 'rpx', color: separatorColor, paddingBottom: separator == 'colon' ? '4rpx' : 0}\"\n\t\t\tv-if=\"showMinutes\"\n\t\t>\n\t\t\t{{ separator == 'colon' ? ':' : '分' }}\n\t\t</view>\n\t\t<view class=\"u-countdown-item\" :style=\"[itemStyle]\" v-if=\"showSeconds\">\n\t\t\t<view class=\"u-countdown-time\" :style=\"{ fontSize: fontSize + 'rpx', color: color}\">\n\t\t\t\t{{ s }}\n\t\t\t</view>\n\t\t</view>\n\t\t<view\n\t\t\tclass=\"u-countdown-colon\"\n\t\t\t:style=\"{fontSize: separatorSize + 'rpx', color: separatorColor, paddingBottom: separator == 'colon' ? '4rpx' : 0}\"\n\t\t\tv-if=\"showSeconds && separator == 'zh'\"\n\t\t>\n\t\t\t秒\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n/**\n * countDown 倒计时\n * @description 该组件一般使用于某个活动的截止时间上，通过数字的变化，给用户明确的时间感受，提示用户进行某一个行为操作。\n * @tutorial https://www.uviewui.com/components/countDown.html\n * @property {String Number} timestamp 倒计时，单位为秒\n * @property {Boolean} autoplay 是否自动开始倒计时，如果为false，需手动调用开始方法。见官网说明（默认true）\n * @property {String} separator 分隔符，colon为英文冒号，zh为中文（默认colon）\n * @property {String Number} separator-size 分隔符的字体大小，单位rpx（默认30）\n * @property {String} separator-color 分隔符的颜色（默认#303133）\n * @property {String Number} font-size 倒计时字体大小，单位rpx（默认30）\n * @property {Boolean} show-border 是否显示倒计时数字的边框（默认false）\n * @property {Boolean} hide-zero-day 当\"天\"的部分为0时，隐藏该字段 （默认true）\n * @property {String} border-color 数字边框的颜色（默认#303133）\n * @property {String} bg-color 倒计时数字的背景颜色（默认#ffffff）\n * @property {String} color 倒计时数字的颜色（默认#303133）\n * @property {String} height 数字高度值(宽度等同此值)，设置边框时看情况是否需要设置此值，单位rpx（默认auto）\n * @property {Boolean} show-days 是否显示倒计时的\"天\"部分（默认true）\n * @property {Boolean} show-hours 是否显示倒计时的\"时\"部分（默认true）\n * @property {Boolean} show-minutes 是否显示倒计时的\"分\"部分（默认true）\n * @property {Boolean} show-seconds 是否显示倒计时的\"秒\"部分（默认true）\n * @event {Function} end 倒计时结束\n * @event {Function} change 每秒触发一次，回调为当前剩余的倒计秒数\n * @example <u-count-down ref=\"uCountDown\" :timestamp=\"86400\" :autoplay=\"false\"></u-count-down>\n */\nexport default {\n\tname: 'u-count-down',\n\tprops: {\n\t\t// 倒计时的时间，秒为单位\n\t\ttimestamp: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 0\n\t\t},\n\t\t// 是否自动开始倒计时\n\t\tautoplay: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 用英文冒号(colon)或者中文(zh)当做分隔符，false的时候为中文，如：\"11:22\"或\"11时22秒\"\n\t\tseparator: {\n\t\t\ttype: String,\n\t\t\tdefault: 'colon'\n\t\t},\n\t\t// 分隔符的大小，单位rpx\n\t\tseparatorSize: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 30\n\t\t},\n\t\t// 分隔符颜色\n\t\tseparatorColor: {\n\t\t\ttype: String,\n\t\t\tdefault: \"#303133\"\n\t\t},\n\t\t// 字体颜色\n\t\tcolor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#303133'\n\t\t},\n\t\t// 字体大小，单位rpx\n\t\tfontSize: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 30\n\t\t},\n\t\t// 背景颜色\n\t\tbgColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#fff'\n\t\t},\n\t\t// 数字框高度，单位rpx\n\t\theight: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 'auto'\n\t\t},\n\t\t// 是否显示数字框\n\t\tshowBorder: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 边框颜色\n\t\tborderColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#303133'\n\t\t},\n\t\t// 是否显示秒\n\t\tshowSeconds: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 是否显示分钟\n\t\tshowMinutes: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 是否显示小时\n\t\tshowHours: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 是否显示“天”\n\t\tshowDays: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 当\"天\"的部分为0时，不显示\n\t\thideZeroDay: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\twatch: {\n\t\t// 监听时间戳的变化\n\t\ttimestamp(newVal, oldVal) {\n\t\t\t// 如果倒计时间发生变化，清除定时器，重新开始倒计时\n\t\t\tthis.clearTimer();\n\t\t\tthis.start();\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\td: '00', // 天的默认值\n\t\t\th: '00', // 小时的默认值\n\t\t\ti: '00', // 分钟的默认值\n\t\t\ts: '00', // 秒的默认值\n\t\t\ttimer: null ,// 定时器\n\t\t\tseconds: 0, // 记录不停倒计过程中变化的秒数\n\t\t};\n\t},\n\tcomputed: {\n\t\t// 倒计时item的样式，item为分别的时分秒部分的数字\n\t\titemStyle() {\n\t\t\tlet style = {};\n\t\t\tif(this.height) {\n\t\t\t\tstyle.height = this.height + 'rpx';\n\t\t\t\tstyle.width = this.height + 'rpx';\n\t\t\t}\n\t\t\tif(this.showBorder) {\n\t\t\t\tstyle.borderStyle = 'solid';\n\t\t\t\tstyle.borderColor = this.borderColor;\n\t\t\t\tstyle.borderWidth = '1px';\n\t\t\t}\n\t\t\tif(this.bgColor) {\n\t\t\t\tstyle.backgroundColor = this.bgColor;\n\t\t\t}\n\t\t\treturn style;\n\t\t},\n\t\t// 倒计时数字的样式\n\t\tletterStyle() {\n\t\t\tlet style = {};\n\t\t\tif(this.fontSize) style.fontSize = this.fontSize +  'rpx';\n\t\t\tif(this.color) style.color = this.color;\n\t\t\treturn style;\n\t\t}\n\t},\n\tmounted() {\n\t\t// 如果自动倒计时\n\t\tthis.autoplay && this.timestamp && this.start();\n\t},\n\tmethods: {\n\t\t// 倒计时\n\t\tstart() {\n\t\t\t// 避免可能出现的倒计时重叠情况\n\t\t\tthis.clearTimer();\n\t\t\tif (this.timestamp <= 0) return;\n\t\t\tthis.seconds = Number(this.timestamp);\n\t\t\tthis.formatTime(this.seconds);\n\t\t\tthis.timer = setInterval(() => {\n\t\t\t\tthis.seconds--;\n\t\t\t\t// 发出change事件\n\t\t\t\tthis.$emit('change', this.seconds);\n\t\t\t\tif (this.seconds < 0) {\n\t\t\t\t\treturn this.end();\n\t\t\t\t}\n\t\t\t\tthis.formatTime(this.seconds);\n\t\t\t}, 1000);\n\t\t},\n\t\t// 格式化时间\n\t\tformatTime(seconds) {\n\t\t\t// 小于等于0的话，结束倒计时\n\t\t\tseconds <= 0 && this.end();\n\t\t\tlet [day, hour, minute, second] = [0, 0, 0, 0];\n\t\t\tday = Math.floor(seconds / (60 * 60 * 24));\n\t\t\t// 判断是否显示“天”参数，如果不显示，将天部分的值，加入到小时中\n\t\t\t// hour为给后面计算秒和分等用的(基于显示天的前提下计算)\n\t\t\thour = Math.floor(seconds / (60 * 60)) - day * 24;\n\t\t\t// showHour为需要显示的小时\n\t\t\tlet showHour = null;\n\t\t\tif(this.showDays) {\n\t\t\t\tshowHour = hour;\n\t\t\t} else {\n\t\t\t\t// 如果不显示天数，将“天”部分的时间折算到小时中去\n\t\t\t\tshowHour = Math.floor(seconds / (60 * 60));\n\t\t\t}\n\t\t\tminute = Math.floor(seconds / 60) - hour * 60 - day * 24 * 60;\n\t\t\tsecond = Math.floor(seconds) - day * 24 * 60 * 60 - hour * 60 * 60 - minute * 60;\n\t\t\t// 如果小于10，在前面补上一个\"0\"\n\t\t\tshowHour = showHour < 10 ? '0' + showHour : showHour;\n\t\t\tminute = minute < 10 ? '0' + minute : minute;\n\t\t\tsecond = second < 10 ? '0' + second : second;\n\t\t\tday = day < 10 ? '0' + day : day;\n\t\t\tthis.d = day;\n\t\t\tthis.h = showHour;\n\t\t\tthis.i = minute;\n\t\t\tthis.s = second;\n\t\t},\n\t\t// 停止倒计时\n\t\tend() {\n\t\t\tthis.clearTimer();\n\t\t\tthis.$emit('end', {});\n\t\t},\n\t\t// 清除定时器\n\t\tclearTimer() {\n\t\t\tif(this.timer) {\n\t\t\t\t// 清除定时器\n\t\t\t\tclearInterval(this.timer);\n\t\t\t\tthis.timer = null;\n\t\t\t}\n\t\t}\n\t},\n\tbeforeDestroy() {\n\t\tclearInterval(this.timer);\n\t\tthis.timer = null;\n\t}\n};\n</script>\n\n<style scoped lang=\"scss\">\n\t@import \"../../libs/css/style.components.scss\";\n\n\t.u-countdown {\n\t\t/* #ifndef APP-NVUE */\n\t\tdisplay: inline-flex;\t\t\n\t\t/* #endif */\n\t\talign-items: center;\n\t}\n\n\t.u-countdown-item {\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tpadding: 2rpx;\n\t\tborder-radius: 6rpx;\n\t\twhite-space: nowrap;\n\t\ttransform: translateZ(0);\n\t}\n\n\t.u-countdown-time {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\tline-height: 1;\n\t}\n\n\t.u-countdown-colon {\n\t\t@include vue-flex;\n\t\tjustify-content: center;\n\t\tpadding: 0 5rpx;\n\t\tline-height: 1;\n\t\talign-items: center;\n\t\tpadding-bottom: 4rpx;\n\t}\n\n\t.u-countdown-scale {\n\t\ttransform: scale(0.9);\n\t\ttransform-origin: center center;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-count-to/u-count-to.vue",
    "content": "<template>\n\t<view\n\t\tclass=\"u-count-num\"\n\t\t:style=\"{\n\t\t\tfontSize: fontSize + 'rpx',\n\t\t\tfontWeight: bold ? 'bold' : 'normal',\n\t\t\tcolor: color\n\t\t}\"\n\t>\n\t\t{{ displayValue }}\n\t</view>\n</template>\n\n<script>\n/**\n * countTo 数字滚动\n * @description 该组件一般用于需要滚动数字到某一个值的场景，目标要求是一个递增的值。\n * @tutorial https://www.uviewui.com/components/countTo.html\n * @property {String Number} start-val 开始值\n * @property {String Number} end-val 结束值\n * @property {String Number} duration 滚动过程所需的时间，单位ms（默认2000）\n * @property {Boolean} autoplay 是否自动开始滚动（默认true）\n * @property {String Number} decimals 要显示的小数位数，见官网说明（默认0）\n * @property {Boolean} use-easing 滚动结束时，是否缓动结尾，见官网说明（默认true）\n * @property {String} separator 千位分隔符，见官网说明\n * @property {String} color 字体颜色（默认#303133）\n * @property {String Number} font-size 字体大小，单位rpx（默认50）\n * @property {Boolean} bold 字体是否加粗（默认false）\n * @event {Function} end 数值滚动到目标值时触发\n * @example <u-count-to ref=\"uCountTo\" :end-val=\"endVal\" :autoplay=\"autoplay\"></u-count-to>\n */\nexport default {\n\tname: 'u-count-to',\n\tprops: {\n\t\t// 开始的数值，默认从0增长到某一个数\n\t\tstartVal: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 0\n\t\t},\n\t\t// 要滚动的目标数值，必须\n\t\tendVal: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 0,\n\t\t\trequired: true\n\t\t},\n\t\t// 滚动到目标数值的动画持续时间，单位为毫秒（ms）\n\t\tduration: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 2000\n\t\t},\n\t\t// 设置数值后是否自动开始滚动\n\t\tautoplay: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 要显示的小数位数\n\t\tdecimals: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 0\n\t\t},\n\t\t// 是否在即将到达目标数值的时候，使用缓慢滚动的效果\n\t\tuseEasing: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 十进制分割\n\t\tdecimal: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: '.'\n\t\t},\n\t\t// 字体颜色\n\t\tcolor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#303133'\n\t\t},\n\t\t// 字体大小\n\t\tfontSize: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 50\n\t\t},\n\t\t// 是否加粗字体\n\t\tbold: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 千位分隔符，类似金额的分割(￥23,321.05中的\",\")\n\t\tseparator: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tlocalStartVal: this.startVal,\n\t\t\tdisplayValue: this.formatNumber(this.startVal),\n\t\t\tprintVal: null,\n\t\t\tpaused: false, // 是否暂停\n\t\t\tlocalDuration: Number(this.duration),\n\t\t\tstartTime: null, // 开始的时间\n\t\t\ttimestamp: null, // 时间戳\n\t\t\tremaining: null, // 停留的时间\n\t\t\trAF: null,\n\t\t\tlastTime: 0 // 上一次的时间\n\t\t};\n\t},\n\tcomputed: {\n\t\tcountDown() {\n\t\t\treturn this.startVal > this.endVal;\n\t\t}\n\t},\n\twatch: {\n\t\tstartVal() {\n\t\t\tthis.autoplay && this.start();\n\t\t},\n\t\tendVal() {\n\t\t\tthis.autoplay && this.start();\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.autoplay && this.start();\n\t},\n\tmethods: {\n\t\teasingFn(t, b, c, d) {\n\t\t\treturn (c * (-Math.pow(2, (-10 * t) / d) + 1) * 1024) / 1023 + b;\n\t\t},\n\t\trequestAnimationFrame(callback) {\n\t\t\tconst currTime = new Date().getTime();\n\t\t\t// 为了使setTimteout的尽可能的接近每秒60帧的效果\n\t\t\tconst timeToCall = Math.max(0, 16 - (currTime - this.lastTime));\n\t\t\tconst id = setTimeout(() => {\n\t\t\t\tcallback(currTime + timeToCall);\n\t\t\t}, timeToCall);\n\t\t\tthis.lastTime = currTime + timeToCall;\n\t\t\treturn id;\n\t\t},\n\n\t\tcancelAnimationFrame(id) {\n\t\t\tclearTimeout(id);\n\t\t},\n\t\t// 开始滚动数字\n\t\tstart() {\n\t\t\tthis.localStartVal = this.startVal;\n\t\t\tthis.startTime = null;\n\t\t\tthis.localDuration = this.duration;\n\t\t\tthis.paused = false;\n\t\t\tthis.rAF = this.requestAnimationFrame(this.count);\n\t\t},\n\t\t// 暂定状态，重新再开始滚动；或者滚动状态下，暂停\n\t\treStart() {\n\t\t\tif (this.paused) {\n\t\t\t\tthis.resume();\n\t\t\t\tthis.paused = false;\n\t\t\t} else {\n\t\t\t\tthis.stop();\n\t\t\t\tthis.paused = true;\n\t\t\t}\n\t\t},\n\t\t// 暂停\n\t\tstop() {\n\t\t\tthis.cancelAnimationFrame(this.rAF);\n\t\t},\n\t\t// 重新开始(暂停的情况下)\n\t\tresume() {\n\t\t\tthis.startTime = null;\n\t\t\tthis.localDuration = this.remaining;\n\t\t\tthis.localStartVal = this.printVal;\n\t\t\tthis.requestAnimationFrame(this.count);\n\t\t},\n\t\t// 重置\n\t\treset() {\n\t\t\tthis.startTime = null;\n\t\t\tthis.cancelAnimationFrame(this.rAF);\n\t\t\tthis.displayValue = this.formatNumber(this.startVal);\n\t\t},\n\t\tcount(timestamp) {\n\t\t\tif (!this.startTime) this.startTime = timestamp;\n\t\t\tthis.timestamp = timestamp;\n\t\t\tconst progress = timestamp - this.startTime;\n\t\t\tthis.remaining = this.localDuration - progress;\n\t\t\tif (this.useEasing) {\n\t\t\t\tif (this.countDown) {\n\t\t\t\t\tthis.printVal = this.localStartVal - this.easingFn(progress, 0, this.localStartVal - this.endVal, this.localDuration);\n\t\t\t\t} else {\n\t\t\t\t\tthis.printVal = this.easingFn(progress, this.localStartVal, this.endVal - this.localStartVal, this.localDuration);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this.countDown) {\n\t\t\t\t\tthis.printVal = this.localStartVal - (this.localStartVal - this.endVal) * (progress / this.localDuration);\n\t\t\t\t} else {\n\t\t\t\t\tthis.printVal = this.localStartVal + (this.endVal - this.localStartVal) * (progress / this.localDuration);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.countDown) {\n\t\t\t\tthis.printVal = this.printVal < this.endVal ? this.endVal : this.printVal;\n\t\t\t} else {\n\t\t\t\tthis.printVal = this.printVal > this.endVal ? this.endVal : this.printVal;\n\t\t\t}\n\t\t\tthis.displayValue = this.formatNumber(this.printVal);\n\t\t\tif (progress < this.localDuration) {\n\t\t\t\tthis.rAF = this.requestAnimationFrame(this.count);\n\t\t\t} else {\n\t\t\t\tthis.$emit('end');\n\t\t\t}\n\t\t},\n\t\t// 判断是否数字\n\t\tisNumber(val) {\n\t\t\treturn !isNaN(parseFloat(val));\n\t\t},\n\t\tformatNumber(num) {\n\t\t\t// 将num转为Number类型，因为其值可能为字符串数值，调用toFixed会报错\n\t\t\tnum = Number(num);\n\t\t\tnum = num.toFixed(Number(this.decimals));\n\t\t\tnum += '';\n\t\t\tconst x = num.split('.');\n\t\t\tlet x1 = x[0];\n\t\t\tconst x2 = x.length > 1 ? this.decimal + x[1] : '';\n\t\t\tconst rgx = /(\\d+)(\\d{3})/;\n\t\t\tif (this.separator && !this.isNumber(this.separator)) {\n\t\t\t\twhile (rgx.test(x1)) {\n\t\t\t\t\tx1 = x1.replace(rgx, '$1' + this.separator + '$2');\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn x1 + x2;\n\t\t},\n\t\tdestroyed() {\n\t\t\tthis.cancelAnimationFrame(this.rAF);\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../libs/css/style.components.scss\";\n\n.u-count-num {\n\t/* #ifndef APP-NVUE */\n\tdisplay: inline-flex;\t\t\n\t/* #endif */\n\ttext-align: center;\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-divider/u-divider.vue",
    "content": "<template>\n\t<view class=\"u-divider\" :style=\"{\n\t\theight: height == 'auto' ? 'auto' : height + 'rpx',\n\t\tbackgroundColor: bgColor,\n\t\tmarginBottom: marginBottom + 'rpx',\n\t\tmarginTop: marginTop + 'rpx'\n\t}\" @tap=\"click\">\n\t\t<view class=\"u-divider-line\" :class=\"[type ? 'u-divider-line--bordercolor--' + type : '']\" :style=\"[lineStyle]\"></view>\n\t\t<view v-if=\"useSlot\" class=\"u-divider-text\" :style=\"{\n\t\t\tcolor: color,\n\t\t\tfontSize: fontSize + 'rpx'\n\t\t}\"><slot /></view>\n\t\t<view class=\"u-divider-line\" :class=\"[type ? 'u-divider-line--bordercolor--' + type : '']\" :style=\"[lineStyle]\"></view>\n\t</view>\n</template>\n\n<script>\n/**\n * divider 分割线\n * @description 区隔内容的分割线，一般用于页面底部\"没有更多\"的提示。\n * @tutorial https://www.uviewui.com/components/divider.html\n * @property {String Number} half-width 文字左或右边线条宽度，数值或百分比，数值时单位为rpx\n * @property {String} border-color 线条颜色，优先级高于type（默认#dcdfe6）\n * @property {String} color 文字颜色（默认#909399）\n * @property {String Number} fontSize 字体大小，单位rpx（默认26）\n * @property {String} bg-color 整个divider的背景颜色（默认呢#ffffff）\n * @property {String Number} height 整个divider的高度，单位rpx（默认40）\n * @property {String} type 将线条设置主题色（默认primary）\n * @property {Boolean} useSlot 是否使用slot传入内容，如果不传入，中间不会有空隙（默认true）\n * @property {String Number} margin-top 与前一个组件的距离，单位rpx（默认0）\n * @property {String Number} margin-bottom 与后一个组件的距离，单位rpx（0）\n * @event {Function} click divider组件被点击时触发\n * @example <u-divider color=\"#fa3534\">长河落日圆</u-divider>\n */\nexport default {\n\tname: 'u-divider',\n\tprops: {\n\t\t// 单一边divider横线的宽度(数值)，单位rpx。或者百分比\n\t\thalfWidth: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 150\n\t\t},\n\t\t// divider横线的颜色，如设置，\n\t\tborderColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#dcdfe6'\n\t\t},\n\t\t// 主题色，可以是primary|info|success|warning|error之一值\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tdefault: 'primary'\n\t\t},\n\t\t// 文字颜色\n\t\tcolor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#909399'\n\t\t},\n\t\t// 文字大小，单位rpx\n\t\tfontSize: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 26\n\t\t},\n\t\t// 整个divider的背景颜色\n\t\tbgColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#ffffff'\n\t\t},\n\t\t// 整个divider的高度单位rpx\n\t\theight: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 'auto'\n\t\t},\n\t\t// 上边距\n\t\tmarginTop: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 0\n\t\t},\n\t\t// 下边距\n\t\tmarginBottom: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 0\n\t\t},\n\t\t// 是否使用slot传入内容，如果不用slot传入内容，先的中间就不会有空隙\n\t\tuseSlot: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t}\n\t},\n\tcomputed: {\n\t\tlineStyle() {\n\t\t\tlet style = {};\n\t\t\tif(String(this.halfWidth).indexOf('%') != -1) style.width = this.halfWidth;\n\t\t\telse style.width = this.halfWidth + 'rpx';\n\t\t\t// borderColor优先级高于type值\n\t\t\tif(this.borderColor) style.borderColor = this.borderColor;\n\t\t\treturn style;\n\t\t}\n\t},\n\tmethods: {\n\t\tclick() {\n\t\t\tthis.$emit('click');\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../libs/css/style.components.scss\";\n.u-divider {\n\twidth: 100%;\n\tposition: relative;\n\ttext-align: center;\n\t@include vue-flex;\n\tjustify-content: center;\n\talign-items: center;\n\toverflow: hidden;\n\tflex-direction: row;\n}\n\n.u-divider-line {\n\tborder-bottom: 1px solid $u-border-color;\n\ttransform: scale(1, 0.5);\n\ttransform-origin: center;\n\t\n\t&--bordercolor--primary {\n\t\tborder-color: $u-type-primary;\n\t}\n\t\n\t&--bordercolor--success {\n\t\tborder-color: $u-type-success;\n\t}\n\t\n\t&--bordercolor--error {\n\t\tborder-color: $u-type-primary;\n\t}\n\t\n\t&--bordercolor--info {\n\t\tborder-color: $u-type-info;\n\t}\n\t\n\t&--bordercolor--warning {\n\t\tborder-color: $u-type-warning;\n\t}\n}\n\n.u-divider-text {\n\twhite-space: nowrap;\n\tpadding: 0 16rpx;\n\t/* #ifndef APP-NVUE */\n\tdisplay: inline-flex;\t\t\n\t/* #endif */\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-dropdown/u-dropdown.vue",
    "content": "<template>\n\t<view class=\"u-dropdown\">\n\t\t<view class=\"u-dropdown__menu\" :style=\"{\n\t\t\theight: $u.addUnit(height)\n\t\t}\" :class=\"{\n\t\t\t'u-border-bottom': borderBottom\n\t\t}\">\n\t\t\t<view class=\"u-dropdown__menu__item\" v-for=\"(item, index) in menuList\" :key=\"index\" @tap.stop=\"menuClick(index)\">\n\t\t\t\t<view class=\"u-flex\">\n\t\t\t\t\t<text class=\"u-dropdown__menu__item__text\" :style=\"{\n\t\t\t\t\t\tcolor: item.disabled ? '#c0c4cc' : (index === current || highlightIndex == index) ? activeColor : inactiveColor,\n\t\t\t\t\t\tfontSize: $u.addUnit(titleSize)\n\t\t\t\t\t}\">{{item.title}}</text>\n\t\t\t\t\t<view class=\"u-dropdown__menu__item__arrow\" :class=\"{\n\t\t\t\t\t\t'u-dropdown__menu__item__arrow--rotate': index === current\n\t\t\t\t\t}\">\n\t\t\t\t\t\t<u-icon :custom-style=\"{display: 'flex'}\" :name=\"menuIcon\" :size=\"$u.addUnit(menuIconSize)\" :color=\"index === current || highlightIndex == index ? activeColor : '#c0c4cc'\"></u-icon>\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-dropdown__content\" :style=\"[contentStyle, {\n\t\t\ttransition: `opacity ${duration / 1000}s linear`,\n\t\t\ttop: $u.addUnit(height),\n\t\t\theight: contentHeight + 'px'\n\t\t}]\"\n\t\t @tap=\"maskClick\" @touchmove.stop.prevent>\n\t\t\t<view @tap.stop.prevent class=\"u-dropdown__content__popup\" :style=\"[popupStyle]\">\n\t\t\t\t<slot></slot>\n\t\t\t</view>\n\t\t\t<view class=\"u-dropdown__content__mask\"></view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * dropdown 下拉菜单\n\t * @description 该组件一般用于向下展开菜单，同时可切换多个选项卡的场景\n\t * @tutorial http://uviewui.com/components/dropdown.html\n\t * @property {String} active-color 标题和选项卡选中的颜色（默认#2979ff）\n\t * @property {String} inactive-color 标题和选项卡未选中的颜色（默认#606266）\n\t * @property {Boolean} close-on-click-mask 点击遮罩是否关闭菜单（默认true）\n\t * @property {Boolean} close-on-click-self 点击当前激活项标题是否关闭菜单（默认true）\n\t * @property {String | Number} duration 选项卡展开和收起的过渡时间，单位ms（默认300）\n\t * @property {String | Number} height 标题菜单的高度，单位任意（默认80）\n\t * @property {String | Number} border-radius 菜单展开内容下方的圆角值，单位任意（默认0）\n\t * @property {Boolean} border-bottom 标题菜单是否显示下边框（默认false）\n\t * @property {String | Number} title-size 标题的字体大小，单位任意，数值默认为rpx单位（默认28）\n\t * @event {Function} open 下拉菜单被打开时触发\n\t * @event {Function} close 下拉菜单被关闭时触发\n\t * @example <u-dropdown></u-dropdown>\n\t */\n\texport default {\n\t\tname: 'u-dropdown',\n\t\tprops: {\n\t\t\t// 菜单标题和选项的激活态颜色\n\t\t\tactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#2979ff'\n\t\t\t},\n\t\t\t// 菜单标题和选项的未激活态颜色\n\t\t\tinactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#606266'\n\t\t\t},\n\t\t\t// 点击遮罩是否关闭菜单\n\t\t\tcloseOnClickMask: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 点击当前激活项标题是否关闭菜单\n\t\t\tcloseOnClickSelf: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 过渡时间\n\t\t\tduration: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 300\n\t\t\t},\n\t\t\t// 标题菜单的高度，单位任意，数值默认为rpx单位\n\t\t\theight: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 80\n\t\t\t},\n\t\t\t// 是否显示下边框\n\t\t\tborderBottom: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 标题的字体大小\n\t\t\ttitleSize: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 28\n\t\t\t},\n\t\t\t// 下拉出来的内容部分的圆角值\n\t\t\tborderRadius: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 0\n\t\t\t},\n\t\t\t// 菜单右侧的icon图标\n\t\t\tmenuIcon: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'arrow-down'\n\t\t\t},\n\t\t\t// 菜单右侧图标的大小\n\t\t\tmenuIconSize: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 26\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tshowDropdown: true, // 是否打开下来菜单,\n\t\t\t\tmenuList: [], // 显示的菜单\n\t\t\t\tactive: false, // 下拉菜单的状态\n\t\t\t\t// 当前是第几个菜单处于激活状态，小程序中此处不能写成false或者\"\"，否则后续将current赋值为0，\n\t\t\t\t// 无能的TX没有使用===而是使用==判断，导致程序认为前后二者没有变化，从而不会触发视图更新\n\t\t\t\tcurrent: 99999,\n\t\t\t\t// 外层内容的样式，初始时处于底层，且透明\n\t\t\t\tcontentStyle: {\n\t\t\t\t\tzIndex: -1,\n\t\t\t\t\topacity: 0\n\t\t\t\t},\n\t\t\t\t// 让某个菜单保持高亮的状态\n\t\t\t\thighlightIndex: 99999,\n\t\t\t\tcontentHeight: 0\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\t// 下拉出来部分的样式\n\t\t\tpopupStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\t// 进行Y轴位移，展开状态时，恢复原位。收齐状态时，往上位移100%，进行隐藏\n\t\t\t\tstyle.transform = `translateY(${this.active ? 0 : '-100%'})`\n\t\t\t\tstyle['transition-duration'] = this.duration / 1000 + 's';\n\t\t\t\tstyle.borderRadius = `0 0 ${this.$u.addUnit(this.borderRadius)} ${this.$u.addUnit(this.borderRadius)}`;\n\t\t\t\treturn style;\n\t\t\t}\n\t\t},\n\t\tcreated() {\n\t\t\t// 引用所有子组件(u-dropdown-item)的this，不能在data中声明变量，否则在微信小程序会造成循环引用而报错\n\t\t\tthis.children = [];\n\t\t},\n\t\tmounted() {\n\t\t\tthis.getContentHeight();\n\t\t},\n\t\tmethods: {\n\t\t\tinit() {\n\t\t\t\t// 当某个子组件内容变化时，触发父组件的init，父组件再让每一个子组件重新初始化一遍\n\t\t\t\t// 以保证数据的正确性\n\t\t\t\tthis.menuList = [];\n\t\t\t\tthis.children.map(child => {\n\t\t\t\t\tchild.init();\n\t\t\t\t})\n\t\t\t},\n\t\t\t// 点击菜单\n\t\t\tmenuClick(index) {\n\t\t\t\t// 判断是否被禁用\n\t\t\t\tif (this.menuList[index].disabled) return;\n\t\t\t\t// 如果点击时的索引和当前激活项索引相同，意味着点击了激活项，需要收起下拉菜单\n\t\t\t\tif (index === this.current && this.closeOnClickSelf) {\n\t\t\t\t\tthis.close();\n\t\t\t\t\t// 等动画结束后，再移除下拉菜单中的内容，否则直接移除，也就没有下拉菜单收起的效果了\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.children[index].active = false;\n\t\t\t\t\t}, this.duration)\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.open(index);\n\t\t\t},\n\t\t\t// 打开下拉菜单\n\t\t\topen(index) {\n\t\t\t\t// 嵌套popup使用时可能获取不到正确的高度，重新计算\n\t\t\t\tif (this.contentHeight < 1) this.getContentHeight()\n\t\t\t\t// 重置高亮索引，否则会造成多个菜单同时高亮\n\t\t\t\t// this.highlightIndex = 9999;\n\t\t\t\t// 展开时，设置下拉内容的样式\n\t\t\t\tthis.contentStyle = {\n\t\t\t\t\tzIndex: 11,\n\t\t\t\t}\n\t\t\t\t// 标记展开状态以及当前展开项的索引\n\t\t\t\tthis.active = true;\n\t\t\t\tthis.current = index;\n\t\t\t\t// 历遍所有的子元素，将索引匹配的项标记为激活状态，因为子元素是通过v-if控制切换的\n\t\t\t\t// 之所以不是因display: none，是因为nvue没有display这个属性\n\t\t\t\tthis.children.map((val, idx) => {\n\t\t\t\t\tval.active = index == idx ? true : false;\n\t\t\t\t})\n\t\t\t\tthis.$emit('open', this.current);\n\t\t\t},\n\t\t\t// 设置下拉菜单处于收起状态\n\t\t\tclose() {\n\t\t\t\tthis.$emit('close', this.current);\n\t\t\t\t// 设置为收起状态，同时current归位，设置为空字符串\n\t\t\t\tthis.active = false;\n\t\t\t\tthis.current = 99999;\n\t\t\t\t// 下拉内容的样式进行调整，不透明度设置为0\n\t\t\t\tthis.contentStyle = {\n\t\t\t\t\tzIndex: -1,\n\t\t\t\t\topacity: 0\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 点击遮罩\n\t\t\tmaskClick() {\n\t\t\t\t// 如果不允许点击遮罩，直接返回\n\t\t\t\tif (!this.closeOnClickMask) return;\n\t\t\t\tthis.close();\n\t\t\t},\n\t\t\t// 外部手动设置某个菜单高亮\n\t\t\thighlight(index = undefined) {\n\t\t\t\tthis.highlightIndex = index !== undefined ? index : 99999;\n\t\t\t},\n\t\t\t// 获取下拉菜单内容的高度\n\t\t\tgetContentHeight() {\n\t\t\t\t// 这里的原理为，因为dropdown组件是相对定位的，它的下拉出来的内容，必须给定一个高度\n\t\t\t\t// 才能让遮罩占满菜单一下，直到屏幕底部的高度\n\t\t\t\t// this.$u.sys()为uView封装的获取设备信息的方法\n\t\t\t\tlet windowHeight = this.$u.sys().windowHeight;\n\t\t\t\tthis.$uGetRect('.u-dropdown__menu').then(res => {\n\t\t\t\t\t// 这里获取的是dropdown的尺寸，在H5上，uniapp获取尺寸是有bug的(以前提出修复过，后来又出现了此bug，目前hx2.8.11版本)\n\t\t\t\t\t// H5端bug表现为元素尺寸的top值为导航栏底部到到元素的上边沿的距离，但是元素的bottom值确是导航栏顶部到元素底部的距离\n\t\t\t\t\t// 二者是互相矛盾的，本质原因是H5端导航栏非原生，uni的开发者大意造成\n\t\t\t\t\t// 这里取菜单栏的botton值合理的，不能用res.top，否则页面会造成滚动\n\t\t\t\t\tthis.contentHeight = windowHeight - res.bottom;\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t@import \"../../libs/css/style.components.scss\";\n\n\t.u-dropdown {\n\t\tflex: 1;\n\t\twidth: 100%;\n\t\tposition: relative;\n\n\t\t&__menu {\n\t\t\t@include vue-flex;\n\t\t\tposition: relative;\n\t\t\tz-index: 11;\n\t\t\theight: 80rpx;\n\n\t\t\t&__item {\n\t\t\t\tflex: 1;\n\t\t\t\t@include vue-flex;\n\t\t\t\tjustify-content: center;\n\t\t\t\talign-items: center;\n\n\t\t\t\t&__text {\n\t\t\t\t\tfont-size: 28rpx;\n\t\t\t\t\tcolor: $u-content-color;\n\t\t\t\t}\n\n\t\t\t\t&__arrow {\n\t\t\t\t\tmargin-left: 6rpx;\n\t\t\t\t\ttransition: transform .3s;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\t@include vue-flex;\n\n\t\t\t\t\t&--rotate {\n\t\t\t\t\t\ttransform: rotate(180deg);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&__content {\n\t\t\tposition: absolute;\n\t\t\tz-index: 8;\n\t\t\twidth: 100%;\n\t\t\tleft: 0px;\n\t\t\tbottom: 0;\n\t\t\toverflow: hidden;\n\t\t\t\n\n\t\t\t&__mask {\n\t\t\t\tposition: absolute;\n\t\t\t\tz-index: 9;\n\t\t\t\tbackground: rgba(0, 0, 0, .3);\n\t\t\t\twidth: 100%;\n\t\t\t\tleft: 0;\n\t\t\t\ttop: 0;\n\t\t\t\tbottom: 0;\n\t\t\t}\n\n\t\t\t&__popup {\n\t\t\t\tposition: relative;\n\t\t\t\tz-index: 10;\n\t\t\t\ttransition: all 0.3s;\n\t\t\t\ttransform: translate3D(0, -100%, 0);\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-dropdown-item/u-dropdown-item.vue",
    "content": "<template>\n\t<view class=\"u-dropdown-item\" v-if=\"active\" @touchmove.stop.prevent=\"() => {}\" @tap.stop.prevent=\"() => {}\">\n\t\t<block v-if=\"!$slots.default && !$slots.$default\">\n\t\t\t<scroll-view scroll-y=\"true\" :style=\"{\n\t\t\t\theight: $u.addUnit(height)\n\t\t\t}\">\n\t\t\t\t<view class=\"u-dropdown-item__options\">\n\t\t\t\t\t<u-cell-group>\n\t\t\t\t\t\t<u-cell-item @click=\"cellClick(item.value)\" :arrow=\"false\" :title=\"item.label\" v-for=\"(item, index) in options\"\n\t\t\t\t\t\t :key=\"index\" :title-style=\"{\n\t\t\t\t\t\t\tcolor: value == item.value ? activeColor : inactiveColor\n\t\t\t\t\t\t}\">\n\t\t\t\t\t\t\t<u-icon v-if=\"value == item.value\" name=\"checkbox-mark\" :color=\"activeColor\" size=\"32\"></u-icon>\n\t\t\t\t\t\t</u-cell-item>\n\t\t\t\t\t</u-cell-group>\n\t\t\t\t</view>\n\t\t\t</scroll-view>\n\t\t</block>\n\t\t<slot v-else />\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * dropdown-item 下拉菜单\n\t * @description 该组件一般用于向下展开菜单，同时可切换多个选项卡的场景\n\t * @tutorial http://uviewui.com/components/dropdown.html\n\t * @property {String | Number} v-model 双向绑定选项卡选择值\n\t * @property {String} title 菜单项标题\n\t * @property {Array[Object]} options 选项数据，如果传入了默认slot，此参数无效\n\t * @property {Boolean} disabled 是否禁用此选项卡（默认false）\n\t * @property {String | Number} duration 选项卡展开和收起的过渡时间，单位ms（默认300）\n\t * @property {String | Number} height 弹窗下拉内容的高度(内容超出将会滚动)（默认auto）\n\t * @example <u-dropdown-item title=\"标题\"></u-dropdown-item>\n\t */\n\texport default {\n\t\tname: 'u-dropdown-item',\n\t\tprops: {\n\t\t\t// 当前选中项的value值\n\t\t\tvalue: {\n\t\t\t\ttype: [Number, String, Array],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 菜单项标题\n\t\t\ttitle: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 选项数据，如果传入了默认slot，此参数无效\n\t\t\toptions: {\n\t\t\t\ttype: Array,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn []\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 是否禁用此菜单项\n\t\t\tdisabled: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 下拉弹窗的高度\n\t\t\theight: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 'auto'\n\t\t\t},\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tactive: false, // 当前项是否处于展开状态\n\t\t\t\tactiveColor: '#2979ff', // 激活时左边文字和右边对勾图标的颜色\n\t\t\t\tinactiveColor: '#606266', // 未激活时左边文字和右边对勾图标的颜色\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\t// 监听props是否发生了变化，有些值需要传递给父组件u-dropdown，无法双向绑定\n\t\t\tpropsChange() {\n\t\t\t\treturn `${this.title}-${this.disabled}`;\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\tpropsChange(n) {\n\t\t\t\t// 当值变化时，通知父组件重新初始化，让父组件执行每个子组件的init()方法\n\t\t\t\t// 将所有子组件数据重新整理一遍\n\t\t\t\tif (this.parent) this.parent.init();\n\t\t\t}\n\t\t},\n\t\tcreated() {\n\t\t\t// 父组件的实例\n\t\t\tthis.parent = false;\n\t\t},\n\t\tmethods: {\n\t\t\tinit() {\n\t\t\t\t// 获取父组件u-dropdown\n\t\t\t\tlet parent = this.$u.$parent.call(this, 'u-dropdown');\n\t\t\t\tif (parent) {\n\t\t\t\t\tthis.parent = parent;\n\t\t\t\t\t// 将子组件的激活颜色配置为父组件设置的激活和未激活时的颜色\n\t\t\t\t\tthis.activeColor = parent.activeColor;\n\t\t\t\t\tthis.inactiveColor = parent.inactiveColor;\n\t\t\t\t\t// 将本组件的this，放入到父组件的children数组中，让父组件可以操作本(子)组件的方法和属性\n\t\t\t\t\t// push进去前，显判断是否已经存在了本实例，因为在子组件内部数据变化时，会通过父组件重新初始化子组件\n\t\t\t\t\tlet exist = parent.children.find(val => {\n\t\t\t\t\t\treturn this === val;\n\t\t\t\t\t})\n\t\t\t\t\tif (!exist) parent.children.push(this);\n\t\t\t\t\tif (parent.children.length == 1) this.active = true;\n\t\t\t\t\t// 父组件无法监听children的变化，故将子组件的title，传入父组件的menuList数组中\n\t\t\t\t\tparent.menuList.push({\n\t\t\t\t\t\ttitle: this.title,\n\t\t\t\t\t\tdisabled: this.disabled\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\t// cell被点击\n\t\t\tcellClick(value) {\n\t\t\t\t// 修改通过v-model绑定的值\n\t\t\t\tthis.$emit('input', value);\n\t\t\t\t// 通知父组件(u-dropdown)收起菜单\n\t\t\t\tthis.parent.close();\n\t\t\t\t// 发出事件，抛出当前勾选项的value\n\t\t\t\tthis.$emit('change', value);\n\t\t\t}\n\t\t},\n\t\tmounted() {\n\t\t\tthis.init();\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t@import \"../../libs/css/style.components.scss\";\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-empty/u-empty.vue",
    "content": "<template>\n\t<view class=\"u-empty\" v-if=\"show\" :style=\"{\n\t\tmarginTop: marginTop + 'rpx'\n\t}\">\n\t\t<u-icon\n\t\t\t:name=\"src ? src : 'empty-' + mode\"\n\t\t\t:custom-style=\"iconStyle\"\n\t\t\t:label=\"text ? text : icons[mode]\"\n\t\t\tlabel-pos=\"bottom\"\n\t\t\t:label-color=\"color\"\n\t\t\t:label-size=\"fontSize\"\n\t\t\t:size=\"iconSize\"\n\t\t\t:color=\"iconColor\"\n\t\t\tmargin-top=\"14\"\n\t\t></u-icon>\n\t\t<view class=\"u-slot-wrap\">\n\t\t\t<slot name=\"bottom\"></slot>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * empty 内容为空\n\t * @description 该组件用于需要加载内容，但是加载的第一页数据就为空，提示一个\"没有内容\"的场景， 我们精心挑选了十几个场景的图标，方便您使用。\n\t * @tutorial https://www.uviewui.com/components/empty.html\n\t * @property {String} color 文字颜色（默认#c0c4cc）\n\t * @property {String} text 文字提示（默认“无内容”）\n\t * @property {String} src 自定义图标路径，如定义，mode参数会失效\n\t * @property {String Number} font-size 提示文字的大小，单位rpx（默认28）\n\t * @property {String} mode 内置的图标，见官网说明（默认data）\n\t * @property {String Number} img-width 图标的宽度，单位rpx（默认240）\n\t * @property {String} img-height 图标的高度，单位rpx（默认auto）\n\t * @property {String Number} margin-top 组件距离上一个元素之间的距离（默认0）\n\t * @property {Boolean} show 是否显示组件（默认true）\n\t * @event {Function} click 点击组件时触发\n\t * @event {Function} close 点击关闭按钮时触发\n\t * @example <u-empty text=\"所谓伊人，在水一方\" mode=\"list\"></u-empty>\n\t */\n\texport default {\n\t\tname: \"u-empty\",\n\t\tprops: {\n\t\t\t// 图标路径\n\t\t\tsrc: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 提示文字\n\t\t\ttext: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 文字颜色\n\t\t\tcolor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#c0c4cc'\n\t\t\t},\n\t\t\t// 图标的颜色\n\t\t\ticonColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#c0c4cc'\n\t\t\t},\n\t\t\t// 图标的大小\n\t\t\ticonSize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 120\n\t\t\t},\n\t\t\t// 文字大小，单位rpx\n\t\t\tfontSize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 26\n\t\t\t},\n\t\t\t// 选择预置的图标类型\n\t\t\tmode: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'data'\n\t\t\t},\n\t\t\t//  图标宽度，单位rpx\n\t\t\timgWidth: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 120\n\t\t\t},\n\t\t\t// 图标高度，单位rpx\n\t\t\timgHeight: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 'auto'\n\t\t\t},\n\t\t\t// 是否显示组件\n\t\t\tshow: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 组件距离上一个元素之间的距离\n\t\t\tmarginTop: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 0\n\t\t\t},\n\t\t\ticonStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault() {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ticons: {\n\t\t\t\t\tcar: '购物车为空',\n\t\t\t\t\tpage: '页面不存在',\n\t\t\t\t\tsearch: '没有搜索结果',\n\t\t\t\t\taddress: '没有收货地址',\n\t\t\t\t\twifi: '没有WiFi',\n\t\t\t\t\torder: '订单为空',\n\t\t\t\t\tcoupon: '没有优惠券',\n\t\t\t\t\tfavor: '暂无收藏',\n\t\t\t\t\tpermission: '无权限',\n\t\t\t\t\thistory: '无历史记录',\n\t\t\t\t\tnews: '无新闻列表',\n\t\t\t\t\tmessage: '消息列表为空',\n\t\t\t\t\tlist: '列表为空',\n\t\t\t\t\tdata: '数据为空'\n\t\t\t\t},\n\t\t\t\t// icons: [{\n\t\t\t\t// \ticon: 'car',\n\t\t\t\t// \ttext: '购物车为空'\n\t\t\t\t// },{\n\t\t\t\t// \ticon: 'page',\n\t\t\t\t// \ttext: '页面不存在'\n\t\t\t\t// },{\n\t\t\t\t// \ticon: 'search',\n\t\t\t\t// \ttext: '没有搜索结果'\n\t\t\t\t// },{\n\t\t\t\t// \ticon: 'address',\n\t\t\t\t// \ttext: '没有收货地址'\n\t\t\t\t// },{\n\t\t\t\t// \ticon: 'wifi',\n\t\t\t\t// \ttext: '没有WiFi'\n\t\t\t\t// },{\n\t\t\t\t// \ticon: 'order',\n\t\t\t\t// \ttext: '订单为空'\n\t\t\t\t// },{\n\t\t\t\t// \ticon: 'coupon',\n\t\t\t\t// \ttext: '没有优惠券'\n\t\t\t\t// },{\n\t\t\t\t// \ticon: 'favor',\n\t\t\t\t// \ttext: '暂无收藏'\n\t\t\t\t// },{\n\t\t\t\t// \ticon: 'permission',\n\t\t\t\t// \ttext: '无权限'\n\t\t\t\t// },{\n\t\t\t\t// \ticon: 'history',\n\t\t\t\t// \ttext: '无历史记录'\n\t\t\t\t// },{\n\t\t\t\t// \ticon: 'news',\n\t\t\t\t// \ttext: '无新闻列表'\n\t\t\t\t// },{\n\t\t\t\t// \ticon: 'message',\n\t\t\t\t// \ttext: '消息列表为空'\n\t\t\t\t// },{\n\t\t\t\t// \ticon: 'list',\n\t\t\t\t// \ttext: '列表为空'\n\t\t\t\t// },{\n\t\t\t\t// \ticon: 'data',\n\t\t\t\t// \ttext: '数据为空'\n\t\t\t\t// }],\n\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t@import \"../../libs/css/style.components.scss\";\n\n\t.u-empty {\n\t\t@include vue-flex;\n\t\tflex-direction: column;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\theight: 100%;\n\t}\n\n\t.u-image {\n\t\tmargin-bottom: 20rpx;\n\t}\n\n\t.u-slot-wrap {\n\t\t@include vue-flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\tmargin-top: 20rpx;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-field/u-field.vue",
    "content": "<template>\n\t<view class=\"u-field\" :class=\"{'u-border-top': borderTop, 'u-border-bottom': borderBottom }\">\n\t\t<view class=\"u-field-inner\" :class=\"[type == 'textarea' ? 'u-textarea-inner' : '', 'u-label-postion-' + labelPosition]\">\n\t\t\t<view class=\"u-label\" :class=\"[required ? 'u-required' : '']\" :style=\"{\n\t\t\t\tjustifyContent: justifyContent, \n\t\t\t\tflex: labelPosition == 'left' ? `0 0 ${labelWidth}rpx` : '1'\n\t\t\t}\">\n\t\t\t\t<view class=\"u-icon-wrap\" v-if=\"icon\">\n\t\t\t\t\t<u-icon size=\"32\" :custom-style=\"iconStyle\" :name=\"icon\" :color=\"iconColor\" class=\"u-icon\"></u-icon>\n\t\t\t\t</view>\n\t\t\t\t<slot name=\"icon\"></slot>\n\t\t\t\t<text class=\"u-label-text\" :class=\"[this.$slots.icon || icon ? 'u-label-left-gap' : '']\">{{ label }}</text>\n\t\t\t</view>\n\t\t\t<view class=\"fild-body\">\n\t\t\t\t<view class=\"u-flex-1 u-flex\" :style=\"[inputWrapStyle]\">\n\t\t\t\t\t<textarea v-if=\"type == 'textarea'\" class=\"u-flex-1 u-textarea-class\" :style=\"[fieldStyle]\" :value=\"value\"\n\t\t\t\t\t :placeholder=\"placeholder\" :placeholderStyle=\"placeholderStyle\" :disabled=\"disabled\" :maxlength=\"inputMaxlength\"\n\t\t\t\t\t :focus=\"focus\" :autoHeight=\"autoHeight\" :fixed=\"fixed\" @input=\"onInput\" @blur=\"onBlur\" @focus=\"onFocus\" @confirm=\"onConfirm\"\n\t\t\t\t\t @tap=\"fieldClick\" />\n\t\t\t\t\t<input\n\t\t\t\t\t\tv-else\n\t\t\t\t\t\t:style=\"[fieldStyle]\"\n\t\t\t\t\t\t:type=\"type\"\n\t\t\t\t\t\tclass=\"u-flex-1 u-field__input-wrap\"\n\t\t\t\t\t\t:value=\"value\"\n\t\t\t\t\t\t:password=\"password || this.type === 'password'\"\n\t\t\t\t\t\t:placeholder=\"placeholder\"\n\t\t\t\t\t\t:placeholderStyle=\"placeholderStyle\"\n\t\t\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t\t\t:maxlength=\"inputMaxlength\"\n\t\t\t\t\t\t:focus=\"focus\"\n\t\t\t\t\t\t:confirmType=\"confirmType\"\n\t\t\t\t\t\t@focus=\"onFocus\"\n\t\t\t\t\t\t@blur=\"onBlur\"\n\t\t\t\t\t\t@input=\"onInput\"\n\t\t\t\t\t\t@confirm=\"onConfirm\"\n\t\t\t\t\t\t@tap=\"fieldClick\"\n\t\t\t\t\t/>\n\t\t\t\t</view>\n\t\t\t\t<u-icon :size=\"clearSize\" v-if=\"clearable && value != '' && focused\" name=\"close-circle-fill\" color=\"#c0c4cc\" class=\"u-clear-icon\" @click=\"onClear\"/>\n\t\t\t\t<view class=\"u-button-wrap\"><slot name=\"right\" /></view>\n\t\t\t\t<u-icon v-if=\"rightIcon\" @click=\"rightIconClick\" :name=\"rightIcon\" color=\"#c0c4cc\" :style=\"[rightIconStyle]\" size=\"26\" class=\"u-arror-right\" />\n\t\t\t</view>\n\t\t</view>\n\t\t<view v-if=\"errorMessage !== false && errorMessage != ''\" class=\"u-error-message\" :style=\"{\n\t\t\tpaddingLeft: labelWidth + 'rpx'\n\t\t}\">{{ errorMessage }}</view>\n\t</view>\n</template>\n\n<script>\n/**\n * field 输入框\n * @description 借助此组件，可以实现表单的输入， 有\"text\"和\"textarea\"类型的，此外，借助uView的picker和actionSheet组件可以快速实现上拉菜单，时间，地区选择等， 为表单解决方案的利器。\n * @tutorial https://www.uviewui.com/components/field.html\n * @property {String} type 输入框的类型（默认text）\n * @property {String} icon label左边的图标，限uView的图标名称\n * @property {Object} icon-style 左边图标的样式，对象形式\n * @property {Boolean} right-icon 输入框右边的图标名称，限uView的图标名称（默认false）\n * @property {Boolean} required 是否必填，左边您显示红色\"*\"号（默认false）\n * @property {String} label 输入框左边的文字提示\n * @property {Boolean} password 是否密码输入方式(用点替换文字)，type为text时有效（默认false）\n * @property {Boolean} clearable 是否显示右侧清空内容的图标控件(输入框有内容，且获得焦点时才显示)，点击可清空输入框内容（默认true）\n * @property {Number String} label-width label的宽度，单位rpx（默认130）\n * @property {String} label-align label的文字对齐方式（默认left）\n * @property {Object} field-style 自定义输入框的样式，对象形式\n * @property {Number | String} clear-size 清除图标的大小，单位rpx（默认30）\n * @property {String} input-align 输入框内容对齐方式（默认left）\n * @property {Boolean} border-bottom 是否显示field的下边框（默认true）\n * @property {Boolean} border-top 是否显示field的上边框（默认false）\n * @property {String} icon-color 左边通过icon配置的图标的颜色（默认#606266）\n * @property {Boolean} auto-height 是否自动增高输入区域，type为textarea时有效（默认true）\n * @property {String Boolean} error-message 显示的错误提示内容，如果为空字符串或者false，则不显示错误信息\n * @property {String} placeholder 输入框的提示文字\n * @property {String} placeholder-style placeholder的样式(内联样式，字符串)，如\"color: #ddd\"\n * @property {Boolean} focus 是否自动获得焦点（默认false）\n * @property {Boolean} fixed 如果type为textarea，且在一个\"position:fixed\"的区域，需要指明为true（默认false）\n * @property {Boolean} disabled 是否不可输入（默认false）\n * @property {Number String} maxlength 最大输入长度，设置为 -1 的时候不限制最大长度（默认140）\n * @property {String} confirm-type 设置键盘右下角按钮的文字，仅在type=\"text\"时生效（默认done）\n * @event {Function} input 输入框内容发生变化时触发\n * @event {Function} focus 输入框获得焦点时触发\n * @event {Function} blur 输入框失去焦点时触发\n * @event {Function} confirm 点击完成按钮时触发\n * @event {Function} right-icon-click 通过right-icon生成的图标被点击时触发\n * @event {Function} click 输入框被点击或者通过right-icon生成的图标被点击时触发，这样设计是考虑到传递右边的图标，一般都为需要弹出\"picker\"等操作时的场景，点击倒三角图标，理应发出此事件，见上方说明\n * @example <u-field v-model=\"mobile\" label=\"手机号\" required :error-message=\"errorMessage\"></u-field>\n */\nexport default {\n\tname:\"u-field\",\n\tprops: {\n\t\ticon: String,\n\t\trightIcon: String,\n\t\t// arrowDirection: {\n\t\t// \ttype: String,\n\t\t// \tdefault: 'right'\n\t\t// },\n\t\trequired: Boolean,\n\t\tlabel: String,\n\t\tpassword: Boolean,\n\t\tclearable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 左边标题的宽度单位rpx\n\t\tlabelWidth: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 130\n\t\t},\n\t\t// 对齐方式，left|center|right\n\t\tlabelAlign: {\n\t\t\ttype: String,\n\t\t\tdefault: 'left'\n\t\t},\n\t\tinputAlign: {\n\t\t\ttype: String,\n\t\t\tdefault: 'left'\n\t\t},\n\t\ticonColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#606266'\n\t\t},\n\t\tautoHeight: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\terrorMessage: {\n\t\t\ttype: [String, Boolean],\n\t\t\tdefault: ''\n\t\t},\n\t\tplaceholder: String,\n\t\tplaceholderStyle: String,\n\t\tfocus: Boolean,\n\t\tfixed: Boolean,\n\t\tvalue: [Number, String],\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tdefault: 'text'\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tmaxlength: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 140\n\t\t},\n\t\tconfirmType: {\n\t\t\ttype: String,\n\t\t\tdefault: 'done'\n\t\t},\n\t\t// lable的位置，可选为 left-左边，top-上边\n\t\tlabelPosition: {\n\t\t\ttype: String,\n\t\t\tdefault: 'left'\n\t\t},\n\t\t// 输入框的自定义样式\n\t\tfieldStyle: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t},\n\t\t// 清除按钮的大小\n\t\tclearSize: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 30\n\t\t},\n\t\t// lable左边的图标样式，对象形式\n\t\ticonStyle: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t},\n\t\t// 是否显示上边框\n\t\tborderTop: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 是否显示下边框\n\t\tborderBottom: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 是否自动去除两端的空格\n\t\ttrim: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tfocused: false,\n\t\t\titemIndex: 0,\n\t\t};\n\t},\n\tcomputed: {\n\t\tinputWrapStyle() {\n\t\t\tlet style = {};\n\t\t\tstyle.textAlign = this.inputAlign;\n\t\t\t// 判断lable的位置，如果是left的话，让input左边两边有间隙\n\t\t\tif(this.labelPosition == 'left') {\n\t\t\t\tstyle.margin = `0 8rpx`;\n\t\t\t} else {\n\t\t\t\t// 如果lable是top的，input的左边就没必要有间隙了\n\t\t\t\tstyle.marginRight = `8rpx`;\n\t\t\t}\n\t\t\treturn style;\n\t\t},\n\t\trightIconStyle() {\n\t\t\tlet style = {};\n\t\t\tif (this.arrowDirection == 'top') style.transform = 'roate(-90deg)';\n\t\t\tif (this.arrowDirection == 'bottom') style.transform = 'roate(90deg)';\n\t\t\telse style.transform = 'roate(0deg)';\n\t\t\treturn style;\n\t\t},\n\t\tlabelStyle() {\n\t\t\tlet style = {};\n\t\t\tif(this.labelAlign == 'left') style.justifyContent = 'flext-start';\n\t\t\tif(this.labelAlign == 'center') style.justifyContent = 'center';\n\t\t\tif(this.labelAlign == 'right') style.justifyContent = 'flext-end';\n\t\t\treturn style;\n\t\t},\n\t\t// uni不支持在computed中写style.justifyContent = 'center'的形式，故用此方法\n\t\tjustifyContent() {\n\t\t\tif(this.labelAlign == 'left') return 'flex-start';\n\t\t\tif(this.labelAlign == 'center') return 'center';\n\t\t\tif(this.labelAlign == 'right') return 'flex-end';\n\t\t},\n\t\t// 因为uniapp的input组件的maxlength组件必须要数值，这里转为数值，给用户可以传入字符串数值\n\t\tinputMaxlength() {\n\t\t\treturn Number(this.maxlength)\n\t\t},\n\t\t// label的位置\n\t\tfieldInnerStyle() {\n\t\t\tlet style = {};\n\t\t\tif(this.labelPosition == 'left') {\n\t\t\t\tstyle.flexDirection = 'row';\n\t\t\t} else {\n\t\t\t\tstyle.flexDirection = 'column';\n\t\t\t}\n\t\t\t\n\t\t\treturn style;\n\t\t}\n\t},\n\tmethods: {\n\t\tonInput(event) {\n\t\t\tlet value = event.detail.value;\n\t\t\t// 判断是否去除空格\n\t\t\tif(this.trim) value = this.$u.trim(value);\n\t\t\tthis.$emit('input', value);\n\t\t},\n\t\tonFocus(event) {\n\t\t\tthis.focused = true;\n\t\t\tthis.$emit('focus', event);\n\t\t},\n\t\tonBlur(event) {\n\t\t\t// 最开始使用的是监听图标@touchstart事件，自从hx2.8.4后，此方法在微信小程序出错\n\t\t\t// 这里改为监听点击事件，手点击清除图标时，同时也发生了@blur事件，导致图标消失而无法点击，这里做一个延时\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.focused = false;\n\t\t\t}, 100)\n\t\t\tthis.$emit('blur', event);\n\t\t},\n\t\tonConfirm(e) {\n\t\t\tthis.$emit('confirm', e.detail.value);\n\t\t},\n\t\tonClear(event) {\n\t\t\tthis.$emit('input', '');\n\t\t},\n\t\trightIconClick() {\n\t\t\tthis.$emit('right-icon-click');\n\t\t\tthis.$emit('click');\n\t\t},\n\t\tfieldClick() {\n\t\t\tthis.$emit('click');\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../libs/css/style.components.scss\";\n\t\n.u-field {\n\tfont-size: 28rpx;\n\tpadding: 20rpx 28rpx;\n\ttext-align: left;\n\tposition: relative;\n\tcolor: $u-main-color;\n}\n\n.u-field-inner {\n\t@include vue-flex;\n\talign-items: center;\n}\n\n.u-textarea-inner {\n\talign-items: flex-start;\n}\n\n.u-textarea-class {\n\tmin-height: 96rpx;\n\twidth: auto;\n\tfont-size: 28rpx;\n}\n\n.fild-body {\n\t@include vue-flex;\n\tflex: 1;\n\talign-items: center;\n}\n\n.u-arror-right {\n\tmargin-left: 8rpx;\n}\n\n.u-label-text {\n\t/* #ifndef APP-NVUE */\n\tdisplay: inline-flex;\t\t\n\t/* #endif */\n}\n\n.u-label-left-gap {\n\tmargin-left: 6rpx;\n}\n\n.u-label-postion-top {\n\tflex-direction: column;\n\talign-items: flex-start;\n}\n\n.u-label {\n\twidth: 130rpx;\n\tflex: 1 1 130rpx;\n\ttext-align: left;\n\tposition: relative;\n\t@include vue-flex;\n\talign-items: center;\n}\n\n.u-required::before {\n\tcontent: '*';\n\tposition: absolute;\n\tleft: -16rpx;\n\tfont-size: 14px;\n\tcolor: $u-type-error;\n\theight: 9px;\n\tline-height: 1;\n}\n\n.u-field__input-wrap {\n\tposition: relative;\n\toverflow: hidden;\n\tfont-size: 28rpx;\n\theight: 48rpx;\n\tflex: 1;\n\twidth: auto;\n}\n\n.u-clear-icon {\n\t@include vue-flex;\n\talign-items: center;\n}\n\n.u-error-message {\n\tcolor: $u-type-error;\n\tfont-size: 26rpx;\n\ttext-align: left;\n}\n\n.placeholder-style {\n\tcolor: rgb(150, 151, 153);\n}\n\n.u-input-class {\n\tfont-size: 28rpx;\n}\n\n.u-button-wrap {\n\tmargin-left: 8rpx;\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-form/u-form.vue",
    "content": "<template>\n\t<view class=\"u-form\"><slot /></view>\n</template>\n\n<script>\n\t/**\n\t * form 表单\n\t * @description 此组件一般用于表单场景，可以配置Input输入框，Select弹出框，进行表单验证等。\n\t * @tutorial http://uviewui.com/components/form.html\n\t * @property {Object} model 表单数据对象\n\t * @property {Boolean} border-bottom 是否显示表单域的下划线边框\n\t * @property {String} label-position 表单域提示文字的位置，left-左侧，top-上方\n\t * @property {String Number} label-width 提示文字的宽度，单位rpx（默认90）\n\t * @property {Object} label-style lable的样式，对象形式\n\t * @property {String} label-align lable的对齐方式\n\t * @property {Object} rules 通过ref设置，见官网说明\n\t * @property {Array} error-type 错误的提示方式，数组形式，见上方说明(默认['message'])\n\t * @example <u-form :model=\"form\" ref=\"uForm\"></u-form>\n\t */\n\nexport default {\n\tname: 'u-form',\n\tprops: {\n\t\t// 当前form的需要验证字段的集合\n\t\tmodel: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t\t// 验证规则\n\t\t// rules: {\n\t\t// \ttype: [Object, Function, Array],\n\t\t// \tdefault() {\n\t\t// \t\treturn {};\n\t\t// \t}\n\t\t// },\n\t\t// 有错误时的提示方式，message-提示信息，border-如果input设置了边框，变成呈红色，\n\t\t// border-bottom-下边框呈现红色，none-无提示\n\t\terrorType: {\n\t\t\ttype: Array,\n\t\t\tdefault() {\n\t\t\t\treturn ['message', 'toast']\n\t\t\t}\n\t\t},\n\t\t// 是否显示表单域的下划线边框\n\t\tborderBottom: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// label的位置，left-左边，top-上边\n\t\tlabelPosition: {\n\t\t\ttype: String,\n\t\t\tdefault: 'left'\n\t\t},\n\t\t// label的宽度，单位rpx\n\t\tlabelWidth: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 90\n\t\t},\n\t\t// lable字体的对齐方式\n\t\tlabelAlign: {\n\t\t\ttype: String,\n\t\t\tdefault: 'left'\n\t\t},\n\t\t// lable的样式，对象形式\n\t\tlabelStyle: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t},\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tuForm: this\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\trules: {}\n\t\t};\n\t},\n\tcreated() {\n\t\t// 存储当前form下的所有u-form-item的实例\n\t\t// 不能定义在data中，否则微信小程序会造成循环引用而报错\n\t\tthis.fields = [];\n\t},\n\tmethods: {\n\t\tsetRules(rules) {\n\t\t\tthis.rules = rules;\n\t\t},\n\t\t// 清空所有u-form-item组件的内容，本质上是调用了u-form-item组件中的resetField()方法\n\t\tresetFields() {\n\t\t\tthis.fields.map(field => {\n\t\t\t\tfield.resetField();\n\t\t\t});\n\t\t},\n\t\t// 校验全部数据\n\t\tvalidate(callback) {\n\t\t\treturn new Promise(resolve => {\n\t\t\t\t// 对所有的u-form-item进行校验\n\t\t\t\tlet valid = true; // 默认通过\n\t\t\t\tlet count = 0; // 用于标记是否检查完毕\n\t\t\t\tlet errorArr = []; // 存放错误信息\n\t\t\t\tthis.fields.map(field => {\n\t\t\t\t\t// 调用每一个u-form-item实例的validation的校验方法\n\t\t\t\t\tfield.validation('', error => {\n\t\t\t\t\t\t// 如果任意一个u-form-item校验不通过，就意味着整个表单不通过\n\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\t\terrorArr.push(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// 当历遍了所有的u-form-item时，调用promise的then方法\n\t\t\t\t\t\tif (++count === this.fields.length) {\n\t\t\t\t\t\t\tresolve(valid); // 进入promise的then方法\n\t\t\t\t\t\t\t// 判断是否设置了toast的提示方式，只提示最前面的表单域的第一个错误信息\n\t\t\t\t\t\t\tif(this.errorType.indexOf('none') === -1 && this.errorType.indexOf('toast') >= 0 && errorArr.length) {\n\t\t\t\t\t\t\t\tthis.$u.toast(errorArr[0]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// 调用回调方法\n\t\t\t\t\t\t\tif (typeof callback == 'function') callback(valid);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import \"../../libs/css/style.components.scss\";\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-form-item/u-form-item.vue",
    "content": "<template>\n\t<view class=\"u-form-item\" :class=\"{'u-border-bottom': elBorderBottom, 'u-form-item__border-bottom--error': validateState === 'error' && showError('border-bottom')}\">\n\t\t<view class=\"u-form-item__body\" :style=\"{\n\t\t\tflexDirection: elLabelPosition == 'left' ? 'row' : 'column'\n\t\t}\">\n\t\t\t<!-- 微信小程序中，将一个参数设置空字符串，结果会变成字符串\"true\" -->\n\t\t\t<view class=\"u-form-item--left\" :style=\"{\n\t\t\t\twidth: uLabelWidth,\n\t\t\t\tflex: `0 0 ${uLabelWidth}`,\n\t\t\t\tmarginBottom: elLabelPosition == 'left' ? 0 : '10rpx',\n\t\t\t}\">\n\t\t\t\t<!-- 为了块对齐 -->\n\t\t\t\t<view class=\"u-form-item--left__content\" v-if=\"required || leftIcon || label\">\n\t\t\t\t\t<!-- nvue不支持伪元素before -->\n\t\t\t\t\t<text v-if=\"required\" class=\"u-form-item--left__content--required\">*</text>\n\t\t\t\t\t<view class=\"u-form-item--left__content__icon\" v-if=\"leftIcon\">\n\t\t\t\t\t\t<u-icon :name=\"leftIcon\" :custom-style=\"leftIconStyle\"></u-icon>\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"u-form-item--left__content__label\" :style=\"[elLabelStyle, {\n\t\t\t\t\t\t'justify-content': elLabelAlign == 'left' ? 'flex-start' : elLabelAlign == 'center' ? 'center' : 'flex-end'\n\t\t\t\t\t}]\">\n\t\t\t\t\t\t{{label}}\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t\t<view class=\"u-form-item--right u-flex\">\n\t\t\t\t<view class=\"u-form-item--right__content\">\n\t\t\t\t\t<view class=\"u-form-item--right__content__slot \">\n\t\t\t\t\t\t<slot />\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"u-form-item--right__content__icon u-flex\" v-if=\"$slots.right || rightIcon\">\n\t\t\t\t\t\t<u-icon :custom-style=\"rightIconStyle\" v-if=\"rightIcon\" :name=\"rightIcon\"></u-icon>\n\t\t\t\t\t\t<slot name=\"right\" />\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<view class=\"u-form-item__message\" v-if=\"validateState === 'error' && showError('message')\" :style=\"{\n\t\t\tpaddingLeft: elLabelPosition == 'left' ? $u.addUnit(elLabelWidth) : '0',\n\t\t}\">{{validateMessage}}</view>\n\t</view>\n</template>\n\n<script>\n\timport Emitter from '../../libs/util/emitter.js';\n\timport schema from '../../libs/util/async-validator';\n\t// 去除警告信息\n\tschema.warning = function() {};\n\n\t/**\n\t * form-item 表单item\n\t * @description 此组件一般用于表单场景，可以配置Input输入框，Select弹出框，进行表单验证等。\n\t * @tutorial http://uviewui.com/components/form.html\n\t * @property {String} label 左侧提示文字\n\t * @property {Object} prop 表单域model对象的属性名，在使用 validate、resetFields 方法的情况下，该属性是必填的\n\t * @property {Boolean} border-bottom 是否显示表单域的下划线边框\n\t * @property {String} label-position 表单域提示文字的位置，left-左侧，top-上方\n\t * @property {String Number} label-width 提示文字的宽度，单位rpx（默认90）\n\t * @property {Object} label-style lable的样式，对象形式\n\t * @property {String} label-align lable的对齐方式\n\t * @property {String} right-icon 右侧自定义字体图标(限uView内置图标)或图片地址\n\t * @property {String} left-icon 左侧自定义字体图标(限uView内置图标)或图片地址\n\t * @property {Object} left-icon-style 左侧图标的样式，对象形式\n\t * @property {Object} right-icon-style 右侧图标的样式，对象形式\n\t * @property {Boolean} required 是否显示左边的\"*\"号，这里仅起展示作用，如需校验必填，请通过rules配置必填规则(默认false)\n\t * @example <u-form-item label=\"姓名\"><u-input v-model=\"form.name\" /></u-form-item>\n\t */\n\n\texport default {\n\t\tname: 'u-form-item',\n\t\tmixins: [Emitter],\n\t\tinject: {\n\t\t\tuForm: {\n\t\t\t\tdefault () {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tprops: {\n\t\t\t// input的label提示语\n\t\t\tlabel: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 绑定的值\n\t\t\tprop: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 是否显示表单域的下划线边框\n\t\t\tborderBottom: {\n\t\t\t\ttype: [String, Boolean],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// label的位置，left-左边，top-上边\n\t\t\tlabelPosition: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// label的宽度，单位rpx\n\t\t\tlabelWidth: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// lable的样式，对象形式\n\t\t\tlabelStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// lable字体的对齐方式\n\t\t\tlabelAlign: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 右侧图标\n\t\t\trightIcon: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 左侧图标\n\t\t\tleftIcon: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 左侧图标的样式\n\t\t\tleftIconStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 左侧图标的样式\n\t\t\trightIconStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 是否显示左边的必填星号，只作显示用，具体校验必填的逻辑，请在rules中配置\n\t\t\trequired: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tinitialValue: '', // 存储的默认值\n\t\t\t\t// isRequired: false, // 是否必填，由于人性化考虑，必填\"*\"号通过props的required配置，不再通过rules的规则自动生成\n\t\t\t\tvalidateState: '', // 是否校验成功\n\t\t\t\tvalidateMessage: '', // 校验失败的提示语\n\t\t\t\t// 有错误时的提示方式，message-提示信息，border-如果input设置了边框，变成呈红色，\n\t\t\t\terrorType: ['message'],\n\t\t\t\tfieldValue: '', // 获取当前子组件input的输入的值\n\t\t\t\t// 父组件的参数，在computed计算中，无法得知this.parent发生变化，故将父组件的参数值，放到data中\n\t\t\t\tparentData: {\n\t\t\t\t\tborderBottom: true,\n\t\t\t\t\tlabelWidth: 90,\n\t\t\t\t\tlabelPosition: 'left',\n\t\t\t\t\tlabelStyle: {},\n\t\t\t\t\tlabelAlign: 'left',\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\twatch: {\n\t\t\tvalidateState(val) {\n\t\t\t\tthis.broadcastInputError();\n\t\t\t},\n\t\t\t// 监听u-form组件的errorType的变化\n\t\t\t\"uForm.errorType\"(val) {\n\t\t\t\tthis.errorType = val;\n\t\t\t\tthis.broadcastInputError();\n\t\t\t},\n\t\t},\n\t\tcomputed: {\n\t\t\t// 计算后的label宽度，由于需要多个判断，故放到computed中\n\t\t\tuLabelWidth() {\n\t\t\t\t// 如果用户设置label为空字符串(微信小程序空字符串最终会变成字符串的'true')，意味着要将label的位置宽度设置为auto\n\t\t\t\treturn this.elLabelPosition == 'left' ? (this.label === 'true' || this.label === '' ? 'auto' : this.$u.addUnit(this\n\t\t\t\t\t.elLabelWidth)) : '100%';\n\t\t\t},\n\t\t\tshowError() {\n\t\t\t\treturn type => {\n\t\t\t\t\t// 如果errorType数组中含有none，或者toast提示类型\n\t\t\t\t\tif (this.errorType.indexOf('none') >= 0) return false;\n\t\t\t\t\telse if (this.errorType.indexOf(type) >= 0) return true;\n\t\t\t\t\telse return false;\n\t\t\t\t}\n\t\t\t},\n\t\t\t// label的宽度\n\t\t\telLabelWidth() {\n\t\t\t\t// label默认宽度为90，优先使用本组件的值，如果没有(如果设置为0，也算是配置了值，依然起效)，则用u-form的值\n\t\t\t\treturn (this.labelWidth != 0 || this.labelWidth != '') ? this.labelWidth : (this.parentData.labelWidth ? this.parentData\n\t\t\t\t\t.labelWidth :\n\t\t\t\t\t90);\n\t\t\t},\n\t\t\t// label的样式\n\t\t\telLabelStyle() {\n\t\t\t\treturn Object.keys(this.labelStyle).length ? this.labelStyle : (this.parentData.labelStyle ? this.parentData.labelStyle :\n\t\t\t\t\t{});\n\t\t\t},\n\t\t\t// label的位置，左侧或者上方\n\t\t\telLabelPosition() {\n\t\t\t\treturn this.labelPosition ? this.labelPosition : (this.parentData.labelPosition ? this.parentData.labelPosition :\n\t\t\t\t\t'left');\n\t\t\t},\n\t\t\t// label的对齐方式\n\t\t\telLabelAlign() {\n\t\t\t\treturn this.labelAlign ? this.labelAlign : (this.parentData.labelAlign ? this.parentData.labelAlign : 'left');\n\t\t\t},\n\t\t\t// label的下划线\n\t\t\telBorderBottom() {\n\t\t\t\t// 子组件的borderBottom默认为空字符串，如果不等于空字符串，意味着子组件设置了值，优先使用子组件的值\n\t\t\t\treturn this.borderBottom !== '' ? this.borderBottom : this.parentData.borderBottom ? this.parentData.borderBottom :\n\t\t\t\t\ttrue;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tbroadcastInputError() {\n\t\t\t\t// 子组件发出事件，第三个参数为true或者false，true代表有错误\n\t\t\t\tthis.broadcast('u-input', 'on-form-item-error', this.validateState === 'error' && this.showError('border'));\n\t\t\t},\n\t\t\t// 判断是否需要required校验\n\t\t\tsetRules() {\n\t\t\t\tlet that = this;\n\t\t\t\t// 由于人性化考虑，必填\"*\"号通过props的required配置，不再通过rules的规则自动生成\n\t\t\t\t// 从父组件u-form拿到当前u-form-item需要验证 的规则\n\t\t\t\t// let rules = this.getRules();\n\t\t\t\t// if (rules.length) {\n\t\t\t\t// \tthis.isRequired = rules.some(rule => {\n\t\t\t\t// \t\t// 如果有必填项，就返回，没有的话，就是undefined\n\t\t\t\t// \t\treturn rule.required;\n\t\t\t\t// \t});\n\t\t\t\t// }\n\n\t\t\t\t// blur事件\n\t\t\t\tthis.$on('on-form-blur', that.onFieldBlur);\n\t\t\t\t// change事件\n\t\t\t\tthis.$on('on-form-change', that.onFieldChange);\n\t\t\t},\n\n\t\t\t// 从u-form的rules属性中，取出当前u-form-item的校验规则\n\t\t\tgetRules() {\n\t\t\t\t// 父组件的所有规则\n\t\t\t\tlet rules = this.parent.rules;\n\t\t\t\trules = rules ? rules[this.prop] : [];\n\t\t\t\t// 保证返回的是一个数组形式\n\t\t\t\treturn [].concat(rules || []);\n\t\t\t},\n\n\t\t\t// blur事件时进行表单校验\n\t\t\tonFieldBlur() {\n\t\t\t\tthis.validation('blur');\n\t\t\t},\n\n\t\t\t// change事件进行表单校验\n\t\t\tonFieldChange() {\n\t\t\t\tthis.validation('change');\n\t\t\t},\n\n\t\t\t// 过滤出符合要求的rule规则\n\t\t\tgetFilteredRule(triggerType = '') {\n\t\t\t\tlet rules = this.getRules();\n\t\t\t\t// 整体验证表单时，triggerType为空字符串，此时返回所有规则进行验证\n\t\t\t\tif (!triggerType) return rules;\n\t\t\t\t// 历遍判断规则是否有对应的事件，比如blur，change触发等的事件\n\t\t\t\t// 使用indexOf判断，是因为某些时候设置的验证规则的trigger属性可能为多个，比如['blur','change']\n\t\t\t\t// 某些场景可能的判断规则，可能不存在trigger属性，故先判断是否存在此属性\n\t\t\t\treturn rules.filter(res => res.trigger && res.trigger.indexOf(triggerType) !== -1);\n\t\t\t},\n\n\t\t\t// 校验数据\n\t\t\tvalidation(trigger, callback = () => {}) {\n\t\t\t\t// 检验之间，先获取需要校验的值\n\t\t\t\tthis.fieldValue = this.parent.model[this.prop];\n\t\t\t\t// blur和change是否有当前方式的校验规则\n\t\t\t\tlet rules = this.getFilteredRule(trigger);\n\t\t\t\t// 判断是否有验证规则，如果没有规则，也调用回调方法，否则父组件u-form会因为\n\t\t\t\t// 对count变量的统计错误而无法进入上一层的回调\n\t\t\t\tif (!rules || rules.length === 0) {\n\t\t\t\t\treturn callback('');\n\t\t\t\t}\n\t\t\t\t// 设置当前的装填，标识为校验中\n\t\t\t\tthis.validateState = 'validating';\n\t\t\t\t// 调用async-validator的方法\n\t\t\t\tlet validator = new schema({\n\t\t\t\t\t[this.prop]: rules\n\t\t\t\t});\n\t\t\t\tvalidator.validate({\n\t\t\t\t\t[this.prop]: this.fieldValue\n\t\t\t\t}, {\n\t\t\t\t\tfirstFields: true\n\t\t\t\t}, (errors, fields) => {\n\t\t\t\t\t// 记录状态和报错信息\n\t\t\t\t\tthis.validateState = !errors ? 'success' : 'error';\n\t\t\t\t\tthis.validateMessage = errors ? errors[0].message : '';\n\t\t\t\t\t// 调用回调方法\n\t\t\t\t\tcallback(this.validateMessage);\n\t\t\t\t});\n\t\t\t},\n\n\t\t\t// 清空当前的u-form-item\n\t\t\tresetField() {\n\t\t\t\tthis.parent.model[this.prop] = this.initialValue;\n\t\t\t\t// 设置为`success`状态，只是为了清空错误标记\n\t\t\t\tthis.validateState = 'success';\n\t\t\t}\n\t\t},\n\n\t\t// 组件创建完成时，将当前实例保存到u-form中\n\t\tmounted() {\n\t\t\t// 支付宝、头条小程序不支持provide/inject，所以使用这个方法获取整个父组件，在created定义，避免循环应用\n\t\t\tthis.parent = this.$u.$parent.call(this, 'u-form');\n\t\t\tif (this.parent) {\n\t\t\t\t// 历遍parentData中的属性，将parent中的同名属性赋值给parentData\n\t\t\t\tObject.keys(this.parentData).map(key => {\n\t\t\t\t\tthis.parentData[key] = this.parent[key];\n\t\t\t\t});\n\t\t\t\t// 如果没有传入prop，或者uForm为空(如果u-form-input单独使用，就不会有uForm注入)，就不进行校验\n\t\t\t\tif (this.prop) {\n\t\t\t\t\t// 将本实例添加到父组件中\n\t\t\t\t\tthis.parent.fields.push(this);\n\t\t\t\t\tthis.errorType = this.parent.errorType;\n\t\t\t\t\t// 设置初始值\n\t\t\t\t\tthis.initialValue = this.fieldValue;\n\t\t\t\t\t// 添加表单校验，这里必须要写在$nextTick中，因为u-form的rules是通过ref手动传入的\n\t\t\t\t\t// 不在$nextTick中的话，可能会造成执行此处代码时，父组件还没通过ref把规则给u-form，导致规则为空\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.setRules();\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// 组件销毁前，将实例从u-form的缓存中移除\n\t\tbeforeDestroy() {\n\t\t\t// 如果当前没有prop的话表示当前不要进行删除（因为没有注入）\n\t\t\tif (this.parent && this.prop) {\n\t\t\t\tthis.parent.fields.map((item, index) => {\n\t\t\t\t\tif (item === this) this.parent.fields.splice(index, 1);\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t};\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\n\t.u-form-item {\n\t\t@include vue-flex;\n\t\t// align-items: flex-start;\n\t\tpadding: 20rpx 0;\n\t\tfont-size: 28rpx;\n\t\tcolor: $u-main-color;\n\t\tbox-sizing: border-box;\n\t\tline-height: $u-form-item-height;\n\t\tflex-direction: column;\n\n\t\t&__border-bottom--error:after {\n\t\t\tborder-color: $u-type-error;\n\t\t}\n\n\t\t&__body {\n\t\t\t@include vue-flex;\n\t\t}\n\n\t\t&--left {\n\t\t\t@include vue-flex;\n\t\t\talign-items: center;\n\n\t\t\t&__content {\n\t\t\t\tposition: relative;\n\t\t\t\t@include vue-flex;\n\t\t\t\talign-items: center;\n\t\t\t\tpadding-right: 10rpx;\n\t\t\t\tflex: 1;\n\n\t\t\t\t&__icon {\n\t\t\t\t\tmargin-right: 8rpx;\n\t\t\t\t}\n\n\t\t\t\t&--required {\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\tleft: -16rpx;\n\t\t\t\t\tvertical-align: middle;\n\t\t\t\t\tcolor: $u-type-error;\n\t\t\t\t\tpadding-top: 6rpx;\n\t\t\t\t}\n\n\t\t\t\t&__label {\n\t\t\t\t\t@include vue-flex;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\tflex: 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&--right {\n\t\t\tflex: 1;\n\n\t\t\t&__content {\n\t\t\t\t@include vue-flex;\n\t\t\t\talign-items: center;\n\t\t\t\tflex: 1;\n\n\t\t\t\t&__slot {\n\t\t\t\t\tflex: 1;\n\t\t\t\t\t/* #ifndef MP */\n\t\t\t\t\t@include vue-flex;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\t/* #endif */\n\t\t\t\t}\n\n\t\t\t\t&__icon {\n\t\t\t\t\tmargin-left: 10rpx;\n\t\t\t\t\tcolor: $u-light-color;\n\t\t\t\t\tfont-size: 30rpx;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&__message {\n\t\t\tfont-size: 24rpx;\n\t\t\tline-height: 24rpx;\n\t\t\tcolor: $u-type-error;\n\t\t\tmargin-top: 12rpx;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-full-screen/u-full-screen.vue",
    "content": "<template>\n\t<u-modal v-model=\"show\" :show-cancel-button=\"true\" confirm-text=\"升级\" title=\"发现新版本\" @cancel=\"cancel\" @confirm=\"confirm\">\n\t\t<view class=\"u-update-content\">\n\t\t\t<rich-text :nodes=\"content\"></rich-text>\n\t\t</view>\n\t</u-modal>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tshow: false,\n\t\t\t\tcontent: `\n\t\t\t\t\t1. 修复badge组件的size参数无效问题<br>\n\t\t\t\t\t2. 新增Modal模态框组件<br>\n\t\t\t\t\t3. 新增压窗屏组件，可以在APP上以弹窗的形式遮盖导航栏和底部tabbar<br>\n\t\t\t\t\t4. 修复键盘组件在微信小程序上遮罩无效的问题\n\t\t\t\t`,\n\t\t\t}\n\t\t},\n\t\tonReady() {\n\t\t\tthis.show = true;\n\t\t},\n\t\tmethods: {\n\t\t\tcancel() {\n\t\t\t\tthis.closeModal();\n\t\t\t},\n\t\t\tconfirm() {\n\t\t\t\tthis.closeModal();\n\t\t\t},\n\t\t\tcloseModal() {\n\t\t\t\tuni.navigateBack();\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-full-content {\n\t\tbackground-color: #00C777;\n\t}\n\t\n\t.u-update-content {\n\t\tfont-size: 26rpx;\n\t\tcolor: $u-content-color;\n\t\tline-height: 1.7;\n\t\tpadding: 30rpx;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-gap/u-gap.vue",
    "content": "<template>\n\t<view class=\"u-gap\" :style=\"[gapStyle]\"></view>\n</template>\n\n<script>\n/**\n * gap 间隔槽\n * @description 该组件一般用于内容块之间的用一个灰色块隔开的场景，方便用户风格统一，减少工作量\n * @tutorial https://www.uviewui.com/components/gap.html\n * @property {String} bg-color 背景颜色（默认#f3f4f6）\n * @property {String Number} height 分割槽高度，单位rpx（默认30）\n * @property {String Number} margin-top 与前一个组件的距离，单位rpx（默认0）\n * @property {String Number} margin-bottom 与后一个组件的距离，单位rpx（0）\n * @example <u-gap height=\"80\" bg-color=\"#bbb\"></u-gap>\n */\nexport default {\n\tname: \"u-gap\",\n\tprops: {\n\t\tbgColor: {\n\t\t\ttype: String,\n\t\t\tdefault: 'transparent ' // 背景透明\n\t\t},\n\t\t// 高度\n\t\theight: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 30\n\t\t},\n\t\t// 与上一个组件的距离\n\t\tmarginTop: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 0\n\t\t},\n\t\t// 与下一个组件的距离\n\t\tmarginBottom: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 0\n\t\t},\n\t},\n\tcomputed: {\n\t\tgapStyle() {\n\t\t\treturn {\n\t\t\t\tbackgroundColor: this.bgColor,\n\t\t\t\theight: this.height + 'rpx',\n\t\t\t\tmarginTop: this.marginTop + 'rpx',\n\t\t\t\tmarginBottom: this.marginBottom + 'rpx'\n\t\t\t};\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-grid/u-grid.vue",
    "content": "<template>\n\t<view class=\"u-grid\" :class=\"{'u-border-top u-border-left': border}\" :style=\"[gridStyle]\"><slot /></view>\n</template>\n\n<script>\n/**\n * grid 宫格布局\n * @description 宫格组件一般用于同时展示多个同类项目的场景，可以给宫格的项目设置徽标组件(badge)，或者图标等，也可以扩展为左右滑动的轮播形式。\n * @tutorial https://www.uviewui.com/components/grid.html\n * @property {String Number} col 宫格的列数（默认3）\n * @property {Boolean} border 是否显示宫格的边框（默认true）\n * @property {Boolean} hover-class 点击宫格的时候，是否显示按下的灰色背景（默认false）\n * @event {Function} click 点击宫格触发\n * @example <u-grid :col=\"3\" @click=\"click\"></u-grid>\n */\nexport default {\n\tname: 'u-grid',\n\tprops: {\n\t\t// 分成几列\n\t\tcol: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 3\n\t\t},\n\t\t// 是否显示边框\n\t\tborder: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 宫格对齐方式，表现为数量少的时候，靠左，居中，还是靠右\n\t\talign: {\n\t\t\ttype: String,\n\t\t\tdefault: 'left'\n\t\t},\n\t\t// 宫格按压时的样式类，\"none\"为无效果\n\t\thoverClass: {\n\t\t\ttype: String,\n\t\t\tdefault: 'u-hover-class'\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tindex: 0,\n\t\t}\n\t},\n\twatch: {\n\t\t// 当父组件需要子组件需要共享的参数发生了变化，手动通知子组件\n\t\tparentData() {\n\t\t\tif(this.children.length) {\n\t\t\t\tthis.children.map(child => {\n\t\t\t\t\t// 判断子组件(u-radio)如果有updateParentData方法的话，就就执行(执行的结果是子组件重新从父组件拉取了最新的值)\n\t\t\t\t\ttypeof(child.updateParentData) == 'function' && child.updateParentData();\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t},\n\tcreated() {\n\t\t// 如果将children定义在data中，在微信小程序会造成循环引用而报错\n\t\tthis.children = [];\n\t},\n\tcomputed: {\n\t\t// 计算父组件的值是否发生变化\n\t\tparentData() {\n\t\t\treturn [this.hoverClass, this.col, this.size, this.border];\n\t\t},\n\t\t// 宫格对齐方式\n\t\tgridStyle() {\n\t\t\tlet style = {};\n\t\t\tswitch(this.align) {\n\t\t\t\tcase 'left':\n\t\t\t\t\tstyle.justifyContent = 'flex-start';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'center':\n\t\t\t\t\tstyle.justifyContent = 'center';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'right':\n\t\t\t\t\tstyle.justifyContent = 'flex-end';\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: style.justifyContent = 'flex-start';\n\t\t\t};\n\t\t\treturn style;\n\t\t}\n\t},\n\tmethods: {\n\t\tclick(index) {\n\t\t\tthis.$emit('click', index);\n\t\t}\n\t}\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import \"../../libs/css/style.components.scss\";\n\n.u-grid {\n\twidth: 100%;\n\t/* #ifdef MP */\n\tposition: relative;\n\tbox-sizing: border-box;\n\toverflow: hidden;\n\t/* #endif */\n\t\n\t/* #ifndef MP */\n\t@include vue-flex;\n\tflex-wrap: wrap;\n\talign-items: center;\n\t/* #endif */\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-grid-item/u-grid-item.vue",
    "content": "<template>\n\t<view class=\"u-grid-item\" :hover-class=\"parentData.hoverClass\"\n\t :hover-stay-time=\"200\" @tap=\"click\" :style=\"{\n\t\t\tbackground: bgColor,\n\t\t\twidth: width,\n\t\t}\">\n\t\t<view class=\"u-grid-item-box\" :style=\"[customStyle]\" :class=\"[parentData.border ? 'u-border-right u-border-bottom' : '']\">\n\t\t\t<slot />\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * gridItem 提示\n\t * @description 宫格组件一般用于同时展示多个同类项目的场景，可以给宫格的项目设置徽标组件(badge)，或者图标等，也可以扩展为左右滑动的轮播形式。搭配u-grid使用\n\t * @tutorial https://www.uviewui.com/components/grid.html\n\t * @property {String} bg-color 宫格的背景颜色（默认#ffffff）\n\t * @property {String Number} index 点击宫格时，返回的值\n\t * @property {Object} custom-style 自定义样式，对象形式\n\t * @event {Function} click 点击宫格触发\n\t * @example <u-grid-item></u-grid-item>\n\t */\n\texport default {\n\t\tname: \"u-grid-item\",\n\t\tprops: {\n\t\t\t// 背景颜色\n\t\t\tbgColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#ffffff'\n\t\t\t},\n\t\t\t// 点击时返回的index\n\t\t\tindex: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 自定义样式，对象形式\n\t\t\tcustomStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tpadding: '30rpx 0'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tparentData: {\n\t\t\t\t\thoverClass: '', // 按下去的时候，是否显示背景灰色\n\t\t\t\t\tcol: 3, // 父组件划分的宫格数\n\t\t\t\t\tborder: true, // 是否显示边框，根据父组件决定\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tcreated() {\n\t\t\t// 父组件的实例\n\t\t\tthis.updateParentData();\n\t\t\t// this.parent在updateParentData()中定义\n\t\t\tthis.parent.children.push(this);\n\t\t},\n\t\tcomputed: {\n\t\t\t// 每个grid-item的宽度\n\t\t\twidth() {\n\t\t\t\treturn 100 / Number(this.parentData.col) + '%';\n\t\t\t},\n\t\t},\n\t\tmethods: {\n\t\t\t// 获取父组件的参数\n\t\t\tupdateParentData() {\n\t\t\t\t// 此方法写在mixin中\n\t\t\t\tthis.getParentData('u-grid');\n\t\t\t},\n\t\t\tclick() {\n\t\t\t\tthis.$emit('click', this.index);\n\t\t\t\tthis.parent && this.parent.click(this.index);\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style scoped lang=\"scss\">\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-grid-item {\n\t\tbox-sizing: border-box;\n\t\tbackground: #fff;\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tposition: relative;\n\t\tflex-direction: column;\n\t\t\n\t\t/* #ifdef MP */\n\t\tposition: relative;\n\t\tfloat: left;\n\t\t/* #endif */\n\t}\n\n\t.u-grid-item-hover {\n\t\tbackground: #f7f7f7 !important;\n\t}\n\n\t.u-grid-marker-box {\n\t\tposition: absolute;\n\t\t/* #ifndef APP-NVUE */\n\t\tdisplay: inline-flex;\t\t\n\t\t/* #endif */\n\t\tline-height: 0;\n\t}\n\n\t.u-grid-marker-wrap {\n\t\tposition: absolute;\n\t}\n\n\t.u-grid-item-box {\n\t\tpadding: 30rpx 0;\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tflex-direction: column;\n\t\tflex: 1;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-icon/u-icon.vue",
    "content": "<template>\n\t<view :style=\"[customStyle]\" class=\"u-icon\" @tap=\"click\" :class=\"['u-icon--' + labelPos]\">\n\t\t<image class=\"u-icon__img\" v-if=\"isImg\" :src=\"name\" :mode=\"imgMode\" :style=\"[imgStyle]\"></image>\n\t\t<text v-else class=\"u-icon__icon\" :class=\"customClass\" :style=\"[iconStyle]\" :hover-class=\"hoverClass\"\n\t\t\t  @touchstart=\"touchstart\">\n\t\t\t<text v-if=\"showDecimalIcon\" :style=\"[decimalIconStyle]\" :class=\"decimalIconClass\" :hover-class=\"hoverClass\"\n\t\t\t\t  class=\"u-icon__decimal\">\n\t\t\t</text>\n\t\t</text>\n\t\t<!-- 这里进行空字符串判断，如果仅仅是v-if=\"label\"，可能会出现传递0的时候，结果也无法显示 -->\n\t\t<text v-if=\"label !== ''\" class=\"u-icon__label\" :style=\"{\n\t\t\tcolor: labelColor,\n\t\t\tfontSize: $u.addUnit(labelSize),\n\t\t\tmarginLeft: labelPos == 'right' ? $u.addUnit(marginLeft) : 0,\n\t\t\tmarginTop: labelPos == 'bottom' ? $u.addUnit(marginTop) : 0,\n\t\t\tmarginRight: labelPos == 'left' ? $u.addUnit(marginRight) : 0,\n\t\t\tmarginBottom: labelPos == 'top' ? $u.addUnit(marginBottom) : 0,\n\t\t}\">{{ label }}\n\t\t</text>\n\t</view>\n</template>\n\n<script>\n/**\n * icon 图标\n * @description 基于字体的图标集，包含了大多数常见场景的图标。\n * @tutorial https://www.uviewui.com/components/icon.html\n * @property {String} name 图标名称，见示例图标集\n * @property {String} color 图标颜色（默认inherit）\n * @property {String | Number} size 图标字体大小，单位rpx（默认32）\n * @property {String | Number} label-size label字体大小，单位rpx（默认28）\n * @property {String} label 图标右侧的label文字（默认28）\n * @property {String} label-pos label文字相对于图标的位置，只能right或bottom（默认right）\n * @property {String} label-color label字体颜色（默认#606266）\n * @property {Object} custom-style icon的样式，对象形式\n * @property {String} custom-prefix 自定义字体图标库时，需要写上此值\n * @property {String | Number} margin-left label在右侧时与图标的距离，单位rpx（默认6）\n * @property {String | Number} margin-top label在下方时与图标的距离，单位rpx（默认6）\n * @property {String | Number} margin-bottom label在上方时与图标的距离，单位rpx（默认6）\n * @property {String | Number} margin-right label在左侧时与图标的距离，单位rpx（默认6）\n * @property {String} label-pos label相对于图标的位置，只能right或bottom（默认right）\n * @property {String} index 一个用于区分多个图标的值，点击图标时通过click事件传出\n * @property {String} hover-class 图标按下去的样式类，用法同uni的view组件的hover-class参数，详情见官网\n * @property {String} width 显示图片小图标时的宽度\n * @property {String} height 显示图片小图标时的高度\n * @property {String} top 图标在垂直方向上的定位\n * @property {String} top 图标在垂直方向上的定位\n * @property {String} top 图标在垂直方向上的定位\n * @property {Boolean} show-decimal-icon 是否为DecimalIcon\n * @property {String} inactive-color 背景颜色，可接受主题色，仅Decimal时有效\n * @property {String | Number} percent 显示的百分比，仅Decimal时有效\n * @event {Function} click 点击图标时触发\n * @example <u-icon name=\"photo\" color=\"#2979ff\" size=\"28\"></u-icon>\n */\nexport default {\n\tname: 'u-icon',\n\tprops: {\n\t\t// 图标类名\n\t\tname: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 图标颜色，可接受主题色\n\t\tcolor: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 字体大小，单位rpx\n\t\tsize: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 'inherit'\n\t\t},\n\t\t// 是否显示粗体\n\t\tbold: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 点击图标的时候传递事件出去的index（用于区分点击了哪一个）\n\t\tindex: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: ''\n\t\t},\n\t\t// 触摸图标时的类名\n\t\thoverClass: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 自定义扩展前缀，方便用户扩展自己的图标库\n\t\tcustomPrefix: {\n\t\t\ttype: String,\n\t\t\tdefault: 'uicon'\n\t\t},\n\t\t// 图标右边或者下面的文字\n\t\tlabel: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: ''\n\t\t},\n\t\t// label的位置，只能右边或者下边\n\t\tlabelPos: {\n\t\t\ttype: String,\n\t\t\tdefault: 'right'\n\t\t},\n\t\t// label的大小\n\t\tlabelSize: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: '28'\n\t\t},\n\t\t// label的颜色\n\t\tlabelColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#606266'\n\t\t},\n\t\t// label与图标的距离(横向排列)\n\t\tmarginLeft: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: '6'\n\t\t},\n\t\t// label与图标的距离(竖向排列)\n\t\tmarginTop: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: '6'\n\t\t},\n\t\t// label与图标的距离(竖向排列)\n\t\tmarginRight: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: '6'\n\t\t},\n\t\t// label与图标的距离(竖向排列)\n\t\tmarginBottom: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: '6'\n\t\t},\n\t\t// 图片的mode\n\t\timgMode: {\n\t\t\ttype: String,\n\t\t\tdefault: 'widthFix'\n\t\t},\n\t\t// 自定义样式\n\t\tcustomStyle: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t},\n\t\t// 用于显示图片小图标时，图片的宽度\n\t\twidth: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: ''\n\t\t},\n\t\t// 用于显示图片小图标时，图片的高度\n\t\theight: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: ''\n\t\t},\n\t\t// 用于解决某些情况下，让图标垂直居中的用途\n\t\ttop: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 0\n\t\t},\n\t\t// 是否为DecimalIcon\n\t\tshowDecimalIcon: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 背景颜色，可接受主题色，仅Decimal时有效\n\t\tinactiveColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#ececec'\n\t\t},\n\t\t// 显示的百分比，仅Decimal时有效\n\t\tpercent: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: '50'\n\t\t}\n\t},\n\tcomputed: {\n\t\tcustomClass() {\n\t\t\tlet classes = []\n\t\t\tclasses.push(this.customPrefix + '-' + this.name)\n\t\t\t// uView的自定义图标类名为u-iconfont\n\t\t\tif (this.customPrefix == 'uicon') {\n\t\t\t\tclasses.push('u-iconfont')\n\t\t\t} else {\n\t\t\t\tclasses.push(this.customPrefix)\n\t\t\t}\n\t\t\t// 主题色，通过类配置\n\t\t\tif (this.showDecimalIcon && this.inactiveColor && this.$u.config.type.includes(this.inactiveColor)) {\n\t\t\t\tclasses.push('u-icon__icon--' + this.inactiveColor)\n\t\t\t} else if (this.color && this.$u.config.type.includes(this.color)) classes.push('u-icon__icon--' + this.color)\n\t\t\t// 阿里，头条，百度小程序通过数组绑定类名时，无法直接使用[a, b, c]的形式，否则无法识别\n\t\t\t// 故需将其拆成一个字符串的形式，通过空格隔开各个类名\n\t\t\t//#ifdef MP-ALIPAY || MP-TOUTIAO || MP-BAIDU\n\t\t\tclasses = classes.join(' ')\n\t\t\t//#endif\n\t\t\treturn classes\n\t\t},\n\t\ticonStyle() {\n\t\t\tlet style = {}\n\t\t\tstyle = {\n\t\t\t\tfontSize: this.size == 'inherit' ? 'inherit' : this.$u.addUnit(this.size),\n\t\t\t\tfontWeight: this.bold ? 'bold' : 'normal',\n\t\t\t\t// 某些特殊情况需要设置一个到顶部的距离，才能更好的垂直居中\n\t\t\t\ttop: this.$u.addUnit(this.top)\n\t\t\t}\n\t\t\t// 非主题色值时，才当作颜色值\n\t\t\tif (this.showDecimalIcon && this.inactiveColor && !this.$u.config.type.includes(this.inactiveColor)) {\n\t\t\t\tstyle.color = this.inactiveColor\n\t\t\t} else if (this.color && !this.$u.config.type.includes(this.color)) style.color = this.color\n\n\t\t\treturn style\n\t\t},\n\t\t// 判断传入的name属性，是否图片路径，只要带有\"/\"均认为是图片形式\n\t\tisImg() {\n\t\t\treturn this.name.indexOf('/') !== -1\n\t\t},\n\t\timgStyle() {\n\t\t\tlet style = {}\n\t\t\t// 如果设置width和height属性，则优先使用，否则使用size属性\n\t\t\tstyle.width = this.width ? this.$u.addUnit(this.width) : this.$u.addUnit(this.size)\n\t\t\tstyle.height = this.height ? this.$u.addUnit(this.height) : this.$u.addUnit(this.size)\n\t\t\treturn style\n\t\t},\n\t\tdecimalIconStyle() {\n\t\t\tlet style = {}\n\t\t\tstyle = {\n\t\t\t\tfontSize: this.size == 'inherit' ? 'inherit' : this.$u.addUnit(this.size),\n\t\t\t\tfontWeight: this.bold ? 'bold' : 'normal',\n\t\t\t\t// 某些特殊情况需要设置一个到顶部的距离，才能更好的垂直居中\n\t\t\t\ttop: this.$u.addUnit(this.top),\n\t\t\t\twidth: this.percent + '%'\n\t\t\t}\n\t\t\t// 非主题色值时，才当作颜色值\n\t\t\tif (this.color && !this.$u.config.type.includes(this.color)) style.color = this.color\n\t\t\treturn style\n\t\t},\n\t\tdecimalIconClass() {\n\t\t\tlet classes = []\n\t\t\tclasses.push(this.customPrefix + '-' + this.name)\n\t\t\t// uView的自定义图标类名为u-iconfont\n\t\t\tif (this.customPrefix == 'uicon') {\n\t\t\t\tclasses.push('u-iconfont')\n\t\t\t} else {\n\t\t\t\tclasses.push(this.customPrefix)\n\t\t\t}\n\t\t\t// 主题色，通过类配置\n\t\t\tif (this.color && this.$u.config.type.includes(this.color)) classes.push('u-icon__icon--' + this.color)\n\t\t\telse classes.push('u-icon__icon--primary')\n\t\t\t// 阿里，头条，百度小程序通过数组绑定类名时，无法直接使用[a, b, c]的形式，否则无法识别\n\t\t\t// 故需将其拆成一个字符串的形式，通过空格隔开各个类名\n\t\t\t//#ifdef MP-ALIPAY || MP-TOUTIAO || MP-BAIDU\n\t\t\tclasses = classes.join(' ')\n\t\t\t//#endif\n\t\t\treturn classes\n\t\t}\n\t},\n\tmethods: {\n\t\tclick() {\n\t\t\tthis.$emit('click', this.index)\n\t\t},\n\t\ttouchstart() {\n\t\t\tthis.$emit('touchstart', this.index)\n\t\t}\n\t}\n}\n</script>\n\n<style scoped lang=\"scss\">\n@import \"../../libs/css/style.components.scss\";\n@import '../../iconfont.css';\n\n.u-icon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\n\t&--left {\n\t\tflex-direction: row-reverse;\n\t\talign-items: center;\n\t}\n\n\t&--right {\n\t\tflex-direction: row;\n\t\talign-items: center;\n\t}\n\n\t&--top {\n\t\tflex-direction: column-reverse;\n\t\tjustify-content: center;\n\t}\n\n\t&--bottom {\n\t\tflex-direction: column;\n\t\tjustify-content: center;\n\t}\n\n\t&__icon {\n\t\tposition: relative;\n\n\t\t&--primary {\n\t\t\tcolor: $u-type-primary;\n\t\t}\n\n\t\t&--success {\n\t\t\tcolor: $u-type-success;\n\t\t}\n\n\t\t&--error {\n\t\t\tcolor: $u-type-error;\n\t\t}\n\n\t\t&--warning {\n\t\t\tcolor: $u-type-warning;\n\t\t}\n\n\t\t&--info {\n\t\t\tcolor: $u-type-info;\n\t\t}\n\t}\n\n\t&__decimal {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tdisplay: inline-block;\n\t\toverflow: hidden;\n\t}\n\n\t&__img {\n\t\theight: auto;\n\t\twill-change: transform;\n\t}\n\n\t&__label {\n\t\tline-height: 1;\n\t}\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-image/u-image.vue",
    "content": "<template>\n\t<view class=\"u-image\" @tap=\"onClick\" :style=\"[wrapStyle, backgroundStyle]\">\n\t\t<image\n\t\t\tv-if=\"!isError\"\n\t\t\t:src=\"src\"\n\t\t\t:mode=\"mode\"\n\t\t\t@error=\"onErrorHandler\"\n\t\t\t@load=\"onLoadHandler\"\n\t\t\t:lazy-load=\"lazyLoad\"\n\t\t\tclass=\"u-image__image\"\n\t\t\t:show-menu-by-longpress=\"showMenuByLongpress\"\n\t\t\t:style=\"{\n\t\t\t\tborderRadius: shape == 'circle' ? '50%' : $u.addUnit(borderRadius)\n\t\t\t}\"\n\t\t></image>\n\t\t<view\n\t\t\tv-if=\"showLoading && loading\"\n\t\t\tclass=\"u-image__loading\"\n\t\t\t:style=\"{\n\t\t\t\tborderRadius: shape == 'circle' ? '50%' : $u.addUnit(borderRadius),\n\t\t\t\tbackgroundColor: bgColor\n\t\t\t}\"\n\t\t>\n\t\t\t<slot v-if=\"$slots.loading\" name=\"loading\" />\n\t\t\t<u-icon v-else :name=\"loadingIcon\" :width=\"width\" :height=\"height\"></u-icon>\n\t\t</view>\n\t\t<view\n\t\t\tv-if=\"showError && isError && !loading\"\n\t\t\tclass=\"u-image__error\"\n\t\t\t:style=\"{\n\t\t\t\tborderRadius: shape == 'circle' ? '50%' : $u.addUnit(borderRadius)\n\t\t\t}\"\n\t\t>\n\t\t\t<slot v-if=\"$slots.error\" name=\"error\" />\n\t\t\t<u-icon v-else :name=\"errorIcon\" :width=\"width\" :height=\"height\"></u-icon>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n/**\n * Image 图片\n * @description 此组件为uni-app的image组件的加强版，在继承了原有功能外，还支持淡入动画、加载中、加载失败提示、圆角值和形状等。\n * @tutorial https://uviewui.com/components/image.html\n * @property {String} src 图片地址\n * @property {String} mode 裁剪模式，见官网说明\n * @property {String | Number} width 宽度，单位任意，如果为数值，则为rpx单位（默认100%）\n * @property {String | Number} height 高度，单位任意，如果为数值，则为rpx单位（默认 auto）\n * @property {String} shape 图片形状，circle-圆形，square-方形（默认square）\n * @property {String | Number} border-radius 圆角值，单位任意，如果为数值，则为rpx单位（默认 0）\n * @property {Boolean} lazy-load 是否懒加载，仅微信小程序、App、百度小程序、字节跳动小程序有效（默认 true）\n * @property {Boolean} show-menu-by-longpress 是否开启长按图片显示识别小程序码菜单，仅微信小程序有效（默认 false）\n * @property {String} loading-icon 加载中的图标，或者小图片（默认 photo）\n * @property {String} error-icon 加载失败的图标，或者小图片（默认 error-circle）\n * @property {Boolean} show-loading 是否显示加载中的图标或者自定义的slot（默认 true）\n * @property {Boolean} show-error 是否显示加载错误的图标或者自定义的slot（默认 true）\n * @property {Boolean} fade 是否需要淡入效果（默认 true）\n * @property {String Number} width 传入图片路径时图片的宽度\n * @property {String Number} height 传入图片路径时图片的高度\n * @property {Boolean} webp 只支持网络资源，只对微信小程序有效（默认 false）\n * @property {String | Number} duration 搭配fade参数的过渡时间，单位ms（默认 500）\n * @event {Function} click 点击图片时触发\n * @event {Function} error 图片加载失败时触发\n * @event {Function} load 图片加载成功时触发\n * @example <u-image width=\"100%\" height=\"300rpx\" :src=\"src\"></u-image>\n */\nexport default {\n\tname: 'u-image',\n\tprops: {\n\t\t// 图片地址\n\t\tsrc: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 裁剪模式\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\tdefault: 'aspectFill'\n\t\t},\n\t\t// 宽度，单位任意\n\t\twidth: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: '100%'\n\t\t},\n\t\t// 高度，单位任意\n\t\theight: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 'auto'\n\t\t},\n\t\t// 图片形状，circle-圆形，square-方形\n\t\tshape: {\n\t\t\ttype: String,\n\t\t\tdefault: 'square'\n\t\t},\n\t\t// 圆角，单位任意\n\t\tborderRadius: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 0\n\t\t},\n\t\t// 是否懒加载，微信小程序、App、百度小程序、字节跳动小程序\n\t\tlazyLoad: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 开启长按图片显示识别微信小程序码菜单\n\t\tshowMenuByLongpress: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 加载中的图标，或者小图片\n\t\tloadingIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: 'photo'\n\t\t},\n\t\t// 加载失败的图标，或者小图片\n\t\terrorIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: 'error-circle'\n\t\t},\n\t\t// 是否显示加载中的图标或者自定义的slot\n\t\tshowLoading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 是否显示加载错误的图标或者自定义的slot\n\t\tshowError: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 是否需要淡入效果\n\t\tfade: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 只支持网络资源，只对微信小程序有效\n\t\twebp: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 过渡时间，单位ms\n\t\tduration: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 500\n\t\t},\n\t\t// 背景颜色，用于深色页面加载图片时，为了和背景色融合\n\t\tbgColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#f3f4f6'\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\t// 图片是否加载错误，如果是，则显示错误占位图\n\t\t\tisError: false,\n\t\t\t// 初始化组件时，默认为加载中状态\n\t\t\tloading: true,\n\t\t\t// 不透明度，为了实现淡入淡出的效果\n\t\t\topacity: 1,\n\t\t\t// 过渡时间，因为props的值无法修改，故需要一个中间值\n\t\t\tdurationTime: this.duration,\n\t\t\t// 图片加载完成时，去掉背景颜色，因为如果是png图片，就会显示灰色的背景\n\t\t\tbackgroundStyle: {}\n\t\t};\n\t},\n\twatch: {\n\t\tsrc: {\n\t\t\timmediate: true,\n\t\t\thandler (n) {\n\t\t\t\tif(!n) {\n\t\t\t\t\t// 如果传入null或者''，或者false，或者undefined，标记为错误状态\n\t\t\t\t\tthis.isError = true;\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.isError = false;\n\t\t\t\t\tthis.loading = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\twrapStyle() {\n\t\t\tlet style = {};\n\t\t\t// 通过调用addUnit()方法，如果有单位，如百分比，px单位等，直接返回，如果是纯粹的数值，则加上rpx单位\n\t\t\tstyle.width = this.$u.addUnit(this.width);\n\t\t\tstyle.height = this.$u.addUnit(this.height);\n\t\t\t// 如果是配置了圆形，设置50%的圆角，否则按照默认的配置值\n\t\t\tstyle.borderRadius = this.shape == 'circle' ? '50%' : this.$u.addUnit(this.borderRadius);\n\t\t\t// 如果设置圆角，必须要有hidden，否则可能圆角无效\n\t\t\tstyle.overflow = this.borderRadius > 0 ? 'hidden' : 'visible';\n\t\t\tif (this.fade) {\n\t\t\t\tstyle.opacity = this.opacity;\n\t\t\t\tstyle.transition = `opacity ${Number(this.durationTime) / 1000}s ease-in-out`;\n\t\t\t}\n\t\t\treturn style;\n\t\t}\n\t},\n\tmethods: {\n\t\t// 点击图片\n\t\tonClick() {\n\t\t\tthis.$emit('click');\n\t\t},\n\t\t// 图片加载失败\n\t\tonErrorHandler(err) {\n\t\t\tthis.loading = false;\n\t\t\tthis.isError = true;\n\t\t\tthis.$emit('error', err);\n\t\t},\n\t\t// 图片加载完成，标记loading结束\n\t\tonLoadHandler() {\n\t\t\tthis.loading = false;\n\t\t\tthis.isError = false;\n\t\t\tthis.$emit('load');\n\t\t\t// 如果不需要动画效果，就不执行下方代码，同时移除加载时的背景颜色\n\t\t\t// 否则无需fade效果时，png图片依然能看到下方的背景色\n\t\t\tif (!this.fade) return this.removeBgColor();\n\t\t\t// 原来opacity为1(不透明，是为了显示占位图)，改成0(透明，意味着该元素显示的是背景颜色，默认的灰色)，再改成1，是为了获得过渡效果\n\t\t\tthis.opacity = 0;\n\t\t\t// 这里设置为0，是为了图片展示到背景全透明这个过程时间为0，延时之后延时之后重新设置为duration，是为了获得背景透明(灰色)\n\t\t\t// 到图片展示的过程中的淡入效果\n\t\t\tthis.durationTime = 0;\n\t\t\t// 延时50ms，否则在浏览器H5，过渡效果无效\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.durationTime = this.duration;\n\t\t\t\tthis.opacity = 1;\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.removeBgColor();\n\t\t\t\t}, this.durationTime);\n\t\t\t}, 50);\n\t\t},\n\t\t// 移除图片的背景色\n\t\tremoveBgColor() {\n\t\t\t// 淡入动画过渡完成后，将背景设置为透明色，否则png图片会看到灰色的背景\n\t\t\tthis.backgroundStyle = {\n\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t};\n\t\t}\n\t}\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import '../../libs/css/style.components.scss';\n\n.u-image {\n\tposition: relative;\n\ttransition: opacity 0.5s ease-in-out;\n\n\t&__image {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n\n\t&__loading,\n\t&__error {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tbackground-color: $u-bg-color;\n\t\tcolor: $u-tips-color;\n\t\tfont-size: 46rpx;\n\t}\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-index-anchor/u-index-anchor.vue",
    "content": "<template>\n\t<!-- 支付宝小程序使用$u.getRect()获取组件的根元素尺寸，所以在外面套一个\"壳\" -->\n\t<view>\n\t\t<view class=\"u-index-anchor-wrapper\" :id=\"$u.guid()\" :style=\"[wrapperStyle]\">\n\t\t\t<view class=\"u-index-anchor \" :class=\"[active ? 'u-index-anchor--active' : '']\" :style=\"[customAnchorStyle]\">\n\t\t\t\t<slot v-if=\"useSlot\" />\n\t\t\t\t<block v-else>\n\t\t\t\t\t<text>{{ index }}</text>\n\t\t\t\t</block>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * indexAnchor 索引列表锚点\n\t * @description 通过折叠面板收纳内容区域,搭配<u-index-anchor>使用\n\t * @tutorial https://www.uviewui.com/components/indexList.html#indexanchor-props\n\t * @property {Boolean} use-slot 是否使用自定义内容的插槽（默认false）\n\t * @property {String Number} index 索引字符，如果定义了use-slot，此参数自动失效\n\t * @property {Object} custStyle 自定义样式，对象形式，如\"{color: 'red'}\"\n\t * @event {Function} default 锚点位置显示内容，默认为索引字符\n\t * @example <u-index-anchor :index=\"item\" />\n\t */\n\texport default {\n\t\tname: \"u-index-anchor\",\n\t\tprops: {\n\t\t\tuseSlot: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\tindex: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\tcustomStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tactive: false,\n\t\t\t\twrapperStyle: {},\n\t\t\t\tanchorStyle: {}\n\t\t\t}\n\t\t},\n\t\tcreated() {\n\t\t\tthis.parent = false;\n\t\t},\n\t\tmounted() {\n\t\t\tthis.parent = this.$u.$parent.call(this, 'u-index-list');\n\t\t\tif(this.parent) {\n\t\t\t\tthis.parent.children.push(this);\n\t\t\t\tthis.parent.updateData();\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tcustomAnchorStyle() {\n\t\t\t\treturn Object.assign(this.anchorStyle, this.customStyle);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-index-anchor {\n\t\tbox-sizing: border-box;\n\t\tpadding: 14rpx 24rpx;\n\t\tcolor: #606266;\n\t\twidth: 100%;\n\t\tfont-weight: 500;\n\t\tfont-size: 28rpx;\n\t\tline-height: 1.2;\n\t\tbackground-color: rgb(245, 245, 245);\n\t}\n\n\t.u-index-anchor--active {\n\t\tright: 0;\n\t\tleft: 0;\n\t\tcolor: #2979ff;\n\t\tbackground-color: #fff;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-index-list/u-index-list.vue",
    "content": "<template>\n\t<!-- 支付宝小程序使用$u.getRect()获取组件的根元素尺寸，所以在外面套一个\"壳\" -->\n\t<view>\n\t\t<view class=\"u-index-bar\">\n\t\t\t<slot />\n\t\t\t<view v-if=\"showSidebar\" class=\"u-index-bar__sidebar\" @touchstart.stop.prevent=\"onTouchMove\" @touchmove.stop.prevent=\"onTouchMove\"\n\t\t\t @touchend.stop.prevent=\"onTouchStop\" @touchcancel.stop.prevent=\"onTouchStop\">\n\t\t\t\t<view v-for=\"(item, index) in indexList\" :key=\"index\" class=\"u-index-bar__index\" :style=\"{zIndex: zIndex + 1, color: activeAnchorIndex === index ? activeColor : ''}\"\n\t\t\t\t :data-index=\"index\">\n\t\t\t\t\t{{ item }}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t\t<view class=\"u-indexed-list-alert\" v-if=\"touchmove && indexList[touchmoveIndex]\" :style=\"{\n\t\t\t\tzIndex: alertZIndex\n\t\t\t}\">\n\t\t\t\t<text>{{indexList[touchmoveIndex]}}</text>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\tvar indexList = function() {\n\t\tvar indexList = [];\n\t\tvar charCodeOfA = 'A'.charCodeAt(0);\n\t\tfor (var i = 0; i < 26; i++) {\n\t\t\tindexList.push(String.fromCharCode(charCodeOfA + i));\n\t\t}\n\t\treturn indexList;\n\t};\n\n\t/**\n\t * indexList 索引列表\n\t * @description 通过折叠面板收纳内容区域,搭配<u-index-anchor>使用\n\t * @tutorial https://www.uviewui.com/components/indexList.html#indexanchor-props\n\t * @property {Number String} scroll-top 当前滚动高度，自定义组件无法获得滚动条事件，所以依赖接入方传入\n\t * @property {Array} index-list 索引字符列表，数组（默认A-Z）\n\t * @property {Number String} z-index 锚点吸顶时的层级（默认965）\n\t * @property {Boolean} sticky 是否开启锚点自动吸顶（默认true）\n\t * @property {Number String} offset-top 锚点自动吸顶时与顶部的距离（默认0）\n\t * @property {String} highlight-color 锚点和右边索引字符高亮颜色（默认#2979ff）\n\t * @event {Function} select 选中右边索引字符时触发\n\t * @example <u-index-list :scrollTop=\"scrollTop\"></u-index-list>\n\t */\n\texport default {\n\t\tname: \"u-index-list\",\n\t\tprops: {\n\t\t\tsticky: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\tzIndex: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\tscrollTop: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 0,\n\t\t\t},\n\t\t\toffsetTop: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 0\n\t\t\t},\n\t\t\tindexList: {\n\t\t\t\ttype: Array,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn indexList()\n\t\t\t\t}\n\t\t\t},\n\t\t\tactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#2979ff'\n\t\t\t}\n\t\t},\n\t\tcreated() {\n\t\t\t// #ifdef H5\n\t\t\tthis.stickyOffsetTop = this.offsetTop ? uni.upx2px(this.offsetTop) : 44;\n\t\t\t// #endif\n\t\t\t// #ifndef H5\n\t\t\tthis.stickyOffsetTop = this.offsetTop ? uni.upx2px(this.offsetTop) : 0;\n\t\t\t// #endif\n\t\t\t// 只能在created生命周期定义children，如果在data定义，会因为循环引用而报错\n\t\t\tthis.children = [];\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tactiveAnchorIndex: 0,\n\t\t\t\tshowSidebar: true,\n\t\t\t\t// children: [],\n\t\t\t\ttouchmove: false,\n\t\t\t\ttouchmoveIndex: 0,\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\tscrollTop() {\n\t\t\t\tthis.updateData()\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\t// 弹出toast的z-index值\n\t\t\talertZIndex() {\n\t\t\t\treturn this.$u.zIndex.toast;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tupdateData() {\n\t\t\t\tthis.timer && clearTimeout(this.timer);\n\t\t\t\tthis.timer = setTimeout(() => {\n\t\t\t\t\tthis.showSidebar = !!this.children.length;\n\t\t\t\t\tthis.setRect().then(() => {\n\t\t\t\t\t\tthis.onScroll();\n\t\t\t\t\t});\n\t\t\t\t}, 0);\n\t\t\t},\n\t\t\tsetRect() {\n\t\t\t\treturn Promise.all([\n\t\t\t\t\tthis.setAnchorsRect(),\n\t\t\t\t\tthis.setListRect(),\n\t\t\t\t\tthis.setSiderbarRect()\n\t\t\t\t]);\n\t\t\t},\n\t\t\tsetAnchorsRect() {\n\t\t\t\treturn Promise.all(this.children.map((anchor, index) => anchor\n\t\t\t\t\t.$uGetRect('.u-index-anchor-wrapper')\n\t\t\t\t\t.then((rect) => {\n\t\t\t\t\t\tObject.assign(anchor, {\n\t\t\t\t\t\t\theight: rect.height,\n\t\t\t\t\t\t\ttop: rect.top\n\t\t\t\t\t\t});\n\t\t\t\t\t})));\n\t\t\t},\n\t\t\tsetListRect() {\n\t\t\t\treturn this.$uGetRect('.u-index-bar').then((rect) => {\n\t\t\t\t\tObject.assign(this, {\n\t\t\t\t\t\theight: rect.height,\n\t\t\t\t\t\ttop: rect.top + this.scrollTop\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetSiderbarRect() {\n\t\t\t\treturn this.$uGetRect('.u-index-bar__sidebar').then(rect => {\n\t\t\t\t\tthis.sidebar = {\n\t\t\t\t\t\theight: rect.height,\n\t\t\t\t\t\ttop: rect.top\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t},\n\t\t\tgetActiveAnchorIndex() {\n\t\t\t\tconst {\n\t\t\t\t\tchildren\n\t\t\t\t} = this;\n\t\t\t\tconst {\n\t\t\t\t\tsticky\n\t\t\t\t} = this;\n\t\t\t\tfor (let i = this.children.length - 1; i >= 0; i--) {\n\t\t\t\t\tconst preAnchorHeight = i > 0 ? children[i - 1].height : 0;\n\t\t\t\t\tconst reachTop = sticky ? preAnchorHeight : 0;\n\t\t\t\t\tif (reachTop >= children[i].top) {\n\t\t\t\t\t\treturn i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn -1;\n\t\t\t},\n\t\t\tonScroll() {\n\t\t\t\tconst {\n\t\t\t\t\tchildren = []\n\t\t\t\t} = this;\n\t\t\t\tif (!children.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst {\n\t\t\t\t\tsticky,\n\t\t\t\t\tstickyOffsetTop,\n\t\t\t\t\tzIndex,\n\t\t\t\t\tscrollTop,\n\t\t\t\t\tactiveColor\n\t\t\t\t} = this;\n\t\t\t\tconst active = this.getActiveAnchorIndex();\n\t\t\t\tthis.activeAnchorIndex = active;\n\t\t\t\tif (sticky) {\n\t\t\t\t\tlet isActiveAnchorSticky = false;\n\t\t\t\t\tif (active !== -1) {\n\t\t\t\t\t\tisActiveAnchorSticky =\n\t\t\t\t\t\t\tchildren[active].top <= 0;\n\t\t\t\t\t}\n\t\t\t\t\tchildren.forEach((item, index) => {\n\t\t\t\t\t\tif (index === active) {\n\t\t\t\t\t\t\tlet wrapperStyle = '';\n\t\t\t\t\t\t\tlet anchorStyle = {\n\t\t\t\t\t\t\t\tcolor: `${activeColor}`\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tif (isActiveAnchorSticky) {\n\t\t\t\t\t\t\t\twrapperStyle = {\n\t\t\t\t\t\t\t\t\theight: `${children[index].height}px`\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tanchorStyle = {\n\t\t\t\t\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\t\t\t\t\ttop: `${stickyOffsetTop}px`,\n\t\t\t\t\t\t\t\t\tzIndex: `${zIndex ? zIndex : this.$u.zIndex.indexListSticky}`,\n\t\t\t\t\t\t\t\t\tcolor: `${activeColor}`\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\titem.active = active;\n\t\t\t\t\t\t\titem.wrapperStyle = wrapperStyle;\n\t\t\t\t\t\t\titem.anchorStyle = anchorStyle;\n\t\t\t\t\t\t} else if (index === active - 1) {\n\t\t\t\t\t\t\tconst currentAnchor = children[index];\n\t\t\t\t\t\t\tconst currentOffsetTop = currentAnchor.top;\n\t\t\t\t\t\t\tconst targetOffsetTop = index === children.length - 1 ?\n\t\t\t\t\t\t\t\tthis.top :\n\t\t\t\t\t\t\t\tchildren[index + 1].top;\n\t\t\t\t\t\t\tconst parentOffsetHeight = targetOffsetTop - currentOffsetTop;\n\t\t\t\t\t\t\tconst translateY = parentOffsetHeight - currentAnchor.height;\n\t\t\t\t\t\t\tconst anchorStyle = {\n\t\t\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\t\t\ttransform: `translate3d(0, ${translateY}px, 0)`,\n\t\t\t\t\t\t\t\tzIndex: `${zIndex ? zIndex : this.$u.zIndex.indexListSticky}`,\n\t\t\t\t\t\t\t\tcolor: `${activeColor}`\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\titem.active = active;\n\t\t\t\t\t\t\titem.anchorStyle = anchorStyle;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.active = false;\n\t\t\t\t\t\t\titem.anchorStyle = '';\n\t\t\t\t\t\t\titem.wrapperStyle = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\tonTouchMove(event) {\n\t\t\t\tthis.touchmove = true;\n\t\t\t\tconst sidebarLength = this.children.length;\n\t\t\t\tconst touch = event.touches[0];\n\t\t\t\tconst itemHeight = this.sidebar.height / sidebarLength;\n\t\t\t\tlet clientY = 0;\n\t\t\t\tclientY = touch.clientY;\n\t\t\t\tlet index = Math.floor((clientY - this.sidebar.top) / itemHeight);\n\t\t\t\tif (index < 0) {\n\t\t\t\t\tindex = 0;\n\t\t\t\t} else if (index > sidebarLength - 1) {\n\t\t\t\t\tindex = sidebarLength - 1;\n\t\t\t\t}\n\t\t\t\tthis.touchmoveIndex = index;\n\t\t\t\tthis.scrollToAnchor(index);\n\t\t\t},\n\t\t\tonTouchStop() {\n\t\t\t\tthis.touchmove = false;\n\t\t\t\tthis.scrollToAnchorIndex = null;\n\t\t\t},\n\t\t\tscrollToAnchor(index) {\n\t\t\t\tif (this.scrollToAnchorIndex === index) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.scrollToAnchorIndex = index;\n\t\t\t\tconst anchor = this.children.find((item) => item.index === this.indexList[index]);\n\t\t\t\tif (anchor) {\n\t\t\t\t\tthis.$emit('select', anchor.index);\n\t\t\t\t\tuni.pageScrollTo({\n\t\t\t\t\t\tduration: 0,\n\t\t\t\t\t\tscrollTop: anchor.top + this.scrollTop\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-index-bar {\n\t\tposition: relative\n\t}\n\n\t.u-index-bar__sidebar {\n\t\tposition: fixed;\n\t\ttop: 50%;\n\t\tright: 0;\n\t\t@include vue-flex;\n\t\tflex-direction: column;\n\t\ttext-align: center;\n\t\ttransform: translateY(-50%);\n\t\tuser-select: none;\n\t\tz-index: 99;\n\t}\n\n\t.u-index-bar__index {\n\t\tfont-weight: 500;\n\t\tpadding: 8rpx 18rpx;\n\t\tfont-size: 22rpx;\n\t\tline-height: 1\n\t}\n\n\t.u-indexed-list-alert {\n\t\tposition: fixed;\n\t\twidth: 120rpx;\n\t\theight: 120rpx;\n\t\tright: 90rpx;\n\t\ttop: 50%;\n\t\tmargin-top: -60rpx;\n\t\tborder-radius: 24rpx;\n\t\tfont-size: 50rpx;\n\t\tcolor: #fff;\n\t\tbackground-color: rgba(0, 0, 0, 0.65);\n\t\t@include vue-flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\tpadding: 0;\n\t\tz-index: 9999999;\n\t}\n\n\t.u-indexed-list-alert text {\n\t\tline-height: 50rpx;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-input/u-input.vue",
    "content": "<template>\n\t<view\n\t\tclass=\"u-input\"\n\t\t:class=\"{\n\t\t\t'u-input--border': border,\n\t\t\t'u-input--error': validateState\n\t\t}\"\n\t\t:style=\"{\n\t\t\tpadding: `0 ${border ? 20 : 0}rpx`,\n\t\t\tborderColor: borderColor,\n\t\t\ttextAlign: inputAlign\n\t\t}\"\n\t\t@tap.stop=\"inputClick\"\n\t>\n\t\t<textarea\n\t\t\tv-if=\"type == 'textarea'\"\n\t\t\tclass=\"u-input__input u-input__textarea\"\n\t\t\t:style=\"[getStyle]\"\n\t\t\t:value=\"defaultValue\"\n\t\t\t:placeholder=\"placeholder\"\n\t\t\t:placeholderStyle=\"placeholderStyle\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:maxlength=\"inputMaxlength\"\n\t\t\t:fixed=\"fixed\"\n\t\t\t:focus=\"focus\"\n\t\t\t:autoHeight=\"autoHeight\"\n\t\t\t:selection-end=\"uSelectionEnd\"\n\t\t\t:selection-start=\"uSelectionStart\"\n\t\t\t:cursor-spacing=\"getCursorSpacing\"\n\t\t\t:show-confirm-bar=\"showConfirmbar\"\n      :adjust-position=\"adjustPosition\"\n\t\t\t@input=\"handleInput\"\n\t\t\t@blur=\"handleBlur\"\n\t\t\t@focus=\"onFocus\"\n\t\t\t@confirm=\"onConfirm\"\n\t\t/>\n\t\t<input\n\t\t\tv-else\n\t\t\tclass=\"u-input__input\"\n\t\t\t:type=\"type == 'password' ? 'text' : type\"\n\t\t\t:style=\"[getStyle]\"\n\t\t\t:value=\"defaultValue\"\n\t\t\t:password=\"type == 'password' && !showPassword\"\n\t\t\t:placeholder=\"placeholder\"\n\t\t\t:placeholderStyle=\"placeholderStyle\"\n\t\t\t:disabled=\"disabled || type === 'select'\"\n\t\t\t:maxlength=\"inputMaxlength\"\n\t\t\t:focus=\"focus\"\n\t\t\t:confirmType=\"confirmType\"\n\t\t\t:cursor-spacing=\"getCursorSpacing\"\n\t\t\t:selection-end=\"uSelectionEnd\"\n\t\t\t:selection-start=\"uSelectionStart\"\n\t\t\t:show-confirm-bar=\"showConfirmbar\"\n\t\t\t:adjust-position=\"adjustPosition\"\n\t\t\t@focus=\"onFocus\"\n\t\t\t@blur=\"handleBlur\"\n\t\t\t@input=\"handleInput\"\n\t\t\t@confirm=\"onConfirm\"\n\t\t/>\n\t\t<view class=\"u-input__right-icon u-flex\">\n\t\t\t<view class=\"u-input__right-icon__clear u-input__right-icon__item\" @tap=\"onClear\" v-if=\"clearable && value != '' && focused\">\n\t\t\t\t<u-icon size=\"32\" name=\"close-circle-fill\" color=\"#c0c4cc\"/>\n\t\t\t</view>\n\t\t\t<view class=\"u-input__right-icon__clear u-input__right-icon__item\" v-if=\"passwordIcon && type == 'password'\">\n\t\t\t\t<u-icon size=\"32\" :name=\"!showPassword ? 'eye' : 'eye-fill'\" color=\"#c0c4cc\" @click=\"showPassword = !showPassword\"/>\n\t\t\t</view>\n\t\t\t<view class=\"u-input__right-icon--select u-input__right-icon__item\" v-if=\"type == 'select'\" :class=\"{\n\t\t\t\t'u-input__right-icon--select--reverse': selectOpen\n\t\t\t}\">\n\t\t\t\t<u-icon name=\"arrow-down-fill\" size=\"26\" color=\"#c0c4cc\"></u-icon>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nimport Emitter from '../../libs/util/emitter.js';\n\n/**\n * input 输入框\n * @description 此组件为一个输入框，默认没有边框和样式，是专门为配合表单组件u-form而设计的，利用它可以快速实现表单验证，输入内容，下拉选择等功能。\n * @tutorial http://uviewui.com/components/input.html\n * @property {String} type 模式选择，见官网说明\n * @property {Boolean} clearable 是否显示右侧的清除图标(默认true)\n * @property {} v-model 用于双向绑定输入框的值\n * @property {String} input-align 输入框文字的对齐方式(默认left)\n * @property {String} placeholder placeholder显示值(默认 '请输入内容')\n * @property {Boolean} disabled 是否禁用输入框(默认false)\n * @property {String Number} maxlength 输入框的最大可输入长度(默认140)\n * @property {String Number} selection-start 光标起始位置，自动聚焦时有效，需与selection-end搭配使用（默认-1）\n * @property {String Number} maxlength 光标结束位置，自动聚焦时有效，需与selection-start搭配使用（默认-1）\n * @property {String Number} cursor-spacing 指定光标与键盘的距离，单位px(默认0)\n * @property {String} placeholderStyle placeholder的样式，字符串形式，如\"color: red;\"(默认 \"color: #c0c4cc;\")\n * @property {String} confirm-type 设置键盘右下角按钮的文字，仅在type为text时生效(默认done)\n * @property {Object} custom-style 自定义输入框的样式，对象形式\n * @property {Boolean} focus 是否自动获得焦点(默认false)\n * @property {Boolean} fixed 如果type为textarea，且在一个\"position:fixed\"的区域，需要指明为true(默认false)\n * @property {Boolean} password-icon type为password时，是否显示右侧的密码查看图标(默认true)\n * @property {Boolean} border 是否显示边框(默认false)\n * @property {String} border-color 输入框的边框颜色(默认#dcdfe6)\n * @property {Boolean} auto-height 是否自动增高输入区域，type为textarea时有效(默认true)\n * @property {String Number} height 高度，单位rpx(text类型时为70，textarea时为100)\n * @example <u-input v-model=\"value\" :type=\"type\" :border=\"border\" />\n */\nexport default {\n\tname: 'u-input',\n\tmixins: [Emitter],\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: ''\n\t\t},\n\t\t// 输入框的类型，textarea，text，number\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tdefault: 'text'\n\t\t},\n\t\tinputAlign: {\n\t\t\ttype: String,\n\t\t\tdefault: 'left'\n\t\t},\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\tdefault: '请输入内容'\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tmaxlength: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 140\n\t\t},\n\t\tplaceholderStyle: {\n\t\t\ttype: String,\n\t\t\tdefault: 'color: #c0c4cc;'\n\t\t},\n\t\tconfirmType: {\n\t\t\ttype: String,\n\t\t\tdefault: 'done'\n\t\t},\n\t\t// 输入框的自定义样式\n\t\tcustomStyle: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t\t// 如果 textarea 是在一个 position:fixed 的区域，需要显示指定属性 fixed 为 true\n\t\tfixed: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 是否自动获得焦点\n\t\tfocus: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 密码类型时，是否显示右侧的密码图标\n\t\tpasswordIcon: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// input|textarea是否显示边框\n\t\tborder: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 输入框的边框颜色\n\t\tborderColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#dcdfe6'\n\t\t},\n\t\tautoHeight: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// type=select时，旋转右侧的图标，标识当前处于打开还是关闭select的状态\n\t\t// open-打开，close-关闭\n\t\tselectOpen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 高度，单位rpx\n\t\theight: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: ''\n\t\t},\n\t\t// 是否可清空\n\t\tclearable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 指定光标与键盘的距离，单位 px\n\t\tcursorSpacing: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 0\n\t\t},\n\t\t// 光标起始位置，自动聚焦时有效，需与selection-end搭配使用\n\t\tselectionStart: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: -1\n\t\t},\n\t\t// 光标结束位置，自动聚焦时有效，需与selection-start搭配使用\n\t\tselectionEnd: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: -1\n\t\t},\n\t\t// 是否自动去除两端的空格\n\t\ttrim: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 是否显示键盘上方带有”完成“按钮那一栏\n\t\tshowConfirmbar:{\n\t\t\ttype:Boolean,\n\t\t\tdefault:true\n\t\t},\n\t\t// 弹出键盘时是否自动调节高度，uni-app默认值是true\n\t\tadjustPosition: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tdefaultValue: this.value,\n\t\t\tinputHeight: 70, // input的高度\n\t\t\ttextareaHeight: 100, // textarea的高度\n\t\t\tvalidateState: false, // 当前input的验证状态，用于错误时，边框是否改为红色\n\t\t\tfocused: false, // 当前是否处于获得焦点的状态\n\t\t\tshowPassword: false, // 是否预览密码\n\t\t\tlastValue: '', // 用于头条小程序，判断@input中，前后的值是否发生了变化，因为头条中文下，按下键没有输入内容，也会触发@input时间\n\t\t};\n\t},\n\twatch: {\n\t\tvalue(nVal, oVal) {\n\t\t\tthis.defaultValue = nVal;\n\t\t\t// 当值发生变化，且为select类型时(此时input被设置为disabled，不会触发@input事件)，模拟触发@input事件\n\t\t\tif(nVal != oVal && this.type == 'select') this.handleInput({\n\t\t\t\tdetail: {\n\t\t\t\t\tvalue: nVal\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t},\n\tcomputed: {\n\t\t// 因为uniapp的input组件的maxlength组件必须要数值，这里转为数值，给用户可以传入字符串数值\n\t\tinputMaxlength() {\n\t\t\treturn Number(this.maxlength);\n\t\t},\n\t\tgetStyle() {\n\t\t\tlet style = {};\n\t\t\t// 如果没有自定义高度，就根据type为input还是textarea来分配一个默认的高度\n\t\t\tstyle.minHeight = this.height ? this.height + 'rpx' : this.type == 'textarea' ?\n\t\t\t\tthis.textareaHeight + 'rpx' : this.inputHeight + 'rpx';\n\t\t\tstyle = Object.assign(style, this.customStyle);\n\t\t\treturn style;\n\t\t},\n\t\t//\n\t\tgetCursorSpacing() {\n\t\t\treturn Number(this.cursorSpacing);\n\t\t},\n\t\t// 光标起始位置\n\t\tuSelectionStart() {\n\t\t\treturn String(this.selectionStart);\n\t\t},\n\t\t// 光标结束位置\n\t\tuSelectionEnd() {\n\t\t\treturn String(this.selectionEnd);\n\t\t}\n\t},\n\tcreated() {\n\t\t// 监听u-form-item发出的错误事件，将输入框边框变红色\n\t\tthis.$on('on-form-item-error', this.onFormItemError);\n\t},\n\tmethods: {\n\t\t/**\n\t\t * change 事件\n\t\t * @param event\n\t\t */\n\t\thandleInput(event) {\n\t\t\tlet value = event.detail.value;\n\t\t\t// 判断是否去除空格\n\t\t\tif(this.trim) value = this.$u.trim(value);\n\t\t\t// vue 原生的方法 return 出去\n\t\t\tthis.$emit('input', value);\n\t\t\t// 当前model 赋值\n\t\t\tthis.defaultValue = value;\n\t\t\t// 过一个生命周期再发送事件给u-form-item，否则this.$emit('input')更新了父组件的值，但是微信小程序上\n\t\t\t// 尚未更新到u-form-item，导致获取的值为空，从而校验混论\n\t\t\t// 这里不能延时时间太短，或者使用this.$nextTick，否则在头条上，会造成混乱\n\t\t\tsetTimeout(() => {\n\t\t\t\t// 头条小程序由于自身bug，导致中文下，每按下一个键(尚未完成输入)，都会触发一次@input，导致错误，这里进行判断处理\n\t\t\t\t// #ifdef MP-TOUTIAO\n\t\t\t\tif(this.$u.trim(value) == this.lastValue) return ;\n\t\t\t\tthis.lastValue = value;\n\t\t\t\t// #endif\n\t\t\t\t// 将当前的值发送到 u-form-item 进行校验\n\t\t\t\tthis.dispatch('u-form-item', 'on-form-change', value);\n\t\t\t}, 40)\n\t\t},\n\t\t/**\n\t\t * blur 事件\n\t\t * @param event\n\t\t */\n\t\thandleBlur(event) {\n\t\t\t// 最开始使用的是监听图标@touchstart事件，自从hx2.8.4后，此方法在微信小程序出错\n\t\t\t// 这里改为监听点击事件，手点击清除图标时，同时也发生了@blur事件，导致图标消失而无法点击，这里做一个延时\n\t\t\tlet value = event.detail.value;\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.focused = false;\n\t\t\t}, 100)\n\t\t\t// vue 原生的方法 return 出去\n\t\t\tthis.$emit('blur', value);\n\t\t\tsetTimeout(() => {\n\t\t\t\t// 头条小程序由于自身bug，导致中文下，每按下一个键(尚未完成输入)，都会触发一次@input，导致错误，这里进行判断处理\n\t\t\t\t// #ifdef MP-TOUTIAO\n\t\t\t\tif(this.$u.trim(value) == this.lastValue) return ;\n\t\t\t\tthis.lastValue = value;\n\t\t\t\t// #endif\n\t\t\t\t// 将当前的值发送到 u-form-item 进行校验\n\t\t\t\tthis.dispatch('u-form-item', 'on-form-blur', value);\n\t\t\t}, 40)\n\t\t},\n\t\tonFormItemError(status) {\n\t\t\tthis.validateState = status;\n\t\t},\n\t\tonFocus(event) {\n\t\t\tthis.focused = true;\n\t\t\tthis.$emit('focus');\n\t\t},\n\t\tonConfirm(e) {\n\t\t\tthis.$emit('confirm', e.detail.value);\n\t\t},\n\t\tonClear(event) {\n\t\t\tthis.$emit('input', '');\n\t\t},\n\t\tinputClick() {\n\t\t\tthis.$emit('click');\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../libs/css/style.components.scss\";\n\n.u-input {\n\tposition: relative;\n\tflex: 1;\n\t@include vue-flex;\n\n\t&__input {\n\t\t//height: $u-form-item-height;\n\t\tfont-size: 28rpx;\n\t\tcolor: $u-main-color;\n\t\tflex: 1;\n\t}\n\n\t&__textarea {\n\t\twidth: auto;\n\t\tfont-size: 28rpx;\n\t\tcolor: $u-main-color;\n\t\tpadding: 10rpx 0;\n\t\tline-height: normal;\n\t\tflex: 1;\n\t}\n\n\t&--border {\n\t\tborder-radius: 6rpx;\n\t\tborder-radius: 4px;\n\t\tborder: 1px solid $u-form-item-border-color;\n\t}\n\n\t&--error {\n\t\tborder-color: $u-type-error!important;\n\t}\n\n\t&__right-icon {\n\n\t\t&__item {\n\t\t\tmargin-left: 10rpx;\n\t\t}\n\n\t\t&--select {\n\t\t\ttransition: transform .4s;\n\n\t\t\t&--reverse {\n\t\t\t\ttransform: rotate(-180deg);\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-keyboard/u-keyboard.vue",
    "content": "<template>\n\t<u-popup class=\"\" :mask=\"mask\" :maskCloseAble=\"maskCloseAble\" mode=\"bottom\" :popup=\"false\" v-model=\"value\" length=\"auto\"\n\t :safeAreaInsetBottom=\"safeAreaInsetBottom\" @close=\"popupClose\" :zIndex=\"uZIndex\">\n\t\t<slot />\n\t\t<view class=\"u-tooltip\" v-if=\"tooltip\">\n\t\t\t<view class=\"u-tooltip-item u-tooltip-cancel\" hover-class=\"u-tooltip-cancel-hover\" @tap=\"onCancel\">\n\t\t\t\t{{cancelBtn ? cancelText : ''}}\n\t\t\t</view>\n\t\t\t<view v-if=\"showTips\" class=\"u-tooltip-item u-tooltip-tips\">\n\t\t\t\t{{tips ? tips : mode == 'number' ? '数字键盘' : mode == 'card' ? '身份证键盘' : '车牌号键盘'}}\n\t\t\t</view>\n\t\t\t<view v-if=\"confirmBtn\" @tap=\"onConfirm\" class=\"u-tooltip-item u-tooltips-submit\" hover-class=\"u-tooltips-submit-hover\">\n\t\t\t\t{{confirmBtn ? confirmText : ''}}\n\t\t\t</view>\n\t\t</view>\n\t\t<block v-if=\"mode == 'number' || mode == 'card'\">\n\t\t\t<u-number-keyboard :random=\"random\" @backspace=\"backspace\" @change=\"change\" :mode=\"mode\" :dotEnabled=\"dotEnabled\"></u-number-keyboard>\n\t\t</block>\n\t\t<block v-else>\n\t\t\t<u-car-keyboard :random=\"random\" @backspace=\"backspace\" @change=\"change\"></u-car-keyboard>\n\t\t</block>\n\t</u-popup>\n</template>\n\n<script>\n\t/**\n\t * keyboard 键盘\n\t * @description 此为uViw自定义的键盘面板，内含了数字键盘，车牌号键，身份证号键盘3中模式，都有可以打乱按键顺序的选项。\n\t * @tutorial https://www.uviewui.com/components/keyboard.html\n\t * @property {String} mode 键盘类型，见官网基本使用的说明（默认number）\n\t * @property {Boolean} dot-enabled 是否显示\".\"按键，只在mode=number时有效（默认true）\n\t * @property {Boolean} tooltip 是否显示键盘顶部工具条（默认true）\n\t * @property {String} tips 工具条中间的提示文字，见上方基本使用的说明，如不需要，请传\"\"空字符\n\t * @property {Boolean} cancel-btn 是否显示工具条左边的\"取消\"按钮（默认true）\n\t * @property {Boolean} confirm-btn 是否显示工具条右边的\"完成\"按钮（默认true）\n\t * @property {Boolean} mask 是否显示遮罩（默认true）\n\t * @property {String} confirm-text 确认按钮的文字\n\t * @property {String} cancel-text 取消按钮的文字\n\t * @property {Number String} z-index 弹出键盘的z-index值（默认1075）\n\t * @property {Boolean} random 是否打乱键盘按键的顺序（默认false）\n\t * @property {Boolean} safe-area-inset-bottom 是否开启底部安全区适配（默认false）\n\t * @property {Boolean} mask-close-able 是否允许点击遮罩收起键盘（默认true）\n\t * @event {Function} change 按键被点击(不包含退格键被点击)\n\t * @event {Function} cancel 键盘顶部工具条左边的\"取消\"按钮被点击\n\t * @event {Function} confirm 键盘顶部工具条右边的\"完成\"按钮被点击\n\t * @event {Function} backspace 键盘退格键被点击\n\t * @example <u-keyboard mode=\"number\" v-model=\"show\"></u-keyboard> \n\t */\n\texport default {\n\t\tname: \"u-keyboard\",\n\t\tprops: {\n\t\t\t// 键盘的类型，number-数字键盘，card-身份证键盘，car-车牌号键盘\n\t\t\tmode: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'number'\n\t\t\t},\n\t\t\t// 是否显示键盘的\".\"符号\n\t\t\tdotEnabled: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 是否显示顶部工具条\n\t\t\ttooltip: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 是否显示工具条中间的提示\n\t\t\tshowTips: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 工具条中间的提示文字\n\t\t\ttips: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 是否显示工具条左边的\"取消\"按钮\n\t\t\tcancelBtn: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 是否显示工具条右边的\"完成\"按钮\n\t\t\tconfirmBtn: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 是否打乱键盘按键的顺序\n\t\t\trandom: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 是否开启底部安全区适配，开启的话，会在iPhoneX机型底部添加一定的内边距\n\t\t\tsafeAreaInsetBottom: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 是否允许通过点击遮罩关闭键盘\n\t\t\tmaskCloseAble: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 通过双向绑定控制键盘的弹出与收起\n\t\t\tvalue: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 是否显示遮罩，某些时候数字键盘时，用户希望看到自己的数值，所以可能不想要遮罩\n\t\t\tmask: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// z-index值\n\t\t\tzIndex: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 取消按钮的文字\n\t\t\tcancelText: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '取消'\n\t\t\t},\n\t\t\t// 确认按钮的文字\n\t\t\tconfirmText: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '确认'\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\t//show: false\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tuZIndex() {\n\t\t\t\treturn this.zIndex ? this.zIndex : this.$u.zIndex.popup;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tchange(e) {\n\t\t\t\tthis.$emit('change', e);\n\t\t\t},\n\t\t\t// 键盘关闭\n\t\t\tpopupClose() {\n\t\t\t\t// 通过发送input这个特殊的事件名，可以修改父组件传给props的value的变量，也即双向绑定\n\t\t\t\tthis.$emit('input', false);\n\t\t\t},\n\t\t\t// 输入完成\n\t\t\tonConfirm() {\n\t\t\t\tthis.popupClose();\n\t\t\t\tthis.$emit('confirm');\n\t\t\t},\n\t\t\t// 取消输入\n\t\t\tonCancel() {\n\t\t\t\tthis.popupClose();\n\t\t\t\tthis.$emit('cancel');\n\t\t\t},\n\t\t\t// 退格键\n\t\t\tbackspace() {\n\t\t\t\tthis.$emit('backspace');\n\t\t\t},\n\t\t\t// 关闭键盘\n\t\t\t// close() {\n\t\t\t// \tthis.show = false;\n\t\t\t// },\n\t\t\t// // 打开键盘\n\t\t\t// open() {\n\t\t\t// \tthis.show = true;\n\t\t\t// }\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-keyboard {\n\t\tposition: relative;\n\t\tz-index: 1003;\n\t}\n\n\t.u-tooltip {\n\t\t@include vue-flex;\n\t\tjustify-content: space-between;\n\t}\n\n\t.u-tooltip-item {\n\t\tcolor: #333333;\n\t\tflex: 0 0 33.333333%;\n\t\ttext-align: center;\n\t\tpadding: 20rpx 10rpx;\n\t\tfont-size: 28rpx;\n\t}\n\n\t.u-tooltips-submit {\n\t\ttext-align: right;\n\t\tflex-grow: 1;\n\t\tflex-wrap: 0;\n\t\tpadding-right: 40rpx;\n\t\tcolor: $u-type-primary;\n\t}\n\n\t.u-tooltip-cancel {\n\t\ttext-align: left;\n\t\tflex-grow: 1;\n\t\tflex-wrap: 0;\n\t\tpadding-left: 40rpx;\n\t\tcolor: #888888;\n\t}\n\n\t.u-tooltips-submit-hover {\n\t\tcolor: $u-type-success;\n\t}\n\n\t.u-tooltip-cancel-hover {\n\t\tcolor: #333333;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-lazy-load/u-lazy-load.vue",
    "content": "<template>\n\t<view class=\"u-wrap\" :style=\"{\n\t\t\t  opacity: Number(opacity),\n\t\t\t  borderRadius: borderRadius + 'rpx',\n\t\t\t  // 因为time值需要改变,所以不直接用duration值(不能改变父组件prop传过来的值)\n\t\t\t  transition: `opacity ${time / 1000}s ease-in-out`\n\t\t   }\"\n\t :class=\"'u-lazy-item-' + elIndex\">\n\t\t<view :class=\"'u-lazy-item-' + elIndex\">\n\t\t\t<image :style=\"{borderRadius: borderRadius + 'rpx', height: imgHeight}\" v-if=\"!isError\" class=\"u-lazy-item\"\n\t\t\t :src=\"isShow ? image : loadingImg\" :mode=\"imgMode\" @load=\"imgLoaded\" @error=\"loadError\" @tap=\"clickImg\"></image>\n\t\t\t<image :style=\"{borderRadius: borderRadius + 'rpx', height: imgHeight}\" class=\"u-lazy-item error\" v-else :src=\"errorImg\"\n\t\t\t :mode=\"imgMode\" @load=\"errorImgLoaded\" @tap=\"clickImg\"></image>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * lazyLoad 懒加载\n\t * @description 懒加载使用的场景为：页面有很多图片时，APP会同时加载所有的图片，导致页面卡顿，各个位置的图片出现前后不一致等.\n\t * @tutorial https://www.uviewui.com/components/lazyLoad.html\n\t * @property {String Number} index 用户自定义值，在事件触发时回调，用以区分是哪个图片\n\t * @property {String} image 图片路径\n\t * @property {String} loading-img 预加载时的占位图\n\t * @property {String} error-img 图片加载出错时的占位图\n\t * @property {String} threshold 触发加载时的位置，见上方说明，单位 rpx（默认300）\n\t * @property {String Number} duration 图片加载成功时，淡入淡出时间，单位ms（默认）\n\t * @property {String} effect 图片加载成功时，淡入淡出的css动画效果（默认ease-in-out）\n\t * @property {Boolean} is-effect 图片加载成功时，是否启用淡入淡出效果（默认true）\n\t * @property {String Number} border-radius 图片圆角值，单位rpx（默认0）\n\t * @property {String Number} height 图片高度，注意：实际高度可能受img-mode参数影响（默认450）\n\t * @property {String Number} mg-mode 图片的裁剪模式，详见image组件裁剪模式（默认widthFix）\n\t * @event {Function} click 点击图片时触发\n\t * @event {Function} load 图片加载成功时触发\n\t * @event {Function} error 图片加载失败时触发\n\t * @example <u-lazy-load :image=\"image\" :loading-img=\"loadingImg\" :error-img=\"errorImg\"></u-lazy-load>\n\t */\n\texport default {\n\t\tname: 'u-lazy-load',\n\t\tprops: {\n\t\t\tindex: {\n\t\t\t\ttype: [Number, String]\n\t\t\t},\n\t\t\t// 要显示的图片\n\t\t\timage: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 图片裁剪模式\n\t\t\timgMode: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'widthFix'\n\t\t\t},\n\t\t\t// 占位图片路径\n\t\t\tloadingImg: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAMAAAC3Ycb+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OUM0QjNBQjkyQUQ2MTFFQTlCNUQ4RTIzNDE5RUIxNjciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OUM0QjNBQkEyQUQ2MTFFQTlCNUQ4RTIzNDE5RUIxNjciPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5QzRCM0FCNzJBRDYxMUVBOUI1RDhFMjM0MTlFQjE2NyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo5QzRCM0FCODJBRDYxMUVBOUI1RDhFMjM0MTlFQjE2NyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PtRHfPcAAAAzUExURZWVldfX18PDw62trZubm9zc3Li4uKGhoebm5tLS0uHh4c3Nzaenp729vcjIyLKysuvr6141L40AAAcXSURBVHja7NzZlqpGAEBR5lG0//9rIw7IJKJi4or7PGTdtN10wr5SVAEGf/qqArsAiIAAERAgAgJEQIAIiIAAERAgAgJEQIAIiIAAERAgAgJEQIAIiIAAERAgAgJEQIAIiIAAERAgAgJEQIAIiIAAERAgAgJEQIAIiIAAERAgAgJEQIAIiIAAERAgAgJEQIAIiIAAERAgAgJEQIAIiIAAERAgAgJEQIAICBABERAgAgJEQIAICBABERAgAgJEQIAICBABERAgAgJEQIAICBABERAgAgJEQIAICBABERAgAgJEQIAICBABERAgAgJEQIAICBABERAgAgJEQIAICBABERAgAgJEQIAICBABERAg+nmQFMi5Jis+sIniED23jSzIgLTtg2D//iYme/8QBM/9lQ+CAEhbNLM3N9hEHAThX7GPCiBfAxK1b51kD+R7QMLjXg7iCsgWIPUh7pfVozG791oeBPngm48G583uW5GkBvI+SBaM2xXDn1oqum423bX/mgF5FySc2cv93Voug9TdZotsggnkBZB2NzbhrSY5HnoG07jei8dvzsJB/c3W60SALILE46+WCztsbhPR7R2VJq0ukEcT49nyy8QhaKcRa3fYHZD4+ufqOJAcgDz8/59vtw1I3QP5K6JsOG0vm3hce4I8LQp/BaRZGJC3AAn7IKOKXbC+7EdA5vdmmVwOLksgRThqOqiH4XEGsht+peoPUE8U/jJIO5OLH4GEwUslV5G0PTBG5Uiw/Y2jyigO3l9HAHKv9PYb82LloH74dZBoBUgar+l48NsNvtD0fkez9iwrAvIYZDRCl+Xs149Hm/KZmQ+QjUCiO1ei4ru7EsgnQYrkznlQb7thCuRfAzlOAPN72427P4VA/i2Q/DKT/Ls/VR8fvIBsDZIuz7TPF6TCbnk4GJkB2RokejTjuE7/unlgCuSTIO0Cy+Plp6vDfnQlBchy8QtjSHVd3EgmK1bHLm+H6+nXYbz2DuQRSPnqoL7vvq0u70on4zvxgCyWD3b9UyDVdW24PaWaiGTnFZJwPIQAebDpIKheBIm7n124ZthMJipAlkqHO+IZkP1tbfzOJark/A7MgKyvvl60fRqkvXfhuow+t9+q00+0/yyBrK8ZngOtBzldhw2X9tvpNGty0gvkmbPeJ0Cy/r09s/stbmfo0yMWkEdjevgKyOn2t2pxv7UXoibTdCDLje9/Ww1ymqzn87dbp92242ZmMRjI8hASvwKSLq4udqN6ksw8nxXN3tszD9L8Gkg+2mFrQYql5az4tvFj5xOx4VwnSdeBtGdyPwUytxK77pBVlNHdO7OK3rh/eTPUvdutT3fO52tuHMqD4N7llv8pyOQQ//w19YVDfX27+Sfuby9/6nau4pdA8vEdOZuChEH/quHt0Jg+IRJ/5+PrHwKZXfjbDiS73Zo7mu5UkzX7uTsXe0e/7nC3ePf1O69+BUg2XDfZCqSqOu7rGVf8cHBe8zhC2b61dtUHXv0OkGo6ZL4JkpbRYXdUaFevivx2M/1GIOctNh949TtAoumQ+TpIHMX54CJu+8BDd8FkE5BqcZh/59XvAClmTvKfB0nDqIlHo3T70SftyW1eX9dXtgQJqs1f/Q6QaOa/7wmQKtxH8eiGoCRuovODIO3VxOMmruZbHrLyD7z6DSDtGyT7ew1kf9hNn07c986JTovzzem0Id9wUG+Vk/IDr34DSNR7huZJkMFT6vEhqrPx/j5cnlZML8N6/PAzh9Y99Flm5Yde/c9BquDOkvkKkMP58dA4qi9vivE8JOvGz/j8FokfPpr288+pH2ZPOZrLmeGD+7KOh6dqYWJ48ki7yUg0tz0go/fv/LLddfV3sgOLJyaGPY/zrSlh1a36Arkzoue9CyG35ze6E6/dzO2Ga0EGHqdRJIkfn9/8OEjTW8Vq91ZWh39FeehWA7Nu9ft8CpUEk1WWOyDF0OPyEU2Pnzf/bZC0P6IPzmAvu7KauQBVrgKpJ0tG2arHzX8e5Pb3PezNs/PrX+3JMyCLn9XXf37tPFHvt09WfCDDjx+yyn1/p1V11j7GnB/q3leLuVva79S/tzed+db08YpF4uOZtmz/9oXWMq6BCAgQAQEiIEAERECACAgQAQEiIEAERECACAgQAQEiIEAERECACAgQAQEiIEAERECACAgQAQEiIEAERECACAgQAQEiIEAERECACAgQAQEiIEAERECACAgQAQEiIEAERECACAgQAQEiIEAERECACAgQAQEiIEAEBIiACAgQAQEiIEAEBIiACAgQAQEiIEAEBIiACAgQAQEiIEAEBIiACAgQAQEiIEAEBIiACAgQAQEiIEAEBIiACAgQAQEiIEAEBIiACAgQAQEiIEAEBIiACAgQAQEiIEAEBIiACAgQAQEiIEAEBIiAALELvqt/BBgACqVeUBXxcCkAAAAASUVORK5CYII='\n\t\t\t},\n\t\t\t// 加载失败的错误占位图\n\t\t\terrorImg: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAMAAAC3Ycb+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODdDMjhENDYyQUQ2MTFFQTlDQ0VBODgxQjFFOEEyMEMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODdDMjhENDcyQUQ2MTFFQTlDQ0VBODgxQjFFOEEyMEMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4N0MyOEQ0NDJBRDYxMUVBOUNDRUE4ODFCMUU4QTIwQyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4N0MyOEQ0NTJBRDYxMUVBOUNDRUE4ODFCMUU4QTIwQyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhLwhikAAAAzUExURZWVldfX162t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'\n\t\t\t},\n\t\t\t// 图片进入可见区域前多少像素时，单位rpx，开始加载图片\n\t\t\t// 负数为图片超出屏幕底部多少距离后触发懒加载，正数为图片顶部距离屏幕底部多少距离时触发(图片还没出现在屏幕上)\n\t\t\tthreshold: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 100\n\t\t\t},\n\t\t\t// 淡入淡出动画的过渡时间\n\t\t\tduration: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 500\n\t\t\t},\n\t\t\t// 渡效果的速度曲线，各个之间差别不大，因为这是淡入淡出，且时间很短，不是那些变形或者移动的情况，会明显\n\t\t\t// linear|ease|ease-in|ease-out|ease-in-out|cubic-bezier(n,n,n,n);\n\t\t\teffect: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'ease-in-out'\n\t\t\t},\n\t\t\t// 是否使用过渡效果\n\t\t\tisEffect: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 圆角值\n\t\t\tborderRadius: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 0\n\t\t\t},\n\t\t\t// 图片高度，单位rpx\n\t\t\theight: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: '450'\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tisShow: false,\n\t\t\t\topacity: 1,\n\t\t\t\ttime: this.duration,\n\t\t\t\tloadStatus: '', // 默认是懒加载中的状态\n\t\t\t\tisError: false, // 图片加载失败\n\t\t\t\telIndex: this.$u.guid()\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\t// 将threshold从rpx转为px\n\t\t\tgetThreshold() {\n\t\t\t\t// 先取绝对值，因为threshold可能是负数，最后根据this.threshold是正数或者负数，重新还原\n\t\t\t\tlet thresholdPx = uni.upx2px(Math.abs(this.threshold));\n\t\t\t\treturn this.threshold < 0 ? -thresholdPx : thresholdPx;\n\t\t\t},\n\t\t\t// 计算图片的高度，可能为auto，带%，或者直接数值\n\t\t\timgHeight() {\n\t\t\t\treturn this.$u.addUnit(this.height);\n\t\t\t}\n\t\t},\n\t\tcreated() {\n\t\t\t// 由于一些特殊原因，不能将此变量放到data中定义\n\t\t\tthis.observer = {};\n\t\t},\n\t\twatch: {\n\t\t\tisShow(nVal) {\n\t\t\t\t// 如果是不开启过渡效果，直接返回\n\t\t\t\tif (!this.isEffect) return;\n\t\t\t\tthis.time = 0;\n\t\t\t\t// 原来opacity为1(不透明，是为了显示占位图)，改成0(透明，意味着该元素显示的是背景颜色，默认的白色)，再改成1，是为了获得过渡效果\n\t\t\t\tthis.opacity = 0;\n\t\t\t\t// 延时30ms，否则在浏览器H5，过渡效果无效\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.time = this.duration;\n\t\t\t\t\tthis.opacity = 1;\n\t\t\t\t}, 30)\n\t\t\t},\n\t\t\t// 图片路径发生变化时，需要重新标记一些变量，否则会一直卡在某一个状态，比如isError\n\t\t\timage(n) {\n\t\t\t\tif(!n) {\n\t\t\t\t\t// 如果传入null或者''，或者undefined，标记为错误状态\n\t\t\t\t\tthis.isError = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.init();\n\t\t\t\t\tthis.isError = false;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\t// 用于重新初始化\n\t\t\tinit() {\n\t\t\t\tthis.isError = false;\n\t\t\t\tthis.loadStatus = '';\n\t\t\t},\n\t\t\t// 点击图片触发的事件,loadlazy-还是懒加载中状态，loading-图片正在加载，loaded-图片加加载完成\n\t\t\tclickImg() {\n\t\t\t\tlet whichImg = '';\n\t\t\t\t// 如果isShow为false，意味着图片还没开始加载，点击的只能是最开始的占位图\n\t\t\t\tif (this.isShow == false) whichImg = 'lazyImg';\n\t\t\t\t// 如果isError为true，意味着图片加载失败，这是只剩下错误的占位图，所以点击的只能是错误占位图\n\t\t\t\t// 当然，也可以给错误的占位图元素绑定点击事件，看你喜欢~\n\t\t\t\telse if (this.isError == true) whichImg = 'errorImg';\n\t\t\t\t// 总共三张图片，除了两个占位图，剩下的只能是正常的那张图片了\n\t\t\t\telse whichImg = 'realImg';\n\t\t\t\t// 只通知当前图片的index\n\t\t\t\tthis.$emit('click', this.index);\n\t\t\t},\n\t\t\t// 图片加载完成事件，可能是加载占位图时触发，也可能是加载真正的图片完成时触发，通过isShow区分\n\t\t\timgLoaded() {\n\t\t\t\t// 占位图加载完成\n\t\t\t\tif (this.loadStatus == '') {\n\t\t\t\t\tthis.loadStatus = 'lazyed';\n\t\t\t\t}\n\t\t\t\t// 真正的图片加载完成 \n\t\t\t\telse if (this.loadStatus == 'lazyed') {\n\t\t\t\t\tthis.loadStatus = 'loaded';\n\t\t\t\t\tthis.$emit('load', this.index);\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 错误的图片加载完成\n\t\t\terrorImgLoaded() {\n\t\t\t\tthis.$emit('error', this.index);\n\t\t\t},\n\t\t\t// 图片加载失败\n\t\t\tloadError() {\n\t\t\t\tthis.isError = true;\n\t\t\t},\n\t\t\tdisconnectObserver(observerName) {\n\t\t\t\tconst observer = this[observerName];\n\t\t\t\tobserver && observer.disconnect();\n\t\t\t},\n\t\t},\n\t\tbeforeDestroy() {\n\t\t\t// 销毁页面时，可能还没触发某张很底部的懒加载图片，所以把这个事件给去掉\n\t\t\t//observer.disconnect();\n\t\t},\n\t\tmounted() {\n\t\t\t// 此uOnReachBottom事件由mixin.js发出，目的是让页面到底时，保证所有图片都进行加载，做到绝对稳定且可靠\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tuni.$once('uOnReachBottom', () => {\n\t\t\t\t\tif (!this.isShow) this.isShow = true;\n\t\t\t\t});\n\t\t\t})\n\t\t\t// mounted的时候，不一定挂载了这个元素，延时30ms，否则会报错或者不报错，但是也没有效果\n\t\t\tsetTimeout(() => {\n\t\t\t\t// 这里是组件内获取布局状态，不能用uni.createIntersectionObserver，而必须用this.createIntersectionObserver\n\t\t\t\tthis.disconnectObserver('contentObserver');\n\t\t\t\tconst contentObserver = uni.createIntersectionObserver(this);\n\t\t\t\t// 要理解这里怎么计算的，请看这个：\n\t\t\t\t// https://blog.csdn.net/qq_25324335/article/details/83687695\n\t\t\t\tcontentObserver.relativeToViewport({\n\t\t\t\t\tbottom: this.getThreshold,\n\t\t\t\t}).observe('.u-lazy-item-' + this.elIndex, (res) => {\n\t\t\t\t\tif (res.intersectionRatio > 0) {\n\t\t\t\t\t\t// 懒加载状态改变\n\t\t\t\t\t\tthis.isShow = true;\n\t\t\t\t\t\t// 如果图片已经加载，去掉监听，减少性能的消耗\n\t\t\t\t\t\tthis.disconnectObserver('contentObserver');\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tthis.contentObserver = contentObserver;\n\t\t\t}, 30)\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-wrap {\n\t\tbackground-color: #eee;\n\t\toverflow: hidden;\n\t}\n\n\t.u-lazy-item {\n\t\twidth: 100%;\n\t\t// 骗系统开启硬件加速\n\t\ttransform: transition3d(0, 0, 0);\n\t\t// 防止图片加载“闪一下”\n\t\twill-change: transform;\n\t\t/* #ifndef APP-NVUE */\n\t\tdisplay: block;\n\t\t/* #endif */\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-line/u-line.vue",
    "content": "<template>\n\t<view class=\"u-line\" :style=\"[lineStyle]\">\n\t\t\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * line 线条\n\t * @description 此组件一般用于显示一根线条，用于分隔内容块，有横向和竖向两种模式，且能设置0.5px线条，使用也很简单\n\t * @tutorial https://www.uviewui.com/components/line.html\n\t * @property {String} color 线条的颜色(默认#e4e7ed)\n\t * @property {String} length 长度，竖向时表现为高度，横向时表现为长度，可以为百分比，带rpx单位的值等\n\t * @property {String} direction 线条的方向，row-横向，col-竖向(默认row)\n\t * @property {String} border-style 线条的类型，solid-实线，dashed-方形虚线，dotted-圆点虚线(默认solid)\n\t * @property {Boolean} hair-line 是否显示细线条(默认true)\n\t * @property {String} margin 线条与上下左右元素的间距，字符串形式，如\"30rpx\"\n\t * @example <u-line color=\"red\"></u-line>\n\t */\n\texport default {\n\t\tname: 'u-line',\n\t\tprops: {\n\t\t\tcolor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#e4e7ed'\n\t\t\t},\n\t\t\t// 长度，竖向时表现为高度，横向时表现为长度，可以为百分比，带rpx单位的值等\n\t\t\tlength: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '100%'\n\t\t\t},\n\t\t\t// 线条方向，col-竖向，row-横向\n\t\t\tdirection: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'row'\n\t\t\t},\n\t\t\t// 是否显示细边框\n\t\t\thairLine: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 线条与上下左右元素的间距，字符串形式，如\"30rpx\"、\"20rpx 30rpx\"\n\t\t\tmargin: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '0'\n\t\t\t},\n\t\t\t// 线条的类型，solid-实线，dashed-方形虚线，dotted-圆点虚线\n\t\t\tborderStyle: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'solid'\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tlineStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\tstyle.margin = this.margin;\n\t\t\t\t// 如果是水平线条，边框高度为1px，再通过transform缩小一半，就是0.5px了\n\t\t\t\tif(this.direction == 'row') {\n\t\t\t\t\t// 此处采用兼容分开写，兼容nvue的写法\n\t\t\t\t\tstyle.borderBottomWidth = '1px';\n\t\t\t\t\tstyle.borderBottomStyle = this.borderStyle;\n\t\t\t\t\tstyle.width = this.$u.addUnit(this.length);\n\t\t\t\t\tif(this.hairLine) style.transform = 'scaleY(0.5)';\n\t\t\t\t} else {\n\t\t\t\t\t// 如果是竖向线条，边框宽度为1px，再通过transform缩小一半，就是0.5px了\n\t\t\t\t\tstyle.borderLeftWidth = '1px';\n\t\t\t\t\tstyle.borderLeftStyle = this.borderStyle;\n\t\t\t\t\tstyle.height = this.$u.addUnit(this.length);\n\t\t\t\t\tif(this.hairLine) style.transform = 'scaleX(0.5)';\n\t\t\t\t}\n\t\t\t\tstyle.borderColor = this.color;\n\t\t\t\treturn style;\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-line {\n\t\tvertical-align: middle;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-line-progress/u-line-progress.vue",
    "content": "<template>\n\t<view class=\"u-progress\" :style=\"{\n\t\tborderRadius: round ? '100rpx' : 0,\n\t\theight: height + 'rpx',\n\t\tbackgroundColor: inactiveColor\n\t}\">\n\t\t<view :class=\"[\n\t\t\ttype ? `u-type-${type}-bg` : '',\n\t\t\tstriped ? 'u-striped' : '',\n\t\t\tstriped && stripedActive ? 'u-striped-active' : ''\n\t\t]\" class=\"u-active\" :style=\"[progressStyle]\">\n\t\t\t<slot v-if=\"$slots.default || $slots.$default\" />\n\t\t\t<template v-else-if=\"showPercent\">\n\t\t\t\t{{percent + '%'}}\n\t\t\t</template>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * lineProgress 线型进度条\n\t * @description 展示操作或任务的当前进度，比如上传文件，是一个线形的进度条。\n\t * @tutorial https://www.uviewui.com/components/lineProgress.html\n\t * @property {String Number} percent 进度条百分比值，为数值类型，0-100\n\t * @property {Boolean} round 进度条两端是否为半圆（默认true）\n\t * @property {String} type 如设置，active-color值将会失效\n\t * @property {String} active-color 进度条激活部分的颜色（默认#19be6b）\n\t * @property {String} inactive-color 进度条的底色（默认#ececec）\n\t * @property {Boolean} show-percent 是否在进度条内部显示当前的百分比值数值（默认true）\n\t * @property {String Number} height 进度条的高度，单位rpx（默认28）\n\t * @property {Boolean} striped 是否显示进度条激活部分的条纹（默认false）\n\t * @property {Boolean} striped-active 条纹是否具有动态效果（默认false）\n\t * @example <u-line-progress :percent=\"70\" :show-percent=\"true\"></u-line-progress>\n\t */\n\texport default {\n\t\tname: \"u-line-progress\",\n\t\tprops: {\n\t\t\t// 两端是否显示半圆形\n\t\t\tround: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 主题颜色\n\t\t\ttype: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 激活部分的颜色\n\t\t\tactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#19be6b'\n\t\t\t},\n\t\t\tinactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#ececec'\n\t\t\t},\n\t\t\t// 进度百分比，数值\n\t\t\tpercent: {\n\t\t\t\ttype: Number,\n\t\t\t\tdefault: 0\n\t\t\t},\n\t\t\t// 是否在进度条内部显示百分比的值\n\t\t\tshowPercent: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 进度条的高度，单位rpx\n\t\t\theight: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 28\n\t\t\t},\n\t\t\t// 是否显示条纹\n\t\t\tstriped: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 条纹是否显示活动状态\n\t\t\tstripedActive: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tprogressStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\tstyle.width = this.percent + '%';\n\t\t\t\tif(this.activeColor) style.backgroundColor = this.activeColor;\n\t\t\t\treturn style;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\n\t.u-progress {\n\t\toverflow: hidden;\n\t\theight: 15px;\n\t\t/* #ifndef APP-NVUE */\n\t\tdisplay: inline-flex;\n\t\t/* #endif */\n\t\talign-items: center;\n\t\twidth: 100%;\n\t\tborder-radius: 100rpx;\n\t}\n\n\t.u-active {\n\t\twidth: 0;\n\t\theight: 100%;\n\t\talign-items: center;\n\t\t@include vue-flex;\n\t\tjustify-items: flex-end;\n\t\tjustify-content: space-around;\n\t\tfont-size: 20rpx;\n\t\tcolor: #ffffff;\n\t\ttransition: all 0.4s ease;\n\t}\n\n\t.u-striped {\n\t\tbackground-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n\t\tbackground-size: 39px 39px;\n\t}\n\n\t.u-striped-active {\n\t\tanimation: progress-stripes 2s linear infinite;\n\t}\n\n\t@keyframes progress-stripes {\n\t\t0% {\n\t\t\tbackground-position: 0 0;\n\t\t}\n\n\t\t100% {\n\t\t\tbackground-position: 39px 0;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-link/u-link.vue",
    "content": "<template>\n\t<text class=\"u-link\" @tap.stop=\"openLink\" :style=\"{\n\t\tcolor: color,\n\t\tfontSize: fontSize + 'rpx',\n\t\tborderBottom: underLine ? `1px solid ${lineColor ? lineColor : color}` : 'none',\n\t\tpaddingBottom: underLine ? '0rpx' : '0'\n\t}\">\n\t\t<slot></slot>\n\t</text>\n</template>\n\n<script>\n\t/**\n\t * link 超链接\n\t * @description 该组件为超链接组件，在不同平台有不同表现形式：在APP平台会通过plus环境打开内置浏览器，在小程序中把链接复制到粘贴板，同时提示信息，在H5中通过window.open打开链接。\n\t * @tutorial https://www.uviewui.com/components/link.html\n\t * @property {String} color 文字颜色（默认#606266）\n\t * @property {String Number} font-size 字体大小，单位rpx（默认28）\n\t * @property {Boolean} under-line 是否显示下划线（默认false）\n\t * @property {String} href 跳转的链接，要带上http(s)\n\t * @property {String} line-color 下划线颜色，默认同color参数颜色 \n\t * @property {String} mp-tips 各个小程序平台把链接复制到粘贴板后的提示语（默认“链接已复制，请在浏览器打开”）\n\t * @example <u-link href=\"http://www.uviewui.com\">蜀道难，难于上青天</u-link>\n\t */\n\texport default {\n\t\tname: \"u-link\",\n\t\tprops: {\n\t\t\t// 文字颜色\n\t\t\tcolor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#2979ff'\n\t\t\t},\n\t\t\t// 字体大小，单位rpx\n\t\t\tfontSize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 28\n\t\t\t},\n\t\t\t// 是否显示下划线\n\t\t\tunderLine: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 要跳转的链接\n\t\t\thref: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 小程序中复制到粘贴板的提示语\n\t\t\tmpTips: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '链接已复制，请在浏览器打开'\n\t\t\t},\n\t\t\t// 下划线颜色\n\t\t\tlineColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\topenLink() {\n\t\t\t\t// #ifdef APP-PLUS\n\t\t\t\tplus.runtime.openURL(this.href)\n\t\t\t\t// #endif\n\t\t\t\t// #ifdef H5\n\t\t\t\twindow.open(this.href)\n\t\t\t\t// #endif\n\t\t\t\t// #ifdef MP\n\t\t\t\tuni.setClipboardData({\n\t\t\t\t\tdata: this.href,\n\t\t\t\t\tsuccess: () => {\n\t\t\t\t\t\tuni.hideToast();\n\t\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\t\tthis.$u.toast(this.mpTips);\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t// #endif\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-link {\n\t\tline-height: 1;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-loading/u-loading.vue",
    "content": "<template>\n\t<view v-if=\"show\" class=\"u-loading\" :class=\"mode == 'circle' ? 'u-loading-circle' : 'u-loading-flower'\" :style=\"[cricleStyle]\">\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * loading 加载动画\n\t * @description 警此组件为一个小动画，目前用在uView的loadmore加载更多和switch开关等组件的正在加载状态场景。\n\t * @tutorial https://www.uviewui.com/components/loading.html\n\t * @property {String} mode 模式选择，见官网说明（默认circle）\n\t * @property {String} color 动画活动区域的颜色，只对 mode = flower 模式有效（默认#c7c7c7）\n\t * @property {String Number} size 加载图标的大小，单位rpx（默认34）\n\t * @property {Boolean} show 是否显示动画（默认true）\n\t * @example <u-loading mode=\"circle\"></u-loading>\n\t */\n\texport default {\n\t\tname: \"u-loading\",\n\t\tprops: {\n\t\t\t// 动画的类型\n\t\t\tmode: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'circle'\n\t\t\t},\n\t\t\t// 动画的颜色\n\t\t\tcolor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#c7c7c7'\n\t\t\t},\n\t\t\t// 加载图标的大小，单位rpx\n\t\t\tsize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: '34'\n\t\t\t},\n\t\t\t// 是否显示动画\n\t\t\tshow: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\t// 加载中圆圈动画的样式\n\t\t\tcricleStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\tstyle.width = this.size + 'rpx';\n\t\t\t\tstyle.height = this.size + 'rpx';\n\t\t\t\tif (this.mode == 'circle') style.borderColor = `#e4e4e4 #e4e4e4 #e4e4e4 ${this.color ? this.color : '#c7c7c7'}`;\n\t\t\t\treturn style;\n\t\t\t},\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-loading-circle {\n\t\t/* #ifndef APP-NVUE */\n\t\tdisplay: inline-flex;\n\t\t/* #endif */\n\t\tvertical-align: middle;\n\t\twidth: 28rpx;\n\t\theight: 28rpx;\n\t\tbackground: 0 0;\n\t\tborder-radius: 50%;\n\t\tborder: 2px solid;\n\t\tborder-color: #e5e5e5 #e5e5e5 #e5e5e5 #8f8d8e;\n\t\tanimation: u-circle 1s linear infinite;\n\t}\n\n\t.u-loading-flower {\n\t\twidth: 20px;\n\t\theight: 20px;\n\t\tdisplay: inline-block;\n\t\tvertical-align: middle;\n\t\t-webkit-animation: u-flower 1s steps(12) infinite;\n\t\tanimation: u-flower 1s steps(12) infinite;\n\t\tbackground: transparent url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=) no-repeat;\n\t\tbackground-size: 100%;\n\t}\n\n\t@keyframes u-flower {\n\t\t0% {\n\t\t\t-webkit-transform: rotate(0deg);\n\t\t\ttransform: rotate(0deg);\n\t\t}\n\n\t\tto {\n\t\t\t-webkit-transform: rotate(1turn);\n\t\t\ttransform: rotate(1turn);\n\t\t}\n\t}\n\n\t@-webkit-keyframes u-circle {\n\t\t0% {\n\t\t\ttransform: rotate(0);\n\t\t}\n\n\t\t100% {\n\t\t\ttransform: rotate(360deg);\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-loading-page/u-loading-page.vue",
    "content": "<template>\n\t<view class=\"u-loading-page\">\n\t\t\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tprops: {\n\t\t\t\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\t\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\t\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-loadmore/u-loadmore.vue",
    "content": "<template>\n\t<view class=\"u-load-more-wrap\" :style=\"{\n\t\tbackgroundColor: bgColor,\n\t\tmarginBottom: marginBottom + 'rpx',\n\t\tmarginTop: marginTop + 'rpx',\n\t\theight: $u.addUnit(height)\n\t}\">\n\t\t<u-line color=\"#d4d4d4\" length=\"50\"></u-line>\n\t\t<!-- 加载中和没有更多的状态才显示两边的横线 -->\n\t\t<view :class=\"status == 'loadmore' || status == 'nomore' ? 'u-more' : ''\" class=\"u-load-more-inner\">\n\t\t\t<view class=\"u-loadmore-icon-wrap\">\n\t\t\t\t<u-loading class=\"u-loadmore-icon\" :color=\"iconColor\" :mode=\"iconType == 'circle' ? 'circle' : 'flower'\" :show=\"status == 'loading' && icon\"></u-loading>\n\t\t\t</view>\n\t\t\t<!-- 如果没有更多的状态下，显示内容为dot（粗点），加载特定样式 -->\n\t\t\t<view class=\"u-line-1\" :style=\"[loadTextStyle]\" :class=\"[(status == 'nomore' && isDot == true) ? 'u-dot-text' : 'u-more-text']\" @tap=\"loadMore\">\n\t\t\t\t{{ showText }}\n\t\t\t</view>\n\t\t</view>\n\t\t<u-line color=\"#d4d4d4\" length=\"50\"></u-line>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * loadmore 加载更多\n\t * @description 此组件一般用于标识页面底部加载数据时的状态。\n\t * @tutorial https://www.uviewui.com/components/loadMore.html\n\t * @property {String} status 组件状态（默认loadmore）\n\t * @property {String} bg-color 组件背景颜色，在页面是非白色时会用到（默认#ffffff）\n\t * @property {Boolean} icon 加载中时是否显示图标（默认true）\n\t * @property {String} icon-type 加载中时的图标类型（默认circle）\n\t * @property {String} icon-color icon-type为circle时有效，加载中的动画图标的颜色（默认#b7b7b7）\n\t * @property {Boolean} is-dot status为nomore时，内容显示为一个\"●\"（默认false）\n\t * @property {String} color 字体颜色（默认#606266）\n\t * @property {String Number} margin-top 到上一个相邻元素的距离\n\t * @property {String Number} margin-bottom 到下一个相邻元素的距离\n\t * @property {Object} load-text 自定义显示的文字，见上方说明示例\n\t * @event {Function} loadmore status为loadmore时，点击组件会发出此事件\n\t * @example <u-loadmore :status=\"status\" icon-type=\"iconType\" load-text=\"loadText\" />\n\t */\n\texport default {\n\t\tname: \"u-loadmore\",\n\t\tprops: {\n\t\t\t// 组件背景色\n\t\t\tbgColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'transparent'\n\t\t\t},\n\t\t\t// 是否显示加载中的图标\n\t\t\ticon: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 字体大小\n\t\t\tfontSize: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '28'\n\t\t\t},\n\t\t\t// 字体颜色\n\t\t\tcolor: {\n\t\t\t\ttype: String, \n\t\t\t\tdefault: '#606266'\n\t\t\t},\n\t\t\t// 组件状态，loadmore-加载前的状态，loading-加载中的状态，nomore-没有更多的状态\n\t\t\tstatus: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'loadmore'\n\t\t\t},\n\t\t\t// 加载中状态的图标，flower-花朵状图标，circle-圆圈状图标\n\t\t\ticonType: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'circle'\n\t\t\t},\n\t\t\t// 显示的文字\n\t\t\tloadText: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tloadmore: '加载更多',\n\t\t\t\t\t\tloading: '正在加载...',\n\t\t\t\t\t\tnomore: '没有更多了'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 在“没有更多”状态下，是否显示粗点\n\t\t\tisDot: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 加载中显示圆圈动画时，动画的颜色\n\t\t\ticonColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#b7b7b7'\n\t\t\t},\n\t\t\t// 上边距\n\t\t\tmarginTop: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 0\n\t\t\t},\n\t\t\t// 下边距\n\t\t\tmarginBottom: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 0\n\t\t\t},\n\t\t\t// 高度，单位rpx\n\t\t\theight: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 'auto'\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\t// 粗点\n\t\t\t\tdotText: \"●\"\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\t// 加载的文字显示的样式\n\t\t\tloadTextStyle() {\n\t\t\t\treturn {\n\t\t\t\t\tcolor: this.color,\n\t\t\t\t\tfontSize: this.fontSize + 'rpx',\n\t\t\t\t\tposition: 'relative',\n\t\t\t\t\tzIndex: 1,\n\t\t\t\t\tbackgroundColor: this.bgColor,\n\t\t\t\t\t// 如果是加载中状态，动画和文字需要距离近一点\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 加载中圆圈动画的样式\n\t\t\tcricleStyle() {\n\t\t\t\treturn {\n\t\t\t\t\tborderColor: `#e5e5e5 #e5e5e5 #e5e5e5 ${this.circleColor}`\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 加载中花朵动画形式\n\t\t\t// 动画由base64图片生成，暂不支持修改\n\t\t\tflowerStyle() {\n\t\t\t\treturn {\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 显示的提示文字\n\t\t\tshowText() {\n\t\t\t\tlet text = '';\n\t\t\t\tif(this.status == 'loadmore') text = this.loadText.loadmore;\n\t\t\t\telse if(this.status == 'loading') text = this.loadText.loading;\n\t\t\t\telse if(this.status == 'nomore' && this.isDot) text = this.dotText;\n\t\t\t\telse text = this.loadText.nomore;\n\t\t\t\treturn text;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tloadMore() {\n\t\t\t\t// 只有在“加载更多”的状态下才发送点击事件，内容不满一屏时无法触发底部上拉事件，所以需要点击来触发\n\t\t\t\tif(this.status == 'loadmore') this.$emit('loadmore');\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t/* #ifdef MP */\n\t// 在mp.scss中，赋予了u-line为flex: 1，这里需要一个明确的长度，所以重置掉它\n\t// 在组件内部，把组件名(u-line)当做选择器，在微信开发工具会提示不合法，但不影响使用\n\tu-line {\n\t\tflex: none;\n\t}\n\t/* #endif */\n\t\n\t.u-load-more-wrap {\n\t\t@include vue-flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t}\n\t\n\t.u-load-more-inner {\n\t\t@include vue-flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\tpadding: 0 12rpx;\n\t}\n\t\n\t.u-more {\n\t\tposition: relative;\n\t\t@include vue-flex;\n\t\tjustify-content: center;\n\t}\n\t\n\t.u-dot-text {\n\t\tfont-size: 28rpx;\n\t}\n\t\n\t.u-loadmore-icon-wrap {\n\t\tmargin-right: 8rpx;\n\t}\n\t\n\t.u-loadmore-icon {\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-mask/u-mask.vue",
    "content": "<template>\n\t<view class=\"u-mask\" hover-stop-propagation :style=\"[maskStyle, zoomStyle]\" @tap=\"click\" @touchmove.stop.prevent=\"() => {}\" :class=\"{\n\t\t'u-mask-zoom': zoom,\n\t\t'u-mask-show': show\n\t}\">\n\t\t<slot />\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * mask 遮罩\n\t * @description 创建一个遮罩层，用于强调特定的页面元素，并阻止用户对遮罩下层的内容进行操作，一般用于弹窗场景\n\t * @tutorial https://www.uviewui.com/components/mask.html\n\t * @property {Boolean} show 是否显示遮罩（默认false）\n\t * @property {String Number} z-index z-index 层级（默认1070）\n\t * @property {Object} custom-style 自定义样式对象，见上方说明\n\t * @property {String Number} duration 动画时长，单位毫秒（默认300）\n\t * @property {Boolean} zoom 是否使用scale对遮罩进行缩放（默认true）\n\t * @property {Boolean} mask-click-able 遮罩是否可点击，为false时点击不会发送click事件（默认true）\n\t * @event {Function} click mask-click-able为true时，点击遮罩发送此事件\n\t * @example <u-mask :show=\"show\" @click=\"show = false\"></u-mask>\n\t */\n\texport default {\n\t\tname: \"u-mask\",\n\t\tprops: {\n\t\t\t// 是否显示遮罩\n\t\t\tshow: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 层级z-index\n\t\t\tzIndex: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 用户自定义样式\n\t\t\tcustomStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 遮罩的动画样式， 是否使用使用zoom进行scale进行缩放\n\t\t\tzoom: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 遮罩的过渡时间，单位为ms\n\t\t\tduration: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 300\n\t\t\t},\n\t\t\t// 是否可以通过点击遮罩进行关闭\n\t\t\tmaskClickAble: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tzoomStyle: {\n\t\t\t\t\ttransform: ''\n\t\t\t\t},\n\t\t\t\tscale: 'scale(1.2, 1.2)'\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\tshow(n) {\n\t\t\t\tif(n && this.zoom) {\n\t\t\t\t\t// 当展示遮罩的时候，设置scale为1，达到缩小(原来为1.2)的效果\n\t\t\t\t\tthis.zoomStyle.transform = 'scale(1, 1)';\n\t\t\t\t} else if(!n && this.zoom) {\n\t\t\t\t\t// 当隐藏遮罩的时候，设置scale为1.2，达到放大(因为显示遮罩时已重置为1)的效果\n\t\t\t\t\tthis.zoomStyle.transform = this.scale;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tmaskStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\tstyle.backgroundColor = \"rgba(0, 0, 0, 0.6)\";\n\t\t\t\tif(this.show) style.zIndex = this.zIndex ? this.zIndex : this.$u.zIndex.mask;\n\t\t\t\telse style.zIndex = -1;\n\t\t\t\tstyle.transition = `all ${this.duration / 1000}s ease-in-out`;\n\t\t\t\t// 判断用户传递的对象是否为空，不为空就进行合并\n\t\t\t\tif (Object.keys(this.customStyle).length) style = { \n\t\t\t\t\t...style,\n\t\t\t\t\t...this.customStyle\n\t\t\t\t};\n\t\t\t\treturn style;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tclick() {\n\t\t\t\tif (!this.maskClickAble) return;\n\t\t\t\tthis.$emit('click');\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-mask {\n\t\tposition: fixed;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tright: 0;\n\t\tbottom: 0;\n\t\topacity: 0;\n\t\ttransition: transform 0.3s;\n\t}\n\n\t.u-mask-show {\n\t\topacity: 1;\n\t}\n\t\n\t.u-mask-zoom {\n\t\ttransform: scale(1.2, 1.2);\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-message-input/u-message-input.vue",
    "content": "<template>\n\t<view class=\"u-char-box\">\n\t\t<view class=\"u-char-flex\">\n\t\t\t<input :disabled=\"disabledKeyboard\" :value=\"valueModel\" type=\"number\" :focus=\"focus\" :maxlength=\"maxlength\" class=\"u-input\" @input=\"getVal\"/>\n\t\t\t<view v-for=\"(item, index) in loopCharArr\" :key=\"index\">\n\t\t\t\t<view :class=\"[breathe && charArrLength == index ? 'u-breathe' : '', 'u-char-item',\n\t\t\t\tcharArrLength === index && mode == 'box' ? 'u-box-active' : '',\n\t\t\t\tmode === 'box' ? 'u-box' : '']\" :style=\"{\n\t\t\t\t\tfontWeight: bold ? 'bold' : 'normal',\n\t\t\t\t\tfontSize: fontSize + 'rpx',\n\t\t\t\t\twidth: width + 'rpx',\n\t\t\t\t\theight: width + 'rpx',\n\t\t\t\t\tcolor: inactiveColor,\n\t\t\t\t\tborderColor: charArrLength === index && mode == 'box' ? activeColor : inactiveColor\n\t\t\t\t}\">\n\t\t\t\t\t<view class=\"u-placeholder-line\" :style=\"{\n\t\t\t\t\t\t\tdisplay: charArrLength === index ? 'block' : 'none',\n\t\t\t\t\t\t\theight: width * 0.5 +'rpx'\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\tv-if=\"mode !== 'middleLine'\"\n\t\t\t\t\t></view>\n\t\t\t\t\t<view v-if=\"mode === 'middleLine' && charArrLength <= index\" :class=\"[breathe && charArrLength == index ? 'u-breathe' : '', charArrLength === index ? 'u-middle-line-active' : '']\"\n\t\t\t\t\t class=\"u-middle-line\" :style=\"{height: bold ? '4px' : '2px', background: charArrLength === index ? activeColor : inactiveColor}\"></view>\n\t\t\t\t\t<view v-if=\"mode === 'bottomLine'\" :class=\"[breathe && charArrLength == index ? 'u-breathe' : '', charArrLength === index ? 'u-bottom-line-active' : '']\"\n\t\t\t\t\t class=\"u-bottom-line\" :style=\"{height: bold ? '4px' : '2px', background: charArrLength === index ? activeColor : inactiveColor}\"></view>\n\t\t\t\t\t<block v-if=\"!dotFill\"> {{ charArr[index] ? charArr[index] : ''}}</block>\n\t\t\t\t\t<block v-else>\n\t\t\t\t\t\t<text class=\"u-dot\">{{ charArr[index] ? '●' : ''}}</text>\n\t\t\t\t\t</block>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * messageInput 验证码输入框\n\t * @description 该组件一般用于验证用户短信验证码的场景，也可以结合uView的键盘组件使用\n\t * @tutorial https://www.uviewui.com/components/messageInput.html\n\t * @property {String Number} maxlength 输入字符个数（默认4）\n\t * @property {Boolean} dot-fill 是否用圆点填充（默认false）\n\t * @property {String} mode 模式选择，见上方\"基本使用\"说明（默认box）\n\t * @property {String Number} value 预置值\n\t * @property {Boolean} breathe 是否开启呼吸效果，见上方说明（默认true）\n\t * @property {Boolean} focus 是否自动获取焦点（默认false）\n\t * @property {Boolean} bold 字体和输入横线是否加粗（默认true）\n\t * @property {String Number} font-size 字体大小，单位rpx（默认60）\n\t * @property {String} active-color 当前激活输入框的样式（默认#2979ff）\n\t * @property {String} inactive-color 非激活输入框的样式，文字颜色同此值（默认#606266）\n\t * @property {String | Number} width 输入框宽度，单位rpx，高等于宽（默认80）\n\t * @property {Boolean} disabled-keyboard 禁止点击输入框唤起系统键盘（默认false）\n\t * @event {Function} change 输入内容发生改变时触发，具体见官网说明\n\t * @event {Function} finish 输入字符个数达maxlength值时触发，见官网说明\n\t * @example <u-message-input mode=\"bottomLine\"></u-message-input>\n\t */\n\texport default {\n\t\tname: \"u-message-input\",\n\t\tprops: {\n\t\t\t// 最大输入长度\n\t\t\tmaxlength: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 4\n\t\t\t},\n\t\t\t// 是否用圆点填充\n\t\t\tdotFill: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 显示模式，box-盒子模式，bottomLine-横线在底部模式，middleLine-横线在中部模式\n\t\t\tmode: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: \"box\"\n\t\t\t},\n\t\t\t// 预置值\n\t\t\tvalue: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 当前激活输入item，是否带有呼吸效果\n\t\t\tbreathe: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 是否自动获取焦点\n\t\t\tfocus: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 字体是否加粗\n\t\t\tbold: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 字体大小\n\t\t\tfontSize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 60\n\t\t\t},\n\t\t\t// 激活样式\n\t\t\tactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#2979ff'\n\t\t\t},\n\t\t\t// 未激活的样式\n\t\t\tinactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#606266'\n\t\t\t},\n\t\t\t// 输入框的大小，单位rpx，宽等于高\n\t\t\twidth: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: '80'\n\t\t\t},\n\t\t\t// 是否隐藏原生键盘，如果想用自定义键盘的话，需设置此参数为true\n\t\t\tdisabledKeyboard: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\t// maxlength: {\n\t\t\t// \t// 此值设置为true，会在组件加载后无需maxlength变化就会执行一次本监听函数，无需再created生命周期中处理\n\t\t\t// \timmediate: true,\n\t\t\t// \thandler(val) {\n\t\t\t// \t\tthis.maxlength = Number(val);\n\t\t\t// \t}\n\t\t\t// }, \n\t\t\tvalue: {\n\t\t\t\timmediate: true,\n\t\t\t\thandler(val) {\n\t\t\t\t\t// 转为字符串\n\t\t\t\t\tval = String(val);\n\t\t\t\t\t// 超出部分截掉\n\t\t\t\t\tthis.valueModel = val.substring(0, this.maxlength);\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tvalueModel: \"\"\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\t// 是否显示呼吸灯效果\n\t\t\tanimationClass() {\n\t\t\t\treturn (index) => {\n\t\t\t\t\tif (this.breathe && this.charArr.length == index) return 'u-breathe';\n\t\t\t\t\telse return '';\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 用于显示字符\n\t\t\tcharArr() {\n\t\t\t\treturn this.valueModel.split('');\n\t\t\t},\n\t\t\tcharArrLength() {\n\t\t\t\treturn this.charArr.length;\n\t\t\t},\n\t\t\t// 根据长度，循环输入框的个数，因为头条小程序数值不能用于v-for\n\t\t\tloopCharArr() {\n\t\t\t\treturn new Array(this.maxlength);\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tgetVal(e) {\n\t\t\t\tlet {\n\t\t\t\t\tvalue\n\t\t\t\t} = e.detail\n\t\t\t\tthis.valueModel = value;\n\t\t\t\t// 判断长度是否超出了maxlength值，理论上不会发生，因为input组件设置了maxlength属性值\n\t\t\t\tif (String(value).length > this.maxlength) return;\n\t\t\t\t// 未达到maxlength之前，发送change事件，达到后发送finish事件\n\t\t\t\tthis.$emit('change', value);\n\t\t\t\tif (String(value).length == this.maxlength) {\n\t\t\t\t\tthis.$emit('finish', value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t@import \"../../libs/css/style.components.scss\";\n\n\t@keyframes breathe {\n\t\t0% {\n\t\t\topacity: 0.3;\n\t\t}\n\n\t\t50% {\n\t\t\topacity: 1;\n\t\t}\n\n\t\t100% {\n\t\t\topacity: 0.3;\n\t\t}\n\t}\n\n\t.u-char-box {\n\t\ttext-align: center;\n\t}\n\n\t.u-char-flex {\n\t\t@include vue-flex;\n\t\tjustify-content: center;\n\t\tflex-wrap: wrap;\n\t\tposition: relative;\n\t}\n\n\t.u-input {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: -100%;\n\t\twidth: 200%;\n\t\theight: 100%;\n\t\ttext-align: left;\n\t\tz-index: 9;\n\t\topacity: 0;\n\t\tbackground: none;\n\t}\n\n\t.u-char-item {\n\t\tposition: relative;\n\t\twidth: 90rpx;\n\t\theight: 90rpx;\n\t\tmargin: 10rpx 10rpx;\n\t\tfont-size: 60rpx;\n\t\tfont-weight: bold;\n\t\tcolor: $u-main-color;\n\t\tline-height: 90rpx;\n\t\t@include vue-flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t}\n\n\t.u-middle-line {\n\t\tborder: none;\n\t}\n\n\t.u-box {\n\t\tbox-sizing: border-box;\n\t\tborder: 2rpx solid #cccccc;\n\t\tborder-radius: 6rpx;\n\t}\n\n\t.u-box-active {\n\t\toverflow: hidden;\n\t\tanimation-timing-function: ease-in-out;\n\t\tanimation-duration: 1500ms;\n\t\tanimation-iteration-count: infinite;\n\t\tanimation-direction: alternate;\n\t\tborder: 2rpx solid $u-type-primary;\n\t}\n\n\t.u-middle-line-active {\n\t\tbackground: $u-type-primary;\n\t}\n\n\t.u-breathe {\n\t\tanimation: breathe 2s infinite ease;\n\t}\n\n\t.u-placeholder-line {\n\t\t/* #ifndef APP-NVUE */\n\t\tdisplay: none;\n\t\t/* #endif */\n\t\tposition: absolute;\n\t\tleft: 50%;\n\t\ttop: 50%;\n\t\ttransform: translate(-50%, -50%);\n\t\twidth: 2rpx;\n\t\theight: 40rpx;\n\t\tbackground: #333333;\n\t\tanimation: twinkling 1.5s infinite ease;\n\t}\n\n\t.u-animation-breathe {\n\t\tanimation-name: breathe;\n\t}\n\n\t.u-dot {\n\t\tfont-size: 34rpx;\n\t\tline-height: 34rpx;\n\t}\n\n\t.u-middle-line {\n\t\theight: 4px;\n\t\tbackground: #000000;\n\t\twidth: 80%;\n\t\tposition: absolute;\n\t\tborder-radius: 2px;\n\t\ttop: 50%;\n\t\tleft: 50%;\n\t\ttransform: translate(-50%, -50%);\n\t}\n\n\t.u-bottom-line-active {\n\t\tbackground: $u-type-primary;\n\t}\n\n\t.u-bottom-line {\n\t\theight: 4px;\n\t\tbackground: #000000;\n\t\twidth: 80%;\n\t\tposition: absolute;\n\t\tborder-radius: 2px;\n\t\tbottom: 0;\n\t\tleft: 50%;\n\t\ttransform: translate(-50%);\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-modal/u-modal.vue",
    "content": "<template>\n\t<view>\n\t\t<u-popup :zoom=\"zoom\" mode=\"center\" :popup=\"false\" :z-index=\"uZIndex\" v-model=\"value\" :length=\"width\"\n\t\t :mask-close-able=\"maskCloseAble\" :border-radius=\"borderRadius\" @close=\"popupClose\" :negative-top=\"negativeTop\">\n\t\t\t<view class=\"u-model\">\n\t\t\t\t<view v-if=\"showTitle\" class=\"u-model__title u-line-1\" :style=\"[titleStyle]\">{{ title }}</view>\n\t\t\t\t<view class=\"u-model__content\">\n\t\t\t\t\t<view :style=\"[contentStyle]\" v-if=\"$slots.default  || $slots.$default\">\n\t\t\t\t\t\t<slot />\n\t\t\t\t\t</view>\n\t\t\t\t\t<view v-else class=\"u-model__content__message\" :style=\"[contentStyle]\">{{ content }}</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-model__footer u-border-top\" v-if=\"showCancelButton || showConfirmButton\">\n\t\t\t\t\t<view v-if=\"showCancelButton\" :hover-stay-time=\"100\" hover-class=\"u-model__btn--hover\" class=\"u-model__footer__button\"\n\t\t\t\t\t :style=\"[cancelBtnStyle]\" @tap=\"cancel\">\n\t\t\t\t\t\t{{cancelText}}\n\t\t\t\t\t</view>\n\t\t\t\t\t<view v-if=\"showConfirmButton || $slots['confirm-button']\" :hover-stay-time=\"100\" :hover-class=\"asyncClose ? 'none' : 'u-model__btn--hover'\"\n\t\t\t\t\t class=\"u-model__footer__button hairline-left\" :style=\"[confirmBtnStyle]\" @tap=\"confirm\">\n\t\t\t\t\t\t<slot v-if=\"$slots['confirm-button']\" name=\"confirm-button\"></slot>\n\t\t\t\t\t\t<block v-else>\n\t\t\t\t\t\t\t<u-loading mode=\"circle\" :color=\"confirmColor\" v-if=\"loading\"></u-loading>\n\t\t\t\t\t\t\t<block v-else>\n\t\t\t\t\t\t\t\t{{confirmText}}\n\t\t\t\t\t\t\t</block>\n\t\t\t\t\t\t</block>\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</u-popup>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * modal 模态框\n\t * @description 弹出模态框，常用于消息提示、消息确认、在当前页面内完成特定的交互操作\n\t * @tutorial https://www.uviewui.com/components/modal.html\n\t * @property {Boolean} value 是否显示模态框\n\t * @property {String | Number} z-index 层级\n\t * @property {String} title 模态框标题（默认\"提示\"）\n\t * @property {String | Number} width 模态框宽度（默认600）\n\t * @property {String} content 模态框内容（默认\"内容\"）\n\t * @property {Boolean} show-title 是否显示标题（默认true）\n\t * @property {Boolean} async-close 是否异步关闭，只对确定按钮有效（默认false）\n\t * @property {Boolean} show-confirm-button 是否显示确认按钮（默认true）\n\t * @property {String | Number} negative-top modal往上偏移的值\n\t * @property {Boolean} show-cancel-button 是否显示取消按钮（默认false）\n\t * @property {Boolean} mask-close-able 是否允许点击遮罩关闭modal（默认false）\n\t * @property {String} confirm-text 确认按钮的文字内容（默认\"确认\"）\n\t * @property {String} cancel-text 取消按钮的文字内容（默认\"取消\"）\n\t * @property {String} cancel-color 取消按钮的颜色（默认\"#606266\"）\n\t * @property {String} confirm-color 确认按钮的文字内容（默认\"#2979ff\"）\n\t * @property {String | Number} border-radius 模态框圆角值，单位rpx（默认16）\n\t * @property {Object} title-style 自定义标题样式，对象形式\n\t * @property {Object} content-style 自定义内容样式，对象形式\n\t * @property {Object} cancel-style 自定义取消按钮样式，对象形式\n\t * @property {Object} confirm-style 自定义确认按钮样式，对象形式\n\t * @property {Boolean} zoom 是否开启缩放模式（默认true）\n\t * @event {Function} confirm 确认按钮被点击\n\t * @event {Function} cancel 取消按钮被点击\n\t * @example <u-modal :src=\"title\" :content=\"content\"></u-modal>\n\t */\n\texport default {\n\t\tname: 'u-modal',\n\t\tprops: {\n\t\t\t// 是否显示Modal\n\t\t\tvalue: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 层级z-index\n\t\t\tzIndex: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 标题\n\t\t\ttitle: {\n\t\t\t\ttype: [String],\n\t\t\t\tdefault: '提示'\n\t\t\t},\n\t\t\t// 弹窗宽度，可以是数值(rpx)，百分比，auto等\n\t\t\twidth: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 600\n\t\t\t},\n\t\t\t// 弹窗内容\n\t\t\tcontent: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '内容'\n\t\t\t},\n\t\t\t// 是否显示标题\n\t\t\tshowTitle: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 是否显示确认按钮\n\t\t\tshowConfirmButton: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 是否显示取消按钮\n\t\t\tshowCancelButton: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 确认文案\n\t\t\tconfirmText: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '确认'\n\t\t\t},\n\t\t\t// 取消文案\n\t\t\tcancelText: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '取消'\n\t\t\t},\n\t\t\t// 确认按钮颜色\n\t\t\tconfirmColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#2979ff'\n\t\t\t},\n\t\t\t// 取消文字颜色\n\t\t\tcancelColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#606266'\n\t\t\t},\n\t\t\t// 圆角值\n\t\t\tborderRadius: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 16\n\t\t\t},\n\t\t\t// 标题的样式\n\t\t\ttitleStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 内容的样式\n\t\t\tcontentStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 取消按钮的样式\n\t\t\tcancelStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 确定按钮的样式\n\t\t\tconfirmStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 是否开启缩放效果\n\t\t\tzoom: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 是否异步关闭，只对确定按钮有效\n\t\t\tasyncClose: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 是否允许点击遮罩关闭modal\n\t\t\tmaskCloseAble: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 给一个负的margin-top，往上偏移，避免和键盘重合的情况\n\t\t\tnegativeTop: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 0\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tloading: false, // 确认按钮是否正在加载中\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tcancelBtnStyle() {\n\t\t\t\treturn Object.assign({\n\t\t\t\t\tcolor: this.cancelColor\n\t\t\t\t}, this.cancelStyle);\n\t\t\t},\n\t\t\tconfirmBtnStyle() {\n\t\t\t\treturn Object.assign({\n\t\t\t\t\tcolor: this.confirmColor\n\t\t\t\t}, this.confirmStyle);\n\t\t\t},\n\t\t\tuZIndex() {\n\t\t\t\treturn this.zIndex ? this.zIndex : this.$u.zIndex.popup;\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\t// 如果是异步关闭时，外部修改v-model的值为false时，重置内部的loading状态\n\t\t\t// 避免下次打开的时候，状态混乱\n\t\t\tvalue(n) {\n\t\t\t\tif (n === true) this.loading = false;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tconfirm() {\n\t\t\t\t// 异步关闭\n\t\t\t\tif (this.asyncClose) {\n\t\t\t\t\tthis.loading = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.$emit('input', false);\n\t\t\t\t}\n\t\t\t\tthis.$emit('confirm');\n\t\t\t},\n\t\t\tcancel() {\n\t\t\t\tthis.$emit('cancel');\n\t\t\t\tthis.$emit('input', false);\n\t\t\t\t// 目前popup弹窗关闭有一个延时操作，此处做一个延时\n\t\t\t\t// 避免确认按钮文字变成了\"确定\"字样，modal还没消失，造成视觉不好的效果\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t}, 300);\n\t\t\t},\n\t\t\t// 点击遮罩关闭modal，设置v-model的值为false，否则无法第二次弹起modal\n\t\t\tpopupClose() {\n\t\t\t\tthis.$emit('input', false);\n\t\t\t},\n\t\t\t// 清除加载中的状态\n\t\t\tclearLoading() {\n\t\t\t\tthis.loading = false;\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\n\t.u-model {\n\t\theight: auto;\n\t\toverflow: hidden;\n\t\tfont-size: 32rpx;\n\t\tbackground-color: #fff;\n\n\t\t&__btn--hover {\n\t\t\tbackground-color: rgb(230, 230, 230);\n\t\t}\n\n\t\t&__title {\n\t\t\tpadding-top: 48rpx;\n\t\t\tfont-weight: 500;\n\t\t\ttext-align: center;\n\t\t\tcolor: $u-main-color;\n\t\t}\n\n\t\t&__content {\n\t\t\t&__message {\n\t\t\t\tpadding: 48rpx;\n\t\t\t\tfont-size: 30rpx;\n\t\t\t\ttext-align: center;\n\t\t\t\tcolor: $u-content-color;\n\t\t\t}\n\t\t}\n\n\t\t&__footer {\n\t\t\t@include vue-flex;\n\n\t\t\t&__button {\n\t\t\t\tflex: 1;\n\t\t\t\theight: 100rpx;\n\t\t\t\tline-height: 100rpx;\n\t\t\t\tfont-size: 32rpx;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tcursor: pointer;\n\t\t\t\ttext-align: center;\n\t\t\t\tborder-radius: 4rpx;\n\t\t\t}\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-navbar/u-navbar.vue",
    "content": "<template>\n\t<view class=\"\">\n\t\t<view class=\"u-navbar\" :style=\"[navbarStyle]\" :class=\"{ 'u-navbar-fixed': isFixed, 'u-border-bottom': borderBottom }\">\n\t\t\t<view class=\"u-status-bar\" :style=\"{ height: statusBarHeight + 'px' }\"></view>\n\t\t\t<view class=\"u-navbar-inner\" :style=\"[navbarInnerStyle]\">\n\t\t\t\t<view class=\"u-back-wrap\" v-if=\"isBack\" @tap=\"goBack\">\n\t\t\t\t\t<view class=\"u-icon-wrap\">\n\t\t\t\t\t\t<u-icon :name=\"backIconName\" :color=\"backIconColor\" :size=\"backIconSize\"></u-icon>\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"u-icon-wrap u-back-text u-line-1\" v-if=\"backText\" :style=\"[backTextStyle]\">{{ backText }}</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-navbar-content-title\" v-if=\"title\" :style=\"[titleStyle]\">\n\t\t\t\t\t<view\n\t\t\t\t\t    class=\"u-title u-line-1\"\n\t\t\t\t\t    :style=\"{\n\t\t\t\t\t\t\tcolor: titleColor,\n\t\t\t\t\t\t\tfontSize: titleSize + 'rpx',\n\t\t\t\t\t\t\tfontWeight: titleBold ? 'bold' : 'normal'\n\t\t\t\t\t\t}\">\n\t\t\t\t\t\t{{ title }}\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-slot-content\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-slot-right\">\n\t\t\t\t\t<slot name=\"right\"></slot>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t\t<!-- 解决fixed定位后导航栏塌陷的问题 -->\n\t\t<view class=\"u-navbar-placeholder\" v-if=\"isFixed && !immersive\" :style=\"{ width: '100%', height: Number(navbarHeight) + statusBarHeight + 'px' }\"></view>\n\t</view>\n</template>\n\n<script>\n\t// 获取系统状态栏的高度\n\tlet systemInfo = uni.getSystemInfoSync();\n\tlet menuButtonInfo = {};\n\t// 如果是小程序，获取右上角胶囊的尺寸信息，避免导航栏右侧内容与胶囊重叠(支付宝小程序非本API，尚未兼容)\n\t// #ifdef MP-WEIXIN || MP-BAIDU || MP-TOUTIAO || MP-QQ\n\tmenuButtonInfo = uni.getMenuButtonBoundingClientRect();\n\t// #endif\n\t/**\n\t * navbar 自定义导航栏\n\t * @description 此组件一般用于在特殊情况下，需要自定义导航栏的时候用到，一般建议使用uniapp自带的导航栏。\n\t * @tutorial https://www.uviewui.com/components/navbar.html\n\t * @property {String Number} height 导航栏高度(不包括状态栏高度在内，内部自动加上)，注意这里的单位是px（默认44）\n\t * @property {String} back-icon-color 左边返回图标的颜色（默认#606266）\n\t * @property {String} back-icon-name 左边返回图标的名称，只能为uView自带的图标（默认arrow-left）\n\t * @property {String Number} back-icon-size 左边返回图标的大小，单位rpx（默认30）\n\t * @property {String} back-text 返回图标右边的辅助提示文字\n\t * @property {Object} back-text-style 返回图标右边的辅助提示文字的样式，对象形式（默认{ color: '#606266' }）\n\t * @property {String} title 导航栏标题，如设置为空字符，将会隐藏标题占位区域\n\t * @property {String Number} title-width 导航栏标题的最大宽度，内容超出会以省略号隐藏，单位rpx（默认250）\n\t * @property {String} title-color 标题的颜色（默认#606266）\n\t * @property {String Number} title-size 导航栏标题字体大小，单位rpx（默认32）\n\t * @property {Function} custom-back 自定义返回逻辑方法\n\t * @property {String Number} z-index 固定在顶部时的z-index值（默认980）\n\t * @property {Boolean} is-back 是否显示导航栏左边返回图标和辅助文字（默认true）\n\t * @property {Object} background 导航栏背景设置，见官网说明（默认{ background: '#ffffff' }）\n\t * @property {Boolean} is-fixed 导航栏是否固定在顶部（默认true）\n\t * @property {Boolean} immersive 沉浸式，允许fixed定位后导航栏塌陷，仅fixed定位下生效（默认false）\n\t * @property {Boolean} border-bottom 导航栏底部是否显示下边框，如定义了较深的背景颜色，可取消此值（默认true）\n\t * @example <u-navbar back-text=\"返回\" title=\"剑未配妥，出门已是江湖\"></u-navbar>\n\t */\n\texport default {\n\t\tname: \"u-navbar\",\n\t\tprops: {\n\t\t\t// 导航栏高度，单位px，非rpx\n\t\t\theight: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 返回箭头的颜色\n\t\t\tbackIconColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#606266'\n\t\t\t},\n\t\t\t// 左边返回的图标\n\t\t\tbackIconName: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'nav-back'\n\t\t\t},\n\t\t\t// 左边返回图标的大小，rpx\n\t\t\tbackIconSize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: '44'\n\t\t\t},\n\t\t\t// 返回的文字提示\n\t\t\tbackText: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 返回的文字的 样式\n\t\t\tbackTextStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcolor: '#606266'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 导航栏标题\n\t\t\ttitle: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 标题的宽度，如果需要自定义右侧内容，且右侧内容很多时，可能需要减少这个宽度，单位rpx\n\t\t\ttitleWidth: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: '250'\n\t\t\t},\n\t\t\t// 标题的颜色\n\t\t\ttitleColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#606266'\n\t\t\t},\n\t\t\t// 标题字体是否加粗\n\t\t\ttitleBold: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 标题的字体大小\n\t\t\ttitleSize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 32\n\t\t\t},\n\t\t\tisBack: {\n\t\t\t\ttype: [Boolean, String],\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 对象形式，因为用户可能定义一个纯色，或者线性渐变的颜色\n\t\t\tbackground: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tbackground: '#ffffff'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 导航栏是否固定在顶部\n\t\t\tisFixed: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 是否沉浸式，允许fixed定位后导航栏塌陷，仅fixed定位下生效\n\t\t\timmersive: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 是否显示导航栏的下边框\n\t\t\tborderBottom: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\tzIndex: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 自定义返回逻辑\n\t\t\tcustomBack: {\n\t\t\t\ttype: Function,\n\t\t\t\tdefault: null\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tmenuButtonInfo: menuButtonInfo,\n\t\t\t\tstatusBarHeight: systemInfo.statusBarHeight\n\t\t\t};\n\t\t},\n\t\tcomputed: {\n\t\t\t// 导航栏内部盒子的样式\n\t\t\tnavbarInnerStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\t// 导航栏宽度，如果在小程序下，导航栏宽度为胶囊的左边到屏幕左边的距离\n\t\t\t\tstyle.height = this.navbarHeight + 'px';\n\t\t\t\t// // 如果是各家小程序，导航栏内部的宽度需要减少右边胶囊的宽度\n\t\t\t\t// #ifdef MP\n\t\t\t\tlet rightButtonWidth = systemInfo.windowWidth - menuButtonInfo.left;\n\t\t\t\tstyle.marginRight = rightButtonWidth + 'px';\n\t\t\t\t// #endif\n\t\t\t\treturn style;\n\t\t\t},\n\t\t\t// 整个导航栏的样式\n\t\t\tnavbarStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\tstyle.zIndex = this.zIndex ? this.zIndex : this.$u.zIndex.navbar;\n\t\t\t\t// 合并用户传递的背景色对象\n\t\t\t\tObject.assign(style, this.background);\n\t\t\t\treturn style;\n\t\t\t},\n\t\t\t// 导航中间的标题的样式\n\t\t\ttitleStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\t// #ifndef MP\n\t\t\t\tstyle.left = (systemInfo.windowWidth - uni.upx2px(this.titleWidth)) / 2 + 'px';\n\t\t\t\tstyle.right = (systemInfo.windowWidth - uni.upx2px(this.titleWidth)) / 2 + 'px';\n\t\t\t\t// #endif\n\t\t\t\t// #ifdef MP\n\t\t\t\t// 此处是为了让标题显示区域即使在小程序有右侧胶囊的情况下也能处于屏幕的中间，是通过绝对定位实现的\n\t\t\t\tlet rightButtonWidth = systemInfo.windowWidth - menuButtonInfo.left;\n\t\t\t\tstyle.left = (systemInfo.windowWidth - uni.upx2px(this.titleWidth)) / 2 + 'px';\n\t\t\t\tstyle.right = rightButtonWidth - (systemInfo.windowWidth - uni.upx2px(this.titleWidth)) / 2 + rightButtonWidth +\n\t\t\t\t\t'px';\n\t\t\t\t// #endif\n\t\t\t\tstyle.width = uni.upx2px(this.titleWidth) + 'px';\n\t\t\t\treturn style;\n\t\t\t},\n\t\t\t// 转换字符数值为真正的数值\n\t\t\tnavbarHeight() {\n\t\t\t\t// #ifdef APP-PLUS || H5\n\t\t\t\treturn this.height ? this.height : 44;\n\t\t\t\t// #endif\n\t\t\t\t// #ifdef MP\n\t\t\t\t// 小程序特别处理，让导航栏高度 = 胶囊高度 + 两倍胶囊顶部与状态栏底部的距离之差(相当于同时获得了导航栏底部与胶囊底部的距离)\n\t\t\t\t// 此方法有缺陷，暂不用(会导致少了几个px)，采用直接固定值的方式\n\t\t\t\t// return menuButtonInfo.height + (menuButtonInfo.top - this.statusBarHeight) * 2;//导航高度\n\t\t\t\tlet height = systemInfo.platform == 'ios' ? 44 : 48;\n\t\t\t\treturn this.height ? this.height : height;\n\t\t\t\t// #endif\n\t\t\t}\n\t\t},\n\t\tcreated() {},\n\t\tmethods: {\n\t\t\tgoBack() {\n\t\t\t\t// 如果自定义了点击返回按钮的函数，则执行，否则执行返回逻辑\n\t\t\t\tif (typeof this.customBack === 'function') {\n\t\t\t\t\t// 在微信，支付宝等环境(H5正常)，会导致父组件定义的customBack()函数体中的this变成子组件的this\n\t\t\t\t\t// 通过bind()方法，绑定父组件的this，让this.customBack()的this为父组件的上下文\n\t\t\t\t\tthis.customBack.bind(this.$u.$parent.call(this))();\n\t\t\t\t} else {\n\t\t\t\t\tuni.navigateBack();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style scoped lang=\"scss\">\n\t@import \"../../libs/css/style.components.scss\";\n\n\t.u-navbar {\n\t\twidth: 100%;\n\t}\n\n\t.u-navbar-fixed {\n\t\tposition: fixed;\n\t\tleft: 0;\n\t\tright: 0;\n\t\ttop: 0;\n\t\tz-index: 991;\n\t}\n\n\t.u-status-bar {\n\t\twidth: 100%;\n\t}\n\n\t.u-navbar-inner {\n\t\t@include vue-flex;\n\t\tjustify-content: space-between;\n\t\tposition: relative;\n\t\talign-items: center;\n\t}\n\n\t.u-back-wrap {\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tflex: 1;\n\t\tflex-grow: 0;\n\t\tpadding: 14rpx 14rpx 14rpx 24rpx;\n\t}\n\n\t.u-back-text {\n\t\tpadding-left: 4rpx;\n\t\tfont-size: 30rpx;\n\t}\n\n\t.u-navbar-content-title {\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tflex: 1;\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\theight: 60rpx;\n\t\ttext-align: center;\n\t\tflex-shrink: 0;\n\t}\n\n\t.u-navbar-centent-slot {\n\t\tflex: 1;\n\t}\n\n\t.u-title {\n\t\tline-height: 60rpx;\n\t\tfont-size: 32rpx;\n\t\tflex: 1;\n\t}\n\n\t.u-navbar-right {\n\t\tflex: 1;\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tjustify-content: flex-end;\n\t}\n\n\t.u-slot-content {\n\t\tflex: 1;\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-no-network/u-no-network.vue",
    "content": "<template>\n\t<view class=\"u-no-network\" v-if=\"!isConnected\" :style=\"{'z-index': uZIndex}\" @touchmove.stop.prevent=\"() => {}\">\n\t\t<view class=\"u-inner\">\n\t\t\t<image class=\"u-error-icon\" :src=\"image\" mode=\"widthFix\"></image>\n\t\t\t<view class=\"u-tips\">\n\t\t\t\t{{tips}}\n\t\t\t</view>\n\t\t\t<!-- 只有APP平台，才能跳转设置页，因为需要调用plus环境 -->\n\t\t\t<!-- #ifdef APP-PLUS -->\n\t\t\t<view class=\"u-to-setting\">\n\t\t\t\t请检查网络，或前往<text class=\"u-setting-btn\" @tap=\"openSettings\">设置</text>\n\t\t\t</view>\n\t\t\t<!-- #endif -->\n\t\t\t<view class=\"u-retry\" :hover-stay-time=\"150\" @tap=\"retry\" hover-class=\"u-retry-hover\">\n\t\t\t\t重试\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * noNetwork 无网络提示\n\t * @description 该组件无需任何配置，引入即可，内部自动处理所有功能和事件。\n\t * @tutorial https://www.uviewui.com/components/noNetwork.html\n\t * @property {String} tips 没有网络时的提示语（默认哎呀，网络信号丢失）\n\t * @property {String Number} zIndex 组件的z-index值（默认1080）\n\t * @property {String} image 无网络的图片提示，可用的src地址或base64图片\n\t * @event {Function} retry 用户点击页面的\"重试\"按钮时触发\n\t * @example <u-no-network></u-no-network>\n\t */\n\texport default {\n\t\tname: \"u-no-network\",\n\t\tprops: {\n\t\t\t// 页面文字提示\n\t\t\ttips: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '哎呀，网络信号丢失'\n\t\t\t},\n\t\t\t// 一个z-index值，用于设置没有网络这个组件的层次，因为页面可能会有其他定位的元素层级过高，导致此组件被覆盖\n\t\t\tzIndex: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// image 没有网络的图片提示\n\t\t\timage: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAEYCAMAAABFglBLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M0U3MjVFMzQwNEY1MTFFQUE4MTNDOUEzMTVBREMxQjIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6M0U3MjVFMzUwNEY1MTFFQUE4MTNDOUEzMTVBREMxQjIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozRTcyNUUzMjA0RjUxMUVBQTgxM0M5QTMxNUFEQzFCMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozRTcyNUUzMzA0RjUxMUVBQTgxM0M5QTMxNUFEQzFCMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkHIU9QAAAMAUExURdHW2OWiou7u7tve4dnc3/vw8N3g4sPCwvjn5+jo6M7Q0u6+vtyEhPXY2Li+wuikpPXW1uXo6dba3Pbg4Na5u+qurqqyt/HJydjb3fjo6LrAxO7Bwey1td6MjOrs7fbc3OTn6Maytf7+/vz19eqqqrzCxvzz87a8wLO6vuqxsf78/PDFxenr7L/FyNTY26+2u/z09MjMzqy0udnZ2dvb27G4vMjN0O7v8P339+Ll5u3v8NDS1ODj5frt7bC3vP76+u24uOKamtTW2MTIy9zc3N7e3vPQ0OCTk8DGyfDDw9LR0c7S1LussNbY2fPOztLU1cLHyrK6vvji4vrv78bKzPX29/np6crP0vjk5Ozu78bLzuepqczR1MHFyMDEyOq1tfTS0vP09cLIy9DU173Ex8bGxvHy88/U18vO0LK4vM7OzsTKzcPJzPLMzM/T1sbMz8HJy+7FxbW8wNTW18XKzvb3+MjLzczP0d3e3+Dh4r3Dxtna29zd3rK5vdPU1cfM0Prq6uOenuPm58HGyfHz8/ro6Lq/w8nO0bzCxcrKytjZ2uXm5vTU1LvBxbW7v+rp6eefn/39/eLi4u3t7Ozs7Pj4+Pr6+vX19fHx8erq6vPz8+Xl5ff39+fn5/v7+/z8/PLx8fX09Pb29ri4uOTk5PHw8OPj4/Py8ubm5vn5+e3s7Pb19fTz8/f29tfX1+7t7cvQ0+zr6/Ly8u3t7fr5+efm5quzuOvq6vT19uvr6/j5+a61uuy6uvb39/T09Ojn5+jq6621uvn6+t/i5KyzuPn4+Le+wvv6+s3S1fj4+fDw8OHk5vv7/Pr7++Xk5LS7v7y8vObl5fz9/ff4+OTj48DEx8XJy+Hk5euysu/x8re9wfn5+v38/Pv8/Pr6++vt7uLi4+Pi4ubl5uXk5dPV1tbV1fHMzNPX2e7u7ejn6PT19fX19PDw7/b29f39/vnr6+Hh4a+3u+7t7q61uePi48PHyf35+enp6fLz9PPz8qmxtuDg4N/f3/Dv7////////1cfN/UAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAlqElEQVR42uydCXwUVZrAk5CEJBAQshACCGyjIRwBJR0It6JBGZZBkRtm5PBgFXAXHBghqAMz6LjGTrd9n7lvwn0JQhARxYNxVJTMwcwOM+7uzK6Z3VXcrnTXVr2q6q7urrvfq26c+n4egXTSVfXv993veym4JkklKdoj0IBoogHRgGiiAdGAaKIB0YBoogHRgGiiAdFEA6IBUVuwx+vqet/v1YAkhxwmcNT9gvjnsAYkGcT7eN1TtThe+1TdL2o1IEkg+rrvUV90MF9oQBIqv6ijF4a3d51XA5J4jVVXx3z587ojGpDEm/QwkO9pQJJB2CvksAYk8fJUXT31xZG63ppRTwI5QgcgR35Rd1MDkgxSX1f31P33P1V3i3u936HUyc3edWSsjuEakKRRW3r9kVv+JrRsrwbklpKTnXs+z0wfONOtAUm8rJu55oqfkZ0TOzUgCZS3Zh7s54+S5RqQhNGYMsnPISkakCSiQcjkNzUgasvUDaVsBF1fb9GXd//B0ziliPzjEA2IujLqGRaMST+cawgLNpn4q30aEDV1Va+dYRqzNy00RMoYUmdpQNTzcb8sCtuKH8w9Z4iWLuIbVzQgapmOBedDOO6c0WjgENK2vKwBUUUmvBSiUbrqxwZuOU18d5MGhEe/dI6a2WvIxA0HX1hfvH7V8gUpA9Mz3x/VuVTRLxvwdAhH5aJjBj4hv39QAxIl743ITHm6azBPnOCfVLwlc6pR3upYFbLjvIuDlEUqRYZo38JYS4gVt5rNZhMQO46byksoMeG4w8QIjtvMpJA/wP1EdZ0bKvkitkh555mBA3zSLnBlSFnNnlJvEJJ95ItW3pJAamvtZhy3m/T0g7fhthJGiG+EviYgmEJ/wHFP6GsbnlZSoicoucxmGwHVguPTBz543C9LHky/Jnql1w5KxWGo8KsThsAFYneYMOb5mlnP11ZCrwOPjfgGI8RqsZuZtUOsFmbllFhZP+zEbc8vGcqzMibv7qos3rd7Mg+TrQv2vCVkiLYc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\"\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tisConnected: true, // 是否有网络连接\n\t\t\t\tnetworkType: \"none\", // 网络类型\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tuZIndex() {\n\t\t\t\treturn this.zIndex ? this.zIndex : this.$u.zIndex.noNetwork;\n\t\t\t}\n\t\t},\n\t\tmounted() {\n\t\t\tthis.isIOS = (uni.getSystemInfoSync().platform === 'ios');\n\t\t\tuni.onNetworkStatusChange((res) => {\n\t\t\t\tthis.isConnected = res.isConnected;\n\t\t\t\tthis.networkType = res.networkType;\n\t\t\t});\n\t\t\tuni.getNetworkType({\n\t\t\t\tsuccess: (res) => {\n\t\t\t\t\tthis.networkType = res.networkType;\n\t\t\t\t\tif (res.networkType == 'none') {\n\t\t\t\t\t\tthis.isConnected = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.isConnected = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tmethods: {\n\t\t\tretry() {\n\t\t\t\t// 重新检查网络\n\t\t\t\tuni.getNetworkType({\n\t\t\t\t\tsuccess: (res) => {\n\t\t\t\t\t\tthis.networkType = res.networkType;\n\t\t\t\t\t\tif (res.networkType == 'none') {\n\t\t\t\t\t\t\tuni.showToast({\n\t\t\t\t\t\t\t\ttitle: '无网络连接',\n\t\t\t\t\t\t\t\ticon: 'none',\n\t\t\t\t\t\t\t\tposition: 'top'\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tthis.isConnected = false;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tuni.showToast({\n\t\t\t\t\t\t\t\ttitle: '网络已连接',\n\t\t\t\t\t\t\t\ticon: 'none',\n\t\t\t\t\t\t\t\tposition: 'top'\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tthis.isConnected = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tthis.$emit('retry');\n\t\t\t},\n\t\t\tasync openSettings() {\n\t\t\t\tif (this.networkType == \"none\") {\n\t\t\t\t\tthis.openSystemSettings();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t},\n\t\t\topenAppSettings() {\n\t\t\t\tthis.gotoAppSetting();\n\t\t\t},\n\t\t\topenSystemSettings() {\n\t\t\t\t// 以下方法来自5+范畴，如需深究，请自行查阅相关文档\n\t\t\t\t// https://ask.dcloud.net.cn/docs/\n\t\t\t\tif (this.isIOS) {\n\t\t\t\t\tthis.gotoiOSSetting();\n\t\t\t\t} else {\n\t\t\t\t\tthis.gotoAndroidSetting();\n\t\t\t\t}\n\t\t\t},\n\t\t\tnetwork() {\n\t\t\t\tvar result = null;\n\t\t\t\tvar cellularData = plus.ios.newObject(\"CTCellularData\");\n\t\t\t\tvar state = cellularData.plusGetAttribute(\"restrictedState\");\n\t\t\t\tif (state == 0) {\n\t\t\t\t\tresult = null;\n\t\t\t\t} else if (state == 2) {\n\t\t\t\t\tresult = 1;\n\t\t\t\t} else if (state == 1) {\n\t\t\t\t\tresult = 2;\n\t\t\t\t}\n\t\t\t\tplus.ios.deleteObject(cellularData);\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tgotoAppSetting() {\n\t\t\t\tif (this.isIOS) {\n\t\t\t\t\tvar UIApplication = plus.ios.import(\"UIApplication\");\n\t\t\t\t\tvar application2 = UIApplication.sharedApplication();\n\t\t\t\t\tvar NSURL2 = plus.ios.import(\"NSURL\");\n\t\t\t\t\tvar setting2 = NSURL2.URLWithString(\"app-settings:\");\n\t\t\t\t\tapplication2.openURL(setting2);\n\t\t\t\t\tplus.ios.deleteObject(setting2);\n\t\t\t\t\tplus.ios.deleteObject(NSURL2);\n\t\t\t\t\tplus.ios.deleteObject(application2);\n\t\t\t\t} else {\n\t\t\t\t\tvar Intent = plus.android.importClass(\"android.content.Intent\");\n\t\t\t\t\tvar Settings = plus.android.importClass(\"android.provider.Settings\");\n\t\t\t\t\tvar Uri = plus.android.importClass(\"android.net.Uri\");\n\t\t\t\t\tvar mainActivity = plus.android.runtimeMainActivity();\n\t\t\t\t\tvar intent = new Intent();\n\t\t\t\t\tintent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);\n\t\t\t\t\tvar uri = Uri.fromParts(\"package\", mainActivity.getPackageName(), null);\n\t\t\t\t\tintent.setData(uri);\n\t\t\t\t\tmainActivity.startActivity(intent);\n\t\t\t\t}\n\t\t\t},\n\t\t\tgotoiOSSetting() {\n\t\t\t\tvar UIApplication = plus.ios.import(\"UIApplication\");\n\t\t\t\tvar application2 = UIApplication.sharedApplication();\n\t\t\t\tvar NSURL2 = plus.ios.import(\"NSURL\");\n\t\t\t\tvar setting2 = NSURL2.URLWithString(\"App-prefs:root=General\");\n\t\t\t\tapplication2.openURL(setting2);\n\t\t\t\tplus.ios.deleteObject(setting2);\n\t\t\t\tplus.ios.deleteObject(NSURL2);\n\t\t\t\tplus.ios.deleteObject(application2);\n\t\t\t},\n\t\t\tgotoAndroidSetting() {\n\t\t\t\tvar Intent = plus.android.importClass(\"android.content.Intent\");\n\t\t\t\tvar Settings = plus.android.importClass(\"android.provider.Settings\");\n\t\t\t\tvar mainActivity = plus.android.runtimeMainActivity();\n\t\t\t\tvar intent = new Intent(Settings.ACTION_SETTINGS);\n\t\t\t\tmainActivity.startActivity(intent);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-no-network {\n\t\tbackground-color: #fff;\n\t\tposition: fixed;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tright: 0;\n\t\tbottom: 0;\n\t}\n\n\t.u-inner {\n\t\theight: 100vh;\n\t\t@include vue-flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tmargin-top: -15%;\n\t}\n\n\t.u-tips {\n\t\tcolor: $u-tips-color;\n\t\tfont-size: 28rpx;\n\t\tpadding: 30rpx 0;\n\t}\n\n\t.u-error-icon {\n\t\twidth: 300rpx;\n\t}\n\n\t.u-to-setting {\n\t\tcolor: $u-light-color;\n\t\tfont-size: 26rpx;\n\t}\n\n\t.u-setting-btn {\n\t\tfont-size: 26rpx;\n\t\tcolor: $u-type-primary;\n\t}\n\n\t.u-retry {\n\t\tmargin-top: 30rpx;\n\t\tborder: 1px solid $u-tips-color;\n\t\tcolor: $u-tips-color;\n\t\tfont-size: 28rpx;\n\t\tpadding: 6rpx 30rpx;\n\t\tborder-radius: 3px;\n\t}\n\n\t.u-retry-hover {\n\t\tcolor: #fff;\n\t\tbackground-color: $u-tips-color;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-notice-bar/u-notice-bar.vue",
    "content": "<template>\n\t<view class=\"u-notice-bar-wrap\" v-if=\"isShow\" :style=\"{\n\t\tborderRadius: borderRadius + 'rpx',\n\t}\">\n\t\t<block v-if=\"mode == 'horizontal' && isCircular\">\n\t\t\t<u-row-notice\n\t\t\t\t:type=\"type\"\n\t\t\t\t:color=\"color\"\n\t\t\t\t:bgColor=\"bgColor\"\n\t\t\t\t:list=\"list\"\n\t\t\t\t:volumeIcon=\"volumeIcon\"\n\t\t\t\t:moreIcon=\"moreIcon\"\n\t\t\t\t:volumeSize=\"volumeSize\"\n\t\t\t\t:closeIcon=\"closeIcon\"\n\t\t\t\t:mode=\"mode\"\n\t\t\t\t:fontSize=\"fontSize\"\n\t\t\t\t:speed=\"speed\"\n\t\t\t\t:playState=\"playState\"\n\t\t\t\t:padding=\"padding\"\n\t\t\t\t@getMore=\"getMore\"\n\t\t\t\t@close=\"close\"\n\t\t\t\t@click=\"click\"\n\t\t\t></u-row-notice>\n\t\t</block>\n\t\t<block v-if=\"mode == 'vertical' || (mode == 'horizontal' && !isCircular)\">\n\t\t\t<u-column-notice\n\t\t\t\t:type=\"type\"\n\t\t\t\t:color=\"color\"\n\t\t\t\t:bgColor=\"bgColor\"\n\t\t\t\t:list=\"list\"\n\t\t\t\t:volumeIcon=\"volumeIcon\"\n\t\t\t\t:moreIcon=\"moreIcon\"\n\t\t\t\t:closeIcon=\"closeIcon\"\n\t\t\t\t:mode=\"mode\"\n\t\t\t\t:volumeSize=\"volumeSize\"\n\t\t\t\t:disable-touch=\"disableTouch\"\n\t\t\t\t:fontSize=\"fontSize\"\n\t\t\t\t:duration=\"duration\"\n\t\t\t\t:playState=\"playState\"\n\t\t\t\t:padding=\"padding\"\n\t\t\t\t@getMore=\"getMore\"\n\t\t\t\t@close=\"close\"\n\t\t\t\t@click=\"click\"\n\t\t\t\t@end=\"end\"\n\t\t\t></u-column-notice>\n\t\t</block>\n\t</view>\n</template>\n<script>\n/**\n * noticeBar 滚动通知\n * @description 该组件用于滚动通告场景，有多种模式可供选择\n * @tutorial https://www.uviewui.com/components/noticeBar.html\n * @property {Array} list 滚动内容，数组形式，见上方说明\n * @property {String} type 显示的主题（默认warning）\n * @property {Boolean} volume-icon 是否显示小喇叭图标（默认true）\n * @property {Boolean} more-icon 是否显示右边的向右箭头（默认false）\n * @property {Boolean} close-icon 是否显示关闭图标（默认false）\n * @property {Boolean} autoplay 是否自动播放（默认true）\n * @property {String} color 文字颜色\n * @property {String Number} bg-color 背景颜色\n * @property {String} mode 滚动模式（默认horizontal）\n * @property {Boolean} show 是否显示（默认true）\n * @property {String Number} font-size 字体大小，单位rpx（默认28）\n * @property {String Number} volume-size 左边喇叭的大小（默认34）\n * @property {String Number} duration 滚动周期时长，只对步进模式有效，横向衔接模式无效，单位ms（默认2000）\n * @property {String Number} speed 水平滚动时的滚动速度，即每秒移动多少距离，只对水平衔接方式有效，单位rpx（默认160）\n * @property {String Number} font-size 字体大小，单位rpx（默认28）\n * @property {Boolean} is-circular mode为horizontal时，指明是否水平衔接滚动（默认true）\n * @property {String} play-state 播放状态，play - 播放，paused - 暂停（默认play）\n * @property {String Number} border-radius 通知栏圆角（默认为0）\n * @property {String Number} padding 内边距，字符串，与普通的内边距css写法一直（默认\"18rpx 24rpx\"）\n * @property {Boolean} no-list-hidden 列表为空时，是否显示组件（默认false）\n * @property {Boolean} disable-touch 是否禁止通过手动滑动切换通知，只有mode = vertical，或者mode = horizontal且is-circular = false时有效（默认true）\n * @event {Function} click 点击通告文字触发，只有mode = vertical，或者mode = horizontal且is-circular = false时有效\n * @event {Function} close 点击右侧关闭图标触发\n * @event {Function} getMore 点击右侧向右图标触发\n * @event {Function} end 列表的消息每次被播放一个周期时触发，只有mode = vertical，或者mode = horizontal且is-circular = false时有效\n * @example <u-notice-bar :more-icon=\"true\" :list=\"list\"></u-notice-bar>\n */\nexport default {\n\tname: \"u-notice-bar\",\n\tprops: {\n\t\t// 显示的内容，数组\n\t\tlist: {\n\t\t\ttype: Array,\n\t\t\tdefault() {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\t\t// 显示的主题，success|error|primary|info|warning\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tdefault: 'warning'\n\t\t},\n\t\t// 是否显示左侧的音量图标\n\t\tvolumeIcon: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 音量喇叭的大小\n\t\tvolumeSize: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 34\n\t\t},\n\t\t// 是否显示右侧的右箭头图标\n\t\tmoreIcon: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 是否显示右侧的关闭图标\n\t\tcloseIcon: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 是否自动播放\n\t\tautoplay: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 文字颜色，各图标也会使用文字颜色\n\t\tcolor: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 背景颜色\n\t\tbgColor: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 滚动方向，horizontal-水平滚动，vertical-垂直滚动\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\tdefault: 'horizontal'\n\t\t},\n\t\t// 是否显示\n\t\tshow: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 字体大小，单位rpx\n\t\tfontSize: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 28\n\t\t},\n\t\t// 滚动一个周期的时间长，单位ms\n\t\tduration: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 2000\n\t\t},\n\t\t// 水平滚动时的滚动速度，即每秒滚动多少rpx，这有利于控制文字无论多少时，都能有一个恒定的速度\n\t\tspeed: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 160\n\t\t},\n\t\t// 水平滚动时，是否采用衔接形式滚动\n\t\t// 水平衔接模式，采用的是swiper组件，水平滚动\n\t\tisCircular: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 播放状态，play-播放，paused-暂停\n\t\tplayState: {\n\t\t\ttype: String,\n\t\t\tdefault: 'play'\n\t\t},\n\t\t// 是否禁止用手滑动切换\n\t\t// 目前HX2.6.11，只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序\n\t\tdisableTouch: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 滚动通知设置圆角\n\t\tborderRadius: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 0\n\t\t},\n\t\t// 通知的边距\n\t\tpadding: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: '18rpx 24rpx'\n\t\t},\n\t\t// list列表为空时，是否显示组件\n\t\tnoListHidden: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t}\n\t},\n\tcomputed: {\n\t\t// 如果设置show为false，或者设置了noListHidden为true，且list长度又为零的话，隐藏组件\n\t\tisShow() {\n\t\t\tif(this.show == false || (this.noListHidden == true && this.list.length == 0)) return false;\n\t\t\telse return true;\n\t\t}\n\t},\n\tmethods: {\n\t\t// 点击通告栏\n\t\tclick(index) {\n\t\t\tthis.$emit('click', index);\n\t\t},\n\t\t// 点击关闭按钮\n\t\tclose() {\n\t\t\tthis.$emit('close');\n\t\t},\n\t\t// 点击更多箭头按钮\n\t\tgetMore() {\n\t\t\tthis.$emit('getMore');\n\t\t},\n\t\t// 滚动一个周期结束，只对垂直，或者水平步进形式有效\n\t\tend() {\n\t\t\tthis.$emit('end');\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../libs/css/style.components.scss\";\n\n.u-notice-bar-wrap {\n\toverflow: hidden;\n}\n\n.u-notice-bar {\n\tpadding: 18rpx 24rpx;\n\toverflow: hidden;\n}\n\n.u-direction-row {\n\t@include vue-flex;\n\talign-items: center;\n\tjustify-content: space-between;\n}\n\n.u-left-icon {\n\t@include vue-flex;\n\talign-items: center;\n}\n\n.u-notice-box {\n\tflex: 1;\n\t@include vue-flex;\n\toverflow: hidden;\n\tmargin-left: 12rpx;\n}\n\n.u-right-icon {\n\tmargin-left: 12rpx;\n\t@include vue-flex;\n\talign-items: center;\n}\n\n.u-notice-content {\n\tline-height: 1;\n\twhite-space: nowrap;\n\tfont-size: 26rpx;\n\tanimation: u-loop-animation 10s linear infinite both;\n\ttext-align: right;\n\t// 这一句很重要，为了能让滚动左右连接起来\n\tpadding-left: 100%;\n}\n\n@keyframes u-loop-animation {\n\t0% {\n\t\ttransform: translate3d(0, 0, 0);\n\t}\n\n\t100% {\n\t\ttransform: translate3d(-100%, 0, 0);\n\t}\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-number-box/u-number-box.vue",
    "content": "<template>\n\t<view class=\"u-numberbox\">\n\t\t<view class=\"u-icon-minus\" @touchstart.stop.prevent=\"btnTouchStart('minus')\" @touchend.stop.prevent=\"clearTimer\" :class=\"{ 'u-icon-disabled': disabled || inputVal <= min }\"\n\t\t    :style=\"{\n\t\t\t\tbackground: bgColor,\n\t\t\t\theight: inputHeight + 'rpx',\n\t\t\t\tcolor: color\n\t\t\t}\">\n\t\t\t<u-icon name=\"minus\" :size=\"size\"></u-icon>\n\t\t</view>\n\t\t<input :disabled=\"disabledInput || disabled\" :cursor-spacing=\"getCursorSpacing\" :class=\"{ 'u-input-disabled': disabled }\"\n\t\t    v-model=\"inputVal\" class=\"u-number-input\" @blur=\"onBlur\" @focus=\"onFocus\"\n\t\t    type=\"digit\" :style=\"{\n\t\t\t\tcolor: color,\n\t\t\t\tfontSize: size + 'rpx',\n\t\t\t\tbackground: bgColor,\n\t\t\t\theight: inputHeight + 'rpx',\n\t\t\t\twidth: inputWidth + 'rpx'\n\t\t\t}\" />\n\t\t<view class=\"u-icon-plus\" @touchstart.stop.prevent=\"btnTouchStart('plus')\" @touchend.stop.prevent=\"clearTimer\" :class=\"{ 'u-icon-disabled': disabled || inputVal >= max }\"\n\t\t    :style=\"{\n\t\t\t\tbackground: bgColor,\n\t\t\t\theight: inputHeight + 'rpx',\n\t\t\t\tcolor: color\n\t\t\t}\">\n\t\t\t<u-icon name=\"plus\" :size=\"size\"></u-icon>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * numberBox 步进器\n\t * @description 该组件一般用于商城购物选择物品数量的场景。注意：该输入框只能输入大于或等于0的整数，不支持小数输入\n\t * @tutorial https://www.uviewui.com/components/numberBox.html\n\t * @property {Number} value 输入框初始值（默认1）\n\t * @property {String} bg-color 输入框和按钮的背景颜色（默认#F2F3F5）\n\t * @property {Number} min 用户可输入的最小值（默认0）\n\t * @property {Number} max 用户可输入的最大值（默认99999）\n\t * @property {Number} step 步长，每次加或减的值（默认1）\n\t * @property {Boolean} disabled 是否禁用操作，禁用后无法加减或手动修改输入框的值（默认false）\n\t * @property {Boolean} disabled-input 是否禁止输入框手动输入值（默认false）\n\t * @property {Boolean} positive-integer 是否只能输入正整数（默认true）\n\t * @property {String | Number} size 输入框文字和按钮字体大小，单位rpx（默认26）\n\t * @property {String} color 输入框文字和加减按钮图标的颜色（默认#323233）\n\t * @property {String | Number} input-width 输入框宽度，单位rpx（默认80）\n\t * @property {String | Number} input-height 输入框和按钮的高度，单位rpx（默认50）\n\t * @property {String | Number} index 事件回调时用以区分当前发生变化的是哪个输入框\n\t * @property {Boolean} long-press 是否开启长按连续递增或递减(默认true)\n\t * @property {String | Number} press-time 开启长按触发后，每触发一次需要多久，单位ms(默认250)\n\t * @property {String | Number} cursor-spacing 指定光标于键盘的距离，避免键盘遮挡输入框，单位rpx（默认200）\n\t * @event {Function} change 输入框内容发生变化时触发，对象形式\n\t * @event {Function} blur 输入框失去焦点时触发，对象形式\n\t * @event {Function} minus 点击减少按钮时触发(按钮可点击情况下)，对象形式\n\t * @event {Function} plus 点击增加按钮时触发(按钮可点击情况下)，对象形式\n\t * @example <u-number-box :min=\"1\" :max=\"100\"></u-number-box>\n\t */\n\texport default {\n\t\tname: \"u-number-box\",\n\t\tprops: {\n\t\t\t// 预显示的数字\n\t\t\tvalue: {\n\t\t\t\ttype: Number,\n\t\t\t\tdefault: 1\n\t\t\t},\n\t\t\t// 背景颜色\n\t\t\tbgColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#F2F3F5'\n\t\t\t},\n\t\t\t// 最小值\n\t\t\tmin: {\n\t\t\t\ttype: Number,\n\t\t\t\tdefault: 0\n\t\t\t},\n\t\t\t// 最大值\n\t\t\tmax: {\n\t\t\t\ttype: Number,\n\t\t\t\tdefault: 99999\n\t\t\t},\n\t\t\t// 步进值，每次加或减的值\n\t\t\tstep: {\n\t\t\t\ttype: Number,\n\t\t\t\tdefault: 1\n\t\t\t},\n\t\t\t// 是否禁用加减操作\n\t\t\tdisabled: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// input的字体大小，单位rpx\n\t\t\tsize: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 26\n\t\t\t},\n\t\t\t// 加减图标的颜色\n\t\t\tcolor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#323233'\n\t\t\t},\n\t\t\t// input宽度，单位rpx\n\t\t\tinputWidth: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 80\n\t\t\t},\n\t\t\t// input高度，单位rpx\n\t\t\tinputHeight: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 50\n\t\t\t},\n\t\t\t// index索引，用于列表中使用，让用户知道是哪个numberbox发生了变化，一般使用for循环出来的index值即可\n\t\t\tindex: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 是否禁用输入框，与disabled作用于输入框时，为OR的关系，即想要禁用输入框，又可以加减的话\n\t\t\t// 设置disabled为false，disabledInput为true即可\n\t\t\tdisabledInput: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 输入框于键盘之间的距离\n\t\t\tcursorSpacing: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 100\n\t\t\t},\n\t\t\t// 是否开启长按连续递增或递减\n\t\t\tlongPress: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 开启长按触发后，每触发一次需要多久\n\t\t\tpressTime: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 250\n\t\t\t},\n\t\t\t// 是否只能输入大于或等于0的整数(正整数)\n\t\t\tpositiveInteger: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\tvalue(v1, v2) {\n\t\t\t\t// 只有value的改变是来自外部的时候，才去同步inputVal的值，否则会造成循环错误\n\t\t\t\tif(!this.changeFromInner) {\n\t\t\t\t\tthis.inputVal = v1;\n\t\t\t\t\t// 因为inputVal变化后，会触发this.handleChange()，在其中changeFromInner会再次被设置为true，\n\t\t\t\t\t// 造成外面修改值，也导致被认为是内部修改的混乱，这里进行this.$nextTick延时，保证在运行周期的最后处\n\t\t\t\t\t// 将changeFromInner设置为false\n\t\t\t\t\tthis.$nextTick(function(){\n\t\t\t\t\t\tthis.changeFromInner = false;\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t},\n\t\t\tinputVal(v1, v2) {\n\t\t\t\t// 为了让用户能够删除所有输入值，重新输入内容，删除所有值后，内容为空字符串\n\t\t\t\tif (v1 == '') return;\n\t\t\t\tlet value = 0;\n\t\t\t\t// 首先判断是否数值，并且在min和max之间，如果不是，使用原来值\n\t\t\t\tlet tmp = this.$u.test.number(v1);\n\t\t\t\tif (tmp && v1 >= this.min && v1 <= this.max) value = v1;\n\t\t\t\telse value = v2;\n\t\t\t\t// 判断是否只能输入大于等于0的整数\n\t\t\t\tif(this.positiveInteger) {\n\t\t\t\t\t// 小于0，或者带有小数点，\n\t\t\t\t\tif(v1 < 0 || String(v1).indexOf('.') !== -1) {\n\t\t\t\t\t\tvalue = v2;\n\t\t\t\t\t\t// 双向绑定input的值，必须要使用$nextTick修改显示的值\n\t\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\t\tthis.inputVal = v2;\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// 发出change事件\n\t\t\t\tthis.handleChange(value, 'change');\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tinputVal: 1, // 输入框中的值，不能直接使用props中的value，因为应该改变props的状态\n\t\t\t\ttimer: null, // 用作长按的定时器\n\t\t\t\tchangeFromInner: false, // 值发生变化，是来自内部还是外部\n\t\t\t\tinnerChangeTimer: null, // 内部定时器\n\t\t\t};\n\t\t},\n\t\tcreated() {\n\t\t\tthis.inputVal = Number(this.value);\n\t\t},\n\t\tcomputed: {\n\t\t\tgetCursorSpacing() {\n\t\t\t\t// 先将值转为px单位，再转为数值\n\t\t\t\treturn Number(uni.upx2px(this.cursorSpacing));\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\t// 点击退格键\n\t\t\tbtnTouchStart(callback) {\n\t\t\t\t// 先执行一遍方法，否则会造成松开手时，就执行了clearTimer，导致无法实现功能\n\t\t\t\tthis[callback]();\n\t\t\t\t// 如果没开启长按功能，直接返回\n\t\t\t\tif (!this.longPress) return;\n\t\t\t\tclearInterval(this.timer); //再次清空定时器，防止重复注册定时器\n\t\t\t\tthis.timer = null;\n\t\t\t\tthis.timer = setInterval(() => {\n\t\t\t\t\t// 执行加或减函数\n\t\t\t\t\tthis[callback]();\n\t\t\t\t}, this.pressTime);\n\t\t\t},\n\t\t\tclearTimer() {\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tclearInterval(this.timer);\n\t\t\t\t\tthis.timer = null;\n\t\t\t\t})\n\t\t\t},\n\t\t\tminus() {\n\t\t\t\tthis.computeVal('minus');\n\t\t\t},\n\t\t\tplus() {\n\t\t\t\tthis.computeVal('plus');\n\t\t\t},\n\t\t\t// 为了保证小数相加减出现精度溢出的问题\n\t\t\tcalcPlus(num1, num2) {\n\t\t\t\tlet baseNum, baseNum1, baseNum2;\n\t\t\t\ttry {\n\t\t\t\t\tbaseNum1 = num1.toString().split('.')[1].length;\n\t\t\t\t} catch (e) {\n\t\t\t\t\tbaseNum1 = 0;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tbaseNum2 = num2.toString().split('.')[1].length;\n\t\t\t\t} catch (e) {\n\t\t\t\t\tbaseNum2 = 0;\n\t\t\t\t}\n\t\t\t\tbaseNum = Math.pow(10, Math.max(baseNum1, baseNum2));\n\t\t\t\tlet precision = baseNum1 >= baseNum2 ? baseNum1 : baseNum2; //精度\n\t\t\t\treturn ((num1 * baseNum + num2 * baseNum) / baseNum).toFixed(precision);\n\t\t\t},\n\t\t\t// 为了保证小数相加减出现精度溢出的问题\n\t\t\tcalcMinus(num1, num2) {\n\t\t\t\tlet baseNum, baseNum1, baseNum2;\n\t\t\t\ttry {\n\t\t\t\t\tbaseNum1 = num1.toString().split('.')[1].length;\n\t\t\t\t} catch (e) {\n\t\t\t\t\tbaseNum1 = 0;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tbaseNum2 = num2.toString().split('.')[1].length;\n\t\t\t\t} catch (e) {\n\t\t\t\t\tbaseNum2 = 0;\n\t\t\t\t}\n\t\t\t\tbaseNum = Math.pow(10, Math.max(baseNum1, baseNum2));\n\t\t\t\tlet precision = baseNum1 >= baseNum2 ? baseNum1 : baseNum2;\n\t\t\t\treturn ((num1 * baseNum - num2 * baseNum) / baseNum).toFixed(precision);\n\t\t\t},\n\t\t\tcomputeVal(type) {\n\t\t\t\tuni.hideKeyboard();\n\t\t\t\tif (this.disabled) return;\n\t\t\t\tlet value = 0;\n\t\t\t\t// 减\n\t\t\t\tif (type === 'minus') {\n\t\t\t\t\tvalue = this.calcMinus(this.inputVal, this.step);\n\t\t\t\t} else if (type === 'plus') {\n\t\t\t\t\tvalue = this.calcPlus(this.inputVal, this.step);\n\t\t\t\t}\n\t\t\t\t// 判断是否小于最小值和大于最大值\n\t\t\t\tif (value < this.min || value > this.max) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.inputVal = value;\n\t\t\t\tthis.handleChange(value, type);\n\t\t\t},\n\t\t\t// 处理用户手动输入的情况\n\t\t\tonBlur(event) {\n\t\t\t\tlet val = 0;\n\t\t\t\tlet value = event.detail.value;\n\t\t\t\t// 如果为非0-9数字组成，或者其第一位数值为0，直接让其等于min值\n\t\t\t\t// 这里不直接判断是否正整数，是因为用户传递的props min值可能为0\n\t\t\t\tif (!/(^\\d+$)/.test(value) || value[0] == 0) val = this.min;\n\t\t\t\tval = +value;\n\t\t\t\tif (val > this.max) {\n\t\t\t\t\tval = this.max;\n\t\t\t\t} else if (val < this.min) {\n\t\t\t\t\tval = this.min;\n\t\t\t\t}\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.inputVal = val;\n\t\t\t\t})\n\t\t\t\tthis.handleChange(val, 'blur');\n\t\t\t},\n\t\t\t// 输入框获得焦点事件\n\t\t\tonFocus() {\n\t\t\t\tthis.$emit('focus');\n\t\t\t},\n\t\t\thandleChange(value, type) {\n\t\t\t\tif (this.disabled) return;\n\t\t\t\t// 清除定时器，避免造成混乱\n\t\t\t\tif(this.innerChangeTimer) {\n\t\t\t\t\tclearTimeout(this.innerChangeTimer);\n\t\t\t\t\tthis.innerChangeTimer = null;\n\t\t\t\t}\n\t\t\t\t// 发出input事件，修改通过v-model绑定的值，达到双向绑定的效果\n\t\t\t\tthis.changeFromInner = true;\n\t\t\t\t// 一定时间内，清除changeFromInner标记，否则内部值改变后\n\t\t\t\t// 外部通过程序修改value值，将会无效\n\t\t\t\tthis.innerChangeTimer = setTimeout(() => {\n\t\t\t\t\tthis.changeFromInner = false;\n\t\t\t\t}, 150);\n\t\t\t\tthis.$emit('input', Number(value));\n\t\t\t\tthis.$emit(type, {\n\t\t\t\t\t// 转为Number类型\n\t\t\t\t\tvalue: Number(value),\n\t\t\t\t\tindex: this.index\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\n\t.u-numberbox {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t}\n\n\t.u-number-input {\n\t\tposition: relative;\n\t\ttext-align: center;\n\t\tpadding: 0;\n\t\tmargin: 0 6rpx;\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t}\n\n\t.u-icon-plus,\n\t.u-icon-minus {\n\t\twidth: 60rpx;\n\t\t@include vue-flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t}\n\n\t.u-icon-plus {\n\t\tborder-radius: 0 8rpx 8rpx 0;\n\t}\n\n\t.u-icon-minus {\n\t\tborder-radius: 8rpx 0 0 8rpx;\n\t}\n\n\t.u-icon-disabled {\n\t\tcolor: #c8c9cc !important;\n\t\tbackground: #f7f8fa !important;\n\t}\n\n\t.u-input-disabled {\n\t\tcolor: #c8c9cc !important;\n\t\tbackground-color: #f2f3f5 !important;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-number-keyboard/u-number-keyboard.vue",
    "content": "<template>\n\t<view class=\"u-keyboard\" @touchmove.stop.prevent=\"() => {}\">\n\t\t<view class=\"u-keyboard-grids\">\n\t\t\t<view\n\t\t\t    class=\"u-keyboard-grids-item\"\n\t\t\t    :class=\"[btnBgGray(index) ? 'u-bg-gray' : '', index <= 2 ? 'u-border-top' : '', index < 9 ? 'u-border-bottom' : '', (index + 1) % 3 != 0 ? 'u-border-right' : '']\"\n\t\t\t    :style=\"[itemStyle(index)]\"\n\t\t\t    v-for=\"(item, index) in numList\"\n\t\t\t    :key=\"index\"\n\t\t\t    :hover-class=\"hoverClass(index)\"\n\t\t\t    :hover-stay-time=\"100\"\n\t\t\t    @tap=\"keyboardClick(item)\">\n\t\t\t\t<view class=\"u-keyboard-grids-btn\">{{ item }}</view>\n\t\t\t</view>\n\t\t\t<view class=\"u-keyboard-grids-item u-bg-gray\" hover-class=\"u-hover-class\" :hover-stay-time=\"100\" @touchstart.stop=\"backspaceClick\"\n\t\t\t    @touchend=\"clearTimer\">\n\t\t\t\t<view class=\"u-keyboard-back u-keyboard-grids-btn\">\n\t\t\t\t\t<u-icon name=\"backspace\" :size=\"38\" :bold=\"true\"></u-icon>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tprops: {\n\t\t\t// 键盘的类型，number-数字键盘，card-身份证键盘\n\t\t\tmode: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'number'\n\t\t\t},\n\t\t\t// 是否显示键盘的\".\"符号\n\t\t\tdotEnabled: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 是否打乱键盘按键的顺序\n\t\t\trandom: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tbackspace: 'backspace', // 退格键内容\n\t\t\t\tdot: '.', // 点\n\t\t\t\ttimer: null, // 长按多次删除的事件监听\n\t\t\t\tcardX: 'X' // 身份证的X符号\n\t\t\t};\n\t\t},\n\t\tcomputed: {\n\t\t\t// 键盘需要显示的内容\n\t\t\tnumList() {\n\t\t\t\tlet tmp = [];\n\t\t\t\tif (!this.dotEnabled && this.mode == 'number') {\n\t\t\t\t\tif (!this.random) {\n\t\t\t\t\t\treturn [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn this.$u.randomArray([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]);\n\t\t\t\t\t}\n\t\t\t\t} else if (this.dotEnabled && this.mode == 'number') {\n\t\t\t\t\tif (!this.random) {\n\t\t\t\t\t\treturn [1, 2, 3, 4, 5, 6, 7, 8, 9, this.dot, 0];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn this.$u.randomArray([1, 2, 3, 4, 5, 6, 7, 8, 9, this.dot, 0]);\n\t\t\t\t\t}\n\t\t\t\t} else if (this.mode == 'card') {\n\t\t\t\t\tif (!this.random) {\n\t\t\t\t\t\treturn [1, 2, 3, 4, 5, 6, 7, 8, 9, this.cardX, 0];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn this.$u.randomArray([1, 2, 3, 4, 5, 6, 7, 8, 9, this.cardX, 0]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 按键的样式，在非乱序&&数字键盘&&不显示点按钮时，index为9时，按键占位两个空间\n\t\t\titemStyle() {\n\t\t\t\treturn index => {\n\t\t\t\t\tlet style = {};\n\t\t\t\t\tif (this.mode == 'number' && !this.dotEnabled && index == 9) style.flex = '0 0 66.6666666666%';\n\t\t\t\t\treturn style;\n\t\t\t\t};\n\t\t\t},\n\t\t\t// 是否让按键显示灰色，只在非乱序&&数字键盘&&且允许点按键的时候\n\t\t\tbtnBgGray() {\n\t\t\t\treturn index => {\n\t\t\t\t\tif (!this.random && index == 9 && (this.mode != 'number' || (this.mode == 'number' && this.dotEnabled))) return true;\n\t\t\t\t\telse return false;\n\t\t\t\t};\n\t\t\t},\n\t\t\thoverClass() {\n\t\t\t\treturn index => {\n\t\t\t\t\tif (!this.random && index == 9 && (this.mode == 'number' && this.dotEnabled || this.mode == 'card')) return 'u-hover-class';\n\t\t\t\t\telse return 'u-keyboard-hover';\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\t// 点击退格键\n\t\t\tbackspaceClick() {\n\t\t\t\tthis.$emit('backspace');\n\t\t\t\tclearInterval(this.timer); //再次清空定时器，防止重复注册定时器\n\t\t\t\tthis.timer = null;\n\t\t\t\tthis.timer = setInterval(() => {\n\t\t\t\t\tthis.$emit('backspace');\n\t\t\t\t}, 250);\n\t\t\t},\n\t\t\tclearTimer() {\n\t\t\t\tclearInterval(this.timer);\n\t\t\t\tthis.timer = null;\n\t\t\t},\n\t\t\t// 获取键盘显示的内容\n\t\t\tkeyboardClick(val) {\n\t\t\t\t// 允许键盘显示点模式和触发非点按键时，将内容转为数字类型\n\t\t\t\tif (this.dotEnabled && val != this.dot && val != this.cardX) val = Number(val);\n\t\t\t\tthis.$emit('change', val);\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\n\t.u-keyboard {\n\t\tposition: relative;\n\t\tz-index: 1003;\n\t}\n\n\t.u-keyboard-grids {\n\t\t@include vue-flex;\n\t\tflex-wrap: wrap;\n\t}\n\n\t.u-keyboard-grids-item {\n\t\tflex: 0 0 33.3333333333%;\n\t\ttext-align: center;\n\t\tfont-size: 50rpx;\n\t\tcolor: #333;\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\theight: 110rpx;\n\t\tfont-weight: 500;\n\t}\n\n\t.u-bg-gray {\n\t\tbackground-color: $u-border-color;\n\t}\n\n\t.u-keyboard-back {\n\t\tfont-size: 36rpx;\n\t}\n\n\t.u-keyboard-hover {\n\t\tbackground-color: #e7e6eb;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-parse/libs/CssHandler.js",
    "content": "const cfg = require('./config.js'),\n\tisLetter = c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');\n\nfunction CssHandler(tagStyle) {\n\tvar styles = Object.assign(Object.create(null), cfg.userAgentStyles);\n\tfor (var item in tagStyle)\n\t\tstyles[item] = (styles[item] ? styles[item] + ';' : '') + tagStyle[item];\n\tthis.styles = styles;\n}\nCssHandler.prototype.getStyle = function(data) {\n\tthis.styles = new parser(data, this.styles).parse();\n}\nCssHandler.prototype.match = function(name, attrs) {\n\tvar tmp, matched = (tmp = this.styles[name]) ? tmp + ';' : '';\n\tif (attrs.class) {\n\t\tvar items = attrs.class.split(' ');\n\t\tfor (var i = 0, item; item = items[i]; i++)\n\t\t\tif (tmp = this.styles['.' + item])\n\t\t\t\tmatched += tmp + ';';\n\t}\n\tif (tmp = this.styles['#' + attrs.id])\n\t\tmatched += tmp + ';';\n\treturn matched;\n}\nmodule.exports = CssHandler;\n\nfunction parser(data, init) {\n\tthis.data = data;\n\tthis.floor = 0;\n\tthis.i = 0;\n\tthis.list = [];\n\tthis.res = init;\n\tthis.state = this.Space;\n}\nparser.prototype.parse = function() {\n\tfor (var c; c = this.data[this.i]; this.i++)\n\t\tthis.state(c);\n\treturn this.res;\n}\nparser.prototype.section = function() {\n\treturn this.data.substring(this.start, this.i);\n}\n// 状态机\nparser.prototype.Space = function(c) {\n\tif (c == '.' || c == '#' || isLetter(c)) {\n\t\tthis.start = this.i;\n\t\tthis.state = this.Name;\n\t} else if (c == '/' && this.data[this.i + 1] == '*')\n\t\tthis.Comment();\n\telse if (!cfg.blankChar[c] && c != ';')\n\t\tthis.state = this.Ignore;\n}\nparser.prototype.Comment = function() {\n\tthis.i = this.data.indexOf('*/', this.i) + 1;\n\tif (!this.i) this.i = this.data.length;\n\tthis.state = this.Space;\n}\nparser.prototype.Ignore = function(c) {\n\tif (c == '{') this.floor++;\n\telse if (c == '}' && !--this.floor) {\n\t\tthis.list = [];\n\t\tthis.state = this.Space;\n\t}\n}\nparser.prototype.Name = function(c) {\n\tif (cfg.blankChar[c]) {\n\t\tthis.list.push(this.section());\n\t\tthis.state = this.NameSpace;\n\t} else if (c == '{') {\n\t\tthis.list.push(this.section());\n\t\tthis.Content();\n\t} else if (c == ',') {\n\t\tthis.list.push(this.section());\n\t\tthis.Comma();\n\t} else if (!isLetter(c) && (c < '0' || c > '9') && c != '-' && c != '_')\n\t\tthis.state = this.Ignore;\n}\nparser.prototype.NameSpace = function(c) {\n\tif (c == '{') this.Content();\n\telse if (c == ',') this.Comma();\n\telse if (!cfg.blankChar[c]) this.state = this.Ignore;\n}\nparser.prototype.Comma = function() {\n\twhile (cfg.blankChar[this.data[++this.i]]);\n\tif (this.data[this.i] == '{') this.Content();\n\telse {\n\t\tthis.start = this.i--;\n\t\tthis.state = this.Name;\n\t}\n}\nparser.prototype.Content = function() {\n\tthis.start = ++this.i;\n\tif ((this.i = this.data.indexOf('}', this.i)) == -1) this.i = this.data.length;\n\tvar content = this.section();\n\tfor (var i = 0, item; item = this.list[i++];)\n\t\tif (this.res[item]) this.res[item] += ';' + content;\n\t\telse this.res[item] = content;\n\tthis.list = [];\n\tthis.state = this.Space;\n}\n"
  },
  {
    "path": "uview-ui/components/u-parse/libs/MpHtmlParser.js",
    "content": "/**\n * html 解析器\n * @tutorial https://github.com/jin-yufeng/Parser\n * @version 20201029\n * @author JinYufeng\n * @listens MIT\n */\nconst cfg = require('./config.js'),\n\tblankChar = cfg.blankChar,\n\tCssHandler = require('./CssHandler.js'),\n\twindowWidth = uni.getSystemInfoSync().windowWidth;\nvar emoji;\n\nfunction MpHtmlParser(data, options = {}) {\n\tthis.attrs = {};\n\tthis.CssHandler = new CssHandler(options.tagStyle, windowWidth);\n\tthis.data = data;\n\tthis.domain = options.domain;\n\tthis.DOM = [];\n\tthis.i = this.start = this.audioNum = this.imgNum = this.videoNum = 0;\n\toptions.prot = (this.domain || '').includes('://') ? this.domain.split('://')[0] : 'http';\n\tthis.options = options;\n\tthis.state = this.Text;\n\tthis.STACK = [];\n\t// 工具函数\n\tthis.bubble = () => {\n\t\tfor (var i = this.STACK.length, item; item = this.STACK[--i];) {\n\t\t\tif (cfg.richOnlyTags[item.name]) return false;\n\t\t\titem.c = 1;\n\t\t}\n\t\treturn true;\n\t}\n\tthis.decode = (val, amp) => {\n\t\tvar i = -1,\n\t\t\tj, en;\n\t\twhile (1) {\n\t\t\tif ((i = val.indexOf('&', i + 1)) == -1) break;\n\t\t\tif ((j = val.indexOf(';', i + 2)) == -1) break;\n\t\t\tif (val[i + 1] == '#') {\n\t\t\t\ten = parseInt((val[i + 2] == 'x' ? '0' : '') + val.substring(i + 2, j));\n\t\t\t\tif (!isNaN(en)) val = val.substr(0, i) + String.fromCharCode(en) + val.substr(j + 1);\n\t\t\t} else {\n\t\t\t\ten = val.substring(i + 1, j);\n\t\t\t\tif (cfg.entities[en] || en == amp)\n\t\t\t\t\tval = val.substr(0, i) + (cfg.entities[en] || '&') + val.substr(j + 1);\n\t\t\t}\n\t\t}\n\t\treturn val;\n\t}\n\tthis.getUrl = url => {\n\t\tif (url[0] == '/') {\n\t\t\tif (url[1] == '/') url = this.options.prot + ':' + url;\n\t\t\telse if (this.domain) url = this.domain + url;\n\t\t} else if (this.domain && url.indexOf('data:') != 0 && !url.includes('://'))\n\t\t\turl = this.domain + '/' + url;\n\t\treturn url;\n\t}\n\tthis.isClose = () => this.data[this.i] == '>' || (this.data[this.i] == '/' && this.data[this.i + 1] == '>');\n\tthis.section = () => this.data.substring(this.start, this.i);\n\tthis.parent = () => this.STACK[this.STACK.length - 1];\n\tthis.siblings = () => this.STACK.length ? this.parent().children : this.DOM;\n}\nMpHtmlParser.prototype.parse = function() {\n\tif (emoji) this.data = emoji.parseEmoji(this.data);\n\tfor (var c; c = this.data[this.i]; this.i++)\n\t\tthis.state(c);\n\tif (this.state == this.Text) this.setText();\n\twhile (this.STACK.length) this.popNode(this.STACK.pop());\n\treturn this.DOM;\n}\n// 设置属性\nMpHtmlParser.prototype.setAttr = function() {\n\tvar name = this.attrName.toLowerCase(),\n\t\tval = this.attrVal;\n\tif (cfg.boolAttrs[name]) this.attrs[name] = 'T';\n\telse if (val) {\n\t\tif (name == 'src' || (name == 'data-src' && !this.attrs.src)) this.attrs.src = this.getUrl(this.decode(val, 'amp'));\n\t\telse if (name == 'href' || name == 'style') this.attrs[name] = this.decode(val, 'amp');\n\t\telse if (name.substr(0, 5) != 'data-') this.attrs[name] = val;\n\t}\n\tthis.attrVal = '';\n\twhile (blankChar[this.data[this.i]]) this.i++;\n\tif (this.isClose()) this.setNode();\n\telse {\n\t\tthis.start = this.i;\n\t\tthis.state = this.AttrName;\n\t}\n}\n// 设置文本节点\nMpHtmlParser.prototype.setText = function() {\n\tvar back, text = this.section();\n\tif (!text) return;\n\ttext = (cfg.onText && cfg.onText(text, () => back = true)) || text;\n\tif (back) {\n\t\tthis.data = this.data.substr(0, this.start) + text + this.data.substr(this.i);\n\t\tlet j = this.start + text.length;\n\t\tfor (this.i = this.start; this.i < j; this.i++) this.state(this.data[this.i]);\n\t\treturn;\n\t}\n\tif (!this.pre) {\n\t\t// 合并空白符\n\t\tvar flag, tmp = [];\n\t\tfor (let i = text.length, c; c = text[--i];)\n\t\t\tif (!blankChar[c]) {\n\t\t\t\ttmp.unshift(c);\n\t\t\t\tif (!flag) flag = 1;\n\t\t\t} else {\n\t\t\t\tif (tmp[0] != ' ') tmp.unshift(' ');\n\t\t\t\tif (c == '\\n' && flag == void 0) flag = 0;\n\t\t\t}\n\t\tif (flag == 0) return;\n\t\ttext = tmp.join('');\n\t}\n\tthis.siblings().push({\n\t\ttype: 'text',\n\t\ttext: this.decode(text)\n\t});\n}\n// 设置元素节点\nMpHtmlParser.prototype.setNode = function() {\n\tvar node = {\n\t\t\tname: this.tagName.toLowerCase(),\n\t\t\tattrs: this.attrs\n\t\t},\n\t\tclose = cfg.selfClosingTags[node.name];\n\tif (this.options.nodes.length) node.type = 'node';\n\tthis.attrs = {};\n\tif (!cfg.ignoreTags[node.name]) {\n\t\t// 处理属性\n\t\tvar attrs = node.attrs,\n\t\t\tstyle = this.CssHandler.match(node.name, attrs, node) + (attrs.style || ''),\n\t\t\tstyleObj = {};\n\t\tif (attrs.id) {\n\t\t\tif (this.options.compress & 1) attrs.id = void 0;\n\t\t\telse if (this.options.useAnchor) this.bubble();\n\t\t}\n\t\tif ((this.options.compress & 2) && attrs.class) attrs.class = void 0;\n\t\tswitch (node.name) {\n\t\t\tcase 'a':\n\t\t\tcase 'ad': // #ifdef APP-PLUS\n\t\t\tcase 'iframe':\n\t\t\t\t// #endif\n\t\t\t\tthis.bubble();\n\t\t\t\tbreak;\n\t\t\tcase 'font':\n\t\t\t\tif (attrs.color) {\n\t\t\t\t\tstyleObj['color'] = attrs.color;\n\t\t\t\t\tattrs.color = void 0;\n\t\t\t\t}\n\t\t\t\tif (attrs.face) {\n\t\t\t\t\tstyleObj['font-family'] = attrs.face;\n\t\t\t\t\tattrs.face = void 0;\n\t\t\t\t}\n\t\t\t\tif (attrs.size) {\n\t\t\t\t\tvar size = parseInt(attrs.size);\n\t\t\t\t\tif (size < 1) size = 1;\n\t\t\t\t\telse if (size > 7) size = 7;\n\t\t\t\t\tvar map = ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'];\n\t\t\t\t\tstyleObj['font-size'] = map[size - 1];\n\t\t\t\t\tattrs.size = void 0;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'embed':\n\t\t\t\t// #ifndef APP-PLUS\n\t\t\t\tvar src = node.attrs.src || '',\n\t\t\t\t\ttype = node.attrs.type || '';\n\t\t\t\tif (type.includes('video') || src.includes('.mp4') || src.includes('.3gp') || src.includes('.m3u8'))\n\t\t\t\t\tnode.name = 'video';\n\t\t\t\telse if (type.includes('audio') || src.includes('.m4a') || src.includes('.wav') || src.includes('.mp3') || src.includes(\n\t\t\t\t\t\t'.aac'))\n\t\t\t\t\tnode.name = 'audio';\n\t\t\t\telse break;\n\t\t\t\tif (node.attrs.autostart)\n\t\t\t\t\tnode.attrs.autoplay = 'T';\n\t\t\t\tnode.attrs.controls = 'T';\n\t\t\t\t// #endif\n\t\t\t\t// #ifdef APP-PLUS\n\t\t\t\tthis.bubble();\n\t\t\t\tbreak;\n\t\t\t\t// #endif\n\t\t\tcase 'video':\n\t\t\tcase 'audio':\n\t\t\t\tif (!attrs.id) attrs.id = node.name + (++this[`${node.name}Num`]);\n\t\t\t\telse this[`${node.name}Num`]++;\n\t\t\t\tif (node.name == 'video') {\n\t\t\t\t\tif (this.videoNum > 3)\n\t\t\t\t\t\tnode.lazyLoad = 1;\n\t\t\t\t\tif (attrs.width) {\n\t\t\t\t\t\tstyleObj.width = parseFloat(attrs.width) + (attrs.width.includes('%') ? '%' : 'px');\n\t\t\t\t\t\tattrs.width = void 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (attrs.height) {\n\t\t\t\t\t\tstyleObj.height = parseFloat(attrs.height) + (attrs.height.includes('%') ? '%' : 'px');\n\t\t\t\t\t\tattrs.height = void 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!attrs.controls && !attrs.autoplay) attrs.controls = 'T';\n\t\t\t\tattrs.source = [];\n\t\t\t\tif (attrs.src) {\n\t\t\t\t\tattrs.source.push(attrs.src);\n\t\t\t\t\tattrs.src = void 0;\n\t\t\t\t}\n\t\t\t\tthis.bubble();\n\t\t\t\tbreak;\n\t\t\tcase 'td':\n\t\t\tcase 'th':\n\t\t\t\tif (attrs.colspan || attrs.rowspan)\n\t\t\t\t\tfor (var k = this.STACK.length, item; item = this.STACK[--k];)\n\t\t\t\t\t\tif (item.name == 'table') {\n\t\t\t\t\t\t\titem.flag = 1;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t}\n\t\tif (attrs.align) {\n\t\t\tif (node.name == 'table') {\n\t\t\t\tif (attrs.align == 'center') styleObj['margin-inline-start'] = styleObj['margin-inline-end'] = 'auto';\n\t\t\t\telse styleObj['float'] = attrs.align;\n\t\t\t} else styleObj['text-align'] = attrs.align;\n\t\t\tattrs.align = void 0;\n\t\t}\n\t\t// 压缩 style\n\t\tvar styles = style.split(';');\n\t\tstyle = '';\n\t\tfor (var i = 0, len = styles.length; i < len; i++) {\n\t\t\tvar info = styles[i].split(':');\n\t\t\tif (info.length < 2) continue;\n\t\t\tlet key = info[0].trim().toLowerCase(),\n\t\t\t\tvalue = info.slice(1).join(':').trim();\n\t\t\tif (value[0] == '-' || value.includes('safe'))\n\t\t\t\tstyle += `;${key}:${value}`;\n\t\t\telse if (!styleObj[key] || value.includes('import') || !styleObj[key].includes('import'))\n\t\t\t\tstyleObj[key] = value;\n\t\t}\n\t\tif (node.name == 'img') {\n\t\t\tif (attrs.src && !attrs.ignore) {\n\t\t\t\tif (this.bubble())\n\t\t\t\t\tattrs.i = (this.imgNum++).toString();\n\t\t\t\telse attrs.ignore = 'T';\n\t\t\t}\n\t\t\tif (attrs.ignore) {\n\t\t\t\tstyle += ';-webkit-touch-callout:none';\n\t\t\t\tstyleObj['max-width'] = '100%';\n\t\t\t}\n\t\t\tvar width;\n\t\t\tif (styleObj.width) width = styleObj.width;\n\t\t\telse if (attrs.width) width = attrs.width.includes('%') ? attrs.width : parseFloat(attrs.width) + 'px';\n\t\t\tif (width) {\n\t\t\t\tstyleObj.width = width;\n\t\t\t\tattrs.width = '100%';\n\t\t\t\tif (parseInt(width) > windowWidth) {\n\t\t\t\t\tstyleObj.height = '';\n\t\t\t\t\tif (attrs.height) attrs.height = void 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (styleObj.height) {\n\t\t\t\tattrs.height = styleObj.height;\n\t\t\t\tstyleObj.height = '';\n\t\t\t} else if (attrs.height && !attrs.height.includes('%'))\n\t\t\t\tattrs.height = parseFloat(attrs.height) + 'px';\n\t\t}\n\t\tfor (var key in styleObj) {\n\t\t\tvar value = styleObj[key];\n\t\t\tif (!value) continue;\n\t\t\tif (key.includes('flex') || key == 'order' || key == 'self-align') node.c = 1;\n\t\t\t// 填充链接\n\t\t\tif (value.includes('url')) {\n\t\t\t\tvar j = value.indexOf('(');\n\t\t\t\tif (j++ != -1) {\n\t\t\t\t\twhile (value[j] == '\"' || value[j] == \"'\" || blankChar[value[j]]) j++;\n\t\t\t\t\tvalue = value.substr(0, j) + this.getUrl(value.substr(j));\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 转换 rpx\n\t\t\telse if (value.includes('rpx'))\n\t\t\t\tvalue = value.replace(/[0-9.]+\\s*rpx/g, $ => parseFloat($) * windowWidth / 750 + 'px');\n\t\t\telse if (key == 'white-space' && value.includes('pre') && !close)\n\t\t\t\tthis.pre = node.pre = true;\n\t\t\tstyle += `;${key}:${value}`;\n\t\t}\n\t\tstyle = style.substr(1);\n\t\tif (style) attrs.style = style;\n\t\tif (!close) {\n\t\t\tnode.children = [];\n\t\t\tif (node.name == 'pre' && cfg.highlight) {\n\t\t\t\tthis.remove(node);\n\t\t\t\tthis.pre = node.pre = true;\n\t\t\t}\n\t\t\tthis.siblings().push(node);\n\t\t\tthis.STACK.push(node);\n\t\t} else if (!cfg.filter || cfg.filter(node, this) != false)\n\t\t\tthis.siblings().push(node);\n\t} else {\n\t\tif (!close) this.remove(node);\n\t\telse if (node.name == 'source') {\n\t\t\tvar parent = this.parent();\n\t\t\tif (parent && (parent.name == 'video' || parent.name == 'audio') && node.attrs.src)\n\t\t\t\tparent.attrs.source.push(node.attrs.src);\n\t\t} else if (node.name == 'base' && !this.domain) this.domain = node.attrs.href;\n\t}\n\tif (this.data[this.i] == '/') this.i++;\n\tthis.start = this.i + 1;\n\tthis.state = this.Text;\n}\n// 移除标签\nMpHtmlParser.prototype.remove = function(node) {\n\tvar name = node.name,\n\t\tj = this.i;\n\t// 处理 svg\n\tvar handleSvg = () => {\n\t\tvar src = this.data.substring(j, this.i + 1);\n\t\tnode.attrs.xmlns = 'http://www.w3.org/2000/svg';\n\t\tfor (var key in node.attrs) {\n\t\t\tif (key == 'viewbox') src = ` viewBox=\"${node.attrs.viewbox}\"` + src;\n\t\t\telse if (key != 'style') src = ` ${key}=\"${node.attrs[key]}\"` + src;\n\t\t}\n\t\tsrc = '<svg' + src;\n\t\tvar parent = this.parent();\n\t\tif (node.attrs.width == '100%' && parent && (parent.attrs.style || '').includes('inline'))\n\t\t\tparent.attrs.style = 'width:300px;max-width:100%;' + parent.attrs.style;\n\t\tthis.siblings().push({\n\t\t\tname: 'img',\n\t\t\tattrs: {\n\t\t\t\tsrc: 'data:image/svg+xml;utf8,' + src.replace(/#/g, '%23'),\n\t\t\t\tstyle: node.attrs.style,\n\t\t\t\tignore: 'T'\n\t\t\t}\n\t\t})\n\t}\n\tif (node.name == 'svg' && this.data[j] == '/') return handleSvg(this.i++);\n\twhile (1) {\n\t\tif ((this.i = this.data.indexOf('</', this.i + 1)) == -1) {\n\t\t\tif (name == 'pre' || name == 'svg') this.i = j;\n\t\t\telse this.i = this.data.length;\n\t\t\treturn;\n\t\t}\n\t\tthis.start = (this.i += 2);\n\t\twhile (!blankChar[this.data[this.i]] && !this.isClose()) this.i++;\n\t\tif (this.section().toLowerCase() == name) {\n\t\t\t// 代码块高亮\n\t\t\tif (name == 'pre') {\n\t\t\t\tthis.data = this.data.substr(0, j + 1) + cfg.highlight(this.data.substring(j + 1, this.i - 5), node.attrs) + this.data\n\t\t\t\t\t.substr(this.i - 5);\n\t\t\t\treturn this.i = j;\n\t\t\t} else if (name == 'style')\n\t\t\t\tthis.CssHandler.getStyle(this.data.substring(j + 1, this.i - 7));\n\t\t\telse if (name == 'title')\n\t\t\t\tthis.DOM.title = this.data.substring(j + 1, this.i - 7);\n\t\t\tif ((this.i = this.data.indexOf('>', this.i)) == -1) this.i = this.data.length;\n\t\t\tif (name == 'svg') handleSvg();\n\t\t\treturn;\n\t\t}\n\t}\n}\n// 节点出栈处理\nMpHtmlParser.prototype.popNode = function(node) {\n\t// 空白符处理\n\tif (node.pre) {\n\t\tnode.pre = this.pre = void 0;\n\t\tfor (let i = this.STACK.length; i--;)\n\t\t\tif (this.STACK[i].pre)\n\t\t\t\tthis.pre = true;\n\t}\n\tvar siblings = this.siblings(),\n\t\tlen = siblings.length,\n\t\tchilds = node.children;\n\tif (node.name == 'head' || (cfg.filter && cfg.filter(node, this) == false))\n\t\treturn siblings.pop();\n\tvar attrs = node.attrs;\n\t// 替换一些标签名\n\tif (cfg.blockTags[node.name]) node.name = 'div';\n\telse if (!cfg.trustTags[node.name]) node.name = 'span';\n\t// 处理列表\n\tif (node.c && (node.name == 'ul' || node.name == 'ol')) {\n\t\tif ((node.attrs.style || '').includes('list-style:none')) {\n\t\t\tfor (let i = 0, child; child = childs[i++];)\n\t\t\t\tif (child.name == 'li')\n\t\t\t\t\tchild.name = 'div';\n\t\t} else if (node.name == 'ul') {\n\t\t\tvar floor = 1;\n\t\t\tfor (let i = this.STACK.length; i--;)\n\t\t\t\tif (this.STACK[i].name == 'ul') floor++;\n\t\t\tif (floor != 1)\n\t\t\t\tfor (let i = childs.length; i--;)\n\t\t\t\t\tchilds[i].floor = floor;\n\t\t} else {\n\t\t\tfor (let i = 0, num = 1, child; child = childs[i++];)\n\t\t\t\tif (child.name == 'li') {\n\t\t\t\t\tchild.type = 'ol';\n\t\t\t\t\tchild.num = ((num, type) => {\n\t\t\t\t\t\tif (type == 'a') return String.fromCharCode(97 + (num - 1) % 26);\n\t\t\t\t\t\tif (type == 'A') return String.fromCharCode(65 + (num - 1) % 26);\n\t\t\t\t\t\tif (type == 'i' || type == 'I') {\n\t\t\t\t\t\t\tnum = (num - 1) % 99 + 1;\n\t\t\t\t\t\t\tvar one = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'],\n\t\t\t\t\t\t\t\tten = ['X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'],\n\t\t\t\t\t\t\t\tres = (ten[Math.floor(num / 10) - 1] || '') + (one[num % 10 - 1] || '');\n\t\t\t\t\t\t\tif (type == 'i') return res.toLowerCase();\n\t\t\t\t\t\t\treturn res;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn num;\n\t\t\t\t\t})(num++, attrs.type) + '.';\n\t\t\t\t}\n\t\t}\n\t}\n\t// 处理表格\n\tif (node.name == 'table') {\n\t\tvar padding = parseFloat(attrs.cellpadding),\n\t\t\tspacing = parseFloat(attrs.cellspacing),\n\t\t\tborder = parseFloat(attrs.border);\n\t\tif (node.c) {\n\t\t\tif (isNaN(padding)) padding = 2;\n\t\t\tif (isNaN(spacing)) spacing = 2;\n\t\t}\n\t\tif (border) attrs.style = `border:${border}px solid gray;${attrs.style || ''}`;\n\t\tif (node.flag && node.c) {\n\t\t\t// 有 colspan 或 rowspan 且含有链接的表格转为 grid 布局实现\n\t\t\tattrs.style = `${attrs.style || ''};${spacing ? `;grid-gap:${spacing}px` : ';border-left:0;border-top:0'}`;\n\t\t\tvar row = 1,\n\t\t\t\tcol = 1,\n\t\t\t\tcolNum,\n\t\t\t\ttrs = [],\n\t\t\t\tchildren = [],\n\t\t\t\tmap = {};\n\t\t\t(function f(ns) {\n\t\t\t\tfor (var i = 0; i < ns.length; i++) {\n\t\t\t\t\tif (ns[i].name == 'tr') trs.push(ns[i]);\n\t\t\t\t\telse f(ns[i].children || []);\n\t\t\t\t}\n\t\t\t})(node.children)\n\t\t\tfor (let i = 0; i < trs.length; i++) {\n\t\t\t\tfor (let j = 0, td; td = trs[i].children[j]; j++) {\n\t\t\t\t\tif (td.name == 'td' || td.name == 'th') {\n\t\t\t\t\t\twhile (map[row + '.' + col]) col++;\n\t\t\t\t\t\tvar cell = {\n\t\t\t\t\t\t\tname: 'div',\n\t\t\t\t\t\t\tc: 1,\n\t\t\t\t\t\t\tattrs: {\n\t\t\t\t\t\t\t\tstyle: (td.attrs.style || '') + (border ? `;border:${border}px solid gray` + (spacing ? '' :\n\t\t\t\t\t\t\t\t\t';border-right:0;border-bottom:0') : '') + (padding ? `;padding:${padding}px` : '')\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tchildren: td.children\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (td.attrs.colspan) {\n\t\t\t\t\t\t\tcell.attrs.style += ';grid-column-start:' + col + ';grid-column-end:' + (col + parseInt(td.attrs.colspan));\n\t\t\t\t\t\t\tif (!td.attrs.rowspan) cell.attrs.style += ';grid-row-start:' + row + ';grid-row-end:' + (row + 1);\n\t\t\t\t\t\t\tcol += parseInt(td.attrs.colspan) - 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (td.attrs.rowspan) {\n\t\t\t\t\t\t\tcell.attrs.style += ';grid-row-start:' + row + ';grid-row-end:' + (row + parseInt(td.attrs.rowspan));\n\t\t\t\t\t\t\tif (!td.attrs.colspan) cell.attrs.style += ';grid-column-start:' + col + ';grid-column-end:' + (col + 1);\n\t\t\t\t\t\t\tfor (var k = 1; k < td.attrs.rowspan; k++) map[(row + k) + '.' + col] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchildren.push(cell);\n\t\t\t\t\t\tcol++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!colNum) {\n\t\t\t\t\tcolNum = col - 1;\n\t\t\t\t\tattrs.style += `;grid-template-columns:repeat(${colNum},auto)`\n\t\t\t\t}\n\t\t\t\tcol = 1;\n\t\t\t\trow++;\n\t\t\t}\n\t\t\tnode.children = children;\n\t\t} else {\n\t\t\tattrs.style = `border-spacing:${spacing}px;${attrs.style || ''}`;\n\t\t\tif (border || padding)\n\t\t\t\t(function f(ns) {\n\t\t\t\t\tfor (var i = 0, n; n = ns[i]; i++) {\n\t\t\t\t\t\tif (n.name == 'th' || n.name == 'td') {\n\t\t\t\t\t\t\tif (border) n.attrs.style = `border:${border}px solid gray;${n.attrs.style || ''}`;\n\t\t\t\t\t\t\tif (padding) n.attrs.style = `padding:${padding}px;${n.attrs.style || ''}`;\n\t\t\t\t\t\t} else f(n.children || []);\n\t\t\t\t\t}\n\t\t\t\t})(childs)\n\t\t}\n\t\tif (this.options.autoscroll) {\n\t\t\tvar table = Object.assign({}, node);\n\t\t\tnode.name = 'div';\n\t\t\tnode.attrs = {\n\t\t\t\tstyle: 'overflow:scroll'\n\t\t\t}\n\t\t\tnode.children = [table];\n\t\t}\n\t}\n\tthis.CssHandler.pop && this.CssHandler.pop(node);\n\t// 自动压缩\n\tif (node.name == 'div' && !Object.keys(attrs).length && childs.length == 1 && childs[0].name == 'div')\n\t\tsiblings[len - 1] = childs[0];\n}\n// 状态机\nMpHtmlParser.prototype.Text = function(c) {\n\tif (c == '<') {\n\t\tvar next = this.data[this.i + 1],\n\t\t\tisLetter = c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');\n\t\tif (isLetter(next)) {\n\t\t\tthis.setText();\n\t\t\tthis.start = this.i + 1;\n\t\t\tthis.state = this.TagName;\n\t\t} else if (next == '/') {\n\t\t\tthis.setText();\n\t\t\tif (isLetter(this.data[++this.i + 1])) {\n\t\t\t\tthis.start = this.i + 1;\n\t\t\t\tthis.state = this.EndTag;\n\t\t\t} else this.Comment();\n\t\t} else if (next == '!' || next == '?') {\n\t\t\tthis.setText();\n\t\t\tthis.Comment();\n\t\t}\n\t}\n}\nMpHtmlParser.prototype.Comment = function() {\n\tvar key;\n\tif (this.data.substring(this.i + 2, this.i + 4) == '--') key = '-->';\n\telse if (this.data.substring(this.i + 2, this.i + 9) == '[CDATA[') key = ']]>';\n\telse key = '>';\n\tif ((this.i = this.data.indexOf(key, this.i + 2)) == -1) this.i = this.data.length;\n\telse this.i += key.length - 1;\n\tthis.start = this.i + 1;\n\tthis.state = this.Text;\n}\nMpHtmlParser.prototype.TagName = function(c) {\n\tif (blankChar[c]) {\n\t\tthis.tagName = this.section();\n\t\twhile (blankChar[this.data[this.i]]) this.i++;\n\t\tif (this.isClose()) this.setNode();\n\t\telse {\n\t\t\tthis.start = this.i;\n\t\t\tthis.state = this.AttrName;\n\t\t}\n\t} else if (this.isClose()) {\n\t\tthis.tagName = this.section();\n\t\tthis.setNode();\n\t}\n}\nMpHtmlParser.prototype.AttrName = function(c) {\n\tif (c == '=' || blankChar[c] || this.isClose()) {\n\t\tthis.attrName = this.section();\n\t\tif (blankChar[c])\n\t\t\twhile (blankChar[this.data[++this.i]]);\n\t\tif (this.data[this.i] == '=') {\n\t\t\twhile (blankChar[this.data[++this.i]]);\n\t\t\tthis.start = this.i--;\n\t\t\tthis.state = this.AttrValue;\n\t\t} else this.setAttr();\n\t}\n}\nMpHtmlParser.prototype.AttrValue = function(c) {\n\tif (c == '\"' || c == \"'\") {\n\t\tthis.start++;\n\t\tif ((this.i = this.data.indexOf(c, this.i + 1)) == -1) return this.i = this.data.length;\n\t\tthis.attrVal = this.section();\n\t\tthis.i++;\n\t} else {\n\t\tfor (; !blankChar[this.data[this.i]] && !this.isClose(); this.i++);\n\t\tthis.attrVal = this.section();\n\t}\n\tthis.setAttr();\n}\nMpHtmlParser.prototype.EndTag = function(c) {\n\tif (blankChar[c] || c == '>' || c == '/') {\n\t\tvar name = this.section().toLowerCase();\n\t\tfor (var i = this.STACK.length; i--;)\n\t\t\tif (this.STACK[i].name == name) break;\n\t\tif (i != -1) {\n\t\t\tvar node;\n\t\t\twhile ((node = this.STACK.pop()).name != name) this.popNode(node);\n\t\t\tthis.popNode(node);\n\t\t} else if (name == 'p' || name == 'br')\n\t\t\tthis.siblings().push({\n\t\t\t\tname,\n\t\t\t\tattrs: {}\n\t\t\t});\n\t\tthis.i = this.data.indexOf('>', this.i);\n\t\tthis.start = this.i + 1;\n\t\tif (this.i == -1) this.i = this.data.length;\n\t\telse this.state = this.Text;\n\t}\n}\nmodule.exports = MpHtmlParser;\n"
  },
  {
    "path": "uview-ui/components/u-parse/libs/config.js",
    "content": "/* 配置文件 */\nvar cfg = {\n\t// 出错占位图\n\terrorImg: null,\n\t// 过滤器函数\n\tfilter: null,\n\t// 代码高亮函数\n\thighlight: null,\n\t// 文本处理函数\n\tonText: null,\n\t// 实体编码列表\n\tentities: {\n\t\tquot: '\"',\n\t\tapos: \"'\",\n\t\tsemi: ';',\n\t\tnbsp: '\\xA0',\n\t\tensp: '\\u2002',\n\t\temsp: '\\u2003',\n\t\tndash: '–',\n\t\tmdash: '—',\n\t\tmiddot: '·',\n\t\tlsquo: '‘',\n\t\trsquo: '’',\n\t\tldquo: '“',\n\t\trdquo: '”',\n\t\tbull: '•',\n\t\thellip: '…'\n\t},\n\tblankChar: makeMap(' ,\\xA0,\\t,\\r,\\n,\\f'),\n\tboolAttrs: makeMap('allowfullscreen,autoplay,autostart,controls,ignore,loop,muted'),\n\t// 块级标签，将被转为 div\n\tblockTags: makeMap('address,article,aside,body,caption,center,cite,footer,header,html,nav,pre,section'),\n\t// 将被移除的标签\n\tignoreTags: makeMap('area,base,canvas,frame,iframe,input,link,map,meta,param,script,source,style,svg,textarea,title,track,wbr'),\n\t// 只能被 rich-text 显示的标签\n\trichOnlyTags: makeMap('a,colgroup,fieldset,legend'),\n\t// 自闭合的标签\n\tselfClosingTags: makeMap('area,base,br,col,circle,ellipse,embed,frame,hr,img,input,line,link,meta,param,path,polygon,rect,source,track,use,wbr'),\n\t// 信任的标签\n\ttrustTags: makeMap('a,abbr,ad,audio,b,blockquote,br,code,col,colgroup,dd,del,dl,dt,div,em,fieldset,h1,h2,h3,h4,h5,h6,hr,i,img,ins,label,legend,li,ol,p,q,source,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,title,ul,video'),\n\t// 默认的标签样式\n\tuserAgentStyles: {\n\t\taddress: 'font-style:italic',\n\t\tbig: 'display:inline;font-size:1.2em',\n\t\tblockquote: 'background-color:#f6f6f6;border-left:3px solid #dbdbdb;color:#6c6c6c;padding:5px 0 5px 10px',\n\t\tcaption: 'display:table-caption;text-align:center',\n\t\tcenter: 'text-align:center',\n\t\tcite: 'font-style:italic',\n\t\tdd: 'margin-left:40px',\n\t\tmark: 'background-color:yellow',\n\t\tpre: 'font-family:monospace;white-space:pre;overflow:scroll',\n\t\ts: 'text-decoration:line-through',\n\t\tsmall: 'display:inline;font-size:0.8em',\n\t\tu: 'text-decoration:underline'\n\t}\n}\n\nfunction makeMap(str) {\n\tvar map = Object.create(null),\n\t\tlist = str.split(',');\n\tfor (var i = list.length; i--;)\n\t\tmap[list[i]] = true;\n\treturn map;\n}\n\n// #ifdef MP-WEIXIN\nif (wx.canIUse('editor')) {\n\tcfg.blockTags.pre = void 0;\n\tcfg.ignoreTags.rp = true;\n\tObject.assign(cfg.richOnlyTags, makeMap('bdi,bdo,caption,rt,ruby'));\n\tObject.assign(cfg.trustTags, makeMap('bdi,bdo,caption,pre,rt,ruby'));\n}\n// #endif\n\n// #ifdef APP-PLUS\ncfg.ignoreTags.iframe = void 0;\nObject.assign(cfg.trustTags, makeMap('embed,iframe'));\n// #endif\n\nmodule.exports = cfg;\n"
  },
  {
    "path": "uview-ui/components/u-parse/libs/handler.wxs",
    "content": "var inline = {\n\tabbr: 1,\n\tb: 1,\n\tbig: 1,\n\tcode: 1,\n\tdel: 1,\n\tem: 1,\n\ti: 1,\n\tins: 1,\n\tlabel: 1,\n\tq: 1,\n\tsmall: 1,\n\tspan: 1,\n\tstrong: 1,\n\tsub: 1,\n\tsup: 1\n}\nmodule.exports = {\n\tuse: function(item) {\n\t\treturn !item.c && !inline[item.name] && (item.attrs.style || '').indexOf('display:inline') == -1\n\t}\n}\n"
  },
  {
    "path": "uview-ui/components/u-parse/libs/trees.vue",
    "content": "<template>\n\t<view :class=\"'interlayer '+(c||'')\" :style=\"s\">\n\t\t<block v-for=\"(n, i) in nodes\" v-bind:key=\"i\">\n\t\t\t<!--图片-->\n\t\t\t<view v-if=\"n.name=='img'\" :class=\"'_img '+n.attrs.class\" :style=\"n.attrs.style\" :data-attrs=\"n.attrs\" @tap.stop=\"imgtap\">\n\t\t\t\t<rich-text v-if=\"ctrl[i]!=0\" :nodes=\"[{attrs:{src:loading&&(ctrl[i]||0)<2?loading:(lazyLoad&&!ctrl[i]?placeholder:(ctrl[i]==3?errorImg:n.attrs.src||'')),alt:n.attrs.alt||'',width:n.attrs.width||'',style:'-webkit-touch-callout:none;max-width:100%;display:block'+(n.attrs.height?';height:'+n.attrs.height:'')},name:'img'}]\" />\n\t\t\t\t<image class=\"_image\" :src=\"lazyLoad&&!ctrl[i]?placeholder:n.attrs.src\" :lazy-load=\"lazyLoad\"\n\t\t\t\t :show-menu-by-longpress=\"!n.attrs.ignore\" :data-i=\"i\" :data-index=\"n.attrs.i\" data-source=\"img\" @load=\"loadImg\"\n\t\t\t\t @error=\"error\" />\n\t\t\t</view>\n\t\t\t<!--文本-->\n\t\t\t<text v-else-if=\"n.type=='text'\" decode>{{n.text}}</text>\n\t\t\t<!--#ifndef MP-BAIDU-->\n\t\t\t<text v-else-if=\"n.name=='br'\">\\n</text>\n\t\t\t<!--#endif-->\n\t\t\t<!--视频-->\n\t\t\t<view v-else-if=\"((n.lazyLoad&&!n.attrs.autoplay)||(n.name=='video'&&!loadVideo))&&ctrl[i]==undefined\" :id=\"n.attrs.id\"\n\t\t\t :class=\"'_video '+(n.attrs.class||'')\" :style=\"n.attrs.style\" :data-i=\"i\" @tap.stop=\"_loadVideo\" />\n\t\t\t<video v-else-if=\"n.name=='video'\" :id=\"n.attrs.id\" :class=\"n.attrs.class\" :style=\"n.attrs.style\" :autoplay=\"n.attrs.autoplay||ctrl[i]==0\"\n\t\t\t :controls=\"n.attrs.controls\" :loop=\"n.attrs.loop\" :muted=\"n.attrs.muted\" :poster=\"n.attrs.poster\" :src=\"n.attrs.source[ctrl[i]||0]\"\n\t\t\t :unit-id=\"n.attrs['unit-id']\" :data-id=\"n.attrs.id\" :data-i=\"i\" data-source=\"video\" @error=\"error\" @play=\"play\" />\n\t\t\t<!--音频-->\n\t\t\t<audio v-else-if=\"n.name=='audio'\" :ref=\"n.attrs.id\" :class=\"n.attrs.class\" :style=\"n.attrs.style\" :author=\"n.attrs.author\"\n\t\t\t :autoplay=\"n.attrs.autoplay\" :controls=\"n.attrs.controls\" :loop=\"n.attrs.loop\" :name=\"n.attrs.name\" :poster=\"n.attrs.poster\"\n\t\t\t :src=\"n.attrs.source[ctrl[i]||0]\" :data-i=\"i\" :data-id=\"n.attrs.id\" data-source=\"audio\" @error.native=\"error\"\n\t\t\t @play.native=\"play\" />\n\t\t\t<!--链接-->\n\t\t\t<view v-else-if=\"n.name=='a'\" :id=\"n.attrs.id\" :class=\"'_a '+(n.attrs.class||'')\" hover-class=\"_hover\" :style=\"n.attrs.style\"\n\t\t\t :data-attrs=\"n.attrs\" @tap.stop=\"linkpress\">\n\t\t\t\t<trees class=\"_span\" c=\"_span\" :nodes=\"n.children\" />\n\t\t\t</view>\n\t\t\t<!--广告-->\n\t\t\t<!--<ad v-else-if=\"n.name=='ad'\" :class=\"n.attrs.class\" :style=\"n.attrs.style\" :unit-id=\"n.attrs['unit-id']\" :appid=\"n.attrs.appid\" :apid=\"n.attrs.apid\" :type=\"n.attrs.type\" :adpid=\"n.attrs.adpid\" data-source=\"ad\" @error=\"error\" />-->\n\t\t\t<!--列表-->\n\t\t\t<view v-else-if=\"n.name=='li'\" :id=\"n.attrs.id\" :class=\"n.attrs.class\" :style=\"(n.attrs.style||'')+';display:flex;flex-direction:row'\">\n\t\t\t\t<view v-if=\"n.type=='ol'\" class=\"_ol-bef\">{{n.num}}</view>\n\t\t\t\t<view v-else class=\"_ul-bef\">\n\t\t\t\t\t<view v-if=\"n.floor%3==0\" class=\"_ul-p1\">█</view>\n\t\t\t\t\t<view v-else-if=\"n.floor%3==2\" class=\"_ul-p2\" />\n\t\t\t\t\t<view v-else class=\"_ul-p1\" style=\"border-radius:50%\">█</view>\n\t\t\t\t</view>\n\t\t\t\t<trees class=\"_li\" c=\"_li\" :nodes=\"n.children\" :lazyLoad=\"lazyLoad\" :loading=\"loading\" />\n\t\t\t</view>\n\t\t\t<!--表格-->\n\t\t\t<view v-else-if=\"n.name=='table'&&n.c&&n.flag\" :id=\"n.attrs.id\" :class=\"n.attrs.class\" :style=\"(n.attrs.style||'')+';display:grid'\">\n\t\t\t\t<trees v-for=\"(cell,n) in n.children\" v-bind:key=\"n\" :class=\"cell.attrs.class\" :c=\"cell.attrs.class\" :style=\"cell.attrs.style\"\n\t\t\t\t :s=\"cell.attrs.style\" :nodes=\"cell.children\" />\n\t\t\t</view>\n\t\t\t<view v-else-if=\"n.name=='table'&&n.c\" :id=\"n.attrs.id\" :class=\"n.attrs.class\" :style=\"(n.attrs.style||'')+';display:table'\">\n\t\t\t\t<view v-for=\"(tbody, o) in n.children\" v-bind:key=\"o\" :class=\"tbody.attrs.class\" :style=\"(tbody.attrs.style||'')+(tbody.name[0]=='t'?';display:table-'+(tbody.name=='tr'?'row':'row-group'):'')\">\n\t\t\t\t\t<view v-for=\"(tr, p) in tbody.children\" v-bind:key=\"p\" :class=\"tr.attrs.class\" :style=\"(tr.attrs.style||'')+(tr.name[0]=='t'?';display:table-'+(tr.name=='tr'?'row':'cell'):'')\">\n\t\t\t\t\t\t<trees v-if=\"tr.name=='td'\" :nodes=\"tr.children\" />\n\t\t\t\t\t\t<trees v-else v-for=\"(td, q) in tr.children\" v-bind:key=\"q\" :class=\"td.attrs.class\" :c=\"td.attrs.class\" :style=\"(td.attrs.style||'')+(td.name[0]=='t'?';display:table-'+(td.name=='tr'?'row':'cell'):'')\"\n\t\t\t\t\t\t :s=\"(td.attrs.style||'')+(td.name[0]=='t'?';display:table-'+(td.name=='tr'?'row':'cell'):'')\" :nodes=\"td.children\" />\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t\t<!--#ifdef APP-PLUS-->\n\t\t\t<iframe v-else-if=\"n.name=='iframe'\" :style=\"n.attrs.style\" :allowfullscreen=\"n.attrs.allowfullscreen\" :frameborder=\"n.attrs.frameborder\"\n\t\t\t :width=\"n.attrs.width\" :height=\"n.attrs.height\" :src=\"n.attrs.src\" />\n\t\t\t<embed v-else-if=\"n.name=='embed'\" :style=\"n.attrs.style\" :width=\"n.attrs.width\" :height=\"n.attrs.height\" :src=\"n.attrs.src\" />\n\t\t\t<!--#endif-->\n\t\t\t<!--富文本-->\n\t\t\t<!--#ifdef MP-WEIXIN || MP-QQ || APP-PLUS-->\n\t\t\t<rich-text v-else-if=\"handler.use(n)\" :id=\"n.attrs.id\" :class=\"'_p __'+n.name\" :nodes=\"[n]\" />\n\t\t\t<!--#endif-->\n\t\t\t<!--#ifndef MP-WEIXIN || MP-QQ || APP-PLUS-->\n\t\t\t<rich-text v-else-if=\"!n.c\" :id=\"n.attrs.id\" :nodes=\"[n]\" style=\"display:inline\" />\n\t\t\t<!--#endif-->\n\t\t\t<trees v-else :class=\"(n.attrs.id||'')+' _'+n.name+' '+(n.attrs.class||'')\" :c=\"(n.attrs.id||'')+' _'+n.name+' '+(n.attrs.class||'')\"\n\t\t\t :style=\"n.attrs.style\" :s=\"n.attrs.style\" :nodes=\"n.children\" :lazyLoad=\"lazyLoad\" :loading=\"loading\" />\n\t\t</block>\n\t</view>\n</template>\n<script module=\"handler\" lang=\"wxs\" src=\"./handler.wxs\"></script>\n<script>\n\tglobal.Parser = {};\n\timport trees from './trees'\n\tconst errorImg = require('../libs/config.js').errorImg;\n\texport default {\n\t\tcomponents: {\n\t\t\ttrees\n\t\t},\n\t\tname: 'trees',\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tctrl: [],\n\t\t\t\tplaceholder: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"300\" height=\"225\"/>',\n\t\t\t\terrorImg,\n\t\t\t\tloadVideo: typeof plus == 'undefined',\n\t\t\t\t// #ifndef MP-ALIPAY\n\t\t\t\tc: '',\n\t\t\t\ts: ''\n\t\t\t\t// #endif\n\t\t\t}\n\t\t},\n\t\tprops: {\n\t\t\tnodes: Array,\n\t\t\tlazyLoad: Boolean,\n\t\t\tloading: String,\n\t\t\t// #ifdef MP-ALIPAY\n\t\t\tc: String,\n\t\t\ts: String\n\t\t\t// #endif\n\t\t},\n\t\tmounted() {\n\t\t\tfor (this.top = this.$parent; this.top.$options.name != 'parser'; this.top = this.top.$parent);\n\t\t\tthis.init();\n\t\t},\n\t\t// #ifdef APP-PLUS\n\t\tbeforeDestroy() {\n\t\t\tthis.observer && this.observer.disconnect();\n\t\t},\n\t\t// #endif\n\t\tmethods: {\n\t\t\tinit() {\n\t\t\t\tfor (var i = this.nodes.length, n; n = this.nodes[--i];) {\n\t\t\t\t\tif (n.name == 'img') {\n\t\t\t\t\t\tthis.top.imgList.setItem(n.attrs.i, n.attrs['original-src'] || n.attrs.src);\n\t\t\t\t\t\t// #ifdef APP-PLUS\n\t\t\t\t\t\tif (this.lazyLoad && !this.observer) {\n\t\t\t\t\t\t\tthis.observer = uni.createIntersectionObserver(this).relativeToViewport({\n\t\t\t\t\t\t\t\ttop: 500,\n\t\t\t\t\t\t\t\tbottom: 500\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tthis.observer.observe('._img', res => {\n\t\t\t\t\t\t\t\t\tif (res.intersectionRatio) {\n\t\t\t\t\t\t\t\t\t\tfor (var j = this.nodes.length; j--;)\n\t\t\t\t\t\t\t\t\t\t\tif (this.nodes[j].name == 'img')\n\t\t\t\t\t\t\t\t\t\t\t\tthis.$set(this.ctrl, j, 1);\n\t\t\t\t\t\t\t\t\t\tthis.observer.disconnect();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}, 0)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// #endif\n\t\t\t\t\t} else if (n.name == 'video' || n.name == 'audio') {\n\t\t\t\t\t\tvar ctx;\n\t\t\t\t\t\tif (n.name == 'video') {\n\t\t\t\t\t\t\tctx = uni.createVideoContext(n.attrs.id\n\t\t\t\t\t\t\t\t// #ifndef MP-BAIDU\n\t\t\t\t\t\t\t\t, this\n\t\t\t\t\t\t\t\t// #endif\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (this.$refs[n.attrs.id])\n\t\t\t\t\t\t\tctx = this.$refs[n.attrs.id][0];\n\t\t\t\t\t\tif (ctx) {\n\t\t\t\t\t\t\tctx.id = n.attrs.id;\n\t\t\t\t\t\t\tthis.top.videoContexts.push(ctx);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// #ifdef APP-PLUS\n\t\t\t\t// APP 上避免 video 错位需要延时渲染\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.loadVideo = true;\n\t\t\t\t}, 1000)\n\t\t\t\t// #endif\n\t\t\t},\n\t\t\tplay(e) {\n\t\t\t\tvar contexts = this.top.videoContexts;\n\t\t\t\tif (contexts.length > 1 && this.top.autopause)\n\t\t\t\t\tfor (var i = contexts.length; i--;)\n\t\t\t\t\t\tif (contexts[i].id != e.currentTarget.dataset.id)\n\t\t\t\t\t\t\tcontexts[i].pause();\n\t\t\t},\n\t\t\timgtap(e) {\n\t\t\t\tvar attrs = e.currentTarget.dataset.attrs;\n\t\t\t\tif (!attrs.ignore) {\n\t\t\t\t\tvar preview = true,\n\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\tid: e.target.id,\n\t\t\t\t\t\t\tsrc: attrs.src,\n\t\t\t\t\t\t\tignore: () => preview = false\n\t\t\t\t\t\t};\n\t\t\t\t\tglobal.Parser.onImgtap && global.Parser.onImgtap(data);\n\t\t\t\t\tthis.top.$emit('imgtap', data);\n\t\t\t\t\tif (preview) {\n\t\t\t\t\t\tvar urls = this.top.imgList,\n\t\t\t\t\t\t\tcurrent = urls[attrs.i] ? parseInt(attrs.i) : (urls = [attrs.src], 0);\n\t\t\t\t\t\tuni.previewImage({\n\t\t\t\t\t\t\tcurrent,\n\t\t\t\t\t\t\turls\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tloadImg(e) {\n\t\t\t\tvar i = e.currentTarget.dataset.i;\n\t\t\t\tif (this.lazyLoad && !this.ctrl[i]) {\n\t\t\t\t\t// #ifdef QUICKAPP-WEBVIEW\n\t\t\t\t\tthis.$set(this.ctrl, i, 0);\n\t\t\t\t\tthis.$nextTick(function() {\n\t\t\t\t\t\t// #endif\n\t\t\t\t\t\t// #ifndef APP-PLUS\n\t\t\t\t\t\tthis.$set(this.ctrl, i, 1);\n\t\t\t\t\t\t// #endif\n\t\t\t\t\t\t// #ifdef QUICKAPP-WEBVIEW\n\t\t\t\t\t})\n\t\t\t\t\t// #endif\n\t\t\t\t} else if (this.loading && this.ctrl[i] != 2) {\n\t\t\t\t\t// #ifdef QUICKAPP-WEBVIEW\n\t\t\t\t\tthis.$set(this.ctrl, i, 0);\n\t\t\t\t\tthis.$nextTick(function() {\n\t\t\t\t\t\t// #endif\n\t\t\t\t\t\tthis.$set(this.ctrl, i, 2);\n\t\t\t\t\t\t// #ifdef QUICKAPP-WEBVIEW\n\t\t\t\t\t})\n\t\t\t\t\t// #endif\n\t\t\t\t}\n\t\t\t},\n\t\t\tlinkpress(e) {\n\t\t\t\tvar jump = true,\n\t\t\t\t\tattrs = e.currentTarget.dataset.attrs;\n\t\t\t\tattrs.ignore = () => jump = false;\n\t\t\t\tglobal.Parser.onLinkpress && global.Parser.onLinkpress(attrs);\n\t\t\t\tthis.top.$emit('linkpress', attrs);\n\t\t\t\tif (jump) {\n\t\t\t\t\t// #ifdef MP\n\t\t\t\t\tif (attrs['app-id']) {\n\t\t\t\t\t\treturn uni.navigateToMiniProgram({\n\t\t\t\t\t\t\tappId: attrs['app-id'],\n\t\t\t\t\t\t\tpath: attrs.path\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\t// #endif\n\t\t\t\t\tif (attrs.href) {\n\t\t\t\t\t\tif (attrs.href[0] == '#') {\n\t\t\t\t\t\t\tif (this.top.useAnchor)\n\t\t\t\t\t\t\t\tthis.top.navigateTo({\n\t\t\t\t\t\t\t\t\tid: attrs.href.substring(1)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t} else if (attrs.href.indexOf('http') == 0 || attrs.href.indexOf('//') == 0) {\n\t\t\t\t\t\t\t// #ifdef APP-PLUS\n\t\t\t\t\t\t\tplus.runtime.openWeb(attrs.href);\n\t\t\t\t\t\t\t// #endif\n\t\t\t\t\t\t\t// #ifndef APP-PLUS\n\t\t\t\t\t\t\tuni.setClipboardData({\n\t\t\t\t\t\t\t\tdata: attrs.href,\n\t\t\t\t\t\t\t\tsuccess: () =>\n\t\t\t\t\t\t\t\t\tuni.showToast({\n\t\t\t\t\t\t\t\t\t\ttitle: '链接已复制'\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t// #endif\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tuni.navigateTo({\n\t\t\t\t\t\t\t\turl: attrs.href,\n\t\t\t\t\t\t\t\tfail() {\n\t\t\t\t\t\t\t\t\tuni.switchTab({\n\t\t\t\t\t\t\t\t\t\turl: attrs.href,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\terror(e) {\n\t\t\t\tvar target = e.currentTarget,\n\t\t\t\t\tsource = target.dataset.source,\n\t\t\t\t\ti = target.dataset.i;\n\t\t\t\tif (source == 'video' || source == 'audio') {\n\t\t\t\t\t// 加载其他 source\n\t\t\t\t\tvar index = this.ctrl[i] ? this.ctrl[i].i + 1 : 1;\n\t\t\t\t\tif (index < this.nodes[i].attrs.source.length)\n\t\t\t\t\t\tthis.$set(this.ctrl, i, index);\n\t\t\t\t\tif (e.detail.__args__)\n\t\t\t\t\t\te.detail = e.detail.__args__[0];\n\t\t\t\t} else if (errorImg && source == 'img') {\n\t\t\t\t\tthis.top.imgList.setItem(target.dataset.index, errorImg);\n\t\t\t\t\tthis.$set(this.ctrl, i, 3);\n\t\t\t\t}\n\t\t\t\tthis.top && this.top.$emit('error', {\n\t\t\t\t\tsource,\n\t\t\t\t\ttarget,\n\t\t\t\t\terrMsg: e.detail.errMsg\n\t\t\t\t});\n\t\t\t},\n\t\t\t_loadVideo(e) {\n\t\t\t\tthis.$set(this.ctrl, e.target.dataset.i, 0);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style>\n\t/* 在这里引入自定义样式 */\n\n\t/* 链接和图片效果 */\n\t._a {\n\t\tdisplay: inline;\n\t\tpadding: 1.5px 0 1.5px 0;\n\t\tcolor: #366092;\n\t\tword-break: break-all;\n\t}\n\n\t._hover {\n\t\ttext-decoration: underline;\n\t\topacity: 0.7;\n\t}\n\n\t._img {\n\t\tdisplay: inline-block;\n\t\tmax-width: 100%;\n\t\toverflow: hidden;\n\t}\n\n\t/* #ifdef MP-WEIXIN */\n\t:host {\n\t\tdisplay: inline;\n\t}\n\n\t/* #endif */\n\n\t/* #ifndef MP-ALIPAY || APP-PLUS */\n\t.interlayer {\n\t\tdisplay: inherit;\n\t\tflex-direction: inherit;\n\t\tflex-wrap: inherit;\n\t\talign-content: inherit;\n\t\talign-items: inherit;\n\t\tjustify-content: inherit;\n\t\twidth: 100%;\n\t\twhite-space: inherit;\n\t}\n\n\t/* #endif */\n\n\t._b,\n\t._strong {\n\t\tfont-weight: bold;\n\t}\n\n\t/* #ifndef MP-ALIPAY */\n\t._blockquote,\n\t._div,\n\t._p,\n\t._ol,\n\t._ul,\n\t._li {\n\t\tdisplay: block;\n\t}\n\n\t/* #endif */\n\n\t._code {\n\t\tfont-family: monospace;\n\t}\n\n\t._del {\n\t\ttext-decoration: line-through;\n\t}\n\n\t._em,\n\t._i {\n\t\tfont-style: italic;\n\t}\n\n\t._h1 {\n\t\tfont-size: 2em;\n\t}\n\n\t._h2 {\n\t\tfont-size: 1.5em;\n\t}\n\n\t._h3 {\n\t\tfont-size: 1.17em;\n\t}\n\n\t._h5 {\n\t\tfont-size: 0.83em;\n\t}\n\n\t._h6 {\n\t\tfont-size: 0.67em;\n\t}\n\n\t._h1,\n\t._h2,\n\t._h3,\n\t._h4,\n\t._h5,\n\t._h6 {\n\t\tdisplay: block;\n\t\tfont-weight: bold;\n\t}\n\n\t._image {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\theight: 360px;\n\t\tmargin-top: -360px;\n\t\topacity: 0;\n\t}\n\n\t._ins {\n\t\ttext-decoration: underline;\n\t}\n\n\t._li {\n\t\tflex: 1;\n\t\twidth: 0;\n\t}\n\n\t._ol-bef {\n\t\twidth: 36px;\n\t\tmargin-right: 5px;\n\t\ttext-align: right;\n\t}\n\n\t._ul-bef {\n\t\tdisplay: block;\n\t\tmargin: 0 12px 0 23px;\n\t\tline-height: normal;\n\t}\n\n\t._ol-bef,\n\t._ul-bef {\n\t\tflex: none;\n\t\tuser-select: none;\n\t}\n\n\t._ul-p1 {\n\t\tdisplay: inline-block;\n\t\twidth: 0.3em;\n\t\theight: 0.3em;\n\t\toverflow: hidden;\n\t\tline-height: 0.3em;\n\t}\n\n\t._ul-p2 {\n\t\tdisplay: inline-block;\n\t\twidth: 0.23em;\n\t\theight: 0.23em;\n\t\tborder: 0.05em solid black;\n\t\tborder-radius: 50%;\n\t}\n\n\t._q::before {\n\t\tcontent: '\"';\n\t}\n\n\t._q::after {\n\t\tcontent: '\"';\n\t}\n\n\t._sub {\n\t\tfont-size: smaller;\n\t\tvertical-align: sub;\n\t}\n\n\t._sup {\n\t\tfont-size: smaller;\n\t\tvertical-align: super;\n\t}\n\n\t/* #ifdef MP-ALIPAY || APP-PLUS || QUICKAPP-WEBVIEW */\n\t._abbr,\n\t._b,\n\t._code,\n\t._del,\n\t._em,\n\t._i,\n\t._ins,\n\t._label,\n\t._q,\n\t._span,\n\t._strong,\n\t._sub,\n\t._sup {\n\t\tdisplay: inline;\n\t}\n\n\t/* #endif */\n\n\t/* #ifdef MP-WEIXIN || MP-QQ */\n\t.__bdo,\n\t.__bdi,\n\t.__ruby,\n\t.__rt {\n\t\tdisplay: inline-block;\n\t}\n\n\t/* #endif */\n\t._video {\n\t\tposition: relative;\n\t\tdisplay: inline-block;\n\t\twidth: 300px;\n\t\theight: 225px;\n\t\tbackground-color: black;\n\t}\n\n\t._video::after {\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tleft: 50%;\n\t\tmargin: -15px 0 0 -15px;\n\t\tcontent: '';\n\t\tborder-color: transparent transparent transparent white;\n\t\tborder-style: solid;\n\t\tborder-width: 15px 0 15px 30px;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-parse/u-parse.vue",
    "content": "<template>\n\t<view>\n\t\t<slot v-if=\"!nodes.length\" />\n\t\t<!--#ifdef APP-PLUS-NVUE-->\n\t\t<web-view id=\"_top\" ref=\"web\" :style=\"'margin-top:-2px;height:'+height+'px'\" @onPostMessage=\"_message\" />\n\t\t<!--#endif-->\n\t\t<!--#ifndef APP-PLUS-NVUE-->\n\t\t<view id=\"_top\" :style=\"showAm+(selectable?';user-select:text;-webkit-user-select:text':'')\">\n\t\t\t<!--#ifdef H5 || MP-360-->\n\t\t\t<div :id=\"'rtf'+uid\"></div>\n\t\t\t<!--#endif-->\n\t\t\t<!--#ifndef H5 || MP-360-->\n\t\t\t<trees :nodes=\"nodes\" :lazyLoad=\"lazyLoad\" :loading=\"loadingImg\" />\n\t\t\t<!--#endif-->\n\t\t</view>\n\t\t<!--#endif-->\n\t</view>\n</template>\n\n<script>\n\tvar search;\n\t// #ifndef H5 || APP-PLUS-NVUE || MP-360\n\timport trees from './libs/trees';\n\tvar cache = {},\n\t\t// #ifdef MP-WEIXIN || MP-TOUTIAO\n\t\tfs = uni.getFileSystemManager ? uni.getFileSystemManager() : null,\n\t\t// #endif\n\t\tParser = require('./libs/MpHtmlParser.js');\n\tvar dom;\n\t// 计算 cache 的 key\n\tfunction hash(str) {\n\t\tfor (var i = str.length, val = 5381; i--;)\n\t\t\tval += (val << 5) + str.charCodeAt(i);\n\t\treturn val;\n\t}\n\t// #endif\n\t// #ifdef H5 || APP-PLUS-NVUE || MP-360\n\tvar {\n\t\twindowWidth,\n\t\tplatform\n\t} = uni.getSystemInfoSync(),\n\t\tcfg = require('./libs/config.js');\n\t// #endif\n\t// #ifdef APP-PLUS-NVUE\n\tvar weexDom = weex.requireModule('dom');\n\t// #endif\n\t/**\n\t * Parser 富文本组件\n\t * @tutorial https://github.com/jin-yufeng/Parser\n\t * @property {String} html 富文本数据\n\t * @property {Boolean} autopause 是否在播放一个视频时自动暂停其他视频\n\t * @property {Boolean} autoscroll 是否自动给所有表格添加一个滚动层\n\t * @property {Boolean} autosetTitle 是否自动将 title 标签中的内容设置到页面标题\n\t * @property {Number} compress 压缩等级\n\t * @property {String} domain 图片、视频等链接的主域名\n\t * @property {Boolean} lazyLoad 是否开启图片懒加载\n\t * @property {String} loadingImg 图片加载完成前的占位图\n\t * @property {Boolean} selectable 是否开启长按复制\n\t * @property {Object} tagStyle 标签的默认样式\n\t * @property {Boolean} showWithAnimation 是否使用渐显动画\n\t * @property {Boolean} useAnchor 是否使用锚点\n\t * @property {Boolean} useCache 是否缓存解析结果\n\t * @event {Function} parse 解析完成事件\n\t * @event {Function} load dom 加载完成事件\n\t * @event {Function} ready 所有图片加载完毕事件\n\t * @event {Function} error 错误事件\n\t * @event {Function} imgtap 图片点击事件\n\t * @event {Function} linkpress 链接点击事件\n\t * @author JinYufeng\n\t * @version 20201029\n\t * @listens MIT\n\t */\n\texport default {\n\t\tname: 'parser',\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\t// #ifdef H5 || MP-360\n\t\t\t\tuid: this._uid,\n\t\t\t\t// #endif\n\t\t\t\t// #ifdef APP-PLUS-NVUE\n\t\t\t\theight: 1,\n\t\t\t\t// #endif\n\t\t\t\t// #ifndef APP-PLUS-NVUE\n\t\t\t\tshowAm: '',\n\t\t\t\t// #endif\n\t\t\t\tnodes: []\n\t\t\t}\n\t\t},\n\t\t// #ifndef H5 || APP-PLUS-NVUE || MP-360\n\t\tcomponents: {\n\t\t\ttrees\n\t\t},\n\t\t// #endif\n\t\tprops: {\n\t\t\thtml: String,\n\t\t\tautopause: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\tautoscroll: Boolean,\n\t\t\tautosetTitle: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// #ifndef H5 || APP-PLUS-NVUE || MP-360\n\t\t\tcompress: Number,\n\t\t\tloadingImg: String,\n\t\t\tuseCache: Boolean,\n\t\t\t// #endif\n\t\t\tdomain: String,\n\t\t\tlazyLoad: Boolean,\n\t\t\tselectable: Boolean,\n\t\t\ttagStyle: Object,\n\t\t\tshowWithAnimation: Boolean,\n\t\t\tuseAnchor: Boolean\n\t\t},\n\t\twatch: {\n\t\t\thtml(html) {\n\t\t\t\tthis.setContent(html);\n\t\t\t}\n\t\t},\n\t\tcreated() {\n\t\t\t// 图片数组\n\t\t\tthis.imgList = [];\n\t\t\tthis.imgList.each = function(f) {\n\t\t\t\tfor (var i = 0, len = this.length; i < len; i++)\n\t\t\t\t\tthis.setItem(i, f(this[i], i, this));\n\t\t\t}\n\t\t\tthis.imgList.setItem = function(i, src) {\n\t\t\t\tif (i == void 0 || !src) return;\n\t\t\t\t// #ifndef MP-ALIPAY || APP-PLUS\n\t\t\t\t// 去重\n\t\t\t\tif (src.indexOf('http') == 0 && this.includes(src)) {\n\t\t\t\t\tvar newSrc = src.split('://')[0];\n\t\t\t\t\tfor (var j = newSrc.length, c; c = src[j]; j++) {\n\t\t\t\t\t\tif (c == '/' && src[j - 1] != '/' && src[j + 1] != '/') break;\n\t\t\t\t\t\tnewSrc += Math.random() > 0.5 ? c.toUpperCase() : c;\n\t\t\t\t\t}\n\t\t\t\t\tnewSrc += src.substr(j);\n\t\t\t\t\treturn this[i] = newSrc;\n\t\t\t\t}\n\t\t\t\t// #endif\n\t\t\t\tthis[i] = src;\n\t\t\t\t// 暂存 data src\n\t\t\t\tif (src.includes('data:image')) {\n\t\t\t\t\tvar filePath, info = src.match(/data:image\\/(\\S+?);(\\S+?),(.+)/);\n\t\t\t\t\tif (!info) return;\n\t\t\t\t\t// #ifdef MP-WEIXIN || MP-TOUTIAO\n\t\t\t\t\tfilePath = `${wx.env.USER_DATA_PATH}/${Date.now()}.${info[1]}`;\n\t\t\t\t\tfs && fs.writeFile({\n\t\t\t\t\t\tfilePath,\n\t\t\t\t\t\tdata: info[3],\n\t\t\t\t\t\tencoding: info[2],\n\t\t\t\t\t\tsuccess: () => this[i] = filePath\n\t\t\t\t\t})\n\t\t\t\t\t// #endif\n\t\t\t\t\t// #ifdef APP-PLUS\n\t\t\t\t\tfilePath = `_doc/parser_tmp/${Date.now()}.${info[1]}`;\n\t\t\t\t\tvar bitmap = new plus.nativeObj.Bitmap();\n\t\t\t\t\tbitmap.loadBase64Data(src, () => {\n\t\t\t\t\t\tbitmap.save(filePath, {}, () => {\n\t\t\t\t\t\t\tbitmap.clear()\n\t\t\t\t\t\t\tthis[i] = filePath;\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\t// #endif\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tmounted() {\n\t\t\t// #ifdef H5 || MP-360\n\t\t\tthis.document = document.getElementById('rtf' + this._uid);\n\t\t\t// #endif\n\t\t\t// #ifndef H5 || APP-PLUS-NVUE || MP-360\n\t\t\tif (dom) this.document = new dom(this);\n\t\t\t// #endif\n\t\t\tif (search) this.search = args => search(this, args);\n\t\t\t// #ifdef APP-PLUS-NVUE\n\t\t\tthis.document = this.$refs.web;\n\t\t\tsetTimeout(() => {\n\t\t\t\t// #endif\n\t\t\t\tif (this.html) this.setContent(this.html);\n\t\t\t\t// #ifdef APP-PLUS-NVUE\n\t\t\t}, 30)\n\t\t\t// #endif\n\t\t},\n\t\tbeforeDestroy() {\n\t\t\t// #ifdef H5 || MP-360\n\t\t\tif (this._observer) this._observer.disconnect();\n\t\t\t// #endif\n\t\t\tthis.imgList.each(src => {\n\t\t\t\t// #ifdef APP-PLUS\n\t\t\t\tif (src && src.includes('_doc')) {\n\t\t\t\t\tplus.io.resolveLocalFileSystemURL(src, entry => {\n\t\t\t\t\t\tentry.remove();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// #endif\n\t\t\t\t// #ifdef MP-WEIXIN || MP-TOUTIAO\n\t\t\t\tif (src && src.includes(uni.env.USER_DATA_PATH))\n\t\t\t\t\tfs && fs.unlink({\n\t\t\t\t\t\tfilePath: src\n\t\t\t\t\t})\n\t\t\t\t// #endif\n\t\t\t})\n\t\t\tclearInterval(this._timer);\n\t\t},\n\t\tmethods: {\n\t\t\t// 设置富文本内容\n\t\t\tsetContent(html, append) {\n\t\t\t\t// #ifdef APP-PLUS-NVUE\n\t\t\t\tif (!html)\n\t\t\t\t\treturn this.height = 1;\n\t\t\t\tif (append)\n\t\t\t\t\tthis.$refs.web.evalJs(\"var b=document.createElement('div');b.innerHTML='\" + html.replace(/'/g, \"\\\\'\") +\n\t\t\t\t\t\t\"';document.getElementById('parser').appendChild(b)\");\n\t\t\t\telse {\n\t\t\t\t\thtml =\n\t\t\t\t\t\t'<meta charset=\"utf-8\" /><meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\"><style>html,body{width:100%;height:100%;overflow:hidden}body{margin:0}</style><base href=\"' +\n\t\t\t\t\t\tthis.domain + '\"><div id=\"parser\"' + (this.selectable ? '>' : ' style=\"user-select:none\">') + this._handleHtml(html).replace(/\\n/g, '\\\\n') +\n\t\t\t\t\t\t'</div><script>\"use strict\";function e(e){if(window.__dcloud_weex_postMessage||window.__dcloud_weex_){var t={data:[e]};window.__dcloud_weex_postMessage?window.__dcloud_weex_postMessage(t):window.__dcloud_weex_.postMessage(JSON.stringify(t))}}document.body.onclick=function(){e({action:\"click\"})},' +\n\t\t\t\t\t\t(this.showWithAnimation ? 'document.body.style.animation=\"_show .5s\",' : '') +\n\t\t\t\t\t\t'setTimeout(function(){e({action:\"load\",text:document.body.innerText,height:document.getElementById(\"parser\").scrollHeight})},50);\\x3c/script>';\n\t\t\t\t\tif (platform == 'android') html = html.replace(/%/g, '%25');\n\t\t\t\t\tthis.$refs.web.evalJs(\"document.write('\" + html.replace(/'/g, \"\\\\'\") + \"');document.close()\");\n\t\t\t\t}\n\t\t\t\tthis.$refs.web.evalJs(\n\t\t\t\t\t'var t=document.getElementsByTagName(\"title\");t.length&&e({action:\"getTitle\",title:t[0].innerText});for(var o,n=document.getElementsByTagName(\"style\"),r=1;o=n[r++];)o.innerHTML=o.innerHTML.replace(/body/g,\"#parser\");for(var a,c=document.getElementsByTagName(\"img\"),s=[],i=0==c.length,d=0,l=0,g=0;a=c[l];l++)parseInt(a.style.width||a.getAttribute(\"width\"))>' +\n\t\t\t\t\twindowWidth + '&&(a.style.height=\"auto\"),a.onload=function(){++d==c.length&&(i=!0)},a.onerror=function(){++d==c.length&&(i=!0),' + (cfg.errorImg ? 'this.src=\"' + cfg.errorImg + '\",' : '') +\n\t\t\t\t\t'e({action:\"error\",source:\"img\",target:this})},a.hasAttribute(\"ignore\")||\"A\"==a.parentElement.nodeName||(a.i=g++,s.push(a.getAttribute(\"original-src\")||a.src||a.getAttribute(\"data-src\")),a.onclick=function(t){t.stopPropagation(),e({action:\"preview\",img:{i:this.i,src:this.src}})});e({action:\"getImgList\",imgList:s});for(var u,m=document.getElementsByTagName(\"a\"),f=0;u=m[f];f++)u.onclick=function(m){m.stopPropagation();var t,o=this.getAttribute(\"href\");if(\"#\"==o[0]){var n=document.getElementById(o.substr(1));n&&(t=n.offsetTop)}return e({action:\"linkpress\",href:o,offset:t}),!1};for(var h,y=document.getElementsByTagName(\"video\"),v=0;h=y[v];v++)h.style.maxWidth=\"100%\",h.onerror=function(){e({action:\"error\",source:\"video\",target:this})}' +\n\t\t\t\t\t(this.autopause ? ',h.onplay=function(){for(var e,t=0;e=y[t];t++)e!=this&&e.pause()}' : '') +\n\t\t\t\t\t';for(var _,p=document.getElementsByTagName(\"audio\"),w=0;_=p[w];w++)_.onerror=function(){e({action:\"error\",source:\"audio\",target:this})};' +\n\t\t\t\t\t(this.autoscroll ? 'for(var T,E=document.getElementsByTagName(\"table\"),B=0;T=E[B];B++){var N=document.createElement(\"div\");N.style.overflow=\"scroll\",T.parentNode.replaceChild(N,T),N.appendChild(T)}' : '') +\n\t\t\t\t\t'var x=document.getElementById(\"parser\");clearInterval(window.timer),window.timer=setInterval(function(){i&&clearInterval(window.timer),e({action:\"ready\",ready:i,height:x.scrollHeight})},350)'\n\t\t\t\t)\n\t\t\t\tthis.nodes = [1];\n\t\t\t\t// #endif\n\t\t\t\t// #ifdef H5 || MP-360\n\t\t\t\tif (!html) {\n\t\t\t\t\tif (this.rtf && !append) this.rtf.parentNode.removeChild(this.rtf);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar div = document.createElement('div');\n\t\t\t\tif (!append) {\n\t\t\t\t\tif (this.rtf) this.rtf.parentNode.removeChild(this.rtf);\n\t\t\t\t\tthis.rtf = div;\n\t\t\t\t} else {\n\t\t\t\t\tif (!this.rtf) this.rtf = div;\n\t\t\t\t\telse this.rtf.appendChild(div);\n\t\t\t\t}\n\t\t\t\tdiv.innerHTML = this._handleHtml(html, append);\n\t\t\t\tfor (var styles = this.rtf.getElementsByTagName('style'), i = 0, style; style = styles[i++];) {\n\t\t\t\t\tstyle.innerHTML = style.innerHTML.replace(/body/g, '#rtf' + this._uid);\n\t\t\t\t\tstyle.setAttribute('scoped', 'true');\n\t\t\t\t}\n\t\t\t\t// 懒加载\n\t\t\t\tif (!this._observer && this.lazyLoad && IntersectionObserver) {\n\t\t\t\t\tthis._observer = new IntersectionObserver(changes => {\n\t\t\t\t\t\tfor (let item, i = 0; item = changes[i++];) {\n\t\t\t\t\t\t\tif (item.isIntersecting) {\n\t\t\t\t\t\t\t\titem.target.src = item.target.getAttribute('data-src');\n\t\t\t\t\t\t\t\titem.target.removeAttribute('data-src');\n\t\t\t\t\t\t\t\tthis._observer.unobserve(item.target);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, {\n\t\t\t\t\t\trootMargin: '500px 0px 500px 0px'\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tvar _ts = this;\n\t\t\t\t// 获取标题\n\t\t\t\tvar title = this.rtf.getElementsByTagName('title');\n\t\t\t\tif (title.length && this.autosetTitle)\n\t\t\t\t\tuni.setNavigationBarTitle({\n\t\t\t\t\t\ttitle: title[0].innerText\n\t\t\t\t\t})\n\t\t\t\t// 填充 domain\n\t\t\t\tvar fill = target => {\n\t\t\t\t\tvar src = target.getAttribute('src');\n\t\t\t\t\tif (this.domain && src) {\n\t\t\t\t\t\tif (src[0] == '/') {\n\t\t\t\t\t\t\tif (src[1] == '/')\n\t\t\t\t\t\t\t\ttarget.src = (this.domain.includes('://') ? this.domain.split('://')[0] : '') + ':' + src;\n\t\t\t\t\t\t\telse target.src = this.domain + src;\n\t\t\t\t\t\t} else if (!src.includes('://') && src.indexOf('data:') != 0) target.src = this.domain + '/' + src;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// 图片处理\n\t\t\t\tthis.imgList.length = 0;\n\t\t\t\tvar imgs = this.rtf.getElementsByTagName('img');\n\t\t\t\tfor (let i = 0, j = 0, img; img = imgs[i]; i++) {\n\t\t\t\t\tif (parseInt(img.style.width || img.getAttribute('width')) > windowWidth)\n\t\t\t\t\t\timg.style.height = 'auto';\n\t\t\t\t\tfill(img);\n\t\t\t\t\tif (!img.hasAttribute('ignore') && img.parentElement.nodeName != 'A') {\n\t\t\t\t\t\timg.i = j++;\n\t\t\t\t\t\t_ts.imgList.push(img.getAttribute('original-src') || img.src || img.getAttribute('data-src'));\n\t\t\t\t\t\timg.onclick = function(e) {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tvar preview = true;\n\t\t\t\t\t\t\tthis.ignore = () => preview = false;\n\t\t\t\t\t\t\t_ts.$emit('imgtap', this);\n\t\t\t\t\t\t\tif (preview) {\n\t\t\t\t\t\t\t\tuni.previewImage({\n\t\t\t\t\t\t\t\t\tcurrent: this.i,\n\t\t\t\t\t\t\t\t\turls: _ts.imgList\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\timg.onerror = function() {\n\t\t\t\t\t\tif (cfg.errorImg)\n\t\t\t\t\t\t\t_ts.imgList[this.i] = this.src = cfg.errorImg;\n\t\t\t\t\t\t_ts.$emit('error', {\n\t\t\t\t\t\t\tsource: 'img',\n\t\t\t\t\t\t\ttarget: this\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (_ts.lazyLoad && this._observer && img.src && img.i != 0) {\n\t\t\t\t\t\timg.setAttribute('data-src', img.src);\n\t\t\t\t\t\timg.removeAttribute('src');\n\t\t\t\t\t\tthis._observer.observe(img);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// 链接处理\n\t\t\t\tvar links = this.rtf.getElementsByTagName('a');\n\t\t\t\tfor (var link of links) {\n\t\t\t\t\tlink.onclick = function(e) {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tvar jump = true,\n\t\t\t\t\t\t\thref = this.getAttribute('href');\n\t\t\t\t\t\t_ts.$emit('linkpress', {\n\t\t\t\t\t\t\thref,\n\t\t\t\t\t\t\tignore: () => jump = false\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (jump && href) {\n\t\t\t\t\t\t\tif (href[0] == '#') {\n\t\t\t\t\t\t\t\tif (_ts.useAnchor) {\n\t\t\t\t\t\t\t\t\t_ts.navigateTo({\n\t\t\t\t\t\t\t\t\t\tid: href.substr(1)\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (href.indexOf('http') == 0 || href.indexOf('//') == 0)\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tuni.navigateTo({\n\t\t\t\t\t\t\t\t\turl: href\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// 视频处理\n\t\t\t\tvar videos = this.rtf.getElementsByTagName('video');\n\t\t\t\t_ts.videoContexts = videos;\n\t\t\t\tfor (let video, i = 0; video = videos[i++];) {\n\t\t\t\t\tfill(video);\n\t\t\t\t\tvideo.style.maxWidth = '100%';\n\t\t\t\t\tvideo.onerror = function() {\n\t\t\t\t\t\t_ts.$emit('error', {\n\t\t\t\t\t\t\tsource: 'video',\n\t\t\t\t\t\t\ttarget: this\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tvideo.onplay = function() {\n\t\t\t\t\t\tif (_ts.autopause)\n\t\t\t\t\t\t\tfor (let item, i = 0; item = _ts.videoContexts[i++];)\n\t\t\t\t\t\t\t\tif (item != this) item.pause();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// 音频处理\n\t\t\t\tvar audios = this.rtf.getElementsByTagName('audio');\n\t\t\t\tfor (var audio of audios) {\n\t\t\t\t\tfill(audio);\n\t\t\t\t\taudio.onerror = function() {\n\t\t\t\t\t\t_ts.$emit('error', {\n\t\t\t\t\t\t\tsource: 'audio',\n\t\t\t\t\t\t\ttarget: this\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// 表格处理\n\t\t\t\tif (this.autoscroll) {\n\t\t\t\t\tvar tables = this.rtf.getElementsByTagName('table');\n\t\t\t\t\tfor (var table of tables) {\n\t\t\t\t\t\tlet div = document.createElement('div');\n\t\t\t\t\t\tdiv.style.overflow = 'scroll';\n\t\t\t\t\t\ttable.parentNode.replaceChild(div, table);\n\t\t\t\t\t\tdiv.appendChild(table);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!append) this.document.appendChild(this.rtf);\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.nodes = [1];\n\t\t\t\t\tthis.$emit('load');\n\t\t\t\t});\n\t\t\t\tsetTimeout(() => this.showAm = '', 500);\n\t\t\t\t// #endif\n\t\t\t\t// #ifndef APP-PLUS-NVUE\n\t\t\t\t// #ifndef H5 || MP-360\n\t\t\t\tvar nodes;\n\t\t\t\tif (!html) return this.nodes = [];\n\t\t\t\tvar parser = new Parser(html, this);\n\t\t\t\t// 缓存读取\n\t\t\t\tif (this.useCache) {\n\t\t\t\t\tvar hashVal = hash(html);\n\t\t\t\t\tif (cache[hashVal])\n\t\t\t\t\t\tnodes = cache[hashVal];\n\t\t\t\t\telse {\n\t\t\t\t\t\tnodes = parser.parse();\n\t\t\t\t\t\tcache[hashVal] = nodes;\n\t\t\t\t\t}\n\t\t\t\t} else nodes = parser.parse();\n\t\t\t\tthis.$emit('parse', nodes);\n\t\t\t\tif (append) this.nodes = this.nodes.concat(nodes);\n\t\t\t\telse this.nodes = nodes;\n\t\t\t\tif (nodes.length && nodes.title && this.autosetTitle)\n\t\t\t\t\tuni.setNavigationBarTitle({\n\t\t\t\t\t\ttitle: nodes.title\n\t\t\t\t\t})\n\t\t\t\tif (this.imgList) this.imgList.length = 0;\n\t\t\t\tthis.videoContexts = [];\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t(function f(cs) {\n\t\t\t\t\t\tfor (var i = cs.length; i--;) {\n\t\t\t\t\t\t\tif (cs[i].top) {\n\t\t\t\t\t\t\t\tcs[i].controls = [];\n\t\t\t\t\t\t\t\tcs[i].init();\n\t\t\t\t\t\t\t\tf(cs[i].$children);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})(this.$children)\n\t\t\t\t\tthis.$emit('load');\n\t\t\t\t})\n\t\t\t\t// #endif\n\t\t\t\tvar height;\n\t\t\t\tclearInterval(this._timer);\n\t\t\t\tthis._timer = setInterval(() => {\n\t\t\t\t\t// #ifdef H5 || MP-360\n\t\t\t\t\tthis.rect = this.rtf.getBoundingClientRect();\n\t\t\t\t\t// #endif\n\t\t\t\t\t// #ifndef H5 || MP-360\n\t\t\t\t\tuni.createSelectorQuery().in(this)\n\t\t\t\t\t\t.select('#_top').boundingClientRect().exec(res => {\n\t\t\t\t\t\t\tif (!res) return;\n\t\t\t\t\t\t\tthis.rect = res[0];\n\t\t\t\t\t\t\t// #endif\n\t\t\t\t\t\t\tif (this.rect.height == height) {\n\t\t\t\t\t\t\t\tthis.$emit('ready', this.rect)\n\t\t\t\t\t\t\t\tclearInterval(this._timer);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\theight = this.rect.height;\n\t\t\t\t\t\t\t// #ifndef H5 || MP-360\n\t\t\t\t\t\t});\n\t\t\t\t\t// #endif\n\t\t\t\t}, 350);\n\t\t\t\tif (this.showWithAnimation && !append) this.showAm = 'animation:_show .5s';\n\t\t\t\t// #endif\n\t\t\t},\n\t\t\t// 获取文本内容\n\t\t\tgetText(ns = this.nodes) {\n\t\t\t\tvar txt = '';\n\t\t\t\t// #ifdef APP-PLUS-NVUE\n\t\t\t\ttxt = this._text;\n\t\t\t\t// #endif\n\t\t\t\t// #ifdef H5 || MP-360\n\t\t\t\ttxt = this.rtf.innerText;\n\t\t\t\t// #endif\n\t\t\t\t// #ifndef H5 || APP-PLUS-NVUE || MP-360\n\t\t\t\tfor (var i = 0, n; n = ns[i++];) {\n\t\t\t\t\tif (n.type == 'text') txt += n.text.replace(/&nbsp;/g, '\\u00A0').replace(/&lt;/g, '<').replace(/&gt;/g, '>')\n\t\t\t\t\t\t.replace(/&amp;/g, '&');\n\t\t\t\t\telse if (n.type == 'br') txt += '\\n';\n\t\t\t\t\telse {\n\t\t\t\t\t\t// 块级标签前后加换行\n\t\t\t\t\t\tvar block = n.name == 'p' || n.name == 'div' || n.name == 'tr' || n.name == 'li' || (n.name[0] == 'h' && n.name[1] >\n\t\t\t\t\t\t\t'0' && n.name[1] < '7');\n\t\t\t\t\t\tif (block && txt && txt[txt.length - 1] != '\\n') txt += '\\n';\n\t\t\t\t\t\tif (n.children) txt += this.getText(n.children);\n\t\t\t\t\t\tif (block && txt[txt.length - 1] != '\\n') txt += '\\n';\n\t\t\t\t\t\telse if (n.name == 'td' || n.name == 'th') txt += '\\t';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// #endif\n\t\t\t\treturn txt;\n\t\t\t},\n\t\t\t// 锚点跳转\n\t\t\tin (obj) {\n\t\t\t\tif (obj.page && obj.selector && obj.scrollTop) this._in = obj;\n\t\t\t},\n\t\t\tnavigateTo(obj) {\n\t\t\t\tif (!this.useAnchor) return obj.fail && obj.fail('Anchor is disabled');\n\t\t\t\t// #ifdef APP-PLUS-NVUE\n\t\t\t\tif (!obj.id)\n\t\t\t\t\tweexDom.scrollToElement(this.$refs.web);\n\t\t\t\telse\n\t\t\t\t\tthis.$refs.web.evalJs('var pos=document.getElementById(\"' + obj.id +\n\t\t\t\t\t\t'\");if(pos)post({action:\"linkpress\",href:\"#\",offset:pos.offsetTop+' + (obj.offset || 0) + '})');\n\t\t\t\tobj.success && obj.success();\n\t\t\t\t// #endif\n\t\t\t\t// #ifndef APP-PLUS-NVUE\n\t\t\t\tvar d = ' ';\n\t\t\t\t// #ifdef MP-WEIXIN || MP-QQ || MP-TOUTIAO\n\t\t\t\td = '>>>';\n\t\t\t\t// #endif\n\t\t\t\tvar selector = uni.createSelectorQuery().in(this._in ? this._in.page : this).select((this._in ? this._in.selector :\n\t\t\t\t\t'#_top') + (obj.id ? `${d}#${obj.id},${this._in?this._in.selector:'#_top'}${d}.${obj.id}` : '')).boundingClientRect();\n\t\t\t\tif (this._in) selector.select(this._in.selector).scrollOffset().select(this._in.selector).boundingClientRect();\n\t\t\t\telse selector.selectViewport().scrollOffset();\n\t\t\t\tselector.exec(res => {\n\t\t\t\t\tif (!res[0]) return obj.fail && obj.fail('Label not found')\n\t\t\t\t\tvar scrollTop = res[1].scrollTop + res[0].top - (res[2] ? res[2].top : 0) + (obj.offset || 0);\n\t\t\t\t\tif (this._in) this._in.page[this._in.scrollTop] = scrollTop;\n\t\t\t\t\telse uni.pageScrollTo({\n\t\t\t\t\t\tscrollTop,\n\t\t\t\t\t\tduration: 300\n\t\t\t\t\t})\n\t\t\t\t\tobj.success && obj.success();\n\t\t\t\t})\n\t\t\t\t// #endif\n\t\t\t},\n\t\t\t// 获取视频对象\n\t\t\tgetVideoContext(id) {\n\t\t\t\t// #ifndef APP-PLUS-NVUE\n\t\t\t\tif (!id) return this.videoContexts;\n\t\t\t\telse\n\t\t\t\t\tfor (var i = this.videoContexts.length; i--;)\n\t\t\t\t\t\tif (this.videoContexts[i].id == id) return this.videoContexts[i];\n\t\t\t\t// #endif\n\t\t\t},\n\t\t\t// #ifdef H5 || APP-PLUS-NVUE || MP-360\n\t\t\t_handleHtml(html, append) {\n\t\t\t\tif (!append) {\n\t\t\t\t\t// 处理 tag-style 和 userAgentStyles\n\t\t\t\t\tvar style = '<style>@keyframes _show{0%{opacity:0}100%{opacity:1}}img{max-width:100%}';\n\t\t\t\t\tfor (var item in cfg.userAgentStyles)\n\t\t\t\t\t\tstyle += `${item}{${cfg.userAgentStyles[item]}}`;\n\t\t\t\t\tfor (item in this.tagStyle)\n\t\t\t\t\t\tstyle += `${item}{${this.tagStyle[item]}}`;\n\t\t\t\t\tstyle += '</style>';\n\t\t\t\t\thtml = style + html;\n\t\t\t\t}\n\t\t\t\t// 处理 rpx\n\t\t\t\tif (html.includes('rpx'))\n\t\t\t\t\thtml = html.replace(/[0-9.]+\\s*rpx/g, $ => (parseFloat($) * windowWidth / 750) + 'px');\n\t\t\t\treturn html;\n\t\t\t},\n\t\t\t// #endif\n\t\t\t// #ifdef APP-PLUS-NVUE\n\t\t\t_message(e) {\n\t\t\t\t// 接收 web-view 消息\n\t\t\t\tvar d = e.detail.data[0];\n\t\t\t\tswitch (d.action) {\n\t\t\t\t\tcase 'load':\n\t\t\t\t\t\tthis.$emit('load');\n\t\t\t\t\t\tthis.height = d.height;\n\t\t\t\t\t\tthis._text = d.text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'getTitle':\n\t\t\t\t\t\tif (this.autosetTitle)\n\t\t\t\t\t\t\tuni.setNavigationBarTitle({\n\t\t\t\t\t\t\t\ttitle: d.title\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'getImgList':\n\t\t\t\t\t\tthis.imgList.length = 0;\n\t\t\t\t\t\tfor (var i = d.imgList.length; i--;)\n\t\t\t\t\t\t\tthis.imgList.setItem(i, d.imgList[i]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'preview':\n\t\t\t\t\t\tvar preview = true;\n\t\t\t\t\t\td.img.ignore = () => preview = false;\n\t\t\t\t\t\tthis.$emit('imgtap', d.img);\n\t\t\t\t\t\tif (preview)\n\t\t\t\t\t\t\tuni.previewImage({\n\t\t\t\t\t\t\t\tcurrent: d.img.i,\n\t\t\t\t\t\t\t\turls: this.imgList\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'linkpress':\n\t\t\t\t\t\tvar jump = true,\n\t\t\t\t\t\t\thref = d.href;\n\t\t\t\t\t\tthis.$emit('linkpress', {\n\t\t\t\t\t\t\thref,\n\t\t\t\t\t\t\tignore: () => jump = false\n\t\t\t\t\t\t})\n\t\t\t\t\t\tif (jump && href) {\n\t\t\t\t\t\t\tif (href[0] == '#') {\n\t\t\t\t\t\t\t\tif (this.useAnchor)\n\t\t\t\t\t\t\t\t\tweexDom.scrollToElement(this.$refs.web, {\n\t\t\t\t\t\t\t\t\t\toffset: d.offset\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t} else if (href.includes('://'))\n\t\t\t\t\t\t\t\tplus.runtime.openWeb(href);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tuni.navigateTo({\n\t\t\t\t\t\t\t\t\turl: href\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'error':\n\t\t\t\t\t\tif (d.source == 'img' && cfg.errorImg)\n\t\t\t\t\t\t\tthis.imgList.setItem(d.target.i, cfg.errorImg);\n\t\t\t\t\t\tthis.$emit('error', {\n\t\t\t\t\t\t\tsource: d.source,\n\t\t\t\t\t\t\ttarget: d.target\n\t\t\t\t\t\t})\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'ready':\n\t\t\t\t\t\tthis.height = d.height;\n\t\t\t\t\t\tif (d.ready) uni.createSelectorQuery().in(this).select('#_top').boundingClientRect().exec(res => {\n\t\t\t\t\t\t\tthis.rect = res[0];\n\t\t\t\t\t\t\tthis.$emit('ready', res[0]);\n\t\t\t\t\t\t})\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'click':\n\t\t\t\t\t\tthis.$emit('click');\n\t\t\t\t\t\tthis.$emit('tap');\n\t\t\t\t}\n\t\t\t},\n\t\t\t// #endif\n\t\t}\n\t}\n</script>\n\n<style>\n\t@keyframes _show {\n\t\t0% {\n\t\t\topacity: 0;\n\t\t}\n\n\t\t100% {\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t/* #ifdef MP-WEIXIN */\n\t:host {\n\t\tdisplay: block;\n\t\toverflow: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\t}\n\n\t/* #endif */\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-picker/u-picker.vue",
    "content": "<template>\n\t<u-popup :maskCloseAble=\"maskCloseAble\" mode=\"bottom\" :popup=\"false\" v-model=\"value\" length=\"auto\" :safeAreaInsetBottom=\"safeAreaInsetBottom\" @close=\"close\" :z-index=\"uZIndex\">\n\t\t<view class=\"u-datetime-picker\">\n\t\t\t<view class=\"u-picker-header\" @touchmove.stop.prevent=\"\">\n\t\t\t\t<view class=\"u-btn-picker u-btn-picker--tips\" \n\t\t\t\t\t:style=\"{ color: cancelColor }\" \n\t\t\t\t\thover-class=\"u-opacity\" \n\t\t\t\t\t:hover-stay-time=\"150\" \n\t\t\t\t\t@tap=\"getResult('cancel')\"\n\t\t\t\t>{{cancelText}}</view>\n\t\t\t\t<view class=\"u-picker__title\">{{ title }}</view>\n\t\t\t\t<view\n\t\t\t\t\tclass=\"u-btn-picker u-btn-picker--primary\"\n\t\t\t\t\t:style=\"{ color: moving ? cancelColor : confirmColor }\"\n\t\t\t\t\thover-class=\"u-opacity\"\n\t\t\t\t\t:hover-stay-time=\"150\"\n\t\t\t\t\t@touchmove.stop=\"\"\n\t\t\t\t\t@tap.stop=\"getResult('confirm')\"\n\t\t\t\t>\n\t\t\t\t\t{{confirmText}}\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t\t<view class=\"u-picker-body\">\n\t\t\t\t<picker-view v-if=\"mode == 'region'\" :value=\"valueArr\" @change=\"change\" class=\"u-picker-view\" @pickstart=\"pickstart\" @pickend=\"pickend\">\n\t\t\t\t\t<picker-view-column v-if=\"!reset && params.province\">\n\t\t\t\t\t\t<view class=\"u-column-item\" v-for=\"(item, index) in provinces\" :key=\"index\">\n\t\t\t\t\t\t\t<view class=\"u-line-1\">{{ item.label }}</view>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</picker-view-column>\n\t\t\t\t\t<picker-view-column v-if=\"!reset && params.city\">\n\t\t\t\t\t\t<view class=\"u-column-item\" v-for=\"(item, index) in citys\" :key=\"index\">\n\t\t\t\t\t\t\t<view class=\"u-line-1\">{{ item.label }}</view>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</picker-view-column>\n\t\t\t\t\t<picker-view-column v-if=\"!reset && params.area\">\n\t\t\t\t\t\t<view class=\"u-column-item\" v-for=\"(item, index) in areas\" :key=\"index\">\n\t\t\t\t\t\t\t<view class=\"u-line-1\">{{ item.label }}</view>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</picker-view-column>\n\t\t\t\t</picker-view>\n\t\t\t\t<picker-view v-else-if=\"mode == 'time'\" :value=\"valueArr\" @change=\"change\" class=\"u-picker-view\" @pickstart=\"pickstart\" @pickend=\"pickend\">\n\t\t\t\t\t<picker-view-column v-if=\"!reset && params.year\">\n\t\t\t\t\t\t<view class=\"u-column-item\" v-for=\"(item, index) in years\" :key=\"index\">\n\t\t\t\t\t\t\t{{ item }}\n\t\t\t\t\t\t\t<text class=\"u-text\" v-if=\"showTimeTag\">年</text>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</picker-view-column>\n\t\t\t\t\t<picker-view-column v-if=\"!reset && params.month\">\n\t\t\t\t\t\t<view class=\"u-column-item\" v-for=\"(item, index) in months\" :key=\"index\">\n\t\t\t\t\t\t\t{{ formatNumber(item) }}\n\t\t\t\t\t\t\t<text class=\"u-text\" v-if=\"showTimeTag\">月</text>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</picker-view-column>\n\t\t\t\t\t<picker-view-column v-if=\"!reset && params.day\">\n\t\t\t\t\t\t<view class=\"u-column-item\" v-for=\"(item, index) in days\" :key=\"index\">\n\t\t\t\t\t\t\t{{ formatNumber(item) }}\n\t\t\t\t\t\t\t<text class=\"u-text\" v-if=\"showTimeTag\">日</text>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</picker-view-column>\n\t\t\t\t\t<picker-view-column v-if=\"!reset && params.hour\">\n\t\t\t\t\t\t<view class=\"u-column-item\" v-for=\"(item, index) in hours\" :key=\"index\">\n\t\t\t\t\t\t\t{{ formatNumber(item) }}\n\t\t\t\t\t\t\t<text class=\"u-text\" v-if=\"showTimeTag\">时</text>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</picker-view-column>\n\t\t\t\t\t<picker-view-column v-if=\"!reset && params.minute\">\n\t\t\t\t\t\t<view class=\"u-column-item\" v-for=\"(item, index) in minutes\" :key=\"index\">\n\t\t\t\t\t\t\t{{ formatNumber(item) }}\n\t\t\t\t\t\t\t<text class=\"u-text\" v-if=\"showTimeTag\">分</text>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</picker-view-column>\n\t\t\t\t\t<picker-view-column v-if=\"!reset && params.second\">\n\t\t\t\t\t\t<view class=\"u-column-item\" v-for=\"(item, index) in seconds\" :key=\"index\">\n\t\t\t\t\t\t\t{{ formatNumber(item) }}\n\t\t\t\t\t\t\t<text class=\"u-text\" v-if=\"showTimeTag\">秒</text>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</picker-view-column>\n\t\t\t\t</picker-view>\n\t\t\t\t<picker-view v-else-if=\"mode == 'selector'\" :value=\"valueArr\" @change=\"change\" class=\"u-picker-view\" @pickstart=\"pickstart\" @pickend=\"pickend\">\n\t\t\t\t\t<picker-view-column v-if=\"!reset\">\n\t\t\t\t\t\t<view class=\"u-column-item\" v-for=\"(item, index) in range\" :key=\"index\">\n\t\t\t\t\t\t\t<view class=\"u-line-1\">{{ getItemValue(item, 'selector') }}</view>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</picker-view-column>\n\t\t\t\t</picker-view>\n\t\t\t\t<picker-view v-else-if=\"mode == 'multiSelector'\" :value=\"valueArr\" @change=\"change\" class=\"u-picker-view\" @pickstart=\"pickstart\" @pickend=\"pickend\">\n\t\t\t\t\t<picker-view-column v-if=\"!reset\" v-for=\"(item, index) in range\" :key=\"index\">\n\t\t\t\t\t\t<view class=\"u-column-item\" v-for=\"(item1, index1) in item\" :key=\"index1\">\n\t\t\t\t\t\t\t<view class=\"u-line-1\">{{ getItemValue(item1, 'multiSelector') }}</view>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</picker-view-column>\n\t\t\t\t</picker-view>\n\t\t\t</view>\n\t\t</view>\n\t</u-popup>\n</template>\n\n<script>\nimport provinces from '../../libs/util/province.js';\nimport citys from '../../libs/util/city.js';\nimport areas from '../../libs/util/area.js';\n\n/**\n * picker picker弹出选择器\n * @description 此选择器有两种弹出模式：一是时间模式，可以配置年，日，月，时，分，秒参数 二是地区模式，可以配置省，市，区参数\n * @tutorial https://www.uviewui.com/components/picker.html\n * @property {Object} params 需要显示的参数，见官网说明\n * @property {String} mode 模式选择，region-地区类型，time-时间类型（默认time）\n * @property {String Number} start-year 可选的开始年份，mode=time时有效（默认1950）\n * @property {String Number} end-year 可选的结束年份，mode=time时有效（默认2050）\n * @property {Boolean} safe-area-inset-bottom 是否开启底部安全区适配（默认false）\n * @property {Boolean} show-time-tag 时间模式时，是否显示后面的年月日中文提示\n * @property {String} cancel-color 取消按钮的颜色（默认#606266）\n * @property {String} confirm-color 确认按钮的颜色（默认#2979ff）\n * @property {String} default-time 默认选中的时间，mode=time时有效\n * @property {String} confirm-text 确认按钮的文字\n * @property {String} cancel-text 取消按钮的文字\n * @property {String} default-region 默认选中的地区，中文形式，mode=region时有效\n * @property {String} default-code 默认选中的地区，编号形式，mode=region时有效\n * @property {Boolean} mask-close-able 是否允许通过点击遮罩关闭Picker（默认true）\n * @property {String Number} z-index 弹出时的z-index值（默认1075）\n * @property {Array} default-selector 数组形式，其中每一项表示选择了range对应项中的第几个\n * @property {Array} range 自定义选择的数据，mode=selector或mode=multiSelector时有效\n * @property {String} range-key 当range参数的元素为对象时，指定Object中的哪个key的值作为选择器显示内容\n * @event {Function} confirm 点击确定按钮，返回当前选择的值\n * @event {Function} cancel 点击取消按钮，返回当前选择的值\n * @example <u-picker v-model=\"show\" mode=\"time\"></u-picker>\n */\nexport default {\n\tname: 'u-picker',\n\tprops: {\n\t\t// picker中需要显示的参数\n\t\tparams: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {\n\t\t\t\t\tyear: true,\n\t\t\t\t\tmonth: true,\n\t\t\t\t\tday: true,\n\t\t\t\t\thour: false,\n\t\t\t\t\tminute: false,\n\t\t\t\t\tsecond: false,\n\t\t\t\t\tprovince: true,\n\t\t\t\t\tcity: true,\n\t\t\t\t\tarea: true,\n\t\t\t\t\ttimestamp: true,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\t// 当mode=selector或者mode=multiSelector时，提供的数组\n\t\trange: {\n\t\t\ttype: Array,\n\t\t\tdefault() {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\t\t// 当mode=selector或者mode=multiSelector时，提供的默认选中的下标\n\t\tdefaultSelector: {\n\t\t\ttype: Array,\n\t\t\tdefault() {\n\t\t\t\treturn [0];\n\t\t\t}\n\t\t},\n\t\t// 当 range 是一个 Array＜Object＞ 时，通过 range-key 来指定 Object 中 key 的值作为选择器显示内容\n\t\trangeKey: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 模式选择，region-地区类型，time-时间类型，selector-单列模式，multiSelector-多列模式\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\tdefault: 'time'\n\t\t},\n\t\t// 年份开始时间\n\t\tstartYear: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 1950\n\t\t},\n\t\t// 年份结束时间\n\t\tendYear: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 2050\n\t\t},\n\t\t// \"取消\"按钮的颜色\n\t\tcancelColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#606266'\n\t\t},\n\t\t// \"确定\"按钮的颜色\n\t\tconfirmColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#2979ff'\n\t\t},\n\t\t// 默认显示的时间，2025-07-02 || 2025-07-02 13:01:00 || 2025/07/02\n\t\tdefaultTime: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 默认显示的地区，可传类似[\"河北省\", \"秦皇岛市\", \"北戴河区\"]\n\t\tdefaultRegion: {\n\t\t\ttype: Array,\n\t\t\tdefault() {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\t\t// 时间模式时，是否显示后面的年月日中文提示\n\t\tshowTimeTag: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 默认显示地区的编码，defaultRegion和areaCode同时存在，areaCode优先，可传类似[\"13\", \"1303\", \"130304\"]\n\t\tareaCode: {\n\t\t\ttype: Array,\n\t\t\tdefault() {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\t\tsafeAreaInsetBottom: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 是否允许通过点击遮罩关闭Picker\n\t\tmaskCloseAble: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 通过双向绑定控制组件的弹出与收起\n\t\tvalue: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 弹出的z-index值\n\t\tzIndex: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 0\n\t\t},\n\t\t// 顶部标题\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 取消按钮的文字\n\t\tcancelText: {\n\t\t\ttype: String,\n\t\t\tdefault: '取消'\n\t\t},\n\t\t// 确认按钮的文字\n\t\tconfirmText: {\n\t\t\ttype: String,\n\t\t\tdefault: '确认'\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tyears: [],\n\t\t\tmonths: [],\n\t\t\tdays: [],\n\t\t\thours: [],\n\t\t\tminutes: [],\n\t\t\tseconds: [],\n\t\t\tyear: 0,\n\t\t\tmonth: 0,\n\t\t\tday: 0,\n\t\t\thour: 0,\n\t\t\tminute: 0,\n\t\t\tsecond: 0,\n\t\t\treset: false,\n\t\t\tstartDate: '',\n\t\t\tendDate: '',\n\t\t\tvalueArr: [],\n\t\t\tprovinces: provinces,\n\t\t\tcitys: citys[0],\n\t\t\tareas: areas[0][0],\n\t\t\tprovince: 0,\n\t\t\tcity: 0,\n\t\t\tarea: 0,\n\t\t\tmoving: false // 列是否还在滑动中，微信小程序如果在滑动中就点确定，结果可能不准确\n\t\t};\n\t},\n\tmounted() {\n\t\tthis.init();\n\t},\n\tcomputed: {\n\t\tpropsChange() {\n\t\t\t// 引用这几个变量，是为了监听其变化\n\t\t\treturn `${this.mode}-${this.defaultTime}-${this.startYear}-${this.endYear}-${this.defaultRegion}-${this.areaCode}`;\n\t\t},\n\t\tregionChange() {\n\t\t\t// 引用这几个变量，是为了监听其变化\n\t\t\treturn `${this.province}-${this.city}`;\n\t\t},\n\t\tyearAndMonth() {\n\t\t\treturn `${this.year}-${this.month}`;\n\t\t},\n\t\tuZIndex() {\n\t\t\t// 如果用户有传递z-index值，优先使用\n\t\t\treturn this.zIndex ? this.zIndex : this.$u.zIndex.popup;\n\t\t}\n\t},\n\twatch: {\n\t\tpropsChange() {\n\t\t\tthis.reset = true;\n\t\t\tsetTimeout(() => this.init(), 10);\n\t\t},\n\t\t// 如果地区发生变化，为了让picker联动起来，必须重置this.citys和this.areas\n\t\tregionChange(val) {\n\t\t\tthis.citys = citys[this.province];\n\t\t\tthis.areas = areas[this.province][this.city];\n\t\t},\n\t\t// watch监听月份的变化，实时变更日的天数，因为不同月份，天数不一样\n\t\t// 一个月可能有30，31天，甚至闰年2月的29天，平年2月28天\n\t\tyearAndMonth(val) {\n\t\t\tif (this.params.year) this.setDays();\n\t\t},\n\t\t// 微信和QQ小程序由于一些奇怪的原因(故同时对所有平台均初始化一遍)，需要重新初始化才能显示正确的值\n\t\tvalue(n) {\n\t\t\tif (n) {\n\t\t\t\tthis.reset = true;\n\t\t\t\tsetTimeout(() => this.init(), 10);\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\t// 标识滑动开始，只有微信小程序才有这样的事件\n\t\tpickstart() {\n\t\t\t// #ifdef MP-WEIXIN\n\t\t\tthis.moving = true;\n\t\t\t// #endif\n\t\t},\n\t\t// 标识滑动结束\n\t\tpickend() {\n\t\t\t// #ifdef MP-WEIXIN\n\t\t\tthis.moving = false;\n\t\t\t// #endif\n\t\t},\n\t\t// 对单列和多列形式的判断是否有传入变量的情况\n\t\tgetItemValue(item, mode) {\n\t\t\t// 目前(2020-05-25)uni-app对微信小程序编译有错误，导致v-if为false中的内容也执行，错误导致\n\t\t\t// 单列模式或者多列模式中的getItemValue同时被执行，故在这里再加一层判断\n\t\t\tif (this.mode == mode) {\n\t\t\t\treturn typeof item == 'object' ? item[this.rangeKey] : item;\n\t\t\t}\n\t\t},\n\t\t// 小于10前面补0，用于月份，日期，时分秒等\n\t\tformatNumber(num) {\n\t\t\treturn +num < 10 ? '0' + num : String(num);\n\t\t},\n\t\t// 生成递进的数组\n\t\tgenerateArray: function(start, end) {\n\t\t\t// 转为数值格式，否则用户给end-year等传递字符串值时，下面的end+1会导致字符串拼接，而不是相加\n\t\t\tstart = Number(start);\n\t\t\tend = Number(end);\n\t\t\tend = end > start ? end : start;\n\t\t\t// 生成数组，获取其中的索引，并剪出来\n\t\t\treturn [...Array(end + 1).keys()].slice(start);\n\t\t},\n\t\tgetIndex: function(arr, val) {\n\t\t\tlet index = arr.indexOf(val);\n\t\t\t// 如果index为-1(即找不到index值)，~(-1)=-(-1)-1=0，导致条件不成立\n\t\t\treturn ~index ? index : 0;\n\t\t},\n\t\t//日期时间处理\n\t\tinitTimeValue() {\n\t\t\t// 格式化时间，在IE浏览器(uni不存在此情况)，无法识别日期间的\"-\"间隔符号\n\t\t\tlet fdate = this.defaultTime.replace(/\\-/g, '/');\n\t\t\tfdate = fdate && fdate.indexOf('/') == -1 ? `2020/01/01 ${fdate}` : fdate;\n\t\t\tlet time = null;\n\t\t\tif (fdate) time = new Date(fdate);\n\t\t\telse time = new Date();\n\t\t\t// 获取年日月时分秒\n\t\t\tthis.year = time.getFullYear();\n\t\t\tthis.month = Number(time.getMonth()) + 1;\n\t\t\tthis.day = time.getDate();\n\t\t\tthis.hour = time.getHours();\n\t\t\tthis.minute = time.getMinutes();\n\t\t\tthis.second = time.getSeconds();\n\t\t},\n\t\tinit() {\n\t\t\tthis.valueArr = [];\n\t\t\tthis.reset = false;\n\t\t\tif (this.mode == 'time') {\n\t\t\t\tthis.initTimeValue();\n\t\t\t\tif (this.params.year) {\n\t\t\t\t\tthis.valueArr.push(0);\n\t\t\t\t\tthis.setYears();\n\t\t\t\t}\n\t\t\t\tif (this.params.month) {\n\t\t\t\t\tthis.valueArr.push(0);\n\t\t\t\t\tthis.setMonths();\n\t\t\t\t}\n\t\t\t\tif (this.params.day) {\n\t\t\t\t\tthis.valueArr.push(0);\n\t\t\t\t\tthis.setDays();\n\t\t\t\t}\n\t\t\t\tif (this.params.hour) {\n\t\t\t\t\tthis.valueArr.push(0);\n\t\t\t\t\tthis.setHours();\n\t\t\t\t}\n\t\t\t\tif (this.params.minute) {\n\t\t\t\t\tthis.valueArr.push(0);\n\t\t\t\t\tthis.setMinutes();\n\t\t\t\t}\n\t\t\t\tif (this.params.second) {\n\t\t\t\t\tthis.valueArr.push(0);\n\t\t\t\t\tthis.setSeconds();\n\t\t\t\t}\n\t\t\t} else if (this.mode == 'region') {\n\t\t\t\tif (this.params.province) {\n\t\t\t\t\tthis.valueArr.push(0);\n\t\t\t\t\tthis.setProvinces();\n\t\t\t\t}\n\t\t\t\tif (this.params.city) {\n\t\t\t\t\tthis.valueArr.push(0);\n\t\t\t\t\tthis.setCitys();\n\t\t\t\t}\n\t\t\t\tif (this.params.area) {\n\t\t\t\t\tthis.valueArr.push(0);\n\t\t\t\t\tthis.setAreas();\n\t\t\t\t}\n\t\t\t} else if (this.mode == 'selector') {\n\t\t\t\tthis.valueArr = this.defaultSelector;\n\t\t\t} else if (this.mode == 'multiSelector') {\n\t\t\t\tthis.valueArr = this.defaultSelector;\n\t\t\t\tthis.multiSelectorValue = this.defaultSelector;\n\t\t\t}\n\t\t\tthis.$forceUpdate();\n\t\t},\n\t\t// 设置picker的某一列值\n\t\tsetYears() {\n\t\t\t// 获取年份集合\n\t\t\tthis.years = this.generateArray(this.startYear, this.endYear);\n\t\t\t// 设置this.valueArr某一项的值，是为了让picker预选中某一个值\n\t\t\tthis.valueArr.splice(this.valueArr.length - 1, 1, this.getIndex(this.years, this.year));\n\t\t},\n\t\tsetMonths() {\n\t\t\tthis.months = this.generateArray(1, 12);\n\t\t\tthis.valueArr.splice(this.valueArr.length - 1, 1, this.getIndex(this.months, this.month));\n\t\t},\n\t\tsetDays() {\n\t\t\tlet totalDays = new Date(this.year, this.month, 0).getDate();\n\t\t\tthis.days = this.generateArray(1, totalDays);\n\t\t\tlet index = 0;\n\t\t\t// 这里不能使用类似setMonths()中的this.valueArr.splice(this.valueArr.length - 1, xxx)做法\n\t\t\t// 因为this.month和this.year变化时，会触发watch中的this.setDays()，导致this.valueArr.length计算有误\n\t\t\tif (this.params.year && this.params.month) index = 2;\n\t\t\telse if (this.params.month) index = 1;\n\t\t\telse if (this.params.year) index = 1;\n\t\t\telse index = 0;\n\t\t\t// 当月份变化时，会导致日期的天数也会变化，如果原来选的天数大于变化后的天数，则重置为变化后的最大值\n\t\t\t// 比如原来选中3月31日，调整为2月后，日期变为最大29，这时如果day值继续为31显然不合理，于是将其置为29(picker-column从1开始)\n\t\t\tif(this.day > this.days.length) this.day = this.days.length;\n\t\t\tthis.valueArr.splice(index, 1, this.getIndex(this.days, this.day));\n\t\t},\n\t\tsetHours() {\n\t\t\tthis.hours = this.generateArray(0, 23);\n\t\t\tthis.valueArr.splice(this.valueArr.length - 1, 1, this.getIndex(this.hours, this.hour));\n\t\t},\n\t\tsetMinutes() {\n\t\t\tthis.minutes = this.generateArray(0, 59);\n\t\t\tthis.valueArr.splice(this.valueArr.length - 1, 1, this.getIndex(this.minutes, this.minute));\n\t\t},\n\t\tsetSeconds() {\n\t\t\tthis.seconds = this.generateArray(0, 59);\n\t\t\tthis.valueArr.splice(this.valueArr.length - 1, 1, this.getIndex(this.seconds, this.second));\n\t\t},\n\t\tsetProvinces() {\n\t\t\t// 判断是否需要province参数\n\t\t\tif (!this.params.province) return;\n\t\t\tlet tmp = '';\n\t\t\tlet useCode = false;\n\t\t\t// 如果同时配置了defaultRegion和areaCode，优先使用areaCode参数\n\t\t\tif (this.areaCode.length) {\n\t\t\t\ttmp = this.areaCode[0];\n\t\t\t\tuseCode = true;\n\t\t\t} else if (this.defaultRegion.length) tmp = this.defaultRegion[0];\n\t\t\telse tmp = 0;\n\t\t\t// 历遍省份数组匹配\n\t\t\tprovinces.map((v, k) => {\n\t\t\t\tif (useCode ? v.value == tmp : v.label == tmp) {\n\t\t\t\t\ttmp = k;\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.province = tmp;\n\t\t\tthis.provinces = provinces;\n\t\t\t// 设置默认省份的值\n\t\t\tthis.valueArr.splice(0, 1, this.province);\n\t\t},\n\t\tsetCitys() {\n\t\t\tif (!this.params.city) return;\n\t\t\tlet tmp = '';\n\t\t\tlet useCode = false;\n\t\t\tif (this.areaCode.length) {\n\t\t\t\ttmp = this.areaCode[1];\n\t\t\t\tuseCode = true;\n\t\t\t} else if (this.defaultRegion.length) tmp = this.defaultRegion[1];\n\t\t\telse tmp = 0;\n\t\t\tcitys[this.province].map((v, k) => {\n\t\t\t\tif (useCode ? v.value == tmp : v.label == tmp) {\n\t\t\t\t\ttmp = k;\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.city = tmp;\n\t\t\tthis.citys = citys[this.province];\n\t\t\tthis.valueArr.splice(1, 1, this.city);\n\t\t},\n\t\tsetAreas() {\n\t\t\tif (!this.params.area) return;\n\t\t\tlet tmp = '';\n\t\t\tlet useCode = false;\n\t\t\tif (this.areaCode.length) {\n\t\t\t\ttmp = this.areaCode[2];\n\t\t\t\tuseCode = true;\n\t\t\t} else if (this.defaultRegion.length) tmp = this.defaultRegion[2];\n\t\t\telse tmp = 0;\n\t\t\tareas[this.province][this.city].map((v, k) => {\n\t\t\t\tif (useCode ? v.value == tmp : v.label == tmp) {\n\t\t\t\t\ttmp = k;\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.area = tmp;\n\t\t\tthis.areas = areas[this.province][this.city];\n\t\t\tthis.valueArr.splice(2, 1, this.area);\n\t\t},\n\t\tclose() {\n\t\t\tthis.$emit('input', false);\n\t\t},\n\t\t// 用户更改picker的列选项\n\t\tchange(e) {\n\t\t\tthis.valueArr = e.detail.value;\n\t\t\tlet i = 0;\n\t\t\tif (this.mode == 'time') {\n\t\t\t\t// 这里使用i++，是因为this.valueArr数组的长度是不确定长度的，它根据this.params的值来配置长度\n\t\t\t\t// 进入if规则，i会加1，保证了能获取准确的值\n\t\t\t\tif (this.params.year) this.year = this.years[this.valueArr[i++]];\n\t\t\t\tif (this.params.month) this.month = this.months[this.valueArr[i++]];\n\t\t\t\tif (this.params.day) this.day = this.days[this.valueArr[i++]];\n\t\t\t\tif (this.params.hour) this.hour = this.hours[this.valueArr[i++]];\n\t\t\t\tif (this.params.minute) this.minute = this.minutes[this.valueArr[i++]];\n\t\t\t\tif (this.params.second) this.second = this.seconds[this.valueArr[i++]];\n\t\t\t} else if (this.mode == 'region') {\n\t\t\t\tif (this.params.province) this.province = this.valueArr[i++];\n\t\t\t\tif (this.params.city) this.city = this.valueArr[i++];\n\t\t\t\tif (this.params.area) this.area = this.valueArr[i++];\n\t\t\t} else if (this.mode == 'multiSelector') {\n\t\t\t\tlet index = null;\n\t\t\t\t// 对比前后两个数组，寻找变更的是哪一列，如果某一个元素不同，即可判定该列发生了变化\n\t\t\t\tthis.defaultSelector.map((val, idx) => {\n\t\t\t\t\tif (val != e.detail.value[idx]) index = idx;\n\t\t\t\t});\n\t\t\t\t// 为了让用户对多列变化时，对动态设置其他列的变更\n\t\t\t\tif (index != null) {\n\t\t\t\t\tthis.$emit('columnchange', {\n\t\t\t\t\t\tcolumn: index,\n\t\t\t\t\t\tindex: e.detail.value[index]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// 用户点击确定按钮\n\t\tgetResult(event = null) {\n\t\t\t// #ifdef MP-WEIXIN\n\t\t\tif (this.moving) return;\n\t\t\t// #endif\n\t\t\tlet result = {};\n\t\t\t// 只返回用户在this.params中配置了为true的字段\n\t\t\tif (this.mode == 'time') {\n\t\t\t\tif (this.params.year) result.year = this.formatNumber(this.year || 0);\n\t\t\t\tif (this.params.month) result.month = this.formatNumber(this.month || 0);\n\t\t\t\tif (this.params.day) result.day = this.formatNumber(this.day || 0);\n\t\t\t\tif (this.params.hour) result.hour = this.formatNumber(this.hour || 0);\n\t\t\t\tif (this.params.minute) result.minute = this.formatNumber(this.minute || 0);\n\t\t\t\tif (this.params.second) result.second = this.formatNumber(this.second || 0);\n\t\t\t\tif (this.params.timestamp) result.timestamp = this.getTimestamp();\n\t\t\t} else if (this.mode == 'region') {\n\t\t\t\tif (this.params.province) result.province = provinces[this.province];\n\t\t\t\tif (this.params.city) result.city = citys[this.province][this.city];\n\t\t\t\tif (this.params.area) result.area = areas[this.province][this.city][this.area];\n\t\t\t} else if (this.mode == 'selector') {\n\t\t\t\tresult = this.valueArr;\n\t\t\t} else if (this.mode == 'multiSelector') {\n\t\t\t\tresult = this.valueArr;\n\t\t\t}\n\t\t\tif (event) this.$emit(event, result);\n\t\t\tthis.close();\n\t\t},\n\t\t// 获取时间戳\n\t\tgetTimestamp() {\n\t\t\t// yyyy-mm-dd为安卓写法，不支持iOS，需要使用\"/\"分隔，才能二者兼容\n\t\t\tlet time = this.year + '/' + this.month + '/' + this.day + ' ' + this.hour + ':' + this.minute + ':' + this.second;\n\t\t\treturn new Date(time).getTime() / 1000;\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../libs/css/style.components.scss';\n\n.u-datetime-picker {\n\tposition: relative;\n\tz-index: 999;\n}\n\n.u-picker-view {\n\theight: 100%;\n\tbox-sizing: border-box;\n}\n\n.u-picker-header {\n\twidth: 100%;\n\theight: 90rpx;\n\tpadding: 0 40rpx;\n\t@include vue-flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tbox-sizing: border-box;\n\tfont-size: 30rpx;\n\tbackground: #fff;\n\tposition: relative;\n}\n\n.u-picker-header::after {\n\tcontent: '';\n\tposition: absolute;\n\tborder-bottom: 1rpx solid #eaeef1;\n\t-webkit-transform: scaleY(0.5);\n\ttransform: scaleY(0.5);\n\tbottom: 0;\n\tright: 0;\n\tleft: 0;\n}\n\n.u-picker__title {\n\tcolor: $u-content-color;\n}\n\n.u-picker-body {\n\twidth: 100%;\n\theight: 500rpx;\n\toverflow: hidden;\n\tbackground-color: #fff;\n}\n\n.u-column-item {\n\t@include vue-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tfont-size: 32rpx;\n\tcolor: $u-main-color;\n\tpadding: 0 8rpx;\n}\n\n.u-text {\n\tfont-size: 24rpx;\n\tpadding-left: 8rpx;\n}\n\n.u-btn-picker {\n\tpadding: 16rpx;\n\tbox-sizing: border-box;\n\ttext-align: center;\n\ttext-decoration: none;\n}\n\n.u-opacity {\n\topacity: 0.5;\n}\n\n.u-btn-picker--primary {\n\tcolor: $u-type-primary;\n}\n\n.u-btn-picker--tips {\n\tcolor: $u-tips-color;\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-popup/u-popup.vue",
    "content": "<template>\n\t<view v-if=\"visibleSync\" :style=\"[customStyle, {\n\t\tzIndex: uZindex - 1\n\t}]\" class=\"u-drawer\" hover-stop-propagation>\n\t\t<u-mask :duration=\"duration\" :custom-style=\"maskCustomStyle\" :maskClickAble=\"maskCloseAble\" :z-index=\"uZindex - 2\" :show=\"showDrawer && mask\" @click=\"maskClick\"></u-mask>\n\t\t<view\n\t\t\tclass=\"u-drawer-content\"\n\t\t\t@tap=\"modeCenterClose(mode)\"\n\t\t\t:class=\"[\n\t\t\t\tsafeAreaInsetBottom ? 'safe-area-inset-bottom' : '',\n\t\t\t\t'u-drawer-' + mode,\n\t\t\t\tshowDrawer ? 'u-drawer-content-visible' : '',\n\t\t\t\tzoom && mode == 'center' ? 'u-animation-zoom' : ''\n\t\t\t]\"\n\t\t\t@touchmove.stop.prevent\n\t\t\t@tap.stop.prevent\n\t\t\t:style=\"[style]\"\n\t\t>\n\t\t\t<view class=\"u-mode-center-box\" @tap.stop.prevent @touchmove.stop.prevent v-if=\"mode == 'center'\" :style=\"[centerStyle]\">\n\t\t\t\t<u-icon\n\t\t\t\t\t@click=\"close\"\n\t\t\t\t\tv-if=\"closeable\"\n\t\t\t\t\tclass=\"u-close\"\n\t\t\t\t\t:class=\"['u-close--' + closeIconPos]\"\n\t\t\t\t\t:name=\"closeIcon\"\n\t\t\t\t\t:color=\"closeIconColor\"\n\t\t\t\t\t:size=\"closeIconSize\"\n\t\t\t\t></u-icon>\n\t\t\t\t<scroll-view class=\"u-drawer__scroll-view\" scroll-y=\"true\">\n\t\t\t\t\t<slot />\n\t\t\t\t</scroll-view>\n\t\t\t</view>\n\t\t\t<scroll-view class=\"u-drawer__scroll-view\" scroll-y=\"true\" v-else>\n\t\t\t\t<slot />\n\t\t\t</scroll-view>\n\t\t\t<view @tap=\"close\" class=\"u-close\" :class=\"['u-close--' + closeIconPos]\">\n\t\t\t\t<u-icon\n\t\t\t\t\tv-if=\"mode != 'center' && closeable\"\n\t\t\t\t\t:name=\"closeIcon\"\n\t\t\t\t\t:color=\"closeIconColor\"\n\t\t\t\t\t:size=\"closeIconSize\"\n\t\t\t\t></u-icon>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n/**\n * popup 弹窗\n * @description 弹出层容器，用于展示弹窗、信息提示等内容，支持上、下、左、右和中部弹出。组件只提供容器，内部内容由用户自定义\n * @tutorial https://www.uviewui.com/components/popup.html\n * @property {String} mode 弹出方向（默认left）\n * @property {Boolean} mask 是否显示遮罩（默认true）\n * @property {Stringr | Number} length mode=left | 见官网说明（默认auto）\n * @property {Boolean} zoom 是否开启缩放动画，只在mode为center时有效（默认true）\n * @property {Boolean} safe-area-inset-bottom 是否开启底部安全区适配（默认false）\n * @property {Boolean} mask-close-able 点击遮罩是否可以关闭弹出层（默认true）\n * @property {Object} custom-style 用户自定义样式\n * @property {Stringr | Number} negative-top 中部弹出时，往上偏移的值\n * @property {Numberr | String} border-radius 弹窗圆角值（默认0）\n * @property {Numberr | String} z-index 弹出内容的z-index值（默认1075）\n * @property {Boolean} closeable 是否显示关闭图标（默认false）\n * @property {String} close-icon 关闭图标的名称，只能uView的内置图标\n * @property {String} close-icon-pos 自定义关闭图标位置（默认top-right）\n * @property {String} close-icon-color 关闭图标的颜色（默认#909399）\n * @property {Number | String} close-icon-size 关闭图标的大小，单位rpx（默认30）\n * @event {Function} open 弹出层打开\n * @event {Function} close 弹出层收起\n * @example <u-popup v-model=\"show\"><view>出淤泥而不染，濯清涟而不妖</view></u-popup>\n */\nexport default {\n\tname: 'u-popup',\n\tprops: {\n\t\t/**\n\t\t * 显示状态\n\t\t */\n\t\tshow: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t/**\n\t\t * 弹出方向，left|right|top|bottom|center\n\t\t */\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\tdefault: 'left'\n\t\t},\n\t\t/**\n\t\t * 是否显示遮罩\n\t\t */\n\t\tmask: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 抽屉的宽度(mode=left|right)，或者高度(mode=top|bottom)，单位rpx，或者\"auto\"\n\t\t// 或者百分比\"50%\"，表示由内容撑开高度或者宽度\n\t\tlength: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 'auto'\n\t\t},\n\t\t// 是否开启缩放动画，只在mode=center时有效\n\t\tzoom: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 是否开启底部安全区适配，开启的话，会在iPhoneX机型底部添加一定的内边距\n\t\tsafeAreaInsetBottom: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 是否可以通过点击遮罩进行关闭\n\t\tmaskCloseAble: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 用户自定义样式\n\t\tcustomStyle: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t\tvalue: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 此为内部参数，不在文档对外使用，为了解决Picker和keyboard等融合了弹窗的组件\n\t\t// 对v-model双向绑定多层调用造成报错不能修改props值的问题\n\t\tpopup: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 显示显示弹窗的圆角，单位rpx\n\t\tborderRadius: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 0\n\t\t},\n\t\tzIndex: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: ''\n\t\t},\n\t\t// 是否显示关闭图标\n\t\tcloseable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 关闭图标的名称，只能uView的内置图标\n\t\tcloseIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: 'close'\n\t\t},\n\t\t// 自定义关闭图标位置，top-left为左上角，top-right为右上角，bottom-left为左下角，bottom-right为右下角\n\t\tcloseIconPos: {\n\t\t\ttype: String,\n\t\t\tdefault: 'top-right'\n\t\t},\n\t\t// 关闭图标的颜色\n\t\tcloseIconColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#909399'\n\t\t},\n\t\t// 关闭图标的大小，单位rpx\n\t\tcloseIconSize: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: '30'\n\t\t},\n\t\t// 宽度，只对左，右，中部弹出时起作用，单位rpx，或者\"auto\"\n\t\t// 或者百分比\"50%\"，表示由内容撑开高度或者宽度，优先级高于length参数\n\t\twidth: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 高度，只对上，下，中部弹出时起作用，单位rpx，或者\"auto\"\n\t\t// 或者百分比\"50%\"，表示由内容撑开高度或者宽度，优先级高于length参数\n\t\theight: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 给一个负的margin-top，往上偏移，避免和键盘重合的情况，仅在mode=center时有效\n\t\tnegativeTop: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 0\n\t\t},\n\t\t// 遮罩的样式，一般用于修改遮罩的透明度\n\t\tmaskCustomStyle: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t},\n\t\t// 遮罩打开或收起的动画过渡时间，单位ms\n\t\tduration: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 250\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tvisibleSync: false,\n\t\t\tshowDrawer: false,\n\t\t\ttimer: null,\n\t\t\tcloseFromInner: false, // value的值改变，是发生在内部还是外部\n\t\t};\n\t},\n\tcomputed: {\n\t\t// 根据mode的位置，设定其弹窗的宽度(mode = left|right)，或者高度(mode = top|bottom)\n\t\tstyle() {\n\t\t\tlet style = {};\n\t\t\t// 如果是左边或者上边弹出时，需要给translate设置为负值，用于隐藏\n\t\t\tif (this.mode == 'left' || this.mode == 'right') {\n\t\t\t\tstyle = {\n\t\t\t\t\twidth: this.width ? this.getUnitValue(this.width) : this.getUnitValue(this.length),\n\t\t\t\t\theight: '100%',\n\t\t\t\t\ttransform: `translate3D(${this.mode == 'left' ? '-100%' : '100%'},0px,0px)`\n\t\t\t\t};\n\t\t\t} else if (this.mode == 'top' || this.mode == 'bottom') {\n\t\t\t\tstyle = {\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\theight: this.height ? this.getUnitValue(this.height) : this.getUnitValue(this.length),\n\t\t\t\t\ttransform: `translate3D(0px,${this.mode == 'top' ? '-100%' : '100%'},0px)`\n\t\t\t\t};\n\t\t\t}\n\t\t\tstyle.zIndex = this.uZindex;\n\t\t\t// 如果用户设置了borderRadius值，添加弹窗的圆角\n\t\t\tif (this.borderRadius) {\n\t\t\t\tswitch (this.mode) {\n\t\t\t\t\tcase 'left':\n\t\t\t\t\t\tstyle.borderRadius = `0 ${this.borderRadius}rpx ${this.borderRadius}rpx 0`;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'top':\n\t\t\t\t\t\tstyle.borderRadius = `0 0 ${this.borderRadius}rpx ${this.borderRadius}rpx`;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'right':\n\t\t\t\t\t\tstyle.borderRadius = `${this.borderRadius}rpx 0 0 ${this.borderRadius}rpx`;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bottom':\n\t\t\t\t\t\tstyle.borderRadius = `${this.borderRadius}rpx ${this.borderRadius}rpx 0 0`;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t}\n\t\t\t\t// 不加可能圆角无效\n\t\t\t\tstyle.overflow = 'hidden';\n\t\t\t}\n\t\t\tif(this.duration) style.transition = `all ${this.duration / 1000}s linear`;\n\t\t\treturn style;\n\t\t},\n\t\t// 中部弹窗的特有样式\n\t\tcenterStyle() {\n\t\t\tlet style = {};\n\t\t\tstyle.width = this.width ? this.getUnitValue(this.width) : this.getUnitValue(this.length);\n\t\t\t// 中部弹出的模式，如果没有设置高度，就用auto值，由内容撑开高度\n\t\t\tstyle.height = this.height ? this.getUnitValue(this.height) : 'auto';\n\t\t\tstyle.zIndex = this.uZindex;\n\t\t\tstyle.marginTop = `-${this.$u.addUnit(this.negativeTop)}`;\n\t\t\tif (this.borderRadius) {\n\t\t\t\tstyle.borderRadius = `${this.borderRadius}rpx`;\n\t\t\t\t// 不加可能圆角无效\n\t\t\t\tstyle.overflow = 'hidden';\n\t\t\t}\n\t\t\treturn style;\n\t\t},\n\t\t// 计算整理后的z-index值\n\t\tuZindex() {\n\t\t\treturn this.zIndex ? this.zIndex : this.$u.zIndex.popup;\n\t\t}\n\t},\n\twatch: {\n\t\tvalue(val) {\n\t\t\tif (val) {\n\t\t\t\tthis.open();\n\t\t\t} else if(!this.closeFromInner) {\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t\tthis.closeFromInner = false;\n\t\t}\n\t},\n\tmounted() {\n\t\t// 组件渲染完成时，检查value是否为true，如果是，弹出popup\n\t\tthis.value && this.open();\n\t},\n    methods: {\n\t\t// 判断传入的值，是否带有单位，如果没有，就默认用rpx单位\n\t\tgetUnitValue(val) {\n\t\t\tif(/(%|px|rpx|auto)$/.test(val)) return val;\n\t\t\telse return val + 'rpx'\n\t\t},\n\t\t// 遮罩被点击\n\t\tmaskClick() {\n\t\t\tthis.close();\n\t\t},\n\t\tclose() {\n\t\t\t// 标记关闭是内部发生的，否则修改了value值，导致watch中对value检测，导致再执行一遍close\n\t\t\t// 造成@close事件触发两次\n\t\t\tthis.closeFromInner = true;\n\t\t\tthis.change('showDrawer', 'visibleSync', false);\n\t\t},\n\t\t// 中部弹出时，需要.u-drawer-content将居中内容，此元素会铺满屏幕，点击需要关闭弹窗\n\t\t// 让其只在mode=center时起作用\n\t\tmodeCenterClose(mode) {\n\t\t\tif (mode != 'center' || !this.maskCloseAble) return;\n\t\t\tthis.close();\n\t\t},\n\t\topen() {\n\t\t\tthis.change('visibleSync', 'showDrawer', true);\n\t\t},\n\t\t// 此处的原理是，关闭时先通过动画隐藏弹窗和遮罩，再移除整个组件\n\t\t// 打开时，先渲染组件，延时一定时间再让遮罩和弹窗的动画起作用\n\t\tchange(param1, param2, status) {\n\t\t\t// 如果this.popup为false，意味着为picker，actionsheet等组件调用了popup组件\n\t\t\tif (this.popup == true) {\n\t\t\t\tthis.$emit('input', status);\n\t\t\t}\n\t\t\tthis[param1] = status;\n\t\t\tif(status) {\n\t\t\t\t// #ifdef H5 || MP\n\t\t\t\tthis.timer = setTimeout(() => {\n\t\t\t\t\tthis[param2] = status;\n\t\t\t\t\tthis.$emit(status ? 'open' : 'close');\n\t\t\t\t}, 50);\n\t\t\t\t// #endif\n\t\t\t\t// #ifndef H5 || MP\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis[param2] = status;\n\t\t\t\t\tthis.$emit(status ? 'open' : 'close');\n\t\t\t\t})\n\t\t\t\t// #endif\n\t\t\t} else {\n\t\t\t\tthis.timer = setTimeout(() => {\n\t\t\t\t\tthis[param2] = status;\n\t\t\t\t\tthis.$emit(status ? 'open' : 'close');\n\t\t\t\t}, this.duration);\n\t\t\t}\n\t\t}\n\t}\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import \"../../libs/css/style.components.scss\";\n\n.u-drawer {\n\t/* #ifndef APP-NVUE */\n\tdisplay: block;\n\t/* #endif */\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\toverflow: hidden;\n}\n\n.u-drawer-content {\n\t/* #ifndef APP-NVUE */\n\tdisplay: block;\n\t/* #endif */\n\tposition: absolute;\n\tz-index: 1003;\n\ttransition: all 0.25s linear;\n}\n\n.u-drawer__scroll-view {\n\twidth: 100%;\n\theight: 100%;\n}\n\n.u-drawer-left {\n\ttop: 0;\n\tbottom: 0;\n\tleft: 0;\n\tbackground-color: #ffffff;\n}\n\n.u-drawer-right {\n\tright: 0;\n\ttop: 0;\n\tbottom: 0;\n\tbackground-color: #ffffff;\n}\n\n.u-drawer-top {\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground-color: #ffffff;\n}\n\n.u-drawer-bottom {\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground-color: #ffffff;\n}\n\n.u-drawer-center {\n\t@include vue-flex;\n\tflex-direction: column;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\ttop: 0;\n\tjustify-content: center;\n\talign-items: center;\n\topacity: 0;\n\tz-index: 99999;\n}\n\n.u-mode-center-box {\n\tmin-width: 100rpx;\n\tmin-height: 100rpx;\n\t/* #ifndef APP-NVUE */\n\tdisplay: block;\n\t/* #endif */\n\tposition: relative;\n\tbackground-color: #ffffff;\n}\n\n.u-drawer-content-visible.u-drawer-center {\n\ttransform: scale(1);\n\topacity: 1;\n}\n\n.u-animation-zoom {\n\ttransform: scale(1.15);\n}\n\n.u-drawer-content-visible {\n\ttransform: translate3D(0px, 0px, 0px) !important;\n}\n\n.u-close {\n\tposition: absolute;\n\tz-index: 3;\n}\n\n.u-close--top-left {\n\ttop: 30rpx;\n\tleft: 30rpx;\n}\n\n.u-close--top-right {\n\ttop: 30rpx;\n\tright: 30rpx;\n}\n\n.u-close--bottom-left {\n\tbottom: 30rpx;\n\tleft: 30rpx;\n}\n\n.u-close--bottom-right {\n\tright: 30rpx;\n\tbottom: 30rpx;\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-radio/u-radio.vue",
    "content": "<template>\n\t<view class=\"u-radio\" :style=\"[radioStyle]\">\n\t\t<view class=\"u-radio__icon-wrap\" @tap=\"toggle\" :class=\"[iconClass]\" :style=\"[iconStyle]\">\n\t\t\t<u-icon\n\t\t\t\tclass=\"u-radio__icon-wrap__icon\"\n\t\t\t    name=\"checkbox-mark\"\n\t\t\t    :size=\"elIconSize\" \n\t\t\t\t:color=\"iconColor\"/>\n\t\t</view>\n\t\t<view class=\"u-radio__label\" @tap=\"onClickLabel\" :style=\"{\n\t\t\tfontSize: $u.addUnit(labelSize)\n\t\t}\">\n\t\t\t<slot />\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * radio 单选框\n\t * @description 单选框用于有一个选择，用户只能选择其中一个的场景。搭配u-radio-group使用\n\t * @tutorial https://www.uviewui.com/components/radio.html\n\t * @property {String Number} icon-size 图标大小，单位rpx（默认24）\n\t * @property {String Number} label-size label字体大小，单位rpx（默认28）\n\t * @property {String Number} name radio组件的标示符\n\t * @property {String} shape 形状，见上方说明（默认circle）\n\t * @property {Boolean} disabled 是否禁用（默认false）\n\t * @property {Boolean} label-disabled 点击文本是否可以操作radio（默认true）\n\t * @property {String} active-color 选中时的颜色，如设置parent的active-color将失效\n\t * @event {Function} change 某个radio状态发生变化时触发(选中状态)\n\t * @example <u-radio :label-disabled=\"false\">门掩黄昏，无计留春住</u-radio>\n\t */\n\texport default {\n\t\tname: \"u-radio\",\n\t\tprops: {\n\t\t\t// radio的名称\n\t\t\tname: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 形状，square为方形，circle为原型\n\t\t\tshape: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 是否禁用\n\t\t\tdisabled: {\n\t\t\t\ttype: [String, Boolean],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 是否禁止点击提示语选中复选框\n\t\t\tlabelDisabled: {\n\t\t\t\ttype: [String, Boolean],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 选中状态下的颜色，如设置此值，将会覆盖parent的activeColor值\n\t\t\tactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 图标的大小，单位rpx\n\t\t\ticonSize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// label的字体大小，rpx单位\n\t\t\tlabelSize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\t// 父组件的默认值，因为头条小程序不支持在computed中使用this.parent.shape的形式\n\t\t\t\t// 故只能使用如此方法\n\t\t\t\tparentData: {\n\t\t\t\t\ticonSize: null,\n\t\t\t\t\tlabelDisabled: null,\n\t\t\t\t\tdisabled: null,\n\t\t\t\t\tshape: null,\n\t\t\t\t\tactiveColor: null,\n\t\t\t\t\tsize: null,\n\t\t\t\t\twidth: null,\n\t\t\t\t\theight: null,\n\t\t\t\t\tvalue: null,\n\t\t\t\t\twrap: null\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tcreated() {\n\t\t\tthis.parent = false;\n\t\t\t// 支付宝小程序不支持provide/inject，所以使用这个方法获取整个父组件，在created定义，避免循环引用\n\t\t\tthis.updateParentData();\n\t\t\tthis.parent.children.push(this);\n\t\t},\n\t\tcomputed: {\n\t\t\t// 是否禁用，如果父组件u-radio-group禁用的话，将会忽略子组件的配置\n\t\t\telDisabled() {\n\t\t\t\treturn this.disabled !== '' ? this.disabled : this.parentData.disabled !== null ? this.parentData.disabled : false;\n\t\t\t},\n\t\t\t// 是否禁用label点击\n\t\t\telLabelDisabled() {\n\t\t\t\treturn this.labelDisabled !== '' ? this.labelDisabled : this.parentData.labelDisabled !== null ? this.parentData.labelDisabled : false;\n\t\t\t},\n\t\t\t// 组件尺寸，对应size的值，默认值为34rpx\n\t\t\telSize() {\n\t\t\t\treturn this.size ? this.size : (this.parentData.size ? this.parentData.size : 34);\n\t\t\t},\n\t\t\t// 组件的勾选图标的尺寸，默认20\n\t\t\telIconSize() {\n\t\t\t\treturn this.iconSize ? this.iconSize : (this.parentData.iconSize ? this.parentData.iconSize : 20);\n\t\t\t},\n\t\t\t// 组件选中激活时的颜色\n\t\t\telActiveColor() {\n\t\t\t\treturn this.activeColor ? this.activeColor : (this.parentData.activeColor ? this.parentData.activeColor : 'primary');\n\t\t\t},\n\t\t\t// 组件的形状\n\t\t\telShape() {\n\t\t\t\treturn this.shape ? this.shape : (this.parentData.shape ? this.parentData.shape : 'circle');\n\t\t\t},\n\t\t\t// 设置radio的状态，要求radio的name等于parent的value时才为选中状态\n\t\t\ticonStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\tif (this.elActiveColor && this.parentData.value == this.name && !this.elDisabled) {\n\t\t\t\t\tstyle.borderColor = this.elActiveColor;\n\t\t\t\t\tstyle.backgroundColor = this.elActiveColor;\n\t\t\t\t}\n\t\t\t\tstyle.width = this.$u.addUnit(this.elSize);\n\t\t\t\tstyle.height = this.$u.addUnit(this.elSize);\n\t\t\t\treturn style;\n\t\t\t},\n\t\t\ticonColor() {\n\t\t\t\treturn this.name ==  this.parentData.value ? '#ffffff' : 'transparent';\n\t\t\t},\n\t\t\ticonClass() {\n\t\t\t\tlet classes = [];\n\t\t\t\tclasses.push('u-radio__icon-wrap--' + this.elShape);\n\t\t\t\tif (this.name == this.parentData.value) classes.push('u-radio__icon-wrap--checked');\n\t\t\t\tif (this.elDisabled) classes.push('u-radio__icon-wrap--disabled');\n\t\t\t\tif (this.name == this.parentData.value && this.elDisabled) classes.push(\n\t\t\t\t\t'u-radio__icon-wrap--disabled--checked');\n\t\t\t\t// 支付宝小程序无法动态绑定一个数组类名，否则解析出来的结果会带有\",\"，而导致失效\n\t\t\t\treturn classes.join(' ');\n\t\t\t},\n\t\t\tradioStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\tif (this.parentData.width) {\n\t\t\t\t\tstyle.width = this.$u.addUnit(this.parentData.width);\n\t\t\t\t\t// #ifdef MP\n\t\t\t\t\t// 各家小程序因为它们特殊的编译结构，使用float布局\n\t\t\t\t\tstyle.float = 'left';\n\t\t\t\t\t// #endif\n\t\t\t\t\t// #ifndef MP\n\t\t\t\t\t// H5和APP使用flex布局\n\t\t\t\t\tstyle.flex = `0 0 ${this.$u.addUnit(this.parentData.width)}`;\n\t\t\t\t\t// #endif\n\t\t\t\t}\n\t\t\t\tif (this.parentData.wrap) {\n\t\t\t\t\tstyle.width = '100%';\n\t\t\t\t\t// #ifndef MP\n\t\t\t\t\t// H5和APP使用flex布局，将宽度设置100%，即可自动换行\n\t\t\t\t\tstyle.flex = '0 0 100%';\n\t\t\t\t\t// #endif\n\t\t\t\t}\n\t\t\t\treturn style;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tupdateParentData() {\n\t\t\t\tthis.getParentData('u-radio-group');\n\t\t\t},\n\t\t\tonClickLabel() {\n\t\t\t\tif (!this.elLabelDisabled && !this.elDisabled) {\n\t\t\t\t\tthis.setRadioCheckedStatus();\n\t\t\t\t}\n\t\t\t},\n\t\t\ttoggle() {\n\t\t\t\tif (!this.elDisabled) {\n\t\t\t\t\tthis.setRadioCheckedStatus();\n\t\t\t\t}\n\t\t\t},\n\t\t\temitEvent() {\n\t\t\t\t// u-radio的name不等于父组件的v-model的值时(意味着未选中)，才发出事件，避免多次点击触发事件\n\t\t\t\tif(this.parentData.value != this.name) this.$emit('change', this.name);\n\t\t\t},\n\t\t\t// 改变组件选中状态\n\t\t\t// 这里的改变的依据是，更改本组件的parentData.value值为本组件的name值，同时通过父组件遍历所有u-radio实例\n\t\t\t// 将本组件外的其他u-radio的parentData.value都设置为空(由computed计算后，都被取消选中状态)，因而只剩下一个为选中状态\n\t\t\tsetRadioCheckedStatus() {\n\t\t\t\tthis.emitEvent();\n\t\t\t\tif(this.parent) {\n\t\t\t\t\tthis.parent.setValue(this.name);\n\t\t\t\t\tthis.parentData.value = this.name;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\n\t.u-radio {\n\t\t/* #ifndef APP-NVUE */\n\t\tdisplay: inline-flex;\n\t\t/* #endif */\n\t\talign-items: center;\n\t\toverflow: hidden;\n\t\tuser-select: none;\n\t\tline-height: 1.8;\n\t\t\n\t\t&__icon-wrap {\n\t\t\tcolor: $u-content-color;\n\t\t\t@include vue-flex;\n\t\t\tflex: none;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tbox-sizing: border-box;\n\t\t\twidth: 42rpx;\n\t\t\theight: 42rpx;\n\t\t\tcolor: transparent;\n\t\t\ttext-align: center;\n\t\t\ttransition-property: color, border-color, background-color;\n\t\t\tfont-size: 20px;\n\t\t\tborder: 1px solid #c8c9cc;\n\t\t\ttransition-duration: 0.2s;\n\t\t\t\n\t\t\t/* #ifdef MP-TOUTIAO */\n\t\t\t// 头条小程序兼容性问题，需要设置行高为0，否则图标偏下\n\t\t\t&__icon {\n\t\t\t\tline-height: 0;\n\t\t\t}\n\t\t\t/* #endif */\n\t\t\t\n\t\t\t&--circle {\n\t\t\t\tborder-radius: 100%;\n\t\t\t}\n\t\t\t\n\t\t\t&--square {\n\t\t\t\tborder-radius: 3px;\n\t\t\t}\n\t\t\t\n\t\t\t&--checked {\n\t\t\t\tcolor: #fff;\n\t\t\t\tbackground-color: #2979ff;\n\t\t\t\tborder-color: #2979ff;\n\t\t\t}\n\t\t\t\n\t\t\t&--disabled {\n\t\t\t\tbackground-color: #ebedf0;\n\t\t\t\tborder-color: #c8c9cc;\n\t\t\t}\n\t\t\t\n\t\t\t&--disabled--checked {\n\t\t\t\tcolor: #c8c9cc !important;\n\t\t\t}\n\t\t}\n\t\t\n\t\t&__label {\n\t\t\tword-wrap: break-word;\n\t\t\tmargin-left: 10rpx;\n\t\t\tmargin-right: 24rpx;\n\t\t\tcolor: $u-content-color;\n\t\t\tfont-size: 30rpx;\n\t\t\t\n\t\t\t&--disabled {\n\t\t\t\tcolor: #c8c9cc;\n\t\t\t}\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-radio-group/u-radio-group.vue",
    "content": "<template>\n\t<view class=\"u-radio-group u-clearfix\">\n\t\t<slot></slot>\n\t</view>\n</template>\n\n<script>\n\timport Emitter from '../../libs/util/emitter.js';\n\t/**\n\t * radioGroup 单选框父组件\n\t * @description 单选框用于有一个选择，用户只能选择其中一个的场景。搭配u-radio使用\n\t * @tutorial https://www.uviewui.com/components/radio.html\n\t * @property {Boolean} disabled 是否禁用所有radio（默认false）\n\t * @property {String Number} size 组件整体的大小，单位rpx（默认40）\n\t * @property {String} active-color 选中时的颜色，应用到所有子Radio组件（默认#2979ff）\n\t * @property {String Number} icon-size 图标大小，单位rpx（默认20）\n\t * @property {String} shape 外观形状，shape-方形，circle-圆形(默认circle)\n\t * @property {Boolean} label-disabled 是否禁止点击文本操作checkbox(默认false)\n\t * @property {String} width 宽度，需带单位\n\t * @property {Boolean} wrap 是否每个radio都换行（默认false）\n\t * @event {Function} change 任一个radio状态发生变化时触发\n\t * @example <u-radio-group v-model=\"value\"></u-radio-group>\n\t */\n\texport default {\n\t\tname: \"u-radio-group\",\n\t\tmixins: [Emitter],\n\t\tprops: {\n\t\t\t// 是否禁用所有单选框\n\t\t\tdisabled: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 匹配某一个radio组件，如果某个radio的name值等于此值，那么这个radio就被会选中\n\t\t\tvalue: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 选中状态下的颜色\n\t\t\tactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#2979ff'\n\t\t\t},\n\t\t\t// 组件的整体大小\n\t\t\tsize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 34\n\t\t\t},\n\t\t\t// 是否禁止点击提示语选中复选框\n\t\t\tlabelDisabled: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 形状，square为方形，circle为原型\n\t\t\tshape: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'circle'\n\t\t\t},\n\t\t\t// 图标的大小，单位rpx\n\t\t\ticonSize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 20\n\t\t\t},\n\t\t\t// 每个checkbox占u-checkbox-group的宽度\n\t\t\twidth: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 'auto'\n\t\t\t},\n\t\t\t// 是否每个checkbox都换行\n\t\t\twrap: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t}\n\t\t},\n\t\tcreated() {\n\t\t\t// 如果将children定义在data中，在微信小程序会造成循环引用而报错\n\t\t\tthis.children = [];\n\t\t},\n\t\twatch: {\n\t\t\t// 当父组件需要子组件需要共享的参数发生了变化，手动通知子组件\n\t\t\tparentData() {\n\t\t\t\tif(this.children.length) {\n\t\t\t\t\tthis.children.map(child => {\n\t\t\t\t\t\t// 判断子组件(u-radio)如果有updateParentData方法的话，就就执行(执行的结果是子组件重新从父组件拉取了最新的值)\n\t\t\t\t\t\ttypeof(child.updateParentData) == 'function' && child.updateParentData();\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\tcomputed: {\n\t\t\t// 这里computed的变量，都是子组件u-radio需要用到的，由于头条小程序的兼容性差异，子组件无法实时监听父组件参数的变化\n\t\t\t// 所以需要手动通知子组件，这里返回一个parentData变量，供watch监听，在其中去通知每一个子组件重新从父组件(u-radio-group)\n\t\t\t// 拉取父组件新的变化后的参数\n\t\t\tparentData() {\n\t\t\t\treturn [this.value, this.disabled, this.activeColor, this.size, this.labelDisabled, this.shape, this.iconSize, this.width, this.wrap];\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\t// 该方法有子组件radio调用，当一个radio被选中的时候，给父组件设置value值(props传递的value)\n\t\t\tsetValue(val) {\n\t\t\t\t// 通过子组件传递过来的val值(此被选中的子组件内部已将parentValue设置等于val的值)，将其他\n\t\t\t\t// u-radio设置未选中的状态\n\t\t\t\tthis.children.map(child => {\n\t\t\t\t\tif(child.parentData.value != val) child.parentData.value = '';\n\t\t\t\t})\n\t\t\t\t// 通过emit事件，设置父组件通过v-model双向绑定的值\n\t\t\t\tthis.$emit('input', val);\n\t\t\t\tthis.$emit('change', val);\n\t\t\t\t// 等待下一个周期再执行，因为this.$emit('input')作用于父组件，再反馈到子组件内部，需要时间\n\t\t\t\t// 由于头条小程序执行迟钝，故需要用几十毫秒的延时\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t// 将当前的值发送到 u-form-item 进行校验\n\t\t\t\t\tthis.dispatch('u-form-item', 'on-form-change', val);\n\t\t\t\t}, 60)\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-radio-group {\n\t\t/* #ifndef MP || APP-NVUE */\n\t\tdisplay: inline-flex;\n\t\tflex-wrap: wrap;\n\t\t/* #endif */\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-rate/u-rate.vue",
    "content": "<template>\n\t<view class=\"u-rate\" :id=\"elId\" @touchmove.stop.prevent=\"touchMove\">\n\t\t<view class=\"u-star-wrap\" v-for=\"(item, index) in count\" :key=\"index\" :class=\"[elClass]\">\n\t\t\t<u-icon\n\t\t\t\t:name=\"activeIndex > index ? elActiveIcon : inactiveIcon\"\n\t\t\t\t@click=\"click(index + 1, $event)\"\n\t\t\t\t:color=\"activeIndex > index ? elActiveColor : inactiveColor\"\n\t\t\t\t:custom-style=\"{\n\t\t\t\t\tfontSize: size + 'rpx',\n\t\t\t\t\tpadding: `0 ${gutter / 2 + 'rpx'}`\n\t\t\t\t}\"\n\t\t\t\t:custom-prefix=\"customPrefix\"\n\t\t\t\t:show-decimal-icon=\"showDecimalIcon(index)\"\n\t\t\t\t:percent=\"decimal\"\n\t\t\t\t:inactive-color=\"inactiveColor\"\n\t\t\t></u-icon>\n\t\t</view>\n\t</view>\n</template>\n\n<script>/**\n * rate 评分\n * @description 该组件一般用于满意度调查，星型评分的场景\n * @tutorial https://www.uviewui.com/components/rate.html\n * @property {String Number} count 最多可选的星星数量（默认5）\n * @property {String Number} current 默认选中的星星数量（默认0）\n * @property {Boolean} disabled 是否禁止用户操作（默认false）\n * @property {String Number} size 星星的大小，单位rpx（默认32）\n * @property {String} inactive-color 未选中星星的颜色（默认#b2b2b2）\n * @property {String} active-color 选中的星星颜色（默认#FA3534）\n * @property {String} active-icon 选中时的图标名，只能为uView的内置图标（默认star-fill）\n * @property {String} inactive-icon 未选中时的图标名，只能为uView的内置图标（默认star）\n * @property {String} gutter 星星之间的距离（默认10）\n * @property {String Number} min-count 最少选中星星的个数（默认0）\n * @property {Boolean} allow-half 是否允许半星选择（默认false）\n * @event {Function} change 选中的星星发生变化时触发\n * @example <u-rate :count=\"count\" :current=\"2\"></u-rate>\n */\n\nexport default {\n\tname: 'u-rate',\n\tprops: {\n\t\t// 用于v-model双向绑定选中的星星数量\n\t\t// 1.4.5版新增\n\t\tvalue: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: -1\n\t\t},\n\t\t// 要显示的星星数量\n\t\tcount: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 5\n\t\t},\n\t\t// 当前需要默认选中的星星(选中的个数)\n\t\t// 1.4.5后通过value双向绑定，不再建议使用此参数\n\t\tcurrent: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 0\n\t\t},\n\t\t// 是否不可选中\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 星星的大小，单位rpx\n\t\tsize: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 32\n\t\t},\n\t\t// 未选中时的颜色\n\t\tinactiveColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#b2b2b2'\n\t\t},\n\t\t// 选中的颜色\n\t\tactiveColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#FA3534'\n\t\t},\n\t\t// 星星之间的间距，单位rpx\n\t\tgutter: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 10\n\t\t},\n\t\t// 最少能选择的星星个数\n\t\tminCount: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 0\n\t\t},\n\t\t// 是否允许半星(功能尚未实现)\n\t\tallowHalf: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 选中时的图标(星星)\n\t\tactiveIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: 'star-fill'\n\t\t},\n\t\t// 未选中时的图标(星星)\n\t\tinactiveIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: 'star'\n\t\t},\n\t\t// 自定义扩展前缀，方便用户扩展自己的图标库\n\t\tcustomPrefix: {\n\t\t\ttype: String,\n\t\t\tdefault: 'uicon'\n\t\t},\n\t\tcolors: {\n\t\t\ttype: Array,\n\t\t\tdefault() {\n\t\t\t\treturn []\n\t\t\t}\n\t\t},\n\t\ticons: {\n\t\t\ttype: Array,\n\t\t\tdefault() {\n\t\t\t\treturn []\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\t// 生成一个唯一id，否则一个页面多个评分组件，会造成冲突\n\t\t\telId: this.$u.guid(),\n\t\t\telClass: this.$u.guid(),\n\t\t\tstarBoxLeft: 0, // 评分盒子左边到屏幕左边的距离，用于滑动选择时计算距离\n\t\t\t// 当前激活的星星的index，如果存在value，优先使用value，因为它可以双向绑定(1.4.5新增)\n\t\t\tactiveIndex: this.value != -1 ? this.value : this.current,\n\t\t\tstarWidth: 0, // 每个星星的宽度\n\t\t\tstarWidthArr: [] //每个星星最右边到组件盒子最左边的距离\n\t\t}\n\t},\n\twatch: {\n\t\tcurrent(val) {\n\t\t\tthis.activeIndex = val\n\t\t},\n\t\tvalue(val) {\n\t\t\tthis.activeIndex = val\n\t\t}\n\t},\n\tcomputed: {\n\t\tdecimal() {\n\t\t\tif (this.disabled) {\n\t\t\t\treturn this.activeIndex * 100 % 100\n\t\t\t} else if (this.allowHalf) {\n\t\t\t\treturn 50\n\t\t\t}\n\t\t},\n\t\telActiveIcon() {\n\t\t\tconst len = this.icons.length\n\t\t\t// 此处规则类似于下方的elActiveColor参数，都是根据一定的规则，显示不同的图标\n\t\t\t// 结果可能如此：icons参数传递了3个图标，当选中两个时，用第一个图标，4个时，用第二个图标\n\t\t\t// 第三个时，用第三个图标作为激活的图标\n\t\t\tif (len && len <= this.count) {\n\t\t\t\tconst step = Math.round(this.activeIndex / Math.round(this.count / len))\n\t\t\t\tif (step < 1) return this.icons[0]\n\t\t\t\tif (step > len) return this.icons[len - 1]\n\t\t\t\treturn this.icons[step - 1]\n\t\t\t}\n\t\t\treturn this.activeIcon\n\t\t},\n\t\telActiveColor() {\n\t\t\tconst len = this.colors.length\n\t\t\t// 如果有设置colors参数(此参数用于将图标分段，比如一共5颗星，colors传3个颜色值，那么根据一定的规则，2颗星可能为第一个颜色\n\t\t\t// 4颗星为第二个颜色值，5颗星为第三个颜色值)\n\t\t\tif (len && len <= this.count) {\n\t\t\t\tconst step = Math.round(this.activeIndex / Math.round(this.count / len))\n\t\t\t\tif (step < 1) return this.colors[0]\n\t\t\t\tif (step > len) return this.colors[len - 1]\n\t\t\t\treturn this.colors[step - 1]\n\t\t\t}\n\t\t\treturn this.activeColor\n\t\t}\n\t},\n\tmethods: {\n\t\t// 获取评分组件盒子的布局信息\n\t\tgetElRectById() {\n\t\t\t// uView封装的获取节点的方法，详见文档\n\t\t\tthis.$uGetRect('#' + this.elId).then(res => {\n\t\t\t\tthis.starBoxLeft = res.left\n\t\t\t})\n\t\t},\n\t\t// 获取单个星星的尺寸\n\t\tgetElRectByClass() {\n\t\t\t// uView封装的获取节点的方法，详见文档\n\t\t\tthis.$uGetRect('.' + this.elClass).then(res => {\n\t\t\t\tthis.starWidth = res.width\n\t\t\t\t// 把每个星星右边到组件盒子左边的距离放入数组中\n\t\t\t\tfor (let i = 0; i < this.count; i++) {\n\t\t\t\t\tthis.starWidthArr[i] = (i + 1) * this.starWidth\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\t// 手指滑动\n\t\ttouchMove(e) {\n\t\t\tif (this.disabled) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!e.changedTouches[0]) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst movePageX = e.changedTouches[0].pageX\n\t\t\t// 滑动点相对于评分盒子左边的距离\n\t\t\tconst distance = movePageX - this.starBoxLeft\n\n\t\t\t// 如果滑动到了评分盒子的左边界，就设置为0星\n\t\t\tif (distance <= 0) {\n\t\t\t\tthis.activeIndex = 0\n\t\t\t}\n\t\t\t// 滑动的距离，相当于多少颗星星\n\t\t\tlet index = Math.ceil(distance / this.starWidth)\n\t\t\tthis.activeIndex = index > this.count ? this.count : index\n\t\t\t// 对最少颗星星的限制\n\t\t\tif (this.activeIndex < this.minCount) this.activeIndex = this.minCount\n\t\t\tthis.emitEvent()\n\t\t},\n\t\t// 通过点击，直接选中\n\t\tclick(index, e) {\n\t\t\tif (this.disabled) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// 半星选择，尚未实现\n\t\t\tif (this.allowHalf) {\n\t\t\t}\n\t\t\t// 对第一个星星特殊处理，只有一个的时候，点击可以取消，否则无法作0星评价\n\t\t\tif (index == 1) {\n\t\t\t\tif (this.activeIndex == 1) {\n\t\t\t\t\tthis.activeIndex = 0\n\t\t\t\t} else {\n\t\t\t\t\tthis.activeIndex = 1\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.activeIndex = index\n\t\t\t}\n\t\t\t// 对最少颗星星的限制\n\t\t\tif (this.activeIndex < this.minCount) this.activeIndex = this.minCount\n\t\t\tthis.emitEvent()\n\t\t},\n\t\t// 发出事件\n\t\temitEvent() {\n\t\t\t// 发出change事件\n\t\t\tthis.$emit('change', this.activeIndex)\n\t\t\t// 同时修改双向绑定的value的值\n\t\t\tif (this.value != -1) {\n\t\t\t\tthis.$emit('input', this.activeIndex)\n\t\t\t}\n\t\t},\n\t\tshowDecimalIcon(index) {\n\t\t\treturn this.disabled && parseInt(this.activeIndex) === index\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.getElRectById()\n\t\tthis.getElRectByClass()\n\t}\n}\n</script>\n\n<style scoped lang=\"scss\">\n@import \"../../libs/css/style.components.scss\";\n\n.u-rate {\n\tdisplay: -webkit-inline-flex;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tmargin: 0;\n\tpadding: 0;\n}\n\n.u-icon {\n\tbox-sizing: border-box;\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-read-more/u-read-more.vue",
    "content": "<template>\n\t<view class=\"\">\n\t\t<view class=\"u-content\" :class=\"[elId]\" :style=\"{ \n\t\t\theight: isLongContent && !showMore ? showHeight + 'rpx' : 'auto',\n\t\t\ttextIndent: textIndent\n\t\t}\">\n\t\t\t<slot></slot>\n\t\t</view>\n\t\t<view @tap=\"toggleReadMore\" v-if=\"isLongContent\" class=\"u-content__showmore-wrap\"\n\t\t    :class=\"{ 'u-content__show-more': showMore }\"\n\t\t    :style=\"[innerShadowStyle]\">\n\t\t\t<text class=\"u-content__showmore-wrap__readmore-btn\" :style=\"{\n\t\t\t\tfontSize: fontSize + 'rpx',\n\t\t\t\tcolor: color\n\t\t\t}\">\n\t\t\t\t{{ showMore ? openText : closeText }}\n\t\t\t</text>\n\t\t\t<view class=\"u-content__showmore-wrap__readmore-btn__icon u-flex\">\n\t\t\t\t<u-icon :color=\"color\" :size=\"fontSize\" :name=\"showMore ? 'arrow-up' : 'arrow-down'\"></u-icon>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * readMore 阅读更多\n\t * @description 该组件一般用于内容较长，预先收起一部分，点击展开全部内容的场景。\n\t * @tutorial https://www.uviewui.com/components/readMore.html\n\t * @property {String Number} show-height 内容超出此高度才会显示展开全文按钮，单位rpx（默认400）\n\t * @property {Boolean} toggle 展开后是否显示收起按钮（默认false）\n\t * @property {String} close-text 关闭时的提示文字（默认“展开阅读全文”）\n\t * @property {String Number} font-size 提示文字的大小，单位rpx（默认28）\n\t * @property {String} text-indent 段落首行缩进的字符个数（默认2em）\n\t * @property {String} open-text 展开时的提示文字（默认“收起”）\n\t * @property {String} color 提示文字的颜色（默认#2979ff）\n\t * @example <u-read-more><rich-text :nodes=\"content\"></rich-text></u-read-more>\n\t */\n\texport default {\n\t\tname: \"u-read-more\",\n\t\tprops: {\n\t\t\t// 默认的显示占位高度，单位为rpx\n\t\t\tshowHeight: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 400\n\t\t\t},\n\t\t\t// 展开后是否显示\"收起\"按钮\n\t\t\ttoggle: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 关闭时的提示文字\n\t\t\tcloseText: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '展开阅读全文'\n\t\t\t},\n\t\t\t// 展开时的提示文字\n\t\t\topenText: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '收起'\n\t\t\t},\n\t\t\t// 提示的文字颜色\n\t\t\tcolor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#2979ff'\n\t\t\t},\n\t\t\t// 提示文字的大小\n\t\t\tfontSize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 28\n\t\t\t},\n\t\t\t// 是否显示阴影\n\t\t\tshadowStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tbackgroundImage: \"linear-gradient(-180deg, rgba(255, 255, 255, 0) 0%, #fff 80%)\",\n\t\t\t\t\t\tpaddingTop: \"300rpx\",\n\t\t\t\t\t\tmarginTop: \"-300rpx\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 段落首行缩进的字符个数\n\t\t\ttextIndent: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '2em'\n\t\t\t},\n\t\t\t// open和close事件时，将此参数返回在回调参数中\n\t\t\tindex: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: ''\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\tparamsChange(val) {\n\t\t\t\tthis.init();\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tparamsChange() {\n\t\t\t\treturn `${this.toggle}-${this.showHeight}`;\n\t\t\t},\n\t\t\t// 展开后无需阴影，收起时才需要阴影样式\n\t\t\tinnerShadowStyle() {\n\t\t\t\tif (this.showMore) return {};\n\t\t\t\telse return this.shadowStyle\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tisLongContent: false, // 是否需要隐藏一部分内容\n\t\t\t\tshowMore: false, // 当前隐藏与显示的状态，true-显示，false-收起\n\t\t\t\telId: this.$u.guid(), // 生成唯一class\n\t\t\t};\n\t\t},\n\t\tmounted() {\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.init();\n\t\t\t})\n\t\t},\n\t\tmethods: {\n\t\t\tinit() {\n\t\t\t\tthis.$uGetRect('.' + this.elId).then(res => {\n\t\t\t\t\t// 判断高度，如果真实内容高度大于占位高度，则显示收起与展开的控制按钮\n\t\t\t\t\tif (res.height > uni.upx2px(this.showHeight)) {\n\t\t\t\t\t\tthis.isLongContent = true;\n\t\t\t\t\t\tthis.showMore = false;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\t\t\t// 展开或者收起\n\t\t\ttoggleReadMore() {\n\t\t\t\tthis.showMore = !this.showMore;\n\t\t\t\t// 如果toggle为false，隐藏\"收起\"部分的内容\n\t\t\t\tif (this.toggle == false) this.isLongContent = false;\n\t\t\t\t// 发出打开或者收齐的事件\n\t\t\t\tthis.$emit(this.showMore ? 'open' : 'close', this.index);\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\n\t.u-content {\n\t\tfont-size: 30rpx;\n\t\tcolor: $u-content-color;\n\t\tline-height: 1.8;\n\t\ttext-align: left;\n\t\toverflow: hidden;\n\n\t\t&__show-more {\n\t\t\tpadding-top: 0;\n\t\t\tbackground: none;\n\t\t\tmargin-top: 20rpx;\n\t\t}\n\n\t\t&__showmore-wrap {\n\t\t\tposition: relative;\n\t\t\twidth: 100%;\n\t\t\tpadding-bottom: 26rpx;\n\t\t\t@include vue-flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\n\t\t\t&__readmore-btn {\n\t\t\t\t@include vue-flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\tline-height: 1;\n\n\t\t\t\t&__icon {\n\t\t\t\t\tmargin-left: 14rpx;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-row/u-row.vue",
    "content": "<template>\n\t<view class=\"u-row\" :style=\"{\n\t\t\talignItems: uAlignItem,\n\t\t\tjustifyContent: uJustify\n\t\t}\"\n\t\t@tap=\"click\"\n\t>\n\t\t<slot />\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * row 行布局\n\t * @description 通过基础的 12 分栏，迅速简便地创建布局。\n\t * @tutorial https://www.uviewui.com/components/layout.html#row-props\n\t * @property {String Number} gutter 栅格间隔，左右各为此值的一半，单位rpx（默认0）\n\t * @property {String} justify 水平排列方式(微信小程序暂不支持)默认（start(或flex-start)）\n\t * @property {String} align 垂直排列方式（默认center）\n\t * @example <u-row gutter=\"16\"></u-row>\n\t */\n\texport default {\n\t\tname: \"u-row\",\n\t\tprops: {\n\t\t\t// 给col添加间距，左右边距各占一半\n\t\t\tgutter: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 20\n\t\t\t},\n\t\t\t// 水平排列方式，可选值为`start`(或`flex-start`)、`end`(或`flex-end`)、`center`、`around`(或`space-around`)、`between`(或`space-between`)\n\t\t\tjustify: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'start'\n\t\t\t},\n\t\t\t// 垂直对齐方式，可选值为top、center、bottom\n\t\t\talign: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'center'\n\t\t\t},\n\t\t\t// 是否阻止事件传播\n\t\t\tstop: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tuJustify() {\n\t\t\t\tif (this.justify == 'end' || this.justify == 'start') return 'flex-' + this.justify;\n\t\t\t\telse if (this.justify == 'around' || this.justify == 'between') return 'space-' + this.justify;\n\t\t\t\telse return this.justify;\n\t\t\t},\n\t\t\tuAlignItem() {\n\t\t\t\tif (this.align == 'top') return 'flex-start';\n\t\t\t\tif (this.align == 'bottom') return 'flex-end';\n\t\t\t\telse return this.align;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tclick(e) {\n\t\t\t\tthis.$emit('click');\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\">\n\t@import \"../../libs/css/style.components.scss\";\n\n\t.u-row {\n\t\t// 由于微信小程序编译后奇怪的页面结构，只能使用float布局实现，flex无法实现\n\t\t/* #ifndef MP-WEIXIN || MP-QQ || MP-TOUTIAO */\n\t\t@include vue-flex;\n\t\t/* #endif */\n\t\tflex-wrap: wrap;\n\t}\n\n\t.u-row:after {\n\t\t/* #ifdef MP-WEIXIN || MP-QQ || MP-TOUTIAO */\n\t\tdisplay: table;\n\t\tclear: both;\n\t\tcontent: \"\";\n\t\t/* #endif */\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-row-notice/u-row-notice.vue",
    "content": "<template>\n\t<view\n\t\tv-if=\"show\"\n\t\tclass=\"u-notice-bar\"\n\t\t:style=\"{\n\t\t\tbackground: computeBgColor,\n\t\t\tpadding: padding\n\t\t}\"\n\t\t:class=\"[\n\t\t\ttype ? `u-type-${type}-light-bg` : ''\n\t\t]\"\n\t>\n\t\t<view class=\"u-direction-row\">\n\t\t\t<view class=\"u-icon-wrap\">\n\t\t\t\t<u-icon class=\"u-left-icon\" v-if=\"volumeIcon\" name=\"volume-fill\" :size=\"volumeSize\" :color=\"computeColor\"></u-icon>\n\t\t\t</view>\n\t\t\t<view class=\"u-notice-box\" id=\"u-notice-box\">\n\t\t\t\t<view\n\t\t\t\t\tclass=\"u-notice-content\"\n\t\t\t\t\tid=\"u-notice-content\"\n\t\t\t\t\t:style=\"{\n\t\t\t\t\t\tanimationDuration: animationDuration,\n\t\t\t\t\t\tanimationPlayState: animationPlayState,\n\t\t\t\t\t}\"\n\t\t\t\t>\n\t\t\t\t\t<text class=\"u-notice-text\" @tap=\"click\" :style=\"[textStyle]\"\n\t\t\t\t\t:class=\"['u-type-' + type]\">{{showText}}</text>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t\t<view class=\"u-icon-wrap\">\n\t\t\t\t<u-icon @click=\"getMore\" class=\"u-right-icon\" v-if=\"moreIcon\" name=\"arrow-right\" :size=\"26\" :color=\"computeColor\"></u-icon>\n\t\t\t\t<u-icon @click=\"close\" class=\"u-right-icon\" v-if=\"closeIcon\" name=\"close\" :size=\"24\" :color=\"computeColor\"></u-icon>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n<script>\nexport default {\n\tprops: {\n\t\t// 显示的内容，数组\n\t\tlist: {\n\t\t\ttype: Array,\n\t\t\tdefault() {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\t\t// 显示的主题，success|error|primary|info|warning|none\n\t\t// none主题默认为透明背景，黑色(contentColor)字体\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tdefault: 'warning'\n\t\t},\n\t\t// 是否显示左侧的音量图标\n\t\tvolumeIcon: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 是否显示右侧的右箭头图标\n\t\tmoreIcon: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 是否显示右侧的关闭图标\n\t\tcloseIcon: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 是否自动播放\n\t\tautoplay: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 文字颜色，各图标也会使用文字颜色\n\t\tcolor: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 背景颜色\n\t\tbgColor: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 是否显示\n\t\tshow: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 字体大小，单位rpx\n\t\tfontSize: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 26\n\t\t},\n\t\t// 音量喇叭的大小\n\t\tvolumeSize: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 34\n\t\t},\n\t\t// 水平滚动时的滚动速度，即每秒滚动多少rpx，这有利于控制文字无论多少时，都能有一个恒定的速度\n\t\tspeed: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 160\n\t\t},\n\t\t// 播放状态，play-播放，paused-暂停\n\t\tplayState: {\n\t\t\ttype: String,\n\t\t\tdefault: 'play'\n\t\t},\n\t\t// 通知的边距\n\t\tpadding: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: '18rpx 24rpx'\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttextWidth: 0, // 滚动的文字宽度\n\t\t\tboxWidth: 0, // 供文字滚动的父盒子的宽度，和前者一起为了计算滚动速度\n\t\t\tanimationDuration: '10s', // 动画执行时间\n\t\t\tanimationPlayState: 'paused', // 动画的开始和结束执行\n\t\t\tshowText: '' // 显示的文本\n\t\t};\n\t},\n\twatch: {\n\t\tlist: {\n\t\t\timmediate: true,\n\t\t\thandler(val) {\n\t\t\t\tthis.showText = val.join('，');\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.initSize();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tplayState(val) {\n\t\t\tif(val == 'play') this.animationPlayState = 'running';\n\t\t\telse this.animationPlayState = 'paused';\n\t\t},\n\t\tspeed(val) {\n\t\t\tthis.initSize();\n\t\t}\n\t},\n\tcomputed: {\n\t\t// 计算字体颜色，如果没有自定义的，就用uview主题颜色\n\t\tcomputeColor() {\n\t\t\tif (this.color) return this.color;\n\t\t\t// 如果是无主题，就默认使用content-color\n\t\t\telse if(this.type == 'none') return '#606266';\n\t\t\telse return this.type;\n\t\t},\n\t\t// 文字内容的样式\n\t\ttextStyle() {\n\t\t\tlet style = {};\n\t\t\tif (this.color) style.color = this.color;\n\t\t\telse if(this.type == 'none') style.color = '#606266';\n\t\t\tstyle.fontSize = this.fontSize + 'rpx';\n\t\t\treturn style;\n\t\t},\n\t\t// 计算背景颜色\n\t\tcomputeBgColor() {\n\t\t\tif (this.bgColor) return this.bgColor;\n\t\t\telse if(this.type == 'none') return 'transparent';\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$nextTick(() => {\n\t\t\tthis.initSize();\n\t\t});\n\t},\n\tmethods: {\n\t\tinitSize() {\n\t\t\tlet query = [],\n\t\t\t\tboxWidth = 0,\n\t\t\t\ttextWidth = 0;\n\t\t\tlet textQuery = new Promise((resolve, reject) => {\n\t\t\t\tuni.createSelectorQuery()\n\t\t\t\t\t.in(this)\n\t\t\t\t\t.select(`#u-notice-content`)\n\t\t\t\t\t.boundingClientRect()\n\t\t\t\t\t.exec(ret => {\n\t\t\t\t\t\tthis.textWidth = ret[0].width;\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t});\n\t\t\t});\n\t\t\tquery.push(textQuery);\n\t\t\tPromise.all(query).then(() => {\n\t\t\t\t// 根据t=s/v(时间=路程/速度)，这里为何不需要加上#u-notice-box的宽度，因为中设置了.u-notice-content样式中设置了padding-left: 100%\n\t\t\t\t// 恰巧计算出来的结果中已经包含了#u-notice-box的宽度\n\t\t\t\tthis.animationDuration = `${this.textWidth / uni.upx2px(this.speed)}s`;\n\t\t\t\t// 这里必须这样开始动画，否则在APP上动画速度不会改变(HX版本2.4.6，IOS13)\n\t\t\t\tthis.animationPlayState = 'paused';\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif(this.playState == 'play' && this.autoplay) this.animationPlayState = 'running';\n\t\t\t\t}, 10);\n\t\t\t});\n\t\t},\n\t\t// 点击通告栏\n\t\tclick(index) {\n\t\t\tthis.$emit('click');\n\t\t},\n\t\t// 点击关闭按钮\n\t\tclose() {\n\t\t\tthis.$emit('close');\n\t\t},\n\t\t// 点击更多箭头按钮\n\t\tgetMore() {\n\t\t\tthis.$emit('getMore');\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../libs/css/style.components.scss\";\n\t\n.u-notice-bar {\n\tpadding: 18rpx 24rpx;\n\toverflow: hidden;\n}\n\n.u-direction-row {\n\t@include vue-flex;\n\talign-items: center;\n\tjustify-content: space-between;\n}\n\n.u-left-icon {\n\t/* #ifndef APP-NVUE */\n\tdisplay: inline-flex;\n\t/* #endif */\n\talign-items: center;\n}\n\n.u-notice-box {\n\tflex: 1;\n\t@include vue-flex;\n\toverflow: hidden;\n\tmargin-left: 12rpx;\n}\n\n.u-right-icon {\n\tmargin-left: 12rpx;\n\tdisplay: inline-flex;\n\talign-items: center;\n}\n\n.u-notice-content {\n\tanimation: u-loop-animation 10s linear infinite both;\n\ttext-align: right;\n\t// 这一句很重要，为了能让滚动左右连接起来\n\tpadding-left: 100%;\n\t@include vue-flex;\n\tflex-wrap: nowrap;\n}\n\n.u-notice-text {\n\tfont-size: 26rpx;\n\tword-break: keep-all;\n\twhite-space: nowrap\n}\n\n@keyframes u-loop-animation {\n\t0% {\n\t\ttransform: translate3d(0, 0, 0);\n\t}\n\n\t100% {\n\t\ttransform: translate3d(-100%, 0, 0);\n\t}\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-search/u-search.vue",
    "content": "<template>\n\t<view class=\"u-search\" @tap=\"clickHandler\" :style=\"{\n\t\tmargin: margin,\n\t}\">\n\t\t<view\n\t\t\tclass=\"u-content\"\n\t\t\t:style=\"{\n\t\t\t\tbackgroundColor: bgColor,\n\t\t\t\tborderRadius: shape == 'round' ? '100rpx' : '10rpx',\n\t\t\t\tborder: borderStyle,\n\t\t\t\theight: height + 'rpx'\n\t\t\t}\"\n\t\t>\n\t\t\t<view class=\"u-icon-wrap\">\n\t\t\t\t<u-icon class=\"u-clear-icon\" :size=\"30\" :name=\"searchIcon\" :color=\"searchIconColor ? searchIconColor : color\"></u-icon>\n\t\t\t</view>\n\t\t\t<input\n\t\t\t\tconfirm-type=\"search\"\n\t\t\t\t@blur=\"blur\"\n\t\t\t\t:value=\"value\"\n\t\t\t\t@confirm=\"search\"\n\t\t\t\t@input=\"inputChange\"\n\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t@focus=\"getFocus\"\n\t\t\t\t:focus=\"focus\"\n\t\t\t\t:maxlength=\"maxlength\"\n\t\t\t\tplaceholder-class=\"u-placeholder-class\"\n\t\t\t\t:placeholder=\"placeholder\"\n\t\t\t\t:placeholder-style=\"`color: ${placeholderColor}`\"\n\t\t\t\tclass=\"u-input\"\n\t\t\t\ttype=\"text\"\n\t\t\t\t:style=\"[{\n\t\t\t\t\ttextAlign: inputAlign,\n\t\t\t\t\tcolor: color,\n\t\t\t\t\tbackgroundColor: bgColor,\n\t\t\t\t}, inputStyle]\"\n\t\t\t/>\n\t\t\t<view class=\"u-close-wrap\" v-if=\"keyword && clearabled && focused\" @tap=\"clear\">\n\t\t\t\t<u-icon class=\"u-clear-icon\" name=\"close-circle-fill\" size=\"34\" color=\"#c0c4cc\"></u-icon>\n\t\t\t</view>\n\t\t</view>\n\t\t<view :style=\"[actionStyle]\" class=\"u-action\" \n\t\t\t:class=\"[showActionBtn || show ? 'u-action-active' : '']\" \n\t\t\t@tap.stop.prevent=\"custom\"\n\t\t>{{ actionText }}</view>\n\t</view>\n</template>\n\n<script>\n/**\n * search 搜索框\n * @description 搜索组件，集成了常见搜索框所需功能，用户可以一键引入，开箱即用。\n * @tutorial https://www.uviewui.com/components/search.html\n * @property {String} shape 搜索框形状，round-圆形，square-方形（默认round）\n * @property {String} bg-color 搜索框背景颜色（默认#f2f2f2）\n * @property {String} border-color 边框颜色，配置了颜色，才会有边框\n * @property {String} placeholder 占位文字内容（默认“请输入关键字”）\n * @property {Boolean} clearabled 是否启用清除控件（默认true）\n * @property {Boolean} focus 是否自动获得焦点（默认false）\n * @property {Boolean} show-action 是否显示右侧控件（默认true）\n * @property {String} action-text 右侧控件文字（默认“搜索”）\n * @property {Object} action-style 右侧控件的样式，对象形式\n * @property {String} input-align 输入框内容水平对齐方式（默认left）\n * @property {Object} input-style 自定义输入框样式，对象形式\n * @property {Boolean} disabled 是否启用输入框（默认false）\n * @property {String} search-icon-color 搜索图标的颜色，默认同输入框字体颜色\n * @property {String} color 输入框字体颜色（默认#606266）\n * @property {String} placeholder-color placeholder的颜色（默认#909399）\n * @property {String} search-icon 输入框左边的图标，可以为uView图标名称或图片路径\n * @property {String} margin 组件与其他上下左右元素之间的距离，带单位的字符串形式，如\"30rpx\"\n * @property {Boolean} animation 是否开启动画，见上方说明（默认false）\n * @property {String} value 输入框初始值\n * @property {String | Number} maxlength 输入框最大能输入的长度，-1为不限制长度\n * @property {Boolean} input-style input输入框的样式，可以定义文字颜色，大小等，对象形式\n * @property {String | Number} height 输入框高度，单位rpx（默认64）\n * @event {Function} change 输入框内容发生变化时触发\n * @event {Function} search 用户确定搜索时触发，用户按回车键，或者手机键盘右下角的\"搜索\"键时触发\n * @event {Function} custom 用户点击右侧控件时触发\n * @event {Function} clear 用户点击清除按钮时触发\n * @example <u-search placeholder=\"日照香炉生紫烟\" v-model=\"keyword\"></u-search>\n */\nexport default {\n\tname: \"u-search\",\n\tprops: {\n\t\t// 搜索框形状，round-圆形，square-方形\n\t\tshape: {\n\t\t\ttype: String,\n\t\t\tdefault: 'round'\n\t\t},\n\t\t// 搜索框背景色，默认值#f2f2f2\n\t\tbgColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#f2f2f2'\n\t\t},\n\t\t// 占位提示文字\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\tdefault: '请输入关键字'\n\t\t},\n\t\t// 是否启用清除控件\n\t\tclearabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 是否自动聚焦\n\t\tfocus: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 是否在搜索框右侧显示取消按钮\n\t\tshowAction: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 右边控件的样式\n\t\tactionStyle: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t\t// 取消按钮文字\n\t\tactionText: {\n\t\t\ttype: String,\n\t\t\tdefault: '搜索'\n\t\t},\n\t\t// 输入框内容对齐方式，可选值为 left|center|right\n\t\tinputAlign: {\n\t\t\ttype: String,\n\t\t\tdefault: 'left'\n\t\t},\n\t\t// 是否启用输入框\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 开启showAction时，是否在input获取焦点时才显示\n\t\tanimation: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 边框颜色，只要配置了颜色，才会有边框\n\t\tborderColor: {\n\t\t\ttype: String,\n\t\t\tdefault: 'none'\n\t\t},\n\t\t// 输入框的初始化内容\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 搜索框高度，单位rpx\n\t\theight: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 64\n\t\t},\n\t\t// input输入框的样式，可以定义文字颜色，大小等，对象形式\n\t\tinputStyle: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t},\n\t\t// 输入框最大能输入的长度，-1为不限制长度(来自uniapp文档)\n\t\tmaxlength: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: '-1'\n\t\t},\n\t\t// 搜索图标的颜色，默认同输入框字体颜色\n\t\tsearchIconColor: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 输入框字体颜色\n\t\tcolor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#606266'\n\t\t},\n\t\t// placeholder的颜色\n\t\tplaceholderColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#909399'\n\t\t},\n\t\t// 组件与其他上下左右元素之间的距离，带单位的字符串形式，如\"30rpx\"、\"30rpx 20rpx\"等写法\n\t\tmargin: {\n\t\t\ttype: String,\n\t\t\tdefault: '0'\n\t\t},\n\t\t// 左边输入框的图标，可以为uView图标名称或图片路径\n\t\tsearchIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: 'search'\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tkeyword: '',\n\t\t\tshowClear: false, // 是否显示右边的清除图标\n\t\t\tshow: false,\n\t\t\t// 标记input当前状态是否处于聚焦中，如果是，才会显示右侧的清除控件\n\t\t\tfocused: this.focus\n\t\t\t// 绑定输入框的值\n\t\t\t// inputValue: this.value\n\t\t};\n\t},\n\twatch: {\n\t\tkeyword(nVal) {\n\t\t\t// 双向绑定值，让v-model绑定的值双向变化\n\t\t\tthis.$emit('input', nVal);\n\t\t\t// 触发change事件，事件效果和v-model双向绑定的效果一样，让用户多一个选择\n\t\t\tthis.$emit('change', nVal);\n\t\t},\n\t\tvalue: {\n\t\t\timmediate: true,\n\t\t\thandler(nVal) {\n\t\t\t\tthis.keyword = nVal;\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\tshowActionBtn() {\n\t\t\tif (!this.animation && this.showAction) return true;\n\t\t\telse return false;\n\t\t},\n\t\t// 样式，根据用户传入的颜色值生成，如果不传入，默认为none\n\t\tborderStyle() {\n\t\t\tif (this.borderColor) return `1px solid ${this.borderColor}`;\n\t\t\telse return 'none';\n\t\t},\n\t},\n\tmethods: {\n\t\t// 目前HX2.6.9 v-model双向绑定无效，故监听input事件获取输入框内容的变化\n\t\tinputChange(e) {\n\t\t\tthis.keyword = e.detail.value;\n\t\t},\n\t\t// 清空输入\n\t\t// 也可以作为用户通过this.$refs形式调用清空输入框内容\n\t\tclear() {\n\t\t\tthis.keyword = '';\n\t\t\t// 延后发出事件，避免在父组件监听clear事件时，value为更新前的值(不为空)\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$emit('clear');\n\t\t\t})\n\t\t},\n\t\t// 确定搜索\n\t\tsearch(e) {\n\t\t\tthis.$emit('search', e.detail.value);\n\t\t\ttry{\n\t\t\t\t// 收起键盘\n\t\t\t\tuni.hideKeyboard();\n\t\t\t}catch(e){}\n\t\t},\n\t\t// 点击右边自定义按钮的事件\n\t\tcustom() {\n\t\t\tthis.$emit('custom', this.keyword);\n\t\t\ttry{\n\t\t\t\t// 收起键盘\n\t\t\t\tuni.hideKeyboard();\n\t\t\t}catch(e){}\n\t\t},\n\t\t// 获取焦点\n\t\tgetFocus() {\n\t\t\tthis.focused = true;\n\t\t\t// 开启右侧搜索按钮展开的动画效果\n\t\t\tif (this.animation && this.showAction) this.show = true;\n\t\t\tthis.$emit('focus', this.keyword);\n\t\t},\n\t\t// 失去焦点\n\t\tblur() {\n\t\t\t// 最开始使用的是监听图标@touchstart事件，自从hx2.8.4后，此方法在微信小程序出错\n\t\t\t// 这里改为监听点击事件，手点击清除图标时，同时也发生了@blur事件，导致图标消失而无法点击，这里做一个延时\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.focused = false;\n\t\t\t}, 100)\n\t\t\tthis.show = false;\n\t\t\tthis.$emit('blur', this.keyword);\n\t\t},\n\t\t// 点击搜索框，只有disabled=true时才发出事件，因为禁止了输入，意味着是想跳转真正的搜索页\n\t\tclickHandler() {\n\t\t\tif(this.disabled) this.$emit('click');\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../libs/css/style.components.scss\";\n\n.u-search {\n\t@include vue-flex;\n\talign-items: center;\n\tflex: 1;\n}\n\n.u-content {\n\t@include vue-flex;\n\talign-items: center;\n\tpadding: 0 18rpx;\n\tflex: 1;\n}\n\n.u-clear-icon {\n\t@include vue-flex;\n\talign-items: center;\n}\n\n.u-input {\n\tflex: 1;\n\tfont-size: 28rpx;\n\tline-height: 1;\n\tmargin: 0 10rpx;\n\tcolor: $u-tips-color;\n}\n\n.u-close-wrap {\n\twidth: 40rpx;\n\theight: 100%;\n\t@include vue-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tborder-radius: 50%;\n}\n\n.u-placeholder-class {\n\tcolor: $u-tips-color;\n}\n\n.u-action {\n\tfont-size: 28rpx;\n\tcolor: $u-main-color;\n\twidth: 0;\n\toverflow: hidden;\n\ttransition: all 0.3s;\n\twhite-space: nowrap;\n\ttext-align: center;\n}\n\n.u-action-active {\n\twidth: 80rpx;\n\tmargin-left: 10rpx;\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-section/u-section.vue",
    "content": "<template>\n\t<view class=\"u-section\">\n\t\t<view class=\"u-section__title\" :style=\"{\n\t\t\tfontWeight: bold ? 'bold' : 'normal',\n\t\t\tcolor: color,\n\t\t\tfontSize: fontSize + 'rpx',\n\t\t\tpaddingLeft: showLine ? (fontSize * 0.7) + 'rpx' : 0\n\t\t}\" :class=\"{\n\t\t\t'u-section--line': showLine\n\t\t}\">\n\t\t\t<view class=\"u-section__title__icon-wrap u-flex\" :style=\"[lineStyle]\" v-if=\"showLine\">\n\t\t\t\t<u-icon top=\"0\" name=\"column-line\" :size=\"fontSize * 1.25\" bold :color=\"lineColor ? lineColor : color\"></u-icon>\n\t\t\t</view>\n\t\t\t<text class=\"u-flex u-section__title__text\">{{title}}</text>\n\t\t</view>\n\t\t<view class=\"u-section__right-info\" v-if=\"right || $slots.right\" :style=\"{\n\t\t\tcolor: subColor\n\t\t}\" @tap=\"rightClick\"> \n\t\t\t<slot name=\"right\" v-if=\"$slots.right\" />\n\t\t\t<block v-else>\n\t\t\t\t{{subTitle}}\n\t\t\t\t<view class=\"u-section__right-info__icon-arrow u-flex\" v-if=\"arrow\">\n\t\t\t\t\t<u-icon name=\"arrow-right\" size=\"24\" :color=\"subColor\"></u-icon>\n\t\t\t\t</view>\n\t\t\t</block>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * section 查看更多\n\t * @description 该组件一般用于分类信息有很多，但是限于篇幅只能列出一部分，让用户通过\"查看更多\"获得更多信息的场景，实际效果见演示。\n\t * @tutorial https://www.uviewui.com/components/section.html\n\t * @property {String} title 左边主标题\n\t * @property {String} sub-title 右边副标题（默认更多）\n\t * @property {Boolean} right 是否显示右边的内容（默认true）\n\t * @property {Boolean} showLine 是否显示左边的竖条（默认true）\n\t * @property {Boolean} arrow 是否显示右边箭头（默认true）\n\t * @property {String Number} font-size 主标题的字体大小（默认28）\n\t * @property {Boolean} bold 主标题是否加粗（默认true）\n\t * @property {String} color 主标题颜色（默认#303133）\n\t * @event {Function} click 组件右侧的内容被点击时触发，用于跳转\"更多\"\n\t * @example <u-section title=\"今日热门\" :right=\"false\"></u-section>\n\t */\n\texport default {\n\t\tname: \"u-section\",\n\t\tprops: {\n\t\t\t// 标题信息\n\t\t\ttitle: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 右边副标题内容\n\t\t\tsubTitle: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '更多'\n\t\t\t},\n\t\t\t// 是否显示右边的内容\n\t\t\tright: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\tfontSize: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 28\n\t\t\t},\n\t\t\t// 主标题是否加粗\n\t\t\tbold: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 主标题的颜色\n\t\t\tcolor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#303133'\n\t\t\t},\n\t\t\t// 右边副标题的颜色\n\t\t\tsubColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#909399'\n\t\t\t},\n\t\t\t// 是否显示左边的竖条\n\t\t\tshowLine: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 左边竖线的颜色\n\t\t\tlineColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 是否显示右边箭头\n\t\t\tarrow: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t},\n\t\tcomputed: {\n\t\t\t// 左边竖条的样式\n\t\t\tlineStyle() {\n\t\t\t\t// 由于安卓和iOS的，需要稍微调整绝对定位的top值，才能让左边的竖线和右边的文字垂直居中\n\t\t\t\treturn {\n\t\t\t\t\t// 由于竖线为字体图标，具有比实际线宽更宽的宽度，所以也需要根据字体打下动态调整\n\t\t\t\t\tleft: -(Number(this.fontSize) * 0.9) + 'rpx',\n\t\t\t\t\ttop: -(Number(this.fontSize) * (this.$u.os() == 'ios' ? 0.14 : 0.15)) + 'rpx',\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\trightClick() {\n\t\t\t\tthis.$emit('click');\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-section {\n\t\t@include vue-flex;\n\t\tjustify-content: space-between;\n\t\talign-items: center;\n\t\twidth: 100%;\n\t\t\n\t\t&__title {\n\t\t\tposition: relative;\n\t\t\tfont-size: 28rpx;\n\t\t\tpadding-left: 20rpx;\n\t\t\t@include vue-flex;\n\t\t\talign-items: center;\n\t\t\t\n\t\t\t&__icon-wrap {\n\t\t\t\tposition: absolute;\n\t\t\t}\n\t\t\t\n\t\t\t&__text {\n\t\t\t\tline-height: 1;\n\t\t\t}\n\t\t}\n\t\t\n\t\t&__right-info {\n\t\t\tcolor: $u-tips-color;\n\t\t\tfont-size: 26rpx;\n\t\t\t@include vue-flex;\n\t\t\talign-items: center;\n\t\t\t\n\t\t\t&__icon-arrow {\n\t\t\t\tmargin-left: 6rpx;\n\t\t\t}\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-select/u-select.vue",
    "content": "<template>\n\t<view class=\"u-select\">\n\t\t<!-- <view class=\"u-select__action\" :class=\"{\n\t\t\t'u-select--border': border\n\t\t}\" @tap.stop=\"selectHandler\">\n\t\t\t<view class=\"u-select__action__icon\" :class=\"{\n\t\t\t\t'u-select__action__icon--reverse': value == true\n\t\t\t}\">\n\t\t\t\t<u-icon name=\"arrow-down-fill\" size=\"26\" color=\"#c0c4cc\"></u-icon>\n\t\t\t</view>\n\t\t</view> -->\n\t\t<u-popup :maskCloseAble=\"maskCloseAble\" mode=\"bottom\" :popup=\"false\" v-model=\"value\" length=\"auto\" :safeAreaInsetBottom=\"safeAreaInsetBottom\" @close=\"close\" :z-index=\"uZIndex\">\n\t\t\t<view class=\"u-select\">\n\t\t\t\t<view class=\"u-select__header\" @touchmove.stop.prevent=\"\">\n\t\t\t\t\t<view\n\t\t\t\t\t\tclass=\"u-select__header__cancel u-select__header__btn\"\n\t\t\t\t\t\t:style=\"{ color: cancelColor }\"\n\t\t\t\t\t\thover-class=\"u-hover-class\"\n\t\t\t\t\t\t:hover-stay-time=\"150\"\n\t\t\t\t\t\t@tap=\"getResult('cancel')\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{cancelText}}\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"u-select__header__title\">\n\t\t\t\t\t\t{{title}}\n\t\t\t\t\t</view>\n\t\t\t\t\t<view\n\t\t\t\t\t\tclass=\"u-select__header__confirm u-select__header__btn\"\n\t\t\t\t\t\t:style=\"{ color: moving ? cancelColor : confirmColor }\"\n\t\t\t\t\t\thover-class=\"u-hover-class\"\n\t\t\t\t\t\t:hover-stay-time=\"150\"\n\t\t\t\t\t\t@touchmove.stop=\"\"\n\t\t\t\t\t\t@tap.stop=\"getResult('confirm')\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{confirmText}}\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-select__body\">\n\t\t\t\t\t<picker-view @change=\"columnChange\" class=\"u-select__body__picker-view\" :value=\"defaultSelector\" @pickstart=\"pickstart\" @pickend=\"pickend\" v-if=\"value\">\n\t\t\t\t\t\t<picker-view-column v-for=\"(item, index) in columnData\" :key=\"index\">\n\t\t\t\t\t\t\t<view class=\"u-select__body__picker-view__item\" v-for=\"(item1, index1) in item\" :key=\"index1\">\n\t\t\t\t\t\t\t\t<view class=\"u-line-1\">{{ item1[labelName] }}</view>\n\t\t\t\t\t\t\t</view>\n\t\t\t\t\t\t</picker-view-column>\n\t\t\t\t\t</picker-view>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</u-popup>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * select 列选择器\n\t * @description 此选择器用于单列，多列，多列联动的选择场景。(从1.3.0版本起，不建议使用Picker组件的单列和多列模式，Select组件是专门为列选择而构造的组件，更简单易用。)\n\t * @tutorial http://uviewui.com/components/select.html\n\t * @property {String} mode 模式选择，\"single-column\"-单列模式，\"mutil-column\"-多列模式，\"mutil-column-auto\"-多列联动模式\n\t * @property {Array} list 列数据，数组形式，见官网说明\n\t * @property {Boolean} v-model 布尔值变量，用于控制选择器的弹出与收起\n\t * @property {Boolean} safe-area-inset-bottom 是否开启底部安全区适配(默认false)\n\t * @property {String} cancel-color 取消按钮的颜色（默认#606266）\n\t * @property {String} confirm-color 确认按钮的颜色(默认#2979ff)\n\t * @property {String} confirm-text 确认按钮的文字\n\t * @property {String} cancel-text 取消按钮的文字\n\t * @property {String} default-value 提供的默认选中的下标，见官网说明\n\t * @property {Boolean} mask-close-able 是否允许通过点击遮罩关闭Picker(默认true)\n\t * @property {String Number} z-index 弹出时的z-index值(默认10075)\n\t * @property {String} value-name 自定义list数据的value属性名 1.3.6\n\t * @property {String} label-name 自定义list数据的label属性名 1.3.6\n\t * @property {String} child-name 自定义list数据的children属性名，只对多列联动模式有效 1.3.7\n\t * @event {Function} confirm 点击确定按钮，返回当前选择的值\n\t * @example <u-select v-model=\"show\" :list=\"list\"></u-select>\n\t */\n\nexport default {\n\tprops: {\n\t\t// 列数据\n\t\tlist: {\n\t\t\ttype: Array,\n\t\t\tdefault() {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\t\t// 是否显示边框\n\t\tborder: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 通过双向绑定控制组件的弹出与收起\n\t\tvalue: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// \"取消\"按钮的颜色\n\t\tcancelColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#606266'\n\t\t},\n\t\t// \"确定\"按钮的颜色\n\t\tconfirmColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#2979ff'\n\t\t},\n\t\t// 弹出的z-index值\n\t\tzIndex: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 0\n\t\t},\n\t\tsafeAreaInsetBottom: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 是否允许通过点击遮罩关闭Picker\n\t\tmaskCloseAble: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 提供的默认选中的下标\n\t\tdefaultValue: {\n\t\t\ttype: Array,\n\t\t\tdefault() {\n\t\t\t\treturn [0];\n\t\t\t}\n\t\t},\n\t\t// 模式选择，single-column-单列，mutil-column-多列，mutil-column-auto-多列联动\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\tdefault: 'single-column'\n\t\t},\n\t\t// 自定义value属性名\n\t\tvalueName: {\n\t\t\ttype: String,\n\t\t\tdefault: 'value'\n\t\t},\n\t\t// 自定义label属性名\n\t\tlabelName: {\n\t\t\ttype: String,\n\t\t\tdefault: 'label'\n\t\t},\n\t\t// 自定义多列联动模式的children属性名\n\t\tchildName: {\n\t\t\ttype: String,\n\t\t\tdefault: 'children'\n\t\t},\n\t\t// 顶部标题\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 取消按钮的文字\n\t\tcancelText: {\n\t\t\ttype: String,\n\t\t\tdefault: '取消'\n\t\t},\n\t\t// 确认按钮的文字\n\t\tconfirmText: {\n\t\t\ttype: String,\n\t\t\tdefault: '确认'\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\t// 用于列改变时，保存当前的索引，下一次变化时比较得出是哪一列发生了变化\n\t\t\tdefaultSelector: [0],\n\t\t\t// picker-view的数据\n\t\t\tcolumnData: [],\n\t\t\t// 每次队列发生变化时，保存选择的结果\n\t\t\tselectValue: [],\n\t\t\t// 上一次列变化时的index\n\t\t\tlastSelectIndex: [],\n\t\t\t// 列数\n\t\t\tcolumnNum: 0,\n\t\t\t// 列是否还在滑动中，微信小程序如果在滑动中就点确定，结果可能不准确\n\t\t\tmoving: false\n\t\t};\n\t},\n\twatch: {\n\t\t// 在select弹起的时候，重新初始化所有数据\n\t\tvalue: {\n\t\t\timmediate: true,\n\t\t\thandler(val) {\n\t\t\t\tif(val) setTimeout(() => this.init(), 10);\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\tuZIndex() {\n\t\t\t// 如果用户有传递z-index值，优先使用\n\t\t\treturn this.zIndex ? this.zIndex : this.$u.zIndex.popup;\n\t\t},\n\t},\n\tmethods: {\n\t\t// 标识滑动开始，只有微信小程序才有这样的事件\n\t\tpickstart() {\n\t\t\t// #ifdef MP-WEIXIN\n\t\t\tthis.moving = true;\n\t\t\t// #endif\n\t\t},\n\t\t// 标识滑动结束\n\t\tpickend() {\n\t\t\t// #ifdef MP-WEIXIN\n\t\t\tthis.moving = false;\n\t\t\t// #endif\n\t\t},\n\t\tinit() {\n\t\t\tthis.setColumnNum();\n\t\t\tthis.setDefaultSelector();\n\t\t\tthis.setColumnData();\n\t\t\tthis.setSelectValue();\n\t\t},\n\t\t// 获取默认选中列下标\n\t\tsetDefaultSelector() {\n\t\t\t// 如果没有传入默认选中的值，生成长度为columnNum，用0填充的数组\n\t\t\tthis.defaultSelector = this.defaultValue.length == this.columnNum ? this.defaultValue : Array(this.columnNum).fill(0);\n\t\t\tthis.lastSelectIndex = this.$u.deepClone(this.defaultSelector);\n\t\t},\n\t\t// 计算列数\n\t\tsetColumnNum() {\n\t\t\t// 单列的列数为1\n\t\t\tif(this.mode == 'single-column') this.columnNum = 1;\n\t\t\t// 多列时，this.list数组长度就是列数\n\t\t\telse if(this.mode == 'mutil-column') this.columnNum = this.list.length;\n\t\t\t// 多列联动时，通过历遍this.list的第一个元素，得出有多少列\n\t\t\telse if(this.mode == 'mutil-column-auto') {\n\t\t\t\tlet num = 1;\n\t\t\t\tlet column = this.list;\n\t\t\t\t// 只要有元素并且第一个元素有children属性，继续历遍\n\t\t\t\twhile(column[0][this.childName]) {\n\t\t\t\t\tcolumn = column[0] ? column[0][this.childName] : {};\n\t\t\t\t\tnum ++;\n\t\t\t\t}\n\t\t\t\tthis.columnNum = num;\n\t\t\t}\n\t\t},\n\t\t// 获取需要展示在picker中的列数据\n\t\tsetColumnData() {\n\t\t\tlet data = [];\n\t\t\tthis.selectValue = [];\n\t\t\tif(this.mode == 'mutil-column-auto') {\n\t\t\t\t// 获得所有数据中的第一个元素\n\t\t\t\tlet column = this.list[this.defaultSelector.length ? this.defaultSelector[0] : 0];\n\t\t\t\t// 通过循环所有的列数，再根据设定列的数组，得出当前需要渲染的整个列数组\n\t\t\t\tfor (let i = 0; i < this.columnNum; i++) {\n\t\t\t\t\t// 第一列默认为整个list数组\n\t\t\t\t\tif (i == 0) {\n\t\t\t\t\t\tdata[i] = this.list;\n\t\t\t\t\t\tcolumn = column[this.childName];\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// 大于第一列时，判断是否有默认选中的，如果没有就用该列的第一项\n\t\t\t\t\t\tdata[i] = column;\n\t\t\t\t\t\tcolumn = column[this.defaultSelector[i]][this.childName];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if(this.mode == 'single-column') {\n\t\t\t\tdata[0] = this.list;\n\t\t\t} else {\n\t\t\t\tdata = this.list;\n\t\t\t}\n\t\t\tthis.columnData = data;\n\t\t},\n\t\t// 获取默认选中的值，如果没有设置defaultValue，就默认选中每列的第一个\n\t\tsetSelectValue() {\n\t\t\tlet tmp = null;\n\t\t\tfor(let i = 0; i < this.columnNum; i++) {\n\t\t\t\ttmp = this.columnData[i][this.defaultSelector[i]];\n\t\t\t\tlet data = {\n\t\t\t\t\tvalue: tmp ? tmp[this.valueName] : null,\n\t\t\t\t\tlabel: tmp ? tmp[this.labelName] : null\n\t\t\t\t};\n\t\t\t\t// 判断是否存在额外的参数，如果存在，就返回\n\t\t\t\tif(tmp && tmp.extra !== undefined) data.extra = tmp.extra;\n\t\t\t\tthis.selectValue.push(data)\n\t\t\t}\n\t\t},\n\t\t// 列选项\n\t\tcolumnChange(e) {\n\t\t\tlet index = null;\n\t\t\tlet columnIndex = e.detail.value;\n\t\t\t// 由于后面是需要push进数组的，所以需要先清空数组\n\t\t\tthis.selectValue = [];\n\t\t\tthis.defaultSelector = columnIndex;\n\t\t\tif(this.mode == 'mutil-column-auto') {\n\t\t\t\t// 对比前后两个数组，寻找变更的是哪一列，如果某一个元素不同，即可判定该列发生了变化\n\t\t\t\tthis.lastSelectIndex.map((val, idx) => {\n\t\t\t\t\tif (val != columnIndex[idx]) index = idx;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tfor (let i = index + 1; i < this.columnNum; i++) {\n\t\t\t\t\t// 当前变化列的下一列的数据，需要获取上一列的数据，同时需要指定是上一列的第几个的children，再往后的\n\t\t\t\t\t// 默认是队列的第一个为默认选项\n\t\t\t\t\tthis.columnData[i] = this.columnData[i - 1][i - 1 == index ? columnIndex[index] : 0][this.childName];\n\t\t\t\t\t// 改变的列之后的所有列，默认选中第一个\n\t\t\t\t\tthis.defaultSelector[i] = 0;\n\t\t\t\t}\n\t\t\t\t// 在历遍的过程中，可能由于上一步修改this.columnData，导致产生连锁反应，程序触发columnChange，会有多次调用\n\t\t\t\t// 只有在最后一次数据稳定后的结果是正确的，此前的历遍中，可能会产生undefined，故需要判断\n\t\t\t\tcolumnIndex.map((item, index) => {\n\t\t\t\t\tlet data = this.columnData[index][columnIndex[index]];\n\t\t\t\t\tlet tmp = {\n\t\t\t\t\t\tvalue: data ? data[this.valueName] : null,\n\t\t\t\t\t\tlabel: data ? data[this.labelName] : null,\n\t\t\t\t\t};\n\t\t\t\t\t// 判断是否有需要额外携带的参数\n\t\t\t\t\tif(data && data.extra !== undefined) tmp.extra = data.extra;\n\t\t\t\t\tthis.selectValue.push(tmp);\n\n\t\t\t\t})\n\t\t\t\t// 保存这一次的结果，用于下次列发生变化时作比较\n\t\t\t\tthis.lastSelectIndex = columnIndex;\n\t\t\t} else if(this.mode == 'single-column') {\n\t\t\t\tlet data = this.columnData[0][columnIndex[0]];\n\t\t\t\t// 初始默认选中值\n\t\t\t\tlet tmp = {\n\t\t\t\t\tvalue: data ? data[this.valueName] : null,\n\t\t\t\t\tlabel: data ? data[this.labelName] : null,\n\t\t\t\t};\n\t\t\t\t// 判断是否有需要额外携带的参数\n\t\t\t\tif(data && data.extra !== undefined) tmp.extra = data.extra;\n\t\t\t\tthis.selectValue.push(tmp);\n\t\t\t} else if(this.mode == 'mutil-column') {\n\t\t\t\t// 初始默认选中值\n\t\t\t\tcolumnIndex.map((item, index) => {\n\t\t\t\t\tlet data = this.columnData[index][columnIndex[index]];\n\t\t\t\t\t// 初始默认选中值\n\t\t\t\t\tlet tmp = {\n\t\t\t\t\t\tvalue: data ? data[this.valueName] : null,\n\t\t\t\t\t\tlabel: data ? data[this.labelName] : null,\n\t\t\t\t\t};\n\t\t\t\t\t// 判断是否有需要额外携带的参数\n\t\t\t\t\tif(data && data.extra !== undefined) tmp.extra = data.extra;\n\t\t\t\t\tthis.selectValue.push(tmp);\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\tclose() {\n\t\t\tthis.$emit('input', false);\n\t\t\t// 重置default-value默认值\n\t\t\tthis.$set(this, 'defaultSelector', [0]);\n\t\t},\n\t\t// 点击确定或者取消\n\t\tgetResult(event = null) {\n\t\t\t// #ifdef MP-WEIXIN\n\t\t\tif (this.moving) return;\n\t\t\t// #endif\n\t\t\tif (event) this.$emit(event, this.selectValue);\n\t\t\tthis.close();\n\t\t},\n\t\tselectHandler() {\n\t\t\tthis.$emit('click');\n\t\t}\n\t}\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import \"../../libs/css/style.components.scss\";\n\n.u-select {\n\n\t&__action {\n\t\tposition: relative;\n\t\tline-height: $u-form-item-height;\n\t\theight: $u-form-item-height;\n\n\t\t&__icon {\n\t\t\tposition: absolute;\n\t\t\tright: 20rpx;\n\t\t\ttop: 50%;\n\t\t\ttransition: transform .4s;\n\t\t\ttransform: translateY(-50%);\n\t\t\tz-index: 1;\n\n\t\t\t&--reverse {\n\t\t\t\ttransform: rotate(-180deg) translateY(50%);\n\t\t\t}\n\t\t}\n\t}\n\n\t&__hader {\n\t\t&__title {\n\t\t\tcolor: $u-content-color;\n\t\t}\n\t}\n\n\t&--border {\n\t\tborder-radius: 6rpx;\n\t\tborder-radius: 4px;\n\t\tborder: 1px solid $u-form-item-border-color;\n\t}\n\n\t&__header {\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\theight: 80rpx;\n\t\tpadding: 0 40rpx;\n\t}\n\n\t&__body {\n\t\twidth: 100%;\n\t\theight: 500rpx;\n\t\toverflow: hidden;\n\t\tbackground-color: #fff;\n\n\t\t&__picker-view {\n\t\t\theight: 100%;\n\t\t\tbox-sizing: border-box;\n\n\t\t\t&__item {\n\t\t\t\t@include vue-flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\tfont-size: 32rpx;\n\t\t\t\tcolor: $u-main-color;\n\t\t\t\tpadding: 0 8rpx;\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-skeleton/u-skeleton.vue",
    "content": "<template>\n\t<view v-if=\"loading\" :style=\"{\n\t\twidth: windowWinth + 'px', \n\t\theight: windowHeight + 'px', \n\t\tbackgroundColor: bgColor, \n\t\tposition: 'absolute', \n\t\tleft: left + 'px', \n\t\ttop: top + 'px', \n\t\tzIndex: 9998, \n\t\toverflow: 'hidden'\n\t}\"\n\t @touchmove.stop.prevent>\n\t\t<view v-for=\"(item, index) in RectNodes\" :key=\"$u.guid()\" :class=\"[animation ? 'skeleton-fade' : '']\" :style=\"{\n\t\t\twidth: item.width + 'px', \n\t\t\theight: item.height + 'px', \n\t\t\tbackgroundColor: elColor, \n\t\t\tposition: 'absolute', \n\t\t\tleft: (item.left - left) + 'px', \n\t\t\ttop: (item.top - top) + 'px'\n\t\t}\"></view>\n\t\t<view v-for=\"(item, index) in circleNodes\" :key=\"$u.guid()\" :class=\"animation ? 'skeleton-fade' : ''\" :style=\"{\n\t\t\twidth: item.width + 'px', \n\t\t\theight: item.height + 'px', \n\t\t\tbackgroundColor: elColor, \n\t\t\tborderRadius: item.width/2 + 'px', \n\t\t\tposition: 'absolute', \n\t\t\tleft: (item.left - left) + 'px',\n\t\t\ttop: (item.top - top) + 'px'\n\t\t}\"></view>\n\t\t<view v-for=\"(item, index) in filletNodes\" :key=\"$u.guid()\" :class=\"animation ? 'skeleton-fade' : ''\" :style=\"{\n\t\t\twidth: item.width + 'px', \n\t\t\theight: item.height + 'px', \n\t\t\tbackgroundColor: elColor, \n\t\t\tborderRadius: borderRadius + 'rpx', \n\t\t\tposition: 'absolute', \n\t\t\tleft: (item.left - left) + 'px',\n\t\t\ttop: (item.top - top) + 'px'\n\t\t}\"></view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * skeleton 骨架屏\n\t * @description 骨架屏一般用于页面在请求远程数据尚未完成时，页面用灰色块预显示本来的页面结构，给用户更好的体验。\n\t * @tutorial https://www.uviewui.com/components/skeleton.html\n\t * @property {String} el-color 骨架块状元素的背景颜色（默认#e5e5e5）\n\t * @property {String} bg-color 骨架组件背景颜色（默认#ffffff）\n\t * @property {Boolean} animation 骨架块是否显示动画效果（默认false）\n\t * @property {String Number} border-radius u-skeleton-fillet类名元素，对应的骨架块的圆角大小，单位rpx（默认10）\n\t * @property {Boolean} loading 是否显示骨架组件，请求完成后，将此值设置为false（默认true）\n\t * @example <u-skeleton :loading=\"true\" :animation=\"true\"></u-skeleton>\n\t */\n\texport default {\n\t\tname: \"u-skeleton\",\n\t\tprops: {\n\t\t\t// 需要渲染的元素背景颜色，十六进制或者rgb等都可以\n\t\t\telColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#e5e5e5'\n\t\t\t},\n\t\t\t// 整个骨架屏页面的背景颜色\n\t\t\tbgColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#ffffff'\n\t\t\t},\n\t\t\t// 是否显示加载动画\n\t\t\tanimation: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 圆角值，只对类名为u-skeleton-fillet的元素生效，为数值，不带单位\n\t\t\tborderRadius: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: \"10\"\n\t\t\t},\n\t\t\t// 是否显示骨架，true-显示，false-隐藏\n\t\t\tloading: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\twindowWinth: 750, // 骨架屏宽度\n\t\t\t\twindowHeight: 1500, // 骨架屏高度\n\t\t\t\tfilletNodes: [], // 圆角元素\n\t\t\t\tcircleNodes: [], // 圆形元素\n\t\t\t\tRectNodes: [], // 矩形元素\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\t// 查询各节点的信息\n\t\t\tselecterQueryInfo() {\n\t\t\t\t// 获取整个父组件容器的高度，当做骨架屏的高度 \n\t\t\t\t// 在微信小程序中，如果把骨架屏放入组件中使用的话，需要调in(this)上下文为父组件才有效\n\t\t\t\tlet query = '';\n\t\t\t\t// #ifdef MP-WEIXIN\n\t\t\t\tquery = uni.createSelectorQuery().in(this.$parent);\n\t\t\t\t// #endif\n\t\t\t\t// #ifndef MP-WEIXIN\n\t\t\t\tquery = uni.createSelectorQuery()\n\t\t\t\t// #endif\n\t\t\t\tquery.selectAll('.u-skeleton').boundingClientRect().exec((res) => {\n\t\t\t\t\tthis.windowHeight = res[0][0].height;\n\t\t\t\t\tthis.windowWinth = res[0][0].width;\n\t\t\t\t\tthis.top = res[0][0].bottom - res[0][0].height;\n\t\t\t\t\tthis.left = res[0][0].left;\n\t\t\t\t});\n\t\t\t\t// 矩形骨架元素\n\t\t\t\tthis.getRectEls();\n\t\t\t\t// 圆形骨架元素\n\t\t\t\tthis.getCircleEls();\n\t\t\t\t// 圆角骨架元素\n\t\t\t\tthis.getFilletEls();\n\t\t\t},\n\t\t\t// 矩形元素列表\n\t\t\tgetRectEls() {\n\t\t\t\tlet query = '';\n\t\t\t\t// 在微信小程序中，如果把骨架屏放入组件中使用的话，需要调in(this)上下文为父组件才有效\n\t\t\t\t// #ifdef MP-WEIXIN\n\t\t\t\tquery = uni.createSelectorQuery().in(this.$parent);\n\t\t\t\t// #endif\n\t\t\t\t// #ifndef MP-WEIXIN\n\t\t\t\tquery = uni.createSelectorQuery()\n\t\t\t\t// #endif\n\t\t\t\tquery.selectAll('.u-skeleton-rect').boundingClientRect().exec((res) => {\n\t\t\t\t\tthis.RectNodes = res[0];\n\t\t\t\t});\n\t\t\t},\n\t\t\t// 圆角元素列表\n\t\t\tgetFilletEls() {\n\t\t\t\tlet query = '';\n\t\t\t\t// 在微信小程序中，如果把骨架屏放入组件中使用的话，需要调in(this)上下文为父组件才有效\n\t\t\t\t// #ifdef MP-WEIXIN\n\t\t\t\tquery = uni.createSelectorQuery().in(this.$parent);\n\t\t\t\t// #endif\n\t\t\t\t// #ifndef MP-WEIXIN\n\t\t\t\tquery = uni.createSelectorQuery()\n\t\t\t\t// #endif\n\t\t\t\tquery.selectAll('.u-skeleton-fillet').boundingClientRect().exec((res) => {\n\t\t\t\t\tthis.filletNodes = res[0];\n\t\t\t\t});\n\t\t\t},\n\t\t\t// 圆形元素列表\n\t\t\tgetCircleEls() {\n\t\t\t\tlet query = '';\n\t\t\t\t// 在微信小程序中，如果把骨架屏放入组件中使用的话，需要调in(this)上下文为父组件才有效\n\t\t\t\t// #ifdef MP-WEIXIN\n\t\t\t\tquery = uni.createSelectorQuery().in(this.$parent);\n\t\t\t\t// #endif\n\t\t\t\t// #ifndef MP-WEIXIN\n\t\t\t\tquery = uni.createSelectorQuery()\n\t\t\t\t// #endif\n\t\t\t\tquery.selectAll('.u-skeleton-circle').boundingClientRect().exec((res) => {\n\t\t\t\t\tthis.circleNodes = res[0];\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t// 组件被挂载\n\t\tmounted() {\n\t\t\t// 获取系统信息\n\t\t\tlet systemInfo = uni.getSystemInfoSync();\n\t\t\tthis.windowHeight = systemInfo.windowHeight;\n\t\t\tthis.windowWinth = systemInfo.windowWidth;\n\t\t\tthis.selecterQueryInfo();\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.skeleton-fade {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tbackground: rgb(194, 207, 214);\n\t\tanimation-duration: 1.5s;\n\t\tanimation-name: blink;\n\t\tanimation-timing-function: ease-in-out;\n\t\tanimation-iteration-count: infinite;\n\t}\n\n\t@keyframes blink {\n\t\t0% {\n\t\t\topacity: 1;\n\t\t}\n\n\t\t50% {\n\t\t\topacity: 0.4;\n\t\t}\n\n\t\t100% {\n\t\t\topacity: 1;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-slider/u-slider.vue",
    "content": "<template>\n\t<view class=\"u-slider\" @tap=\"onClick\" :class=\"[disabled ? 'u-slider--disabled' : '']\" :style=\"{\n\t\tbackgroundColor: inactiveColor\n\t}\">\n\t\t<view\n\t\t\tclass=\"u-slider__gap\"\n\t\t\t:style=\"[\n\t\t\t\tbarStyle,\n\t\t\t\t{\n\t\t\t\t\theight: height + 'rpx',\n\t\t\t\t\tbackgroundColor: activeColor\n\t\t\t\t}\n\t\t\t]\"\n\t\t>\n\t\t\t<view class=\"u-slider__button-wrap\" @touchstart=\"onTouchStart\"\n\t\t\t\t@touchmove=\"onTouchMove\" @touchend=\"onTouchEnd\"\n\t\t\t\t@touchcancel=\"onTouchEnd\">\n\t\t\t\t<slot v-if=\"$slots.default  || $slots.$default\"/>\n\t\t\t\t<view v-else class=\"u-slider__button\" :style=\"[blockStyle, {\n\t\t\t\t\theight: blockWidth + 'rpx',\n\t\t\t\t\twidth: blockWidth + 'rpx',\n\t\t\t\t\tbackgroundColor: blockColor\n\t\t\t\t}]\"></view>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n/**\n * slider 滑块选择器\n * @tutorial https://uviewui.com/components/slider.html\n * @property {Number | String} value 滑块默认值（默认0）\n * @property {Number | String} min 最小值（默认0）\n * @property {Number | String} max 最大值（默认100）\n * @property {Number | String} step 步长（默认1）\n * @property {Number | String} blockWidth 滑块宽度，高等于宽（30）\n * @property {Number | String} height 滑块条高度，单位rpx（默认6）\n * @property {String} inactiveColor 底部条背景颜色（默认#c0c4cc）\n * @property {String} activeColor 底部选择部分的背景颜色（默认#2979ff）\n * @property {String} blockColor 滑块颜色（默认#ffffff）\n * @property {Object} blockStyle 给滑块自定义样式，对象形式\n * @property {Boolean} disabled 是否禁用滑块(默认为false)\n * @event {Function} start 滑动触发\n * @event {Function} moving 正在滑动中\n * @event {Function} end 滑动结束\n * @example <u-slider v-model=\"value\" />\n */\nexport default {\n\tname: 'u-slider',\n\tprops: {\n\t\t// 当前进度百分比值，范围0-100\n\t\tvalue: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 0\n\t\t},\n\t\t// 是否禁用滑块\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 滑块宽度，高等于宽，单位rpx\n\t\tblockWidth: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 30\n\t\t},\n\t\t// 最小值\n\t\tmin: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 0\n\t\t},\n\t\t// 最大值\n\t\tmax: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 100\n\t\t},\n\t\t// 步进值\n\t\tstep: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 1\n\t\t},\n\t\t// 滑块条高度，单位rpx\n\t\theight: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 6\n\t\t},\n\t\t// 进度条的激活部分颜色\n\t\tactiveColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#2979ff'\n\t\t},\n\t\t// 进度条的背景颜色\n\t\tinactiveColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#c0c4cc'\n\t\t},\n\t\t// 滑块的背景颜色\n\t\tblockColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#ffffff'\n\t\t},\n\t\t// 用户对滑块的自定义颜色\n\t\tblockStyle: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tstartX: 0,\n\t\t\tstatus: 'end',\n\t\t\tnewValue: 0,\n\t\t\tdistanceX: 0,\n\t\t\tstartValue: 0,\n\t\t\tbarStyle: {},\n\t\t\tsliderRect: {\n\t\t\t\tleft: 0,\n\t\t\t\twidth: 0\n\t\t\t}\n\t\t};\n\t},\n\twatch: {\n\t\tvalue(n) {\n\t\t\t// 只有在非滑动状态时，才可以通过value更新滑块值，这里监听，是为了让用户触发\n\t\t\tif(this.status == 'end') this.updateValue(this.value, false);\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.updateValue(this.value, false);\n\t},\n\tmounted() {\n\t\t// 获取滑块条的尺寸信息\n\t\tthis.$uGetRect('.u-slider').then(rect => {\n\t\t\tthis.sliderRect = rect;\n\t\t});\n\t},\n\tmethods: {\n\t\tonTouchStart(event) {\n\t\t\tif (this.disabled) return;\n\t\t\tthis.startX = 0;\n\t\t\t// 触摸点集\n\t\t\tlet touches = event.touches[0];\n\t\t\t// 触摸点到屏幕左边的距离\n\t\t\tthis.startX = touches.clientX;\n\t\t\t// 此处的this.value虽为props值，但是通过$emit('input')进行了修改\n\t\t\tthis.startValue = this.format(this.value);\n\t\t\t// 标示当前的状态为开始触摸滑动\n\t\t\tthis.status = 'start';\n\t\t},\n\t\tonTouchMove(event) {\n\t\t\tif (this.disabled) return;\n\t\t\t// 连续触摸的过程会一直触发本方法，但只有手指触发且移动了才被认为是拖动了，才发出事件\n\t\t\t// 触摸后第一次移动已经将status设置为moving状态，故触摸第二次移动不会触发本事件\n\t\t\tif (this.status == 'start') this.$emit('start');\n\t\t\tlet touches = event.touches[0];\n\t\t\t// 滑块的左边不一定跟屏幕左边接壤，所以需要减去最外层父元素的左边值\n\t\t\tthis.distanceX = touches.clientX - this.sliderRect.left;\n\t\t\t// 获得移动距离对整个滑块的百分比值，此为带有多位小数的值，不能用此更新视图\n\t\t\t// 否则造成通信阻塞，需要每改变一个step值时修改一次视图\n\t\t\tthis.newValue = (this.distanceX / this.sliderRect.width) * 100;\n\t\t\tthis.status = 'moving';\n\t\t\t// 发出moving事件\n\t\t\tthis.$emit('moving');\n\t\t\tthis.updateValue(this.newValue, true);\n\t\t},\n\t\tonTouchEnd() {\n\t\t\tif (this.disabled) return;\n\t\t\tif (this.status === 'moving') {\n\t\t\t\tthis.updateValue(this.newValue, false);\n\t\t\t\tthis.$emit('end');\n\t\t\t}\n\t\t\tthis.status = 'end';\n\t\t},\n\t\tupdateValue(value, drag) {\n\t\t\t// 去掉小数部分，同时也是对step步进的处理\n\t\t\tconst width = this.format(value);\n\t\t\t// 不允许滑动的值超过max最大值，百分比也不能超过100\n\t\t\tif(width > this.max || width > 100) return;\n\t\t\t// 设置移动的百分比值\n\t\t\tlet barStyle = {\n\t\t\t\twidth: width + '%'\n\t\t\t};\n\t\t\t// 移动期间无需过渡动画\n\t\t\tif (drag == true) {\n\t\t\t\tbarStyle.transition = 'none';\n\t\t\t} else {\n\t\t\t\t// 非移动期间，删掉对过渡为空的声明，让css中的声明起效\n\t\t\t\tdelete barStyle.transition;\n\t\t\t}\n\t\t\t// 修改value值\n\t\t\tthis.$emit('input', width);\n\t\t\tthis.barStyle = barStyle;\n\t\t},\n\t\tformat(value) {\n\t\t\t// 将小数变成整数，为了减少对视图的更新，造成视图层与逻辑层的阻塞\n\t\t\treturn Math.round(Math.max(this.min, Math.min(value, this.max)) / this.step) * this.step;\n\t\t},\n\t\tonClick(event) {\n\t\t\tif (this.disabled) return;\n\t\t\t// 直接点击滑块的情况，计算方式与onTouchMove方法相同\n\t\t\tconst value = ((event.detail.x - this.sliderRect.left) / this.sliderRect.width) * 100;\n\t\t\tthis.updateValue(value, false);\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../libs/css/style.components.scss\";\n\n.u-slider {\n\tposition: relative;\n\tborder-radius: 999px;\n\tbackground-color: #ebedf0;\n}\n\n.u-slider:before {\n\tposition: absolute;\n\tright: 0;\n\tleft: 0;\n\tcontent: '';\n\ttop: -8px;\n\tbottom: -8px;\n\tz-index: -1;\n}\n\n.u-slider__gap {\n\tposition: relative;\n\tborder-radius: inherit;\n\ttransition: width 0.2s;\n\tbackground-color: #1989fa;\n}\n\n.u-slider__button {\n\twidth: 24px;\n\theight: 24px;\n\tborder-radius: 50%;\n\tbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);\n\tbackground-color: #fff;\n\tcursor: pointer;\n}\n\n.u-slider__button-wrap {\n\tposition: absolute;\n\ttop: 50%;\n\tright: 0;\n\ttransform: translate3d(50%, -50%, 0);\n}\n\n.u-slider--disabled {\n\topacity: 0.5;\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-steps/u-steps.vue",
    "content": "<template>\n\t<view class=\"\">\n\t\t<view\n\t\t\tclass=\"u-steps\"\n\t\t\t:style=\"{\n\t\t\t\tflexDirection: direction\n\t\t\t}\"\n\t\t>\n\t\t\t<view class=\"u-steps__item\" \n\t\t\t\t:class=\"['u-steps__item--' + direction]\" \n\t\t\t\tv-for=\"(item, index) in list\" :key=\"index\"\n\t\t\t>\n\t\t\t\t<view\n\t\t\t\t\tclass=\"u-steps__item__num\"\n\t\t\t\t\tv-if=\"mode == 'number'\"\n\t\t\t\t\t:style=\"{\n\t\t\t\t\t\tbackgroundColor: current < index ? 'transparent' : activeColor,\n\t\t\t\t\t\tborderColor: current < index ? unActiveColor : activeColor\n\t\t\t\t\t}\"\n\t\t\t\t>\n\t\t\t\t\t<text v-if=\"current < index\" :style=\"{\n\t\t\t\t\t\tcolor: current < index ? unActiveColor : activeColor,\n\t\t\t\t\t}\">\n\t\t\t\t\t\t{{ index + 1 }}\n\t\t\t\t\t</text>\n\t\t\t\t\t<u-icon v-else size=\"22\" color=\"#ffffff\" :name=\"icon\"></u-icon>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-steps__item__dot\" v-if=\"mode == 'dot'\" :style=\"{ \n\t\t\t\t\tbackgroundColor: index <= current ? activeColor : unActiveColor \n\t\t\t\t}\"></view>\n\t\t\t\t<text class=\"u-line-1\" :style=\"{ \n\t\t\t\t\tcolor: index <= current ? activeColor : unActiveColor,\n\t\t\t\t}\" :class=\"['u-steps__item__text--' + direction]\">\n\t\t\t\t\t{{ item.name }}\n\t\t\t\t</text>\n\t\t\t\t<view class=\"u-steps__item__line\" :class=\"['u-steps__item__line--' + mode]\" v-if=\"index < list.length - 1\">\n\t\t\t\t\t<u-line :direction=\"direction\" length=\"100%\" :hair-line=\"false\" :color=\"unActiveColor\"></u-line>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n/**\n * steps 步骤条\n * @description 该组件一般用于完成一个任务要分几个步骤，标识目前处于第几步的场景。\n * @tutorial https://www.uviewui.com/components/steps.html\n * @property {String} mode 设置模式（默认dot）\n * @property {Array} list 数轴条数据，数组。具体见上方示例\n * @property {String} type type主题（默认primary）\n * @property {String} direction row-横向，column-竖向（默认row）\n * @property {Number String} current 设置当前处于第几步\n * @property {String} active-color 已完成步骤的激活颜色，如设置，type值会失效\n * @property {String} un-active-color 未激活的颜色，用于表示未完成步骤的颜色（默认#606266）\n * @example <u-steps :list=\"numList\" active-color=\"#fa3534\"></u-steps>\n */\nexport default {\n\tname: 'u-steps',\n\tprops: {\n\t\t// 步骤条的类型，dot|number\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\tdefault: 'dot'\n\t\t},\n\t\t// 步骤条的数据\n\t\tlist: {\n\t\t\ttype: Array,\n\t\t\tdefault() {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\t\t// 主题类型, primary|success|info|warning|error\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tdefault: 'primary'\n\t\t},\n\t\t// 当前哪一步是激活的\n\t\tcurrent: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 0\n\t\t},\n\t\t// 激活步骤的颜色\n\t\tactiveColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#2979ff'\n\t\t},\n\t\t// 未激活的颜色\n\t\tunActiveColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#909399'\n\t\t},\n\t\t// 自定义图标\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\tdefault: 'checkmark'\n\t\t},\n\t\t// step的排列方向，row-横向，column-竖向\n\t\tdirection: {\n\t\t\ttype: String,\n\t\t\tdefault: 'row'\n\t\t}\n\t},\n\tdata() {\n\t\treturn {};\n\t},\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../libs/css/style.components.scss';\n\n$u-steps-item-number-width: 44rpx;\n$u-steps-item-dot-width: 20rpx;\n\n.u-steps {\n\t@include vue-flex;\n\t\n\t.u-steps__item {\n\t\tflex: 1;\n\t\ttext-align: center;\n\t\tposition: relative;\n\t\tmin-width: 100rpx;\n\t\tfont-size: 26rpx;\n\t\tcolor: #8799a3;\n\t\t@include vue-flex;\n\t\tjustify-content: center;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\t\n\t\t&--row {\n\t\t\t@include vue-flex;\n\t\t\tflex-direction: column;\n\t\t\t\n\t\t\t.u-steps__item__line {\n\t\t\t\tposition: absolute;\n\t\t\t\tz-index: 0;\n\t\t\t\tleft: 75%;\n\t\t\t\twidth: 50%;\n\t\t\t\t\n\t\t\t\t&--dot {\n\t\t\t\t\ttop: calc(#{$u-steps-item-dot-width} / 2);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t&--number {\n\t\t\t\t\ttop: calc(#{$u-steps-item-number-width} / 2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t&--column {\n\t\t\t@include vue-flex;\n\t\t\tflex-direction: row;\n\t\t\tjustify-content: flex-start;\n\t\t\tmin-height: 120rpx;\n\t\t\t\n\t\t\t.u-steps__item__line {\n\t\t\t\tposition: absolute;\n\t\t\t\tz-index: 0;\n\t\t\t\theight: 50%;\n\t\t\t\ttop: 75%;\n\t\t\t\t\n\t\t\t\t&--dot {\n\t\t\t\t\tleft: calc(#{$u-steps-item-dot-width} / 2);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t&--number {\n\t\t\t\t\tleft: calc(#{$u-steps-item-number-width} / 2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t&__num {\n\t\t\t@include vue-flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\twidth: $u-steps-item-number-width;\n\t\t\theight: $u-steps-item-number-width;\n\t\t\tborder: 1px solid #8799a3;\n\t\t\tborder-radius: 50%;\n\t\t\toverflow: hidden;\n\t\t}\n\t\t\n\t\t&__dot {\n\t\t\twidth: $u-steps-item-dot-width;\n\t\t\theight: $u-steps-item-dot-width;\n\t\t\t@include vue-flex;\n\t\t\tborder-radius: 50%;\n\t\t}\n\t\t\n\t\t&__text--row {\n\t\t\tmargin-top: 14rpx;\n\t\t}\n\t\t\n\t\t&__text--column {\n\t\t\tmargin-left: 14rpx;\n\t\t}\n\t}\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-sticky/u-sticky.vue",
    "content": "<template>\n\t<view class=\"\">\n\t\t<view class=\"u-sticky-wrap\" :class=\"[elClass]\" :style=\"{\n\t\t\theight: fixed ? height + 'px' : 'auto',\n\t\t\tbackgroundColor: bgColor\n\t\t}\">\n\t\t\t<view class=\"u-sticky\" :style=\"{\n\t\t\t\tposition: fixed ? 'fixed' : 'static',\n\t\t\t\ttop: stickyTop + 'px',\n\t\t\t\tleft: left + 'px',\n\t\t\t\twidth: width == 'auto' ? 'auto' : width + 'px',\n\t\t\t\tzIndex: uZIndex\n\t\t\t}\">\n\t\t\t\t<slot></slot>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * sticky 吸顶\n\t * @description 该组件与CSS中position: sticky属性实现的效果一致，当组件达到预设的到顶部距离时， 就会固定在指定位置，组件位置大于预设的顶部距离时，会重新按照正常的布局排列。\n\t * @tutorial https://www.uviewui.com/components/sticky.html\n\t * @property {String Number} offset-top 吸顶时与顶部的距离，单位rpx（默认0）\n\t * @property {String Number} index 自定义标识，用于区分是哪一个组件\n\t * @property {Boolean} enable 是否开启吸顶功能（默认true）\n\t * @property {String} bg-color 组件背景颜色（默认#ffffff）\n\t * @property {String Number} z-index 吸顶时的z-index值（默认970）\n\t * @property {String Number} h5-nav-height 导航栏高度，自定义导航栏时(无导航栏时需设置为0)，需要传入此值，单位px（默认44）\n\t * @event {Function} fixed 组件吸顶时触发\n\t * @event {Function} unfixed 组件取消吸顶时触发\n\t * @example <u-sticky offset-top=\"200\"><view>塞下秋来风景异，衡阳雁去无留意</view></u-sticky>\n\t */\n\texport default {\n\t\tname: \"u-sticky\",\n\t\tprops: {\n\t\t\t// 吸顶容器到顶部某个距离的时候，进行吸顶，在H5平台，NavigationBar为44px\n\t\t\toffsetTop: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 0\n\t\t\t},\n\t\t\t//列表中的索引值\n\t\t\tindex: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 是否开启吸顶功能\n\t\t\tenable: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// h5顶部导航栏的高度\n\t\t\th5NavHeight: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 44\n\t\t\t},\n\t\t\t// 吸顶区域的背景颜色\n\t\t\tbgColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#ffffff'\n\t\t\t},\n\t\t\t// z-index值\n\t\t\tzIndex: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: ''\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tfixed: false,\n\t\t\t\theight: 'auto',\n\t\t\t\tstickyTop: 0,\n\t\t\t\telClass: this.$u.guid(),\n\t\t\t\tleft: 0,\n\t\t\t\twidth: 'auto',\n\t\t\t};\n\t\t},\n\t\twatch: {\n\t\t\toffsetTop(val) {\n\t\t\t\tthis.initObserver();\n\t\t\t},\n\t\t\tenable(val) {\n\t\t\t\tif (val == false) {\n\t\t\t\t\tthis.fixed = false;\n\t\t\t\t\tthis.disconnectObserver('contentObserver');\n\t\t\t\t} else {\n\t\t\t\t\tthis.initObserver();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tuZIndex() {\n\t\t\t\treturn this.zIndex ? this.zIndex : this.$u.zIndex.sticky;\n\t\t\t}\n\t\t},\n\t\tmounted() {\n\t\t\tthis.initObserver();\n\t\t},\n\t\tmethods: {\n\t\t\tinitObserver() {\n\t\t\t\tif (!this.enable) return;\n\t\t\t\t// #ifdef H5\n\t\t\t\tthis.stickyTop = this.offsetTop != 0 ? uni.upx2px(this.offsetTop) + this.h5NavHeight : this.h5NavHeight;\n\t\t\t\t// #endif\n\t\t\t\t// #ifndef H5\n\t\t\t\tthis.stickyTop = this.offsetTop != 0 ? uni.upx2px(this.offsetTop) : 0;\n\t\t\t\t// #endif\n\n\t\t\t\tthis.disconnectObserver('contentObserver');\n\t\t\t\tthis.$uGetRect('.' + this.elClass).then((res) => {\n\t\t\t\t\tthis.height = res.height;\n\t\t\t\t\tthis.left = res.left;\n\t\t\t\t\tthis.width = res.width;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.observeContent();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tobserveContent() {\n\t\t\t\tthis.disconnectObserver('contentObserver');\n\t\t\t\tconst contentObserver = this.createIntersectionObserver({\n\t\t\t\t\tthresholds: [0.95, 0.98, 1]\n\t\t\t\t});\n\t\t\t\tcontentObserver.relativeToViewport({\n\t\t\t\t\ttop: -this.stickyTop\n\t\t\t\t});\n\t\t\t\tcontentObserver.observe('.' + this.elClass, res => {\n\t\t\t\t\tif (!this.enable) return;\n\t\t\t\t\tthis.setFixed(res.boundingClientRect.top);\n\t\t\t\t});\n\t\t\t\tthis.contentObserver = contentObserver;\n\t\t\t},\n\t\t\tsetFixed(top) {\n\t\t\t\tconst fixed = top < this.stickyTop;\n\t\t\t\tif (fixed) this.$emit('fixed', this.index);\n\t\t\t\telse if(this.fixed) this.$emit('unfixed', this.index);\n\t\t\t\tthis.fixed = fixed;\n\t\t\t},\n\t\t\tdisconnectObserver(observerName) {\n\t\t\t\tconst observer = this[observerName];\n\t\t\t\tobserver && observer.disconnect();\n\t\t\t},\n\t\t},\n\t\tbeforeDestroy() {\n\t\t\tthis.disconnectObserver('contentObserver');\n\t\t}\n\t};\n</script>\n\n<style scoped lang=\"scss\">\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-sticky {\n\t\tz-index: 9999999999;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-subsection/u-subsection.vue",
    "content": "<template>\n\t<view class=\"u-subsection\" :style=\"[subsectionStyle]\">\n\t\t<view class=\"u-item u-line-1\" :style=\"[itemStyle(index)]\" @tap=\"click(index)\" :class=\"[noBorderRight(index), 'u-item-' + index]\"\n\t\t v-for=\"(item, index) in listInfo\" :key=\"index\">\n\t\t\t<view :style=\"[textStyle(index)]\" class=\"u-item-text u-line-1\">{{ item.name }}</view>\n\t\t</view>\n\t\t<view class=\"u-item-bg\" :style=\"[itemBarStyle]\"></view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * subsection 分段器\n\t * @description 该分段器一般用于用户从几个选项中选择某一个的场景\n\t * @tutorial https://www.uviewui.com/components/subsection.html\n\t * @property {Array} list 选项的数组，形式见上方\"基本使用\"\n\t * @property {String Number} current 初始化时默认选中的选项索引值（默认0）\n\t * @property {String} active-color 激活时的颜色，mode为subsection时固定为白色（默认#303133）\n\t * @property {String} inactive-color 未激活时字体的颜色，mode为subsection时无效（默认#606266）\n\t * @property {String} mode 模式选择，见官网\"模式选择\"说明（默认button）\n\t * @property {String Number} font-size 字体大小，单位rpx（默认28）\n\t * @property {String Number} height 组件高度，单位rpx（默认70）\n\t * @property {Boolean} animation 是否开启动画效果，见上方说明（默认true）\n\t * @property {Boolean} bold 激活选项的字体是否加粗（默认true）\n\t * @property {String} bg-color 组件背景颜色，mode为button时有效（默认#eeeeef）\n\t * @property {String} button-color 按钮背景颜色，mode为button时有效（默认#ffffff）\n\t * @event {Function} change 分段器选项发生改变时触发\n\t * @example <u-subsection active-color=\"#ff9900\"></u-subsection>\n\t */\n\texport default {\n\t\tname: \"u-subsection\",\n\t\tprops: {\n\t\t\t// tab的数据\n\t\t\tlist: {\n\t\t\t\ttype: Array,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 当前活动的tab的index\n\t\t\tcurrent: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 0\n\t\t\t},\n\t\t\t// 激活的颜色\n\t\t\tactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#303133'\n\t\t\t},\n\t\t\t// 未激活的颜色\n\t\t\tinactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#606266'\n\t\t\t},\n\t\t\t// 模式选择，mode=button为按钮形式，mode=subsection时为分段模式\n\t\t\tmode: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'button'\n\t\t\t},\n\t\t\t// 字体大小，单位rpx\n\t\t\tfontSize: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 28\n\t\t\t},\n\t\t\t// 是否开启动画效果\n\t\t\tanimation: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 组件的高度，单位rpx\n\t\t\theight: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 70\n\t\t\t},\n\t\t\t// 激活tab的字体是否加粗\n\t\t\tbold: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// mode=button时，组件背景颜色\n\t\t\tbgColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#eeeeef'\n\t\t\t},\n\t\t\t// mode = button时，滑块背景颜色\n\t\t\tbuttonColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#ffffff'\n\t\t\t},\n\t\t\t// 在切换分段器的时候，是否让设备震一下\n\t\t\tvibrateShort: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tlistInfo: [],\n\t\t\t\titemBgStyle: {\n\t\t\t\t\twidth: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tbackgroundColor: '#ffffff',\n\t\t\t\t\theight: '100%',\n\t\t\t\t\ttransition: ''\n\t\t\t\t},\n\t\t\t\tcurrentIndex: this.current,\n\t\t\t\tbuttonPadding: 3, // mode = button 时，组件的内边距\n\t\t\t\tborderRadius: 5, // 圆角值\n\t\t\t\tfirstTimeVibrateShort: true // 组件初始化时，会触发current变化，此时不应震动\n\t\t\t};\n\t\t},\n\t\twatch: {\n\t\t\tcurrent: {\n\t\t\t\timmediate: true,\n\t\t\t\thandler(nVal) {\n\t\t\t\t\tthis.currentIndex = nVal;\n\t\t\t\t\tthis.changeSectionStatus(nVal);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcreated() {\n\t\t\t// 将list的数据，传入listInfo数组，因为不能修改props传递的list值\n\t\t\t// 可以接受直接数组形式，或者数组元素为对象的形式，如：['简介', '评论'],或者[{name: '简介'}, {name: '评论'}]\n\t\t\tthis.listInfo = this.list.map((val, index) => {\n\t\t\t\tif (typeof val != 'object') {\n\t\t\t\t\tlet obj = {\n\t\t\t\t\t\twidth: 0,\n\t\t\t\t\t\tname: val\n\t\t\t\t\t};\n\t\t\t\t\treturn obj;\n\t\t\t\t} else {\n\t\t\t\t\tval.width = 0;\n\t\t\t\t\treturn val;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tcomputed: {\n\t\t\t// 设置mode=subsection时，滑块特有的样式\n\t\t\tnoBorderRight() {\n\t\t\t\treturn index => {\n\t\t\t\t\tif (this.mode != 'subsection') return;\n\t\t\t\t\tlet classs = '';\n\t\t\t\t\t// 不显示右边的边框\n\t\t\t\t\tif (index < this.list.length - 1) classs += ' u-none-border-right';\n\t\t\t\t\t// 显示整个组件的左右边圆角\n\t\t\t\t\tif (index == 0) classs += ' u-item-first';\n\t\t\t\t\tif (index == this.list.length - 1) classs += ' u-item-last';\n\t\t\t\t\treturn classs;\n\t\t\t\t};\n\t\t\t},\n\t\t\t// 文字的样式\n\t\t\ttextStyle() {\n\t\t\t\treturn index => {\n\t\t\t\t\tlet style = {};\n\t\t\t\t\t// 设置字体颜色\n\t\t\t\t\tif (this.mode == 'subsection') {\n\t\t\t\t\t\tif (index == this.currentIndex) {\n\t\t\t\t\t\t\tstyle.color = '#ffffff';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstyle.color = this.activeColor;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (index == this.currentIndex) {\n\t\t\t\t\t\t\tstyle.color = this.activeColor;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstyle.color = this.inactiveColor;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// 字体加粗\n\t\t\t\t\tif (index == this.currentIndex && this.bold) style.fontWeight = 'bold';\n\t\t\t\t\t// 文字大小\n\t\t\t\t\tstyle.fontSize = this.fontSize + 'rpx';\n\t\t\t\t\treturn style;\n\t\t\t\t};\n\t\t\t},\n\t\t\t// 每个分段器item的样式\n\t\t\titemStyle() {\n\t\t\t\treturn index => {\n\t\t\t\t\tlet style = {};\n\t\t\t\t\tif (this.mode == 'subsection') {\n\t\t\t\t\t\t// 设置border的样式\n\t\t\t\t\t\tstyle.borderColor = this.activeColor;\n\t\t\t\t\t\tstyle.borderWidth = '1px';\n\t\t\t\t\t\tstyle.borderStyle = 'solid';\n\t\t\t\t\t}\n\t\t\t\t\treturn style;\n\t\t\t\t};\n\t\t\t},\n\t\t\t// mode=button时，外层view的样式\n\t\t\tsubsectionStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\tstyle.height = uni.upx2px(this.height) + 'px';\n\t\t\t\tif (this.mode == 'button') {\n\t\t\t\t\tstyle.backgroundColor = this.bgColor;\n\t\t\t\t\tstyle.padding = `${this.buttonPadding}px`;\n\t\t\t\t\tstyle.borderRadius = `${this.borderRadius}px`;\n\t\t\t\t}\n\t\t\t\treturn style;\n\t\t\t},\n\t\t\t// 滑块的样式\n\t\t\titemBarStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\tstyle.backgroundColor = this.activeColor;\n\t\t\t\tstyle.zIndex = 1;\n\t\t\t\tif (this.mode == 'button') {\n\t\t\t\t\tstyle.backgroundColor = this.buttonColor;\n\t\t\t\t\tstyle.borderRadius = `${this.borderRadius}px`;\n\t\t\t\t\tstyle.bottom = `${this.buttonPadding}px`;\n\t\t\t\t\tstyle.height = uni.upx2px(this.height) - this.buttonPadding * 2 + 'px';\n\t\t\t\t\tstyle.zIndex = 0;\n\t\t\t\t}\n\t\t\t\treturn Object.assign(this.itemBgStyle, style);\n\t\t\t}\n\t\t},\n\t\tmounted() {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.getTabsInfo();\n\t\t\t}, 10);\n\t\t},\n\t\tmethods: {\n\t\t\t// 改变滑块的样式\n\t\t\tchangeSectionStatus(nVal) {\n\t\t\t\tif (this.mode == 'subsection') {\n\t\t\t\t\t// 根据滑块在最左边和最右边时，显示左边和右边的圆角\n\t\t\t\t\tif (nVal == this.list.length - 1) {\n\t\t\t\t\t\tthis.itemBgStyle.borderRadius = `0 ${this.buttonPadding}px ${this.buttonPadding}px 0`;\n\t\t\t\t\t}\n\t\t\t\t\tif (nVal == 0) {\n\t\t\t\t\t\tthis.itemBgStyle.borderRadius = `${this.buttonPadding}px 0 0 ${this.buttonPadding}px`;\n\t\t\t\t\t}\n\t\t\t\t\tif (nVal > 0 && nVal < this.list.length - 1) {\n\t\t\t\t\t\tthis.itemBgStyle.borderRadius = '0';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// 更新滑块的位置\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.itemBgLeft();\n\t\t\t\t}, 10);\n\t\t\t\tif (this.vibrateShort && !this.firstTimeVibrateShort) {\n\t\t\t\t\t// 使手机产生短促震动，微信小程序有效，APP(HX 2.6.8)和H5无效\n\t\t\t\t\t// #ifndef H5\n\t\t\t\t\tuni.vibrateShort();\n\t\t\t\t\t// #endif\n\t\t\t\t}\n\t\t\t\t// 第一次过后，设置firstTimeVibrateShort为false，让其下一次可以震动(如果允许震动的话)\n\t\t\t\tthis.firstTimeVibrateShort = false;\n\t\t\t},\n\t\t\tclick(index) {\n\t\t\t\t// 不允许点击当前激活选项\n\t\t\t\tif (index == this.currentIndex) return;\n\t\t\t\tthis.currentIndex = index;\n\t\t\t\tthis.changeSectionStatus(index);\n\t\t\t\tthis.$emit('change', Number(index));\n\t\t\t},\n\t\t\t// 获取各个tab的节点信息\n\t\t\tgetTabsInfo() {\n\t\t\t\tlet view = uni.createSelectorQuery().in(this);\n\t\t\t\tfor (let i = 0; i < this.list.length; i++) {\n\t\t\t\t\tview.select('.u-item-' + i).boundingClientRect();\n\t\t\t\t}\n\t\t\t\tview.exec(res => {\n\t\t\t\t\tif (!res.length) {\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tthis.getTabsInfo();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}, 10);\n\t\t\t\t\t}\n\t\t\t\t\t// 将分段器每个item的宽度，放入listInfo数组\n\t\t\t\t\tres.map((val, index) => {\n\t\t\t\t\t\tthis.listInfo[index].width = val.width;\n\t\t\t\t\t});\n\t\t\t\t\t// 初始化滑块的宽度\n\t\t\t\t\tif (this.mode == 'subsection') {\n\t\t\t\t\t\tthis.itemBgStyle.width = this.listInfo[0].width + 'px';\n\t\t\t\t\t} else if (this.mode == 'button') {\n\t\t\t\t\t\tthis.itemBgStyle.width = this.listInfo[0].width + 'px';\n\t\t\t\t\t}\n\t\t\t\t\t// 初始化滑块的位置\n\t\t\t\t\tthis.itemBgLeft();\n\t\t\t\t});\n\t\t\t},\n\t\t\titemBgLeft() {\n\t\t\t\t// 根据是否开启动画效果，\n\t\t\t\tif (this.animation) {\n\t\t\t\t\tthis.itemBgStyle.transition = 'all 0.35s';\n\t\t\t\t} else {\n\t\t\t\t\tthis.itemBgStyle.transition = 'all 0s';\n\t\t\t\t}\n\t\t\t\tlet left = 0;\n\t\t\t\t// 计算当前活跃item到组件左边的距离\n\t\t\t\tthis.listInfo.map((val, index) => {\n\t\t\t\t\tif (index < this.currentIndex) left += val.width;\n\t\t\t\t});\n\t\t\t\t// 根据mode不同模式，计算滑块需要移动的距离\n\t\t\t\tif (this.mode == 'subsection') {\n\t\t\t\t\tthis.itemBgStyle.left = left + 'px';\n\t\t\t\t} else if (this.mode == 'button') {\n\t\t\t\t\tthis.itemBgStyle.left = left + this.buttonPadding + 'px';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-subsection {\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\toverflow: hidden;\n\t\tposition: relative;\n\t}\n\n\t.u-item {\n\t\tflex: 1;\n\t\ttext-align: center;\n\t\tfont-size: 26rpx;\n\t\theight: 100%;\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tcolor: $u-main-color;\n\t\tpadding: 0 6rpx;\n\t}\n\n\t.u-item-bg {\n\t\tbackground-color: $u-type-primary;\n\t\tposition: absolute;\n\t\tz-index: -1;\n\t}\n\n\t.u-none-border-right {\n\t\tborder-right: none !important;\n\t}\n\n\t.u-item-first {\n\t\tborder-top-left-radius: 8rpx;\n\t\tborder-bottom-left-radius: 8rpx;\n\t}\n\n\t.u-item-last {\n\t\tborder-top-right-radius: 8rpx;\n\t\tborder-bottom-right-radius: 8rpx;\n\t}\n\n\t.u-item-text {\n\t\ttransition: all 0.35s;\n\t\tcolor: $u-main-color;\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tposition: relative;\n\t\tz-index: 3;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-swipe-action/u-swipe-action.vue",
    "content": "<template>\n\t<view class=\"\">\n\t\t<movable-area class=\"u-swipe-action\" :style=\"{ backgroundColor: bgColor }\">\n\t\t\t<movable-view\n\t\t\t\tclass=\"u-swipe-view\"\n\t\t\t\t@change=\"change\"\n\t\t\t\t@touchend=\"touchend\"\n\t\t\t\t@touchstart=\"touchstart\"\n\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t:x=\"moveX\"\n\t\t\t\t:style=\"{\n\t\t\t\t\twidth: movableViewWidth ? movableViewWidth : '100%'\n\t\t\t\t}\"\n\t\t\t>\n\t\t\t\t<view\n\t\t\t\t\tclass=\"u-swipe-content\"\n\t\t\t\t\t@tap.stop=\"contentClick\"\n\t\t\t\t>\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-swipe-del\" v-if=\"showBtn\" @tap.stop=\"btnClick(index)\" :style=\"[btnStyle(item.style)]\" v-for=\"(item, index) in options\" :key=\"index\">\n\t\t\t\t\t<view class=\"u-btn-text\">{{ item.text }}</view>\n\t\t\t\t</view>\n\t\t\t</movable-view>\n\t\t</movable-area>\n\t</view>\n</template>\n\n<script>\n/**\n * swipeAction 左滑单元格\n * @description 该组件一般用于左滑唤出操作菜单的场景，用的最多的是左滑删除操作。\n * @tutorial https://www.uviewui.com/components/swipeAction.html\n * @property {String} bg-color 整个组件背景颜色（默认#ffffff）\n * @property {Array} options 数组形式，可以配置背景颜色和文字\n * @property {String Number} index 标识符，点击时候用于区分点击了哪一个，用v-for循环时的index即可\n * @property {String Number} btn-width 按钮宽度，单位rpx（默认180）\n * @property {Boolean} disabled 是否禁止某个swipeAction滑动（默认false）\n * @property {Boolean} show 打开或者关闭某个组件（默认false）\n * @event {Function} click 点击组件时触发\n * @event {Function} close 组件触发关闭状态时\n * @event {Function} content-click 点击内容时触发\n * @event {Function} open 组件触发打开状态时\n * @example <u-swipe-action btn-text=\"收藏\">...</u-swipe-action>\n */\nexport default {\n\tname: 'u-swipe-action',\n\tprops: {\n\t\t// index值，用于得知点击删除的是哪个按钮\n\t\tindex: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: ''\n\t\t},\n\t\t// 滑动按钮的宽度，单位为rpx\n\t\tbtnWidth: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 180\n\t\t},\n\t\t// 是否禁止某个action滑动\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 打开或者关闭组件\n\t\tshow: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 组件背景颜色\n\t\tbgColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#ffffff'\n\t\t},\n\t\t// 是否使手机发生短促震动，目前只在iOS的微信小程序有效(2020-05-06)\n\t\tvibrateShort: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 按钮操作参数\n\t\toptions: {\n\t\t\ttype: Array,\n\t\t\tdefault() {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t}\n\t},\n\twatch: {\n\t\tshow: {\n\t\t\timmediate: true,\n\t\t\thandler(nVal, oVal) {\n\t\t\t\tif (nVal) {\n\t\t\t\t\tthis.open();\n\t\t\t\t} else {\n\t\t\t\t\tthis.close();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tmoveX: 0, // movable-view元素在x轴上需要移动的目标移动距离，用于展开或收起滑动的按钮\n\t\t\tscrollX: 0, // movable-view移动过程中产生的change事件中的x轴移动值\n\t\t\tstatus: false, // 滑动的状态，表示当前是展开还是关闭按钮的状态\n\t\t\tmovableAreaWidth: 0, // 滑动区域\n\t\t\telId: this.$u.guid(), // id，用于通知另外组件关闭时的识别\n\t\t\tshowBtn: false, // 刚开始渲染视图时不显示右边的按钮，避免视图闪动\n\t\t};\n\t},\n\tcomputed: {\n\t\tmovableViewWidth() {\n\t\t\treturn this.movableAreaWidth + this.allBtnWidth + 'px';\n\t\t},\n\t\tinnerBtnWidth() {\n\t\t\treturn uni.upx2px(this.btnWidth);\n\t\t},\n\t\tallBtnWidth() {\n\t\t\treturn uni.upx2px(this.btnWidth) * this.options.length;\n\t\t},\n\t\tbtnStyle() {\n\t\t\treturn style => {\n\t\t\t\tlet css = {};\n\t\t\t\tstyle.width = this.btnWidth + 'rpx';\n\t\t\t\treturn style;\n\t\t\t};\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.getActionRect();\n\t},\n\tmethods: {\n\t\t// 点击按钮\n\t\tbtnClick(index) {\n\t\t\tthis.status = false;\n\t\t\t// this.index为点击的几个组件，index为点击某个组件的第几个按钮(options数组的索引)\n\t\t\tthis.$emit('click', this.index, index);\n\t\t},\n\t\t// movable-view元素移动事件\n\t\tchange(e) {\n\t\t\tthis.scrollX = e.detail.x;\n\t\t},\n\t\t// 关闭按钮状态\n\t\tclose() {\n\t\t\tthis.moveX = 0;\n\t\t\tthis.status = false;\n\t\t},\n\t\t// 打开按钮的状态\n\t\topen() {\n\t\t\tif (this.disabled) return;\n\t\t\tthis.moveX = -this.allBtnWidth;\n\t\t\tthis.status = true;\n\t\t},\n\t\t// 用户手指离开movable-view元素，停止触摸\n\t\ttouchend() {\n\t\t\tthis.moveX = this.scrollX;\n\t\t\t// 停止触摸时候，判断当前是展开还是关闭状态\n\t\t\t// 关闭状态\n\t\t\t// 这一步很重要，需要先给this.moveX一个变化的随机值，否则因为前后设置的为同一个值\n\t\t\t// props单向数据流的原因，导致movable-view元素不会发生变化，切记，详见文档：\n\t\t\t// https://uniapp.dcloud.io/use?id=%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98\n\t\t\tthis.$nextTick(function() {\n\t\t\t\tif (this.status == false) {\n\t\t\t\t\t// 关闭状态左滑，产生的x轴位移为负值，也就是说滑动的距离大于按钮的四分之一宽度，自动展开按钮\n\t\t\t\t\tif (this.scrollX <= -this.allBtnWidth / 4) {\n\t\t\t\t\t\tthis.moveX = -this.allBtnWidth; // 按钮宽度的负值，即为展开状态movable-view元素左滑的距离\n\t\t\t\t\t\tthis.status = true; // 标志当前为展开状态\n\t\t\t\t\t\tthis.emitOpenEvent();\n\t\t\t\t\t\t// 产生震动效果\n\t\t\t\t\t\tif (this.vibrateShort) uni.vibrateShort();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.moveX = 0; // 如果距离没有按钮宽度的四分之一，自动收起\n\t\t\t\t\t\tthis.status = false;\n\t\t\t\t\t\tthis.emitCloseEvent();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// 如果在打开的状态下，右滑动的距离X轴偏移超过按钮的四分之一(负值反过来的四分之三)，自动收起按钮\n\t\t\t\t\tif (this.scrollX > (-this.allBtnWidth * 3) / 4) {\n\t\t\t\t\t\tthis.moveX = 0;\n\t\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\t\tthis.moveX = 101;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis.status = false;\n\t\t\t\t\t\tthis.emitCloseEvent();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.moveX = -this.allBtnWidth;\n\t\t\t\t\t\tthis.status = true;\n\t\t\t\t\t\tthis.emitOpenEvent();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\temitOpenEvent() {\n\t\t\tthis.$emit('open', this.index);\n\t\t},\n\t\temitCloseEvent() {\n\t\t\tthis.$emit('close', this.index);\n\t\t},\n\t\t// 开始触摸\n\t\ttouchstart() {},\n\t\tgetActionRect() {\n\t\t\tthis.$uGetRect('.u-swipe-action').then(res => {\n\t\t\t\tthis.movableAreaWidth = res.width;\n\t\t\t\t// 等视图更新完后，再显示右边的可滑动按钮，防止这些按钮会\"闪一下\"\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.showBtn = true;\n\t\t\t\t})\n\t\t\t});\n\t\t},\n\t\t// 点击内容触发事件\n\t\tcontentClick() {\n\t\t\t// 点击内容时，如果当前为打开状态，收起组件\n\t\t\tif (this.status == true) {\n\t\t\t\tthis.status = 'close';\n\t\t\t\tthis.moveX = 0;\n\t\t\t}\n\t\t\tthis.$emit('content-click', this.index);\n\t\t}\n\t}\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import \"../../libs/css/style.components.scss\";\n\t\n.u-swipe-action {\n\twidth: auto;\n\theight: initial;\n\tposition: relative;\n\toverflow: hidden;\n}\n\n.u-swipe-view {\n\t@include vue-flex;\n\theight: initial;\n\tposition: relative;\n\t/* 这一句很关键，覆盖默认的绝对定位 */\n}\n\n.u-swipe-content {\n\tflex: 1;\n}\n\n.u-swipe-del {\n\tposition: relative;\n\tfont-size: 30rpx;\n\tcolor: #ffffff;\n}\n\n.u-btn-text {\n\tposition: absolute;\n\ttop: 50%;\n\tleft: 50%;\n\ttransform: translate(-50%, -50%);\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-swiper/u-swiper.vue",
    "content": "<template>\n\t<view class=\"u-swiper-wrap\" :style=\"{\n\t\tborderRadius: `${borderRadius}rpx`\n\t}\">\n\t\t<swiper :current=\"elCurrent\" @change=\"change\" @animationfinish=\"animationfinish\" :interval=\"interval\" :circular=\"circular\" :duration=\"duration\" :autoplay=\"autoplay\"\n\t\t :previous-margin=\"effect3d ? effect3dPreviousMargin + 'rpx' : '0'\" :next-margin=\"effect3d ? effect3dPreviousMargin + 'rpx' : '0'\"\n\t\t :style=\"{\n\t\t\t\theight: height + 'rpx',\n\t\t\t\tbackgroundColor: bgColor\n\t\t\t}\">\n\t\t\t<swiper-item class=\"u-swiper-item\" v-for=\"(item, index) in list\" :key=\"index\">\n\t\t\t\t<view class=\"u-list-image-wrap\" @tap.stop.prevent=\"listClick(index)\" :class=\"[uCurrent != index ? 'u-list-scale' : '']\" :style=\"{\n\t\t\t\t\t\tborderRadius: `${borderRadius}rpx`,\n\t\t\t\t\t\ttransform: effect3d && uCurrent != index ? 'scaleY(0.9)' : 'scaleY(1)',\n\t\t\t\t\t\tmargin: effect3d && uCurrent != index ? '0 20rpx' : 0,\n\t\t\t\t\t}\">\n\t\t\t\t\t<image class=\"u-swiper-image\" :src=\"item[name] || item\" :mode=\"imgMode\"></image>\n\t\t\t\t\t<view v-if=\"title && item.title\" class=\"u-swiper-title u-line-1\" :style=\"[{\n\t\t\t\t\t\t\t'padding-bottom': titlePaddingBottom\n\t\t\t\t\t\t}, titleStyle]\">\n\t\t\t\t\t\t{{ item.title }}\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t</swiper-item>\n\t\t</swiper>\n\t\t<view class=\"u-swiper-indicator\" :style=\"{\n\t\t\t\ttop: indicatorPos == 'topLeft' || indicatorPos == 'topCenter' || indicatorPos == 'topRight' ? '12rpx' : 'auto',\n\t\t\t\tbottom: indicatorPos == 'bottomLeft' || indicatorPos == 'bottomCenter' || indicatorPos == 'bottomRight' ? '12rpx' : 'auto',\n\t\t\t\tjustifyContent: justifyContent,\n\t\t\t\tpadding: `0 ${effect3d ? '74rpx' : '24rpx'}`\n\t\t\t}\">\n\t\t\t<block v-if=\"mode == 'rect'\">\n\t\t\t\t<view class=\"u-indicator-item-rect\" :class=\"{ 'u-indicator-item-rect-active': index == uCurrent }\" v-for=\"(item, index) in list\"\n\t\t\t\t :key=\"index\"></view>\n\t\t\t</block>\n\t\t\t<block v-if=\"mode == 'dot'\">\n\t\t\t\t<view class=\"u-indicator-item-dot\" :class=\"{ 'u-indicator-item-dot-active': index == uCurrent }\" v-for=\"(item, index) in list\"\n\t\t\t\t :key=\"index\"></view>\n\t\t\t</block>\n\t\t\t<block v-if=\"mode == 'round'\">\n\t\t\t\t<view class=\"u-indicator-item-round\" :class=\"{ 'u-indicator-item-round-active': index == uCurrent }\" v-for=\"(item, index) in list\"\n\t\t\t\t :key=\"index\"></view>\n\t\t\t</block>\n\t\t\t<block v-if=\"mode == 'number'\">\n\t\t\t\t<view class=\"u-indicator-item-number\">{{ uCurrent + 1 }}/{{ list.length }}</view>\n\t\t\t</block>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * swiper 轮播图\n\t * @description 该组件一般用于导航轮播，广告展示等场景,可开箱即用\n\t * @tutorial https://www.uviewui.com/components/swiper.html\n\t * @property {Array} list 轮播图数据，见官网\"基本使用\"说明\n\t * @property {Boolean} title 是否显示标题文字，需要配合list参数，见官网说明（默认false）\n\t * @property {String} mode 指示器模式，见官网说明（默认round）\n\t * @property {String Number} height 轮播图组件高度，单位rpx（默认250）\n\t * @property {String} indicator-pos 指示器的位置（默认bottomCenter）\n\t * @property {Boolean} effect3d 是否开启3D效果（默认false）\n\t * @property {Boolean} autoplay 是否自动播放（默认true）\n\t * @property {String Number} interval 自动轮播时间间隔，单位ms（默认2500）\n\t * @property {Boolean} circular 是否衔接播放，见官网说明（默认true）\n\t * @property {String} bg-color 背景颜色（默认#f3f4f6）\n\t * @property {String Number} border-radius 轮播图圆角值，单位rpx（默认8）\n\t * @property {Object} title-style 自定义标题样式\n\t * @property {String Number} effect3d-previous-margin mode = true模式的情况下，激活项与前后项之间的距离，单位rpx（默认50）\n\t * @property {String} img-mode 图片的裁剪模式，详见image组件裁剪模式（默认aspectFill）\n\t * @event {Function} click 点击轮播图时触发\n\t * @example <u-swiper :list=\"list\" mode=\"dot\" indicator-pos=\"bottomRight\"></u-swiper>\n\t */\n\texport default {\n\t\tname: \"u-swiper\",\n\t\tprops: {\n\t\t\t// 轮播图的数据,格式如：[{image: 'xxxx', title: 'xxxx'}，{image: 'yyyy', title: 'yyyy'}]，其中title字段可选\n\t\t\tlist: {\n\t\t\t\ttype: Array,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 是否显示title标题\n\t\t\ttitle: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 用户自定义的指示器的样式\n\t\t\tindicator: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn {};\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 圆角值\n\t\t\tborderRadius: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 8\n\t\t\t},\n\t\t\t// 隔多久自动切换\n\t\t\tinterval: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 3000\n\t\t\t},\n\t\t\t// 指示器的模式，rect|dot|number|round\n\t\t\tmode: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'round'\n\t\t\t},\n\t\t\t// list的高度，单位rpx\n\t\t\theight: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 250\n\t\t\t},\n\t\t\t// 指示器的位置，topLeft|topCenter|topRight|bottomLeft|bottomCenter|bottomRight\n\t\t\tindicatorPos: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'bottomCenter'\n\t\t\t},\n\t\t\t// 是否开启缩放效果\n\t\t\teffect3d: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 3D模式的情况下，激活item与前后item之间的距离，单位rpx\n\t\t\teffect3dPreviousMargin: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 50\n\t\t\t},\n\t\t\t// 是否自动播放\n\t\t\tautoplay: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 自动轮播时间间隔，单位ms\n\t\t\tduration: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 500\n\t\t\t},\n\t\t\t// 是否衔接滑动，即到最后一张时接着滑动，是否自动切换到第一张\n\t\t\tcircular: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 图片的裁剪模式 \n\t\t\timgMode: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'aspectFill'\n\t\t\t},\n\t\t\t// 从list数组中读取的图片的属性名\n\t\t\tname: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'image'\n\t\t\t},\n\t\t\t// 背景颜色\n\t\t\tbgColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#f3f4f6'\n\t\t\t},\n\t\t\t// 初始化时，默认显示第几项\n\t\t\tcurrent: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 0\n\t\t\t},\n\t\t\t// 标题的样式，对象形式\n\t\t\ttitleStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault() {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\t// 如果外部的list发生变化，判断长度是否被修改，如果前后长度不一致，重置uCurrent值，避免溢出\n\t\t\tlist(nVal, oVal) {\n\t\t\t\tif(nVal.length !== oVal.length) this.uCurrent = 0;\n\t\t\t},\n\t\t\t// 监听外部current的变化，实时修改内部依赖于此测uCurrent值，如果更新了current，而不是更新uCurrent，\n\t\t\t// 就会错乱，因为指示器是依赖于uCurrent的\n\t\t\tcurrent(n) {\n\t\t\t\tthis.uCurrent = n;\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tuCurrent: this.current // 当前活跃的swiper-item的index\n\t\t\t};\n\t\t},\n\t\tcomputed: {\n\t\t\tjustifyContent() {\n\t\t\t\tif (this.indicatorPos == 'topLeft' || this.indicatorPos == 'bottomLeft') return 'flex-start';\n\t\t\t\tif (this.indicatorPos == 'topCenter' || this.indicatorPos == 'bottomCenter') return 'center';\n\t\t\t\tif (this.indicatorPos == 'topRight' || this.indicatorPos == 'bottomRight') return 'flex-end';\n\t\t\t},\n\t\t\ttitlePaddingBottom() {\n\t\t\t\tlet tmp = 0;\n\t\t\t\tif (this.mode == 'none') return '12rpx';\n\t\t\t\tif (['bottomLeft', 'bottomCenter', 'bottomRight'].indexOf(this.indicatorPos) >= 0 && this.mode == 'number') {\n\t\t\t\t\ttmp = '60rpx';\n\t\t\t\t} else if (['bottomLeft', 'bottomCenter', 'bottomRight'].indexOf(this.indicatorPos) >= 0 && this.mode != 'number') {\n\t\t\t\t\ttmp = '40rpx';\n\t\t\t\t} else {\n\t\t\t\t\ttmp = '12rpx';\n\t\t\t\t}\n\t\t\t\treturn tmp;\n\t\t\t},\n\t\t\t// 因为uni的swiper组件的current参数只接受Number类型，这里做一个转换\n\t\t\telCurrent() {\n\t\t\t\treturn Number(this.current);\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tlistClick(index) {\n\t\t\t\tthis.$emit('click', index);\n\t\t\t},\n\t\t\tchange(e) {\n\t\t\t\tlet current = e.detail.current;\n\t\t\t\tthis.uCurrent = current;\n\t\t\t\t// 发出change事件，表示当前自动切换的index，从0开始\n\t\t\t\tthis.$emit('change', current);\n\t\t\t},\n\t\t\t// 头条小程序不支持animationfinish事件，改由change事件\n\t\t\t// 暂不监听此事件，因为不再给swiper绑定uCurrent属性\n\t\t\tanimationfinish(e) {\n\t\t\t\t// #ifndef MP-TOUTIAO\n\t\t\t\t// this.uCurrent = e.detail.current;\n\t\t\t\t// #endif\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-swiper-wrap {\n\t\tposition: relative;\n\t\toverflow: hidden;\n\t\ttransform: translateY(0);\n\t}\n\n\t.u-swiper-image {\n\t\twidth: 100%;\n\t\twill-change: transform;\n\t\theight: 100%;\n\t\t/* #ifndef APP-NVUE */\n\t\tdisplay: block;\n\t\t/* #endif */\n\t\t/* #ifdef H5 */\n\t\tpointer-events: none;\n\t\t/* #endif */\n\t}\n\n\t.u-swiper-indicator {\n\t\tpadding: 0 24rpx;\n\t\tposition: absolute;\n\t\t@include vue-flex;\n\t\twidth: 100%;\n\t\tz-index: 1;\n\t}\n\n\t.u-indicator-item-rect {\n\t\twidth: 26rpx;\n\t\theight: 8rpx;\n\t\tmargin: 0 6rpx;\n\t\ttransition: all 0.5s;\n\t\tbackground-color: rgba(0, 0, 0, 0.3);\n\t}\n\n\t.u-indicator-item-rect-active {\n\t\tbackground-color: rgba(255, 255, 255, 0.8);\n\t}\n\n\t.u-indicator-item-dot {\n\t\twidth: 14rpx;\n\t\theight: 14rpx;\n\t\tmargin: 0 6rpx;\n\t\tborder-radius: 20rpx;\n\t\ttransition: all 0.5s;\n\t\tbackground-color: rgba(0, 0, 0, 0.3);\n\t}\n\n\t.u-indicator-item-dot-active {\n\t\tbackground-color: rgba(255, 255, 255, 0.8);\n\t}\n\n\t.u-indicator-item-round {\n\t\twidth: 14rpx;\n\t\theight: 14rpx;\n\t\tmargin: 0 6rpx;\n\t\tborder-radius: 20rpx;\n\t\ttransition: all 0.5s;\n\t\tbackground-color: rgba(0, 0, 0, 0.3);\n\t}\n\n\t.u-indicator-item-round-active {\n\t\twidth: 34rpx;\n\t\tbackground-color: rgba(255, 255, 255, 0.8);\n\t}\n\n\t.u-indicator-item-number {\n\t\tpadding: 6rpx 16rpx;\n\t\tline-height: 1;\n\t\tbackground-color: rgba(0, 0, 0, 0.3);\n\t\tborder-radius: 100rpx;\n\t\tfont-size: 26rpx;\n\t\tcolor: rgba(255, 255, 255, 0.8);\n\t}\n\n\t.u-list-scale {\n\t\ttransform-origin: center center;\n\t}\n\n\t.u-list-image-wrap {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tflex: 1;\n\t\ttransition: all 0.5s;\n\t\toverflow: hidden;\n\t\tbox-sizing: content-box;\n\t\tposition: relative;\n\t}\n\n\t.u-swiper-title {\n\t\tposition: absolute;\n\t\tbackground-color: rgba(0, 0, 0, 0.3);\n\t\tbottom: 0;\n\t\tleft: 0;\n\t\twidth: 100%;\n\t\tfont-size: 28rpx;\n\t\tpadding: 12rpx 24rpx;\n\t\tcolor: rgba(255, 255, 255, 0.9);\n\t}\n\n\t.u-swiper-item {\n\t\t@include vue-flex;\n\t\toverflow: hidden;\n\t\talign-items: center;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-switch/u-switch.vue",
    "content": "<template>\n\t<view class=\"u-switch\" :class=\"[value == true ? 'u-switch--on' : '', disabled ? 'u-switch--disabled' : '']\" @tap=\"onClick\"\n\t :style=\"[switchStyle]\">\n\t\t<view class=\"u-switch__node node-class\" :style=\"{\n\t\t\twidth: $u.addUnit(this.size),\n\t\t\theight: $u.addUnit(this.size)\n\t\t}\">\n\t\t\t<u-loading :show=\"loading\" class=\"u-switch__loading\" :size=\"size * 0.6\" :color=\"loadingColor\" />\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * switch 开关选择器\n\t * @description 选择开关一般用于只有两个选择，且只能选其一的场景。\n\t * @tutorial https://www.uviewui.com/components/switch.html\n\t * @property {Boolean} loading 是否处于加载中（默认false）\n\t * @property {Boolean} disabled 是否禁用（默认false）\n\t * @property {String Number} size 开关尺寸，单位rpx（默认50）\n\t * @property {String} active-color 打开时的背景色（默认#2979ff）\n\t * @property {Boolean} inactive-color 关闭时的背景色（默认#ffffff）\n\t * @property {Boolean | Number | String} active-value 打开选择器时通过change事件发出的值（默认true）\n\t * @property {Boolean | Number | String} inactive-value 关闭选择器时通过change事件发出的值（默认false）\n\t * @event {Function} change 在switch打开或关闭时触发\n\t * @example <u-switch v-model=\"checked\" active-color=\"red\" inactive-color=\"#eee\"></u-switch>\n\t */\n\texport default {\n\t\tname: \"u-switch\",\n\t\tprops: {\n\t\t\t// 是否为加载中状态\n\t\t\tloading: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 是否为禁用装填\n\t\t\tdisabled: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 开关尺寸，单位rpx\n\t\t\tsize: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 50\n\t\t\t},\n\t\t\t// 打开时的背景颜色\n\t\t\tactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#2979ff'\n\t\t\t},\n\t\t\t// 关闭时的背景颜色\n\t\t\tinactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#ffffff'\n\t\t\t},\n\t\t\t// 通过v-model双向绑定的值\n\t\t\tvalue: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 是否使手机发生短促震动，目前只在iOS的微信小程序有效(2020-05-06)\n\t\t\tvibrateShort: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 打开选择器时的值\n\t\t\tactiveValue: {\n\t\t\t\ttype: [Number, String, Boolean],\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 关闭选择器时的值\n\t\t\tinactiveValue: {\n\t\t\t\ttype: [Number, String, Boolean],\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tswitchStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\tstyle.fontSize = this.size + 'rpx';\n\t\t\t\tstyle.backgroundColor = this.value ? this.activeColor : this.inactiveColor;\n\t\t\t\treturn style;\n\t\t\t},\n\t\t\tloadingColor() {\n\t\t\t\treturn this.value ? this.activeColor : null;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tonClick() {\n\t\t\t\tif (!this.disabled && !this.loading) {\n\t\t\t\t\t// 使手机产生短促震动，微信小程序有效，APP(HX 2.6.8)和H5无效\n\t\t\t\t\tif(this.vibrateShort) uni.vibrateShort();\n\t\t\t\t\tthis.$emit('input', !this.value);\n\t\t\t\t\t// 放到下一个生命周期，因为双向绑定的value修改父组件状态需要时间，且是异步的\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.$emit('change', this.value ? this.activeValue : this.inactiveValue);\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-switch {\n\t\tposition: relative;\n\t\t/* #ifndef APP-NVUE */\n\t\tdisplay: inline-block;\n\t\t/* #endif */\n\t\tbox-sizing: initial;\n\t\twidth: 2em;\n\t\theight: 1em;\n\t\tbackground-color: #fff;\n\t\tborder: 1px solid rgba(0, 0, 0, 0.1);\n\t\tborder-radius: 1em;\n\t\ttransition: background-color 0.3s;\n\t\tfont-size: 50rpx;\n\t}\n\n\t.u-switch__node {\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tborder-radius: 100%;\n\t\tz-index: 1;\n\t\tbackground-color: #fff;\n\t\tbackground-color: #fff;\n\t\tbox-shadow: 0 3px 1px 0 rgba(0, 0, 0, 0.05), 0 2px 2px 0 rgba(0, 0, 0, 0.1), 0 3px 3px 0 rgba(0, 0, 0, 0.05);\n\t\tbox-shadow: 0 3px 1px 0 rgba(0, 0, 0, 0.05), 0 2px 2px 0 rgba(0, 0, 0, 0.1), 0 3px 3px 0 rgba(0, 0, 0, 0.05);\n\t\ttransition: transform 0.3s cubic-bezier(0.3, 1.05, 0.4, 1.05);\n\t\ttransition: transform 0.3s cubic-bezier(0.3, 1.05, 0.4, 1.05), -webkit-transform 0.3s cubic-bezier(0.3, 1.05, 0.4, 1.05);\n\t\ttransition: transform cubic-bezier(0.3, 1.05, 0.4, 1.05);\n\t\ttransition: transform 0.3s cubic-bezier(0.3, 1.05, 0.4, 1.05)\n\t}\n\n\t.u-switch__loading {\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t}\n\n\t.u-switch--on {\n\t\tbackground-color: #1989fa;\n\t}\n\n\t.u-switch--on .u-switch__node {\n\t\ttransform: translateX(100%);\n\t}\n\n\t.u-switch--disabled {\n\t\topacity: 0.4;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-tabbar/u-tabbar.vue",
    "content": "<template>\n\t<view v-if=\"show\" class=\"u-tabbar\" @touchmove.stop.prevent=\"() => {}\">\n\t\t<view class=\"u-tabbar__content safe-area-inset-bottom\" :style=\"{\n\t\t\theight: $u.addUnit(height),\n\t\t\tbackgroundColor: bgColor,\n\t\t}\" :class=\"{\n\t\t\t'u-border-top': borderTop\n\t\t}\">\n\t\t\t<view class=\"u-tabbar__content__item\" v-for=\"(item, index) in list\" :key=\"index\" :class=\"{\n\t\t\t\t'u-tabbar__content__circle': midButton &&item.midButton\n\t\t\t}\" @tap.stop=\"clickHandler(index)\" :style=\"{\n\t\t\t\tbackgroundColor: bgColor\n\t\t\t}\">\n\t\t\t\t<view :class=\"[\n\t\t\t\t\tmidButton && item.midButton ? 'u-tabbar__content__circle__button' : 'u-tabbar__content__item__button'\n\t\t\t\t]\">\n\t\t\t\t\t<u-icon\n\t\t\t\t\t\t:size=\"midButton && item.midButton ? midButtonSize : iconSize\"\n\t\t\t\t\t\t:name=\"elIconPath(index)\"\n\t\t\t\t\t\timg-mode=\"scaleToFill\"\n\t\t\t\t\t\t:color=\"elColor(index)\"\n\t\t\t\t\t\t:custom-prefix=\"item.customIcon ? 'custom-icon' : 'uicon'\"\n\t\t\t\t\t></u-icon>\n\t\t\t\t\t<u-badge :count=\"item.count\" :is-dot=\"item.isDot\"\n\t\t\t\t\t\tv-if=\"item.count || item.isDot\"\n\t\t\t\t\t\t:offset=\"[-2, getOffsetRight(item.count, item.isDot)]\"\n\t\t\t\t\t></u-badge>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"u-tabbar__content__item__text\" :style=\"{\n\t\t\t\t\tcolor: elColor(index)\n\t\t\t\t}\">\n\t\t\t\t\t<text class=\"u-line-1\">{{item.text}}</text>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t\t<view v-if=\"midButton\" class=\"u-tabbar__content__circle__border\" :class=\"{\n\t\t\t\t'u-border': borderTop,\n\t\t\t}\" :style=\"{\n\t\t\t\tbackgroundColor: bgColor,\n\t\t\t\tleft: midButtonLeft\n\t\t\t}\">\n\t\t\t</view>\n\t\t</view>\n\t\t<!-- 这里加上一个48rpx的高度,是为了增高有凸起按钮时的防塌陷高度(也即按钮凸出来部分的高度) -->\n\t\t<view class=\"u-fixed-placeholder safe-area-inset-bottom\" :style=\"{\n\t\t\t\theight: `calc(${$u.addUnit(height)} + ${midButton ? 48 : 0}rpx)`,\n\t\t\t}\"></view>\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tprops: {\n\t\t\t// 显示与否\n\t\t\tshow: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 通过v-model绑定current值\n\t\t\tvalue: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 0\n\t\t\t},\n\t\t\t// 整个tabbar的背景颜色\n\t\t\tbgColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#ffffff'\n\t\t\t},\n\t\t\t// tabbar的高度，默认50px，单位任意，如果为数值，则为rpx单位\n\t\t\theight: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: '50px'\n\t\t\t},\n\t\t\t// 非凸起图标的大小，单位任意，数值默认rpx\n\t\t\ticonSize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 40\n\t\t\t},\n\t\t\t// 凸起的图标的大小，单位任意，数值默认rpx\n\t\t\tmidButtonSize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 90\n\t\t\t},\n\t\t\t// 激活时的演示，包括字体图标，提示文字等的演示\n\t\t\tactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#303133'\n\t\t\t},\n\t\t\t// 未激活时的颜色\n\t\t\tinactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#606266'\n\t\t\t},\n\t\t\t// 是否显示中部的凸起按钮\n\t\t\tmidButton: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 配置参数\n\t\t\tlist: {\n\t\t\t\ttype: Array,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn []\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 切换前的回调\n\t\t\tbeforeSwitch: {\n\t\t\t\ttype: Function,\n\t\t\t\tdefault: null\n\t\t\t},\n\t\t\t// 是否显示顶部的横线\n\t\t\tborderTop: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 是否隐藏原生tabbar\n\t\t\thideTabBar: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\t// 由于安卓太菜了，通过css居中凸起按钮的外层元素有误差，故通过js计算将其居中\n\t\t\t\tmidButtonLeft: '50%',\n\t\t\t\tpageUrl: '', // 当前页面URL\n\t\t\t}\n\t\t},\n\t\tcreated() {\n\t\t\t// 是否隐藏原生tabbar\n\t\t\tif(this.hideTabBar) uni.hideTabBar();\n\t\t\t// 获取引入了u-tabbar页面的路由地址，该地址没有路径前面的\"/\"\n\t\t\tlet pages = getCurrentPages();\n\t\t\t// 页面栈中的最后一个即为项为当前页面，route属性为页面路径\n\t\t\tthis.pageUrl = pages[pages.length - 1].route;\n\t\t},\n\t\tcomputed: {\n\t\t\telIconPath() {\n\t\t\t\treturn (index) => {\n\t\t\t\t\t// 历遍u-tabbar的每一项item时，判断是否传入了pagePath参数，如果传入了\n\t\t\t\t\t// 和data中的pageUrl参数对比，如果相等，即可判断当前的item对应当前的tabbar页面，设置高亮图标\n\t\t\t\t\t// 采用这个方法，可以无需使用v-model绑定的value值\n\t\t\t\t\tlet pagePath = this.list[index].pagePath;\n\t\t\t\t\t// 如果定义了pagePath属性，意味着使用系统自带tabbar方案，否则使用一个页面用几个组件模拟tabbar页面的方案\n\t\t\t\t\t// 这两个方案对处理tabbar item的激活与否方式不一样\n\t\t\t\t\tif(pagePath) {\n\t\t\t\t\t\tif(pagePath == this.pageUrl || pagePath == '/' + this.pageUrl) {\n\t\t\t\t\t\t\treturn this.list[index].selectedIconPath;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn this.list[index].iconPath;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// 普通方案中，索引等于v-model值时，即为激活项\n\t\t\t\t\t\treturn index == this.value ? this.list[index].selectedIconPath : this.list[index].iconPath\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\telColor() {\n\t\t\t\treturn (index) => {\n\t\t\t\t\t// 判断方法同理于elIconPath\n\t\t\t\t\tlet pagePath = this.list[index].pagePath;\n\t\t\t\t\tif(pagePath) {\n\t\t\t\t\t\tif(pagePath == this.pageUrl || pagePath == '/' + this.pageUrl) return this.activeColor;\n\t\t\t\t\t\telse return this.inactiveColor;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn index == this.value ? this.activeColor : this.inactiveColor;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tmounted() {\n\t\t\tthis.midButton && this.getMidButtonLeft();\n\t\t},\n\t\tmethods: {\n\t\t\tasync clickHandler(index) {\n\t\t\t\tif(this.beforeSwitch && typeof(this.beforeSwitch) === 'function') {\n\t\t\t\t\t// 执行回调，同时传入索引当作参数\n\t\t\t\t\t// 在微信，支付宝等环境(H5正常)，会导致父组件定义的customBack()函数体中的this变成子组件的this\n\t\t\t\t\t// 通过bind()方法，绑定父组件的this，让this.customBack()的this为父组件的上下文\n\t\t\t\t\tlet beforeSwitch = this.beforeSwitch.bind(this.$u.$parent.call(this))(index);\n\t\t\t\t\t// 判断是否返回了promise\n\t\t\t\t\tif (!!beforeSwitch && typeof beforeSwitch.then === 'function') {\n\t\t\t\t\t\tawait beforeSwitch.then(res => {\n\t\t\t\t\t\t\t// promise返回成功，\n\t\t\t\t\t\t\tthis.switchTab(index);\n\t\t\t\t\t\t}).catch(err => {\n\n\t\t\t\t\t\t})\n\t\t\t\t\t} else if(beforeSwitch === true) {\n\t\t\t\t\t\t// 如果返回true\n\t\t\t\t\t\tthis.switchTab(index);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.switchTab(index);\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 切换tab\n\t\t\tswitchTab(index) {\n\t\t\t\t// 发出事件和修改v-model绑定的值\n\t\t\t\tthis.$emit('change', index);\n\t\t\t\t// 如果有配置pagePath属性，使用uni.switchTab进行跳转\n\t\t\t\tif(this.list[index].pagePath) {\n\t\t\t\t\tuni.switchTab({\n\t\t\t\t\t\turl: this.list[index].pagePath\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\t// 如果配置了papgePath属性，将不会双向绑定v-model传入的value值\n\t\t\t\t\t// 因为这个模式下，不再需要v-model绑定的value值了，而是通过getCurrentPages()适配\n\t\t\t\t\tthis.$emit('input', index);\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 计算角标的right值\n\t\t\tgetOffsetRight(count, isDot) {\n\t\t\t\t// 点类型，count大于9(两位数)，分别设置不同的right值，避免位置太挤\n\t\t\t\tif(isDot) {\n\t\t\t\t\treturn -20;\n\t\t\t\t} else if(count > 9) {\n\t\t\t\t\treturn -40;\n\t\t\t\t} else {\n\t\t\t\t\treturn -30;\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 获取凸起按钮外层元素的left值，让其水平居中\n\t\t\tgetMidButtonLeft() {\n\t\t\t\tlet windowWidth = this.$u.sys().windowWidth;\n\t\t\t\t// 由于安卓中css计算left: 50%的结果不准确，故用js计算\n\t\t\t\tthis.midButtonLeft = (windowWidth / 2) + 'px';\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style scoped lang=\"scss\">\n\t@import \"../../libs/css/style.components.scss\";\n\t.u-fixed-placeholder {\n\t\t/* #ifndef APP-NVUE */\n\t\tbox-sizing: content-box;\n\t\t/* #endif */\n\t}\n\n\t.u-tabbar {\n\n\t\t&__content {\n\t\t\t@include vue-flex;\n\t\t\talign-items: center;\n\t\t\tposition: relative;\n\t\t\tposition: fixed;\n\t\t\tbottom: 0;\n\t\t\tleft: 0;\n\t\t\twidth: 100%;\n\t\t\tz-index: 998;\n\t\t\t/* #ifndef APP-NVUE */\n\t\t\tbox-sizing: content-box;\n\t\t\t/* #endif */\n\n\t\t\t&__circle__border {\n\t\t\t\tborder-radius: 100%;\n\t\t\t\twidth: 110rpx;\n\t\t\t\theight: 110rpx;\n\t\t\t\ttop: -48rpx;\n\t\t\t\tposition: absolute;\n\t\t\t\tz-index: 4;\n\t\t\t\tbackground-color: #ffffff;\n\t\t\t\t// 由于安卓的无能，导致只有3个tabbar item时，此css计算方式有误差\n\t\t\t\t// 故使用js计算的形式来定位，此处不注释，是因为js计算有延后，避免出现位置闪动\n\t\t\t\tleft: 50%;\n\t\t\t\ttransform: translateX(-50%);\n\n\t\t\t\t&:after {\n\t\t\t\t\tborder-radius: 100px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&__item {\n\t\t\t\tflex: 1;\n\t\t\t\tjustify-content: center;\n\t\t\t\theight: 100%;\n\t\t\t\tpadding: 12rpx 0;\n\t\t\t\t@include vue-flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\talign-items: center;\n\t\t\t\tposition: relative;\n\n\t\t\t\t&__button {\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\ttop: 14rpx;\n\t\t\t\t\tleft: 50%;\n\t\t\t\t\ttransform: translateX(-50%);\n\t\t\t\t}\n\n\t\t\t\t&__text {\n\t\t\t\t\tcolor: $u-content-color;\n\t\t\t\t\tfont-size: 26rpx;\n\t\t\t\t\tline-height: 28rpx;\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\tbottom: 14rpx;\n\t\t\t\t\tleft: 50%;\n\t\t\t\t\ttransform: translateX(-50%);\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\ttext-align: center;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&__circle {\n\t\t\t\tposition: relative;\n\t\t\t\t@include vue-flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\tjustify-content: space-between;\n\t\t\t\tz-index: 10;\n\t\t\t\t/* #ifndef APP-NVUE */\n\t\t\t\theight: calc(100% - 1px);\n\t\t\t\t/* #endif */\n\n\t\t\t\t&__button {\n\t\t\t\t\twidth: 90rpx;\n\t\t\t\t\theight: 90rpx;\n\t\t\t\t\tborder-radius: 100%;\n\t\t\t\t\t@include vue-flex;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\tbackground-color: #ffffff;\n\t\t\t\t\ttop: -40rpx;\n\t\t\t\t\tleft: 50%;\n\t\t\t\t\tz-index: 6;\n\t\t\t\t\ttransform: translateX(-50%);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-table/u-table.vue",
    "content": "<template>\n\t<view class=\"u-table\" :style=\"[tableStyle]\">\n\t\t<slot />\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * table 表格\n\t * @description 表格组件一般用于展示大量结构化数据的场景\n\t * @tutorial https://www.uviewui.com/components/table.html\n\t * @property {String} border-color 表格边框的颜色（默认#e4e7ed）\n\t * @property {String} bg-color 表格的背景颜色（默认#ffffff）\n\t * @property {String} align 单元格的内容对齐方式，作用类似css的text-align（默认center）\n\t * @property {String} padding 单元格的内边距，同css的padding写法（默认10rpx 0）\n\t * @property {String Number} font-size 单元格字体大小，单位rpx（默认28）\n\t * @property {String} color 单元格字体颜色（默认#606266）\n\t * @property {Object} th-style th单元格的样式，对象形式(将th所需参数放在table组件，是为了避免每一个th组件要写一遍）\n\t * @event {Function} click 点击组件时触发\n\t * @event {Function} close 点击关闭按钮时触发\n\t * @example <u-table></u-table>\n\t */\n\texport default {\n\t\tname: \"u-table\",\n\t\tprops: {\n\t\t\tborderColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#e4e7ed'\n\t\t\t},\n\t\t\talign: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'center'\n\t\t\t},\n\t\t\t// td的内边距\n\t\t\tpadding: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '10rpx 6rpx'\n\t\t\t},\n\t\t\t// 字体大小\n\t\t\tfontSize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 28\n\t\t\t},\n\t\t\t// 字体颜色\n\t\t\tcolor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#606266'\n\t\t\t},\n\t\t\t// th的自定义样式\n\t\t\tthStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// table的背景颜色\n\t\t\tbgColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#ffffff'\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {}\n\t\t},\n\t\tcomputed: {\n\t\t\ttableStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\tstyle.borderLeft = `solid 1px ${this.borderColor}`;\n\t\t\t\tstyle.borderTop = `solid 1px ${this.borderColor}`;\n\t\t\t\tstyle.backgroundColor = this.bgColor;;\n\t\t\t\treturn style;\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-table {\n\t\twidth: 100%;\n\t\tbox-sizing: border-box;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-tabs/u-tabs.vue",
    "content": "<template>\n\t<view class=\"u-tabs\" :style=\"{\n\t\tbackground: bgColor\n\t}\">\n\t\t<!-- $u.getRect()对组件根节点无效，因为写了.in(this)，故这里获取内层接点尺寸 -->\n\t\t<view>\n\t\t\t<scroll-view scroll-x class=\"u-scroll-view\" :scroll-left=\"scrollLeft\" scroll-with-animation>\n\t\t\t\t<view class=\"u-scroll-box\" :id=\"id\" :class=\"{'u-tabs-scroll-flex': !isScroll}\">\n\t\t\t\t\t<view class=\"u-tab-item u-line-1\" :id=\"'u-tab-item-' + index\" v-for=\"(item, index) in list\" :key=\"index\" @tap=\"clickTab(index)\"\n\t\t\t\t\t :style=\"[tabItemStyle(index)]\">\n\t\t\t\t\t\t<u-badge :count=\"item[count] || item['count'] || 0\" :offset=\"offset\" size=\"mini\"></u-badge>\n\t\t\t\t\t\t{{ item[name] || item['name']}}\n\t\t\t\t\t</view>\n\t\t\t\t\t<view v-if=\"showBar\" class=\"u-tab-bar\" :style=\"[tabBarStyle]\"></view>\n\t\t\t\t</view>\n\t\t\t</scroll-view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * tabs 标签\n\t * @description 该组件，是一个tabs标签组件，在标签多的时候，可以配置为左右滑动，标签少的时候，可以禁止滑动。 该组件的一个特点是配置为滚动模式时，激活的tab会自动移动到组件的中间位置。\n\t * @tutorial https://www.uviewui.com/components/tabs.html\n\t * @property {Boolean} is-scroll tabs是否可以左右拖动（默认true）\n\t * @property {Array} list 标签数组，元素为对象，如[{name: '推荐'}]\n\t * @property {String Number} current 指定哪个tab为激活状态（默认0）\n\t * @property {String Number} height 导航栏的高度，单位rpx（默认80）\n\t * @property {String Number} font-size tab文字大小，单位rpx（默认30）\n\t * @property {String Number} duration 滑块移动一次所需的时间，单位秒（默认0.5）\n\t * @property {String} active-color 滑块和激活tab文字的颜色（默认#2979ff）\n\t * @property {String} inactive-color tabs文字颜色（默认#303133）\n\t * @property {String Number} bar-width 滑块宽度，单位rpx（默认40）\n\t * @property {Object} active-item-style 活动tabs item的样式，对象形式\n\t * @property {Object} bar-style 底部滑块的样式，对象形式\n\t * @property {Boolean} show-bar 是否显示底部的滑块（默认true）\n\t * @property {String Number} bar-height 滑块高度，单位rpx（默认6）\n\t * @property {String Number} item-width 标签的宽度（默认auto）\n\t * @property {String Number} gutter 单个tab标签的左右内边距之和，单位rpx（默认40）\n\t * @property {String} bg-color tabs导航栏的背景颜色（默认#ffffff）\n\t * @property {String} name 组件内部读取的list参数中的属性名（tab名称），见官网说明（默认name）\n\t * @property {String} count 组件内部读取的list参数中的属性名（badge徽标数），同name属性的使用，见官网说明（默认count）\n\t * @property {Array} offset 设置badge徽标数的位置偏移，格式为 [x, y]，也即设置的为top和right的值，单位rpx（默认[5, 20]）\n\t * @property {Boolean} bold 激活选项的字体是否加粗（默认true）\n\t * @event {Function} change 点击标签时触发\n\t * @example <u-tabs ref=\"tabs\" :list=\"list\" :is-scroll=\"false\"></u-tabs>\n\t */\n\texport default {\n\t\tname: \"u-tabs\",\n\t\tprops: {\n\t\t\t// 导航菜单是否需要滚动，如只有2或者3个的时候，就不需要滚动了，此时使用flex平分tab的宽度\n\t\t\tisScroll: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t//需循环的标签列表\n\t\t\tlist: {\n\t\t\t\ttype: Array,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 当前活动tab的索引\n\t\t\tcurrent: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 0\n\t\t\t},\n\t\t\t// 导航栏的高度和行高\n\t\t\theight: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 80\n\t\t\t},\n\t\t\t// 字体大小\n\t\t\tfontSize: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 30\n\t\t\t},\n\t\t\t// 过渡动画时长, 单位ms\n\t\t\tduration: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 0.5\n\t\t\t},\n\t\t\t// 选中项的主题颜色\n\t\t\tactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#2979ff'\n\t\t\t},\n\t\t\t// 未选中项的颜色\n\t\t\tinactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#303133'\n\t\t\t},\n\t\t\t// 菜单底部移动的bar的宽度，单位rpx\n\t\t\tbarWidth: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 40\n\t\t\t},\n\t\t\t// 移动bar的高度\n\t\t\tbarHeight: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 6\n\t\t\t},\n\t\t\t// 单个tab的左或有内边距（左右相同）\n\t\t\tgutter: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 30\n\t\t\t},\n\t\t\t// 导航栏的背景颜色\n\t\t\tbgColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#ffffff'\n\t\t\t},\n\t\t\t// 读取传入的数组对象的属性(tab名称)\n\t\t\tname: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'name'\n\t\t\t},\n\t\t\t// 读取传入的数组对象的属性(徽标数)\n\t\t\tcount: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'count'\n\t\t\t},\n\t\t\t// 徽标数位置偏移\n\t\t\toffset: {\n\t\t\t\ttype: Array,\n\t\t\t\tdefault: () => {\n\t\t\t\t\treturn [5, 20]\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 活动tab字体是否加粗\n\t\t\tbold: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 当前活动tab item的样式\n\t\t\tactiveItemStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault() {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 是否显示底部的滑块\n\t\t\tshowBar: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 底部滑块的自定义样式\n\t\t\tbarStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault() {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 标签的宽度\n\t\t\titemWidth: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 'auto'\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tscrollLeft: 0, // 滚动scroll-view的左边滚动距离\n\t\t\t\ttabQueryInfo: [], // 存放对tab菜单查询后的节点信息\n\t\t\t\tcomponentWidth: 0, // 屏幕宽度，单位为px\n\t\t\t\tscrollBarLeft: 0, // 移动bar需要通过translateX()移动的距离\n\t\t\t\tparentLeft: 0, // 父元素(tabs组件)到屏幕左边的距离\n\t\t\t\tid: this.$u.guid(), // id值\n\t\t\t\tcurrentIndex: this.current,\n\t\t\t\tbarFirstTimeMove: true, // 滑块第一次移动时(页面刚生成时)，无需动画，否则给人怪异的感觉\n\t\t\t};\n\t\t},\n\t\twatch: {\n\t\t\t// 监听tab的变化，重新计算tab菜单的布局信息，因为实际使用中菜单可能是通过\n\t\t\t// 后台获取的（如新闻app顶部的菜单），获取返回需要一定时间，所以list变化时，重新获取布局信息\n\t\t\tlist(n, o) {\n\t\t\t\t// list变动时，重制内部索引，否则可能导致超出数组边界的情况\n\t\t\t\tif(n.length !== o.length) this.currentIndex = 0;\n\t\t\t\t// 用$nextTick等待视图更新完毕后再计算tab的局部信息，否则可能因为tab还没生成就获取，就会有问题\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.init();\n\t\t\t\t});\n\t\t\t},\n\t\t\tcurrent: {\n\t\t\t\timmediate: true,\n\t\t\t\thandler(nVal, oVal) {\n\t\t\t\t\t// 视图更新后再执行移动操作\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.currentIndex = nVal;\n\t\t\t\t\t\tthis.scrollByIndex();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\tcomputed: {\n\t\t\t// 移动bar的样式\n\t\t\ttabBarStyle() {\n\t\t\t\tlet style = {\n\t\t\t\t\twidth: this.barWidth + 'rpx',\n\t\t\t\t\ttransform: `translate(${this.scrollBarLeft}px, -100%)`,\n\t\t\t\t\t// 滑块在页面渲染后第一次滑动时，无需动画效果\n\t\t\t\t\t'transition-duration': `${this.barFirstTimeMove ? 0 : this.duration }s`,\n\t\t\t\t\t'background-color': this.activeColor,\n\t\t\t\t\theight: this.barHeight + 'rpx',\n\t\t\t\t\topacity: this.barFirstTimeMove ? 0 : 1,\n\t\t\t\t\t// 设置一个很大的值，它会自动取能用的最大值，不用高度的一半，是因为高度可能是单数，会有小数出现\n\t\t\t\t\t'border-radius': `${this.barHeight / 2}px`\n\t\t\t\t};\n\t\t\t\tObject.assign(style, this.barStyle);\n\t\t\t\treturn style;\n\t\t\t},\n\t\t\t// tab的样式\n\t\t\ttabItemStyle() {\n\t\t\t\treturn (index) => {\n\t\t\t\t\tlet style = {\n\t\t\t\t\t\theight: this.height + 'rpx',\n\t\t\t\t\t\t'line-height': this.height + 'rpx',\n\t\t\t\t\t\t'font-size': this.fontSize + 'rpx',\n\t\t\t\t\t\t'transition-duration': `${this.duration}s`,\n\t\t\t\t\t\tpadding: this.isScroll ? `0 ${this.gutter}rpx` : '',\n\t\t\t\t\t\tflex: this.isScroll ? 'auto' : '1',\n\t\t\t\t\t\twidth: this.$u.addUnit(this.itemWidth)\n\t\t\t\t\t};\n\t\t\t\t\t// 字体加粗\n\t\t\t\t\tif (index == this.currentIndex && this.bold) style.fontWeight = 'bold';\n\t\t\t\t\tif (index == this.currentIndex) {\n\t\t\t\t\t\tstyle.color = this.activeColor;\n\t\t\t\t\t\t// 给选中的tab item添加外部自定义的样式\n\t\t\t\t\t\tstyle = Object.assign(style, this.activeItemStyle);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle.color = this.inactiveColor;\n\t\t\t\t\t}\n\t\t\t\t\treturn style;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\t// 设置一个init方法，方便多处调用\n\t\t\tasync init() {\n\t\t\t\t// 获取tabs组件的尺寸信息\n\t\t\t\tlet tabRect = await this.$uGetRect('#' + this.id);\n\t\t\t\t// tabs组件距离屏幕左边的宽度\n\t\t\t\tthis.parentLeft = tabRect.left;\n\t\t\t\t// tabs组件的宽度\n\t\t\t\tthis.componentWidth = tabRect.width;\n\t\t\t\tthis.getTabRect();\n\t\t\t},\n\t\t\t// 点击某一个tab菜单\n\t\t\tclickTab(index) {\n\t\t\t\t// 点击当前活动tab，不触发事件\n\t\t\t\tif(index == this.currentIndex) return ;\n\t\t\t\t// 发送事件给父组件\n\t\t\t\tthis.$emit('change', index);\n\t\t\t},\n\t\t\t// 查询tab的布局信息\n\t\t\tgetTabRect() {\n\t\t\t\t// 创建节点查询\n\t\t\t\tlet query = uni.createSelectorQuery().in(this);\n\t\t\t\t// 历遍所有tab，这里是执行了查询，最终使用exec()会一次性返回查询的数组结果\n\t\t\t\tfor (let i = 0; i < this.list.length; i++) {\n\t\t\t\t\t// 只要size和rect两个参数\n\t\t\t\t\tquery.select(`#u-tab-item-${i}`).fields({\n\t\t\t\t\t\tsize: true,\n\t\t\t\t\t\trect: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// 执行查询，一次性获取多个结果\n\t\t\t\tquery.exec(\n\t\t\t\t\tfunction(res) {\n\t\t\t\t\t\tthis.tabQueryInfo = res;\n\t\t\t\t\t\t// 初始化滚动条和移动bar的位置\n\t\t\t\t\t\tthis.scrollByIndex();\n\t\t\t\t\t}.bind(this)\n\t\t\t\t);\n\t\t\t},\n\t\t\t// 滚动scroll-view，让活动的tab处于屏幕的中间位置\n\t\t\tscrollByIndex() {\n\t\t\t\t// 当前活动tab的布局信息，有tab菜单的width和left(为元素左边界到父元素左边界的距离)等信息\n\t\t\t\tlet tabInfo = this.tabQueryInfo[this.currentIndex];\n\t\t\t\tif (!tabInfo) return;\n\t\t\t\t// 活动tab的宽度\n\t\t\t\tlet tabWidth = tabInfo.width;\n\t\t\t\t// 活动item的左边到tabs组件左边的距离，用item的left减去tabs的left\n\t\t\t\tlet offsetLeft = tabInfo.left - this.parentLeft;\n\t\t\t\t// 将活动的tabs-item移动到屏幕正中间，实际上是对scroll-view的移动\n\t\t\t\tlet scrollLeft = offsetLeft - (this.componentWidth - tabWidth) / 2;\n\t\t\t\tthis.scrollLeft = scrollLeft < 0 ? 0 : scrollLeft;\n\t\t\t\t// 当前活动item的中点点到左边的距离减去滑块宽度的一半，即可得到滑块所需的移动距离\n\t\t\t\tlet left = tabInfo.left + tabInfo.width / 2 - this.parentLeft;\n\t\t\t\t// 计算当前活跃item到组件左边的距离\n\t\t\t\tthis.scrollBarLeft = left - uni.upx2px(this.barWidth) / 2;\n\t\t\t\t// 第一次移动滑块的时候，barFirstTimeMove为true，放到延时中将其设置false\n\t\t\t\t// 延时是因为scrollBarLeft作用于computed计算时，需要一个过程需，否则导致出错\n\t\t\t\tif(this.barFirstTimeMove == true) {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.barFirstTimeMove = false;\n\t\t\t\t\t}, 100)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tmounted() {\n\t\t\tthis.init();\n\t\t}\n\t};\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\n\tview,\n\tscroll-view {\n\t\tbox-sizing: border-box;\n\t}\n\n\t/* #ifndef APP-NVUE */\n\t::-webkit-scrollbar,\n\t::-webkit-scrollbar,\n\t::-webkit-scrollbar {\n\t\tdisplay: none;\n\t\twidth: 0 !important;\n\t\theight: 0 !important;\n\t\t-webkit-appearance: none;\n\t\tbackground: transparent;\n\t}\n\t/* #endif */\n\n\t.u-scroll-box {\n\t\tposition: relative;\n\t\t/* #ifdef MP-TOUTIAO */\n\t\twhite-space: nowrap;\n\t\t/* #endif */\n\t}\n\n\t/* #ifdef H5 */\n\t// 通过样式穿透，隐藏H5下，scroll-view下的滚动条\n\tscroll-view ::v-deep ::-webkit-scrollbar {\n\t\tdisplay: none;\n\t\twidth: 0 !important;\n\t\theight: 0 !important;\n\t\t-webkit-appearance: none;\n\t\tbackground: transparent;\n\t}\n\t/* #endif */\n\n\t.u-scroll-view {\n\t\twidth: 100%;\n\t\twhite-space: nowrap;\n\t\tposition: relative;\n\t}\n\n\t.u-tab-item {\n\t\tposition: relative;\n\t\t/* #ifndef APP-NVUE */\n\t\tdisplay: inline-block;\n\t\t/* #endif */\n\t\ttext-align: center;\n\t\ttransition-property: background-color, color;\n\t}\n\n\t.u-tab-bar {\n\t\tposition: absolute;\n\t\tbottom: 0;\n\t}\n\n\t.u-tabs-scroll-flex {\n\t\t@include vue-flex;\n\t\tjustify-content: space-between;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-tabs-swiper/u-tabs-swiper.vue",
    "content": "<template>\n\t<view class=\"u-tabs\" :style=\"{\n\t\t\tzIndex: zIndex,\n\t\t\tbackground: bgColor\n\t\t}\">\n\t\t<scroll-view scroll-x class=\"u-scroll-view\" :scroll-left=\"scrollLeft\" scroll-with-animation :style=\"{ zIndex: zIndex + 1 }\">\n\t\t\t<view class=\"u-tabs-scroll-box\" :class=\"{'u-tabs-scroll-flex': !isScroll}\">\n\t\t\t\t<view class=\"u-tabs-item\" :style=\"[tabItemStyle(index)]\"\n\t\t\t\t v-for=\"(item, index) in getTabs\" :key=\"index\" :class=\"[preId + index]\" @tap=\"emit(index)\">\n\t\t\t\t\t<u-badge :count=\"item[count] || item['count'] || 0\" :offset=\"offset\" size=\"mini\"></u-badge>\n\t\t\t\t\t{{ item[name] || item['name']}}\n\t\t\t\t</view>\n\t\t\t\t<view v-if=\"showBar\" class=\"u-scroll-bar\" :style=\"[tabBarStyle]\"></view>\n\t\t\t</view>\n\t\t</scroll-view>\n\t</view>\n</template>\n\n<script>\n\timport colorGradient from '../../libs/function/colorGradient';\n\tlet color = colorGradient;\n\tconst { windowWidth } = uni.getSystemInfoSync();\n\tconst preId = 'UEl_';\n\n\t/**\n\t * tabsSwiper 全屏选项卡\n\t * @description 该组件内部实现主要依托于uniapp的scroll-view和swiper组件，主要特色是切换过程中，tabsSwiper文字的颜色可以渐变，底部滑块可以 跟随式滑动，活动tab滚动居中等。应用场景可以用于需要左右切换页面，比如商城的订单中心(待收货-待付款-待评价-已退货)等应用场景。\n\t * @tutorial https://www.uviewui.com/components/tabsSwiper.html\n\t * @property {Boolean} is-scroll tabs是否可以左右拖动（默认true）\n\t * @property {Array} list 标签数组，元素为对象，如[{name: '推荐'}]\n\t * @property {String Number} current 指定哪个tab为激活状态（默认0）\n\t * @property {String Number} height 导航栏的高度，单位rpx（默认80）\n\t * @property {String Number} font-size tab文字大小，单位rpx（默认30）\n\t * @property {String Number} swiper-width tabs组件外部swiper的宽度，默认为屏幕宽度，单位rpx（默认750）\n\t * @property {String} active-color 滑块和激活tab文字的颜色（默认#2979ff）\n\t * @property {String} inactive-color tabs文字颜色（默认#303133）\n\t * @property {String Number} bar-width 滑块宽度，单位rpx（默认40）\n\t * @property {String Number} bar-height 滑块高度，单位rpx（默认6）\n\t * @property {Object} bar-style 底部滑块的样式，对象形式\n\t * @property {Object} active-item-style 活动tabs item的样式，对象形式\n\t * @property {Boolean} show-bar 是否显示底部的滑块（默认true）\n\t * @property {String Number} gutter 单个tab标签的左右内边距之和，单位rpx（默认40）\n\t * @property {String} bg-color tabs导航栏的背景颜色（默认#ffffff）\n\t * @property {String} name 组件内部读取的list参数中的属性名，见官网说明（默认name）\n\t * @property {String} count 组件内部读取的list参数中的属性名（badge徽标数），同name属性的使用，见官网说明（默认count）\n\t * @property {Array} offset 设置badge徽标数的位置偏移，格式为 [x, y]，也即设置的为top和right的值，单位rpx（默认[5, 20]）\n\t * @property {Boolean} bold 激活选项的字体是否加粗（默认true）\n\t * @event {Function} change 点击标签时触发\n\t * @example <u-tabs-swiper ref=\"tabs\" :list=\"list\" :is-scroll=\"false\"></u-tabs-swiper>\n\t */\n\texport default {\n\t\tname: \"u-tabs-swiper\",\n\t\tprops: {\n\t\t\t// 导航菜单是否需要滚动，如只有2或者3个的时候，就不需要滚动了，此时使用flex平分tab的宽度\n\t\t\tisScroll: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t//需循环的标签列表\n\t\t\tlist: {\n\t\t\t\ttype: Array,\n\t\t\t\tdefault () {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 当前活动tab的索引\n\t\t\tcurrent: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 0\n\t\t\t},\n\t\t\t// 导航栏的高度和行高，单位rpx\n\t\t\theight: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 80\n\t\t\t},\n\t\t\t// 字体大小，单位rpx\n\t\t\tfontSize: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 30\n\t\t\t},\n\t\t\t// 过渡动画时长, 单位s\n\t\t\t// duration: {\n\t\t\t// \ttype: [Number, String],\n\t\t\t// \tdefault: 0.5\n\t\t\t// },\n\t\t\tswiperWidth: {\n\t\t\t\t//line3生效, 外部swiper的宽度, 单位rpx\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 750\n\t\t\t},\n\t\t\t// 选中项的主题颜色\n\t\t\tactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#2979ff'\n\t\t\t},\n\t\t\t// 未选中项的颜色\n\t\t\tinactiveColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#303133'\n\t\t\t},\n\t\t\t// 菜单底部移动的bar的宽度，单位rpx\n\t\t\tbarWidth: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 40\n\t\t\t},\n\t\t\t// 移动bar的高度\n\t\t\tbarHeight: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 6\n\t\t\t},\n\t\t\t// 单个tab的左或右内边距（各占一半），单位rpx\n\t\t\tgutter: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 40\n\t\t\t},\n\t\t\t// 如果是绝对定位，添加z-index值\n\t\t\tzIndex: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 1\n\t\t\t},\n\t\t\t// 导航栏的背景颜色\n\t\t\tbgColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '#ffffff'\n\t\t\t},\n\t\t\t//滚动至中心目标类型\n\t\t\tautoCenterMode: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'window'\n\t\t\t},\n\t\t\t// 读取传入的数组对象的属性(tab名称)\n\t\t\tname: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'name'\n\t\t\t},\n\t\t\t// 读取传入的数组对象的属性(徽标数)\n\t\t\tcount: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'count'\n\t\t\t},\n\t\t\t// 徽标数位置偏移\n\t\t\toffset: {\n\t\t\t\ttype: Array,\n\t\t\t\tdefault: () => {\n\t\t\t\t\treturn [5, 20]\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 活动tab字体是否加粗\n\t\t\tbold: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 当前活动tab item的样式\n\t\t\tactiveItemStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault() {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 是否显示底部的滑块\n\t\t\tshowBar: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\t\t// 底部滑块的自定义样式\n\t\t\tbarStyle: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault() {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tscrollLeft: 0, // 滚动scroll-view的左边滚动距离\n\t\t\t\ttabQueryInfo: [], // 存放对tab菜单查询后的节点信息\n\t\t\t\twindowWidth: 0, // 屏幕宽度，单位为px\n\t\t\t\t//scrollBarLeft: 0, // 移动bar需要通过translateX()移动的距离\n\t\t\t\tanimationFinishCurrent: this.current,\n\t\t\t\tcomponentsWidth: 0,\n\t\t\t\tline3AddDx: 0,\n\t\t\t\tline3Dx: 0,\n\t\t\t\tpreId,\n\t\t\t\tsW: 0,\n\t\t\t\ttabsInfo: [],\n\t\t\t\tcolorGradientArr: [],\n\t\t\t\tcolorStep: 100 // 两个颜色之间的渐变等分\n\t\t\t};\n\t\t},\n\t\tcomputed: {\n\t\t\t// 获取当前活跃的current值\n\t\t\tgetCurrent() {\n\t\t\t\tconst current = Number(this.current);\n\t\t\t\t// 判断是否超出边界\n\t\t\t\tif (current > this.getTabs.length - 1) {\n\t\t\t\t\treturn this.getTabs.length - 1;\n\t\t\t\t}\n\t\t\t\tif (current < 0) return 0;\n\t\t\t\treturn current;\n\t\t\t},\n\t\t\tgetTabs() {\n\t\t\t\treturn this.list;\n\t\t\t},\n\t\t\t// 滑块需要移动的距离\n\t\t\tscrollBarLeft() {\n\t\t\t\treturn Number(this.line3Dx) + Number(this.line3AddDx);\n\t\t\t},\n\t\t\t// 滑块的宽度转为px单位\n\t\t\tbarWidthPx() {\n\t\t\t\treturn uni.upx2px(this.barWidth);\n\t\t\t},\n\t\t\t// tab的样式\n\t\t\ttabItemStyle() {\n\t\t\t\treturn (index) => {\n\t\t\t\t\tlet style = {\n\t\t\t\t\t\theight: this.height + 'rpx',\n\t\t\t\t\t\tlineHeight: this.height + 'rpx',\n\t\t\t\t\t\tpadding: `0 ${this.gutter / 2}rpx`,\n\t\t\t\t\t\tcolor: this.tabsInfo.length > 0 ? (this.tabsInfo[index] ? this.tabsInfo[index].color : this.activeColor) : this.inactiveColor,\n\t\t\t\t\t\tfontSize: this.fontSize + 'rpx',\n\t\t\t\t\t\tzIndex: this.zIndex + 2,\n\t\t\t\t\t\tfontWeight: (index == this.getCurrent && this.bold) ? 'bold' : 'normal'\n\t\t\t\t\t};\n\t\t\t\t\tif(index == this.getCurrent) {\n\t\t\t\t\t\t// 给选中的tab item添加外部自定义的样式\n\t\t\t\t\t\tstyle = Object.assign(style, this.activeItemStyle);\n\t\t\t\t\t}\n\t\t\t\t\treturn style;\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 底部滑块的样式\n\t\t\ttabBarStyle() {\n\t\t\t\tlet style = {\n\t\t\t\t\twidth: this.barWidthPx + 'px',\n\t\t\t\t\theight: this.barHeight + 'rpx',\n\t\t\t\t\tborderRadius: '100px',\n\t\t\t\t\tbackgroundColor: this.activeColor,\n\t\t\t\t\tleft: this.scrollBarLeft + 'px'\n\t\t\t\t};\n\t\t\t\treturn Object.assign(style, this.barStyle);\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\tcurrent(n, o) {\n\t\t\t\tthis.change(n);\n\t\t\t\tthis.setFinishCurrent(n);\n\t\t\t},\n\t\t\tlist() {\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.init();\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\tmounted() {\n\t\t\tthis.init();\n\t\t},\n\t\tmethods: {\n\t\t\tasync init() {\n\t\t\t\tthis.countPx();\n\t\t\t\tawait this.getTabsInfo();\n\t\t\t\tthis.countLine3Dx();\n\t\t\t\tthis.getQuery(() => {\n\t\t\t\t\tthis.setScrollViewToCenter();\n\t\t\t\t});\n\t\t\t\t// 颜色渐变过程数组\n\t\t\t\tthis.colorGradientArr = color.colorGradient(this.inactiveColor, this.activeColor, this.colorStep);\n\t\t\t},\n\t\t\t// 获取各个tab的节点信息\n\t\t\tgetTabsInfo() {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\tlet view = uni.createSelectorQuery().in(this);\n\t\t\t\t\tfor (let i = 0; i < this.list.length; i++) {\n\t\t\t\t\t\tview.select('.' + preId + i).boundingClientRect();\n\t\t\t\t\t}\n\t\t\t\t\tview.exec(res => {\n\t\t\t\t\t\tconst arr = [];\n\t\t\t\t\t\tfor (let i = 0; i < res.length; i++) {\n\t\t\t\t\t\t\t// 给每个tab添加其文字颜色属性\n\t\t\t\t\t\t\tres[i].color = this.inactiveColor;\n\t\t\t\t\t\t\t// 当前tab直接赋予activeColor\n\t\t\t\t\t\t\tif (i == this.getCurrent) res[i].color = this.activeColor;\n\t\t\t\t\t\t\tarr.push(res[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.tabsInfo = arr;\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t},\n\t\t\t// 当swiper滑动结束，计算滑块最终要停留的位置\n\t\t\tcountLine3Dx() {\n\t\t\t\tconst tab = this.tabsInfo[this.animationFinishCurrent];\n\t\t\t\t// 让滑块中心点和当前tab中心重合\n\t\t\t\tif (tab) this.line3Dx = tab.left + tab.width / 2 - this.barWidthPx / 2 - this.tabsInfo[0].left;\n\t\t\t},\n\t\t\tcountPx() {\n\t\t\t\t// swiper宽度由rpx转为px单位，因为dx等，都是px单位\n\t\t\t\tthis.sW = uni.upx2px(Number(this.swiperWidth));\n\t\t\t},\n\t\t\temit(index) {\n\t\t\t\tthis.$emit('change', index);\n\t\t\t},\n\t\t\tchange() {\n\t\t\t\tthis.setScrollViewToCenter();\n\t\t\t},\n\t\t\tgetQuery(cb) {\n\t\t\t\ttry {\n\t\t\t\t\tlet view = uni.createSelectorQuery().in(this).select('.u-tabs');\n\t\t\t\t\tview.fields({\n\t\t\t\t\t\t\tsize: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdata => {\n\t\t\t\t\t\t\tif (data) {\n\t\t\t\t\t\t\t\tthis.componentsWidth = data.width;\n\t\t\t\t\t\t\t\tif (cb && typeof cb === 'function') cb(data);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.getQuery(cb);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t).exec();\n\t\t\t\t} catch (e) {\n\t\t\t\t\tthis.componentsWidth = windowWidth;\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 把活动tab移动到屏幕中心点\n\t\t\tsetScrollViewToCenter() {\n\t\t\t\tlet tab;\n\t\t\t\ttab = this.tabsInfo[this.animationFinishCurrent];\n\t\t\t\tif (tab) {\n\t\t\t\t\tlet tabCenter = tab.left + tab.width / 2;\n\t\t\t\t\tlet fatherWidth;\n\t\t\t\t\t// 活动tab移动到中心时，以屏幕还是tab组件为宽度为基准\n\t\t\t\t\tif (this.autoCenterMode === 'window') {\n\t\t\t\t\t\tfatherWidth = windowWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfatherWidth = this.componentsWidth;\n\t\t\t\t\t}\n\t\t\t\t\tthis.scrollLeft = tabCenter - fatherWidth / 2;\n\t\t\t\t}\n\t\t\t},\n\t\t\tsetDx(dx) {\n\t\t\t\tlet nextTabIndex = dx > 0 ? this.animationFinishCurrent + 1 : this.animationFinishCurrent - 1;\n\t\t\t\t// 判断索引是否超出边界\n\t\t\t\tnextTabIndex = nextTabIndex <= 0 ? 0 : nextTabIndex;\n\t\t\t\tnextTabIndex = nextTabIndex >= this.list.length ? this.list.length - 1 : nextTabIndex;\n\t\t\t\tconst tab = this.tabsInfo[nextTabIndex];\n\t\t\t\t// 当前tab中心点x轴坐标\n\t\t\t\tlet nowTab = this.tabsInfo[this.animationFinishCurrent];\n\t\t\t\tlet nowTabX = nowTab.left + nowTab.width / 2;\n\t\t\t\t// 下一个tab\n\t\t\t\tlet nextTab = this.tabsInfo[nextTabIndex];\n\t\t\t\tlet nextTabX = nextTab.left + nextTab.width / 2;\n\t\t\t\t// 两个tab之间的距离，因为下一个tab可能在当前tab的左边或者右边，取绝对值即可\n\t\t\t\tlet distanceX = Math.abs(nextTabX - nowTabX);\n\t\t\t\tthis.line3AddDx = (dx / this.sW) * distanceX;\n\t\t\t\tthis.setTabColor(this.animationFinishCurrent, nextTabIndex, dx);\n\t\t\t},\n\t\t\t// 设置tab的颜色\n\t\t\tsetTabColor(nowTabIndex, nextTabIndex, dx) {\n\t\t\t\tlet colorIndex = Math.abs(Math.ceil((dx / this.sW) * 100));\n\t\t\t\tlet colorLength = this.colorGradientArr.length;\n\t\t\t\t// 处理超出索引边界的情况\n\t\t\t\tcolorIndex = colorIndex >= colorLength ? colorLength - 1 : colorIndex <= 0 ? 0 : colorIndex;\n\t\t\t\t// 设置下一个tab的颜色\n\t\t\t\tthis.tabsInfo[nextTabIndex].color = this.colorGradientArr[colorIndex];\n\t\t\t\t// 设置当前tab的颜色\n\t\t\t\tthis.tabsInfo[nowTabIndex].color = this.colorGradientArr[colorLength - 1 - colorIndex];\n\t\t\t},\n\t\t\t// swiper结束滑动\n\t\t\tsetFinishCurrent(current) {\n\t\t\t\t// 如果滑动的索引不一致，修改tab颜色变化，因为可能会有直接点击tab的情况\n\t\t\t\tthis.tabsInfo.map((val, index) => {\n\t\t\t\t\tif (current == index) val.color = this.activeColor;\n\t\t\t\t\telse val.color = this.inactiveColor;\n\t\t\t\t\treturn val;\n\t\t\t\t});\n\t\t\t\tthis.line3AddDx = 0;\n\t\t\t\tthis.animationFinishCurrent = current;\n\t\t\t\tthis.countLine3Dx();\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style scoped lang=\"scss\">\n\t@import \"../../libs/css/style.components.scss\";\n\n\tview,\n\tscroll-view {\n\t\tbox-sizing: border-box;\n\t}\n\n\t.u-tabs {\n\t\twidth: 100%;\n\t\ttransition-property: background-color, color;\n\t}\n\n\t/* #ifndef APP-NVUE */\n\t::-webkit-scrollbar,\n\t::-webkit-scrollbar,\n\t::-webkit-scrollbar {\n\t\tdisplay: none;\n\t\twidth: 0 !important;\n\t\theight: 0 !important;\n\t\t-webkit-appearance: none;\n\t\tbackground: transparent;\n\t}\n\t/* #endif */\n\n\t/* #ifdef H5 */\n\t// 通过样式穿透，隐藏H5下，scroll-view下的滚动条\n\tscroll-view ::v-deep ::-webkit-scrollbar {\n\t\tdisplay: none;\n\t\twidth: 0 !important;\n\t\theight: 0 !important;\n\t\t-webkit-appearance: none;\n\t\tbackground: transparent;\n\t}\n\n\t/* #endif */\n\n\t.u-scroll-view {\n\t\twidth: 100%;\n\t\twhite-space: nowrap;\n\t\tposition: relative;\n\t}\n\n\t.u-tabs-scroll-box {\n\t\tposition: relative;\n\t}\n\n\t.u-tabs-scroll-flex {\n\t\t@include vue-flex;\n\t\tjustify-content: space-between;\n\t}\n\n\t.u-tabs-scroll-flex .u-tabs-item {\n\t\tflex: 1;\n\t}\n\n\t.u-tabs-item {\n\t\tposition: relative;\n\t\tdisplay: inline-block;\n\t\ttext-align: center;\n\t\ttransition-property: background-color, color, font-weight;\n\t}\n\n\t.content {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t.boxStyle {\n\t\tpointer-events: none;\n\t\tposition: absolute;\n\t\ttransition-property: all;\n\t}\n\n\t.boxStyle2 {\n\t\tpointer-events: none;\n\t\tposition: absolute;\n\t\tbottom: 0;\n\t\ttransition-property: all;\n\t\ttransform: translateY(-100%);\n\t}\n\n\t.itemBackgroundBox {\n\t\tpointer-events: none;\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\ttransition-property: left, background-color;\n\t\t@include vue-flex;\n\t\tflex-direction: row;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t}\n\n\t.itemBackground {\n\t\theight: 100%;\n\t\twidth: 100%;\n\t\ttransition-property: all;\n\t}\n\n\t.u-scroll-bar {\n\t\tposition: absolute;\n\t\tbottom: 4rpx;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-tag/u-tag.vue",
    "content": "<template>\n\t<view v-if=\"show\" :class=\"[\n\t\tdisabled ? 'u-disabled' : '',\n\t\t'u-size-' + size,\n\t\t'u-shape-' + shape,\n\t\t'u-mode-' + mode + '-' + type\n\t]\"\n\t class=\"u-tag\" :style=\"[customStyle]\" @tap=\"clickTag\">\n\t\t{{text}}\n\t\t<view class=\"u-icon-wrap\" @tap.stop>\n\t\t\t<u-icon @click=\"close\" size=\"22\" v-if=\"closeable\" :color=\"closeIconColor\" \n\t\t\tname=\"close\" class=\"u-close-icon\" :style=\"[iconStyle]\"></u-icon>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * tag 提示\n\t * @description 该组件一般用于标记和选择\n\t * @tutorial https://www.uviewui.com/components/tag.html\n\t * @property {String} type 主题类型（默认primary）\n\t * @property {String} size 标签大小（默认default）\n\t * @property {String} shape 标签形状（默认square）\n\t * @property {String} text 标签的文字内容\n\t * @property {String} bg-color 自定义标签的背景颜色\n\t * @property {String} border-color 标签的边框颜色\n\t * @property {String} close-color 关闭按钮的颜色\n\t * @property {String Number} index 点击标签时，会通过click事件返回该值\n\t * @property {String} mode 模式选择，见官网说明（默认light）\n\t * @property {Boolean} closeable 是否可关闭，设置为true，文字右边会出现一个关闭图标（默认false）\n\t * @property {Boolean} show 标签显示与否（默认true）\n\t * @event {Function} click 点击标签触发\n\t * @event {Function} close closeable为true时，点击标签关闭按钮触发\n\t * @example <u-tag text=\"雪月夜\" type=\"success\" />\n\t */\n\texport default {\n\t\tname: 'u-tag',\n\t\t// 是否禁用这个标签，禁用的话，会屏蔽点击事件\n\t\tprops: {\n\t\t\t// 标签类型info、primary、success、warning、error\n\t\t\ttype: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'primary'\n\t\t\t},\n\t\t\tdisabled: {\n\t\t\t\ttype: [Boolean, String],\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 标签的大小，分为default（默认），mini（较小）\n\t\t\tsize: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'default'\n\t\t\t},\n\t\t\t// tag的形状，circle（两边半圆形）, square（方形，带圆角），circleLeft（左边是半圆），circleRight（右边是半圆）\n\t\t\tshape: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'square'\n\t\t\t},\n\t\t\t// 标签文字\n\t\t\ttext: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 背景颜色，默认为空字符串，即不处理\n\t\t\tbgColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 标签字体颜色，默认为空字符串，即不处理\n\t\t\tcolor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 镂空形式标签的边框颜色\n\t\t\tborderColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 关闭按钮图标的颜色\n\t\t\tcloseColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 点击时返回的索引值，用于区分例遍的数组哪个元素被点击了\n\t\t\tindex: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t\t// 模式选择，dark|light|plain\n\t\t\tmode: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'light'\n\t\t\t},\n\t\t\t// 是否可关闭\n\t\t\tcloseable: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 是否显示\n\t\t\tshow: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\t\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tcustomStyle() {\n\t\t\t\tlet style = {};\n\t\t\t\t// 文字颜色（如果有此值，会覆盖type值的颜色）\n\t\t\t\tif(this.color) style.color = this.color;\n\t\t\t\t// tag的背景颜色（如果有此值，会覆盖type值的颜色）\n\t\t\t\tif(this.bgColor) style.backgroundColor = this.bgColor;\n\t\t\t\t// 如果是镂空型tag，没有传递边框颜色（borderColor）的话，使用文字的颜色（color属性）\n\t\t\t\tif(this.mode == 'plain' && this.color && !this.borderColor) style.borderColor = this.color;\n\t\t\t\telse style.borderColor = this.borderColor;\n\t\t\t\treturn style;\n\t\t\t},\n\t\t\ticonStyle() {\n\t\t\t\tif(!this.closeable) return ;\n\t\t\t\tlet style = {};\n\t\t\t\tif(this.size == 'mini') style.fontSize = '20rpx';\n\t\t\t\telse style.fontSize = '22rpx';\n\t\t\t\tif(this.mode == 'plain' || this.mode == 'light') style.color = this.type;\n\t\t\t\telse if(this.mode == 'dark')  style.color = \"#ffffff\";\n\t\t\t\tif(this.closeColor) style.color = this.closeColor;\n\t\t\t\treturn style;\n\t\t\t},\n\t\t\t// 关闭图标的颜色\n\t\t\tcloseIconColor() {\n\t\t\t\t// 如果定义了关闭图标的颜色，就用此值，否则用字体颜色的值\n\t\t\t\t// 如果上面的二者都没有，如果是dark深色模式，图标就为白色\n\t\t\t\t// 最后如果上面的三者都不合适，就返回type值给图标获取颜色\n\t\t\t\tlet color = '';\n\t\t\t\tif(this.closeColor) return this.closeColor;\n\t\t\t\telse if(this.color) return this.color;\n\t\t\t\telse if(this.mode == 'dark') return '#ffffff';\n\t\t\t\telse return this.type;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\t// 标签被点击\n\t\t\tclickTag() {\n\t\t\t\t// 如果是disabled状态，不发送点击事件\n\t\t\t\tif(this.disabled) return ;\n\t\t\t\tthis.$emit('click', this.index);\n\t\t\t},\n\t\t\t// 点击标签关闭按钮\n\t\t\tclose() {\n\t\t\t\tthis.$emit('close', this.index);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-tag {\n\t\tbox-sizing: border-box;\n\t\talign-items: center;\n\t\tborder-radius: 6rpx;\n\t\t/* #ifndef APP-NVUE */\n\t\tdisplay: inline-block;\n\t\t/* #endif */\n\t\tline-height: 1;\n\t}\n\t\n\t.u-size-default {\n\t\tfont-size: 22rpx;\n\t\tpadding: 12rpx 22rpx;\n\t}\n\t\n\t.u-size-mini {\n\t\tfont-size: 20rpx;\n\t\tpadding: 6rpx 12rpx;\n\t}\n\n\t.u-mode-light-primary {\n\t\tbackground-color: $u-type-primary-light;\n\t\tcolor: $u-type-primary;\n\t\tborder: 1px solid $u-type-primary-disabled;\n\t}\n\t\n\t.u-mode-light-success {\n\t\tbackground-color: $u-type-success-light;\n\t\tcolor: $u-type-success;\n\t\tborder: 1px solid $u-type-success-disabled;\n\t}\n\t\n\t.u-mode-light-error {\n\t\tbackground-color: $u-type-error-light;\n\t\tcolor: $u-type-error;\n\t\tborder: 1px solid $u-type-error-disabled;\n\t}\n\t\n\t.u-mode-light-warning {\n\t\tbackground-color: $u-type-warning-light;\n\t\tcolor: $u-type-warning;\n\t\tborder: 1px solid $u-type-warning-disabled;\n\t}\n\t\n\t.u-mode-light-info {\n\t\tbackground-color: $u-type-info-light;\n\t\tcolor: $u-type-info;\n\t\tborder: 1px solid $u-type-info-disabled;\n\t}\n\t\n\t.u-mode-dark-primary {\n\t\tbackground-color: $u-type-primary;\n\t\tcolor: #FFFFFF;\n\t}\n\t\n\t.u-mode-dark-success {\n\t\tbackground-color: $u-type-success;\n\t\tcolor: #FFFFFF;\n\t}\n\t\n\t.u-mode-dark-error {\n\t\tbackground-color: $u-type-error;\n\t\tcolor: #FFFFFF;\n\t}\n\t\n\t.u-mode-dark-warning {\n\t\tbackground-color: $u-type-warning;\n\t\tcolor: #FFFFFF;\n\t}\n\t\n\t.u-mode-dark-info {\n\t\tbackground-color: $u-type-info;\n\t\tcolor: #FFFFFF;\n\t}\n\t\n\t.u-mode-plain-primary {\n\t\tbackground-color: #FFFFFF;\n\t\tcolor: $u-type-primary;\n\t\tborder: 1px solid $u-type-primary;\n\t}\n\t\n\t.u-mode-plain-success {\n\t\tbackground-color: #FFFFFF;\n\t\tcolor: $u-type-success;\n\t\tborder: 1px solid $u-type-success;\n\t}\n\t\n\t.u-mode-plain-error {\n\t\tbackground-color: #FFFFFF;\n\t\tcolor: $u-type-error;\n\t\tborder: 1px solid $u-type-error;\n\t}\n\t\n\t.u-mode-plain-warning {\n\t\tbackground-color: #FFFFFF;\n\t\tcolor: $u-type-warning;\n\t\tborder: 1px solid $u-type-warning;\n\t}\n\t\n\t.u-mode-plain-info {\n\t\tbackground-color: #FFFFFF;\n\t\tcolor: $u-type-info;\n\t\tborder: 1px solid $u-type-info;\n\t}\n\t\n\t.u-disabled {\n\t\topacity: 0.55;\n\t}\n\n\t.u-shape-circle {\n\t\tborder-radius: 100rpx;\n\t}\n\t\n\t.u-shape-circleRight {\n\t\tborder-radius:  0 100rpx 100rpx 0;\n\t}\n\n\t.u-shape-circleLeft {\n\t\tborder-radius: 100rpx 0 0 100rpx;\n\t}\n\t\n\t.u-close-icon {\n\t\tmargin-left: 14rpx;\n\t\tfont-size: 22rpx;\n\t\tcolor: $u-type-success;\n\t}\n\t\n\t.u-icon-wrap {\n\t\tdisplay: inline-flex;\n\t\ttransform: scale(0.86);\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-td/u-td.vue",
    "content": "<template>\n\t<view class=\"u-td\" :style=\"[tdStyle]\">\n\t\t<slot></slot>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * td td单元格\n\t * @description 表格组件一般用于展示大量结构化数据的场景（搭配u-table使用）\n\t * @tutorial https://www.uviewui.com/components/table.html#td-props\n\t * @property {String Number} width 单元格宽度百分比或者具体带单位的值，如30%， 200rpx等，一般使用百分比，单元格宽度默认为均分tr的长度（默认auto）\n\t * @example <u-td>二年级</u-td>\n\t */\n\texport default {\n\t\tname: \"u-td\",\n\t\tprops: {\n\t\t\t// 宽度，百分比或者具体带单位的值，如30%， 200rpx等，一般使用百分比\n\t\t\twidth: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: 'auto'\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttdStyle: {\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcreated() {\n\t\t\tthis.parent = false;\n\t\t},\n\t\tmounted() {\n\t\t\tthis.parent = this.$u.$parent.call(this, 'u-table');\n\t\t\tif (this.parent) {\n\t\t\t\t// 将父组件的相关参数，合并到本组件\n\t\t\t\tlet style = {};\n\t\t\t\tif (this.width != \"auto\") style.flex = `0 0 ${this.width}`;\n\t\t\t\tstyle.textAlign = this.parent.align;\n\t\t\t\tstyle.fontSize = this.parent.fontSize + 'rpx';\n\t\t\t\tstyle.padding = this.parent.padding;\n\t\t\t\tstyle.borderBottom = `solid 1px ${this.parent.borderColor}`;\n\t\t\t\tstyle.borderRight = `solid 1px ${this.parent.borderColor}`;\n\t\t\t\tstyle.color = this.parent.color;\n\t\t\t\tthis.tdStyle = style;\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\n\t.u-td {\n\t\t@include vue-flex;\n\t\tflex-direction: column;\n\t\tflex: 1;\n\t\tjustify-content: center;\n\t\tfont-size: 28rpx;\n\t\tcolor: $u-content-color;\n\t\talign-self: stretch;\n\t\tbox-sizing: border-box;\n\t\theight: 100%;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-th/u-th.vue",
    "content": "<template>\n\t<view class=\"u-th\" :style=\"[thStyle]\">\n\t\t<slot></slot>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * th th单元格\n\t * @description 表格组件一般用于展示大量结构化数据的场景（搭配u-table使用）\n\t * @tutorial https://www.uviewui.com/components/table.html#td-props\n\t * @property {String Number} width 标题单元格宽度百分比或者具体带单位的值，如30%，200rpx等，一般使用百分比，单元格宽度默认为均分tr的长度\n\t * @example 暂无示例\n\t */\n\texport default {\n\t\tname: \"u-th\",\n\t\tprops: {\n\t\t\t// 宽度，百分比或者具体带单位的值，如30%， 200rpx等，一般使用百分比\n\t\t\twidth: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: ''\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tthStyle: {}\n\t\t\t}\n\t\t},\n\t\tcreated() {\n\t\t\tthis.parent = false;\n\t\t},\n\t\tmounted() {\n\t\t\tthis.parent = this.$u.$parent.call(this, 'u-table');\n\t\t\tif (this.parent) {\n\t\t\t\t// 将父组件的相关参数，合并到本组件\n\t\t\t\tlet style = {};\n\t\t\t\tif (this.width) style.flex = `0 0 ${this.width}`;\n\t\t\t\tstyle.textAlign = this.parent.align;\n\t\t\t\tstyle.padding = this.parent.padding;\n\t\t\t\tstyle.borderBottom = `solid 1px ${this.parent.borderColor}`;\n\t\t\t\tstyle.borderRight = `solid 1px ${this.parent.borderColor}`;\n\t\t\t\tObject.assign(style, this.parent.thStyle);\n\t\t\t\tthis.thStyle = style;\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\n\t.u-th {\n\t\t@include vue-flex;\n\t\tflex-direction: column;\n\t\tflex: 1;\n\t\tjustify-content: center;\n\t\tfont-size: 28rpx;\n\t\tcolor: $u-main-color;\n\t\tfont-weight: bold;\n\t\tbackground-color: rgb(245, 246, 248);\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-time-line/u-time-line.vue",
    "content": "<template>\n\t<view class=\"u-time-axis\">\n\t\t<slot />\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * timeLine 时间轴\n\t * @description 时间轴组件一般用于物流信息展示，各种跟时间相关的记录等场景。\n\t * @tutorial https://www.uviewui.com/components/timeLine.html\n\t * @example <u-time-line></u-time-line>\n\t */\n\texport default {\n\t\tname: \"u-time-line\",\n\t\tdata() {\n\t\t\treturn {\n\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-time-axis {\n\t\tpadding-left: 40rpx;\n\t\tposition: relative;\n\t}\n\n\t.u-time-axis::before {\n\t\tcontent: \" \";\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\ttop: 12rpx;\n\t\twidth: 1px;\n\t\tbottom: 0;\n\t\tborder-left: 1px solid #ddd;\n\t\ttransform-origin: 0 0;\n\t\ttransform: scaleX(0.5);\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-time-line-item/u-time-line-item.vue",
    "content": "<template>\n\t<view class=\"u-time-axis-item\">\n\t\t<slot name=\"content\" />\n\t\t<view class=\"u-time-axis-node\" :style=\"[nodeStyle]\">\n\t\t\t<slot name=\"node\">\n\t\t\t\t<view class=\"u-dot\">\n\t\t\t\t</view>\n\t\t\t</slot>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * timeLineItem 时间轴Item\n\t * @description 时间轴组件一般用于物流信息展示，各种跟时间相关的记录等场景。(搭配u-time-line使用)\n\t * @tutorial https://www.uviewui.com/components/timeLine.html\n\t * @property {String} bg-color 左边节点的背景颜色，一般通过slot内容自定义背景颜色即可（默认#ffffff）\n\t * @property {String Number} node-top 节点左边图标绝对定位的top值，单位rpx\n\t * @example <u-time-line-item node-top=\"2\">...</u-time-line-item>\n\t */\n\texport default {\n\t\tname: \"u-time-line-item\",\n\t\tprops: {\n\t\t\t// 节点的背景颜色\n\t\t\tbgColor: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: \"#ffffff\"\n\t\t\t},\n\t\t\t// 节点左边图标绝对定位的top值\n\t\t\tnodeTop: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: \"\"\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\n\t\t\t}\n\t\t},\n\t\tcomputed: {\n\t\t\tnodeStyle() {\n\t\t\t\tlet style = {\n\t\t\t\t\tbackgroundColor: this.bgColor,\n\t\t\t\t};\n\t\t\t\tif (this.nodeTop != \"\") style.top = this.nodeTop + 'rpx';\n\t\t\t\treturn style;\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-time-axis-item {\n\t\t@include vue-flex;\n\t\tflex-direction: column;\n\t\twidth: 100%;\n\t\tposition: relative;\n\t\tmargin-bottom: 32rpx;\n\t}\n\n\t.u-time-axis-node {\n\t\tposition: absolute;\n\t\ttop: 12rpx;\n\t\tleft: -40rpx;\n\t\ttransform-origin: 0;\n\t\ttransform: translateX(-50%);\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tz-index: 1;\n\t\tfont-size: 24rpx;\n\t}\n\n\t.u-dot {\n\t\theight: 16rpx;\n\t\twidth: 16rpx;\n\t\tborder-radius: 100rpx;\n\t\tbackground: #ddd;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-toast/u-toast.vue",
    "content": "<template>\n\t<view class=\"u-toast\" :class=\"[isShow ? 'u-show' : '', 'u-type-' + tmpConfig.type, 'u-position-' + tmpConfig.position]\" :style=\"{\n\t\tzIndex: uZIndex\n\t}\">\n\t\t<view class=\"u-icon-wrap\">\n\t\t\t<u-icon v-if=\"tmpConfig.icon\" class=\"u-icon\" :name=\"iconName\" :size=\"30\" :color=\"tmpConfig.type\"></u-icon>\n\t\t</view>\n\t\t<text class=\"u-text\">{{tmpConfig.title}}</text>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * toast 消息提示\n\t * @description 此组件表现形式类似uni的uni.showToastAPI，但也有不同的地方。\n\t * @tutorial https://www.uviewui.com/components/toast.html\n\t * @property {String} z-index toast展示时的z-index值\n\t * @event {Function} show 显示toast，如需一进入页面就显示toast，请在onReady生命周期调用\n\t * @example <u-toast ref=\"uToast\" />\n\t */\n\texport default {\n\t\tname: \"u-toast\",\n\t\tprops: {\n\t\t\t// z-index值\n\t\t\tzIndex: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tisShow: false,\n\t\t\t\ttimer: null, // 定时器\n\t\t\t\tconfig: {\n\t\t\t\t\tparams: {}, // URL跳转的参数，对象\n\t\t\t\t\ttitle: '', // 显示文本\n\t\t\t\t\ttype: '', // 主题类型，primary，success，error，warning，black\n\t\t\t\t\tduration: 2000, // 显示的时间，毫秒\n\t\t\t\t\tisTab: false, // 是否跳转tab页面\n\t\t\t\t\turl: '', // toast消失后是否跳转页面，有则跳转，优先级高于back参数\n\t\t\t\t\ticon: true, // 显示的图标\n\t\t\t\t\tposition: 'center', // toast出现的位置\n\t\t\t\t\tcallback: null, // 执行完后的回调函数\n\t\t\t\t\tback: false, // 结束toast是否自动返回上一页\n\t\t\t\t},\n\t\t\t\ttmpConfig: {}, // 将用户配置和内置配置合并后的临时配置变量\n\t\t\t};\n\t\t},\n\t\tcomputed: {\n\t\t\ticonName() {\n\t\t\t\t// 只有不为none，并且type为error|warning|success|info时候，才显示图标\n\t\t\t\tif (['error', 'warning', 'success', 'info'].indexOf(this.tmpConfig.type) >= 0 && this.tmpConfig.icon) {\n\t\t\t\t\tlet icon = this.$u.type2icon(this.tmpConfig.type);\n\t\t\t\t\treturn icon;\n\t\t\t\t}\n\t\t\t},\n\t\t\tuZIndex() {\n\t\t\t\t// 显示toast时候，如果用户有传递z-index值，有限使用\n\t\t\t\treturn this.isShow ? (this.zIndex ? this.zIndex : this.$u.zIndex.toast) : '999999';\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\t// 显示toast组件，由父组件通过this.$refs.xxx.show(options)形式调用\n\t\t\tshow(options) {\n\t\t\t\t// 不降结果合并到this.config变量，避免多次条用u-toast，前后的配置造成混论\n\t\t\t\tthis.tmpConfig = this.$u.deepMerge(this.config, options);\n\t\t\t\tif (this.timer) {\n\t\t\t\t\t// 清除定时器\n\t\t\t\t\tclearTimeout(this.timer);\n\t\t\t\t\tthis.timer = null;\n\t\t\t\t}\n\t\t\t\tthis.isShow = true;\n\t\t\t\tthis.timer = setTimeout(() => {\n\t\t\t\t\t// 倒计时结束，清除定时器，隐藏toast组件\n\t\t\t\t\tthis.isShow = false;\n\t\t\t\t\tclearTimeout(this.timer);\n\t\t\t\t\tthis.timer = null;\n\t\t\t\t\t// 判断是否存在callback方法，如果存在就执行\n\t\t\t\t\ttypeof(this.tmpConfig.callback) === 'function' && this.tmpConfig.callback();\n\t\t\t\t\tthis.timeEnd();\n\t\t\t\t}, this.tmpConfig.duration);\n\t\t\t},\n\t\t\t// 隐藏toast组件，由父组件通过this.$refs.xxx.hide()形式调用\n\t\t\thide() {\n\t\t\t\tthis.isShow = false;\n\t\t\t\tif (this.timer) {\n\t\t\t\t\t// 清除定时器\n\t\t\t\t\tclearTimeout(this.timer);\n\t\t\t\t\tthis.timer = null;\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 倒计时结束之后，进行的一些操作\n\t\t\ttimeEnd() {\n\t\t\t\t// 如果带有url值，根据isTab为true或者false进行跳转\n\t\t\t\tif (this.tmpConfig.url) {\n\t\t\t\t\t// 如果url没有\"/\"开头，添加上，因为uni的路由跳转需要\"/\"开头\n\t\t\t\t\tif (this.tmpConfig.url[0] != '/') this.tmpConfig.url = '/' + this.tmpConfig.url;\n\t\t\t\t\t// 判断是否有传递显式的参数\n\t\t\t\t\tif (Object.keys(this.tmpConfig.params).length) {\n\t\t\t\t\t\t// 判断用户传递的url中，是否带有参数\n\t\t\t\t\t\t// 使用正则匹配，主要依据是判断是否有\"/\",\"?\",\"=\"等，如“/page/index/index?name=mary\"\n\t\t\t\t\t\t// 如果有params参数，转换后无需带上\"?\"\n\t\t\t\t\t\tlet query = '';\n\t\t\t\t\t\tif (/.*\\/.*\\?.*=.*/.test(this.tmpConfig.url)) {\n\t\t\t\t\t\t\t// object对象转为get类型的参数\n\t\t\t\t\t\t\tquery = this.$u.queryParams(this.tmpConfig.params, false);\n\t\t\t\t\t\t\tthis.tmpConfig.url = this.tmpConfig.url + \"&\" + query;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tquery = this.$u.queryParams(this.tmpConfig.params);\n\t\t\t\t\t\t\tthis.tmpConfig.url += query;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// 如果是跳转tab页面，就使用uni.switchTab\n\t\t\t\t\tif (this.tmpConfig.isTab) {\n\t\t\t\t\t\tuni.switchTab({\n\t\t\t\t\t\t\turl: this.tmpConfig.url\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tuni.navigateTo({\n\t\t\t\t\t\t\turl: this.tmpConfig.url\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if(this.tmpConfig.back) {\n\t\t\t\t\t// 回退到上一页\n\t\t\t\t\tthis.$u.route({\n\t\t\t\t\t\ttype: 'back'\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-toast {\n\t\tposition: fixed;\n\t\tz-index: -1;\n\t\ttransition: opacity 0.3s;\n\t\ttext-align: center;\n\t\tcolor: #fff;\n\t\tborder-radius: 8rpx;\n\t\tbackground: #585858;\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tfont-size: 28rpx;\n\t\topacity: 0;\n\t\tpointer-events: none;\n\t\tpadding: 18rpx 40rpx;\n\t}\n\n\t.u-toast.u-show {\n\t\topacity: 1;\n\t}\n\n\t.u-icon {\n\t\tmargin-right: 10rpx;\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tline-height: normal;\n\t}\n\n\t.u-position-center {\n\t\tleft: 50%;\n\t\ttop: 50%;\n\t\ttransform: translate(-50%,-50%);\n\t\t/* #ifndef APP-NVUE */\n\t\tmax-width: 70%;\n\t\t/* #endif */\n\t}\n\n\t.u-position-top {\n\t\tleft: 50%;\n\t\ttop: 20%;\n\t\ttransform: translate(-50%,-50%);\n\t}\n\n\t.u-position-bottom {\n\t\tleft: 50%;\n\t\tbottom: 20%;\n\t\ttransform: translate(-50%,-50%);\n\t}\n\n\t.u-type-primary {\n\t\tcolor: $u-type-primary;\n\t\tbackground-color: $u-type-primary-light;\n\t\tborder: 1px solid rgb(215, 234, 254);\n\t}\n\n\t.u-type-success {\n\t\tcolor: $u-type-success;\n\t\tbackground-color: $u-type-success-light;\n\t\tborder: 1px solid #BEF5C8;\n\t}\n\n\t.u-type-error {\n\t\tcolor: $u-type-error;\n\t\tbackground-color: $u-type-error-light;\n\t\tborder: 1px solid #fde2e2;\n\t}\n\n\t.u-type-warning {\n\t\tcolor: $u-type-warning;\n\t\tbackground-color: $u-type-warning-light;\n\t\tborder: 1px solid #faecd8;\n\t}\n\n\t.u-type-info {\n\t\tcolor: $u-type-info;\n\t\tbackground-color: $u-type-info-light;\n\t\tborder: 1px solid #ebeef5;\n\t}\n\n\t.u-type-default {\n\t\tcolor: #fff;\n\t\tbackground-color: #585858;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-top-tips/u-top-tips.vue",
    "content": "<template>\n\t<view class=\"u-tips\" :class=\"['u-' + type, isShow ? 'u-tip-show' : '']\" :style=\"{\n\t\ttop: navbarHeight + 'px',\n\t\tzIndex: uZIndex\n\t}\">{{ title }}</view>\n</template>\n\n<script>\n\t/**\n\t * topTips 顶部提示\n\t * @description 该组件一般用于页面顶部向下滑出一个提示，尔后自动收起的场景。\n\t * @tutorial https://www.uviewui.com/components/topTips.html\n\t * @property {String Number} navbar-height 导航栏高度(包含状态栏高度在内)，单位PX\n\t * @property {String Number} z-index z-index值（默认975）\n\t * @example <u-top-tips ref=\"uTips\"></u-top-tips>\n\t */\n\texport default {\n\t\tname: \"u-top-tips\",\n\t\tprops: {\n\t\t\t// 导航栏高度，用于提示的初始化\n\t\t\tnavbarHeight: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\t// #ifndef H5\n\t\t\t\tdefault: 0,\n\t\t\t\t// #endif\n\t\t\t\t// #ifdef H5\n\t\t\t\tdefault: 44,\n\t\t\t\t// #endif\n\t\t\t},\n\t\t\t// z-index值\n\t\t\tzIndex: {\n\t\t\t\ttype: [Number, String],\n\t\t\t\tdefault: ''\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttimer: null, // 定时器\n\t\t\t\tisShow: false, // 是否显示消息组件\n\t\t\t\ttitle: '', // 组件中显示的消息内容\n\t\t\t\ttype: 'primary', // 消息的类型（颜色不同），primary，success，error，warning，info\n\t\t\t\tduration: 2000, // 组件显示的时间，单位为毫秒\n\t\t\t};\n\t\t},\n\t\tcomputed: {\n\t\t\tuZIndex() {\n\t\t\t\treturn this.zIndex ? this.zIndex : this.$u.zIndex.topTips;\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tshow(config = {}) {\n\t\t\t\t// 先清除定时器（可能是上一次定义的，需要清除了再开始新的）\n\t\t\t\tclearTimeout(this.timer);\n\t\t\t\t// 时间，内容，类型主题(type)等参数\n\t\t\t\tif (config.duration) this.duration = config.duration;\n\t\t\t\tif (config.type) this.type = config.type;\n\t\t\t\tthis.title = config.title;\n\t\t\t\tthis.isShow = true;\n\t\t\t\t// 倒计时\n\t\t\t\tthis.timer = setTimeout(() => {\n\t\t\t\t\tthis.isShow = false;\n\t\t\t\t\tclearTimeout(this.timer);\n\t\t\t\t\tthis.timer = null;\n\t\t\t\t}, this.duration);\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\tview {\n\t\tbox-sizing: border-box;\n\t}\n\n\t// 顶部弹出类型样式\n\t.u-tips {\n\t\twidth: 100%;\n\t\tposition: fixed;\n\t\tz-index: 1;\n\t\tpadding: 20rpx 30rpx;\n\t\tcolor: #FFFFFF;\n\t\tfont-size: 28rpx;\n\t\tleft: 0;\n\t\tright: 0;\n\t\t@include vue-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\topacity: 0;\n\t\t// 此处为最核心点，translateY(-100%)意味着将其从Y轴隐藏（隐藏到顶部(h5)或者说导航栏(app)下面）\n\t\ttransform: translateY(-100%);\n\t\ttransition: all 0.35s linear;\n\t}\n\n\t.u-tip-show {\n\t\ttransform: translateY(0);\n\t\topacity: 1;\n\t\tz-index: 99;\n\t}\n\n\t.u-primary {\n\t\tbackground: $u-type-primary;\n\t}\n\n\t.u-success {\n\t\tbackground: $u-type-success;\n\t}\n\n\t.u-warning {\n\t\tbackground: $u-type-warning;\n\t}\n\n\t.u-error {\n\t\tbackground: $u-type-error;\n\t}\n\n\t.u-info {\n\t\tbackground: $u-type-info;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-tr/u-tr.vue",
    "content": "<template>\n\t<view class=\"u-tr\">\n\t\t<slot></slot>\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * tr 表格行标签\n\t * @description 表格组件一般用于展示大量结构化数据的场景（搭配<u-table>使用）\n\t * @tutorial https://www.uviewui.com/components/table.html\n\t * @example <u-tr></u-tr>\n\t */\n\texport default {\n\t\tname: \"u-tr\",\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-tr {\n\t\t@include vue-flex;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-upload/u-upload.vue",
    "content": "<template>\n\t<view class=\"u-upload\" v-if=\"!disabled\">\n\t\t<view\n\t\t\tv-if=\"showUploadList\"\n\t\t\tclass=\"u-list-item u-preview-wrap\"\n\t\t\tv-for=\"(item, index) in lists\"\n\t\t\t:key=\"index\"\n\t\t\t:style=\"{\n\t\t\t\twidth: $u.addUnit(width),\n\t\t\t\theight: $u.addUnit(height)\n\t\t\t}\"\n\t\t>\n\t\t\t<view\n\t\t\t\tv-if=\"deletable\"\n\t\t\t\tclass=\"u-delete-icon\"\n\t\t\t\t@tap.stop=\"deleteItem(index)\"\n\t\t\t\t:style=\"{\n\t\t\t\t\tbackground: delBgColor\n\t\t\t\t}\"\n\t\t\t>\n\t\t\t\t<u-icon class=\"u-icon\" :name=\"delIcon\" size=\"20\" :color=\"delColor\"></u-icon>\n\t\t\t</view>\n\t\t\t<u-line-progress\n\t\t\t\tv-if=\"showProgress && item.progress > 0 && item.progress != 100 && !item.error\"\n\t\t\t\t:show-percent=\"false\"\n\t\t\t\theight=\"16\"\n\t\t\t\tclass=\"u-progress\"\n\t\t\t\t:percent=\"item.progress\"\n\t\t\t></u-line-progress>\n\t\t\t<view @tap.stop=\"retry(index)\" v-if=\"item.error\" class=\"u-error-btn\">点击重试</view>\n\t\t\t<image @tap.stop=\"doPreviewImage(item.url || item.path, index)\" class=\"u-preview-image\" v-if=\"!item.isImage\" :src=\"item.url || item.path\" :mode=\"imageMode\"></image>\n\t\t</view>\n\t\t<slot name=\"file\" :file=\"lists\"></slot>\n\t\t<view style=\"display: inline-block;\" @tap=\"selectFile\" v-if=\"maxCount > lists.length\">\n\t\t\t<slot name=\"addBtn\"></slot>\n\t\t\t<view\n\t\t\t\tv-if=\"!customBtn\"\n\t\t\t\tclass=\"u-list-item u-add-wrap\"\n\t\t\t\thover-class=\"u-add-wrap__hover\"\n\t\t\t\thover-stay-time=\"150\"\n\t\t\t\t:style=\"{\n\t\t\t\t\twidth: $u.addUnit(width),\n\t\t\t\t\theight: $u.addUnit(height)\n\t\t\t\t}\"\n\t\t\t>\n\t\t\t\t<u-icon name=\"plus\" class=\"u-add-btn\" size=\"40\"></u-icon>\n\t\t\t\t<view class=\"u-add-tips\">{{ uploadText }}</view>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n/**\n * upload 图片上传\n * @description 该组件用于上传图片场景\n * @tutorial https://www.uviewui.com/components/upload.html\n * @property {String} action 服务器上传地址\n * @property {String Number} max-count 最大选择图片的数量（默认99）\n * @property {Boolean} custom-btn 如果需要自定义选择图片的按钮，设置为true（默认false）\n * @property {Boolean} show-progress 是否显示进度条（默认true）\n * @property {Boolean} disabled 是否启用(显示/移仓)组件（默认false）\n * @property {String} image-mode 预览图片等显示模式，可选值为uni的image的mode属性值（默认aspectFill）\n * @property {String} del-icon 右上角删除图标名称，只能为uView内置图标\n * @property {String} del-bg-color 右上角关闭按钮的背景颜色\n * @property {String | Number} index 在各个回调事件中的最后一个参数返回，用于区别是哪一个组件的事件\n * @property {String} del-color 右上角关闭按钮图标的颜色\n * @property {Object} header 上传携带的头信息，对象形式\n * @property {Object} form-data 上传额外携带的参数\n * @property {String} name 上传文件的字段名，供后端获取使用（默认file）\n * @property {Array<String>} size-type original 原图，compressed 压缩图，默认二者都有（默认['original', 'compressed']）\n * @property {Array<String>} source-type 选择图片的来源，album-从相册选图，camera-使用相机，默认二者都有（默认['album', 'camera']）\n * @property {Boolean} preview-full-image\t是否可以通过uni.previewImage预览已选择的图片（默认true）\n * @property {Boolean} multiple\t是否开启图片多选，部分安卓机型不支持（默认true）\n * @property {Boolean} deletable 是否显示删除图片的按钮（默认true）\n * @property {String Number} max-size 选择单个文件的最大大小，单位B(byte)，默认不限制（默认Number.MAX_VALUE）\n * @property {Array<Object>} file-list 默认显示的图片列表，数组元素为对象，必须提供url属性\n * @property {Boolean} upload-text 选择图片按钮的提示文字（默认“选择图片”）\n * @property {Boolean} auto-upload 选择完图片是否自动上传，见上方说明（默认true）\n * @property {Boolean} show-tips 特殊情况下是否自动提示toast，见上方说明（默认true）\n * @property {Boolean} show-upload-list 是否显示组件内部的图片预览（默认true）\n * @event {Function} on-oversize 图片大小超出最大允许大小\n * @event {Function} on-preview 全屏预览图片时触发\n * @event {Function} on-remove 移除图片时触发\n * @event {Function} on-success 图片上传成功时触发\n * @event {Function} on-change 图片上传后，无论成功或者失败都会触发\n * @event {Function} on-error 图片上传失败时触发\n * @event {Function} on-progress 图片上传过程中的进度变化过程触发\n * @event {Function} on-uploaded 所有图片上传完毕触发\n * @event {Function} on-choose-complete 每次选择图片后触发，只是让外部可以得知每次选择后，内部的文件列表\n * @example <u-upload :action=\"action\" :file-list=\"fileList\" ></u-upload>\n */\nexport default {\n\tname: 'u-upload',\n\tprops: {\n\t\t//是否显示组件自带的图片预览功能\n\t\tshowUploadList: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 后端地址\n\t\taction: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\t// 最大上传数量\n\t\tmaxCount: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 52\n\t\t},\n\t\t//  是否显示进度条\n\t\tshowProgress: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 是否启用\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 预览上传的图片时的裁剪模式，和image组件mode属性一致\n\t\timageMode: {\n\t\t\ttype: String,\n\t\t\tdefault: 'aspectFill'\n\t\t},\n\t\t// 头部信息\n\t\theader: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t\t// 额外携带的参数\n\t\tformData: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t\t// 上传的文件字段名\n\t\tname: {\n\t\t\ttype: String,\n\t\t\tdefault: 'file'\n\t\t},\n\t\t// 所选的图片的尺寸, 可选值为original compressed\n\t\tsizeType: {\n\t\t\ttype: Array,\n\t\t\tdefault() {\n\t\t\t\treturn ['original', 'compressed'];\n\t\t\t}\n\t\t},\n\t\tsourceType: {\n\t\t\ttype: Array,\n\t\t\tdefault() {\n\t\t\t\treturn ['album', 'camera'];\n\t\t\t}\n\t\t},\n\t\t// 是否在点击预览图后展示全屏图片预览\n\t\tpreviewFullImage: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 是否开启图片多选，部分安卓机型不支持\n\t\tmultiple: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 是否展示删除按钮\n\t\tdeletable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 文件大小限制，单位为byte\n\t\tmaxSize: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: Number.MAX_VALUE\n\t\t},\n\t\t// 显示已上传的文件列表\n\t\tfileList: {\n\t\t\ttype: Array,\n\t\t\tdefault() {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\t\t// 上传区域的提示文字\n\t\tuploadText: {\n\t\t\ttype: String,\n\t\t\tdefault: '选择图片'\n\t\t},\n\t\t// 是否自动上传\n\t\tautoUpload: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 是否显示toast消息提示\n\t\tshowTips: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 是否通过slot自定义传入选择图标的按钮\n\t\tcustomBtn: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t// 内部预览图片区域和选择图片按钮的区域宽度\n\t\twidth: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 200\n\t\t},\n\t\t// 内部预览图片区域和选择图片按钮的区域高度\n\t\theight: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 200\n\t\t},\n\t\t// 右上角关闭按钮的背景颜色\n\t\tdelBgColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#fa3534'\n\t\t},\n\t\t// 右上角关闭按钮的叉号图标的颜色\n\t\tdelColor: {\n\t\t\ttype: String,\n\t\t\tdefault: '#ffffff'\n\t\t},\n\t\t// 右上角删除图标名称，只能为uView内置图标\n\t\tdelIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: 'close'\n\t\t},\n\t\t// 如果上传后的返回值为json字符串，是否自动转json\n\t\ttoJson: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\t// 上传前的钩子，每个文件上传前都会执行\n\t\tbeforeUpload: {\n\t\t\ttype: Function,\n\t\t\tdefault: null\n\t\t},\n\t\t// 移除文件前的钩子\n\t\tbeforeRemove: {\n\t\t\ttype: Function,\n\t\t\tdefault: null\n\t\t},\n\t\t// 允许上传的图片后缀\n\t\tlimitType:{\n\t\t\ttype: Array,\n\t\t\tdefault() {\n\t\t\t\t// 支付宝小程序真机选择图片的后缀为\"image\"\n\t\t\t\t// https://opendocs.alipay.com/mini/api/media-image\n\t\t\t\treturn ['png', 'jpg', 'jpeg', 'webp', 'gif', 'image'];\n\t\t\t}\n\t\t},\n\t\t// 在各个回调事件中的最后一个参数返回，用于区别是哪一个组件的事件\n\t\tindex: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: ''\n\t\t}\n\t},\n\tmounted() {},\n\tdata() {\n\t\treturn {\n\t\t\tlists: [],\n\t\t\tisInCount: true,\n\t\t\tuploading: false\n\t\t};\n\t},\n\twatch: {\n\t\tfileList: {\n\t\t\timmediate: true,\n\t\t\thandler(val) {\n\t\t\t\tval.map(value => {\n\t\t\t\t\t// 首先检查内部是否已经添加过这张图片，因为外部绑定了一个对象给fileList的话(对象引用)，进行修改外部fileList\n\t\t\t\t\t// 时，会触发watch，导致重新把原来的图片再次添加到this.lists\n\t\t\t\t\t// 数组的some方法意思是，只要数组元素有任意一个元素条件符合，就返回true，而另一个数组的every方法的意思是数组所有元素都符合条件才返回true\n\t\t\t\t\tlet tmp = this.lists.some(val => {\n\t\t\t\t\t\treturn val.url == value.url;\n\t\t\t\t\t})\n\t\t\t\t\t// 如果内部没有这个图片(tmp为false)，则添加到内部\n\t\t\t\t\t!tmp && this.lists.push({ url: value.url, error: false, progress: 100 });\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t// 监听lists的变化，发出事件\n\t\tlists(n) {\n\t\t\tthis.$emit('on-list-change', n, this.index);\n\t\t}\n\t},\n\tmethods: {\n\t\t// 清除列表\n\t\tclear() {\n\t\t\tthis.lists = [];\n\t\t},\n\t\t// 重新上传队列中上传失败的所有文件\n\t\treUpload() {\n\t\t\tthis.uploadFile();\n\t\t},\n\t\t// 选择图片\n\t\tselectFile() {\n\t\t\tif (this.disabled) return;\n\t\t\tconst { name = '', maxCount, multiple, maxSize, sizeType, lists, camera, compressed, maxDuration, sourceType } = this;\n\t\t\tlet chooseFile = null;\n\t\t\tconst newMaxCount = maxCount - lists.length;\n\t\t\t// 设置为只选择图片的时候使用 chooseImage 来实现\n\t\t\tchooseFile = new Promise((resolve, reject) => {\n\t\t\t\tuni.chooseImage({\n\t\t\t\t\tcount: multiple ? (newMaxCount > 9 ? 9 : newMaxCount) : 1,\n\t\t\t\t\tsourceType: sourceType,\n\t\t\t\t\tsizeType,\n\t\t\t\t\tsuccess: resolve,\n\t\t\t\t\tfail: reject\n\t\t\t\t});\n\t\t\t});\n\t\t\tchooseFile\n\t\t\t\t.then(res => {\n\t\t\t\t\tlet file = null;\n\t\t\t\t\tlet listOldLength = this.lists.length;\n\t\t\t\t\tres.tempFiles.map((val, index) => {\n\t\t\t\t\t\t// 检查文件后缀是否允许，如果不在this.limitType内，就会返回false\n\t\t\t\t\t\tif(!this.checkFileExt(val)) return ;\n\t\t\t\t\t\t\n\t\t\t\t\t\t// 如果是非多选，index大于等于1或者超出最大限制数量时，不处理\n\t\t\t\t\t\tif (!multiple && index >= 1) return;\n\t\t\t\t\t\tif (val.size > maxSize) {\n\t\t\t\t\t\t\tthis.$emit('on-oversize', val, this.lists, this.index);\n\t\t\t\t\t\t\tthis.showToast('超出允许的文件大小');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (maxCount <= lists.length) {\n\t\t\t\t\t\t\t\tthis.$emit('on-exceed', val, this.lists, this.index);\n\t\t\t\t\t\t\t\tthis.showToast('超出最大允许的文件个数');\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlists.push({\n\t\t\t\t\t\t\t\turl: val.path,\n\t\t\t\t\t\t\t\tprogress: 0,\n\t\t\t\t\t\t\t\terror: false,\n\t\t\t\t\t\t\t\tfile: val\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t// 每次图片选择完，抛出一个事件，并将当前内部选择的图片数组抛出去\n\t\t\t\t\tthis.$emit('on-choose-complete', this.lists, this.index);\n\t\t\t\t\tif (this.autoUpload) this.uploadFile(listOldLength);\n\t\t\t\t})\n\t\t\t\t.catch(error => {\n\t\t\t\t\tthis.$emit('on-choose-fail', error);\n\t\t\t\t});\n\t\t},\n\t\t// 提示用户消息\n\t\tshowToast(message, force = false) {\n\t\t\tif (this.showTips || force) {\n\t\t\t\tuni.showToast({\n\t\t\t\t\ttitle: message,\n\t\t\t\t\ticon: 'none'\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t// 该方法供用户通过ref调用，手动上传\n\t\tupload() {\n\t\t\tthis.uploadFile();\n\t\t},\n\t\t// 对失败的图片重新上传\n\t\tretry(index) {\n\t\t\tthis.lists[index].progress = 0;\n\t\t\tthis.lists[index].error = false;\n\t\t\tthis.lists[index].response = null;\n\t\t\tuni.showLoading({\n\t\t\t\ttitle: '重新上传'\n\t\t\t});\n\t\t\tthis.uploadFile(index);\n\t\t},\n\t\t// 上传图片\n\t\tasync uploadFile(index = 0) {\n\t\t\tif (this.disabled) return;\n\t\t\tif (this.uploading) return;\n\t\t\t// 全部上传完成\n\t\t\tif (index >= this.lists.length) {\n\t\t\t\tthis.$emit('on-uploaded', this.lists, this.index);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// 检查是否是已上传或者正在上传中\n\t\t\tif (this.lists[index].progress == 100) {\n\t\t\t\tif (this.autoUpload == false) this.uploadFile(index + 1);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// 执行before-upload钩子\n\t\t\tif(this.beforeUpload && typeof(this.beforeUpload) === 'function') {\n\t\t\t\t// 执行回调，同时传入索引和文件列表当作参数\n\t\t\t\t// 在微信，支付宝等环境(H5正常)，会导致父组件定义的customBack()函数体中的this变成子组件的this\n\t\t\t\t// 通过bind()方法，绑定父组件的this，让this.customBack()的this为父组件的上下文\n\t\t\t\t// 因为upload组件可能会被嵌套在其他组件内，比如u-form，这时this.$parent其实为u-form的this，\n\t\t\t\t// 非页面的this，所以这里需要往上历遍，一直寻找到最顶端的$parent，这里用了this.$u.$parent.call(this)\n\t\t\t\t// 明白意思即可，无需纠结this.$u.$parent.call(this)的细节\n\t\t\t\tlet beforeResponse = this.beforeUpload.bind(this.$u.$parent.call(this))(index, this.lists);\n\t\t\t\t// 判断是否返回了promise\n\t\t\t\tif (!!beforeResponse && typeof beforeResponse.then === 'function') {\n\t\t\t\t\tawait beforeResponse.then(res => {\n\t\t\t\t\t\t// promise返回成功，不进行动作，继续上传\n\t\t\t\t\t}).catch(err => {\n\t\t\t\t\t\t// 进入catch回调的话，继续下一张\n\t\t\t\t\t\treturn this.uploadFile(index + 1);\n\t\t\t\t\t})\n\t\t\t\t} else if(beforeResponse === false) {\n\t\t\t\t\t// 如果返回false，继续下一张图片的上传\n\t\t\t\t\treturn this.uploadFile(index + 1);\n\t\t\t\t} else {\n\t\t\t\t\t// 此处为返回\"true\"的情形，这里不写代码，就跳过此处，继续执行当前的上传逻辑\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 检查上传地址\n\t\t\tif (!this.action) {\n\t\t\t\tthis.showToast('请配置上传地址', true);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.lists[index].error = false;\n\t\t\tthis.uploading = true;\n\t\t\t// 创建上传对象\n\t\t\tconst task = uni.uploadFile({\n\t\t\t\turl: this.action,\n\t\t\t\tfilePath: this.lists[index].url,\n\t\t\t\tname: this.name,\n\t\t\t\tformData: this.formData,\n\t\t\t\theader: this.header,\n\t\t\t\t// #ifdef MP-ALIPAY\n\t\t\t\tfileType:'image',\n\t\t\t\t// #endif\n\t\t\t\tsuccess: res => {\n\t\t\t\t\t// 判断是否json字符串，将其转为json格式\n\t\t\t\t\tlet data = this.toJson && this.$u.test.jsonString(res.data) ? JSON.parse(res.data) : res.data;\n\t\t\t\t\tif (![200, 201, 204].includes(res.statusCode)) {\n\t\t\t\t\t\tthis.uploadError(index, data);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// 上传成功\n\t\t\t\t\t\tthis.lists[index].response = data;\n\t\t\t\t\t\tthis.lists[index].progress = 100;\n\t\t\t\t\t\tthis.lists[index].error = false;\n\t\t\t\t\t\tthis.$emit('on-success', data, index, this.lists, this.index);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tfail: e => {\n\t\t\t\t\tthis.uploadError(index, e);\n\t\t\t\t},\n\t\t\t\tcomplete: res => {\n\t\t\t\t\tuni.hideLoading();\n\t\t\t\t\tthis.uploading = false;\n\t\t\t\t\tthis.uploadFile(index + 1);\n\t\t\t\t\tthis.$emit('on-change', res, index, this.lists, this.index);\n\t\t\t\t}\n\t\t\t});\n\t\t\ttask.onProgressUpdate(res => {\n\t\t\t\tif (res.progress > 0) {\n\t\t\t\t\tthis.lists[index].progress = res.progress;\n\t\t\t\t\tthis.$emit('on-progress', res, index, this.lists, this.index);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t// 上传失败\n\t\tuploadError(index, err) {\n\t\t\tthis.lists[index].progress = 0;\n\t\t\tthis.lists[index].error = true;\n\t\t\tthis.lists[index].response = null;\n\t\t\tthis.$emit('on-error', err, index, this.lists, this.index);\n\t\t\tthis.showToast('上传失败，请重试');\n\t\t},\n\t\t// 删除一个图片\n\t\tdeleteItem(index) {\n\t\t\tuni.showModal({\n\t\t\t\ttitle: '提示',\n\t\t\t\tcontent: '您确定要删除此项吗？',\n\t\t\t\tsuccess: async (res) => {\n\t\t\t\t\tif (res.confirm) {\n\t\t\t\t\t\t// 先检查是否有定义before-remove移除前钩子\n\t\t\t\t\t\t// 执行before-remove钩子\n\t\t\t\t\t\tif(this.beforeRemove && typeof(this.beforeRemove) === 'function') {\n\t\t\t\t\t\t\t// 此处钩子执行 原理同before-remove参数，见上方注释\n\t\t\t\t\t\t\tlet beforeResponse = this.beforeRemove.bind(this.$u.$parent.call(this))(index, this.lists);\n\t\t\t\t\t\t\t// 判断是否返回了promise\n\t\t\t\t\t\t\tif (!!beforeResponse && typeof beforeResponse.then === 'function') {\n\t\t\t\t\t\t\t\tawait beforeResponse.then(res => {\n\t\t\t\t\t\t\t\t\t// promise返回成功，不进行动作，继续上传\n\t\t\t\t\t\t\t\t\tthis.handlerDeleteItem(index);\n\t\t\t\t\t\t\t\t}).catch(err => {\n\t\t\t\t\t\t\t\t\t// 如果进入promise的reject，终止删除操作\n\t\t\t\t\t\t\t\t\tthis.showToast('已终止移除');\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t} else if(beforeResponse === false) {\n\t\t\t\t\t\t\t\t// 返回false，终止删除\n\t\t\t\t\t\t\t\tthis.showToast('已终止移除');\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// 如果返回true，执行删除操作\n\t\t\t\t\t\t\t\tthis.handlerDeleteItem(index);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// 如果不存在before-remove钩子，\n\t\t\t\t\t\t\tthis.handlerDeleteItem(index);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t// 执行移除图片的动作，上方代码只是判断是否可以移除\n\t\thandlerDeleteItem(index) {\n\t\t\t// 如果文件正在上传中，终止上传任务，进度在0 < progress < 100则意味着正在上传\n\t\t\tif (this.lists[index].progress < 100 && this.lists[index].progress > 0) {\n\t\t\t\ttypeof this.lists[index].uploadTask != 'undefined' && this.lists[index].uploadTask.abort();\n\t\t\t}\n\t\t\tthis.lists.splice(index, 1);\n\t\t\tthis.$forceUpdate();\n\t\t\tthis.$emit('on-remove', index, this.lists, this.index);\n\t\t\tthis.showToast('移除成功');\n\t\t},\n\t\t// 用户通过ref手动的形式，移除一张图片\n\t\tremove(index) {\n\t\t\t// 判断索引的合法范围\n\t\t\tif (index >= 0 && index < this.lists.length) {\n\t\t\t\tthis.lists.splice(index, 1);\n\t\t\t\tthis.$emit('on-list-change', this.lists, this.index);\n\t\t\t}\n\t\t},\n\t\t// 预览图片\n\t\tdoPreviewImage(url, index) {\n\t\t\tif (!this.previewFullImage) return;\n\t\t\tconst images = this.lists.map(item => item.url || item.path);\n\t\t\tuni.previewImage({\n\t\t\t\turls: images,\n\t\t\t\tcurrent: url,\n\t\t\t\tsuccess: () => {\n\t\t\t\t\tthis.$emit('on-preview', url, this.lists, this.index);\n\t\t\t\t},\n\t\t\t\tfail: () => {\n\t\t\t\t\tuni.showToast({\n\t\t\t\t\t\ttitle: '预览图片失败',\n\t\t\t\t\t\ticon: 'none'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t// 判断文件后缀是否允许\n\t\tcheckFileExt(file) {\n\t\t\t// 检查是否在允许的后缀中\n\t\t\tlet noArrowExt = false;\n\t\t\t// 获取后缀名\n\t\t\tlet fileExt = '';\n\t\t\tconst reg = /.+\\./;\n\t\t\t// 如果是H5，需要从name中判断\n\t\t\t// #ifdef H5\n\t\t\tfileExt = file.name.replace(reg, \"\").toLowerCase();\n\t\t\t// #endif\n\t\t\t// 非H5，需要从path中读取后缀\n\t\t\t// #ifndef H5\n\t\t\tfileExt = file.path.replace(reg, \"\").toLowerCase();\n\t\t\t// #endif\n\t\t\t// 使用数组的some方法，只要符合limitType中的一个，就返回true\n\t\t\tnoArrowExt = this.limitType.some(ext => {\n\t\t\t\t// 转为小写\n\t\t\t\treturn ext.toLowerCase() === fileExt;\n\t\t\t})\n\t\t\tif(!noArrowExt) this.showToast(`不允许选择${fileExt}格式的文件`);\n\t\t\treturn noArrowExt;\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../libs/css/style.components.scss';\n\n.u-upload {\n\t@include vue-flex;\n\tflex-wrap: wrap;\n\talign-items: center;\n}\n\n.u-list-item {\n\twidth: 200rpx;\n\theight: 200rpx;\n\toverflow: hidden;\n\tmargin: 10rpx;\n\tbackground: rgb(244, 245, 246);\n\tposition: relative;\n\tborder-radius: 10rpx;\n\t/* #ifndef APP-NVUE */\n\tdisplay: flex;\n\t/* #endif */\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.u-preview-wrap {\n\tborder: 1px solid rgb(235, 236, 238);\n}\n\n.u-add-wrap {\n\tflex-direction: column;\n\tcolor: $u-content-color;\n\tfont-size: 26rpx;\n}\n\n.u-add-tips {\n\tmargin-top: 20rpx;\n\tline-height: 40rpx;\n}\n\n.u-add-wrap__hover {\n\tbackground-color: rgb(235, 236, 238);\n}\n\n.u-preview-image {\n\tdisplay: block;\n\twidth: 100%;\n\theight: 100%;\n\tborder-radius: 10rpx;\n}\n\n.u-delete-icon {\n\tposition: absolute;\n\ttop: 10rpx;\n\tright: 10rpx;\n\tz-index: 10;\n\tbackground-color: $u-type-error;\n\tborder-radius: 100rpx;\n\twidth: 44rpx;\n\theight: 44rpx;\n\t@include vue-flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.u-icon {\n\t@include vue-flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.u-progress {\n\tposition: absolute;\n\tbottom: 10rpx;\n\tleft: 8rpx;\n\tright: 8rpx;\n\tz-index: 9;\n\twidth: auto;\n}\n\n.u-error-btn {\n\tcolor: #ffffff;\n\tbackground-color: $u-type-error;\n\tfont-size: 20rpx;\n\tpadding: 4px 0;\n\ttext-align: center;\n\tposition: absolute;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\tz-index: 9;\n\tline-height: 1;\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-verification-code/u-verification-code.vue",
    "content": "<template>\n\t<view class=\"u-code-wrap\">\n\t\t<!-- 此组件功能由js完成，无需写html逻辑 -->\n\t</view>\n</template>\n\n<script>\n\t/**\n\t * verificationCode 验证码输入框\n\t * @description 考虑到用户实际发送验证码的场景，可能是一个按钮，也可能是一段文字，提示语各有不同，所以本组件 不提供界面显示，只提供提示语，由用户将提示语嵌入到具体的场景\n\t * @tutorial https://www.uviewui.com/components/verificationCode.html\n\t * @property {Number String} seconds 倒计时所需的秒数（默认60）\n\t * @property {String} start-text 开始前的提示语，见官网说明（默认获取验证码）\n\t * @property {String} change-text 倒计时期间的提示语，必须带有字母\"x\"，见官网说明（默认X秒重新获取）\n\t * @property {String} end-text 倒计结束的提示语，见官网说明（默认重新获取）\n\t * @property {Boolean} keep-running 是否在H5刷新或各端返回再进入时继续倒计时（默认false）\n\t * @event {Function} change 倒计时期间，每秒触发一次\n\t * @event {Function} start 开始倒计时触发\n\t * @event {Function} end 结束倒计时触发\n\t * @example <u-verification-code :seconds=\"seconds\" @end=\"end\" @start=\"start\" ref=\"uCode\" \n\t */\n\texport default {\n\t\tname: \"u-verification-code\",\n\t\tprops: {\n\t\t\t// 倒计时总秒数\n\t\t\tseconds: {\n\t\t\t\ttype: [String, Number],\n\t\t\t\tdefault: 60\n\t\t\t},\n\t\t\t// 尚未开始时提示\n\t\t\tstartText: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '获取验证码'\n\t\t\t},\n\t\t\t// 正在倒计时中的提示\n\t\t\tchangeText: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'X秒重新获取'\n\t\t\t},\n\t\t\t// 倒计时结束时的提示\n\t\t\tendText: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '重新获取'\n\t\t\t},\n\t\t\t// 是否在H5刷新或各端返回再进入时继续倒计时\n\t\t\tkeepRunning: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\t// 为了区分多个页面，或者一个页面多个倒计时组件本地存储的继续倒计时变了\n\t\t\tuniqueKey: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tsecNum: this.seconds,\n\t\t\t\ttimer: null,\n\t\t\t\tcanGetCode: true, // 是否可以执行验证码操作\n\t\t\t}\n\t\t},\n\t\tmounted() {\n\t\t\tthis.checkKeepRunning();\n\t\t},\n\t\twatch: {\n\t\t\tseconds: {\n\t\t\t\timmediate: true,\n\t\t\t\thandler(n) {\n\t\t\t\t\tthis.secNum = n;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tcheckKeepRunning() {\n\t\t\t\t// 获取上一次退出页面(H5还包括刷新)时的时间戳，如果没有上次的保存，此值可能为空\n\t\t\t\tlet lastTimestamp = Number(uni.getStorageSync(this.uniqueKey + '_$uCountDownTimestamp'));\n\t\t\t\tif(!lastTimestamp) return this.changeEvent(this.startText);\n\t\t\t\t// 当前秒的时间戳\n\t\t\t\tlet nowTimestamp = Math.floor((+ new Date()) / 1000);\n\t\t\t\t// 判断当前的时间戳，是否小于上一次的本该按设定结束，却提前结束的时间戳\n\t\t\t\tif(this.keepRunning && lastTimestamp && lastTimestamp > nowTimestamp) {\n\t\t\t\t\t// 剩余尚未执行完的倒计秒数\n\t\t\t\t\tthis.secNum = lastTimestamp - nowTimestamp;\n\t\t\t\t\t// 清除本地保存的变量\n\t\t\t\t\tuni.removeStorageSync(this.uniqueKey + '_$uCountDownTimestamp');\n\t\t\t\t\t// 开始倒计时\n\t\t\t\t\tthis.start();\n\t\t\t\t} else {\n\t\t\t\t\t// 如果不存在需要继续上一次的倒计时，执行正常的逻辑\n\t\t\t\t\tthis.changeEvent(this.startText);\n\t\t\t\t}\n\t\t\t},\n\t\t\t// 开始倒计时\n\t\t\tstart() {\n\t\t\t\t// 防止快速点击获取验证码的按钮而导致内部产生多个定时器导致混乱\n\t\t\t\tif(this.timer) {\n\t\t\t\t\tclearInterval(this.timer);\n\t\t\t\t\tthis.timer = null;\n\t\t\t\t}\n\t\t\t\tthis.$emit('start');\n\t\t\t\tthis.canGetCode = false;\n\t\t\t\t// 这里放这句，是为了一开始时就提示，否则要等setInterval的1秒后才会有提示\n\t\t\t\tthis.changeEvent(this.changeText.replace(/x|X/, this.secNum));\n\t\t\t\tthis.setTimeToStorage();\n\t\t\t\tthis.timer = setInterval(() => {\n\t\t\t\t\tif (--this.secNum) {\n\t\t\t\t\t\t// 用当前倒计时的秒数替换提示字符串中的\"x\"字母\n\t\t\t\t\t\tthis.changeEvent(this.changeText.replace(/x|X/, this.secNum));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclearInterval(this.timer);\n\t\t\t\t\t\tthis.timer = null;\n\t\t\t\t\t\tthis.changeEvent(this.endText);\n\t\t\t\t\t\tthis.secNum = this.seconds;\n\t\t\t\t\t\tthis.$emit('end');\n\t\t\t\t\t\tthis.canGetCode = true;\n\t\t\t\t\t}\n\t\t\t\t}, 1000);\n\t\t\t},\n\t\t\t// 重置，可以让用户再次获取验证码\n\t\t\treset() {\n\t\t\t\tthis.canGetCode = true;\n\t\t\t\tclearInterval(this.timer);\n\t\t\t\tthis.secNum = this.seconds;\n\t\t\t\tthis.changeEvent(this.endText);\n\t\t\t},\n\t\t\tchangeEvent(text) {\n\t\t\t\tthis.$emit('change', text);\n\t\t\t},\n\t\t\t// 保存时间戳，为了防止倒计时尚未结束，H5刷新或者各端的右上角返回上一页再进来\n\t\t\tsetTimeToStorage() {\n\t\t\t\tif(!this.keepRunning || !this.timer) return;\n\t\t\t\t// 记录当前的时间戳，为了下次进入页面，如果还在倒计时内的话，继续倒计时\n\t\t\t\t// 倒计时尚未结束，结果大于0；倒计时已经开始，就会小于初始值，如果等于初始值，说明没有开始倒计时，无需处理\n\t\t\t\tif(this.secNum > 0 && this.secNum <= this.seconds) {\n\t\t\t\t\t// 获取当前时间戳(+ new Date()为特殊写法)，除以1000变成秒，再去除小数部分\n\t\t\t\t\tlet nowTimestamp = Math.floor((+ new Date()) / 1000);\n\t\t\t\t\t// 将本该结束时候的时间戳保存起来 => 当前时间戳 + 剩余的秒数\n\t\t\t\t\tuni.setStorage({\n\t\t\t\t\t\tkey: this.uniqueKey + '_$uCountDownTimestamp',\n\t\t\t\t\t\tdata: nowTimestamp + Number(this.secNum)\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// 组件销毁的时候，清除定时器，否则定时器会继续存在，系统不会自动清除\n\t\tbeforeDestroy() {\n\t\t\tthis.setTimeToStorage();\n\t\t\tclearTimeout(this.timer);\n\t\t\tthis.timer = null;\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import \"../../libs/css/style.components.scss\";\n\t\n\t.u-code-wrap {\n\t\twidth: 0;\n\t\theight: 0;\n\t\tposition: fixed;\n\t\tz-index: -1;\n\t}\n</style>\n"
  },
  {
    "path": "uview-ui/components/u-waterfall/u-waterfall.vue",
    "content": "<template>\n\t<view class=\"u-waterfall\">\n\t\t<view id=\"u-left-column\" class=\"u-column\"><slot name=\"left\" :leftList=\"leftList\"></slot></view>\n\t\t<view id=\"u-right-column\" class=\"u-column\"><slot name=\"right\" :rightList=\"rightList\"></slot></view>\n\t</view>\n</template>\n\n<script>\n/**\n * waterfall 瀑布流\n * @description 这是一个瀑布流形式的组件，内容分为左右两列，结合uView的懒加载组件效果更佳。相较于某些只是奇偶数左右分别，或者没有利用vue作用域插槽的做法，uView的瀑布流实现了真正的 组件化，搭配LazyLoad 懒加载和loadMore 加载更多组件，让您开箱即用，眼前一亮。\n * @tutorial https://www.uviewui.com/components/waterfall.html\n * @property {Array} flow-list 用于渲染的数据\n * @property {String Number} add-time 单条数据添加到队列的时间间隔，单位ms，见上方注意事项说明（默认200）\n * @example <u-waterfall :flowList=\"flowList\"></u-waterfall>\n */\nexport default {\n\tname: \"u-waterfall\",\n\tprops: {\n\t\tvalue: {\n\t\t\t// 瀑布流数据\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t\tdefault: function() {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\t\t// 每次向结构插入数据的时间间隔，间隔越长，越能保证两列高度相近，但是对用户体验越不好\n\t\t// 单位ms\n\t\taddTime: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 200\n\t\t},\n\t\t// id值，用于清除某一条数据时，根据此idKey名称找到并移除，如数据为{idx: 22, name: 'lisa'}\n\t\t// 那么该把idKey设置为idx\n\t\tidKey: {\n\t\t\ttype: String,\n\t\t\tdefault: 'id'\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tleftList: [],\n\t\t\trightList: [],\n\t\t\ttempList: [],\n\t\t\tchildren: []\n\t\t}\n\t},\n\twatch: {\n\t\tcopyFlowList(nVal, oVal) {\n\t\t\t// 取差值，即这一次数组变化新增的部分\n\t\t\tlet startIndex = Array.isArray(oVal) && oVal.length > 0 ? oVal.length : 0;\n\t\t\t// 拼接上原有数据\n\t\t\tthis.tempList = this.tempList.concat(this.cloneData(nVal.slice(startIndex)));\n\t\t\tthis.splitData();\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.tempList = this.cloneData(this.copyFlowList);\n\t\tthis.splitData();\n\t},\n\tcomputed: {\n\t\t// 破坏flowList变量的引用，否则watch的结果新旧值是一样的\n\t\tcopyFlowList() {\n\t\t\treturn this.cloneData(this.value);\n\t\t}\n\t},\n\tmethods: {\n\t\tasync splitData() {\n\t\t\tif (!this.tempList.length) return;\n\t\t\tlet leftRect = await this.$uGetRect('#u-left-column');\n\t\t\tlet rightRect = await this.$uGetRect('#u-right-column');\n\t\t\t// 如果左边小于或等于右边，就添加到左边，否则添加到右边\n\t\t\tlet item = this.tempList[0];\n\t\t\t// 解决多次快速上拉后，可能数据会乱的问题，因为经过上面的两个await节点查询阻塞一定时间，加上后面的定时器干扰\n\t\t\t// 数组可能变成[]，导致此item值可能为undefined\n\t\t\tif(!item) return ;\n\t\t\tif (leftRect.height < rightRect.height) {\n\t\t\t\tthis.leftList.push(item);\n\t\t\t} else if (leftRect.height > rightRect.height) {\n\t\t\t\tthis.rightList.push(item);\n\t\t\t} else {\n\t\t\t\t// 这里是为了保证第一和第二张添加时，左右都能有内容\n\t\t\t\t// 因为添加第一张，实际队列的高度可能还是0，这时需要根据队列元素长度判断下一个该放哪边\n\t\t\t\tif (this.leftList.length <= this.rightList.length) {\n\t\t\t\t\tthis.leftList.push(item);\n\t\t\t\t} else {\n\t\t\t\t\tthis.rightList.push(item);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 移除临时列表的第一项\n\t\t\tthis.tempList.splice(0, 1);\n\t\t\t// 如果临时数组还有数据，继续循环\n\t\t\tif (this.tempList.length) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.splitData();\n\t\t\t\t}, this.addTime)\n\t\t\t}\n\t\t},\n\t\t// 复制而不是引用对象和数组\n\t\tcloneData(data) {\n\t\t\treturn JSON.parse(JSON.stringify(data));\n\t\t},\n\t\t// 清空数据列表\n\t\tclear() {\n\t\t\tthis.leftList = [];\n\t\t\tthis.rightList = [];\n\t\t\t// 同时清除父组件列表中的数据\n\t\t\tthis.$emit('input', []);\n\t\t\tthis.tempList = [];\n\t\t},\n\t\t// 清除某一条指定的数据，根据id实现\n\t\tremove(id) {\n\t\t\t// 如果findIndex找不到合适的条件，就会返回-1\n\t\t\tlet index = -1;\n\t\t\tindex = this.leftList.findIndex(val => val[this.idKey] == id);\n\t\t\tif(index != -1) {\n\t\t\t\t// 如果index不等于-1，说明已经找到了要找的id，根据index索引删除这一条数据\n\t\t\t\tthis.leftList.splice(index, 1);\n\t\t\t} else {\n\t\t\t\t// 同理于上方面的方法\n\t\t\t\tindex = this.rightList.findIndex(val => val[this.idKey] == id);\n\t\t\t\tif(index != -1) this.rightList.splice(index, 1);\n\t\t\t}\n\t\t\t// 同时清除父组件的数据中的对应id的条目\n\t\t\tindex = this.value.findIndex(val => val[this.idKey] == id);\n\t\t\tif(index != -1) this.$emit('input', this.value.splice(index, 1));\n\t\t},\n\t\t// 修改某条数据的某个属性\n\t\tmodify(id, key, value) {\n\t\t\t// 如果findIndex找不到合适的条件，就会返回-1\n\t\t\tlet index = -1;\n\t\t\tindex = this.leftList.findIndex(val => val[this.idKey] == id);\n\t\t\tif(index != -1) {\n\t\t\t\t// 如果index不等于-1，说明已经找到了要找的id，修改对应key的值\n\t\t\t\tthis.leftList[index][key] = value;\n\t\t\t} else {\n\t\t\t\t// 同理于上方面的方法\n\t\t\t\tindex = this.rightList.findIndex(val => val[this.idKey] == id);\n\t\t\t\tif(index != -1) this.rightList[index][key] = value;\n\t\t\t}\n\t\t\t// 修改父组件的数据中的对应id的条目\n\t\t\tindex = this.value.findIndex(val => val[this.idKey] == id);\n\t\t\tif(index != -1) {\n\t\t\t\t// 首先复制一份value的数据\n\t\t\t\tlet data = this.cloneData(this.value);\n\t\t\t\t// 修改对应索引的key属性的值为value\n\t\t\t\tdata[index][key] = value;\n\t\t\t\t// 修改父组件通过v-model绑定的变量的值\n\t\t\t\tthis.$emit('input', data);\n\t\t\t}\n\t\t}\n\t}\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../libs/css/style.components.scss\";\n\n.u-waterfall {\n\t@include vue-flex;\n\tflex-direction: row;\n\talign-items: flex-start;\n}\n\n.u-column {\n\t@include vue-flex;\n\tflex: 1;\n\tflex-direction: column;\n\theight: auto;\n}\n\n.u-image {\n\twidth: 100%;\n}\n</style>\n"
  },
  {
    "path": "uview-ui/components/uview-v1/uview-v1.vue",
    "content": ""
  },
  {
    "path": "uview-ui/iconfont.css",
    "content": "/* #ifdef APP-PLUS */\n@font-face {\n\tfont-family: \"uicon-iconfont\";\n\tfont-weight: normal;\n\tfont-style: normal;\n\tfont-display: auto;\n\tsrc: url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2');\n}\n\n/* #endif */\n\n/* 支付宝，百度，头条小程序目前读取大的本地字体文件，导致无法显示图标，故用在线加载的方式-2020-05-12 */\n/* #ifndef APP-PLUS */\n@font-face {\n\tfont-family: \"uicon-iconfont\";\n\tsrc: url('//at.alicdn.com/t/font_1529455_k4s6di1d1.eot?t=1596960292384');\n\t/* IE9 */\n\tsrc: url('//at.alicdn.com/t/font_1529455_k4s6di1d1.eot?t=1596960292384#iefix') format('embedded-opentype'),\n\t\t/* IE6-IE8 */\n\t\turl('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'),\n\t\turl('//at.alicdn.com/t/font_1529455_k4s6di1d1.woff?t=1596960292384') format('woff'),\n\t\turl('//at.alicdn.com/t/font_1529455_k4s6di1d1.ttf?t=1596960292384') format('truetype'),\n\t\t/* chrome, firefox, opera, Safari, Android, iOS 4.2+ */\n\t\turl('//at.alicdn.com/t/font_1529455_k4s6di1d1.svg?t=1596960292384#iconfont') format('svg');\n}\n\n/* #endif */\n\n.u-iconfont {\n\tposition: relative;\n\tdisplay: flex;\n\tfont: normal normal normal 14px/1 \"uicon-iconfont\";\n\tfont-size: inherit;\n\ttext-rendering: auto;\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\n.u-iconfont::before {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.uicon-en:before {\n\tcontent: \"\\e70a\";\n}\n\n.uicon-zh:before {\n\tcontent: \"\\e692\";\n}\n\n.uicon-level:before {\n\tcontent: \"\\e693\";\n}\n\n.uicon-woman:before {\n\tcontent: \"\\e69c\";\n}\n\n.uicon-man:before {\n\tcontent: \"\\e697\";\n}\n\n.uicon-column-line:before {\n\tcontent: \"\\e68e\";\n}\n\n.uicon-empty-page:before {\n\tcontent: \"\\e627\";\n}\n\n.uicon-empty-data:before {\n\tcontent: \"\\e62f\";\n}\n\n.uicon-empty-car:before {\n\tcontent: \"\\e602\";\n}\n\n.uicon-empty-order:before {\n\tcontent: \"\\e639\";\n}\n\n.uicon-empty-address:before {\n\tcontent: \"\\e646\";\n}\n\n.uicon-empty-message:before {\n\tcontent: \"\\e6a9\";\n}\n\n.uicon-empty-search:before {\n\tcontent: \"\\e664\";\n}\n\n.uicon-empty-favor:before {\n\tcontent: \"\\e67c\";\n}\n\n.uicon-empty-coupon:before {\n\tcontent: \"\\e682\";\n}\n\n.uicon-empty-history:before {\n\tcontent: \"\\e684\";\n}\n\n.uicon-empty-permission:before {\n\tcontent: \"\\e686\";\n}\n\n.uicon-empty-news:before {\n\tcontent: \"\\e687\";\n}\n\n.uicon-empty-wifi:before {\n\tcontent: \"\\e688\";\n}\n\n.uicon-empty-list:before {\n\tcontent: \"\\e68b\";\n}\n\n.uicon-arrow-left-double:before {\n\tcontent: \"\\e68c\";\n}\n\n.uicon-arrow-right-double:before {\n\tcontent: \"\\e68d\";\n}\n\n.uicon-red-packet:before {\n\tcontent: \"\\e691\";\n}\n\n.uicon-red-packet-fill:before {\n\tcontent: \"\\e690\";\n}\n\n.uicon-order:before {\n\tcontent: \"\\e68f\";\n}\n\n.uicon-nav-back-arrow:before {\n\tcontent: \"\\e67f\";\n}\n\n.uicon-nav-back:before {\n\tcontent: \"\\e683\";\n}\n\n.uicon-checkbox-mark:before {\n\tcontent: \"\\e6a8\";\n}\n\n.uicon-arrow-up-fill:before {\n\tcontent: \"\\e6b0\";\n}\n\n.uicon-arrow-down-fill:before {\n\tcontent: \"\\e600\";\n}\n\n.uicon-backspace:before {\n\tcontent: \"\\e67b\";\n}\n\n.uicon-android-circle-fill:before {\n\tcontent: \"\\e67e\";\n}\n\n.uicon-android-fill:before {\n\tcontent: \"\\e67d\";\n}\n\n.uicon-question:before {\n\tcontent: \"\\e715\";\n}\n\n.uicon-pause:before {\n\tcontent: \"\\e8fa\";\n}\n\n.uicon-close:before {\n\tcontent: \"\\e685\";\n}\n\n.uicon-volume-up:before {\n\tcontent: \"\\e633\";\n}\n\n.uicon-volume-off:before {\n\tcontent: \"\\e644\";\n}\n\n.uicon-info:before {\n\tcontent: \"\\e653\";\n}\n\n.uicon-error:before {\n\tcontent: \"\\e6d3\";\n}\n\n.uicon-lock-opened-fill:before {\n\tcontent: \"\\e974\";\n}\n\n.uicon-lock-fill:before {\n\tcontent: \"\\e979\";\n}\n\n.uicon-lock:before {\n\tcontent: \"\\e97a\";\n}\n\n.uicon-photo-fill:before {\n\tcontent: \"\\e98b\";\n}\n\n.uicon-photo:before {\n\tcontent: \"\\e98d\";\n}\n\n.uicon-account-fill:before {\n\tcontent: \"\\e614\";\n}\n\n.uicon-minus-people-fill:before {\n\tcontent: \"\\e615\";\n}\n\n.uicon-plus-people-fill:before {\n\tcontent: \"\\e626\";\n}\n\n.uicon-account:before {\n\tcontent: \"\\e628\";\n}\n\n.uicon-thumb-down-fill:before {\n\tcontent: \"\\e726\";\n}\n\n.uicon-thumb-down:before {\n\tcontent: \"\\e727\";\n}\n\n.uicon-thumb-up-fill:before {\n\tcontent: \"\\e72f\";\n}\n\n.uicon-thumb-up:before {\n\tcontent: \"\\e733\";\n}\n\n.uicon-person-delete-fill:before {\n\tcontent: \"\\e66a\";\n}\n\n.uicon-cut:before {\n\tcontent: \"\\e948\";\n}\n\n.uicon-fingerprint:before {\n\tcontent: \"\\e955\";\n}\n\n.uicon-home-fill:before {\n\tcontent: \"\\e964\";\n}\n\n.uicon-home:before {\n\tcontent: \"\\e965\";\n}\n\n.uicon-hourglass-half-fill:before {\n\tcontent: \"\\e966\";\n}\n\n.uicon-hourglass:before {\n\tcontent: \"\\e967\";\n}\n\n.uicon-lock-open:before {\n\tcontent: \"\\e973\";\n}\n\n.uicon-integral-fill:before {\n\tcontent: \"\\e703\";\n}\n\n.uicon-integral:before {\n\tcontent: \"\\e704\";\n}\n\n.uicon-coupon:before {\n\tcontent: \"\\e8ae\";\n}\n\n.uicon-coupon-fill:before {\n\tcontent: \"\\e8c4\";\n}\n\n.uicon-kefu-ermai:before {\n\tcontent: \"\\e656\";\n}\n\n.uicon-scan:before {\n\tcontent: \"\\e662\";\n}\n\n.uicon-rmb:before {\n\tcontent: \"\\e608\";\n}\n\n.uicon-rmb-circle-fill:before {\n\tcontent: \"\\e657\";\n}\n\n.uicon-rmb-circle:before {\n\tcontent: \"\\e677\";\n}\n\n.uicon-gift:before {\n\tcontent: \"\\e65b\";\n}\n\n.uicon-gift-fill:before {\n\tcontent: \"\\e65c\";\n}\n\n.uicon-bookmark-fill:before {\n\tcontent: \"\\e63b\";\n}\n\n.uicon-zhuanfa:before {\n\tcontent: \"\\e60b\";\n}\n\n.uicon-eye-off-outline:before {\n\tcontent: \"\\e62b\";\n}\n\n.uicon-eye-off:before {\n\tcontent: \"\\e648\";\n}\n\n.uicon-pause-circle:before {\n\tcontent: \"\\e643\";\n}\n\n.uicon-play-circle:before {\n\tcontent: \"\\e647\";\n}\n\n.uicon-pause-circle-fill:before {\n\tcontent: \"\\e654\";\n}\n\n.uicon-play-circle-fill:before {\n\tcontent: \"\\e655\";\n}\n\n.uicon-grid:before {\n\tcontent: \"\\e673\";\n}\n\n.uicon-play-right:before {\n\tcontent: \"\\e610\";\n}\n\n.uicon-play-left:before {\n\tcontent: \"\\e66d\";\n}\n\n.uicon-calendar:before {\n\tcontent: \"\\e66e\";\n}\n\n.uicon-rewind-right:before {\n\tcontent: \"\\e66f\";\n}\n\n.uicon-rewind-left:before {\n\tcontent: \"\\e671\";\n}\n\n.uicon-skip-forward-right:before {\n\tcontent: \"\\e672\";\n}\n\n.uicon-skip-back-left:before {\n\tcontent: \"\\e674\";\n}\n\n.uicon-play-left-fill:before {\n\tcontent: \"\\e675\";\n}\n\n.uicon-play-right-fill:before {\n\tcontent: \"\\e676\";\n}\n\n.uicon-grid-fill:before {\n\tcontent: \"\\e678\";\n}\n\n.uicon-rewind-left-fill:before {\n\tcontent: \"\\e679\";\n}\n\n.uicon-rewind-right-fill:before {\n\tcontent: \"\\e67a\";\n}\n\n.uicon-pushpin:before {\n\tcontent: \"\\e7e3\";\n}\n\n.uicon-star:before {\n\tcontent: \"\\e65f\";\n}\n\n.uicon-star-fill:before {\n\tcontent: \"\\e669\";\n}\n\n.uicon-server-fill:before {\n\tcontent: \"\\e751\";\n}\n\n.uicon-server-man:before {\n\tcontent: \"\\e6bc\";\n}\n\n.uicon-edit-pen:before {\n\tcontent: \"\\e612\";\n}\n\n.uicon-edit-pen-fill:before {\n\tcontent: \"\\e66b\";\n}\n\n.uicon-wifi:before {\n\tcontent: \"\\e667\";\n}\n\n.uicon-wifi-off:before {\n\tcontent: \"\\e668\";\n}\n\n.uicon-file-text:before {\n\tcontent: \"\\e663\";\n}\n\n.uicon-file-text-fill:before {\n\tcontent: \"\\e665\";\n}\n\n.uicon-more-dot-fill:before {\n\tcontent: \"\\e630\";\n}\n\n.uicon-minus:before {\n\tcontent: \"\\e618\";\n}\n\n.uicon-minus-circle:before {\n\tcontent: \"\\e61b\";\n}\n\n.uicon-plus:before {\n\tcontent: \"\\e62d\";\n}\n\n.uicon-plus-circle:before {\n\tcontent: \"\\e62e\";\n}\n\n.uicon-minus-circle-fill:before {\n\tcontent: \"\\e652\";\n}\n\n.uicon-plus-circle-fill:before {\n\tcontent: \"\\e661\";\n}\n\n.uicon-email:before {\n\tcontent: \"\\e611\";\n}\n\n.uicon-email-fill:before {\n\tcontent: \"\\e642\";\n}\n\n.uicon-phone:before {\n\tcontent: \"\\e622\";\n}\n\n.uicon-phone-fill:before {\n\tcontent: \"\\e64f\";\n}\n\n.uicon-clock:before {\n\tcontent: \"\\e60f\";\n}\n\n.uicon-car:before {\n\tcontent: \"\\e60c\";\n}\n\n.uicon-car-fill:before {\n\tcontent: \"\\e636\";\n}\n\n.uicon-warning:before {\n\tcontent: \"\\e694\";\n}\n\n.uicon-warning-fill:before {\n\tcontent: \"\\e64d\";\n}\n\n.uicon-search:before {\n\tcontent: \"\\e62a\";\n}\n\n.uicon-baidu-circle-fill:before {\n\tcontent: \"\\e680\";\n}\n\n.uicon-baidu:before {\n\tcontent: \"\\e681\";\n}\n\n.uicon-facebook:before {\n\tcontent: \"\\e689\";\n}\n\n.uicon-facebook-circle-fill:before {\n\tcontent: \"\\e68a\";\n}\n\n.uicon-qzone:before {\n\tcontent: \"\\e695\";\n}\n\n.uicon-qzone-circle-fill:before {\n\tcontent: \"\\e696\";\n}\n\n.uicon-moments-circel-fill:before {\n\tcontent: \"\\e69a\";\n}\n\n.uicon-moments:before {\n\tcontent: \"\\e69b\";\n}\n\n.uicon-qq-circle-fill:before {\n\tcontent: \"\\e6a0\";\n}\n\n.uicon-qq-fill:before {\n\tcontent: \"\\e6a1\";\n}\n\n.uicon-weibo:before {\n\tcontent: \"\\e6a4\";\n}\n\n.uicon-weibo-circle-fill:before {\n\tcontent: \"\\e6a5\";\n}\n\n.uicon-taobao:before {\n\tcontent: \"\\e6a6\";\n}\n\n.uicon-taobao-circle-fill:before {\n\tcontent: \"\\e6a7\";\n}\n\n.uicon-twitter:before {\n\tcontent: \"\\e6aa\";\n}\n\n.uicon-twitter-circle-fill:before {\n\tcontent: \"\\e6ab\";\n}\n\n.uicon-weixin-circle-fill:before {\n\tcontent: \"\\e6b1\";\n}\n\n.uicon-weixin-fill:before {\n\tcontent: \"\\e6b2\";\n}\n\n.uicon-zhifubao-circle-fill:before {\n\tcontent: \"\\e6b8\";\n}\n\n.uicon-zhifubao:before {\n\tcontent: \"\\e6b9\";\n}\n\n.uicon-zhihu:before {\n\tcontent: \"\\e6ba\";\n}\n\n.uicon-zhihu-circle-fill:before {\n\tcontent: \"\\e709\";\n}\n\n.uicon-list:before {\n\tcontent: \"\\e650\";\n}\n\n.uicon-list-dot:before {\n\tcontent: \"\\e616\";\n}\n\n.uicon-setting:before {\n\tcontent: \"\\e61f\";\n}\n\n.uicon-bell:before {\n\tcontent: \"\\e609\";\n}\n\n.uicon-bell-fill:before {\n\tcontent: \"\\e640\";\n}\n\n.uicon-attach:before {\n\tcontent: \"\\e632\";\n}\n\n.uicon-shopping-cart:before {\n\tcontent: \"\\e621\";\n}\n\n.uicon-shopping-cart-fill:before {\n\tcontent: \"\\e65d\";\n}\n\n.uicon-tags:before {\n\tcontent: \"\\e629\";\n}\n\n.uicon-share:before {\n\tcontent: \"\\e631\";\n}\n\n.uicon-question-circle-fill:before {\n\tcontent: \"\\e666\";\n}\n\n.uicon-question-circle:before {\n\tcontent: \"\\e625\";\n}\n\n.uicon-error-circle:before {\n\tcontent: \"\\e624\";\n}\n\n.uicon-checkmark-circle:before {\n\tcontent: \"\\e63d\";\n}\n\n.uicon-close-circle:before {\n\tcontent: \"\\e63f\";\n}\n\n.uicon-info-circle:before {\n\tcontent: \"\\e660\";\n}\n\n.uicon-md-person-add:before {\n\tcontent: \"\\e6e4\";\n}\n\n.uicon-md-person-fill:before {\n\tcontent: \"\\e6ea\";\n}\n\n.uicon-bag-fill:before {\n\tcontent: \"\\e617\";\n}\n\n.uicon-bag:before {\n\tcontent: \"\\e619\";\n}\n\n.uicon-chat-fill:before {\n\tcontent: \"\\e61e\";\n}\n\n.uicon-chat:before {\n\tcontent: \"\\e620\";\n}\n\n.uicon-more-circle:before {\n\tcontent: \"\\e63e\";\n}\n\n.uicon-more-circle-fill:before {\n\tcontent: \"\\e645\";\n}\n\n.uicon-volume:before {\n\tcontent: \"\\e66c\";\n}\n\n.uicon-volume-fill:before {\n\tcontent: \"\\e670\";\n}\n\n.uicon-reload:before {\n\tcontent: \"\\e788\";\n}\n\n.uicon-camera:before {\n\tcontent: \"\\e7d7\";\n}\n\n.uicon-heart:before {\n\tcontent: \"\\e7df\";\n}\n\n.uicon-heart-fill:before {\n\tcontent: \"\\e851\";\n}\n\n.uicon-minus-square-fill:before {\n\tcontent: \"\\e855\";\n}\n\n.uicon-plus-square-fill:before {\n\tcontent: \"\\e856\";\n}\n\n.uicon-pushpin-fill:before {\n\tcontent: \"\\e86e\";\n}\n\n.uicon-camera-fill:before {\n\tcontent: \"\\e870\";\n}\n\n.uicon-setting-fill:before {\n\tcontent: \"\\e872\";\n}\n\n.uicon-google:before {\n\tcontent: \"\\e87a\";\n}\n\n.uicon-ie:before {\n\tcontent: \"\\e87b\";\n}\n\n.uicon-apple-fill:before {\n\tcontent: \"\\e881\";\n}\n\n.uicon-chrome-circle-fill:before {\n\tcontent: \"\\e885\";\n}\n\n.uicon-github-circle-fill:before {\n\tcontent: \"\\e887\";\n}\n\n.uicon-IE-circle-fill:before {\n\tcontent: \"\\e889\";\n}\n\n.uicon-google-circle-fill:before {\n\tcontent: \"\\e88a\";\n}\n\n.uicon-arrow-down:before {\n\tcontent: \"\\e60d\";\n}\n\n.uicon-arrow-left:before {\n\tcontent: \"\\e60e\";\n}\n\n.uicon-map:before {\n\tcontent: \"\\e61d\";\n}\n\n.uicon-man-add-fill:before {\n\tcontent: \"\\e64c\";\n}\n\n.uicon-tags-fill:before {\n\tcontent: \"\\e651\";\n}\n\n.uicon-arrow-leftward:before {\n\tcontent: \"\\e601\";\n}\n\n.uicon-arrow-rightward:before {\n\tcontent: \"\\e603\";\n}\n\n.uicon-arrow-downward:before {\n\tcontent: \"\\e604\";\n}\n\n.uicon-arrow-right:before {\n\tcontent: \"\\e605\";\n}\n\n.uicon-arrow-up:before {\n\tcontent: \"\\e606\";\n}\n\n.uicon-arrow-upward:before {\n\tcontent: \"\\e607\";\n}\n\n.uicon-bookmark:before {\n\tcontent: \"\\e60a\";\n}\n\n.uicon-eye:before {\n\tcontent: \"\\e613\";\n}\n\n.uicon-man-delete:before {\n\tcontent: \"\\e61a\";\n}\n\n.uicon-man-add:before {\n\tcontent: \"\\e61c\";\n}\n\n.uicon-trash:before {\n\tcontent: \"\\e623\";\n}\n\n.uicon-error-circle-fill:before {\n\tcontent: \"\\e62c\";\n}\n\n.uicon-calendar-fill:before {\n\tcontent: \"\\e634\";\n}\n\n.uicon-checkmark-circle-fill:before {\n\tcontent: \"\\e635\";\n}\n\n.uicon-close-circle-fill:before {\n\tcontent: \"\\e637\";\n}\n\n.uicon-clock-fill:before {\n\tcontent: \"\\e638\";\n}\n\n.uicon-checkmark:before {\n\tcontent: \"\\e63a\";\n}\n\n.uicon-download:before {\n\tcontent: \"\\e63c\";\n}\n\n.uicon-eye-fill:before {\n\tcontent: \"\\e641\";\n}\n\n.uicon-mic-off:before {\n\tcontent: \"\\e649\";\n}\n\n.uicon-mic:before {\n\tcontent: \"\\e64a\";\n}\n\n.uicon-info-circle-fill:before {\n\tcontent: \"\\e64b\";\n}\n\n.uicon-map-fill:before {\n\tcontent: \"\\e64e\";\n}\n\n.uicon-trash-fill:before {\n\tcontent: \"\\e658\";\n}\n\n.uicon-volume-off-fill:before {\n\tcontent: \"\\e659\";\n}\n\n.uicon-volume-up-fill:before {\n\tcontent: \"\\e65a\";\n}\n\n.uicon-share-fill:before {\n\tcontent: \"\\e65e\";\n}\n"
  },
  {
    "path": "uview-ui/index.js",
    "content": "// 引入全局mixin\nimport mixin from './libs/mixin/mixin.js'\n// 引入关于是否mixin集成小程序分享的配置\n// import wxshare from './libs/mixin/mpShare.js'\n// 全局挂载引入http相关请求拦截插件\nimport http from './libs/request'\n\nfunction wranning(str) {\n\t// 开发环境进行信息输出,主要是一些报错信息\n\t// 这个环境的来由是在程序编写时候,点击hx编辑器运行调试代码的时候,详见:\n\t// \thttps://uniapp.dcloud.io/frame?id=%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e5%92%8c%e7%94%9f%e4%ba%a7%e7%8e%af%e5%a2%83\n\tif (process.env.NODE_ENV === 'development') {\n\t\tconsole.warn(str)\n\t}\n}\n\n// 尝试判断在根目录的/store中是否有$u.mixin.js，此文件uView默认为需要挂在到全局的vuex的state变量\n// HX2.6.11版本,放到try中,控制台依然会警告,暂时不用此方式，\n// let vuexStore = {};\n// try {\n// \tvuexStore = require(\"@/store/$u.mixin.js\");\n// } catch (e) {\n// \t//TODO handle the exception\n// }\n\n// post类型对象参数转为get类型url参数\nimport queryParams from './libs/function/queryParams.js'\n// 路由封装\nimport route from './libs/function/route.js'\n// 时间格式化\nimport timeFormat from './libs/function/timeFormat.js'\n// 时间戳格式化,返回多久之前\nimport timeFrom from './libs/function/timeFrom.js'\n// 颜色渐变相关,colorGradient-颜色渐变,hexToRgb-十六进制颜色转rgb颜色,rgbToHex-rgb转十六进制\nimport colorGradient from './libs/function/colorGradient.js'\n// 生成全局唯一guid字符串\nimport guid from './libs/function/guid.js'\n// 主题相关颜色,info|success|warning|primary|default|error,此颜色已在uview.scss中定义,但是为js中也能使用,故也定义一份\nimport color from './libs/function/color.js'\n// 根据type获取图标名称\nimport type2icon from './libs/function/type2icon.js'\n// 打乱数组的顺序\nimport randomArray from './libs/function/randomArray.js'\n// 对象和数组的深度克隆\nimport deepClone from './libs/function/deepClone.js'\n// 对象深度拷贝\nimport deepMerge from './libs/function/deepMerge.js'\n// 添加单位\nimport addUnit from './libs/function/addUnit.js'\n\n// 规则检验\nimport test from './libs/function/test.js'\n// 随机数\nimport random from './libs/function/random.js'\n// 去除空格\nimport trim from './libs/function/trim.js'\n// toast提示，对uni.showToast的封装\nimport toast from './libs/function/toast.js'\n// 获取父组件参数\nimport getParent from './libs/function/getParent.js'\n// 获取整个父组件\nimport $parent from './libs/function/$parent.js'\n// 获取sys()和os()工具方法\n// 获取设备信息，挂载到$u的sys()(system的缩写)属性中，\n// 同时把安卓和ios平台的名称\"ios\"和\"android\"挂到$u.os()中，方便取用\nimport {sys, os} from './libs/function/sys.js'\n// 防抖方法\nimport debounce from './libs/function/debounce.js'\n// 节流方法\nimport throttle from './libs/function/throttle.js'\n\n\n// 配置信息\nimport config from './libs/config/config.js'\n// 各个需要fixed的地方的z-index配置文件\nimport zIndex from './libs/config/zIndex.js'\n\nconst $u = {\n\tqueryParams: queryParams,\n\troute: route,\n\ttimeFormat: timeFormat,\n\tdate: timeFormat, // 另名date\n\ttimeFrom,\n\tcolorGradient: colorGradient.colorGradient,\n\tcolorToRgba: colorGradient.colorToRgba,\n\tguid,\n\tcolor,\n\tsys,\n\tos,\n\ttype2icon,\n\trandomArray,\n\twranning,\n\tget: http.get,\n\tpost: http.post,\n\tput: http.put,\n\t'delete': http.delete,\n\thexToRgb: colorGradient.hexToRgb,\n\trgbToHex: colorGradient.rgbToHex,\n\ttest,\n\trandom,\n\tdeepClone,\n\tdeepMerge,\n\tgetParent,\n\t$parent,\n\taddUnit,\n\ttrim,\n\ttype: ['primary', 'success', 'error', 'warning', 'info'],\n\thttp,\n\ttoast,\n\tconfig, // uView配置信息相关，比如版本号\n\tzIndex,\n\tdebounce,\n\tthrottle,\n}\n\n// $u挂载到uni对象上\nuni.$u = $u\n\nconst install = Vue => {\n\tVue.mixin(mixin) \n\tif (Vue.prototype.openShare) {\n\t\tVue.mixin(mpShare);\n\t}\n\t// Vue.mixin(vuexStore);\n\t// 时间格式化，同时两个名称，date和timeFormat\n\tVue.filter('timeFormat', (timestamp, format) => {\n\t\treturn timeFormat(timestamp, format)\n\t})\n\tVue.filter('date', (timestamp, format) => {\n\t\treturn timeFormat(timestamp, format)\n\t})\n\t// 将多久以前的方法，注入到全局过滤器\n\tVue.filter('timeFrom', (timestamp, format) => {\n\t\treturn timeFrom(timestamp, format)\n\t})\n\tVue.prototype.$u = $u\n}\n\nexport default {\n\tinstall\n}"
  },
  {
    "path": "uview-ui/index.scss",
    "content": "// 引入公共基础类\n@import \"./libs/css/common.scss\";\n@import \"./libs/css/color.scss\";\n\n// 非nvue的样式\n/* #ifndef APP-NVUE */\n@import \"./libs/css/style.vue.scss\";\n/* #endif */\n\n// nvue的特有样式\n/* #ifdef APP-NVUE */\n@import \"./libs/css/style.nvue.scss\";\n/* #endif */\n\n// 小程序特有的样式\n/* #ifdef MP */\n@import \"./libs/css/style.mp.scss\";\n/* #endif */\n\n// H5特有的样式\n/* #ifdef H5 */\n@import \"./libs/css/style.h5.scss\";\n/* #endif */"
  },
  {
    "path": "uview-ui/libs/config/config.js",
    "content": "// 此版本发布于2023-03-27\nlet version = '1.8.8';\n\nexport default {\n\tv: version,\n\tversion: version,\n\t// 主题名称\n\ttype: [\n\t\t'primary',\n\t\t'success',\n\t\t'info',\n\t\t'error',\n\t\t'warning'\n\t]\n}\n"
  },
  {
    "path": "uview-ui/libs/config/zIndex.js",
    "content": "// uniapp在H5中各API的z-index值如下：\n/**\n * actionsheet: 999\n * modal: 999\n * navigate: 998\n * tabbar: 998\n * toast: 999\n */\n\nexport default {\n\ttoast: 10090,\n\tnoNetwork: 10080,\n\t// popup包含popup，actionsheet，keyboard，picker的值\n\tpopup: 10075,\n\tmask: 10070,\n\tnavbar: 980,\n\ttopTips: 975,\n\tsticky: 970,\n\tindexListSticky: 965,\n}"
  },
  {
    "path": "uview-ui/libs/css/color.scss",
    "content": ".u-type-primary-light {\n\tcolor: $u-type-primary-light;\n}\n\n.u-type-warning-light {\n\tcolor: $u-type-warning-light;\n}\n\n.u-type-success-light {\n\tcolor: $u-type-success-light;\n}\n\n.u-type-error-light {\n\tcolor: $u-type-error-light;\n}\n\n.u-type-info-light {\n\tcolor: $u-type-info-light;\n}\n\n.u-type-primary-light-bg {\n\tbackground-color: $u-type-primary-light;\n}\n\n.u-type-warning-light-bg {\n\tbackground-color: $u-type-warning-light;\n}\n\n.u-type-success-light-bg {\n\tbackground-color: $u-type-success-light;\n}\n\n.u-type-error-light-bg {\n\tbackground-color: $u-type-error-light;\n}\n\n.u-type-info-light-bg {\n\tbackground-color: $u-type-info-light;\n}\n\n.u-type-primary-dark {\n\tcolor: $u-type-primary-dark;\n}\n\n.u-type-warning-dark {\n\tcolor: $u-type-warning-dark;\n}\n\n.u-type-success-dark {\n\tcolor: $u-type-success-dark;\n}\n\n.u-type-error-dark {\n\tcolor: $u-type-error-dark;\n}\n\n.u-type-info-dark {\n\tcolor: $u-type-info-dark;\n}\n\n.u-type-primary-dark-bg {\n\tbackground-color: $u-type-primary-dark;\n}\n\n.u-type-warning-dark-bg {\n\tbackground-color: $u-type-warning-dark;\n}\n\n.u-type-success-dark-bg {\n\tbackground-color: $u-type-success-dark;\n}\n\n.u-type-error-dark-bg {\n\tbackground-color: $u-type-error-dark;\n}\n\n.u-type-info-dark-bg {\n\tbackground-color: $u-type-info-dark;\n}\n\n.u-type-primary-disabled {\n\tcolor: $u-type-primary-disabled;\n}\n\n.u-type-warning-disabled {\n\tcolor: $u-type-warning-disabled;\n}\n\n.u-type-success-disabled {\n\tcolor: $u-type-success-disabled;\n}\n\n.u-type-error-disabled {\n\tcolor: $u-type-error-disabled;\n}\n\n.u-type-info-disabled {\n\tcolor: $u-type-info-disabled;\n}\n\n.u-type-primary {\n\tcolor: $u-type-primary;\n}\n\n.u-type-warning {\n\tcolor: $u-type-warning;\n}\n\n.u-type-success {\n\tcolor: $u-type-success;\n}\n\n.u-type-error {\n\tcolor: $u-type-error;\n}\n\n.u-type-info {\n\tcolor: $u-type-info;\n}\n\n.u-type-primary-bg {\n\tbackground-color: $u-type-primary;\n}\n\n.u-type-warning-bg {\n\tbackground-color: $u-type-warning;\n}\n\n.u-type-success-bg {\n\tbackground-color: $u-type-success;\n}\n\n.u-type-error-bg {\n\tbackground-color: $u-type-error;\n}\n\n.u-type-info-bg {\n\tbackground-color: $u-type-info;\n}\n\n.u-main-color {\n\tcolor: $u-main-color;\n}\n\n.u-content-color {\n\tcolor: $u-content-color;\n}\n\n.u-tips-color {\n\tcolor: $u-tips-color;\n}\n\n.u-light-color {\n\tcolor: $u-light-color;\n}\n"
  },
  {
    "path": "uview-ui/libs/css/common.scss",
    "content": ".u-relative,\n.u-rela {\n\tposition: relative;\n}\n\n.u-absolute,\n.u-abso {\n\tposition: absolute;\n}\n\n// nvue不能用标签命名样式，不能放在微信组件中，否则微信开发工具会报警告，无法使用标签名当做选择器\n/* #ifndef APP-NVUE */\nimage {\n\tdisplay: inline-block;\n}\n\n// 在weex，也即nvue中，所有元素默认为border-box\nview,\ntext {\n\tbox-sizing: border-box;\n}\n/* #endif */\n\n.u-font-xs {\n\tfont-size: 22rpx;\n}\n\n.u-font-sm {\n\tfont-size: 26rpx;\n}\n\n.u-font-md {\n\tfont-size: 28rpx;\n}\n\n.u-font-lg {\n\tfont-size: 30rpx;\n}\n\n.u-font-xl {\n\tfont-size: 34rpx;\n}\n\n.u-flex {\n\t/* #ifndef APP-NVUE */\n\tdisplay: flex;\n\t/* #endif */\n\tflex-direction: row;\n\talign-items: center;\n}\n\n.u-flex-wrap {\n\tflex-wrap: wrap;\n}\n\n.u-flex-nowrap {\n\tflex-wrap: nowrap;\n}\n\n.u-col-center {\n\talign-items: center;\n}\n\n.u-col-top {\n\talign-items: flex-start;\n}\n\n.u-col-bottom {\n\talign-items: flex-end;\n}\n\n.u-row-center {\n\tjustify-content: center;\n}\n\n.u-row-left {\n\tjustify-content: flex-start;\n}\n\n.u-row-right {\n\tjustify-content: flex-end;\n}\n\n.u-row-between {\n\tjustify-content: space-between;\n}\n\n.u-row-around {\n\tjustify-content: space-around;\n}\n\n.u-text-left {\n\ttext-align: left;\n}\n\n.u-text-center {\n\ttext-align: center;\n}\n\n.u-text-right {\n\ttext-align: right;\n}\n\n.u-flex-col {\n\t/* #ifndef APP-NVUE */\n\tdisplay: flex;\n\t/* #endif */\n\tflex-direction: column;\n}\n\n// 定义flex等分\n@for $i from 0 through 12 {\n\t.u-flex-#{$i} {\n\t\tflex: $i;\n\t}\n}\n\n// 定义字体(px)单位，小于20都为px单位字体\n@for $i from 9 to 20 {\n\t.u-font-#{$i} {\n\t\tfont-size: $i + px;\n\t}\n}\n\n// 定义字体(rpx)单位，大于或等于20的都为rpx单位字体\n@for $i from 20 through 40 {\n\t.u-font-#{$i} {\n\t\tfont-size: $i + rpx;\n\t}\n}\n\n// 定义内外边距，历遍1-80\n@for $i from 0 through 80 {\n\t// 只要双数和能被5除尽的数\n\t@if $i % 2 == 0 or $i % 5 == 0 {\n\t\t// 得出：u-margin-30或者u-m-30\n\t\t.u-margin-#{$i}, .u-m-#{$i} {\n\t\t\tmargin: $i + rpx!important;\n\t\t}\n\t\t\n\t\t// 得出：u-padding-30或者u-p-30\n\t\t.u-padding-#{$i}, .u-p-#{$i} {\n\t\t\tpadding: $i + rpx!important;\n\t\t}\n\t\t\n\t\t@each $short, $long in l left, t top, r right, b bottom {\n\t\t\t// 缩写版，结果如： u-m-l-30\n\t\t\t// 定义外边距\n\t\t\t.u-m-#{$short}-#{$i} {\n\t\t\t\tmargin-#{$long}: $i + rpx!important;\n\t\t\t}\n\t\t\t\n\t\t\t// 定义内边距\n\t\t\t.u-p-#{$short}-#{$i} {\n\t\t\t\tpadding-#{$long}: $i + rpx!important;\n\t\t\t}\n\t\t\t\n\t\t\t// 完整版，结果如：u-margin-left-30\n\t\t\t// 定义外边距\n\t\t\t.u-margin-#{$long}-#{$i} {\n\t\t\t\tmargin-#{$long}: $i + rpx!important;\n\t\t\t}\n\t\t\t\n\t\t\t// 定义内边距\n\t\t\t.u-padding-#{$long}-#{$i} {\n\t\t\t\tpadding-#{$long}: $i + rpx!important;\n\t\t\t}\n\t\t}\n\t}\n}\n\n// 重置nvue的默认关于flex的样式\n.u-reset-nvue {\n\tflex-direction: row;\n\talign-items: center;\n}"
  },
  {
    "path": "uview-ui/libs/css/style.components.scss",
    "content": "// 定义混入指令，用于在非nvue环境下的flex定义，因为nvue没有display属性，会报错\n@mixin vue-flex($direction: row) {\n\t/* #ifndef APP-NVUE */\n\tdisplay: flex;\n\tflex-direction: $direction;\n\t/* #endif */\n}"
  },
  {
    "path": "uview-ui/libs/css/style.h5.scss",
    "content": "/* H5的时候，隐藏滚动条 */\n::-webkit-scrollbar {\n\tdisplay: none;  \n\twidth: 0 !important;  \n\theight: 0 !important;  \n\t-webkit-appearance: none;  \n\tbackground: transparent;  \n}\n"
  },
  {
    "path": "uview-ui/libs/css/style.mp.scss",
    "content": "/* start--微信小程序编译后页面有组件名的元素，特别处理--start */\n/* #ifdef MP-WEIXIN || MP-QQ */\nu-td, u-th {\n\tflex: 1;\n\talign-self: stretch;\n}\n\n.u-td {\n\theight: 100%;\n}\n\nu-icon {\n\tdisplay: inline-flex;\n\talign-items: center;\n}\n\n// 各家小程序宫格组件外层设置为100%，避免受到父元素display: flex;的影响\nu-grid {\n\twidth: 100%;\n\tflex: 0 0 100%;\n}\n\n// 避免小程序线条组件因为父组件display: flex;而失效\nu-line {\n\tflex: 1;\n}\n\nu-switch {\n\tdisplay: inline-flex;\n\talign-items: center;\n}\n\nu-dropdown {\n\tflex: 1;\n}\n/* #endif */\n/* end-微信小程序编译后页面有组件名的元素，特别处理--end */\n\n\n/* #ifdef MP-QQ || MP-TOUTIAO */\n// 需要做这一切额外的兼容，都是因为TX的无能\nu-icon {\n\tline-height: 0;\n}\n/* #endif */\n\n/* start--头条小程序编译后页面有组件名的元素，特别处理--start */\n// 由于头条小程序不支持直接组件名形式写样式，目前只能在写组件的时候给组件加上对应的类名\n/* #ifdef MP-TOUTIAO */\n.u-td, .u-th, .u-tr {\n\tflex: 1;\n\talign-self: stretch;\n}\n\n.u-row, .u-col {\n\tflex: 1;\n\talign-self: stretch;\n}\n\n// 避免小程序线条组件因为父组件display: flex;而失效\n.u-line {\n\tflex: 1;\n}\n\n.u-dropdown {\n\tflex: 1;\n}\n/* #endif */\n/* end-头条小程序编译后页面有组件名的元素，特别处理--end */\n\n\n\n"
  },
  {
    "path": "uview-ui/libs/css/style.nvue.scss",
    "content": ".nvue {\n\tfont-size: 24rpx;\n}"
  },
  {
    "path": "uview-ui/libs/css/style.vue.scss",
    "content": "page {\n\tcolor: $u-main-color;\n\tfont-size: 28rpx;\n}\n\n/* start--去除webkit的默认样式--start */\n.u-fix-ios-appearance {\n\t-webkit-appearance:none;\n}\n/* end--去除webkit的默认样式--end */\n\n/* start--icon图标外层套一个view，让其达到更好的垂直居中的效果--start */\n.u-icon-wrap {\n\tdisplay: flex;\n\talign-items: center;\n}\n/* end-icon图标外层套一个view，让其达到更好的垂直居中的效果--end */\n\n/* start--iPhoneX底部安全区定义--start */\n.safe-area-inset-bottom {\n  padding-bottom: 0;  \n  padding-bottom: constant(safe-area-inset-bottom);  \n  padding-bottom: env(safe-area-inset-bottom);  \n} \n/* end-iPhoneX底部安全区定义--end */\n\n/* start--各种hover点击反馈相关的类名-start */\n.u-hover-class {\n\t// background-color: #f7f8f9!important;\n\topacity: 0.6;\n}\n\n.u-cell-hover {\n\tbackground-color: #f7f8f9!important;\n}\n/* end--各种hover点击反馈相关的类名--end */\n\n/* start--文本行数限制--start */\n.u-line-1 {\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n}\n\n.u-line-2 {\n    -webkit-line-clamp: 2;\n}\n\n.u-line-3 {\n    -webkit-line-clamp: 3;\n}\n\n.u-line-4 {\n    -webkit-line-clamp: 4;\n}\n\n.u-line-5 {\n    -webkit-line-clamp: 5;\n}\n\n.u-line-2, .u-line-3, .u-line-4, .u-line-5 {\n    overflow: hidden;\n\tword-break: break-all;\n    text-overflow: ellipsis; \n    display: -webkit-box; // 弹性伸缩盒\n    -webkit-box-orient: vertical; // 设置伸缩盒子元素排列方式\n}\n\n/* end--文本行数限制--end */\n\n\n/* start--Retina 屏幕下的 1px 边框--start */\n.u-border,\n.u-border-bottom,\n.u-border-left,\n.u-border-right,\n.u-border-top,\n.u-border-top-bottom {\n\tposition: relative\n}\n\n.u-border-bottom:after,\n.u-border-left:after,\n.u-border-right:after,\n.u-border-top-bottom:after,\n.u-border-top:after,\n.u-border:after {\n\t/* #ifndef APP-NVUE */\n\tcontent: ' ';\n\t/* #endif */\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tpointer-events: none;\n\tbox-sizing: border-box;\n\t-webkit-transform-origin: 0 0;\n\ttransform-origin: 0 0;\n\t// 多加0.1%，能解决有时候边框缺失的问题\n\twidth: 199.8%;\n\theight: 199.7%;\n\ttransform: scale(0.5, 0.5);\n\tborder: 0 solid $u-border-color;\n\tz-index: 2;\n}\n\n.u-border-top:after {\n\tborder-top-width: 1px\n}\n\n.u-border-left:after {\n\tborder-left-width: 1px\n}\n\n.u-border-right:after {\n\tborder-right-width: 1px\n}\n\n.u-border-bottom:after {\n\tborder-bottom-width: 1px\n}\n\n.u-border-top-bottom:after {\n\tborder-width: 1px 0\n}\n\n.u-border:after {\n\tborder-width: 1px\n}\n/* end--Retina 屏幕下的 1px 边框--end */\n\n\n/* start--clearfix--start */\n.u-clearfix:after,\n.clearfix:after {\n\t/* #ifndef APP-NVUE */\n\tcontent: '';\n\t/* #endif */\n\tdisplay: table;\n\tclear: both\n}\n/* end--clearfix--end */\n\n/* start--高斯模糊tabbar底部处理--start */\n.u-blur-effect-inset {\n\twidth: 750rpx;  \n\theight: var(--window-bottom);   \n\tbackground-color: #FFFFFF;  \n}\n/* end--高斯模糊tabbar底部处理--end */\n\n/* start--提升H5端uni.toast()的层级，避免被uView的modal等遮盖--start */\n/* #ifdef H5 */\nuni-toast {\n    z-index: 10090;\n}\nuni-toast .uni-toast {\n   z-index: 10090;\n}\n/* #endif */\n/* end--提升H5端uni.toast()的层级，避免被uView的modal等遮盖--end */\n\n/* start--去除button的所有默认样式--start */\n.u-reset-button {\n\tpadding: 0;\n\tfont-size: inherit;\n\tline-height: inherit;\n\tbackground-color: transparent;\n\tcolor: inherit;\n}\n\n.u-reset-button::after {\n   border: none;\n}\n/* end--去除button的所有默认样式--end */\n\n"
  },
  {
    "path": "uview-ui/libs/function/$parent.js",
    "content": "// 获取父组件的参数，因为支付宝小程序不支持provide/inject的写法\n// this.$parent在非H5中，可以准确获取到父组件，但是在H5中，需要多次this.$parent.$parent.xxx\n// 这里默认值等于undefined有它的含义，因为最顶层元素(组件)的$parent就是undefined，意味着不传name\n// 值(默认为undefined)，就是查找最顶层的$parent\nexport default function $parent(name = undefined) {\n\tlet parent = this.$parent;\n\t// 通过while历遍，这里主要是为了H5需要多层解析的问题\n\twhile (parent) {\n\t\t// 父组件\n\t\tif (parent.$options && parent.$options.name !== name) {\n\t\t\t// 如果组件的name不相等，继续上一级寻找\n\t\t\tparent = parent.$parent;\n\t\t} else {\n\t\t\treturn parent;\n\t\t}\n\t}\n\treturn false;\n}"
  },
  {
    "path": "uview-ui/libs/function/addUnit.js",
    "content": "import validation from './test.js';\n\n// 添加单位，如果有rpx，%，px等单位结尾或者值为auto，直接返回，否则加上rpx单位结尾\nexport default function addUnit(value = 'auto', unit = 'rpx') {\n    value = String(value);\n\t// 用uView内置验证规则中的number判断是否为数值\n    return validation.number(value) ? `${value}${unit}` : value;\n}"
  },
  {
    "path": "uview-ui/libs/function/bem.js",
    "content": "function bem(name, conf) {\n  \n}\n\nmodule.exports.bem = bem;\n"
  },
  {
    "path": "uview-ui/libs/function/color.js",
    "content": "// 为了让用户能够自定义主题，会逐步弃用此文件，各颜色通过css提供\n// 为了给某些特殊场景使用和向后兼容，无需删除此文件(2020-06-20)\nlet color = {\n\tprimary: \"#2979ff\",\n\tprimaryDark: \"#2b85e4\",\n\tprimaryDisabled: \"#a0cfff\",\n\tprimaryLight: \"#ecf5ff\",\n\tbgColor: \"#f3f4f6\",\n\t\n\tinfo: \"#909399\",\n\tinfoDark: \"#82848a\",\n\tinfoDisabled: \"#c8c9cc\",\n\tinfoLight: \"#f4f4f5\",\n\t\n\twarning: \"#ff9900\",\n\twarningDark: \"#f29100\",\n\twarningDisabled: \"#fcbd71\",\n\twarningLight: \"#fdf6ec\",\n\t\n\terror: \"#fa3534\",\n\terrorDark: \"#dd6161\",\n\terrorDisabled: \"#fab6b6\",\n\terrorLight: \"#fef0f0\",\n\t\n\tsuccess: \"#19be6b\",\n\tsuccessDark: \"#18b566\",\n\tsuccessDisabled: \"#71d5a1\",\n\tsuccessLight: \"#dbf1e1\",\n\t\n\tmainColor: \"#303133\",\n\tcontentColor: \"#606266\",\n\ttipsColor: \"#909399\",\n\tlightColor: \"#c0c4cc\",\n\tborderColor: \"#e4e7ed\"\n}\n\nexport default color;"
  },
  {
    "path": "uview-ui/libs/function/colorGradient.js",
    "content": "/**\n * 求两个颜色之间的渐变值\n * @param {string} startColor 开始的颜色\n * @param {string} endColor 结束的颜色\n * @param {number} step 颜色等分的份额\n * */\nfunction colorGradient(startColor = 'rgb(0, 0, 0)', endColor = 'rgb(255, 255, 255)', step = 10) {\n\tlet startRGB = hexToRgb(startColor, false); //转换为rgb数组模式\n\tlet startR = startRGB[0];\n\tlet startG = startRGB[1];\n\tlet startB = startRGB[2];\n\n\tlet endRGB = hexToRgb(endColor, false);\n\tlet endR = endRGB[0];\n\tlet endG = endRGB[1];\n\tlet endB = endRGB[2];\n\n\tlet sR = (endR - startR) / step; //总差值\n\tlet sG = (endG - startG) / step;\n\tlet sB = (endB - startB) / step;\n\tlet colorArr = [];\n\tfor (let i = 0; i < step; i++) {\n\t\t//计算每一步的hex值 \n\t\tlet hex = rgbToHex('rgb(' + Math.round((sR * i + startR)) + ',' + Math.round((sG * i + startG)) + ',' + Math.round((sB *\n\t\t\ti + startB)) + ')');\n\t\tcolorArr.push(hex);\n\t}\n\treturn colorArr;\n}\n\n// 将hex表示方式转换为rgb表示方式(这里返回rgb数组模式)\nfunction hexToRgb(sColor, str = true) {\n\tlet reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;\n\tsColor = sColor.toLowerCase();\n\tif (sColor && reg.test(sColor)) {\n\t\tif (sColor.length === 4) {\n\t\t\tlet sColorNew = \"#\";\n\t\t\tfor (let i = 1; i < 4; i += 1) {\n\t\t\t\tsColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));\n\t\t\t}\n\t\t\tsColor = sColorNew;\n\t\t}\n\t\t//处理六位的颜色值\n\t\tlet sColorChange = [];\n\t\tfor (let i = 1; i < 7; i += 2) {\n\t\t\tsColorChange.push(parseInt(\"0x\" + sColor.slice(i, i + 2)));\n\t\t}\n\t\tif(!str) {\n\t\t\treturn sColorChange;\n\t\t} else {\n\t\t\treturn `rgb(${sColorChange[0]},${sColorChange[1]},${sColorChange[2]})`;\n\t\t}\n\t} else if (/^(rgb|RGB)/.test(sColor)) {\n\t\tlet arr = sColor.replace(/(?:\\(|\\)|rgb|RGB)*/g, \"\").split(\",\")\n\t\treturn arr.map(val => Number(val));\n\t} else {\n\t\treturn sColor;\n\t}\n};\n\n// 将rgb表示方式转换为hex表示方式\nfunction rgbToHex(rgb) {\n\tlet _this = rgb;\n\tlet reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;\n\tif (/^(rgb|RGB)/.test(_this)) {\n\t\tlet aColor = _this.replace(/(?:\\(|\\)|rgb|RGB)*/g, \"\").split(\",\");\n\t\tlet strHex = \"#\";\n\t\tfor (let i = 0; i < aColor.length; i++) {\n\t\t\tlet hex = Number(aColor[i]).toString(16);\n\t\t\thex = String(hex).length == 1 ? 0 + '' + hex : hex; // 保证每个rgb的值为2位\n\t\t\tif (hex === \"0\") {\n\t\t\t\thex += hex;\n\t\t\t}\n\t\t\tstrHex += hex;\n\t\t}\n\t\tif (strHex.length !== 7) {\n\t\t\tstrHex = _this;\n\t\t}\n\t\treturn strHex;\n\t} else if (reg.test(_this)) {\n\t\tlet aNum = _this.replace(/#/, \"\").split(\"\");\n\t\tif (aNum.length === 6) {\n\t\t\treturn _this;\n\t\t} else if (aNum.length === 3) {\n\t\t\tlet numHex = \"#\";\n\t\t\tfor (let i = 0; i < aNum.length; i += 1) {\n\t\t\t\tnumHex += (aNum[i] + aNum[i]);\n\t\t\t}\n\t\t\treturn numHex;\n\t\t}\n\t} else {\n\t\treturn _this;\n\t}\n}\n\n\n/**\n* JS颜色十六进制转换为rgb或rgba,返回的格式为 rgba（255，255，255，0.5）字符串\n* sHex为传入的十六进制的色值\n* alpha为rgba的透明度\n*/\nfunction colorToRgba(color, alpha = 0.3) {\n\tcolor = rgbToHex(color)\n\t// 十六进制颜色值的正则表达式\n\tvar reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/\n\t/* 16进制颜色转为RGB格式 */\n\tlet sColor = color.toLowerCase()\n\tif (sColor && reg.test(sColor)) {\n\t\tif (sColor.length === 4) {\n\t\t\tvar sColorNew = '#'\n\t\t\tfor (let i = 1; i < 4; i += 1) {\n\t\t\t\tsColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1))\n\t\t\t}\n\t\t\tsColor = sColorNew\n\t\t}\n\t\t// 处理六位的颜色值\n\t\tvar sColorChange = []\n\t\tfor (let i = 1; i < 7; i += 2) {\n\t\t\tsColorChange.push(parseInt('0x' + sColor.slice(i, i + 2)))\n\t\t}\n\t\t// return sColorChange.join(',')\n\t\treturn 'rgba(' + sColorChange.join(',') + ',' + alpha + ')'\n\t} \n\telse {\n\t\treturn sColor\n\t}\n}\n\nexport default {\n\tcolorGradient,\n\thexToRgb,\n\trgbToHex,\n\tcolorToRgba\n}"
  },
  {
    "path": "uview-ui/libs/function/debounce.js",
    "content": "let timeout = null;\n\n/**\n * 防抖原理：一定时间内，只有最后一次操作，再过wait毫秒后才执行函数\n * \n * @param {Function} func 要执行的回调函数 \n * @param {Number} wait 延时的时间\n * @param {Boolean} immediate 是否立即执行 \n * @return null\n */\nfunction debounce(func, wait = 500, immediate = false) {\n\t// 清除定时器\n\tif (timeout !== null) clearTimeout(timeout);\n\t// 立即执行，此类情况一般用不到\n\tif (immediate) {\n\t\tvar callNow = !timeout;\n\t\ttimeout = setTimeout(function() {\n\t\t\ttimeout = null;\n\t\t}, wait);\n\t\tif (callNow) typeof func === 'function' && func();\n\t} else {\n\t\t// 设置定时器，当最后一次操作后，timeout不会再被清除，所以在延时wait毫秒后执行func回调方法\n\t\ttimeout = setTimeout(function() {\n\t\t\ttypeof func === 'function' && func();\n\t\t}, wait);\n\t}\n}\n\nexport default debounce\n"
  },
  {
    "path": "uview-ui/libs/function/deepClone.js",
    "content": "// 判断arr是否为一个数组，返回一个bool值\nfunction isArray(arr) {\n\treturn Object.prototype.toString.call(arr) === '[object Array]';\n}\n\n// 深度克隆\nfunction deepClone(obj, cache = new WeakMap()) {\n\tif (obj === null || typeof obj !== 'object') return obj;\n\tif (cache.has(obj)) return cache.get(obj);\n\tlet clone;\n\tif (obj instanceof Date) {\n\t\tclone = new Date(obj.getTime());\n\t} else if (obj instanceof RegExp) {\n\t\tclone = new RegExp(obj);\n\t} else if (obj instanceof Map) {\n\t\tclone = new Map(Array.from(obj, ([key, value]) => [key, deepClone(value, cache)]));\n\t} else if (obj instanceof Set) {\n\t\tclone = new Set(Array.from(obj, value => deepClone(value, cache)));\n\t} else if (Array.isArray(obj)) {\n\t\tclone = obj.map(value => deepClone(value, cache));\n\t} else if (Object.prototype.toString.call(obj) === '[object Object]') {\n\t\tclone = Object.create(Object.getPrototypeOf(obj));\n\t\tcache.set(obj, clone);\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\tclone[key] = deepClone(value, cache);\n\t\t}\n\t} else {\n\t\tclone = Object.assign({}, obj);\n\t}\n\tcache.set(obj, clone);\n\treturn clone;\n}\n\n\nexport default deepClone;\n"
  },
  {
    "path": "uview-ui/libs/function/deepMerge.js",
    "content": "import deepClone from \"./deepClone\";\n\n// JS对象深度合并\nfunction deepMerge(target = {}, source = {}) {\n\ttarget = deepClone(target);\n\tif (typeof target !== 'object' || target === null || typeof source !== 'object' || source === null) return target;\n\tconst merged = Array.isArray(target) ? target.slice() : Object.assign({}, target);\n\tfor (const prop in source) {\n\t\tif (!source.hasOwnProperty(prop)) continue;\n\t\tconst sourceValue = source[prop];\n\t\tconst targetValue = merged[prop];\n\t\tif (sourceValue instanceof Date) {\n\t\t\tmerged[prop] = new Date(sourceValue);\n\t\t} else if (sourceValue instanceof RegExp) {\n\t\t\tmerged[prop] = new RegExp(sourceValue);\n\t\t} else if (sourceValue instanceof Map) {\n\t\t\tmerged[prop] = new Map(sourceValue);\n\t\t} else if (sourceValue instanceof Set) {\n\t\t\tmerged[prop] = new Set(sourceValue);\n\t\t} else if (typeof sourceValue === 'object' && sourceValue !== null) {\n\t\t\tmerged[prop] = deepMerge(targetValue, sourceValue);\n\t\t} else {\n\t\t\tmerged[prop] = sourceValue;\n\t\t}\n\t}\n\treturn merged;\n}\n\nexport default deepMerge;\n"
  },
  {
    "path": "uview-ui/libs/function/getParent.js",
    "content": "// 获取父组件的参数，因为支付宝小程序不支持provide/inject的写法\n// this.$parent在非H5中，可以准确获取到父组件，但是在H5中，需要多次this.$parent.$parent.xxx\nexport default function getParent(name, keys) {\n\tlet parent = this.$parent;\n\t// 通过while历遍，这里主要是为了H5需要多层解析的问题\n\twhile (parent) {\n\t\t// 父组件\n\t\tif (parent.$options.name !== name) {\n\t\t\t// 如果组件的name不相等，继续上一级寻找\n\t\t\tparent = parent.$parent;\n\t\t} else {\n\t\t\tlet data = {};\n\t\t\t// 判断keys是否数组，如果传过来的是一个数组，那么直接使用数组元素值当做键值去父组件寻找\n\t\t\tif(Array.isArray(keys)) {\n\t\t\t\tkeys.map(val => {\n\t\t\t\t\tdata[val] = parent[val] ? parent[val] : '';\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\t// 历遍传过来的对象参数\n\t\t\t\tfor(let i in keys) {\n\t\t\t\t\t// 如果子组件有此值则用，无此值则用父组件的值\n\t\t\t\t\t// 判断是否空数组，如果是，则用父组件的值，否则用子组件的值\n\t\t\t\t\tif(Array.isArray(keys[i])) {\n\t\t\t\t\t\tif(keys[i].length) {\n\t\t\t\t\t\t\tdata[i] = keys[i];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdata[i] = parent[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if(keys[i].constructor === Object) {\n\t\t\t\t\t\t// 判断是否对象，如果是对象，且有属性，那么使用子组件的值，否则使用父组件的值\n\t\t\t\t\t\tif(Object.keys(keys[i]).length) {\n\t\t\t\t\t\t\tdata[i] = keys[i];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdata[i] = parent[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// 只要子组件有传值，即使是false值，也是“传值”了，也需要覆盖父组件的同名参数\n\t\t\t\t\t\tdata[i] = (keys[i] || keys[i] === false) ? keys[i] : parent[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data;\n\t\t}\n\t}\n\n\treturn {};\n}"
  },
  {
    "path": "uview-ui/libs/function/guid.js",
    "content": "/**\n * 本算法来源于简书开源代码，详见：https://www.jianshu.com/p/fdbf293d0a85\n * 全局唯一标识符（uuid，Globally Unique Identifier）,也称作 uuid(Universally Unique IDentifier) \n * 一般用于多个组件之间,给它一个唯一的标识符,或者v-for循环的时候,如果使用数组的index可能会导致更新列表出现问题\n * 最可能的情况是左滑删除item或者对某条信息流\"不喜欢\"并去掉它的时候,会导致组件内的数据可能出现错乱\n * v-for的时候,推荐使用后端返回的id而不是循环的index\n * @param {Number} len uuid的长度\n * @param {Boolean} firstU 将返回的首字母置为\"u\"\n * @param {Number} radix 生成uuid的基数(意味着返回的字符串都是这个基数),2-二进制,8-八进制,10-十进制,16-十六进制\n */\nfunction guid(len = 32, firstU = true, radix = null) {\n\tlet chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');\n\tlet uuid = [];\n\tradix = radix || chars.length;\n\n\tif (len) {\n\t\t// 如果指定uuid长度,只是取随机的字符,0|x为位运算,能去掉x的小数位,返回整数位\n\t\tfor (let i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];\n\t} else {\n\t\tlet r;\n\t\t// rfc4122标准要求返回的uuid中,某些位为固定的字符\n\t\tuuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';\n\t\tuuid[14] = '4';\n\n\t\tfor (let i = 0; i < 36; i++) {\n\t\t\tif (!uuid[i]) {\n\t\t\t\tr = 0 | Math.random() * 16;\n\t\t\t\tuuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];\n\t\t\t}\n\t\t}\n\t}\n\t// 移除第一个字符,并用u替代,因为第一个字符为数值时,该guid不能用作id或者class\n\tif (firstU) {\n\t\tuuid.shift();\n\t\treturn 'u' + uuid.join('');\n\t} else {\n\t\treturn uuid.join('');\n\t}\n}\n\nexport default guid;\n"
  },
  {
    "path": "uview-ui/libs/function/md5.js",
    "content": "/*\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/*\n * Configurable variables. You may need to tweak these to be compatible with\n * the server-side, but the defaults work in most cases.\n */\nvar hexcase = 0;   /* hex output format. 0 - lowercase; 1 - uppercase        */\nvar b64pad  = \"\";  /* base-64 pad character. \"=\" for strict RFC compliance   */\n\n/*\n * These are the functions you'll usually want to call\n * They take string arguments and return either hex or base-64 encoded strings\n */\nfunction hex_md5(s)    { return rstr2hex(rstr_md5(str2rstr_utf8(s))); }\nfunction b64_md5(s)    { return rstr2b64(rstr_md5(str2rstr_utf8(s))); }\nfunction any_md5(s, e) { return rstr2any(rstr_md5(str2rstr_utf8(s)), e); }\nfunction hex_hmac_md5(k, d)\n  { return rstr2hex(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); }\nfunction b64_hmac_md5(k, d)\n  { return rstr2b64(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); }\nfunction any_hmac_md5(k, d, e)\n  { return rstr2any(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d)), e); }\n\n/*\n * Perform a simple self-test to see if the VM is working\n */\nfunction md5_vm_test()\n{\n  return hex_md5(\"abc\").toLowerCase() == \"900150983cd24fb0d6963f7d28e17f72\";\n}\n\n/*\n * Calculate the MD5 of a raw string\n */\nfunction rstr_md5(s)\n{\n  return binl2rstr(binl_md5(rstr2binl(s), s.length * 8));\n}\n\n/*\n * Calculate the HMAC-MD5, of a key and some data (raw strings)\n */\nfunction rstr_hmac_md5(key, data)\n{\n  var bkey = rstr2binl(key);\n  if(bkey.length > 16) bkey = binl_md5(bkey, key.length * 8);\n\n  var ipad = Array(16), opad = Array(16);\n  for(var i = 0; i < 16; i++)\n  {\n    ipad[i] = bkey[i] ^ 0x36363636;\n    opad[i] = bkey[i] ^ 0x5C5C5C5C;\n  }\n\n  var hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n  return binl2rstr(binl_md5(opad.concat(hash), 512 + 128));\n}\n\n/*\n * Convert a raw string to a hex string\n */\nfunction rstr2hex(input)\n{\n  try { hexcase } catch(e) { hexcase=0; }\n  var hex_tab = hexcase ? \"0123456789ABCDEF\" : \"0123456789abcdef\";\n  var output = \"\";\n  var x;\n  for(var i = 0; i < input.length; i++)\n  {\n    x = input.charCodeAt(i);\n    output += hex_tab.charAt((x >>> 4) & 0x0F)\n           +  hex_tab.charAt( x        & 0x0F);\n  }\n  return output;\n}\n\n/*\n * Convert a raw string to a base-64 string\n */\nfunction rstr2b64(input)\n{\n  try { b64pad } catch(e) { b64pad=''; }\n  var tab = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n  var output = \"\";\n  var len = input.length;\n  for(var i = 0; i < len; i += 3)\n  {\n    var triplet = (input.charCodeAt(i) << 16)\n                | (i + 1 < len ? input.charCodeAt(i+1) << 8 : 0)\n                | (i + 2 < len ? input.charCodeAt(i+2)      : 0);\n    for(var j = 0; j < 4; j++)\n    {\n      if(i * 8 + j * 6 > input.length * 8) output += b64pad;\n      else output += tab.charAt((triplet >>> 6*(3-j)) & 0x3F);\n    }\n  }\n  return output;\n}\n\n/*\n * Convert a raw string to an arbitrary string encoding\n */\nfunction rstr2any(input, encoding)\n{\n  var divisor = encoding.length;\n  var i, j, q, x, quotient;\n\n  /* Convert to an array of 16-bit big-endian values, forming the dividend */\n  var dividend = Array(Math.ceil(input.length / 2));\n  for(i = 0; i < dividend.length; i++)\n  {\n    dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1);\n  }\n\n  /*\n   * Repeatedly perform a long division. The binary array forms the dividend,\n   * the length of the encoding is the divisor. Once computed, the quotient\n   * forms the dividend for the next step. All remainders are stored for later\n   * use.\n   */\n  var full_length = Math.ceil(input.length * 8 /\n                                    (Math.log(encoding.length) / Math.log(2)));\n  var remainders = Array(full_length);\n  for(j = 0; j < full_length; j++)\n  {\n    quotient = Array();\n    x = 0;\n    for(i = 0; i < dividend.length; i++)\n    {\n      x = (x << 16) + dividend[i];\n      q = Math.floor(x / divisor);\n      x -= q * divisor;\n      if(quotient.length > 0 || q > 0)\n        quotient[quotient.length] = q;\n    }\n    remainders[j] = x;\n    dividend = quotient;\n  }\n\n  /* Convert the remainders to the output string */\n  var output = \"\";\n  for(i = remainders.length - 1; i >= 0; i--)\n    output += encoding.charAt(remainders[i]);\n\n  return output;\n}\n\n/*\n * Encode a string as utf-8.\n * For efficiency, this assumes the input is valid utf-16.\n */\nfunction str2rstr_utf8(input)\n{\n  var output = \"\";\n  var i = -1;\n  var x, y;\n\n  while(++i < input.length)\n  {\n    /* Decode utf-16 surrogate pairs */\n    x = input.charCodeAt(i);\n    y = i + 1 < input.length ? input.charCodeAt(i + 1) : 0;\n    if(0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF)\n    {\n      x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);\n      i++;\n    }\n\n    /* Encode output as utf-8 */\n    if(x <= 0x7F)\n      output += String.fromCharCode(x);\n    else if(x <= 0x7FF)\n      output += String.fromCharCode(0xC0 | ((x >>> 6 ) & 0x1F),\n                                    0x80 | ( x         & 0x3F));\n    else if(x <= 0xFFFF)\n      output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F),\n                                    0x80 | ((x >>> 6 ) & 0x3F),\n                                    0x80 | ( x         & 0x3F));\n    else if(x <= 0x1FFFFF)\n      output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07),\n                                    0x80 | ((x >>> 12) & 0x3F),\n                                    0x80 | ((x >>> 6 ) & 0x3F),\n                                    0x80 | ( x         & 0x3F));\n  }\n  return output;\n}\n\n/*\n * Encode a string as utf-16\n */\nfunction str2rstr_utf16le(input)\n{\n  var output = \"\";\n  for(var i = 0; i < input.length; i++)\n    output += String.fromCharCode( input.charCodeAt(i)        & 0xFF,\n                                  (input.charCodeAt(i) >>> 8) & 0xFF);\n  return output;\n}\n\nfunction str2rstr_utf16be(input)\n{\n  var output = \"\";\n  for(var i = 0; i < input.length; i++)\n    output += String.fromCharCode((input.charCodeAt(i) >>> 8) & 0xFF,\n                                   input.charCodeAt(i)        & 0xFF);\n  return output;\n}\n\n/*\n * Convert a raw string to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\nfunction rstr2binl(input)\n{\n  var output = Array(input.length >> 2);\n  for(var i = 0; i < output.length; i++)\n    output[i] = 0;\n  for(var i = 0; i < input.length * 8; i += 8)\n    output[i>>5] |= (input.charCodeAt(i / 8) & 0xFF) << (i%32);\n  return output;\n}\n\n/*\n * Convert an array of little-endian words to a string\n */\nfunction binl2rstr(input)\n{\n  var output = \"\";\n  for(var i = 0; i < input.length * 32; i += 8)\n    output += String.fromCharCode((input[i>>5] >>> (i % 32)) & 0xFF);\n  return output;\n}\n\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\nfunction binl_md5(x, len)\n{\n  /* append padding */\n  x[len >> 5] |= 0x80 << ((len) % 32);\n  x[(((len + 64) >>> 9) << 4) + 14] = len;\n\n  var a =  1732584193;\n  var b = -271733879;\n  var c = -1732584194;\n  var d =  271733878;\n\n  for(var i = 0; i < x.length; i += 16)\n  {\n    var olda = a;\n    var oldb = b;\n    var oldc = c;\n    var oldd = d;\n\n    a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);\n    d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);\n    c = md5_ff(c, d, a, b, x[i+ 2], 17,  606105819);\n    b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);\n    a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);\n    d = md5_ff(d, a, b, c, x[i+ 5], 12,  1200080426);\n    c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);\n    b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);\n    a = md5_ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);\n    d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);\n    c = md5_ff(c, d, a, b, x[i+10], 17, -42063);\n    b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);\n    a = md5_ff(a, b, c, d, x[i+12], 7 ,  1804603682);\n    d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);\n    c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);\n    b = md5_ff(b, c, d, a, x[i+15], 22,  1236535329);\n\n    a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);\n    d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);\n    c = md5_gg(c, d, a, b, x[i+11], 14,  643717713);\n    b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);\n    a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);\n    d = md5_gg(d, a, b, c, x[i+10], 9 ,  38016083);\n    c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);\n    b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);\n    a = md5_gg(a, b, c, d, x[i+ 9], 5 ,  568446438);\n    d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);\n    c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);\n    b = md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501);\n    a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);\n    d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);\n    c = md5_gg(c, d, a, b, x[i+ 7], 14,  1735328473);\n    b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);\n\n    a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);\n    d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);\n    c = md5_hh(c, d, a, b, x[i+11], 16,  1839030562);\n    b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);\n    a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);\n    d = md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353);\n    c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);\n    b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);\n    a = md5_hh(a, b, c, d, x[i+13], 4 ,  681279174);\n    d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);\n    c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);\n    b = md5_hh(b, c, d, a, x[i+ 6], 23,  76029189);\n    a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);\n    d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);\n    c = md5_hh(c, d, a, b, x[i+15], 16,  530742520);\n    b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);\n\n    a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);\n    d = md5_ii(d, a, b, c, x[i+ 7], 10,  1126891415);\n    c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);\n    b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);\n    a = md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571);\n    d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);\n    c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);\n    b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);\n    a = md5_ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);\n    d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);\n    c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);\n    b = md5_ii(b, c, d, a, x[i+13], 21,  1309151649);\n    a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);\n    d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);\n    c = md5_ii(c, d, a, b, x[i+ 2], 15,  718787259);\n    b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);\n\n    a = safe_add(a, olda);\n    b = safe_add(b, oldb);\n    c = safe_add(c, oldc);\n    d = safe_add(d, oldd);\n  }\n  return Array(a, b, c, d);\n}\n\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\nfunction md5_cmn(q, a, b, x, s, t)\n{\n  return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);\n}\nfunction md5_ff(a, b, c, d, x, s, t)\n{\n  return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);\n}\nfunction md5_gg(a, b, c, d, x, s, t)\n{\n  return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);\n}\nfunction md5_hh(a, b, c, d, x, s, t)\n{\n  return md5_cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5_ii(a, b, c, d, x, s, t)\n{\n  return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);\n}\n\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\nfunction safe_add(x, y)\n{\n  var lsw = (x & 0xFFFF) + (y & 0xFFFF);\n  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n  return (msw << 16) | (lsw & 0xFFFF);\n}\n\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\nfunction bit_rol(num, cnt)\n{\n  return (num << cnt) | (num >>> (32 - cnt));\n}\n\nmodule.exports = {\n\tmd5 : function(str){\n\t\treturn hex_md5(str);\n\t}\n}"
  },
  {
    "path": "uview-ui/libs/function/queryParams.js",
    "content": "/**\n * 对象转url参数\n * @param {*} data,对象\n * @param {*} isPrefix,是否自动加上\"?\"\n */\nfunction queryParams(data = {}, isPrefix = true, arrayFormat = 'brackets') {\n\tlet prefix = isPrefix ? '?' : ''\n\tlet _result = []\n\tif (['indices', 'brackets', 'repeat', 'comma'].indexOf(arrayFormat) == -1) arrayFormat = 'brackets';\n\tfor (let key in data) {\n\t\tlet value = data[key]\n\t\t// 去掉为空的参数\n\t\tif (['', undefined, null].indexOf(value) >= 0) {\n\t\t\tcontinue;\n\t\t}\n\t\t// 如果值为数组，另行处理\n\t\tif (value.constructor === Array) {\n\t\t\t// e.g. {ids: [1, 2, 3]}\n\t\t\tswitch (arrayFormat) {\n\t\t\t\tcase 'indices':\n\t\t\t\t\t// 结果: ids[0]=1&ids[1]=2&ids[2]=3\n\t\t\t\t\tfor (let i = 0; i < value.length; i++) {\n\t\t\t\t\t\t_result.push(key + '[' + i + ']=' + value[i])\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'brackets':\n\t\t\t\t\t// 结果: ids[]=1&ids[]=2&ids[]=3\n\t\t\t\t\tvalue.forEach(_value => {\n\t\t\t\t\t\t_result.push(key + '[]=' + _value)\n\t\t\t\t\t})\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'repeat':\n\t\t\t\t\t// 结果: ids=1&ids=2&ids=3\n\t\t\t\t\tvalue.forEach(_value => {\n\t\t\t\t\t\t_result.push(key + '=' + _value)\n\t\t\t\t\t})\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'comma':\n\t\t\t\t\t// 结果: ids=1,2,3\n\t\t\t\t\tlet commaStr = \"\";\n\t\t\t\t\tvalue.forEach(_value => {\n\t\t\t\t\t\tcommaStr += (commaStr ? \",\" : \"\") + _value;\n\t\t\t\t\t})\n\t\t\t\t\t_result.push(key + '=' + commaStr)\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tvalue.forEach(_value => {\n\t\t\t\t\t\t_result.push(key + '[]=' + _value)\n\t\t\t\t\t})\n\t\t\t}\n\t\t} else {\n\t\t\t_result.push(key + '=' + value)\n\t\t}\n\t}\n\treturn _result.length ? prefix + _result.join('&') : ''\n}\n\nexport default queryParams;\n"
  },
  {
    "path": "uview-ui/libs/function/random.js",
    "content": "function random(min, max) {\n\tif (min >= 0 && max > 0 && max >= min) {\n\t\tlet gab = max - min + 1;\n\t\treturn Math.floor(Math.random() * gab + min);\n\t} else {\n\t\treturn 0;\n\t}\n}\n\nexport default random;\n"
  },
  {
    "path": "uview-ui/libs/function/randomArray.js",
    "content": "// 打乱数组\nfunction randomArray(array = []) {\n\t// 原理是sort排序,Math.random()产生0<= x < 1之间的数,会导致x-0.05大于或者小于0\n\treturn array.sort(() => Math.random() - 0.5);\n}\n\nexport default randomArray\n"
  },
  {
    "path": "uview-ui/libs/function/route.js",
    "content": "/**\n * 路由跳转方法，该方法相对于直接使用uni.xxx的好处是使用更加简单快捷\n * 并且带有路由拦截功能\n */\n\nclass Router {\n\tconstructor() {\n\t\t// 原始属性定义\n\t\tthis.config = {\n\t\t\ttype: 'navigateTo',\n\t\t\turl: '',\n\t\t\tdelta: 1, // navigateBack页面后退时,回退的层数\n\t\t\tparams: {}, // 传递的参数\n\t\t\tanimationType: 'pop-in', // 窗口动画,只在APP有效\n\t\t\tanimationDuration: 300, // 窗口动画持续时间,单位毫秒,只在APP有效\n\t\t\tintercept: false, // 是否需要拦截\n\t\t}\n\t\t// 因为route方法是需要对外赋值给另外的对象使用，同时route内部有使用this，会导致route失去上下文\n\t\t// 这里在构造函数中进行this绑定\n\t\tthis.route = this.route.bind(this)\n\t}\n\n\t// 判断url前面是否有\"/\"，如果没有则加上，否则无法跳转\n\taddRootPath(url) {\n\t\treturn url[0] === '/' ? url : `/${url}`\n\t}\n\n\t// 整合路由参数\n\tmixinParam(url, params) {\n\t\turl = url && this.addRootPath(url)\n\n\t\t// 使用正则匹配，主要依据是判断是否有\"/\",\"?\",\"=\"等，如“/page/index/index?name=mary\"\n\t\t// 如果有url中有get参数，转换后无需带上\"?\"\n\t\tlet query = ''\n\t\tif (/.*\\/.*\\?.*=.*/.test(url)) {\n\t\t\t// object对象转为get类型的参数\n\t\t\tquery = uni.$u.queryParams(params, false);\n\t\t\t// 因为已有get参数,所以后面拼接的参数需要带上\"&\"隔开\n\t\t\treturn url += \"&\" + query\n\t\t} else {\n\t\t\t// 直接拼接参数，因为此处url中没有后面的query参数，也就没有\"?/&\"之类的符号\n\t\t\tquery = uni.$u.queryParams(params);\n\t\t\treturn url += query\n\t\t}\n\t}\n\n\t// 对外的方法名称\n\tasync route(options = {}, params = {}) {\n\t\t// 合并用户的配置和内部的默认配置\n\t\tlet mergeConfig = {}\n\n\t\tif (typeof options === 'string') {\n\t\t\t// 如果options为字符串，则为route(url, params)的形式\n\t\t\tmergeConfig.url = this.mixinParam(options, params)\n\t\t\tmergeConfig.type = 'navigateTo'\n\t\t} else {\n\t\t\tmergeConfig = uni.$u.deepMerge(this.config, options)\n\t\t\t// 否则正常使用mergeConfig中的url和params进行拼接\n\t\t\tmergeConfig.url = this.mixinParam(options.url, options.params)\n\t\t}\n\n\t\tif (params.intercept) {\n\t\t\tthis.config.intercept = params.intercept\n\t\t}\n\t\t// params参数也带给拦截器\n\t\tmergeConfig.params = params\n\t\t// 合并内外部参数\n\t\tmergeConfig = uni.$u.deepMerge(this.config, mergeConfig)\n\t\t// 判断用户是否定义了拦截器\n\t\tif (typeof uni.$u.routeIntercept === 'function') {\n\t\t\t// 定一个promise，根据用户执行resolve(true)或者resolve(false)来决定是否进行路由跳转\n\t\t\tconst isNext = await new Promise((resolve, reject) => {\n\t\t\t\tuni.$u.routeIntercept(mergeConfig, resolve)\n\t\t\t})\n\t\t\t// 如果isNext为true，则执行路由跳转\n\t\t\tisNext && this.openPage(mergeConfig)\n\t\t} else {\n\t\t\tthis.openPage(mergeConfig)\n\t\t}\n\t}\n\n\t// 执行路由跳转\n\topenPage(config) {\n\t\t// 解构参数\n\t\tconst {\n\t\t\turl,\n\t\t\ttype,\n\t\t\tdelta,\n\t\t\tanimationType,\n\t\t\tanimationDuration\n\t\t} = config\n\t\tif (config.type == 'navigateTo' || config.type == 'to') {\n\t\t\tuni.navigateTo({\n\t\t\t\turl,\n\t\t\t\tanimationType,\n\t\t\t\tanimationDuration\n\t\t\t});\n\t\t}\n\t\tif (config.type == 'redirectTo' || config.type == 'redirect') {\n\t\t\tuni.redirectTo({\n\t\t\t\turl\n\t\t\t});\n\t\t}\n\t\tif (config.type == 'switchTab' || config.type == 'tab') {\n\t\t\tuni.switchTab({\n\t\t\t\turl\n\t\t\t});\n\t\t}\n\t\tif (config.type == 'reLaunch' || config.type == 'launch') {\n\t\t\tuni.reLaunch({\n\t\t\t\turl\n\t\t\t});\n\t\t}\n\t\tif (config.type == 'navigateBack' || config.type == 'back') {\n\t\t\tuni.navigateBack({\n\t\t\t\tdelta\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport default (new Router()).route\n"
  },
  {
    "path": "uview-ui/libs/function/sys.js",
    "content": "export function os() {\n\treturn uni.getSystemInfoSync().platform;\n};\n\nexport function sys() {\n\treturn uni.getSystemInfoSync();\n}\n\n\n"
  },
  {
    "path": "uview-ui/libs/function/test.js",
    "content": "/**\n * 验证电子邮箱格式\n */\nfunction email(value) {\n\treturn /[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?/.test(value);\n}\n\n/**\n * 验证手机格式\n */\nfunction mobile(value) {\n\treturn /^1[3-9]\\d{9}$/.test(value)\n}\n\n/**\n * 验证URL格式\n */\nfunction url(value) {\n\treturn /http(s)?:\\/\\/([\\w-]+\\.)+[\\w-]+(\\/[\\w-.\\/?%&=]*)?/.test(value)\n}\n\n/**\n * 验证日期格式\n */\nfunction date(value) {\n\treturn !/Invalid|NaN/.test(new Date(value).toString())\n}\n\n/**\n * 验证ISO类型的日期格式\n */\nfunction dateISO(value) {\n\treturn /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test(value)\n}\n\n/**\n * 验证十进制数字\n */\nfunction number(value) {\n\treturn /^[\\+-]?(\\d+\\.?\\d*|\\.\\d+|\\d\\.\\d+e\\+\\d+)$/.test(value)\n}\n\n/**\n * 验证整数\n */\nfunction digits(value) {\n\treturn /^\\d+$/.test(value)\n}\n\n/**\n * 验证身份证号码\n */\nfunction idCard(value) {\n\treturn /^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$/.test(\n\t\tvalue)\n}\n\n/**\n * 是否车牌号\n */\nfunction carNo(value) {\n\t// 新能源车牌\n\tconst xreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/;\n\t// 旧车牌\n\tconst creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/;\n\tif (value.length === 7) {\n\t\treturn creg.test(value);\n\t} else if (value.length === 8) {\n\t\treturn xreg.test(value);\n\t} else {\n\t\treturn false;\n\t}\n}\n\n/**\n * 金额,只允许2位小数\n */\nfunction amount(value) {\n\t//金额，只允许保留两位小数\n\treturn /^[1-9]\\d*(,\\d{3})*(\\.\\d{1,2})?$|^0\\.\\d{1,2}$/.test(value);\n}\n\n/**\n * 中文\n */\nfunction chinese(value) {\n\tlet reg = /^[\\u4e00-\\u9fa5]+$/gi;\n\treturn reg.test(value);\n}\n\n/**\n * 只能输入字母\n */\nfunction letter(value) {\n\treturn /^[a-zA-Z]*$/.test(value);\n}\n\n/**\n * 只能是字母或者数字\n */\nfunction enOrNum(value) {\n\t//英文或者数字\n\tlet reg = /^[0-9a-zA-Z]*$/g;\n\treturn reg.test(value);\n}\n\n/**\n * 验证是否包含某个值\n */\nfunction contains(value, param) {\n\treturn value.indexOf(param) >= 0\n}\n\n/**\n * 验证一个值范围[min, max]\n */\nfunction range(value, param) {\n\treturn value >= param[0] && value <= param[1]\n}\n\n/**\n * 验证一个长度范围[min, max]\n */\nfunction rangeLength(value, param) {\n\treturn value.length >= param[0] && value.length <= param[1]\n}\n\n/**\n * 是否固定电话\n */\nfunction landline(value) {\n\tlet reg = /^\\d{3,4}-\\d{7,8}(-\\d{3,4})?$/;\n\treturn reg.test(value);\n}\n\n/**\n * 判断是否为空\n */\nfunction empty(value) {\n\tswitch (typeof value) {\n\t\tcase 'undefined':\n\t\t\treturn true;\n\t\tcase 'string':\n\t\t\tif (value.replace(/(^[ \\t\\n\\r]*)|([ \\t\\n\\r]*$)/g, '').length == 0) return true;\n\t\t\tbreak;\n\t\tcase 'boolean':\n\t\t\tif (!value) return true;\n\t\t\tbreak;\n\t\tcase 'number':\n\t\t\tif (0 === value || isNaN(value)) return true;\n\t\t\tbreak;\n\t\tcase 'object':\n\t\t\tif (null === value || value.length === 0) return true;\n\t\t\tfor (var i in value) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t}\n\treturn false;\n}\n\n/**\n * 是否json字符串\n */\nfunction jsonString(value) {\n\tif (typeof value == 'string') {\n\t\ttry {\n\t\t\tvar obj = JSON.parse(value);\n\t\t\tif (typeof obj == 'object' && obj) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn false;\n}\n\n\n/**\n * 是否数组\n */\nfunction array(value) {\n\tif (typeof Array.isArray === \"function\") {\n\t\treturn Array.isArray(value);\n\t} else {\n\t\treturn Object.prototype.toString.call(value) === \"[object Array]\";\n\t}\n}\n\n/**\n * 是否对象\n */\nfunction object(value) {\n\treturn Object.prototype.toString.call(value) === '[object Object]';\n}\n\n/**\n * 是否短信验证码\n */\nfunction code(value, len = 6) {\n\treturn new RegExp(`^\\\\d{${len}}$`).test(value);\n}\n\n\nexport default {\n\temail,\n\tmobile,\n\turl,\n\tdate,\n\tdateISO,\n\tnumber,\n\tdigits,\n\tidCard,\n\tcarNo,\n\tamount,\n\tchinese,\n\tletter,\n\tenOrNum,\n\tcontains,\n\trange,\n\trangeLength,\n\tempty,\n\tisEmpty: empty,\n\tjsonString,\n\tlandline,\n\tobject,\n\tarray,\n\tcode\n}\n"
  },
  {
    "path": "uview-ui/libs/function/throttle.js",
    "content": "let timer, flag;\n/**\n * 节流原理：在一定时间内，只能触发一次\n * \n * @param {Function} func 要执行的回调函数 \n * @param {Number} wait 延时的时间\n * @param {Boolean} immediate 是否立即执行\n * @return null\n */\nfunction throttle(func, wait = 500, immediate = true) {\n\tif (immediate) {\n\t\tif (!flag) {\n\t\t\tflag = true;\n\t\t\t// 如果是立即执行，则在wait毫秒内开始时执行\n\t\t\ttypeof func === 'function' && func();\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tflag = false;\n\t\t\t}, wait);\n\t\t}\n\t} else {\n\t\tif (!flag) {\n\t\t\tflag = true\n\t\t\t// 如果是非立即执行，则在wait毫秒内的结束处执行\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tflag = false\n\t\t\t\ttypeof func === 'function' && func();\n\t\t\t}, wait);\n\t\t}\n\t\t\n\t}\n};\nexport default throttle\n"
  },
  {
    "path": "uview-ui/libs/function/timeFormat.js",
    "content": "// padStart 的 polyfill，因为某些机型或情况，还无法支持es7的padStart，比如电脑版的微信小程序\n// 所以这里做一个兼容polyfill的兼容处理\nif (!String.prototype.padStart) {\n\t// 为了方便表示这里 fillString 用了ES6 的默认参数，不影响理解\n\tString.prototype.padStart = function(maxLength, fillString = ' ') {\n\t\tif (Object.prototype.toString.call(fillString) !== \"[object String]\") throw new TypeError(\n\t\t\t'fillString must be String')\n\t\tlet str = this\n\t\t// 返回 String(str) 这里是为了使返回的值是字符串字面量，在控制台中更符合直觉\n\t\tif (str.length >= maxLength) return String(str)\n\n\t\tlet fillLength = maxLength - str.length,\n\t\t\ttimes = Math.ceil(fillLength / fillString.length)\n\t\twhile (times >>= 1) {\n\t\t\tfillString += fillString\n\t\t\tif (times === 1) {\n\t\t\t\tfillString += fillString\n\t\t\t}\n\t\t}\n\t\treturn fillString.slice(0, fillLength) + str;\n\t}\n}\n\n// 其他更多是格式化有如下:\n// yyyy:mm:dd|yyyy:mm|yyyy年mm月dd日|yyyy年mm月dd日 hh时MM分等,可自定义组合\nfunction timeFormat(dateTime = null, fmt = 'yyyy-mm-dd') {\n\t// 如果为null,则格式化当前时间\n\tif (!dateTime) dateTime = Number(new Date());\n\t// 如果dateTime长度为10或者13，则为秒和毫秒的时间戳，如果超过13位，则为其他的时间格式\n\tif (dateTime.toString().length == 10) dateTime *= 1000;\n\tlet date = new Date(dateTime);\n\tlet ret;\n\tlet opt = {\n\t\t\"y+\": date.getFullYear().toString(), // 年\n\t\t\"m+\": (date.getMonth() + 1).toString(), // 月\n\t\t\"d+\": date.getDate().toString(), // 日\n\t\t\"h+\": date.getHours().toString(), // 时\n\t\t\"M+\": date.getMinutes().toString(), // 分\n\t\t\"s+\": date.getSeconds().toString() // 秒\n\t\t// 有其他格式化字符需求可以继续添加，必须转化成字符串\n\t};\n\tfor (let k in opt) {\n\t\tret = new RegExp(\"(\" + k + \")\").exec(fmt);\n\t\tif (ret) {\n\t\t\tfmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, \"0\")))\n\t\t};\n\t};\n\treturn fmt;\n}\n\nexport default timeFormat\n"
  },
  {
    "path": "uview-ui/libs/function/timeFrom.js",
    "content": "import timeFormat from '../../libs/function/timeFormat.js';\n\n/**\n * 时间戳转为多久之前\n * @param String timestamp 时间戳\n * @param String | Boolean format 如果为时间格式字符串，超出一定时间范围，返回固定的时间格式；\n * 如果为布尔值false，无论什么时间，都返回多久以前的格式\n */\nfunction timeFrom(dateTime = null, format = 'yyyy-mm-dd') {\n\t// 如果为null,则格式化当前时间\n\tif (!dateTime) dateTime = Number(new Date());\n\t// 如果dateTime长度为10或者13，则为秒和毫秒的时间戳，如果超过13位，则为其他的时间格式\n\tif (dateTime.toString().length == 10) dateTime *= 1000;\n\tlet timestamp = + new Date(Number(dateTime));\n\n\tlet timer = (Number(new Date()) - timestamp) / 1000;\n\t// 如果小于5分钟,则返回\"刚刚\",其他以此类推\n\tlet tips = '';\n\tswitch (true) {\n\t\tcase timer < 300:\n\t\t\ttips = '刚刚';\n\t\t\tbreak;\n\t\tcase timer >= 300 && timer < 3600:\n\t\t\ttips = parseInt(timer / 60) + '分钟前';\n\t\t\tbreak;\n\t\tcase timer >= 3600 && timer < 86400:\n\t\t\ttips = parseInt(timer / 3600) + '小时前';\n\t\t\tbreak;\n\t\tcase timer >= 86400 && timer < 2592000:\n\t\t\ttips = parseInt(timer / 86400) + '天前';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t// 如果format为false，则无论什么时间戳，都显示xx之前\n\t\t\tif(format === false) {\n\t\t\t\tif(timer >= 2592000 && timer < 365 * 86400) {\n\t\t\t\t\ttips = parseInt(timer / (86400 * 30)) + '个月前';\n\t\t\t\t} else {\n\t\t\t\t\ttips = parseInt(timer / (86400 * 365)) + '年前';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttips = timeFormat(timestamp, format);\n\t\t\t}\n\t}\n\treturn tips;\n}\n\nexport default timeFrom;\n"
  },
  {
    "path": "uview-ui/libs/function/toast.js",
    "content": "function toast(title, duration = 1500) {\n\tuni.showToast({\n\t\ttitle: title,\n\t\ticon: 'none',\n\t\tduration: duration\n\t})\n}\n\nexport default toast\n"
  },
  {
    "path": "uview-ui/libs/function/trim.js",
    "content": "function trim(str, pos = 'both') {\n\tif (pos == 'both') {\n\t\treturn str.replace(/^\\s+|\\s+$/g, \"\");\n\t} else if (pos == \"left\") {\n\t\treturn str.replace(/^\\s*/, '');\n\t} else if (pos == 'right') {\n\t\treturn str.replace(/(\\s*$)/g, \"\");\n\t} else if (pos == 'all') {\n\t\treturn str.replace(/\\s+/g, \"\");\n\t} else {\n\t\treturn str;\n\t}\n}\n\nexport default trim\n"
  },
  {
    "path": "uview-ui/libs/function/type2icon.js",
    "content": "/**\n * 根据主题type值,获取对应的图标\n * @param String type 主题名称,primary|info|error|warning|success\n * @param String fill 是否使用fill填充实体的图标  \n */\nfunction type2icon(type = 'success', fill = false) {\n\t// 如果非预置值,默认为success\n\tif (['primary', 'info', 'error', 'warning', 'success'].indexOf(type) == -1) type = 'success';\n\tlet iconName = '';\n\t// 目前(2019-12-12),info和primary使用同一个图标\n\tswitch (type) {\n\t\tcase 'primary':\n\t\t\ticonName = 'info-circle';\n\t\t\tbreak;\n\t\tcase 'info':\n\t\t\ticonName = 'info-circle';\n\t\t\tbreak;\n\t\tcase 'error':\n\t\t\ticonName = 'close-circle';\n\t\t\tbreak;\n\t\tcase 'warning':\n\t\t\ticonName = 'error-circle';\n\t\t\tbreak;\n\t\tcase 'success':\n\t\t\ticonName = 'checkmark-circle';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\ticonName = 'checkmark-circle';\n\t}\n\t// 是否是实体类型,加上-fill,在icon组件库中,实体的类名是后面加-fill的\n\tif (fill) iconName += '-fill';\n\treturn iconName;\n}\n\nexport default type2icon\n"
  },
  {
    "path": "uview-ui/libs/mixin/mixin.js",
    "content": "module.exports = {\n\tdata() {\n\t\treturn {}\n\t},\n\tonLoad() {\n\t\t// getRect挂载到$u上，因为这方法需要使用in(this)，所以无法把它独立成一个单独的文件导出\n\t\tthis.$u.getRect = this.$uGetRect\n\t},\n\tmethods: {\n\t\t// 查询节点信息\n\t\t// 目前此方法在支付宝小程序中无法获取组件跟接点的尺寸，为支付宝的bug(2020-07-21)\n\t\t// 解决办法为在组件根部再套一个没有任何作用的view元素\n\t\t$uGetRect(selector, all) {\n\t\t\treturn new Promise(resolve => {\n\t\t\t\tuni.createSelectorQuery().\n\t\t\t\tin(this)[all ? 'selectAll' : 'select'](selector)\n\t\t\t\t\t.boundingClientRect(rect => {\n\t\t\t\t\t\tif (all && Array.isArray(rect) && rect.length) {\n\t\t\t\t\t\t\tresolve(rect)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!all && rect) {\n\t\t\t\t\t\t\tresolve(rect)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.exec()\n\t\t\t})\n\t\t},\n\t\tgetParentData(parentName = '') {\n\t\t\t// 避免在created中去定义parent变量\n\t\t\tif(!this.parent) this.parent = false;\n\t\t\t// 这里的本质原理是，通过获取父组件实例(也即u-radio-group的this)\n\t\t\t// 将父组件this中对应的参数，赋值给本组件(u-radio的this)的parentData对象中对应的属性\n\t\t\t// 之所以需要这么做，是因为所有端中，头条小程序不支持通过this.parent.xxx去监听父组件参数的变化\n\t\t\tthis.parent = this.$u.$parent.call(this, parentName);\n\t\t\tif(this.parent) {\n\t\t\t\t// 历遍parentData中的属性，将parent中的同名属性赋值给parentData\n\t\t\t\tObject.keys(this.parentData).map(key => {\n\t\t\t\t\tthis.parentData[key] = this.parent[key];\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t// 阻止事件冒泡\n\t\tpreventEvent(e) {\n\t\t\te && e.stopPropagation && e.stopPropagation()\n\t\t}\n\t},\n\tonReachBottom() {\n\t\tuni.$emit('uOnReachBottom')\n\t},\n\tbeforeDestroy() {\n\t\t// 判断当前页面是否存在parent和children，一般在checkbox和checkbox-group父子联动的场景会有此情况\n\t\t// 组件销毁时，移除子组件在父组件children数组中的实例，释放资源，避免数据混乱\n\t\tif(this.parent && uni.$u.test.array(this.parent.children)) {\n\t\t\t// 组件销毁时，移除父组件中的children数组中对应的实例\n\t\t\tconst childrenList = this.parent.children\n\t\t\tchildrenList.map((child, index) => {\n\t\t\t\t// 如果相等，则移除\n\t\t\t\tif(child === this) {\n\t\t\t\t\tchildrenList.splice(index, 1)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "uview-ui/libs/mixin/mpShare.js",
    "content": "module.exports = {\n\tonLoad() {\n\t\t// 设置默认的转发参数\n\t\tthis.$u.mpShare = {\n\t\t\ttitle: '', // 默认为小程序名称\n\t\t\tpath: '', // 默认为当前页面路径\n\t\t\timageUrl: '' // 默认为当前页面的截图\n\t\t}\n\t},\n\tonShareAppMessage() {\n\t\treturn this.$u.mpShare\n\t},\n\t// #ifdef MP-WEIXIN\n\tonShareTimeline() {\n\t\treturn this.$u.mpShare\n\t}\n\t// #endif\n}\n"
  },
  {
    "path": "uview-ui/libs/request/index.js",
    "content": "import deepMerge from \"../function/deepMerge\";\nimport validate from \"../function/test\";\nclass Request {\n\t// 设置全局默认配置\n\tsetConfig(customConfig) {\n\t\t// 深度合并对象，否则会造成对象深层属性丢失\n\t\tthis.config = deepMerge(this.config, customConfig);\n\t}\n\n\t// 主要请求部分\n\trequest(options = {}) {\n\t\t// 检查请求拦截\n\t\tif (this.interceptor.request && typeof this.interceptor.request === 'function') {\n\t\t\tlet tmpConfig = {};\n\t\t\tlet interceptorRequest = this.interceptor.request(options);\n\t\t\tif (interceptorRequest === false) {\n\t\t\t\t// 返回一个处于pending状态中的Promise，来取消原promise，避免进入then()回调\n\t\t\t\treturn new Promise(()=>{});\n\t\t\t}\n\t\t\tthis.options = interceptorRequest;\n\t\t}\n\t\toptions.dataType = options.dataType || this.config.dataType;\n\t\toptions.responseType = options.responseType || this.config.responseType;\n\t\toptions.url = options.url || '';\n\t\toptions.params = options.params || {};\n\t\toptions.header = Object.assign({}, this.config.header, options.header);\n\t\toptions.method = options.method || this.config.method;\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\toptions.complete = (response) => {\n\t\t\t\t// 请求返回后，隐藏loading(如果请求返回快的话，可能会没有loading)\n\t\t\t\tuni.hideLoading();\n\t\t\t\t// 清除定时器，如果请求回来了，就无需loading\n\t\t\t\tclearTimeout(this.config.timer);\n\t\t\t\tthis.config.timer = null;\n\t\t\t\t// 判断用户对拦截返回数据的要求，如果originalData为true，返回所有的数据(response)到拦截器，否则只返回response.data\n\t\t\t\tif(this.config.originalData) {\n\t\t\t\t\t// 判断是否存在拦截器\n\t\t\t\t\tif (this.interceptor.response && typeof this.interceptor.response === 'function') {\n\t\t\t\t\t\tlet resInterceptors = this.interceptor.response(response);\n\t\t\t\t\t\t// 如果拦截器不返回false，就将拦截器返回的内容给this.$u.post的then回调\n\t\t\t\t\t\tif (resInterceptors !== false) {\n\t\t\t\t\t\t\tresolve(resInterceptors);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// 如果拦截器返回false，意味着拦截器定义者认为返回有问题，直接接入catch回调\n\t\t\t\t\t\t\treject(response);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// 如果要求返回原始数据，就算没有拦截器，也返回最原始的数据\n\t\t\t\t\t\tresolve(response);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (response.statusCode == 200) {\n\t\t\t\t\t\tif (this.interceptor.response && typeof this.interceptor.response === 'function') {\n\t\t\t\t\t\t\tlet resInterceptors = this.interceptor.response(response.data);\n\t\t\t\t\t\t\tif (resInterceptors !== false) {\n\t\t\t\t\t\t\t\tresolve(resInterceptors);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treject(response.data);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// 如果不是返回原始数据(originalData=false)，且没有拦截器的情况下，返回纯数据给then回调\n\t\t\t\t\t\t\tresolve(response.data);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// 不返回原始数据的情况下，服务器状态码不为200，modal弹框提示\n\t\t\t\t\t\t// if(response.errMsg) {\n\t\t\t\t\t\t// \tuni.showModal({\n\t\t\t\t\t\t// \t\ttitle: response.errMsg\n\t\t\t\t\t\t// \t});\n\t\t\t\t\t\t// }\n\t\t\t\t\t\treject(response)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// 判断用户传递的URL是否/开头,如果不是,加上/，这里使用了uView的test.js验证库的url()方法\n\t\t\toptions.url = validate.url(options.url) ? options.url : (this.config.baseUrl + (options.url.indexOf('/') == 0 ?\n\t\t\t\toptions.url : '/' + options.url));\n\t\t\t\n\t\t\t// 是否显示loading\n\t\t\t// 加一个是否已有timer定时器的判断，否则有两个同时请求的时候，后者会清除前者的定时器id\n\t\t\t// 而没有清除前者的定时器，导致前者超时，一直显示loading\n\t\t\tif(this.config.showLoading && !this.config.timer) {\n\t\t\t\tthis.config.timer = setTimeout(() => {\n\t\t\t\t\tuni.showLoading({\n\t\t\t\t\t\ttitle: this.config.loadingText,\n\t\t\t\t\t\tmask: this.config.loadingMask\n\t\t\t\t\t})\n\t\t\t\t\tthis.config.timer = null;\n\t\t\t\t}, this.config.loadingTime);\n\t\t\t}\n\t\t\tuni.request(options);\n\t\t})\n\t\t// .catch(res => {\n\t\t// \t// 如果返回reject()，不让其进入this.$u.post().then().catch()后面的catct()\n\t\t// \t// 因为很多人都会忘了写后面的catch()，导致报错捕获不到catch\n\t\t// \treturn new Promise(()=>{});\n\t\t// })\n\t}\n\n\tconstructor() {\n\t\tthis.config = {\n\t\t\tbaseUrl: '', // 请求的根域名\n\t\t\t// 默认的请求头\n\t\t\theader: {},\n\t\t\tmethod: 'POST',\n\t\t\t// 设置为json，返回后uni.request会对数据进行一次JSON.parse\n\t\t\tdataType: 'json',\n\t\t\t// 此参数无需处理，因为5+和支付宝小程序不支持，默认为text即可\n\t\t\tresponseType: 'text',\n\t\t\tshowLoading: true, // 是否显示请求中的loading\n\t\t\tloadingText: '请求中...',\n\t\t\tloadingTime: 800, // 在此时间内，请求还没回来的话，就显示加载中动画，单位ms\n\t\t\ttimer: null, // 定时器\n\t\t\toriginalData: false, // 是否在拦截器中返回服务端的原始数据，见文档说明\n\t\t\tloadingMask: true, // 展示loading的时候，是否给一个透明的蒙层，防止触摸穿透\n\t\t}\n\t\n\t\t// 拦截器\n\t\tthis.interceptor = {\n\t\t\t// 请求前的拦截\n\t\t\trequest: null,\n\t\t\t// 请求后的拦截\n\t\t\tresponse: null\n\t\t}\n\n\t\t// get请求\n\t\tthis.get = (url, data = {}, header = {}) => {\n\t\t\treturn this.request({\n\t\t\t\tmethod: 'GET',\n\t\t\t\turl,\n\t\t\t\theader,\n\t\t\t\tdata\n\t\t\t})\n\t\t}\n\n\t\t// post请求\n\t\tthis.post = (url, data = {}, header = {}) => {\n\t\t\treturn this.request({\n\t\t\t\turl,\n\t\t\t\tmethod: 'POST',\n\t\t\t\theader,\n\t\t\t\tdata\n\t\t\t})\n\t\t}\n\t\t\n\t\t// put请求，不支持支付宝小程序(HX2.6.15)\n\t\tthis.put = (url, data = {}, header = {}) => {\n\t\t\treturn this.request({\n\t\t\t\turl,\n\t\t\t\tmethod: 'PUT',\n\t\t\t\theader,\n\t\t\t\tdata\n\t\t\t})\n\t\t}\n\t\t\n\t\t// delete请求，不支持支付宝和头条小程序(HX2.6.15)\n\t\tthis.delete = (url, data = {}, header = {}) => {\n\t\t\treturn this.request({\n\t\t\t\turl,\n\t\t\t\tmethod: 'DELETE',\n\t\t\t\theader,\n\t\t\t\tdata\n\t\t\t})\n\t\t}\n\t}\n}\nexport default new Request\n"
  },
  {
    "path": "uview-ui/libs/store/index.js",
    "content": "// 暂时不用vuex模块方式实现，将该方法直接放入到/store/index.js中\nconst module = {\n\tactions: {\n\t\t$uStore({rootState}, params) {\n\t\t\tlet nameArr = params.name.split('.');\n\t\t\tif(nameArr.length >= 2) {\n\t\t\t\tlet obj = rootState[nameArr[0]];\n\t\t\t\tfor(let i = 1; i < nameArr.length - 1; i ++) {\n\t\t\t\t\tobj = obj[nameArr[i]];\n\t\t\t\t}\n\t\t\t\tobj[nameArr[nameArr.length - 1]] = params.value;\n\t\t\t} else {\n\t\t\t\trootState[params.name] = params.value;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport default module"
  },
  {
    "path": "uview-ui/libs/util/area.js",
    "content": "var areaData=[[[{\"label\":\"东城区\",\"value\":\"110101\"},{\"label\":\"西城区\",\"value\":\"110102\"},{\"label\":\"朝阳区\",\"value\":\"110105\"},{\"label\":\"丰台区\",\"value\":\"110106\"},{\"label\":\"石景山区\",\"value\":\"110107\"},{\"label\":\"海淀区\",\"value\":\"110108\"},{\"label\":\"门头沟区\",\"value\":\"110109\"},{\"label\":\"房山区\",\"value\":\"110111\"},{\"label\":\"通州区\",\"value\":\"110112\"},{\"label\":\"顺义区\",\"value\":\"110113\"},{\"label\":\"昌平区\",\"value\":\"110114\"},{\"label\":\"大兴区\",\"value\":\"110115\"},{\"label\":\"怀柔区\",\"value\":\"110116\"},{\"label\":\"平谷区\",\"value\":\"110117\"},{\"label\":\"密云区\",\"value\":\"110118\"},{\"label\":\"延庆区\",\"value\":\"110119\"}]],[[{\"label\":\"和平区\",\"value\":\"120101\"},{\"label\":\"河东区\",\"value\":\"120102\"},{\"label\":\"河西区\",\"value\":\"120103\"},{\"label\":\"南开区\",\"value\":\"120104\"},{\"label\":\"河北区\",\"value\":\"120105\"},{\"label\":\"红桥区\",\"value\":\"120106\"},{\"label\":\"东丽区\",\"value\":\"120110\"},{\"label\":\"西青区\",\"value\":\"120111\"},{\"label\":\"津南区\",\"value\":\"120112\"},{\"label\":\"北辰区\",\"value\":\"120113\"},{\"label\":\"武清区\",\"value\":\"120114\"},{\"label\":\"宝坻区\",\"value\":\"120115\"},{\"label\":\"滨海新区\",\"value\":\"120116\"},{\"label\":\"宁河区\",\"value\":\"120117\"},{\"label\":\"静海区\",\"value\":\"120118\"},{\"label\":\"蓟州区\",\"value\":\"120119\"}]],[[{\"label\":\"长安区\",\"value\":\"130102\"},{\"label\":\"桥西区\",\"value\":\"130104\"},{\"label\":\"新华区\",\"value\":\"130105\"},{\"label\":\"井陉矿区\",\"value\":\"130107\"},{\"label\":\"裕华区\",\"value\":\"130108\"},{\"label\":\"藁城区\",\"value\":\"130109\"},{\"label\":\"鹿泉区\",\"value\":\"130110\"},{\"label\":\"栾城区\",\"value\":\"130111\"},{\"label\":\"井陉县\",\"value\":\"130121\"},{\"label\":\"正定县\",\"value\":\"130123\"},{\"label\":\"行唐县\",\"value\":\"130125\"},{\"label\":\"灵寿县\",\"value\":\"130126\"},{\"label\":\"高邑县\",\"value\":\"130127\"},{\"label\":\"深泽县\",\"value\":\"130128\"},{\"label\":\"赞皇县\",\"value\":\"130129\"},{\"label\":\"无极县\",\"value\":\"130130\"},{\"label\":\"平山县\",\"value\":\"130131\"},{\"label\":\"元氏县\",\"value\":\"130132\"},{\"label\":\"赵县\",\"value\":\"130133\"},{\"label\":\"石家庄高新技术产业开发区\",\"value\":\"130171\"},{\"label\":\"石家庄循环化工园区\",\"value\":\"130172\"},{\"label\":\"辛集市\",\"value\":\"130181\"},{\"label\":\"晋州市\",\"value\":\"130183\"},{\"label\":\"新乐市\",\"value\":\"130184\"}],[{\"label\":\"路南区\",\"value\":\"130202\"},{\"label\":\"路北区\",\"value\":\"130203\"},{\"label\":\"古冶区\",\"value\":\"130204\"},{\"label\":\"开平区\",\"value\":\"130205\"},{\"label\":\"丰南区\",\"value\":\"130207\"},{\"label\":\"丰润区\",\"value\":\"130208\"},{\"label\":\"曹妃甸区\",\"value\":\"130209\"},{\"label\":\"滦县\",\"value\":\"130223\"},{\"label\":\"滦南县\",\"value\":\"130224\"},{\"label\":\"乐亭县\",\"value\":\"130225\"},{\"label\":\"迁西县\",\"value\":\"130227\"},{\"label\":\"玉田县\",\"value\":\"130229\"},{\"label\":\"唐山市芦台经济技术开发区\",\"value\":\"130271\"},{\"label\":\"唐山市汉沽管理区\",\"value\":\"130272\"},{\"label\":\"唐山高新技术产业开发区\",\"value\":\"130273\"},{\"label\":\"河北唐山海港经济开发区\",\"value\":\"130274\"},{\"label\":\"遵化市\",\"value\":\"130281\"},{\"label\":\"迁安市\",\"value\":\"130283\"}],[{\"label\":\"海港区\",\"value\":\"130302\"},{\"label\":\"山海关区\",\"value\":\"130303\"},{\"label\":\"北戴河区\",\"value\":\"130304\"},{\"label\":\"抚宁区\",\"value\":\"130306\"},{\"label\":\"青龙满族自治县\",\"value\":\"130321\"},{\"label\":\"昌黎县\",\"value\":\"130322\"},{\"label\":\"卢龙县\",\"value\":\"130324\"},{\"label\":\"秦皇岛市经济技术开发区\",\"value\":\"130371\"},{\"label\":\"北戴河新区\",\"value\":\"130372\"}],[{\"label\":\"邯山区\",\"value\":\"130402\"},{\"label\":\"丛台区\",\"value\":\"130403\"},{\"label\":\"复兴区\",\"value\":\"130404\"},{\"label\":\"峰峰矿区\",\"value\":\"130406\"},{\"label\":\"肥乡区\",\"value\":\"130407\"},{\"label\":\"永年区\",\"value\":\"130408\"},{\"label\":\"临漳县\",\"value\":\"130423\"},{\"label\":\"成安县\",\"value\":\"130424\"},{\"label\":\"大名县\",\"value\":\"130425\"},{\"label\":\"涉县\",\"value\":\"130426\"},{\"label\":\"磁县\",\"value\":\"130427\"},{\"label\":\"邱县\",\"value\":\"130430\"},{\"label\":\"鸡泽县\",\"value\":\"130431\"},{\"label\":\"广平县\",\"value\":\"130432\"},{\"label\":\"馆陶县\",\"value\":\"130433\"},{\"label\":\"魏县\",\"value\":\"130434\"},{\"label\":\"曲周县\",\"value\":\"130435\"},{\"label\":\"邯郸经济技术开发区\",\"value\":\"130471\"},{\"label\":\"邯郸冀南新区\",\"value\":\"130473\"},{\"label\":\"武安市\",\"value\":\"130481\"}],[{\"label\":\"桥东区\",\"value\":\"130502\"},{\"label\":\"桥西区\",\"value\":\"130503\"},{\"label\":\"邢台县\",\"value\":\"130521\"},{\"label\":\"临城县\",\"value\":\"130522\"},{\"label\":\"内丘县\",\"value\":\"130523\"},{\"label\":\"柏乡县\",\"value\":\"130524\"},{\"label\":\"隆尧县\",\"value\":\"130525\"},{\"label\":\"任县\",\"value\":\"130526\"},{\"label\":\"南和县\",\"value\":\"130527\"},{\"label\":\"宁晋县\",\"value\":\"130528\"},{\"label\":\"巨鹿县\",\"value\":\"130529\"},{\"label\":\"新河县\",\"value\":\"130530\"},{\"label\":\"广宗县\",\"value\":\"130531\"},{\"label\":\"平乡县\",\"value\":\"130532\"},{\"label\":\"威县\",\"value\":\"130533\"},{\"label\":\"清河县\",\"value\":\"130534\"},{\"label\":\"临西县\",\"value\":\"130535\"},{\"label\":\"河北邢台经济开发区\",\"value\":\"130571\"},{\"label\":\"南宫市\",\"value\":\"130581\"},{\"label\":\"沙河市\",\"value\":\"130582\"}],[{\"label\":\"竞秀区\",\"value\":\"130602\"},{\"label\":\"莲池区\",\"value\":\"130606\"},{\"label\":\"满城区\",\"value\":\"130607\"},{\"label\":\"清苑区\",\"value\":\"130608\"},{\"label\":\"徐水区\",\"value\":\"130609\"},{\"label\":\"涞水县\",\"value\":\"130623\"},{\"label\":\"阜平县\",\"value\":\"130624\"},{\"label\":\"定兴县\",\"value\":\"130626\"},{\"label\":\"唐县\",\"value\":\"130627\"},{\"label\":\"高阳县\",\"value\":\"130628\"},{\"label\":\"容城县\",\"value\":\"130629\"},{\"label\":\"涞源县\",\"value\":\"130630\"},{\"label\":\"望都县\",\"value\":\"130631\"},{\"label\":\"安新县\",\"value\":\"130632\"},{\"label\":\"易县\",\"value\":\"130633\"},{\"label\":\"曲阳县\",\"value\":\"130634\"},{\"label\":\"蠡县\",\"value\":\"130635\"},{\"label\":\"顺平县\",\"value\":\"130636\"},{\"label\":\"博野县\",\"value\":\"130637\"},{\"label\":\"雄县\",\"value\":\"130638\"},{\"label\":\"保定高新技术产业开发区\",\"value\":\"130671\"},{\"label\":\"保定白沟新城\",\"value\":\"130672\"},{\"label\":\"涿州市\",\"value\":\"130681\"},{\"label\":\"定州市\",\"value\":\"130682\"},{\"label\":\"安国市\",\"value\":\"130683\"},{\"label\":\"高碑店市\",\"value\":\"130684\"}],[{\"label\":\"桥东区\",\"value\":\"130702\"},{\"label\":\"桥西区\",\"value\":\"130703\"},{\"label\":\"宣化区\",\"value\":\"130705\"},{\"label\":\"下花园区\",\"value\":\"130706\"},{\"label\":\"万全区\",\"value\":\"130708\"},{\"label\":\"崇礼区\",\"value\":\"130709\"},{\"label\":\"张北县\",\"value\":\"130722\"},{\"label\":\"康保县\",\"value\":\"130723\"},{\"label\":\"沽源县\",\"value\":\"130724\"},{\"label\":\"尚义县\",\"value\":\"130725\"},{\"label\":\"蔚县\",\"value\":\"130726\"},{\"label\":\"阳原县\",\"value\":\"130727\"},{\"label\":\"怀安县\",\"value\":\"130728\"},{\"label\":\"怀来县\",\"value\":\"130730\"},{\"label\":\"涿鹿县\",\"value\":\"130731\"},{\"label\":\"赤城县\",\"value\":\"130732\"},{\"label\":\"张家口市高新技术产业开发区\",\"value\":\"130771\"},{\"label\":\"张家口市察北管理区\",\"value\":\"130772\"},{\"label\":\"张家口市塞北管理区\",\"value\":\"130773\"}],[{\"label\":\"双桥区\",\"value\":\"130802\"},{\"label\":\"双滦区\",\"value\":\"130803\"},{\"label\":\"鹰手营子矿区\",\"value\":\"130804\"},{\"label\":\"承德县\",\"value\":\"130821\"},{\"label\":\"兴隆县\",\"value\":\"130822\"},{\"label\":\"滦平县\",\"value\":\"130824\"},{\"label\":\"隆化县\",\"value\":\"130825\"},{\"label\":\"丰宁满族自治县\",\"value\":\"130826\"},{\"label\":\"宽城满族自治县\",\"value\":\"130827\"},{\"label\":\"围场满族蒙古族自治县\",\"value\":\"130828\"},{\"label\":\"承德高新技术产业开发区\",\"value\":\"130871\"},{\"label\":\"平泉市\",\"value\":\"130881\"}],[{\"label\":\"新华区\",\"value\":\"130902\"},{\"label\":\"运河区\",\"value\":\"130903\"},{\"label\":\"沧县\",\"value\":\"130921\"},{\"label\":\"青县\",\"value\":\"130922\"},{\"label\":\"东光县\",\"value\":\"130923\"},{\"label\":\"海兴县\",\"value\":\"130924\"},{\"label\":\"盐山县\",\"value\":\"130925\"},{\"label\":\"肃宁县\",\"value\":\"130926\"},{\"label\":\"南皮县\",\"value\":\"130927\"},{\"label\":\"吴桥县\",\"value\":\"130928\"},{\"label\":\"献县\",\"value\":\"130929\"},{\"label\":\"孟村回族自治县\",\"value\":\"130930\"},{\"label\":\"河北沧州经济开发区\",\"value\":\"130971\"},{\"label\":\"沧州高新技术产业开发区\",\"value\":\"130972\"},{\"label\":\"沧州渤海新区\",\"value\":\"130973\"},{\"label\":\"泊头市\",\"value\":\"130981\"},{\"label\":\"任丘市\",\"value\":\"130982\"},{\"label\":\"黄骅市\",\"value\":\"130983\"},{\"label\":\"河间市\",\"value\":\"130984\"}],[{\"label\":\"安次区\",\"value\":\"131002\"},{\"label\":\"广阳区\",\"value\":\"131003\"},{\"label\":\"固安县\",\"value\":\"131022\"},{\"label\":\"永清县\",\"value\":\"131023\"},{\"label\":\"香河县\",\"value\":\"131024\"},{\"label\":\"大城县\",\"value\":\"131025\"},{\"label\":\"文安县\",\"value\":\"131026\"},{\"label\":\"大厂回族自治县\",\"value\":\"131028\"},{\"label\":\"廊坊经济技术开发区\",\"value\":\"131071\"},{\"label\":\"霸州市\",\"value\":\"131081\"},{\"label\":\"三河市\",\"value\":\"131082\"}],[{\"label\":\"桃城区\",\"value\":\"131102\"},{\"label\":\"冀州区\",\"value\":\"131103\"},{\"label\":\"枣强县\",\"value\":\"131121\"},{\"label\":\"武邑县\",\"value\":\"131122\"},{\"label\":\"武强县\",\"value\":\"131123\"},{\"label\":\"饶阳县\",\"value\":\"131124\"},{\"label\":\"安平县\",\"value\":\"131125\"},{\"label\":\"故城县\",\"value\":\"131126\"},{\"label\":\"景县\",\"value\":\"131127\"},{\"label\":\"阜城县\",\"value\":\"131128\"},{\"label\":\"河北衡水经济开发区\",\"value\":\"131171\"},{\"label\":\"衡水滨湖新区\",\"value\":\"131172\"},{\"label\":\"深州市\",\"value\":\"131182\"}]],[[{\"label\":\"小店区\",\"value\":\"140105\"},{\"label\":\"迎泽区\",\"value\":\"140106\"},{\"label\":\"杏花岭区\",\"value\":\"140107\"},{\"label\":\"尖草坪区\",\"value\":\"140108\"},{\"label\":\"万柏林区\",\"value\":\"140109\"},{\"label\":\"晋源区\",\"value\":\"140110\"},{\"label\":\"清徐县\",\"value\":\"140121\"},{\"label\":\"阳曲县\",\"value\":\"140122\"},{\"label\":\"娄烦县\",\"value\":\"140123\"},{\"label\":\"山西转型综合改革示范区\",\"value\":\"140171\"},{\"label\":\"古交市\",\"value\":\"140181\"}],[{\"label\":\"城区\",\"value\":\"140202\"},{\"label\":\"矿区\",\"value\":\"140203\"},{\"label\":\"南郊区\",\"value\":\"140211\"},{\"label\":\"新荣区\",\"value\":\"140212\"},{\"label\":\"阳高县\",\"value\":\"140221\"},{\"label\":\"天镇县\",\"value\":\"140222\"},{\"label\":\"广灵县\",\"value\":\"140223\"},{\"label\":\"灵丘县\",\"value\":\"140224\"},{\"label\":\"浑源县\",\"value\":\"140225\"},{\"label\":\"左云县\",\"value\":\"140226\"},{\"label\":\"大同县\",\"value\":\"140227\"},{\"label\":\"山西大同经济开发区\",\"value\":\"140271\"}],[{\"label\":\"城区\",\"value\":\"140302\"},{\"label\":\"矿区\",\"value\":\"140303\"},{\"label\":\"郊区\",\"value\":\"140311\"},{\"label\":\"平定县\",\"value\":\"140321\"},{\"label\":\"盂县\",\"value\":\"140322\"},{\"label\":\"山西阳泉经济开发区\",\"value\":\"140371\"}],[{\"label\":\"城区\",\"value\":\"140402\"},{\"label\":\"郊区\",\"value\":\"140411\"},{\"label\":\"长治县\",\"value\":\"140421\"},{\"label\":\"襄垣县\",\"value\":\"140423\"},{\"label\":\"屯留县\",\"value\":\"140424\"},{\"label\":\"平顺县\",\"value\":\"140425\"},{\"label\":\"黎城县\",\"value\":\"140426\"},{\"label\":\"壶关县\",\"value\":\"140427\"},{\"label\":\"长子县\",\"value\":\"140428\"},{\"label\":\"武乡县\",\"value\":\"140429\"},{\"label\":\"沁县\",\"value\":\"140430\"},{\"label\":\"沁源县\",\"value\":\"140431\"},{\"label\":\"山西长治高新技术产业园区\",\"value\":\"140471\"},{\"label\":\"潞城市\",\"value\":\"140481\"}],[{\"label\":\"城区\",\"value\":\"140502\"},{\"label\":\"沁水县\",\"value\":\"140521\"},{\"label\":\"阳城县\",\"value\":\"140522\"},{\"label\":\"陵川县\",\"value\":\"140524\"},{\"label\":\"泽州县\",\"value\":\"140525\"},{\"label\":\"高平市\",\"value\":\"140581\"}],[{\"label\":\"朔城区\",\"value\":\"140602\"},{\"label\":\"平鲁区\",\"value\":\"140603\"},{\"label\":\"山阴县\",\"value\":\"140621\"},{\"label\":\"应县\",\"value\":\"140622\"},{\"label\":\"右玉县\",\"value\":\"140623\"},{\"label\":\"怀仁县\",\"value\":\"140624\"},{\"label\":\"山西朔州经济开发区\",\"value\":\"140671\"}],[{\"label\":\"榆次区\",\"value\":\"140702\"},{\"label\":\"榆社县\",\"value\":\"140721\"},{\"label\":\"左权县\",\"value\":\"140722\"},{\"label\":\"和顺县\",\"value\":\"140723\"},{\"label\":\"昔阳县\",\"value\":\"140724\"},{\"label\":\"寿阳县\",\"value\":\"140725\"},{\"label\":\"太谷县\",\"value\":\"140726\"},{\"label\":\"祁县\",\"value\":\"140727\"},{\"label\":\"平遥县\",\"value\":\"140728\"},{\"label\":\"灵石县\",\"value\":\"140729\"},{\"label\":\"介休市\",\"value\":\"140781\"}],[{\"label\":\"盐湖区\",\"value\":\"140802\"},{\"label\":\"临猗县\",\"value\":\"140821\"},{\"label\":\"万荣县\",\"value\":\"140822\"},{\"label\":\"闻喜县\",\"value\":\"140823\"},{\"label\":\"稷山县\",\"value\":\"140824\"},{\"label\":\"新绛县\",\"value\":\"140825\"},{\"label\":\"绛县\",\"value\":\"140826\"},{\"label\":\"垣曲县\",\"value\":\"140827\"},{\"label\":\"夏县\",\"value\":\"140828\"},{\"label\":\"平陆县\",\"value\":\"140829\"},{\"label\":\"芮城县\",\"value\":\"140830\"},{\"label\":\"永济市\",\"value\":\"140881\"},{\"label\":\"河津市\",\"value\":\"140882\"}],[{\"label\":\"忻府区\",\"value\":\"140902\"},{\"label\":\"定襄县\",\"value\":\"140921\"},{\"label\":\"五台县\",\"value\":\"140922\"},{\"label\":\"代县\",\"value\":\"140923\"},{\"label\":\"繁峙县\",\"value\":\"140924\"},{\"label\":\"宁武县\",\"value\":\"140925\"},{\"label\":\"静乐县\",\"value\":\"140926\"},{\"label\":\"神池县\",\"value\":\"140927\"},{\"label\":\"五寨县\",\"value\":\"140928\"},{\"label\":\"岢岚县\",\"value\":\"140929\"},{\"label\":\"河曲县\",\"value\":\"140930\"},{\"label\":\"保德县\",\"value\":\"140931\"},{\"label\":\"偏关县\",\"value\":\"140932\"},{\"label\":\"五台山风景名胜区\",\"value\":\"140971\"},{\"label\":\"原平市\",\"value\":\"140981\"}],[{\"label\":\"尧都区\",\"value\":\"141002\"},{\"label\":\"曲沃县\",\"value\":\"141021\"},{\"label\":\"翼城县\",\"value\":\"141022\"},{\"label\":\"襄汾县\",\"value\":\"141023\"},{\"label\":\"洪洞县\",\"value\":\"141024\"},{\"label\":\"古县\",\"value\":\"141025\"},{\"label\":\"安泽县\",\"value\":\"141026\"},{\"label\":\"浮山县\",\"value\":\"141027\"},{\"label\":\"吉县\",\"value\":\"141028\"},{\"label\":\"乡宁县\",\"value\":\"141029\"},{\"label\":\"大宁县\",\"value\":\"141030\"},{\"label\":\"隰县\",\"value\":\"141031\"},{\"label\":\"永和县\",\"value\":\"141032\"},{\"label\":\"蒲县\",\"value\":\"141033\"},{\"label\":\"汾西县\",\"value\":\"141034\"},{\"label\":\"侯马市\",\"value\":\"141081\"},{\"label\":\"霍州市\",\"value\":\"141082\"}],[{\"label\":\"离石区\",\"value\":\"141102\"},{\"label\":\"文水县\",\"value\":\"141121\"},{\"label\":\"交城县\",\"value\":\"141122\"},{\"label\":\"兴县\",\"value\":\"141123\"},{\"label\":\"临县\",\"value\":\"141124\"},{\"label\":\"柳林县\",\"value\":\"141125\"},{\"label\":\"石楼县\",\"value\":\"141126\"},{\"label\":\"岚县\",\"value\":\"141127\"},{\"label\":\"方山县\",\"value\":\"141128\"},{\"label\":\"中阳县\",\"value\":\"141129\"},{\"label\":\"交口县\",\"value\":\"141130\"},{\"label\":\"孝义市\",\"value\":\"141181\"},{\"label\":\"汾阳市\",\"value\":\"141182\"}]],[[{\"label\":\"新城区\",\"value\":\"150102\"},{\"label\":\"回民区\",\"value\":\"150103\"},{\"label\":\"玉泉区\",\"value\":\"150104\"},{\"label\":\"赛罕区\",\"value\":\"150105\"},{\"label\":\"土默特左旗\",\"value\":\"150121\"},{\"label\":\"托克托县\",\"value\":\"150122\"},{\"label\":\"和林格尔县\",\"value\":\"150123\"},{\"label\":\"清水河县\",\"value\":\"150124\"},{\"label\":\"武川县\",\"value\":\"150125\"},{\"label\":\"呼和浩特金海工业园区\",\"value\":\"150171\"},{\"label\":\"呼和浩特经济技术开发区\",\"value\":\"150172\"}],[{\"label\":\"东河区\",\"value\":\"150202\"},{\"label\":\"昆都仑区\",\"value\":\"150203\"},{\"label\":\"青山区\",\"value\":\"150204\"},{\"label\":\"石拐区\",\"value\":\"150205\"},{\"label\":\"白云鄂博矿区\",\"value\":\"150206\"},{\"label\":\"九原区\",\"value\":\"150207\"},{\"label\":\"土默特右旗\",\"value\":\"150221\"},{\"label\":\"固阳县\",\"value\":\"150222\"},{\"label\":\"达尔罕茂明安联合旗\",\"value\":\"150223\"},{\"label\":\"包头稀土高新技术产业开发区\",\"value\":\"150271\"}],[{\"label\":\"海勃湾区\",\"value\":\"150302\"},{\"label\":\"海南区\",\"value\":\"150303\"},{\"label\":\"乌达区\",\"value\":\"150304\"}],[{\"label\":\"红山区\",\"value\":\"150402\"},{\"label\":\"元宝山区\",\"value\":\"150403\"},{\"label\":\"松山区\",\"value\":\"150404\"},{\"label\":\"阿鲁科尔沁旗\",\"value\":\"150421\"},{\"label\":\"巴林左旗\",\"value\":\"150422\"},{\"label\":\"巴林右旗\",\"value\":\"150423\"},{\"label\":\"林西县\",\"value\":\"150424\"},{\"label\":\"克什克腾旗\",\"value\":\"150425\"},{\"label\":\"翁牛特旗\",\"value\":\"150426\"},{\"label\":\"喀喇沁旗\",\"value\":\"150428\"},{\"label\":\"宁城县\",\"value\":\"150429\"},{\"label\":\"敖汉旗\",\"value\":\"150430\"}],[{\"label\":\"科尔沁区\",\"value\":\"150502\"},{\"label\":\"科尔沁左翼中旗\",\"value\":\"150521\"},{\"label\":\"科尔沁左翼后旗\",\"value\":\"150522\"},{\"label\":\"开鲁县\",\"value\":\"150523\"},{\"label\":\"库伦旗\",\"value\":\"150524\"},{\"label\":\"奈曼旗\",\"value\":\"150525\"},{\"label\":\"扎鲁特旗\",\"value\":\"150526\"},{\"label\":\"通辽经济技术开发区\",\"value\":\"150571\"},{\"label\":\"霍林郭勒市\",\"value\":\"150581\"}],[{\"label\":\"东胜区\",\"value\":\"150602\"},{\"label\":\"康巴什区\",\"value\":\"150603\"},{\"label\":\"达拉特旗\",\"value\":\"150621\"},{\"label\":\"准格尔旗\",\"value\":\"150622\"},{\"label\":\"鄂托克前旗\",\"value\":\"150623\"},{\"label\":\"鄂托克旗\",\"value\":\"150624\"},{\"label\":\"杭锦旗\",\"value\":\"150625\"},{\"label\":\"乌审旗\",\"value\":\"150626\"},{\"label\":\"伊金霍洛旗\",\"value\":\"150627\"}],[{\"label\":\"海拉尔区\",\"value\":\"150702\"},{\"label\":\"扎赉诺尔区\",\"value\":\"150703\"},{\"label\":\"阿荣旗\",\"value\":\"150721\"},{\"label\":\"莫力达瓦达斡尔族自治旗\",\"value\":\"150722\"},{\"label\":\"鄂伦春自治旗\",\"value\":\"150723\"},{\"label\":\"鄂温克族自治旗\",\"value\":\"150724\"},{\"label\":\"陈巴尔虎旗\",\"value\":\"150725\"},{\"label\":\"新巴尔虎左旗\",\"value\":\"150726\"},{\"label\":\"新巴尔虎右旗\",\"value\":\"150727\"},{\"label\":\"满洲里市\",\"value\":\"150781\"},{\"label\":\"牙克石市\",\"value\":\"150782\"},{\"label\":\"扎兰屯市\",\"value\":\"150783\"},{\"label\":\"额尔古纳市\",\"value\":\"150784\"},{\"label\":\"根河市\",\"value\":\"150785\"}],[{\"label\":\"临河区\",\"value\":\"150802\"},{\"label\":\"五原县\",\"value\":\"150821\"},{\"label\":\"磴口县\",\"value\":\"150822\"},{\"label\":\"乌拉特前旗\",\"value\":\"150823\"},{\"label\":\"乌拉特中旗\",\"value\":\"150824\"},{\"label\":\"乌拉特后旗\",\"value\":\"150825\"},{\"label\":\"杭锦后旗\",\"value\":\"150826\"}],[{\"label\":\"集宁区\",\"value\":\"150902\"},{\"label\":\"卓资县\",\"value\":\"150921\"},{\"label\":\"化德县\",\"value\":\"150922\"},{\"label\":\"商都县\",\"value\":\"150923\"},{\"label\":\"兴和县\",\"value\":\"150924\"},{\"label\":\"凉城县\",\"value\":\"150925\"},{\"label\":\"察哈尔右翼前旗\",\"value\":\"150926\"},{\"label\":\"察哈尔右翼中旗\",\"value\":\"150927\"},{\"label\":\"察哈尔右翼后旗\",\"value\":\"150928\"},{\"label\":\"四子王旗\",\"value\":\"150929\"},{\"label\":\"丰镇市\",\"value\":\"150981\"}],[{\"label\":\"乌兰浩特市\",\"value\":\"152201\"},{\"label\":\"阿尔山市\",\"value\":\"152202\"},{\"label\":\"科尔沁右翼前旗\",\"value\":\"152221\"},{\"label\":\"科尔沁右翼中旗\",\"value\":\"152222\"},{\"label\":\"扎赉特旗\",\"value\":\"152223\"},{\"label\":\"突泉县\",\"value\":\"152224\"}],[{\"label\":\"二连浩特市\",\"value\":\"152501\"},{\"label\":\"锡林浩特市\",\"value\":\"152502\"},{\"label\":\"阿巴嘎旗\",\"value\":\"152522\"},{\"label\":\"苏尼特左旗\",\"value\":\"152523\"},{\"label\":\"苏尼特右旗\",\"value\":\"152524\"},{\"label\":\"东乌珠穆沁旗\",\"value\":\"152525\"},{\"label\":\"西乌珠穆沁旗\",\"value\":\"152526\"},{\"label\":\"太仆寺旗\",\"value\":\"152527\"},{\"label\":\"镶黄旗\",\"value\":\"152528\"},{\"label\":\"正镶白旗\",\"value\":\"152529\"},{\"label\":\"正蓝旗\",\"value\":\"152530\"},{\"label\":\"多伦县\",\"value\":\"152531\"},{\"label\":\"乌拉盖管委会\",\"value\":\"152571\"}],[{\"label\":\"阿拉善左旗\",\"value\":\"152921\"},{\"label\":\"阿拉善右旗\",\"value\":\"152922\"},{\"label\":\"额济纳旗\",\"value\":\"152923\"},{\"label\":\"内蒙古阿拉善经济开发区\",\"value\":\"152971\"}]],[[{\"label\":\"和平区\",\"value\":\"210102\"},{\"label\":\"沈河区\",\"value\":\"210103\"},{\"label\":\"大东区\",\"value\":\"210104\"},{\"label\":\"皇姑区\",\"value\":\"210105\"},{\"label\":\"铁西区\",\"value\":\"210106\"},{\"label\":\"苏家屯区\",\"value\":\"210111\"},{\"label\":\"浑南区\",\"value\":\"210112\"},{\"label\":\"沈北新区\",\"value\":\"210113\"},{\"label\":\"于洪区\",\"value\":\"210114\"},{\"label\":\"辽中区\",\"value\":\"210115\"},{\"label\":\"康平县\",\"value\":\"210123\"},{\"label\":\"法库县\",\"value\":\"210124\"},{\"label\":\"新民市\",\"value\":\"210181\"}],[{\"label\":\"中山区\",\"value\":\"210202\"},{\"label\":\"西岗区\",\"value\":\"210203\"},{\"label\":\"沙河口区\",\"value\":\"210204\"},{\"label\":\"甘井子区\",\"value\":\"210211\"},{\"label\":\"旅顺口区\",\"value\":\"210212\"},{\"label\":\"金州区\",\"value\":\"210213\"},{\"label\":\"普兰店区\",\"value\":\"210214\"},{\"label\":\"长海县\",\"value\":\"210224\"},{\"label\":\"瓦房店市\",\"value\":\"210281\"},{\"label\":\"庄河市\",\"value\":\"210283\"}],[{\"label\":\"铁东区\",\"value\":\"210302\"},{\"label\":\"铁西区\",\"value\":\"210303\"},{\"label\":\"立山区\",\"value\":\"210304\"},{\"label\":\"千山区\",\"value\":\"210311\"},{\"label\":\"台安县\",\"value\":\"210321\"},{\"label\":\"岫岩满族自治县\",\"value\":\"210323\"},{\"label\":\"海城市\",\"value\":\"210381\"}],[{\"label\":\"新抚区\",\"value\":\"210402\"},{\"label\":\"东洲区\",\"value\":\"210403\"},{\"label\":\"望花区\",\"value\":\"210404\"},{\"label\":\"顺城区\",\"value\":\"210411\"},{\"label\":\"抚顺县\",\"value\":\"210421\"},{\"label\":\"新宾满族自治县\",\"value\":\"210422\"},{\"label\":\"清原满族自治县\",\"value\":\"210423\"}],[{\"label\":\"平山区\",\"value\":\"210502\"},{\"label\":\"溪湖区\",\"value\":\"210503\"},{\"label\":\"明山区\",\"value\":\"210504\"},{\"label\":\"南芬区\",\"value\":\"210505\"},{\"label\":\"本溪满族自治县\",\"value\":\"210521\"},{\"label\":\"桓仁满族自治县\",\"value\":\"210522\"}],[{\"label\":\"元宝区\",\"value\":\"210602\"},{\"label\":\"振兴区\",\"value\":\"210603\"},{\"label\":\"振安区\",\"value\":\"210604\"},{\"label\":\"宽甸满族自治县\",\"value\":\"210624\"},{\"label\":\"东港市\",\"value\":\"210681\"},{\"label\":\"凤城市\",\"value\":\"210682\"}],[{\"label\":\"古塔区\",\"value\":\"210702\"},{\"label\":\"凌河区\",\"value\":\"210703\"},{\"label\":\"太和区\",\"value\":\"210711\"},{\"label\":\"黑山县\",\"value\":\"210726\"},{\"label\":\"义县\",\"value\":\"210727\"},{\"label\":\"凌海市\",\"value\":\"210781\"},{\"label\":\"北镇市\",\"value\":\"210782\"}],[{\"label\":\"站前区\",\"value\":\"210802\"},{\"label\":\"西市区\",\"value\":\"210803\"},{\"label\":\"鲅鱼圈区\",\"value\":\"210804\"},{\"label\":\"老边区\",\"value\":\"210811\"},{\"label\":\"盖州市\",\"value\":\"210881\"},{\"label\":\"大石桥市\",\"value\":\"210882\"}],[{\"label\":\"海州区\",\"value\":\"210902\"},{\"label\":\"新邱区\",\"value\":\"210903\"},{\"label\":\"太平区\",\"value\":\"210904\"},{\"label\":\"清河门区\",\"value\":\"210905\"},{\"label\":\"细河区\",\"value\":\"210911\"},{\"label\":\"阜新蒙古族自治县\",\"value\":\"210921\"},{\"label\":\"彰武县\",\"value\":\"210922\"}],[{\"label\":\"白塔区\",\"value\":\"211002\"},{\"label\":\"文圣区\",\"value\":\"211003\"},{\"label\":\"宏伟区\",\"value\":\"211004\"},{\"label\":\"弓长岭区\",\"value\":\"211005\"},{\"label\":\"太子河区\",\"value\":\"211011\"},{\"label\":\"辽阳县\",\"value\":\"211021\"},{\"label\":\"灯塔市\",\"value\":\"211081\"}],[{\"label\":\"双台子区\",\"value\":\"211102\"},{\"label\":\"兴隆台区\",\"value\":\"211103\"},{\"label\":\"大洼区\",\"value\":\"211104\"},{\"label\":\"盘山县\",\"value\":\"211122\"}],[{\"label\":\"银州区\",\"value\":\"211202\"},{\"label\":\"清河区\",\"value\":\"211204\"},{\"label\":\"铁岭县\",\"value\":\"211221\"},{\"label\":\"西丰县\",\"value\":\"211223\"},{\"label\":\"昌图县\",\"value\":\"211224\"},{\"label\":\"调兵山市\",\"value\":\"211281\"},{\"label\":\"开原市\",\"value\":\"211282\"}],[{\"label\":\"双塔区\",\"value\":\"211302\"},{\"label\":\"龙城区\",\"value\":\"211303\"},{\"label\":\"朝阳县\",\"value\":\"211321\"},{\"label\":\"建平县\",\"value\":\"211322\"},{\"label\":\"喀喇沁左翼蒙古族自治县\",\"value\":\"211324\"},{\"label\":\"北票市\",\"value\":\"211381\"},{\"label\":\"凌源市\",\"value\":\"211382\"}],[{\"label\":\"连山区\",\"value\":\"211402\"},{\"label\":\"龙港区\",\"value\":\"211403\"},{\"label\":\"南票区\",\"value\":\"211404\"},{\"label\":\"绥中县\",\"value\":\"211421\"},{\"label\":\"建昌县\",\"value\":\"211422\"},{\"label\":\"兴城市\",\"value\":\"211481\"}]],[[{\"label\":\"南关区\",\"value\":\"220102\"},{\"label\":\"宽城区\",\"value\":\"220103\"},{\"label\":\"朝阳区\",\"value\":\"220104\"},{\"label\":\"二道区\",\"value\":\"220105\"},{\"label\":\"绿园区\",\"value\":\"220106\"},{\"label\":\"双阳区\",\"value\":\"220112\"},{\"label\":\"九台区\",\"value\":\"220113\"},{\"label\":\"农安县\",\"value\":\"220122\"},{\"label\":\"长春经济技术开发区\",\"value\":\"220171\"},{\"label\":\"长春净月高新技术产业开发区\",\"value\":\"220172\"},{\"label\":\"长春高新技术产业开发区\",\"value\":\"220173\"},{\"label\":\"长春汽车经济技术开发区\",\"value\":\"220174\"},{\"label\":\"榆树市\",\"value\":\"220182\"},{\"label\":\"德惠市\",\"value\":\"220183\"}],[{\"label\":\"昌邑区\",\"value\":\"220202\"},{\"label\":\"龙潭区\",\"value\":\"220203\"},{\"label\":\"船营区\",\"value\":\"220204\"},{\"label\":\"丰满区\",\"value\":\"220211\"},{\"label\":\"永吉县\",\"value\":\"220221\"},{\"label\":\"吉林经济开发区\",\"value\":\"220271\"},{\"label\":\"吉林高新技术产业开发区\",\"value\":\"220272\"},{\"label\":\"吉林中国新加坡食品区\",\"value\":\"220273\"},{\"label\":\"蛟河市\",\"value\":\"220281\"},{\"label\":\"桦甸市\",\"value\":\"220282\"},{\"label\":\"舒兰市\",\"value\":\"220283\"},{\"label\":\"磐石市\",\"value\":\"220284\"}],[{\"label\":\"铁西区\",\"value\":\"220302\"},{\"label\":\"铁东区\",\"value\":\"220303\"},{\"label\":\"梨树县\",\"value\":\"220322\"},{\"label\":\"伊通满族自治县\",\"value\":\"220323\"},{\"label\":\"公主岭市\",\"value\":\"220381\"},{\"label\":\"双辽市\",\"value\":\"220382\"}],[{\"label\":\"龙山区\",\"value\":\"220402\"},{\"label\":\"西安区\",\"value\":\"220403\"},{\"label\":\"东丰县\",\"value\":\"220421\"},{\"label\":\"东辽县\",\"value\":\"220422\"}],[{\"label\":\"东昌区\",\"value\":\"220502\"},{\"label\":\"二道江区\",\"value\":\"220503\"},{\"label\":\"通化县\",\"value\":\"220521\"},{\"label\":\"辉南县\",\"value\":\"220523\"},{\"label\":\"柳河县\",\"value\":\"220524\"},{\"label\":\"梅河口市\",\"value\":\"220581\"},{\"label\":\"集安市\",\"value\":\"220582\"}],[{\"label\":\"浑江区\",\"value\":\"220602\"},{\"label\":\"江源区\",\"value\":\"220605\"},{\"label\":\"抚松县\",\"value\":\"220621\"},{\"label\":\"靖宇县\",\"value\":\"220622\"},{\"label\":\"长白朝鲜族自治县\",\"value\":\"220623\"},{\"label\":\"临江市\",\"value\":\"220681\"}],[{\"label\":\"宁江区\",\"value\":\"220702\"},{\"label\":\"前郭尔罗斯蒙古族自治县\",\"value\":\"220721\"},{\"label\":\"长岭县\",\"value\":\"220722\"},{\"label\":\"乾安县\",\"value\":\"220723\"},{\"label\":\"吉林松原经济开发区\",\"value\":\"220771\"},{\"label\":\"扶余市\",\"value\":\"220781\"}],[{\"label\":\"洮北区\",\"value\":\"220802\"},{\"label\":\"镇赉县\",\"value\":\"220821\"},{\"label\":\"通榆县\",\"value\":\"220822\"},{\"label\":\"吉林白城经济开发区\",\"value\":\"220871\"},{\"label\":\"洮南市\",\"value\":\"220881\"},{\"label\":\"大安市\",\"value\":\"220882\"}],[{\"label\":\"延吉市\",\"value\":\"222401\"},{\"label\":\"图们市\",\"value\":\"222402\"},{\"label\":\"敦化市\",\"value\":\"222403\"},{\"label\":\"珲春市\",\"value\":\"222404\"},{\"label\":\"龙井市\",\"value\":\"222405\"},{\"label\":\"和龙市\",\"value\":\"222406\"},{\"label\":\"汪清县\",\"value\":\"222424\"},{\"label\":\"安图县\",\"value\":\"222426\"}]],[[{\"label\":\"道里区\",\"value\":\"230102\"},{\"label\":\"南岗区\",\"value\":\"230103\"},{\"label\":\"道外区\",\"value\":\"230104\"},{\"label\":\"平房区\",\"value\":\"230108\"},{\"label\":\"松北区\",\"value\":\"230109\"},{\"label\":\"香坊区\",\"value\":\"230110\"},{\"label\":\"呼兰区\",\"value\":\"230111\"},{\"label\":\"阿城区\",\"value\":\"230112\"},{\"label\":\"双城区\",\"value\":\"230113\"},{\"label\":\"依兰县\",\"value\":\"230123\"},{\"label\":\"方正县\",\"value\":\"230124\"},{\"label\":\"宾县\",\"value\":\"230125\"},{\"label\":\"巴彦县\",\"value\":\"230126\"},{\"label\":\"木兰县\",\"value\":\"230127\"},{\"label\":\"通河县\",\"value\":\"230128\"},{\"label\":\"延寿县\",\"value\":\"230129\"},{\"label\":\"尚志市\",\"value\":\"230183\"},{\"label\":\"五常市\",\"value\":\"230184\"}],[{\"label\":\"龙沙区\",\"value\":\"230202\"},{\"label\":\"建华区\",\"value\":\"230203\"},{\"label\":\"铁锋区\",\"value\":\"230204\"},{\"label\":\"昂昂溪区\",\"value\":\"230205\"},{\"label\":\"富拉尔基区\",\"value\":\"230206\"},{\"label\":\"碾子山区\",\"value\":\"230207\"},{\"label\":\"梅里斯达斡尔族区\",\"value\":\"230208\"},{\"label\":\"龙江县\",\"value\":\"230221\"},{\"label\":\"依安县\",\"value\":\"230223\"},{\"label\":\"泰来县\",\"value\":\"230224\"},{\"label\":\"甘南县\",\"value\":\"230225\"},{\"label\":\"富裕县\",\"value\":\"230227\"},{\"label\":\"克山县\",\"value\":\"230229\"},{\"label\":\"克东县\",\"value\":\"230230\"},{\"label\":\"拜泉县\",\"value\":\"230231\"},{\"label\":\"讷河市\",\"value\":\"230281\"}],[{\"label\":\"鸡冠区\",\"value\":\"230302\"},{\"label\":\"恒山区\",\"value\":\"230303\"},{\"label\":\"滴道区\",\"value\":\"230304\"},{\"label\":\"梨树区\",\"value\":\"230305\"},{\"label\":\"城子河区\",\"value\":\"230306\"},{\"label\":\"麻山区\",\"value\":\"230307\"},{\"label\":\"鸡东县\",\"value\":\"230321\"},{\"label\":\"虎林市\",\"value\":\"230381\"},{\"label\":\"密山市\",\"value\":\"230382\"}],[{\"label\":\"向阳区\",\"value\":\"230402\"},{\"label\":\"工农区\",\"value\":\"230403\"},{\"label\":\"南山区\",\"value\":\"230404\"},{\"label\":\"兴安区\",\"value\":\"230405\"},{\"label\":\"东山区\",\"value\":\"230406\"},{\"label\":\"兴山区\",\"value\":\"230407\"},{\"label\":\"萝北县\",\"value\":\"230421\"},{\"label\":\"绥滨县\",\"value\":\"230422\"}],[{\"label\":\"尖山区\",\"value\":\"230502\"},{\"label\":\"岭东区\",\"value\":\"230503\"},{\"label\":\"四方台区\",\"value\":\"230505\"},{\"label\":\"宝山区\",\"value\":\"230506\"},{\"label\":\"集贤县\",\"value\":\"230521\"},{\"label\":\"友谊县\",\"value\":\"230522\"},{\"label\":\"宝清县\",\"value\":\"230523\"},{\"label\":\"饶河县\",\"value\":\"230524\"}],[{\"label\":\"萨尔图区\",\"value\":\"230602\"},{\"label\":\"龙凤区\",\"value\":\"230603\"},{\"label\":\"让胡路区\",\"value\":\"230604\"},{\"label\":\"红岗区\",\"value\":\"230605\"},{\"label\":\"大同区\",\"value\":\"230606\"},{\"label\":\"肇州县\",\"value\":\"230621\"},{\"label\":\"肇源县\",\"value\":\"230622\"},{\"label\":\"林甸县\",\"value\":\"230623\"},{\"label\":\"杜尔伯特蒙古族自治县\",\"value\":\"230624\"},{\"label\":\"大庆高新技术产业开发区\",\"value\":\"230671\"}],[{\"label\":\"伊春区\",\"value\":\"230702\"},{\"label\":\"南岔区\",\"value\":\"230703\"},{\"label\":\"友好区\",\"value\":\"230704\"},{\"label\":\"西林区\",\"value\":\"230705\"},{\"label\":\"翠峦区\",\"value\":\"230706\"},{\"label\":\"新青区\",\"value\":\"230707\"},{\"label\":\"美溪区\",\"value\":\"230708\"},{\"label\":\"金山屯区\",\"value\":\"230709\"},{\"label\":\"五营区\",\"value\":\"230710\"},{\"label\":\"乌马河区\",\"value\":\"230711\"},{\"label\":\"汤旺河区\",\"value\":\"230712\"},{\"label\":\"带岭区\",\"value\":\"230713\"},{\"label\":\"乌伊岭区\",\"value\":\"230714\"},{\"label\":\"红星区\",\"value\":\"230715\"},{\"label\":\"上甘岭区\",\"value\":\"230716\"},{\"label\":\"嘉荫县\",\"value\":\"230722\"},{\"label\":\"铁力市\",\"value\":\"230781\"}],[{\"label\":\"向阳区\",\"value\":\"230803\"},{\"label\":\"前进区\",\"value\":\"230804\"},{\"label\":\"东风区\",\"value\":\"230805\"},{\"label\":\"郊区\",\"value\":\"230811\"},{\"label\":\"桦南县\",\"value\":\"230822\"},{\"label\":\"桦川县\",\"value\":\"230826\"},{\"label\":\"汤原县\",\"value\":\"230828\"},{\"label\":\"同江市\",\"value\":\"230881\"},{\"label\":\"富锦市\",\"value\":\"230882\"},{\"label\":\"抚远市\",\"value\":\"230883\"}],[{\"label\":\"新兴区\",\"value\":\"230902\"},{\"label\":\"桃山区\",\"value\":\"230903\"},{\"label\":\"茄子河区\",\"value\":\"230904\"},{\"label\":\"勃利县\",\"value\":\"230921\"}],[{\"label\":\"东安区\",\"value\":\"231002\"},{\"label\":\"阳明区\",\"value\":\"231003\"},{\"label\":\"爱民区\",\"value\":\"231004\"},{\"label\":\"西安区\",\"value\":\"231005\"},{\"label\":\"林口县\",\"value\":\"231025\"},{\"label\":\"牡丹江经济技术开发区\",\"value\":\"231071\"},{\"label\":\"绥芬河市\",\"value\":\"231081\"},{\"label\":\"海林市\",\"value\":\"231083\"},{\"label\":\"宁安市\",\"value\":\"231084\"},{\"label\":\"穆棱市\",\"value\":\"231085\"},{\"label\":\"东宁市\",\"value\":\"231086\"}],[{\"label\":\"爱辉区\",\"value\":\"231102\"},{\"label\":\"嫩江县\",\"value\":\"231121\"},{\"label\":\"逊克县\",\"value\":\"231123\"},{\"label\":\"孙吴县\",\"value\":\"231124\"},{\"label\":\"北安市\",\"value\":\"231181\"},{\"label\":\"五大连池市\",\"value\":\"231182\"}],[{\"label\":\"北林区\",\"value\":\"231202\"},{\"label\":\"望奎县\",\"value\":\"231221\"},{\"label\":\"兰西县\",\"value\":\"231222\"},{\"label\":\"青冈县\",\"value\":\"231223\"},{\"label\":\"庆安县\",\"value\":\"231224\"},{\"label\":\"明水县\",\"value\":\"231225\"},{\"label\":\"绥棱县\",\"value\":\"231226\"},{\"label\":\"安达市\",\"value\":\"231281\"},{\"label\":\"肇东市\",\"value\":\"231282\"},{\"label\":\"海伦市\",\"value\":\"231283\"}],[{\"label\":\"加格达奇区\",\"value\":\"232701\"},{\"label\":\"松岭区\",\"value\":\"232702\"},{\"label\":\"新林区\",\"value\":\"232703\"},{\"label\":\"呼中区\",\"value\":\"232704\"},{\"label\":\"呼玛县\",\"value\":\"232721\"},{\"label\":\"塔河县\",\"value\":\"232722\"},{\"label\":\"漠河县\",\"value\":\"232723\"}]],[[{\"label\":\"黄浦区\",\"value\":\"310101\"},{\"label\":\"徐汇区\",\"value\":\"310104\"},{\"label\":\"长宁区\",\"value\":\"310105\"},{\"label\":\"静安区\",\"value\":\"310106\"},{\"label\":\"普陀区\",\"value\":\"310107\"},{\"label\":\"虹口区\",\"value\":\"310109\"},{\"label\":\"杨浦区\",\"value\":\"310110\"},{\"label\":\"闵行区\",\"value\":\"310112\"},{\"label\":\"宝山区\",\"value\":\"310113\"},{\"label\":\"嘉定区\",\"value\":\"310114\"},{\"label\":\"浦东新区\",\"value\":\"310115\"},{\"label\":\"金山区\",\"value\":\"310116\"},{\"label\":\"松江区\",\"value\":\"310117\"},{\"label\":\"青浦区\",\"value\":\"310118\"},{\"label\":\"奉贤区\",\"value\":\"310120\"},{\"label\":\"崇明区\",\"value\":\"310151\"}]],[[{\"label\":\"玄武区\",\"value\":\"320102\"},{\"label\":\"秦淮区\",\"value\":\"320104\"},{\"label\":\"建邺区\",\"value\":\"320105\"},{\"label\":\"鼓楼区\",\"value\":\"320106\"},{\"label\":\"浦口区\",\"value\":\"320111\"},{\"label\":\"栖霞区\",\"value\":\"320113\"},{\"label\":\"雨花台区\",\"value\":\"320114\"},{\"label\":\"江宁区\",\"value\":\"320115\"},{\"label\":\"六合区\",\"value\":\"320116\"},{\"label\":\"溧水区\",\"value\":\"320117\"},{\"label\":\"高淳区\",\"value\":\"320118\"}],[{\"label\":\"锡山区\",\"value\":\"320205\"},{\"label\":\"惠山区\",\"value\":\"320206\"},{\"label\":\"滨湖区\",\"value\":\"320211\"},{\"label\":\"梁溪区\",\"value\":\"320213\"},{\"label\":\"新吴区\",\"value\":\"320214\"},{\"label\":\"江阴市\",\"value\":\"320281\"},{\"label\":\"宜兴市\",\"value\":\"320282\"}],[{\"label\":\"鼓楼区\",\"value\":\"320302\"},{\"label\":\"云龙区\",\"value\":\"320303\"},{\"label\":\"贾汪区\",\"value\":\"320305\"},{\"label\":\"泉山区\",\"value\":\"320311\"},{\"label\":\"铜山区\",\"value\":\"320312\"},{\"label\":\"丰县\",\"value\":\"320321\"},{\"label\":\"沛县\",\"value\":\"320322\"},{\"label\":\"睢宁县\",\"value\":\"320324\"},{\"label\":\"徐州经济技术开发区\",\"value\":\"320371\"},{\"label\":\"新沂市\",\"value\":\"320381\"},{\"label\":\"邳州市\",\"value\":\"320382\"}],[{\"label\":\"天宁区\",\"value\":\"320402\"},{\"label\":\"钟楼区\",\"value\":\"320404\"},{\"label\":\"新北区\",\"value\":\"320411\"},{\"label\":\"武进区\",\"value\":\"320412\"},{\"label\":\"金坛区\",\"value\":\"320413\"},{\"label\":\"溧阳市\",\"value\":\"320481\"}],[{\"label\":\"虎丘区\",\"value\":\"320505\"},{\"label\":\"吴中区\",\"value\":\"320506\"},{\"label\":\"相城区\",\"value\":\"320507\"},{\"label\":\"姑苏区\",\"value\":\"320508\"},{\"label\":\"吴江区\",\"value\":\"320509\"},{\"label\":\"苏州工业园区\",\"value\":\"320571\"},{\"label\":\"常熟市\",\"value\":\"320581\"},{\"label\":\"张家港市\",\"value\":\"320582\"},{\"label\":\"昆山市\",\"value\":\"320583\"},{\"label\":\"太仓市\",\"value\":\"320585\"}],[{\"label\":\"崇川区\",\"value\":\"320602\"},{\"label\":\"港闸区\",\"value\":\"320611\"},{\"label\":\"通州区\",\"value\":\"320612\"},{\"label\":\"海安县\",\"value\":\"320621\"},{\"label\":\"如东县\",\"value\":\"320623\"},{\"label\":\"南通经济技术开发区\",\"value\":\"320671\"},{\"label\":\"启东市\",\"value\":\"320681\"},{\"label\":\"如皋市\",\"value\":\"320682\"},{\"label\":\"海门市\",\"value\":\"320684\"}],[{\"label\":\"连云区\",\"value\":\"320703\"},{\"label\":\"海州区\",\"value\":\"320706\"},{\"label\":\"赣榆区\",\"value\":\"320707\"},{\"label\":\"东海县\",\"value\":\"320722\"},{\"label\":\"灌云县\",\"value\":\"320723\"},{\"label\":\"灌南县\",\"value\":\"320724\"},{\"label\":\"连云港经济技术开发区\",\"value\":\"320771\"},{\"label\":\"连云港高新技术产业开发区\",\"value\":\"320772\"}],[{\"label\":\"淮安区\",\"value\":\"320803\"},{\"label\":\"淮阴区\",\"value\":\"320804\"},{\"label\":\"清江浦区\",\"value\":\"320812\"},{\"label\":\"洪泽区\",\"value\":\"320813\"},{\"label\":\"涟水县\",\"value\":\"320826\"},{\"label\":\"盱眙县\",\"value\":\"320830\"},{\"label\":\"金湖县\",\"value\":\"320831\"},{\"label\":\"淮安经济技术开发区\",\"value\":\"320871\"}],[{\"label\":\"亭湖区\",\"value\":\"320902\"},{\"label\":\"盐都区\",\"value\":\"320903\"},{\"label\":\"大丰区\",\"value\":\"320904\"},{\"label\":\"响水县\",\"value\":\"320921\"},{\"label\":\"滨海县\",\"value\":\"320922\"},{\"label\":\"阜宁县\",\"value\":\"320923\"},{\"label\":\"射阳县\",\"value\":\"320924\"},{\"label\":\"建湖县\",\"value\":\"320925\"},{\"label\":\"盐城经济技术开发区\",\"value\":\"320971\"},{\"label\":\"东台市\",\"value\":\"320981\"}],[{\"label\":\"广陵区\",\"value\":\"321002\"},{\"label\":\"邗江区\",\"value\":\"321003\"},{\"label\":\"江都区\",\"value\":\"321012\"},{\"label\":\"宝应县\",\"value\":\"321023\"},{\"label\":\"扬州经济技术开发区\",\"value\":\"321071\"},{\"label\":\"仪征市\",\"value\":\"321081\"},{\"label\":\"高邮市\",\"value\":\"321084\"}],[{\"label\":\"京口区\",\"value\":\"321102\"},{\"label\":\"润州区\",\"value\":\"321111\"},{\"label\":\"丹徒区\",\"value\":\"321112\"},{\"label\":\"镇江新区\",\"value\":\"321171\"},{\"label\":\"丹阳市\",\"value\":\"321181\"},{\"label\":\"扬中市\",\"value\":\"321182\"},{\"label\":\"句容市\",\"value\":\"321183\"}],[{\"label\":\"海陵区\",\"value\":\"321202\"},{\"label\":\"高港区\",\"value\":\"321203\"},{\"label\":\"姜堰区\",\"value\":\"321204\"},{\"label\":\"泰州医药高新技术产业开发区\",\"value\":\"321271\"},{\"label\":\"兴化市\",\"value\":\"321281\"},{\"label\":\"靖江市\",\"value\":\"321282\"},{\"label\":\"泰兴市\",\"value\":\"321283\"}],[{\"label\":\"宿城区\",\"value\":\"321302\"},{\"label\":\"宿豫区\",\"value\":\"321311\"},{\"label\":\"沭阳县\",\"value\":\"321322\"},{\"label\":\"泗阳县\",\"value\":\"321323\"},{\"label\":\"泗洪县\",\"value\":\"321324\"},{\"label\":\"宿迁经济技术开发区\",\"value\":\"321371\"}]],[[{\"label\":\"上城区\",\"value\":\"330102\"},{\"label\":\"下城区\",\"value\":\"330103\"},{\"label\":\"江干区\",\"value\":\"330104\"},{\"label\":\"拱墅区\",\"value\":\"330105\"},{\"label\":\"西湖区\",\"value\":\"330106\"},{\"label\":\"滨江区\",\"value\":\"330108\"},{\"label\":\"萧山区\",\"value\":\"330109\"},{\"label\":\"余杭区\",\"value\":\"330110\"},{\"label\":\"富阳区\",\"value\":\"330111\"},{\"label\":\"临安区\",\"value\":\"330112\"},{\"label\":\"桐庐县\",\"value\":\"330122\"},{\"label\":\"淳安县\",\"value\":\"330127\"},{\"label\":\"建德市\",\"value\":\"330182\"}],[{\"label\":\"海曙区\",\"value\":\"330203\"},{\"label\":\"江北区\",\"value\":\"330205\"},{\"label\":\"北仑区\",\"value\":\"330206\"},{\"label\":\"镇海区\",\"value\":\"330211\"},{\"label\":\"鄞州区\",\"value\":\"330212\"},{\"label\":\"奉化区\",\"value\":\"330213\"},{\"label\":\"象山县\",\"value\":\"330225\"},{\"label\":\"宁海县\",\"value\":\"330226\"},{\"label\":\"余姚市\",\"value\":\"330281\"},{\"label\":\"慈溪市\",\"value\":\"330282\"}],[{\"label\":\"鹿城区\",\"value\":\"330302\"},{\"label\":\"龙湾区\",\"value\":\"330303\"},{\"label\":\"瓯海区\",\"value\":\"330304\"},{\"label\":\"洞头区\",\"value\":\"330305\"},{\"label\":\"永嘉县\",\"value\":\"330324\"},{\"label\":\"平阳县\",\"value\":\"330326\"},{\"label\":\"苍南县\",\"value\":\"330327\"},{\"label\":\"文成县\",\"value\":\"330328\"},{\"label\":\"泰顺县\",\"value\":\"330329\"},{\"label\":\"温州经济技术开发区\",\"value\":\"330371\"},{\"label\":\"瑞安市\",\"value\":\"330381\"},{\"label\":\"乐清市\",\"value\":\"330382\"}],[{\"label\":\"南湖区\",\"value\":\"330402\"},{\"label\":\"秀洲区\",\"value\":\"330411\"},{\"label\":\"嘉善县\",\"value\":\"330421\"},{\"label\":\"海盐县\",\"value\":\"330424\"},{\"label\":\"海宁市\",\"value\":\"330481\"},{\"label\":\"平湖市\",\"value\":\"330482\"},{\"label\":\"桐乡市\",\"value\":\"330483\"}],[{\"label\":\"吴兴区\",\"value\":\"330502\"},{\"label\":\"南浔区\",\"value\":\"330503\"},{\"label\":\"德清县\",\"value\":\"330521\"},{\"label\":\"长兴县\",\"value\":\"330522\"},{\"label\":\"安吉县\",\"value\":\"330523\"}],[{\"label\":\"越城区\",\"value\":\"330602\"},{\"label\":\"柯桥区\",\"value\":\"330603\"},{\"label\":\"上虞区\",\"value\":\"330604\"},{\"label\":\"新昌县\",\"value\":\"330624\"},{\"label\":\"诸暨市\",\"value\":\"330681\"},{\"label\":\"嵊州市\",\"value\":\"330683\"}],[{\"label\":\"婺城区\",\"value\":\"330702\"},{\"label\":\"金东区\",\"value\":\"330703\"},{\"label\":\"武义县\",\"value\":\"330723\"},{\"label\":\"浦江县\",\"value\":\"330726\"},{\"label\":\"磐安县\",\"value\":\"330727\"},{\"label\":\"兰溪市\",\"value\":\"330781\"},{\"label\":\"义乌市\",\"value\":\"330782\"},{\"label\":\"东阳市\",\"value\":\"330783\"},{\"label\":\"永康市\",\"value\":\"330784\"}],[{\"label\":\"柯城区\",\"value\":\"330802\"},{\"label\":\"衢江区\",\"value\":\"330803\"},{\"label\":\"常山县\",\"value\":\"330822\"},{\"label\":\"开化县\",\"value\":\"330824\"},{\"label\":\"龙游县\",\"value\":\"330825\"},{\"label\":\"江山市\",\"value\":\"330881\"}],[{\"label\":\"定海区\",\"value\":\"330902\"},{\"label\":\"普陀区\",\"value\":\"330903\"},{\"label\":\"岱山县\",\"value\":\"330921\"},{\"label\":\"嵊泗县\",\"value\":\"330922\"}],[{\"label\":\"椒江区\",\"value\":\"331002\"},{\"label\":\"黄岩区\",\"value\":\"331003\"},{\"label\":\"路桥区\",\"value\":\"331004\"},{\"label\":\"三门县\",\"value\":\"331022\"},{\"label\":\"天台县\",\"value\":\"331023\"},{\"label\":\"仙居县\",\"value\":\"331024\"},{\"label\":\"温岭市\",\"value\":\"331081\"},{\"label\":\"临海市\",\"value\":\"331082\"},{\"label\":\"玉环市\",\"value\":\"331083\"}],[{\"label\":\"莲都区\",\"value\":\"331102\"},{\"label\":\"青田县\",\"value\":\"331121\"},{\"label\":\"缙云县\",\"value\":\"331122\"},{\"label\":\"遂昌县\",\"value\":\"331123\"},{\"label\":\"松阳县\",\"value\":\"331124\"},{\"label\":\"云和县\",\"value\":\"331125\"},{\"label\":\"庆元县\",\"value\":\"331126\"},{\"label\":\"景宁畲族自治县\",\"value\":\"331127\"},{\"label\":\"龙泉市\",\"value\":\"331181\"}]],[[{\"label\":\"瑶海区\",\"value\":\"340102\"},{\"label\":\"庐阳区\",\"value\":\"340103\"},{\"label\":\"蜀山区\",\"value\":\"340104\"},{\"label\":\"包河区\",\"value\":\"340111\"},{\"label\":\"长丰县\",\"value\":\"340121\"},{\"label\":\"肥东县\",\"value\":\"340122\"},{\"label\":\"肥西县\",\"value\":\"340123\"},{\"label\":\"庐江县\",\"value\":\"340124\"},{\"label\":\"合肥高新技术产业开发区\",\"value\":\"340171\"},{\"label\":\"合肥经济技术开发区\",\"value\":\"340172\"},{\"label\":\"合肥新站高新技术产业开发区\",\"value\":\"340173\"},{\"label\":\"巢湖市\",\"value\":\"340181\"}],[{\"label\":\"镜湖区\",\"value\":\"340202\"},{\"label\":\"弋江区\",\"value\":\"340203\"},{\"label\":\"鸠江区\",\"value\":\"340207\"},{\"label\":\"三山区\",\"value\":\"340208\"},{\"label\":\"芜湖县\",\"value\":\"340221\"},{\"label\":\"繁昌县\",\"value\":\"340222\"},{\"label\":\"南陵县\",\"value\":\"340223\"},{\"label\":\"无为县\",\"value\":\"340225\"},{\"label\":\"芜湖经济技术开发区\",\"value\":\"340271\"},{\"label\":\"安徽芜湖长江大桥经济开发区\",\"value\":\"340272\"}],[{\"label\":\"龙子湖区\",\"value\":\"340302\"},{\"label\":\"蚌山区\",\"value\":\"340303\"},{\"label\":\"禹会区\",\"value\":\"340304\"},{\"label\":\"淮上区\",\"value\":\"340311\"},{\"label\":\"怀远县\",\"value\":\"340321\"},{\"label\":\"五河县\",\"value\":\"340322\"},{\"label\":\"固镇县\",\"value\":\"340323\"},{\"label\":\"蚌埠市高新技术开发区\",\"value\":\"340371\"},{\"label\":\"蚌埠市经济开发区\",\"value\":\"340372\"}],[{\"label\":\"大通区\",\"value\":\"340402\"},{\"label\":\"田家庵区\",\"value\":\"340403\"},{\"label\":\"谢家集区\",\"value\":\"340404\"},{\"label\":\"八公山区\",\"value\":\"340405\"},{\"label\":\"潘集区\",\"value\":\"340406\"},{\"label\":\"凤台县\",\"value\":\"340421\"},{\"label\":\"寿县\",\"value\":\"340422\"}],[{\"label\":\"花山区\",\"value\":\"340503\"},{\"label\":\"雨山区\",\"value\":\"340504\"},{\"label\":\"博望区\",\"value\":\"340506\"},{\"label\":\"当涂县\",\"value\":\"340521\"},{\"label\":\"含山县\",\"value\":\"340522\"},{\"label\":\"和县\",\"value\":\"340523\"}],[{\"label\":\"杜集区\",\"value\":\"340602\"},{\"label\":\"相山区\",\"value\":\"340603\"},{\"label\":\"烈山区\",\"value\":\"340604\"},{\"label\":\"濉溪县\",\"value\":\"340621\"}],[{\"label\":\"铜官区\",\"value\":\"340705\"},{\"label\":\"义安区\",\"value\":\"340706\"},{\"label\":\"郊区\",\"value\":\"340711\"},{\"label\":\"枞阳县\",\"value\":\"340722\"}],[{\"label\":\"迎江区\",\"value\":\"340802\"},{\"label\":\"大观区\",\"value\":\"340803\"},{\"label\":\"宜秀区\",\"value\":\"340811\"},{\"label\":\"怀宁县\",\"value\":\"340822\"},{\"label\":\"潜山县\",\"value\":\"340824\"},{\"label\":\"太湖县\",\"value\":\"340825\"},{\"label\":\"宿松县\",\"value\":\"340826\"},{\"label\":\"望江县\",\"value\":\"340827\"},{\"label\":\"岳西县\",\"value\":\"340828\"},{\"label\":\"安徽安庆经济开发区\",\"value\":\"340871\"},{\"label\":\"桐城市\",\"value\":\"340881\"}],[{\"label\":\"屯溪区\",\"value\":\"341002\"},{\"label\":\"黄山区\",\"value\":\"341003\"},{\"label\":\"徽州区\",\"value\":\"341004\"},{\"label\":\"歙县\",\"value\":\"341021\"},{\"label\":\"休宁县\",\"value\":\"341022\"},{\"label\":\"黟县\",\"value\":\"341023\"},{\"label\":\"祁门县\",\"value\":\"341024\"}],[{\"label\":\"琅琊区\",\"value\":\"341102\"},{\"label\":\"南谯区\",\"value\":\"341103\"},{\"label\":\"来安县\",\"value\":\"341122\"},{\"label\":\"全椒县\",\"value\":\"341124\"},{\"label\":\"定远县\",\"value\":\"341125\"},{\"label\":\"凤阳县\",\"value\":\"341126\"},{\"label\":\"苏滁现代产业园\",\"value\":\"341171\"},{\"label\":\"滁州经济技术开发区\",\"value\":\"341172\"},{\"label\":\"天长市\",\"value\":\"341181\"},{\"label\":\"明光市\",\"value\":\"341182\"}],[{\"label\":\"颍州区\",\"value\":\"341202\"},{\"label\":\"颍东区\",\"value\":\"341203\"},{\"label\":\"颍泉区\",\"value\":\"341204\"},{\"label\":\"临泉县\",\"value\":\"341221\"},{\"label\":\"太和县\",\"value\":\"341222\"},{\"label\":\"阜南县\",\"value\":\"341225\"},{\"label\":\"颍上县\",\"value\":\"341226\"},{\"label\":\"阜阳合肥现代产业园区\",\"value\":\"341271\"},{\"label\":\"阜阳经济技术开发区\",\"value\":\"341272\"},{\"label\":\"界首市\",\"value\":\"341282\"}],[{\"label\":\"埇桥区\",\"value\":\"341302\"},{\"label\":\"砀山县\",\"value\":\"341321\"},{\"label\":\"萧县\",\"value\":\"341322\"},{\"label\":\"灵璧县\",\"value\":\"341323\"},{\"label\":\"泗县\",\"value\":\"341324\"},{\"label\":\"宿州马鞍山现代产业园区\",\"value\":\"341371\"},{\"label\":\"宿州经济技术开发区\",\"value\":\"341372\"}],[{\"label\":\"金安区\",\"value\":\"341502\"},{\"label\":\"裕安区\",\"value\":\"341503\"},{\"label\":\"叶集区\",\"value\":\"341504\"},{\"label\":\"霍邱县\",\"value\":\"341522\"},{\"label\":\"舒城县\",\"value\":\"341523\"},{\"label\":\"金寨县\",\"value\":\"341524\"},{\"label\":\"霍山县\",\"value\":\"341525\"}],[{\"label\":\"谯城区\",\"value\":\"341602\"},{\"label\":\"涡阳县\",\"value\":\"341621\"},{\"label\":\"蒙城县\",\"value\":\"341622\"},{\"label\":\"利辛县\",\"value\":\"341623\"}],[{\"label\":\"贵池区\",\"value\":\"341702\"},{\"label\":\"东至县\",\"value\":\"341721\"},{\"label\":\"石台县\",\"value\":\"341722\"},{\"label\":\"青阳县\",\"value\":\"341723\"}],[{\"label\":\"宣州区\",\"value\":\"341802\"},{\"label\":\"郎溪县\",\"value\":\"341821\"},{\"label\":\"广德县\",\"value\":\"341822\"},{\"label\":\"泾县\",\"value\":\"341823\"},{\"label\":\"绩溪县\",\"value\":\"341824\"},{\"label\":\"旌德县\",\"value\":\"341825\"},{\"label\":\"宣城市经济开发区\",\"value\":\"341871\"},{\"label\":\"宁国市\",\"value\":\"341881\"}]],[[{\"label\":\"鼓楼区\",\"value\":\"350102\"},{\"label\":\"台江区\",\"value\":\"350103\"},{\"label\":\"仓山区\",\"value\":\"350104\"},{\"label\":\"马尾区\",\"value\":\"350105\"},{\"label\":\"晋安区\",\"value\":\"350111\"},{\"label\":\"闽侯县\",\"value\":\"350121\"},{\"label\":\"连江县\",\"value\":\"350122\"},{\"label\":\"罗源县\",\"value\":\"350123\"},{\"label\":\"闽清县\",\"value\":\"350124\"},{\"label\":\"永泰县\",\"value\":\"350125\"},{\"label\":\"平潭县\",\"value\":\"350128\"},{\"label\":\"福清市\",\"value\":\"350181\"},{\"label\":\"长乐市\",\"value\":\"350182\"}],[{\"label\":\"思明区\",\"value\":\"350203\"},{\"label\":\"海沧区\",\"value\":\"350205\"},{\"label\":\"湖里区\",\"value\":\"350206\"},{\"label\":\"集美区\",\"value\":\"350211\"},{\"label\":\"同安区\",\"value\":\"350212\"},{\"label\":\"翔安区\",\"value\":\"350213\"}],[{\"label\":\"城厢区\",\"value\":\"350302\"},{\"label\":\"涵江区\",\"value\":\"350303\"},{\"label\":\"荔城区\",\"value\":\"350304\"},{\"label\":\"秀屿区\",\"value\":\"350305\"},{\"label\":\"仙游县\",\"value\":\"350322\"}],[{\"label\":\"梅列区\",\"value\":\"350402\"},{\"label\":\"三元区\",\"value\":\"350403\"},{\"label\":\"明溪县\",\"value\":\"350421\"},{\"label\":\"清流县\",\"value\":\"350423\"},{\"label\":\"宁化县\",\"value\":\"350424\"},{\"label\":\"大田县\",\"value\":\"350425\"},{\"label\":\"尤溪县\",\"value\":\"350426\"},{\"label\":\"沙县\",\"value\":\"350427\"},{\"label\":\"将乐县\",\"value\":\"350428\"},{\"label\":\"泰宁县\",\"value\":\"350429\"},{\"label\":\"建宁县\",\"value\":\"350430\"},{\"label\":\"永安市\",\"value\":\"350481\"}],[{\"label\":\"鲤城区\",\"value\":\"350502\"},{\"label\":\"丰泽区\",\"value\":\"350503\"},{\"label\":\"洛江区\",\"value\":\"350504\"},{\"label\":\"泉港区\",\"value\":\"350505\"},{\"label\":\"惠安县\",\"value\":\"350521\"},{\"label\":\"安溪县\",\"value\":\"350524\"},{\"label\":\"永春县\",\"value\":\"350525\"},{\"label\":\"德化县\",\"value\":\"350526\"},{\"label\":\"金门县\",\"value\":\"350527\"},{\"label\":\"石狮市\",\"value\":\"350581\"},{\"label\":\"晋江市\",\"value\":\"350582\"},{\"label\":\"南安市\",\"value\":\"350583\"}],[{\"label\":\"芗城区\",\"value\":\"350602\"},{\"label\":\"龙文区\",\"value\":\"350603\"},{\"label\":\"云霄县\",\"value\":\"350622\"},{\"label\":\"漳浦县\",\"value\":\"350623\"},{\"label\":\"诏安县\",\"value\":\"350624\"},{\"label\":\"长泰县\",\"value\":\"350625\"},{\"label\":\"东山县\",\"value\":\"350626\"},{\"label\":\"南靖县\",\"value\":\"350627\"},{\"label\":\"平和县\",\"value\":\"350628\"},{\"label\":\"华安县\",\"value\":\"350629\"},{\"label\":\"龙海市\",\"value\":\"350681\"}],[{\"label\":\"延平区\",\"value\":\"350702\"},{\"label\":\"建阳区\",\"value\":\"350703\"},{\"label\":\"顺昌县\",\"value\":\"350721\"},{\"label\":\"浦城县\",\"value\":\"350722\"},{\"label\":\"光泽县\",\"value\":\"350723\"},{\"label\":\"松溪县\",\"value\":\"350724\"},{\"label\":\"政和县\",\"value\":\"350725\"},{\"label\":\"邵武市\",\"value\":\"350781\"},{\"label\":\"武夷山市\",\"value\":\"350782\"},{\"label\":\"建瓯市\",\"value\":\"350783\"}],[{\"label\":\"新罗区\",\"value\":\"350802\"},{\"label\":\"永定区\",\"value\":\"350803\"},{\"label\":\"长汀县\",\"value\":\"350821\"},{\"label\":\"上杭县\",\"value\":\"350823\"},{\"label\":\"武平县\",\"value\":\"350824\"},{\"label\":\"连城县\",\"value\":\"350825\"},{\"label\":\"漳平市\",\"value\":\"350881\"}],[{\"label\":\"蕉城区\",\"value\":\"350902\"},{\"label\":\"霞浦县\",\"value\":\"350921\"},{\"label\":\"古田县\",\"value\":\"350922\"},{\"label\":\"屏南县\",\"value\":\"350923\"},{\"label\":\"寿宁县\",\"value\":\"350924\"},{\"label\":\"周宁县\",\"value\":\"350925\"},{\"label\":\"柘荣县\",\"value\":\"350926\"},{\"label\":\"福安市\",\"value\":\"350981\"},{\"label\":\"福鼎市\",\"value\":\"350982\"}]],[[{\"label\":\"东湖区\",\"value\":\"360102\"},{\"label\":\"西湖区\",\"value\":\"360103\"},{\"label\":\"青云谱区\",\"value\":\"360104\"},{\"label\":\"湾里区\",\"value\":\"360105\"},{\"label\":\"青山湖区\",\"value\":\"360111\"},{\"label\":\"新建区\",\"value\":\"360112\"},{\"label\":\"南昌县\",\"value\":\"360121\"},{\"label\":\"安义县\",\"value\":\"360123\"},{\"label\":\"进贤县\",\"value\":\"360124\"}],[{\"label\":\"昌江区\",\"value\":\"360202\"},{\"label\":\"珠山区\",\"value\":\"360203\"},{\"label\":\"浮梁县\",\"value\":\"360222\"},{\"label\":\"乐平市\",\"value\":\"360281\"}],[{\"label\":\"安源区\",\"value\":\"360302\"},{\"label\":\"湘东区\",\"value\":\"360313\"},{\"label\":\"莲花县\",\"value\":\"360321\"},{\"label\":\"上栗县\",\"value\":\"360322\"},{\"label\":\"芦溪县\",\"value\":\"360323\"}],[{\"label\":\"濂溪区\",\"value\":\"360402\"},{\"label\":\"浔阳区\",\"value\":\"360403\"},{\"label\":\"柴桑区\",\"value\":\"360404\"},{\"label\":\"武宁县\",\"value\":\"360423\"},{\"label\":\"修水县\",\"value\":\"360424\"},{\"label\":\"永修县\",\"value\":\"360425\"},{\"label\":\"德安县\",\"value\":\"360426\"},{\"label\":\"都昌县\",\"value\":\"360428\"},{\"label\":\"湖口县\",\"value\":\"360429\"},{\"label\":\"彭泽县\",\"value\":\"360430\"},{\"label\":\"瑞昌市\",\"value\":\"360481\"},{\"label\":\"共青城市\",\"value\":\"360482\"},{\"label\":\"庐山市\",\"value\":\"360483\"}],[{\"label\":\"渝水区\",\"value\":\"360502\"},{\"label\":\"分宜县\",\"value\":\"360521\"}],[{\"label\":\"月湖区\",\"value\":\"360602\"},{\"label\":\"余江县\",\"value\":\"360622\"},{\"label\":\"贵溪市\",\"value\":\"360681\"}],[{\"label\":\"章贡区\",\"value\":\"360702\"},{\"label\":\"南康区\",\"value\":\"360703\"},{\"label\":\"赣县区\",\"value\":\"360704\"},{\"label\":\"信丰县\",\"value\":\"360722\"},{\"label\":\"大余县\",\"value\":\"360723\"},{\"label\":\"上犹县\",\"value\":\"360724\"},{\"label\":\"崇义县\",\"value\":\"360725\"},{\"label\":\"安远县\",\"value\":\"360726\"},{\"label\":\"龙南县\",\"value\":\"360727\"},{\"label\":\"定南县\",\"value\":\"360728\"},{\"label\":\"全南县\",\"value\":\"360729\"},{\"label\":\"宁都县\",\"value\":\"360730\"},{\"label\":\"于都县\",\"value\":\"360731\"},{\"label\":\"兴国县\",\"value\":\"360732\"},{\"label\":\"会昌县\",\"value\":\"360733\"},{\"label\":\"寻乌县\",\"value\":\"360734\"},{\"label\":\"石城县\",\"value\":\"360735\"},{\"label\":\"瑞金市\",\"value\":\"360781\"}],[{\"label\":\"吉州区\",\"value\":\"360802\"},{\"label\":\"青原区\",\"value\":\"360803\"},{\"label\":\"吉安县\",\"value\":\"360821\"},{\"label\":\"吉水县\",\"value\":\"360822\"},{\"label\":\"峡江县\",\"value\":\"360823\"},{\"label\":\"新干县\",\"value\":\"360824\"},{\"label\":\"永丰县\",\"value\":\"360825\"},{\"label\":\"泰和县\",\"value\":\"360826\"},{\"label\":\"遂川县\",\"value\":\"360827\"},{\"label\":\"万安县\",\"value\":\"360828\"},{\"label\":\"安福县\",\"value\":\"360829\"},{\"label\":\"永新县\",\"value\":\"360830\"},{\"label\":\"井冈山市\",\"value\":\"360881\"}],[{\"label\":\"袁州区\",\"value\":\"360902\"},{\"label\":\"奉新县\",\"value\":\"360921\"},{\"label\":\"万载县\",\"value\":\"360922\"},{\"label\":\"上高县\",\"value\":\"360923\"},{\"label\":\"宜丰县\",\"value\":\"360924\"},{\"label\":\"靖安县\",\"value\":\"360925\"},{\"label\":\"铜鼓县\",\"value\":\"360926\"},{\"label\":\"丰城市\",\"value\":\"360981\"},{\"label\":\"樟树市\",\"value\":\"360982\"},{\"label\":\"高安市\",\"value\":\"360983\"}],[{\"label\":\"临川区\",\"value\":\"361002\"},{\"label\":\"东乡区\",\"value\":\"361003\"},{\"label\":\"南城县\",\"value\":\"361021\"},{\"label\":\"黎川县\",\"value\":\"361022\"},{\"label\":\"南丰县\",\"value\":\"361023\"},{\"label\":\"崇仁县\",\"value\":\"361024\"},{\"label\":\"乐安县\",\"value\":\"361025\"},{\"label\":\"宜黄县\",\"value\":\"361026\"},{\"label\":\"金溪县\",\"value\":\"361027\"},{\"label\":\"资溪县\",\"value\":\"361028\"},{\"label\":\"广昌县\",\"value\":\"361030\"}],[{\"label\":\"信州区\",\"value\":\"361102\"},{\"label\":\"广丰区\",\"value\":\"361103\"},{\"label\":\"上饶县\",\"value\":\"361121\"},{\"label\":\"玉山县\",\"value\":\"361123\"},{\"label\":\"铅山县\",\"value\":\"361124\"},{\"label\":\"横峰县\",\"value\":\"361125\"},{\"label\":\"弋阳县\",\"value\":\"361126\"},{\"label\":\"余干县\",\"value\":\"361127\"},{\"label\":\"鄱阳县\",\"value\":\"361128\"},{\"label\":\"万年县\",\"value\":\"361129\"},{\"label\":\"婺源县\",\"value\":\"361130\"},{\"label\":\"德兴市\",\"value\":\"361181\"}]],[[{\"label\":\"历下区\",\"value\":\"370102\"},{\"label\":\"市中区\",\"value\":\"370103\"},{\"label\":\"槐荫区\",\"value\":\"370104\"},{\"label\":\"天桥区\",\"value\":\"370105\"},{\"label\":\"历城区\",\"value\":\"370112\"},{\"label\":\"长清区\",\"value\":\"370113\"},{\"label\":\"章丘区\",\"value\":\"370114\"},{\"label\":\"平阴县\",\"value\":\"370124\"},{\"label\":\"济阳县\",\"value\":\"370125\"},{\"label\":\"商河县\",\"value\":\"370126\"},{\"label\":\"济南高新技术产业开发区\",\"value\":\"370171\"}],[{\"label\":\"市南区\",\"value\":\"370202\"},{\"label\":\"市北区\",\"value\":\"370203\"},{\"label\":\"黄岛区\",\"value\":\"370211\"},{\"label\":\"崂山区\",\"value\":\"370212\"},{\"label\":\"李沧区\",\"value\":\"370213\"},{\"label\":\"城阳区\",\"value\":\"370214\"},{\"label\":\"即墨区\",\"value\":\"370215\"},{\"label\":\"青岛高新技术产业开发区\",\"value\":\"370271\"},{\"label\":\"胶州市\",\"value\":\"370281\"},{\"label\":\"平度市\",\"value\":\"370283\"},{\"label\":\"莱西市\",\"value\":\"370285\"}],[{\"label\":\"淄川区\",\"value\":\"370302\"},{\"label\":\"张店区\",\"value\":\"370303\"},{\"label\":\"博山区\",\"value\":\"370304\"},{\"label\":\"临淄区\",\"value\":\"370305\"},{\"label\":\"周村区\",\"value\":\"370306\"},{\"label\":\"桓台县\",\"value\":\"370321\"},{\"label\":\"高青县\",\"value\":\"370322\"},{\"label\":\"沂源县\",\"value\":\"370323\"}],[{\"label\":\"市中区\",\"value\":\"370402\"},{\"label\":\"薛城区\",\"value\":\"370403\"},{\"label\":\"峄城区\",\"value\":\"370404\"},{\"label\":\"台儿庄区\",\"value\":\"370405\"},{\"label\":\"山亭区\",\"value\":\"370406\"},{\"label\":\"滕州市\",\"value\":\"370481\"}],[{\"label\":\"东营区\",\"value\":\"370502\"},{\"label\":\"河口区\",\"value\":\"370503\"},{\"label\":\"垦利区\",\"value\":\"370505\"},{\"label\":\"利津县\",\"value\":\"370522\"},{\"label\":\"广饶县\",\"value\":\"370523\"},{\"label\":\"东营经济技术开发区\",\"value\":\"370571\"},{\"label\":\"东营港经济开发区\",\"value\":\"370572\"}],[{\"label\":\"芝罘区\",\"value\":\"370602\"},{\"label\":\"福山区\",\"value\":\"370611\"},{\"label\":\"牟平区\",\"value\":\"370612\"},{\"label\":\"莱山区\",\"value\":\"370613\"},{\"label\":\"长岛县\",\"value\":\"370634\"},{\"label\":\"烟台高新技术产业开发区\",\"value\":\"370671\"},{\"label\":\"烟台经济技术开发区\",\"value\":\"370672\"},{\"label\":\"龙口市\",\"value\":\"370681\"},{\"label\":\"莱阳市\",\"value\":\"370682\"},{\"label\":\"莱州市\",\"value\":\"370683\"},{\"label\":\"蓬莱市\",\"value\":\"370684\"},{\"label\":\"招远市\",\"value\":\"370685\"},{\"label\":\"栖霞市\",\"value\":\"370686\"},{\"label\":\"海阳市\",\"value\":\"370687\"}],[{\"label\":\"潍城区\",\"value\":\"370702\"},{\"label\":\"寒亭区\",\"value\":\"370703\"},{\"label\":\"坊子区\",\"value\":\"370704\"},{\"label\":\"奎文区\",\"value\":\"370705\"},{\"label\":\"临朐县\",\"value\":\"370724\"},{\"label\":\"昌乐县\",\"value\":\"370725\"},{\"label\":\"潍坊滨海经济技术开发区\",\"value\":\"370772\"},{\"label\":\"青州市\",\"value\":\"370781\"},{\"label\":\"诸城市\",\"value\":\"370782\"},{\"label\":\"寿光市\",\"value\":\"370783\"},{\"label\":\"安丘市\",\"value\":\"370784\"},{\"label\":\"高密市\",\"value\":\"370785\"},{\"label\":\"昌邑市\",\"value\":\"370786\"}],[{\"label\":\"任城区\",\"value\":\"370811\"},{\"label\":\"兖州区\",\"value\":\"370812\"},{\"label\":\"微山县\",\"value\":\"370826\"},{\"label\":\"鱼台县\",\"value\":\"370827\"},{\"label\":\"金乡县\",\"value\":\"370828\"},{\"label\":\"嘉祥县\",\"value\":\"370829\"},{\"label\":\"汶上县\",\"value\":\"370830\"},{\"label\":\"泗水县\",\"value\":\"370831\"},{\"label\":\"梁山县\",\"value\":\"370832\"},{\"label\":\"济宁高新技术产业开发区\",\"value\":\"370871\"},{\"label\":\"曲阜市\",\"value\":\"370881\"},{\"label\":\"邹城市\",\"value\":\"370883\"}],[{\"label\":\"泰山区\",\"value\":\"370902\"},{\"label\":\"岱岳区\",\"value\":\"370911\"},{\"label\":\"宁阳县\",\"value\":\"370921\"},{\"label\":\"东平县\",\"value\":\"370923\"},{\"label\":\"新泰市\",\"value\":\"370982\"},{\"label\":\"肥城市\",\"value\":\"370983\"}],[{\"label\":\"环翠区\",\"value\":\"371002\"},{\"label\":\"文登区\",\"value\":\"371003\"},{\"label\":\"威海火炬高技术产业开发区\",\"value\":\"371071\"},{\"label\":\"威海经济技术开发区\",\"value\":\"371072\"},{\"label\":\"威海临港经济技术开发区\",\"value\":\"371073\"},{\"label\":\"荣成市\",\"value\":\"371082\"},{\"label\":\"乳山市\",\"value\":\"371083\"}],[{\"label\":\"东港区\",\"value\":\"371102\"},{\"label\":\"岚山区\",\"value\":\"371103\"},{\"label\":\"五莲县\",\"value\":\"371121\"},{\"label\":\"莒县\",\"value\":\"371122\"},{\"label\":\"日照经济技术开发区\",\"value\":\"371171\"},{\"label\":\"日照国际海洋城\",\"value\":\"371172\"}],[{\"label\":\"莱城区\",\"value\":\"371202\"},{\"label\":\"钢城区\",\"value\":\"371203\"}],[{\"label\":\"兰山区\",\"value\":\"371302\"},{\"label\":\"罗庄区\",\"value\":\"371311\"},{\"label\":\"河东区\",\"value\":\"371312\"},{\"label\":\"沂南县\",\"value\":\"371321\"},{\"label\":\"郯城县\",\"value\":\"371322\"},{\"label\":\"沂水县\",\"value\":\"371323\"},{\"label\":\"兰陵县\",\"value\":\"371324\"},{\"label\":\"费县\",\"value\":\"371325\"},{\"label\":\"平邑县\",\"value\":\"371326\"},{\"label\":\"莒南县\",\"value\":\"371327\"},{\"label\":\"蒙阴县\",\"value\":\"371328\"},{\"label\":\"临沭县\",\"value\":\"371329\"},{\"label\":\"临沂高新技术产业开发区\",\"value\":\"371371\"},{\"label\":\"临沂经济技术开发区\",\"value\":\"371372\"},{\"label\":\"临沂临港经济开发区\",\"value\":\"371373\"}],[{\"label\":\"德城区\",\"value\":\"371402\"},{\"label\":\"陵城区\",\"value\":\"371403\"},{\"label\":\"宁津县\",\"value\":\"371422\"},{\"label\":\"庆云县\",\"value\":\"371423\"},{\"label\":\"临邑县\",\"value\":\"371424\"},{\"label\":\"齐河县\",\"value\":\"371425\"},{\"label\":\"平原县\",\"value\":\"371426\"},{\"label\":\"夏津县\",\"value\":\"371427\"},{\"label\":\"武城县\",\"value\":\"371428\"},{\"label\":\"德州经济技术开发区\",\"value\":\"371471\"},{\"label\":\"德州运河经济开发区\",\"value\":\"371472\"},{\"label\":\"乐陵市\",\"value\":\"371481\"},{\"label\":\"禹城市\",\"value\":\"371482\"}],[{\"label\":\"东昌府区\",\"value\":\"371502\"},{\"label\":\"阳谷县\",\"value\":\"371521\"},{\"label\":\"莘县\",\"value\":\"371522\"},{\"label\":\"茌平县\",\"value\":\"371523\"},{\"label\":\"东阿县\",\"value\":\"371524\"},{\"label\":\"冠县\",\"value\":\"371525\"},{\"label\":\"高唐县\",\"value\":\"371526\"},{\"label\":\"临清市\",\"value\":\"371581\"}],[{\"label\":\"滨城区\",\"value\":\"371602\"},{\"label\":\"沾化区\",\"value\":\"371603\"},{\"label\":\"惠民县\",\"value\":\"371621\"},{\"label\":\"阳信县\",\"value\":\"371622\"},{\"label\":\"无棣县\",\"value\":\"371623\"},{\"label\":\"博兴县\",\"value\":\"371625\"},{\"label\":\"邹平县\",\"value\":\"371626\"}],[{\"label\":\"牡丹区\",\"value\":\"371702\"},{\"label\":\"定陶区\",\"value\":\"371703\"},{\"label\":\"曹县\",\"value\":\"371721\"},{\"label\":\"单县\",\"value\":\"371722\"},{\"label\":\"成武县\",\"value\":\"371723\"},{\"label\":\"巨野县\",\"value\":\"371724\"},{\"label\":\"郓城县\",\"value\":\"371725\"},{\"label\":\"鄄城县\",\"value\":\"371726\"},{\"label\":\"东明县\",\"value\":\"371728\"},{\"label\":\"菏泽经济技术开发区\",\"value\":\"371771\"},{\"label\":\"菏泽高新技术开发区\",\"value\":\"371772\"}]],[[{\"label\":\"中原区\",\"value\":\"410102\"},{\"label\":\"二七区\",\"value\":\"410103\"},{\"label\":\"管城回族区\",\"value\":\"410104\"},{\"label\":\"金水区\",\"value\":\"410105\"},{\"label\":\"上街区\",\"value\":\"410106\"},{\"label\":\"惠济区\",\"value\":\"410108\"},{\"label\":\"中牟县\",\"value\":\"410122\"},{\"label\":\"郑州经济技术开发区\",\"value\":\"410171\"},{\"label\":\"郑州高新技术产业开发区\",\"value\":\"410172\"},{\"label\":\"郑州航空港经济综合实验区\",\"value\":\"410173\"},{\"label\":\"巩义市\",\"value\":\"410181\"},{\"label\":\"荥阳市\",\"value\":\"410182\"},{\"label\":\"新密市\",\"value\":\"410183\"},{\"label\":\"新郑市\",\"value\":\"410184\"},{\"label\":\"登封市\",\"value\":\"410185\"}],[{\"label\":\"龙亭区\",\"value\":\"410202\"},{\"label\":\"顺河回族区\",\"value\":\"410203\"},{\"label\":\"鼓楼区\",\"value\":\"410204\"},{\"label\":\"禹王台区\",\"value\":\"410205\"},{\"label\":\"祥符区\",\"value\":\"410212\"},{\"label\":\"杞县\",\"value\":\"410221\"},{\"label\":\"通许县\",\"value\":\"410222\"},{\"label\":\"尉氏县\",\"value\":\"410223\"},{\"label\":\"兰考县\",\"value\":\"410225\"}],[{\"label\":\"老城区\",\"value\":\"410302\"},{\"label\":\"西工区\",\"value\":\"410303\"},{\"label\":\"瀍河回族区\",\"value\":\"410304\"},{\"label\":\"涧西区\",\"value\":\"410305\"},{\"label\":\"吉利区\",\"value\":\"410306\"},{\"label\":\"洛龙区\",\"value\":\"410311\"},{\"label\":\"孟津县\",\"value\":\"410322\"},{\"label\":\"新安县\",\"value\":\"410323\"},{\"label\":\"栾川县\",\"value\":\"410324\"},{\"label\":\"嵩县\",\"value\":\"410325\"},{\"label\":\"汝阳县\",\"value\":\"410326\"},{\"label\":\"宜阳县\",\"value\":\"410327\"},{\"label\":\"洛宁县\",\"value\":\"410328\"},{\"label\":\"伊川县\",\"value\":\"410329\"},{\"label\":\"洛阳高新技术产业开发区\",\"value\":\"410371\"},{\"label\":\"偃师市\",\"value\":\"410381\"}],[{\"label\":\"新华区\",\"value\":\"410402\"},{\"label\":\"卫东区\",\"value\":\"410403\"},{\"label\":\"石龙区\",\"value\":\"410404\"},{\"label\":\"湛河区\",\"value\":\"410411\"},{\"label\":\"宝丰县\",\"value\":\"410421\"},{\"label\":\"叶县\",\"value\":\"410422\"},{\"label\":\"鲁山县\",\"value\":\"410423\"},{\"label\":\"郏县\",\"value\":\"410425\"},{\"label\":\"平顶山高新技术产业开发区\",\"value\":\"410471\"},{\"label\":\"平顶山市新城区\",\"value\":\"410472\"},{\"label\":\"舞钢市\",\"value\":\"410481\"},{\"label\":\"汝州市\",\"value\":\"410482\"}],[{\"label\":\"文峰区\",\"value\":\"410502\"},{\"label\":\"北关区\",\"value\":\"410503\"},{\"label\":\"殷都区\",\"value\":\"410505\"},{\"label\":\"龙安区\",\"value\":\"410506\"},{\"label\":\"安阳县\",\"value\":\"410522\"},{\"label\":\"汤阴县\",\"value\":\"410523\"},{\"label\":\"滑县\",\"value\":\"410526\"},{\"label\":\"内黄县\",\"value\":\"410527\"},{\"label\":\"安阳高新技术产业开发区\",\"value\":\"410571\"},{\"label\":\"林州市\",\"value\":\"410581\"}],[{\"label\":\"鹤山区\",\"value\":\"410602\"},{\"label\":\"山城区\",\"value\":\"410603\"},{\"label\":\"淇滨区\",\"value\":\"410611\"},{\"label\":\"浚县\",\"value\":\"410621\"},{\"label\":\"淇县\",\"value\":\"410622\"},{\"label\":\"鹤壁经济技术开发区\",\"value\":\"410671\"}],[{\"label\":\"红旗区\",\"value\":\"410702\"},{\"label\":\"卫滨区\",\"value\":\"410703\"},{\"label\":\"凤泉区\",\"value\":\"410704\"},{\"label\":\"牧野区\",\"value\":\"410711\"},{\"label\":\"新乡县\",\"value\":\"410721\"},{\"label\":\"获嘉县\",\"value\":\"410724\"},{\"label\":\"原阳县\",\"value\":\"410725\"},{\"label\":\"延津县\",\"value\":\"410726\"},{\"label\":\"封丘县\",\"value\":\"410727\"},{\"label\":\"长垣县\",\"value\":\"410728\"},{\"label\":\"新乡高新技术产业开发区\",\"value\":\"410771\"},{\"label\":\"新乡经济技术开发区\",\"value\":\"410772\"},{\"label\":\"新乡市平原城乡一体化示范区\",\"value\":\"410773\"},{\"label\":\"卫辉市\",\"value\":\"410781\"},{\"label\":\"辉县市\",\"value\":\"410782\"}],[{\"label\":\"解放区\",\"value\":\"410802\"},{\"label\":\"中站区\",\"value\":\"410803\"},{\"label\":\"马村区\",\"value\":\"410804\"},{\"label\":\"山阳区\",\"value\":\"410811\"},{\"label\":\"修武县\",\"value\":\"410821\"},{\"label\":\"博爱县\",\"value\":\"410822\"},{\"label\":\"武陟县\",\"value\":\"410823\"},{\"label\":\"温县\",\"value\":\"410825\"},{\"label\":\"焦作城乡一体化示范区\",\"value\":\"410871\"},{\"label\":\"沁阳市\",\"value\":\"410882\"},{\"label\":\"孟州市\",\"value\":\"410883\"}],[{\"label\":\"华龙区\",\"value\":\"410902\"},{\"label\":\"清丰县\",\"value\":\"410922\"},{\"label\":\"南乐县\",\"value\":\"410923\"},{\"label\":\"范县\",\"value\":\"410926\"},{\"label\":\"台前县\",\"value\":\"410927\"},{\"label\":\"濮阳县\",\"value\":\"410928\"},{\"label\":\"河南濮阳工业园区\",\"value\":\"410971\"},{\"label\":\"濮阳经济技术开发区\",\"value\":\"410972\"}],[{\"label\":\"魏都区\",\"value\":\"411002\"},{\"label\":\"建安区\",\"value\":\"411003\"},{\"label\":\"鄢陵县\",\"value\":\"411024\"},{\"label\":\"襄城县\",\"value\":\"411025\"},{\"label\":\"许昌经济技术开发区\",\"value\":\"411071\"},{\"label\":\"禹州市\",\"value\":\"411081\"},{\"label\":\"长葛市\",\"value\":\"411082\"}],[{\"label\":\"源汇区\",\"value\":\"411102\"},{\"label\":\"郾城区\",\"value\":\"411103\"},{\"label\":\"召陵区\",\"value\":\"411104\"},{\"label\":\"舞阳县\",\"value\":\"411121\"},{\"label\":\"临颍县\",\"value\":\"411122\"},{\"label\":\"漯河经济技术开发区\",\"value\":\"411171\"}],[{\"label\":\"湖滨区\",\"value\":\"411202\"},{\"label\":\"陕州区\",\"value\":\"411203\"},{\"label\":\"渑池县\",\"value\":\"411221\"},{\"label\":\"卢氏县\",\"value\":\"411224\"},{\"label\":\"河南三门峡经济开发区\",\"value\":\"411271\"},{\"label\":\"义马市\",\"value\":\"411281\"},{\"label\":\"灵宝市\",\"value\":\"411282\"}],[{\"label\":\"宛城区\",\"value\":\"411302\"},{\"label\":\"卧龙区\",\"value\":\"411303\"},{\"label\":\"南召县\",\"value\":\"411321\"},{\"label\":\"方城县\",\"value\":\"411322\"},{\"label\":\"西峡县\",\"value\":\"411323\"},{\"label\":\"镇平县\",\"value\":\"411324\"},{\"label\":\"内乡县\",\"value\":\"411325\"},{\"label\":\"淅川县\",\"value\":\"411326\"},{\"label\":\"社旗县\",\"value\":\"411327\"},{\"label\":\"唐河县\",\"value\":\"411328\"},{\"label\":\"新野县\",\"value\":\"411329\"},{\"label\":\"桐柏县\",\"value\":\"411330\"},{\"label\":\"南阳高新技术产业开发区\",\"value\":\"411371\"},{\"label\":\"南阳市城乡一体化示范区\",\"value\":\"411372\"},{\"label\":\"邓州市\",\"value\":\"411381\"}],[{\"label\":\"梁园区\",\"value\":\"411402\"},{\"label\":\"睢阳区\",\"value\":\"411403\"},{\"label\":\"民权县\",\"value\":\"411421\"},{\"label\":\"睢县\",\"value\":\"411422\"},{\"label\":\"宁陵县\",\"value\":\"411423\"},{\"label\":\"柘城县\",\"value\":\"411424\"},{\"label\":\"虞城县\",\"value\":\"411425\"},{\"label\":\"夏邑县\",\"value\":\"411426\"},{\"label\":\"豫东综合物流产业聚集区\",\"value\":\"411471\"},{\"label\":\"河南商丘经济开发区\",\"value\":\"411472\"},{\"label\":\"永城市\",\"value\":\"411481\"}],[{\"label\":\"浉河区\",\"value\":\"411502\"},{\"label\":\"平桥区\",\"value\":\"411503\"},{\"label\":\"罗山县\",\"value\":\"411521\"},{\"label\":\"光山县\",\"value\":\"411522\"},{\"label\":\"新县\",\"value\":\"411523\"},{\"label\":\"商城县\",\"value\":\"411524\"},{\"label\":\"固始县\",\"value\":\"411525\"},{\"label\":\"潢川县\",\"value\":\"411526\"},{\"label\":\"淮滨县\",\"value\":\"411527\"},{\"label\":\"息县\",\"value\":\"411528\"},{\"label\":\"信阳高新技术产业开发区\",\"value\":\"411571\"}],[{\"label\":\"川汇区\",\"value\":\"411602\"},{\"label\":\"扶沟县\",\"value\":\"411621\"},{\"label\":\"西华县\",\"value\":\"411622\"},{\"label\":\"商水县\",\"value\":\"411623\"},{\"label\":\"沈丘县\",\"value\":\"411624\"},{\"label\":\"郸城县\",\"value\":\"411625\"},{\"label\":\"淮阳县\",\"value\":\"411626\"},{\"label\":\"太康县\",\"value\":\"411627\"},{\"label\":\"鹿邑县\",\"value\":\"411628\"},{\"label\":\"河南周口经济开发区\",\"value\":\"411671\"},{\"label\":\"项城市\",\"value\":\"411681\"}],[{\"label\":\"驿城区\",\"value\":\"411702\"},{\"label\":\"西平县\",\"value\":\"411721\"},{\"label\":\"上蔡县\",\"value\":\"411722\"},{\"label\":\"平舆县\",\"value\":\"411723\"},{\"label\":\"正阳县\",\"value\":\"411724\"},{\"label\":\"确山县\",\"value\":\"411725\"},{\"label\":\"泌阳县\",\"value\":\"411726\"},{\"label\":\"汝南县\",\"value\":\"411727\"},{\"label\":\"遂平县\",\"value\":\"411728\"},{\"label\":\"新蔡县\",\"value\":\"411729\"},{\"label\":\"河南驻马店经济开发区\",\"value\":\"411771\"}],[{\"label\":\"济源市\",\"value\":\"419001\"}]],[[{\"label\":\"江岸区\",\"value\":\"420102\"},{\"label\":\"江汉区\",\"value\":\"420103\"},{\"label\":\"硚口区\",\"value\":\"420104\"},{\"label\":\"汉阳区\",\"value\":\"420105\"},{\"label\":\"武昌区\",\"value\":\"420106\"},{\"label\":\"青山区\",\"value\":\"420107\"},{\"label\":\"洪山区\",\"value\":\"420111\"},{\"label\":\"东西湖区\",\"value\":\"420112\"},{\"label\":\"汉南区\",\"value\":\"420113\"},{\"label\":\"蔡甸区\",\"value\":\"420114\"},{\"label\":\"江夏区\",\"value\":\"420115\"},{\"label\":\"黄陂区\",\"value\":\"420116\"},{\"label\":\"新洲区\",\"value\":\"420117\"}],[{\"label\":\"黄石港区\",\"value\":\"420202\"},{\"label\":\"西塞山区\",\"value\":\"420203\"},{\"label\":\"下陆区\",\"value\":\"420204\"},{\"label\":\"铁山区\",\"value\":\"420205\"},{\"label\":\"阳新县\",\"value\":\"420222\"},{\"label\":\"大冶市\",\"value\":\"420281\"}],[{\"label\":\"茅箭区\",\"value\":\"420302\"},{\"label\":\"张湾区\",\"value\":\"420303\"},{\"label\":\"郧阳区\",\"value\":\"420304\"},{\"label\":\"郧西县\",\"value\":\"420322\"},{\"label\":\"竹山县\",\"value\":\"420323\"},{\"label\":\"竹溪县\",\"value\":\"420324\"},{\"label\":\"房县\",\"value\":\"420325\"},{\"label\":\"丹江口市\",\"value\":\"420381\"}],[{\"label\":\"西陵区\",\"value\":\"420502\"},{\"label\":\"伍家岗区\",\"value\":\"420503\"},{\"label\":\"点军区\",\"value\":\"420504\"},{\"label\":\"猇亭区\",\"value\":\"420505\"},{\"label\":\"夷陵区\",\"value\":\"420506\"},{\"label\":\"远安县\",\"value\":\"420525\"},{\"label\":\"兴山县\",\"value\":\"420526\"},{\"label\":\"秭归县\",\"value\":\"420527\"},{\"label\":\"长阳土家族自治县\",\"value\":\"420528\"},{\"label\":\"五峰土家族自治县\",\"value\":\"420529\"},{\"label\":\"宜都市\",\"value\":\"420581\"},{\"label\":\"当阳市\",\"value\":\"420582\"},{\"label\":\"枝江市\",\"value\":\"420583\"}],[{\"label\":\"襄城区\",\"value\":\"420602\"},{\"label\":\"樊城区\",\"value\":\"420606\"},{\"label\":\"襄州区\",\"value\":\"420607\"},{\"label\":\"南漳县\",\"value\":\"420624\"},{\"label\":\"谷城县\",\"value\":\"420625\"},{\"label\":\"保康县\",\"value\":\"420626\"},{\"label\":\"老河口市\",\"value\":\"420682\"},{\"label\":\"枣阳市\",\"value\":\"420683\"},{\"label\":\"宜城市\",\"value\":\"420684\"}],[{\"label\":\"梁子湖区\",\"value\":\"420702\"},{\"label\":\"华容区\",\"value\":\"420703\"},{\"label\":\"鄂城区\",\"value\":\"420704\"}],[{\"label\":\"东宝区\",\"value\":\"420802\"},{\"label\":\"掇刀区\",\"value\":\"420804\"},{\"label\":\"京山县\",\"value\":\"420821\"},{\"label\":\"沙洋县\",\"value\":\"420822\"},{\"label\":\"钟祥市\",\"value\":\"420881\"}],[{\"label\":\"孝南区\",\"value\":\"420902\"},{\"label\":\"孝昌县\",\"value\":\"420921\"},{\"label\":\"大悟县\",\"value\":\"420922\"},{\"label\":\"云梦县\",\"value\":\"420923\"},{\"label\":\"应城市\",\"value\":\"420981\"},{\"label\":\"安陆市\",\"value\":\"420982\"},{\"label\":\"汉川市\",\"value\":\"420984\"}],[{\"label\":\"沙市区\",\"value\":\"421002\"},{\"label\":\"荆州区\",\"value\":\"421003\"},{\"label\":\"公安县\",\"value\":\"421022\"},{\"label\":\"监利县\",\"value\":\"421023\"},{\"label\":\"江陵县\",\"value\":\"421024\"},{\"label\":\"荆州经济技术开发区\",\"value\":\"421071\"},{\"label\":\"石首市\",\"value\":\"421081\"},{\"label\":\"洪湖市\",\"value\":\"421083\"},{\"label\":\"松滋市\",\"value\":\"421087\"}],[{\"label\":\"黄州区\",\"value\":\"421102\"},{\"label\":\"团风县\",\"value\":\"421121\"},{\"label\":\"红安县\",\"value\":\"421122\"},{\"label\":\"罗田县\",\"value\":\"421123\"},{\"label\":\"英山县\",\"value\":\"421124\"},{\"label\":\"浠水县\",\"value\":\"421125\"},{\"label\":\"蕲春县\",\"value\":\"421126\"},{\"label\":\"黄梅县\",\"value\":\"421127\"},{\"label\":\"龙感湖管理区\",\"value\":\"421171\"},{\"label\":\"麻城市\",\"value\":\"421181\"},{\"label\":\"武穴市\",\"value\":\"421182\"}],[{\"label\":\"咸安区\",\"value\":\"421202\"},{\"label\":\"嘉鱼县\",\"value\":\"421221\"},{\"label\":\"通城县\",\"value\":\"421222\"},{\"label\":\"崇阳县\",\"value\":\"421223\"},{\"label\":\"通山县\",\"value\":\"421224\"},{\"label\":\"赤壁市\",\"value\":\"421281\"}],[{\"label\":\"曾都区\",\"value\":\"421303\"},{\"label\":\"随县\",\"value\":\"421321\"},{\"label\":\"广水市\",\"value\":\"421381\"}],[{\"label\":\"恩施市\",\"value\":\"422801\"},{\"label\":\"利川市\",\"value\":\"422802\"},{\"label\":\"建始县\",\"value\":\"422822\"},{\"label\":\"巴东县\",\"value\":\"422823\"},{\"label\":\"宣恩县\",\"value\":\"422825\"},{\"label\":\"咸丰县\",\"value\":\"422826\"},{\"label\":\"来凤县\",\"value\":\"422827\"},{\"label\":\"鹤峰县\",\"value\":\"422828\"}],[{\"label\":\"仙桃市\",\"value\":\"429004\"},{\"label\":\"潜江市\",\"value\":\"429005\"},{\"label\":\"天门市\",\"value\":\"429006\"},{\"label\":\"神农架林区\",\"value\":\"429021\"}]],[[{\"label\":\"芙蓉区\",\"value\":\"430102\"},{\"label\":\"天心区\",\"value\":\"430103\"},{\"label\":\"岳麓区\",\"value\":\"430104\"},{\"label\":\"开福区\",\"value\":\"430105\"},{\"label\":\"雨花区\",\"value\":\"430111\"},{\"label\":\"望城区\",\"value\":\"430112\"},{\"label\":\"长沙县\",\"value\":\"430121\"},{\"label\":\"浏阳市\",\"value\":\"430181\"},{\"label\":\"宁乡市\",\"value\":\"430182\"}],[{\"label\":\"荷塘区\",\"value\":\"430202\"},{\"label\":\"芦淞区\",\"value\":\"430203\"},{\"label\":\"石峰区\",\"value\":\"430204\"},{\"label\":\"天元区\",\"value\":\"430211\"},{\"label\":\"株洲县\",\"value\":\"430221\"},{\"label\":\"攸县\",\"value\":\"430223\"},{\"label\":\"茶陵县\",\"value\":\"430224\"},{\"label\":\"炎陵县\",\"value\":\"430225\"},{\"label\":\"云龙示范区\",\"value\":\"430271\"},{\"label\":\"醴陵市\",\"value\":\"430281\"}],[{\"label\":\"雨湖区\",\"value\":\"430302\"},{\"label\":\"岳塘区\",\"value\":\"430304\"},{\"label\":\"湘潭县\",\"value\":\"430321\"},{\"label\":\"湖南湘潭高新技术产业园区\",\"value\":\"430371\"},{\"label\":\"湘潭昭山示范区\",\"value\":\"430372\"},{\"label\":\"湘潭九华示范区\",\"value\":\"430373\"},{\"label\":\"湘乡市\",\"value\":\"430381\"},{\"label\":\"韶山市\",\"value\":\"430382\"}],[{\"label\":\"珠晖区\",\"value\":\"430405\"},{\"label\":\"雁峰区\",\"value\":\"430406\"},{\"label\":\"石鼓区\",\"value\":\"430407\"},{\"label\":\"蒸湘区\",\"value\":\"430408\"},{\"label\":\"南岳区\",\"value\":\"430412\"},{\"label\":\"衡阳县\",\"value\":\"430421\"},{\"label\":\"衡南县\",\"value\":\"430422\"},{\"label\":\"衡山县\",\"value\":\"430423\"},{\"label\":\"衡东县\",\"value\":\"430424\"},{\"label\":\"祁东县\",\"value\":\"430426\"},{\"label\":\"衡阳综合保税区\",\"value\":\"430471\"},{\"label\":\"湖南衡阳高新技术产业园区\",\"value\":\"430472\"},{\"label\":\"湖南衡阳松木经济开发区\",\"value\":\"430473\"},{\"label\":\"耒阳市\",\"value\":\"430481\"},{\"label\":\"常宁市\",\"value\":\"430482\"}],[{\"label\":\"双清区\",\"value\":\"430502\"},{\"label\":\"大祥区\",\"value\":\"430503\"},{\"label\":\"北塔区\",\"value\":\"430511\"},{\"label\":\"邵东县\",\"value\":\"430521\"},{\"label\":\"新邵县\",\"value\":\"430522\"},{\"label\":\"邵阳县\",\"value\":\"430523\"},{\"label\":\"隆回县\",\"value\":\"430524\"},{\"label\":\"洞口县\",\"value\":\"430525\"},{\"label\":\"绥宁县\",\"value\":\"430527\"},{\"label\":\"新宁县\",\"value\":\"430528\"},{\"label\":\"城步苗族自治县\",\"value\":\"430529\"},{\"label\":\"武冈市\",\"value\":\"430581\"}],[{\"label\":\"岳阳楼区\",\"value\":\"430602\"},{\"label\":\"云溪区\",\"value\":\"430603\"},{\"label\":\"君山区\",\"value\":\"430611\"},{\"label\":\"岳阳县\",\"value\":\"430621\"},{\"label\":\"华容县\",\"value\":\"430623\"},{\"label\":\"湘阴县\",\"value\":\"430624\"},{\"label\":\"平江县\",\"value\":\"430626\"},{\"label\":\"岳阳市屈原管理区\",\"value\":\"430671\"},{\"label\":\"汨罗市\",\"value\":\"430681\"},{\"label\":\"临湘市\",\"value\":\"430682\"}],[{\"label\":\"武陵区\",\"value\":\"430702\"},{\"label\":\"鼎城区\",\"value\":\"430703\"},{\"label\":\"安乡县\",\"value\":\"430721\"},{\"label\":\"汉寿县\",\"value\":\"430722\"},{\"label\":\"澧县\",\"value\":\"430723\"},{\"label\":\"临澧县\",\"value\":\"430724\"},{\"label\":\"桃源县\",\"value\":\"430725\"},{\"label\":\"石门县\",\"value\":\"430726\"},{\"label\":\"常德市西洞庭管理区\",\"value\":\"430771\"},{\"label\":\"津市市\",\"value\":\"430781\"}],[{\"label\":\"永定区\",\"value\":\"430802\"},{\"label\":\"武陵源区\",\"value\":\"430811\"},{\"label\":\"慈利县\",\"value\":\"430821\"},{\"label\":\"桑植县\",\"value\":\"430822\"}],[{\"label\":\"资阳区\",\"value\":\"430902\"},{\"label\":\"赫山区\",\"value\":\"430903\"},{\"label\":\"南县\",\"value\":\"430921\"},{\"label\":\"桃江县\",\"value\":\"430922\"},{\"label\":\"安化县\",\"value\":\"430923\"},{\"label\":\"益阳市大通湖管理区\",\"value\":\"430971\"},{\"label\":\"湖南益阳高新技术产业园区\",\"value\":\"430972\"},{\"label\":\"沅江市\",\"value\":\"430981\"}],[{\"label\":\"北湖区\",\"value\":\"431002\"},{\"label\":\"苏仙区\",\"value\":\"431003\"},{\"label\":\"桂阳县\",\"value\":\"431021\"},{\"label\":\"宜章县\",\"value\":\"431022\"},{\"label\":\"永兴县\",\"value\":\"431023\"},{\"label\":\"嘉禾县\",\"value\":\"431024\"},{\"label\":\"临武县\",\"value\":\"431025\"},{\"label\":\"汝城县\",\"value\":\"431026\"},{\"label\":\"桂东县\",\"value\":\"431027\"},{\"label\":\"安仁县\",\"value\":\"431028\"},{\"label\":\"资兴市\",\"value\":\"431081\"}],[{\"label\":\"零陵区\",\"value\":\"431102\"},{\"label\":\"冷水滩区\",\"value\":\"431103\"},{\"label\":\"祁阳县\",\"value\":\"431121\"},{\"label\":\"东安县\",\"value\":\"431122\"},{\"label\":\"双牌县\",\"value\":\"431123\"},{\"label\":\"道县\",\"value\":\"431124\"},{\"label\":\"江永县\",\"value\":\"431125\"},{\"label\":\"宁远县\",\"value\":\"431126\"},{\"label\":\"蓝山县\",\"value\":\"431127\"},{\"label\":\"新田县\",\"value\":\"431128\"},{\"label\":\"江华瑶族自治县\",\"value\":\"431129\"},{\"label\":\"永州经济技术开发区\",\"value\":\"431171\"},{\"label\":\"永州市金洞管理区\",\"value\":\"431172\"},{\"label\":\"永州市回龙圩管理区\",\"value\":\"431173\"}],[{\"label\":\"鹤城区\",\"value\":\"431202\"},{\"label\":\"中方县\",\"value\":\"431221\"},{\"label\":\"沅陵县\",\"value\":\"431222\"},{\"label\":\"辰溪县\",\"value\":\"431223\"},{\"label\":\"溆浦县\",\"value\":\"431224\"},{\"label\":\"会同县\",\"value\":\"431225\"},{\"label\":\"麻阳苗族自治县\",\"value\":\"431226\"},{\"label\":\"新晃侗族自治县\",\"value\":\"431227\"},{\"label\":\"芷江侗族自治县\",\"value\":\"431228\"},{\"label\":\"靖州苗族侗族自治县\",\"value\":\"431229\"},{\"label\":\"通道侗族自治县\",\"value\":\"431230\"},{\"label\":\"怀化市洪江管理区\",\"value\":\"431271\"},{\"label\":\"洪江市\",\"value\":\"431281\"}],[{\"label\":\"娄星区\",\"value\":\"431302\"},{\"label\":\"双峰县\",\"value\":\"431321\"},{\"label\":\"新化县\",\"value\":\"431322\"},{\"label\":\"冷水江市\",\"value\":\"431381\"},{\"label\":\"涟源市\",\"value\":\"431382\"}],[{\"label\":\"吉首市\",\"value\":\"433101\"},{\"label\":\"泸溪县\",\"value\":\"433122\"},{\"label\":\"凤凰县\",\"value\":\"433123\"},{\"label\":\"花垣县\",\"value\":\"433124\"},{\"label\":\"保靖县\",\"value\":\"433125\"},{\"label\":\"古丈县\",\"value\":\"433126\"},{\"label\":\"永顺县\",\"value\":\"433127\"},{\"label\":\"龙山县\",\"value\":\"433130\"},{\"label\":\"湖南吉首经济开发区\",\"value\":\"433172\"},{\"label\":\"湖南永顺经济开发区\",\"value\":\"433173\"}]],[[{\"label\":\"荔湾区\",\"value\":\"440103\"},{\"label\":\"越秀区\",\"value\":\"440104\"},{\"label\":\"海珠区\",\"value\":\"440105\"},{\"label\":\"天河区\",\"value\":\"440106\"},{\"label\":\"白云区\",\"value\":\"440111\"},{\"label\":\"黄埔区\",\"value\":\"440112\"},{\"label\":\"番禺区\",\"value\":\"440113\"},{\"label\":\"花都区\",\"value\":\"440114\"},{\"label\":\"南沙区\",\"value\":\"440115\"},{\"label\":\"从化区\",\"value\":\"440117\"},{\"label\":\"增城区\",\"value\":\"440118\"}],[{\"label\":\"武江区\",\"value\":\"440203\"},{\"label\":\"浈江区\",\"value\":\"440204\"},{\"label\":\"曲江区\",\"value\":\"440205\"},{\"label\":\"始兴县\",\"value\":\"440222\"},{\"label\":\"仁化县\",\"value\":\"440224\"},{\"label\":\"翁源县\",\"value\":\"440229\"},{\"label\":\"乳源瑶族自治县\",\"value\":\"440232\"},{\"label\":\"新丰县\",\"value\":\"440233\"},{\"label\":\"乐昌市\",\"value\":\"440281\"},{\"label\":\"南雄市\",\"value\":\"440282\"}],[{\"label\":\"罗湖区\",\"value\":\"440303\"},{\"label\":\"福田区\",\"value\":\"440304\"},{\"label\":\"南山区\",\"value\":\"440305\"},{\"label\":\"宝安区\",\"value\":\"440306\"},{\"label\":\"龙岗区\",\"value\":\"440307\"},{\"label\":\"盐田区\",\"value\":\"440308\"},{\"label\":\"龙华区\",\"value\":\"440309\"},{\"label\":\"坪山区\",\"value\":\"440310\"}],[{\"label\":\"香洲区\",\"value\":\"440402\"},{\"label\":\"斗门区\",\"value\":\"440403\"},{\"label\":\"金湾区\",\"value\":\"440404\"}],[{\"label\":\"龙湖区\",\"value\":\"440507\"},{\"label\":\"金平区\",\"value\":\"440511\"},{\"label\":\"濠江区\",\"value\":\"440512\"},{\"label\":\"潮阳区\",\"value\":\"440513\"},{\"label\":\"潮南区\",\"value\":\"440514\"},{\"label\":\"澄海区\",\"value\":\"440515\"},{\"label\":\"南澳县\",\"value\":\"440523\"}],[{\"label\":\"禅城区\",\"value\":\"440604\"},{\"label\":\"南海区\",\"value\":\"440605\"},{\"label\":\"顺德区\",\"value\":\"440606\"},{\"label\":\"三水区\",\"value\":\"440607\"},{\"label\":\"高明区\",\"value\":\"440608\"}],[{\"label\":\"蓬江区\",\"value\":\"440703\"},{\"label\":\"江海区\",\"value\":\"440704\"},{\"label\":\"新会区\",\"value\":\"440705\"},{\"label\":\"台山市\",\"value\":\"440781\"},{\"label\":\"开平市\",\"value\":\"440783\"},{\"label\":\"鹤山市\",\"value\":\"440784\"},{\"label\":\"恩平市\",\"value\":\"440785\"}],[{\"label\":\"赤坎区\",\"value\":\"440802\"},{\"label\":\"霞山区\",\"value\":\"440803\"},{\"label\":\"坡头区\",\"value\":\"440804\"},{\"label\":\"麻章区\",\"value\":\"440811\"},{\"label\":\"遂溪县\",\"value\":\"440823\"},{\"label\":\"徐闻县\",\"value\":\"440825\"},{\"label\":\"廉江市\",\"value\":\"440881\"},{\"label\":\"雷州市\",\"value\":\"440882\"},{\"label\":\"吴川市\",\"value\":\"440883\"}],[{\"label\":\"茂南区\",\"value\":\"440902\"},{\"label\":\"电白区\",\"value\":\"440904\"},{\"label\":\"高州市\",\"value\":\"440981\"},{\"label\":\"化州市\",\"value\":\"440982\"},{\"label\":\"信宜市\",\"value\":\"440983\"}],[{\"label\":\"端州区\",\"value\":\"441202\"},{\"label\":\"鼎湖区\",\"value\":\"441203\"},{\"label\":\"高要区\",\"value\":\"441204\"},{\"label\":\"广宁县\",\"value\":\"441223\"},{\"label\":\"怀集县\",\"value\":\"441224\"},{\"label\":\"封开县\",\"value\":\"441225\"},{\"label\":\"德庆县\",\"value\":\"441226\"},{\"label\":\"四会市\",\"value\":\"441284\"}],[{\"label\":\"惠城区\",\"value\":\"441302\"},{\"label\":\"惠阳区\",\"value\":\"441303\"},{\"label\":\"博罗县\",\"value\":\"441322\"},{\"label\":\"惠东县\",\"value\":\"441323\"},{\"label\":\"龙门县\",\"value\":\"441324\"}],[{\"label\":\"梅江区\",\"value\":\"441402\"},{\"label\":\"梅县区\",\"value\":\"441403\"},{\"label\":\"大埔县\",\"value\":\"441422\"},{\"label\":\"丰顺县\",\"value\":\"441423\"},{\"label\":\"五华县\",\"value\":\"441424\"},{\"label\":\"平远县\",\"value\":\"441426\"},{\"label\":\"蕉岭县\",\"value\":\"441427\"},{\"label\":\"兴宁市\",\"value\":\"441481\"}],[{\"label\":\"城区\",\"value\":\"441502\"},{\"label\":\"海丰县\",\"value\":\"441521\"},{\"label\":\"陆河县\",\"value\":\"441523\"},{\"label\":\"陆丰市\",\"value\":\"441581\"}],[{\"label\":\"源城区\",\"value\":\"441602\"},{\"label\":\"紫金县\",\"value\":\"441621\"},{\"label\":\"龙川县\",\"value\":\"441622\"},{\"label\":\"连平县\",\"value\":\"441623\"},{\"label\":\"和平县\",\"value\":\"441624\"},{\"label\":\"东源县\",\"value\":\"441625\"}],[{\"label\":\"江城区\",\"value\":\"441702\"},{\"label\":\"阳东区\",\"value\":\"441704\"},{\"label\":\"阳西县\",\"value\":\"441721\"},{\"label\":\"阳春市\",\"value\":\"441781\"}],[{\"label\":\"清城区\",\"value\":\"441802\"},{\"label\":\"清新区\",\"value\":\"441803\"},{\"label\":\"佛冈县\",\"value\":\"441821\"},{\"label\":\"阳山县\",\"value\":\"441823\"},{\"label\":\"连山壮族瑶族自治县\",\"value\":\"441825\"},{\"label\":\"连南瑶族自治县\",\"value\":\"441826\"},{\"label\":\"英德市\",\"value\":\"441881\"},{\"label\":\"连州市\",\"value\":\"441882\"}],[{\"label\":\"东莞市\",\"value\":\"441900\"}],[{\"label\":\"中山市\",\"value\":\"442000\"}],[{\"label\":\"湘桥区\",\"value\":\"445102\"},{\"label\":\"潮安区\",\"value\":\"445103\"},{\"label\":\"饶平县\",\"value\":\"445122\"}],[{\"label\":\"榕城区\",\"value\":\"445202\"},{\"label\":\"揭东区\",\"value\":\"445203\"},{\"label\":\"揭西县\",\"value\":\"445222\"},{\"label\":\"惠来县\",\"value\":\"445224\"},{\"label\":\"普宁市\",\"value\":\"445281\"}],[{\"label\":\"云城区\",\"value\":\"445302\"},{\"label\":\"云安区\",\"value\":\"445303\"},{\"label\":\"新兴县\",\"value\":\"445321\"},{\"label\":\"郁南县\",\"value\":\"445322\"},{\"label\":\"罗定市\",\"value\":\"445381\"}]],[[{\"label\":\"兴宁区\",\"value\":\"450102\"},{\"label\":\"青秀区\",\"value\":\"450103\"},{\"label\":\"江南区\",\"value\":\"450105\"},{\"label\":\"西乡塘区\",\"value\":\"450107\"},{\"label\":\"良庆区\",\"value\":\"450108\"},{\"label\":\"邕宁区\",\"value\":\"450109\"},{\"label\":\"武鸣区\",\"value\":\"450110\"},{\"label\":\"隆安县\",\"value\":\"450123\"},{\"label\":\"马山县\",\"value\":\"450124\"},{\"label\":\"上林县\",\"value\":\"450125\"},{\"label\":\"宾阳县\",\"value\":\"450126\"},{\"label\":\"横县\",\"value\":\"450127\"}],[{\"label\":\"城中区\",\"value\":\"450202\"},{\"label\":\"鱼峰区\",\"value\":\"450203\"},{\"label\":\"柳南区\",\"value\":\"450204\"},{\"label\":\"柳北区\",\"value\":\"450205\"},{\"label\":\"柳江区\",\"value\":\"450206\"},{\"label\":\"柳城县\",\"value\":\"450222\"},{\"label\":\"鹿寨县\",\"value\":\"450223\"},{\"label\":\"融安县\",\"value\":\"450224\"},{\"label\":\"融水苗族自治县\",\"value\":\"450225\"},{\"label\":\"三江侗族自治县\",\"value\":\"450226\"}],[{\"label\":\"秀峰区\",\"value\":\"450302\"},{\"label\":\"叠彩区\",\"value\":\"450303\"},{\"label\":\"象山区\",\"value\":\"450304\"},{\"label\":\"七星区\",\"value\":\"450305\"},{\"label\":\"雁山区\",\"value\":\"450311\"},{\"label\":\"临桂区\",\"value\":\"450312\"},{\"label\":\"阳朔县\",\"value\":\"450321\"},{\"label\":\"灵川县\",\"value\":\"450323\"},{\"label\":\"全州县\",\"value\":\"450324\"},{\"label\":\"兴安县\",\"value\":\"450325\"},{\"label\":\"永福县\",\"value\":\"450326\"},{\"label\":\"灌阳县\",\"value\":\"450327\"},{\"label\":\"龙胜各族自治县\",\"value\":\"450328\"},{\"label\":\"资源县\",\"value\":\"450329\"},{\"label\":\"平乐县\",\"value\":\"450330\"},{\"label\":\"荔浦县\",\"value\":\"450331\"},{\"label\":\"恭城瑶族自治县\",\"value\":\"450332\"}],[{\"label\":\"万秀区\",\"value\":\"450403\"},{\"label\":\"长洲区\",\"value\":\"450405\"},{\"label\":\"龙圩区\",\"value\":\"450406\"},{\"label\":\"苍梧县\",\"value\":\"450421\"},{\"label\":\"藤县\",\"value\":\"450422\"},{\"label\":\"蒙山县\",\"value\":\"450423\"},{\"label\":\"岑溪市\",\"value\":\"450481\"}],[{\"label\":\"海城区\",\"value\":\"450502\"},{\"label\":\"银海区\",\"value\":\"450503\"},{\"label\":\"铁山港区\",\"value\":\"450512\"},{\"label\":\"合浦县\",\"value\":\"450521\"}],[{\"label\":\"港口区\",\"value\":\"450602\"},{\"label\":\"防城区\",\"value\":\"450603\"},{\"label\":\"上思县\",\"value\":\"450621\"},{\"label\":\"东兴市\",\"value\":\"450681\"}],[{\"label\":\"钦南区\",\"value\":\"450702\"},{\"label\":\"钦北区\",\"value\":\"450703\"},{\"label\":\"灵山县\",\"value\":\"450721\"},{\"label\":\"浦北县\",\"value\":\"450722\"}],[{\"label\":\"港北区\",\"value\":\"450802\"},{\"label\":\"港南区\",\"value\":\"450803\"},{\"label\":\"覃塘区\",\"value\":\"450804\"},{\"label\":\"平南县\",\"value\":\"450821\"},{\"label\":\"桂平市\",\"value\":\"450881\"}],[{\"label\":\"玉州区\",\"value\":\"450902\"},{\"label\":\"福绵区\",\"value\":\"450903\"},{\"label\":\"容县\",\"value\":\"450921\"},{\"label\":\"陆川县\",\"value\":\"450922\"},{\"label\":\"博白县\",\"value\":\"450923\"},{\"label\":\"兴业县\",\"value\":\"450924\"},{\"label\":\"北流市\",\"value\":\"450981\"}],[{\"label\":\"右江区\",\"value\":\"451002\"},{\"label\":\"田阳县\",\"value\":\"451021\"},{\"label\":\"田东县\",\"value\":\"451022\"},{\"label\":\"平果县\",\"value\":\"451023\"},{\"label\":\"德保县\",\"value\":\"451024\"},{\"label\":\"那坡县\",\"value\":\"451026\"},{\"label\":\"凌云县\",\"value\":\"451027\"},{\"label\":\"乐业县\",\"value\":\"451028\"},{\"label\":\"田林县\",\"value\":\"451029\"},{\"label\":\"西林县\",\"value\":\"451030\"},{\"label\":\"隆林各族自治县\",\"value\":\"451031\"},{\"label\":\"靖西市\",\"value\":\"451081\"}],[{\"label\":\"八步区\",\"value\":\"451102\"},{\"label\":\"平桂区\",\"value\":\"451103\"},{\"label\":\"昭平县\",\"value\":\"451121\"},{\"label\":\"钟山县\",\"value\":\"451122\"},{\"label\":\"富川瑶族自治县\",\"value\":\"451123\"}],[{\"label\":\"金城江区\",\"value\":\"451202\"},{\"label\":\"宜州区\",\"value\":\"451203\"},{\"label\":\"南丹县\",\"value\":\"451221\"},{\"label\":\"天峨县\",\"value\":\"451222\"},{\"label\":\"凤山县\",\"value\":\"451223\"},{\"label\":\"东兰县\",\"value\":\"451224\"},{\"label\":\"罗城仫佬族自治县\",\"value\":\"451225\"},{\"label\":\"环江毛南族自治县\",\"value\":\"451226\"},{\"label\":\"巴马瑶族自治县\",\"value\":\"451227\"},{\"label\":\"都安瑶族自治县\",\"value\":\"451228\"},{\"label\":\"大化瑶族自治县\",\"value\":\"451229\"}],[{\"label\":\"兴宾区\",\"value\":\"451302\"},{\"label\":\"忻城县\",\"value\":\"451321\"},{\"label\":\"象州县\",\"value\":\"451322\"},{\"label\":\"武宣县\",\"value\":\"451323\"},{\"label\":\"金秀瑶族自治县\",\"value\":\"451324\"},{\"label\":\"合山市\",\"value\":\"451381\"}],[{\"label\":\"江州区\",\"value\":\"451402\"},{\"label\":\"扶绥县\",\"value\":\"451421\"},{\"label\":\"宁明县\",\"value\":\"451422\"},{\"label\":\"龙州县\",\"value\":\"451423\"},{\"label\":\"大新县\",\"value\":\"451424\"},{\"label\":\"天等县\",\"value\":\"451425\"},{\"label\":\"凭祥市\",\"value\":\"451481\"}]],[[{\"label\":\"秀英区\",\"value\":\"460105\"},{\"label\":\"龙华区\",\"value\":\"460106\"},{\"label\":\"琼山区\",\"value\":\"460107\"},{\"label\":\"美兰区\",\"value\":\"460108\"}],[{\"label\":\"海棠区\",\"value\":\"460202\"},{\"label\":\"吉阳区\",\"value\":\"460203\"},{\"label\":\"天涯区\",\"value\":\"460204\"},{\"label\":\"崖州区\",\"value\":\"460205\"}],[{\"label\":\"西沙群岛\",\"value\":\"460321\"},{\"label\":\"南沙群岛\",\"value\":\"460322\"},{\"label\":\"中沙群岛的岛礁及其海域\",\"value\":\"460323\"}],[{\"label\":\"儋州市\",\"value\":\"460400\"}],[{\"label\":\"五指山市\",\"value\":\"469001\"},{\"label\":\"琼海市\",\"value\":\"469002\"},{\"label\":\"文昌市\",\"value\":\"469005\"},{\"label\":\"万宁市\",\"value\":\"469006\"},{\"label\":\"东方市\",\"value\":\"469007\"},{\"label\":\"定安县\",\"value\":\"469021\"},{\"label\":\"屯昌县\",\"value\":\"469022\"},{\"label\":\"澄迈县\",\"value\":\"469023\"},{\"label\":\"临高县\",\"value\":\"469024\"},{\"label\":\"白沙黎族自治县\",\"value\":\"469025\"},{\"label\":\"昌江黎族自治县\",\"value\":\"469026\"},{\"label\":\"乐东黎族自治县\",\"value\":\"469027\"},{\"label\":\"陵水黎族自治县\",\"value\":\"469028\"},{\"label\":\"保亭黎族苗族自治县\",\"value\":\"469029\"},{\"label\":\"琼中黎族苗族自治县\",\"value\":\"469030\"}]],[[{\"label\":\"万州区\",\"value\":\"500101\"},{\"label\":\"涪陵区\",\"value\":\"500102\"},{\"label\":\"渝中区\",\"value\":\"500103\"},{\"label\":\"大渡口区\",\"value\":\"500104\"},{\"label\":\"江北区\",\"value\":\"500105\"},{\"label\":\"沙坪坝区\",\"value\":\"500106\"},{\"label\":\"九龙坡区\",\"value\":\"500107\"},{\"label\":\"南岸区\",\"value\":\"500108\"},{\"label\":\"北碚区\",\"value\":\"500109\"},{\"label\":\"綦江区\",\"value\":\"500110\"},{\"label\":\"大足区\",\"value\":\"500111\"},{\"label\":\"渝北区\",\"value\":\"500112\"},{\"label\":\"巴南区\",\"value\":\"500113\"},{\"label\":\"黔江区\",\"value\":\"500114\"},{\"label\":\"长寿区\",\"value\":\"500115\"},{\"label\":\"江津区\",\"value\":\"500116\"},{\"label\":\"合川区\",\"value\":\"500117\"},{\"label\":\"永川区\",\"value\":\"500118\"},{\"label\":\"南川区\",\"value\":\"500119\"},{\"label\":\"璧山区\",\"value\":\"500120\"},{\"label\":\"铜梁区\",\"value\":\"500151\"},{\"label\":\"潼南区\",\"value\":\"500152\"},{\"label\":\"荣昌区\",\"value\":\"500153\"},{\"label\":\"开州区\",\"value\":\"500154\"},{\"label\":\"梁平区\",\"value\":\"500155\"},{\"label\":\"武隆区\",\"value\":\"500156\"}],[{\"label\":\"城口县\",\"value\":\"500229\"},{\"label\":\"丰都县\",\"value\":\"500230\"},{\"label\":\"垫江县\",\"value\":\"500231\"},{\"label\":\"忠县\",\"value\":\"500233\"},{\"label\":\"云阳县\",\"value\":\"500235\"},{\"label\":\"奉节县\",\"value\":\"500236\"},{\"label\":\"巫山县\",\"value\":\"500237\"},{\"label\":\"巫溪县\",\"value\":\"500238\"},{\"label\":\"石柱土家族自治县\",\"value\":\"500240\"},{\"label\":\"秀山土家族苗族自治县\",\"value\":\"500241\"},{\"label\":\"酉阳土家族苗族自治县\",\"value\":\"500242\"},{\"label\":\"彭水苗族土家族自治县\",\"value\":\"500243\"}]],[[{\"label\":\"锦江区\",\"value\":\"510104\"},{\"label\":\"青羊区\",\"value\":\"510105\"},{\"label\":\"金牛区\",\"value\":\"510106\"},{\"label\":\"武侯区\",\"value\":\"510107\"},{\"label\":\"成华区\",\"value\":\"510108\"},{\"label\":\"龙泉驿区\",\"value\":\"510112\"},{\"label\":\"青白江区\",\"value\":\"510113\"},{\"label\":\"新都区\",\"value\":\"510114\"},{\"label\":\"温江区\",\"value\":\"510115\"},{\"label\":\"双流区\",\"value\":\"510116\"},{\"label\":\"郫都区\",\"value\":\"510117\"},{\"label\":\"金堂县\",\"value\":\"510121\"},{\"label\":\"大邑县\",\"value\":\"510129\"},{\"label\":\"蒲江县\",\"value\":\"510131\"},{\"label\":\"新津县\",\"value\":\"510132\"},{\"label\":\"都江堰市\",\"value\":\"510181\"},{\"label\":\"彭州市\",\"value\":\"510182\"},{\"label\":\"邛崃市\",\"value\":\"510183\"},{\"label\":\"崇州市\",\"value\":\"510184\"},{\"label\":\"简阳市\",\"value\":\"510185\"}],[{\"label\":\"自流井区\",\"value\":\"510302\"},{\"label\":\"贡井区\",\"value\":\"510303\"},{\"label\":\"大安区\",\"value\":\"510304\"},{\"label\":\"沿滩区\",\"value\":\"510311\"},{\"label\":\"荣县\",\"value\":\"510321\"},{\"label\":\"富顺县\",\"value\":\"510322\"}],[{\"label\":\"东区\",\"value\":\"510402\"},{\"label\":\"西区\",\"value\":\"510403\"},{\"label\":\"仁和区\",\"value\":\"510411\"},{\"label\":\"米易县\",\"value\":\"510421\"},{\"label\":\"盐边县\",\"value\":\"510422\"}],[{\"label\":\"江阳区\",\"value\":\"510502\"},{\"label\":\"纳溪区\",\"value\":\"510503\"},{\"label\":\"龙马潭区\",\"value\":\"510504\"},{\"label\":\"泸县\",\"value\":\"510521\"},{\"label\":\"合江县\",\"value\":\"510522\"},{\"label\":\"叙永县\",\"value\":\"510524\"},{\"label\":\"古蔺县\",\"value\":\"510525\"}],[{\"label\":\"旌阳区\",\"value\":\"510603\"},{\"label\":\"罗江区\",\"value\":\"510604\"},{\"label\":\"中江县\",\"value\":\"510623\"},{\"label\":\"广汉市\",\"value\":\"510681\"},{\"label\":\"什邡市\",\"value\":\"510682\"},{\"label\":\"绵竹市\",\"value\":\"510683\"}],[{\"label\":\"涪城区\",\"value\":\"510703\"},{\"label\":\"游仙区\",\"value\":\"510704\"},{\"label\":\"安州区\",\"value\":\"510705\"},{\"label\":\"三台县\",\"value\":\"510722\"},{\"label\":\"盐亭县\",\"value\":\"510723\"},{\"label\":\"梓潼县\",\"value\":\"510725\"},{\"label\":\"北川羌族自治县\",\"value\":\"510726\"},{\"label\":\"平武县\",\"value\":\"510727\"},{\"label\":\"江油市\",\"value\":\"510781\"}],[{\"label\":\"利州区\",\"value\":\"510802\"},{\"label\":\"昭化区\",\"value\":\"510811\"},{\"label\":\"朝天区\",\"value\":\"510812\"},{\"label\":\"旺苍县\",\"value\":\"510821\"},{\"label\":\"青川县\",\"value\":\"510822\"},{\"label\":\"剑阁县\",\"value\":\"510823\"},{\"label\":\"苍溪县\",\"value\":\"510824\"}],[{\"label\":\"船山区\",\"value\":\"510903\"},{\"label\":\"安居区\",\"value\":\"510904\"},{\"label\":\"蓬溪县\",\"value\":\"510921\"},{\"label\":\"射洪县\",\"value\":\"510922\"},{\"label\":\"大英县\",\"value\":\"510923\"}],[{\"label\":\"市中区\",\"value\":\"511002\"},{\"label\":\"东兴区\",\"value\":\"511011\"},{\"label\":\"威远县\",\"value\":\"511024\"},{\"label\":\"资中县\",\"value\":\"511025\"},{\"label\":\"内江经济开发区\",\"value\":\"511071\"},{\"label\":\"隆昌市\",\"value\":\"511083\"}],[{\"label\":\"市中区\",\"value\":\"511102\"},{\"label\":\"沙湾区\",\"value\":\"511111\"},{\"label\":\"五通桥区\",\"value\":\"511112\"},{\"label\":\"金口河区\",\"value\":\"511113\"},{\"label\":\"犍为县\",\"value\":\"511123\"},{\"label\":\"井研县\",\"value\":\"511124\"},{\"label\":\"夹江县\",\"value\":\"511126\"},{\"label\":\"沐川县\",\"value\":\"511129\"},{\"label\":\"峨边彝族自治县\",\"value\":\"511132\"},{\"label\":\"马边彝族自治县\",\"value\":\"511133\"},{\"label\":\"峨眉山市\",\"value\":\"511181\"}],[{\"label\":\"顺庆区\",\"value\":\"511302\"},{\"label\":\"高坪区\",\"value\":\"511303\"},{\"label\":\"嘉陵区\",\"value\":\"511304\"},{\"label\":\"南部县\",\"value\":\"511321\"},{\"label\":\"营山县\",\"value\":\"511322\"},{\"label\":\"蓬安县\",\"value\":\"511323\"},{\"label\":\"仪陇县\",\"value\":\"511324\"},{\"label\":\"西充县\",\"value\":\"511325\"},{\"label\":\"阆中市\",\"value\":\"511381\"}],[{\"label\":\"东坡区\",\"value\":\"511402\"},{\"label\":\"彭山区\",\"value\":\"511403\"},{\"label\":\"仁寿县\",\"value\":\"511421\"},{\"label\":\"洪雅县\",\"value\":\"511423\"},{\"label\":\"丹棱县\",\"value\":\"511424\"},{\"label\":\"青神县\",\"value\":\"511425\"}],[{\"label\":\"翠屏区\",\"value\":\"511502\"},{\"label\":\"南溪区\",\"value\":\"511503\"},{\"label\":\"宜宾县\",\"value\":\"511521\"},{\"label\":\"江安县\",\"value\":\"511523\"},{\"label\":\"长宁县\",\"value\":\"511524\"},{\"label\":\"高县\",\"value\":\"511525\"},{\"label\":\"珙县\",\"value\":\"511526\"},{\"label\":\"筠连县\",\"value\":\"511527\"},{\"label\":\"兴文县\",\"value\":\"511528\"},{\"label\":\"屏山县\",\"value\":\"511529\"}],[{\"label\":\"广安区\",\"value\":\"511602\"},{\"label\":\"前锋区\",\"value\":\"511603\"},{\"label\":\"岳池县\",\"value\":\"511621\"},{\"label\":\"武胜县\",\"value\":\"511622\"},{\"label\":\"邻水县\",\"value\":\"511623\"},{\"label\":\"华蓥市\",\"value\":\"511681\"}],[{\"label\":\"通川区\",\"value\":\"511702\"},{\"label\":\"达川区\",\"value\":\"511703\"},{\"label\":\"宣汉县\",\"value\":\"511722\"},{\"label\":\"开江县\",\"value\":\"511723\"},{\"label\":\"大竹县\",\"value\":\"511724\"},{\"label\":\"渠县\",\"value\":\"511725\"},{\"label\":\"达州经济开发区\",\"value\":\"511771\"},{\"label\":\"万源市\",\"value\":\"511781\"}],[{\"label\":\"雨城区\",\"value\":\"511802\"},{\"label\":\"名山区\",\"value\":\"511803\"},{\"label\":\"荥经县\",\"value\":\"511822\"},{\"label\":\"汉源县\",\"value\":\"511823\"},{\"label\":\"石棉县\",\"value\":\"511824\"},{\"label\":\"天全县\",\"value\":\"511825\"},{\"label\":\"芦山县\",\"value\":\"511826\"},{\"label\":\"宝兴县\",\"value\":\"511827\"}],[{\"label\":\"巴州区\",\"value\":\"511902\"},{\"label\":\"恩阳区\",\"value\":\"511903\"},{\"label\":\"通江县\",\"value\":\"511921\"},{\"label\":\"南江县\",\"value\":\"511922\"},{\"label\":\"平昌县\",\"value\":\"511923\"},{\"label\":\"巴中经济开发区\",\"value\":\"511971\"}],[{\"label\":\"雁江区\",\"value\":\"512002\"},{\"label\":\"安岳县\",\"value\":\"512021\"},{\"label\":\"乐至县\",\"value\":\"512022\"}],[{\"label\":\"马尔康市\",\"value\":\"513201\"},{\"label\":\"汶川县\",\"value\":\"513221\"},{\"label\":\"理县\",\"value\":\"513222\"},{\"label\":\"茂县\",\"value\":\"513223\"},{\"label\":\"松潘县\",\"value\":\"513224\"},{\"label\":\"九寨沟县\",\"value\":\"513225\"},{\"label\":\"金川县\",\"value\":\"513226\"},{\"label\":\"小金县\",\"value\":\"513227\"},{\"label\":\"黑水县\",\"value\":\"513228\"},{\"label\":\"壤塘县\",\"value\":\"513230\"},{\"label\":\"阿坝县\",\"value\":\"513231\"},{\"label\":\"若尔盖县\",\"value\":\"513232\"},{\"label\":\"红原县\",\"value\":\"513233\"}],[{\"label\":\"康定市\",\"value\":\"513301\"},{\"label\":\"泸定县\",\"value\":\"513322\"},{\"label\":\"丹巴县\",\"value\":\"513323\"},{\"label\":\"九龙县\",\"value\":\"513324\"},{\"label\":\"雅江县\",\"value\":\"513325\"},{\"label\":\"道孚县\",\"value\":\"513326\"},{\"label\":\"炉霍县\",\"value\":\"513327\"},{\"label\":\"甘孜县\",\"value\":\"513328\"},{\"label\":\"新龙县\",\"value\":\"513329\"},{\"label\":\"德格县\",\"value\":\"513330\"},{\"label\":\"白玉县\",\"value\":\"513331\"},{\"label\":\"石渠县\",\"value\":\"513332\"},{\"label\":\"色达县\",\"value\":\"513333\"},{\"label\":\"理塘县\",\"value\":\"513334\"},{\"label\":\"巴塘县\",\"value\":\"513335\"},{\"label\":\"乡城县\",\"value\":\"513336\"},{\"label\":\"稻城县\",\"value\":\"513337\"},{\"label\":\"得荣县\",\"value\":\"513338\"}],[{\"label\":\"西昌市\",\"value\":\"513401\"},{\"label\":\"木里藏族自治县\",\"value\":\"513422\"},{\"label\":\"盐源县\",\"value\":\"513423\"},{\"label\":\"德昌县\",\"value\":\"513424\"},{\"label\":\"会理县\",\"value\":\"513425\"},{\"label\":\"会东县\",\"value\":\"513426\"},{\"label\":\"宁南县\",\"value\":\"513427\"},{\"label\":\"普格县\",\"value\":\"513428\"},{\"label\":\"布拖县\",\"value\":\"513429\"},{\"label\":\"金阳县\",\"value\":\"513430\"},{\"label\":\"昭觉县\",\"value\":\"513431\"},{\"label\":\"喜德县\",\"value\":\"513432\"},{\"label\":\"冕宁县\",\"value\":\"513433\"},{\"label\":\"越西县\",\"value\":\"513434\"},{\"label\":\"甘洛县\",\"value\":\"513435\"},{\"label\":\"美姑县\",\"value\":\"513436\"},{\"label\":\"雷波县\",\"value\":\"513437\"}]],[[{\"label\":\"南明区\",\"value\":\"520102\"},{\"label\":\"云岩区\",\"value\":\"520103\"},{\"label\":\"花溪区\",\"value\":\"520111\"},{\"label\":\"乌当区\",\"value\":\"520112\"},{\"label\":\"白云区\",\"value\":\"520113\"},{\"label\":\"观山湖区\",\"value\":\"520115\"},{\"label\":\"开阳县\",\"value\":\"520121\"},{\"label\":\"息烽县\",\"value\":\"520122\"},{\"label\":\"修文县\",\"value\":\"520123\"},{\"label\":\"清镇市\",\"value\":\"520181\"}],[{\"label\":\"钟山区\",\"value\":\"520201\"},{\"label\":\"六枝特区\",\"value\":\"520203\"},{\"label\":\"水城县\",\"value\":\"520221\"},{\"label\":\"盘州市\",\"value\":\"520281\"}],[{\"label\":\"红花岗区\",\"value\":\"520302\"},{\"label\":\"汇川区\",\"value\":\"520303\"},{\"label\":\"播州区\",\"value\":\"520304\"},{\"label\":\"桐梓县\",\"value\":\"520322\"},{\"label\":\"绥阳县\",\"value\":\"520323\"},{\"label\":\"正安县\",\"value\":\"520324\"},{\"label\":\"道真仡佬族苗族自治县\",\"value\":\"520325\"},{\"label\":\"务川仡佬族苗族自治县\",\"value\":\"520326\"},{\"label\":\"凤冈县\",\"value\":\"520327\"},{\"label\":\"湄潭县\",\"value\":\"520328\"},{\"label\":\"余庆县\",\"value\":\"520329\"},{\"label\":\"习水县\",\"value\":\"520330\"},{\"label\":\"赤水市\",\"value\":\"520381\"},{\"label\":\"仁怀市\",\"value\":\"520382\"}],[{\"label\":\"西秀区\",\"value\":\"520402\"},{\"label\":\"平坝区\",\"value\":\"520403\"},{\"label\":\"普定县\",\"value\":\"520422\"},{\"label\":\"镇宁布依族苗族自治县\",\"value\":\"520423\"},{\"label\":\"关岭布依族苗族自治县\",\"value\":\"520424\"},{\"label\":\"紫云苗族布依族自治县\",\"value\":\"520425\"}],[{\"label\":\"七星关区\",\"value\":\"520502\"},{\"label\":\"大方县\",\"value\":\"520521\"},{\"label\":\"黔西县\",\"value\":\"520522\"},{\"label\":\"金沙县\",\"value\":\"520523\"},{\"label\":\"织金县\",\"value\":\"520524\"},{\"label\":\"纳雍县\",\"value\":\"520525\"},{\"label\":\"威宁彝族回族苗族自治县\",\"value\":\"520526\"},{\"label\":\"赫章县\",\"value\":\"520527\"}],[{\"label\":\"碧江区\",\"value\":\"520602\"},{\"label\":\"万山区\",\"value\":\"520603\"},{\"label\":\"江口县\",\"value\":\"520621\"},{\"label\":\"玉屏侗族自治县\",\"value\":\"520622\"},{\"label\":\"石阡县\",\"value\":\"520623\"},{\"label\":\"思南县\",\"value\":\"520624\"},{\"label\":\"印江土家族苗族自治县\",\"value\":\"520625\"},{\"label\":\"德江县\",\"value\":\"520626\"},{\"label\":\"沿河土家族自治县\",\"value\":\"520627\"},{\"label\":\"松桃苗族自治县\",\"value\":\"520628\"}],[{\"label\":\"兴义市\",\"value\":\"522301\"},{\"label\":\"兴仁县\",\"value\":\"522322\"},{\"label\":\"普安县\",\"value\":\"522323\"},{\"label\":\"晴隆县\",\"value\":\"522324\"},{\"label\":\"贞丰县\",\"value\":\"522325\"},{\"label\":\"望谟县\",\"value\":\"522326\"},{\"label\":\"册亨县\",\"value\":\"522327\"},{\"label\":\"安龙县\",\"value\":\"522328\"}],[{\"label\":\"凯里市\",\"value\":\"522601\"},{\"label\":\"黄平县\",\"value\":\"522622\"},{\"label\":\"施秉县\",\"value\":\"522623\"},{\"label\":\"三穗县\",\"value\":\"522624\"},{\"label\":\"镇远县\",\"value\":\"522625\"},{\"label\":\"岑巩县\",\"value\":\"522626\"},{\"label\":\"天柱县\",\"value\":\"522627\"},{\"label\":\"锦屏县\",\"value\":\"522628\"},{\"label\":\"剑河县\",\"value\":\"522629\"},{\"label\":\"台江县\",\"value\":\"522630\"},{\"label\":\"黎平县\",\"value\":\"522631\"},{\"label\":\"榕江县\",\"value\":\"522632\"},{\"label\":\"从江县\",\"value\":\"522633\"},{\"label\":\"雷山县\",\"value\":\"522634\"},{\"label\":\"麻江县\",\"value\":\"522635\"},{\"label\":\"丹寨县\",\"value\":\"522636\"}],[{\"label\":\"都匀市\",\"value\":\"522701\"},{\"label\":\"福泉市\",\"value\":\"522702\"},{\"label\":\"荔波县\",\"value\":\"522722\"},{\"label\":\"贵定县\",\"value\":\"522723\"},{\"label\":\"瓮安县\",\"value\":\"522725\"},{\"label\":\"独山县\",\"value\":\"522726\"},{\"label\":\"平塘县\",\"value\":\"522727\"},{\"label\":\"罗甸县\",\"value\":\"522728\"},{\"label\":\"长顺县\",\"value\":\"522729\"},{\"label\":\"龙里县\",\"value\":\"522730\"},{\"label\":\"惠水县\",\"value\":\"522731\"},{\"label\":\"三都水族自治县\",\"value\":\"522732\"}]],[[{\"label\":\"五华区\",\"value\":\"530102\"},{\"label\":\"盘龙区\",\"value\":\"530103\"},{\"label\":\"官渡区\",\"value\":\"530111\"},{\"label\":\"西山区\",\"value\":\"530112\"},{\"label\":\"东川区\",\"value\":\"530113\"},{\"label\":\"呈贡区\",\"value\":\"530114\"},{\"label\":\"晋宁区\",\"value\":\"530115\"},{\"label\":\"富民县\",\"value\":\"530124\"},{\"label\":\"宜良县\",\"value\":\"530125\"},{\"label\":\"石林彝族自治县\",\"value\":\"530126\"},{\"label\":\"嵩明县\",\"value\":\"530127\"},{\"label\":\"禄劝彝族苗族自治县\",\"value\":\"530128\"},{\"label\":\"寻甸回族彝族自治县\",\"value\":\"530129\"},{\"label\":\"安宁市\",\"value\":\"530181\"}],[{\"label\":\"麒麟区\",\"value\":\"530302\"},{\"label\":\"沾益区\",\"value\":\"530303\"},{\"label\":\"马龙县\",\"value\":\"530321\"},{\"label\":\"陆良县\",\"value\":\"530322\"},{\"label\":\"师宗县\",\"value\":\"530323\"},{\"label\":\"罗平县\",\"value\":\"530324\"},{\"label\":\"富源县\",\"value\":\"530325\"},{\"label\":\"会泽县\",\"value\":\"530326\"},{\"label\":\"宣威市\",\"value\":\"530381\"}],[{\"label\":\"红塔区\",\"value\":\"530402\"},{\"label\":\"江川区\",\"value\":\"530403\"},{\"label\":\"澄江县\",\"value\":\"530422\"},{\"label\":\"通海县\",\"value\":\"530423\"},{\"label\":\"华宁县\",\"value\":\"530424\"},{\"label\":\"易门县\",\"value\":\"530425\"},{\"label\":\"峨山彝族自治县\",\"value\":\"530426\"},{\"label\":\"新平彝族傣族自治县\",\"value\":\"530427\"},{\"label\":\"元江哈尼族彝族傣族自治县\",\"value\":\"530428\"}],[{\"label\":\"隆阳区\",\"value\":\"530502\"},{\"label\":\"施甸县\",\"value\":\"530521\"},{\"label\":\"龙陵县\",\"value\":\"530523\"},{\"label\":\"昌宁县\",\"value\":\"530524\"},{\"label\":\"腾冲市\",\"value\":\"530581\"}],[{\"label\":\"昭阳区\",\"value\":\"530602\"},{\"label\":\"鲁甸县\",\"value\":\"530621\"},{\"label\":\"巧家县\",\"value\":\"530622\"},{\"label\":\"盐津县\",\"value\":\"530623\"},{\"label\":\"大关县\",\"value\":\"530624\"},{\"label\":\"永善县\",\"value\":\"530625\"},{\"label\":\"绥江县\",\"value\":\"530626\"},{\"label\":\"镇雄县\",\"value\":\"530627\"},{\"label\":\"彝良县\",\"value\":\"530628\"},{\"label\":\"威信县\",\"value\":\"530629\"},{\"label\":\"水富县\",\"value\":\"530630\"}],[{\"label\":\"古城区\",\"value\":\"530702\"},{\"label\":\"玉龙纳西族自治县\",\"value\":\"530721\"},{\"label\":\"永胜县\",\"value\":\"530722\"},{\"label\":\"华坪县\",\"value\":\"530723\"},{\"label\":\"宁蒗彝族自治县\",\"value\":\"530724\"}],[{\"label\":\"思茅区\",\"value\":\"530802\"},{\"label\":\"宁洱哈尼族彝族自治县\",\"value\":\"530821\"},{\"label\":\"墨江哈尼族自治县\",\"value\":\"530822\"},{\"label\":\"景东彝族自治县\",\"value\":\"530823\"},{\"label\":\"景谷傣族彝族自治县\",\"value\":\"530824\"},{\"label\":\"镇沅彝族哈尼族拉祜族自治县\",\"value\":\"530825\"},{\"label\":\"江城哈尼族彝族自治县\",\"value\":\"530826\"},{\"label\":\"孟连傣族拉祜族佤族自治县\",\"value\":\"530827\"},{\"label\":\"澜沧拉祜族自治县\",\"value\":\"530828\"},{\"label\":\"西盟佤族自治县\",\"value\":\"530829\"}],[{\"label\":\"临翔区\",\"value\":\"530902\"},{\"label\":\"凤庆县\",\"value\":\"530921\"},{\"label\":\"云县\",\"value\":\"530922\"},{\"label\":\"永德县\",\"value\":\"530923\"},{\"label\":\"镇康县\",\"value\":\"530924\"},{\"label\":\"双江拉祜族佤族布朗族傣族自治县\",\"value\":\"530925\"},{\"label\":\"耿马傣族佤族自治县\",\"value\":\"530926\"},{\"label\":\"沧源佤族自治县\",\"value\":\"530927\"}],[{\"label\":\"楚雄市\",\"value\":\"532301\"},{\"label\":\"双柏县\",\"value\":\"532322\"},{\"label\":\"牟定县\",\"value\":\"532323\"},{\"label\":\"南华县\",\"value\":\"532324\"},{\"label\":\"姚安县\",\"value\":\"532325\"},{\"label\":\"大姚县\",\"value\":\"532326\"},{\"label\":\"永仁县\",\"value\":\"532327\"},{\"label\":\"元谋县\",\"value\":\"532328\"},{\"label\":\"武定县\",\"value\":\"532329\"},{\"label\":\"禄丰县\",\"value\":\"532331\"}],[{\"label\":\"个旧市\",\"value\":\"532501\"},{\"label\":\"开远市\",\"value\":\"532502\"},{\"label\":\"蒙自市\",\"value\":\"532503\"},{\"label\":\"弥勒市\",\"value\":\"532504\"},{\"label\":\"屏边苗族自治县\",\"value\":\"532523\"},{\"label\":\"建水县\",\"value\":\"532524\"},{\"label\":\"石屏县\",\"value\":\"532525\"},{\"label\":\"泸西县\",\"value\":\"532527\"},{\"label\":\"元阳县\",\"value\":\"532528\"},{\"label\":\"红河县\",\"value\":\"532529\"},{\"label\":\"金平苗族瑶族傣族自治县\",\"value\":\"532530\"},{\"label\":\"绿春县\",\"value\":\"532531\"},{\"label\":\"河口瑶族自治县\",\"value\":\"532532\"}],[{\"label\":\"文山市\",\"value\":\"532601\"},{\"label\":\"砚山县\",\"value\":\"532622\"},{\"label\":\"西畴县\",\"value\":\"532623\"},{\"label\":\"麻栗坡县\",\"value\":\"532624\"},{\"label\":\"马关县\",\"value\":\"532625\"},{\"label\":\"丘北县\",\"value\":\"532626\"},{\"label\":\"广南县\",\"value\":\"532627\"},{\"label\":\"富宁县\",\"value\":\"532628\"}],[{\"label\":\"景洪市\",\"value\":\"532801\"},{\"label\":\"勐海县\",\"value\":\"532822\"},{\"label\":\"勐腊县\",\"value\":\"532823\"}],[{\"label\":\"大理市\",\"value\":\"532901\"},{\"label\":\"漾濞彝族自治县\",\"value\":\"532922\"},{\"label\":\"祥云县\",\"value\":\"532923\"},{\"label\":\"宾川县\",\"value\":\"532924\"},{\"label\":\"弥渡县\",\"value\":\"532925\"},{\"label\":\"南涧彝族自治县\",\"value\":\"532926\"},{\"label\":\"巍山彝族回族自治县\",\"value\":\"532927\"},{\"label\":\"永平县\",\"value\":\"532928\"},{\"label\":\"云龙县\",\"value\":\"532929\"},{\"label\":\"洱源县\",\"value\":\"532930\"},{\"label\":\"剑川县\",\"value\":\"532931\"},{\"label\":\"鹤庆县\",\"value\":\"532932\"}],[{\"label\":\"瑞丽市\",\"value\":\"533102\"},{\"label\":\"芒市\",\"value\":\"533103\"},{\"label\":\"梁河县\",\"value\":\"533122\"},{\"label\":\"盈江县\",\"value\":\"533123\"},{\"label\":\"陇川县\",\"value\":\"533124\"}],[{\"label\":\"泸水市\",\"value\":\"533301\"},{\"label\":\"福贡县\",\"value\":\"533323\"},{\"label\":\"贡山独龙族怒族自治县\",\"value\":\"533324\"},{\"label\":\"兰坪白族普米族自治县\",\"value\":\"533325\"}],[{\"label\":\"香格里拉市\",\"value\":\"533401\"},{\"label\":\"德钦县\",\"value\":\"533422\"},{\"label\":\"维西傈僳族自治县\",\"value\":\"533423\"}]],[[{\"label\":\"城关区\",\"value\":\"540102\"},{\"label\":\"堆龙德庆区\",\"value\":\"540103\"},{\"label\":\"林周县\",\"value\":\"540121\"},{\"label\":\"当雄县\",\"value\":\"540122\"},{\"label\":\"尼木县\",\"value\":\"540123\"},{\"label\":\"曲水县\",\"value\":\"540124\"},{\"label\":\"达孜县\",\"value\":\"540126\"},{\"label\":\"墨竹工卡县\",\"value\":\"540127\"},{\"label\":\"格尔木藏青工业园区\",\"value\":\"540171\"},{\"label\":\"拉萨经济技术开发区\",\"value\":\"540172\"},{\"label\":\"西藏文化旅游创意园区\",\"value\":\"540173\"},{\"label\":\"达孜工业园区\",\"value\":\"540174\"}],[{\"label\":\"桑珠孜区\",\"value\":\"540202\"},{\"label\":\"南木林县\",\"value\":\"540221\"},{\"label\":\"江孜县\",\"value\":\"540222\"},{\"label\":\"定日县\",\"value\":\"540223\"},{\"label\":\"萨迦县\",\"value\":\"540224\"},{\"label\":\"拉孜县\",\"value\":\"540225\"},{\"label\":\"昂仁县\",\"value\":\"540226\"},{\"label\":\"谢通门县\",\"value\":\"540227\"},{\"label\":\"白朗县\",\"value\":\"540228\"},{\"label\":\"仁布县\",\"value\":\"540229\"},{\"label\":\"康马县\",\"value\":\"540230\"},{\"label\":\"定结县\",\"value\":\"540231\"},{\"label\":\"仲巴县\",\"value\":\"540232\"},{\"label\":\"亚东县\",\"value\":\"540233\"},{\"label\":\"吉隆县\",\"value\":\"540234\"},{\"label\":\"聂拉木县\",\"value\":\"540235\"},{\"label\":\"萨嘎县\",\"value\":\"540236\"},{\"label\":\"岗巴县\",\"value\":\"540237\"}],[{\"label\":\"卡若区\",\"value\":\"540302\"},{\"label\":\"江达县\",\"value\":\"540321\"},{\"label\":\"贡觉县\",\"value\":\"540322\"},{\"label\":\"类乌齐县\",\"value\":\"540323\"},{\"label\":\"丁青县\",\"value\":\"540324\"},{\"label\":\"察雅县\",\"value\":\"540325\"},{\"label\":\"八宿县\",\"value\":\"540326\"},{\"label\":\"左贡县\",\"value\":\"540327\"},{\"label\":\"芒康县\",\"value\":\"540328\"},{\"label\":\"洛隆县\",\"value\":\"540329\"},{\"label\":\"边坝县\",\"value\":\"540330\"}],[{\"label\":\"巴宜区\",\"value\":\"540402\"},{\"label\":\"工布江达县\",\"value\":\"540421\"},{\"label\":\"米林县\",\"value\":\"540422\"},{\"label\":\"墨脱县\",\"value\":\"540423\"},{\"label\":\"波密县\",\"value\":\"540424\"},{\"label\":\"察隅县\",\"value\":\"540425\"},{\"label\":\"朗县\",\"value\":\"540426\"}],[{\"label\":\"乃东区\",\"value\":\"540502\"},{\"label\":\"扎囊县\",\"value\":\"540521\"},{\"label\":\"贡嘎县\",\"value\":\"540522\"},{\"label\":\"桑日县\",\"value\":\"540523\"},{\"label\":\"琼结县\",\"value\":\"540524\"},{\"label\":\"曲松县\",\"value\":\"540525\"},{\"label\":\"措美县\",\"value\":\"540526\"},{\"label\":\"洛扎县\",\"value\":\"540527\"},{\"label\":\"加查县\",\"value\":\"540528\"},{\"label\":\"隆子县\",\"value\":\"540529\"},{\"label\":\"错那县\",\"value\":\"540530\"},{\"label\":\"浪卡子县\",\"value\":\"540531\"}],[{\"label\":\"那曲县\",\"value\":\"542421\"},{\"label\":\"嘉黎县\",\"value\":\"542422\"},{\"label\":\"比如县\",\"value\":\"542423\"},{\"label\":\"聂荣县\",\"value\":\"542424\"},{\"label\":\"安多县\",\"value\":\"542425\"},{\"label\":\"申扎县\",\"value\":\"542426\"},{\"label\":\"索县\",\"value\":\"542427\"},{\"label\":\"班戈县\",\"value\":\"542428\"},{\"label\":\"巴青县\",\"value\":\"542429\"},{\"label\":\"尼玛县\",\"value\":\"542430\"},{\"label\":\"双湖县\",\"value\":\"542431\"}],[{\"label\":\"普兰县\",\"value\":\"542521\"},{\"label\":\"札达县\",\"value\":\"542522\"},{\"label\":\"噶尔县\",\"value\":\"542523\"},{\"label\":\"日土县\",\"value\":\"542524\"},{\"label\":\"革吉县\",\"value\":\"542525\"},{\"label\":\"改则县\",\"value\":\"542526\"},{\"label\":\"措勤县\",\"value\":\"542527\"}]],[[{\"label\":\"新城区\",\"value\":\"610102\"},{\"label\":\"碑林区\",\"value\":\"610103\"},{\"label\":\"莲湖区\",\"value\":\"610104\"},{\"label\":\"灞桥区\",\"value\":\"610111\"},{\"label\":\"未央区\",\"value\":\"610112\"},{\"label\":\"雁塔区\",\"value\":\"610113\"},{\"label\":\"阎良区\",\"value\":\"610114\"},{\"label\":\"临潼区\",\"value\":\"610115\"},{\"label\":\"长安区\",\"value\":\"610116\"},{\"label\":\"高陵区\",\"value\":\"610117\"},{\"label\":\"鄠邑区\",\"value\":\"610118\"},{\"label\":\"蓝田县\",\"value\":\"610122\"},{\"label\":\"周至县\",\"value\":\"610124\"}],[{\"label\":\"王益区\",\"value\":\"610202\"},{\"label\":\"印台区\",\"value\":\"610203\"},{\"label\":\"耀州区\",\"value\":\"610204\"},{\"label\":\"宜君县\",\"value\":\"610222\"}],[{\"label\":\"渭滨区\",\"value\":\"610302\"},{\"label\":\"金台区\",\"value\":\"610303\"},{\"label\":\"陈仓区\",\"value\":\"610304\"},{\"label\":\"凤翔县\",\"value\":\"610322\"},{\"label\":\"岐山县\",\"value\":\"610323\"},{\"label\":\"扶风县\",\"value\":\"610324\"},{\"label\":\"眉县\",\"value\":\"610326\"},{\"label\":\"陇县\",\"value\":\"610327\"},{\"label\":\"千阳县\",\"value\":\"610328\"},{\"label\":\"麟游县\",\"value\":\"610329\"},{\"label\":\"凤县\",\"value\":\"610330\"},{\"label\":\"太白县\",\"value\":\"610331\"}],[{\"label\":\"秦都区\",\"value\":\"610402\"},{\"label\":\"杨陵区\",\"value\":\"610403\"},{\"label\":\"渭城区\",\"value\":\"610404\"},{\"label\":\"三原县\",\"value\":\"610422\"},{\"label\":\"泾阳县\",\"value\":\"610423\"},{\"label\":\"乾县\",\"value\":\"610424\"},{\"label\":\"礼泉县\",\"value\":\"610425\"},{\"label\":\"永寿县\",\"value\":\"610426\"},{\"label\":\"彬县\",\"value\":\"610427\"},{\"label\":\"长武县\",\"value\":\"610428\"},{\"label\":\"旬邑县\",\"value\":\"610429\"},{\"label\":\"淳化县\",\"value\":\"610430\"},{\"label\":\"武功县\",\"value\":\"610431\"},{\"label\":\"兴平市\",\"value\":\"610481\"}],[{\"label\":\"临渭区\",\"value\":\"610502\"},{\"label\":\"华州区\",\"value\":\"610503\"},{\"label\":\"潼关县\",\"value\":\"610522\"},{\"label\":\"大荔县\",\"value\":\"610523\"},{\"label\":\"合阳县\",\"value\":\"610524\"},{\"label\":\"澄城县\",\"value\":\"610525\"},{\"label\":\"蒲城县\",\"value\":\"610526\"},{\"label\":\"白水县\",\"value\":\"610527\"},{\"label\":\"富平县\",\"value\":\"610528\"},{\"label\":\"韩城市\",\"value\":\"610581\"},{\"label\":\"华阴市\",\"value\":\"610582\"}],[{\"label\":\"宝塔区\",\"value\":\"610602\"},{\"label\":\"安塞区\",\"value\":\"610603\"},{\"label\":\"延长县\",\"value\":\"610621\"},{\"label\":\"延川县\",\"value\":\"610622\"},{\"label\":\"子长县\",\"value\":\"610623\"},{\"label\":\"志丹县\",\"value\":\"610625\"},{\"label\":\"吴起县\",\"value\":\"610626\"},{\"label\":\"甘泉县\",\"value\":\"610627\"},{\"label\":\"富县\",\"value\":\"610628\"},{\"label\":\"洛川县\",\"value\":\"610629\"},{\"label\":\"宜川县\",\"value\":\"610630\"},{\"label\":\"黄龙县\",\"value\":\"610631\"},{\"label\":\"黄陵县\",\"value\":\"610632\"}],[{\"label\":\"汉台区\",\"value\":\"610702\"},{\"label\":\"南郑区\",\"value\":\"610703\"},{\"label\":\"城固县\",\"value\":\"610722\"},{\"label\":\"洋县\",\"value\":\"610723\"},{\"label\":\"西乡县\",\"value\":\"610724\"},{\"label\":\"勉县\",\"value\":\"610725\"},{\"label\":\"宁强县\",\"value\":\"610726\"},{\"label\":\"略阳县\",\"value\":\"610727\"},{\"label\":\"镇巴县\",\"value\":\"610728\"},{\"label\":\"留坝县\",\"value\":\"610729\"},{\"label\":\"佛坪县\",\"value\":\"610730\"}],[{\"label\":\"榆阳区\",\"value\":\"610802\"},{\"label\":\"横山区\",\"value\":\"610803\"},{\"label\":\"府谷县\",\"value\":\"610822\"},{\"label\":\"靖边县\",\"value\":\"610824\"},{\"label\":\"定边县\",\"value\":\"610825\"},{\"label\":\"绥德县\",\"value\":\"610826\"},{\"label\":\"米脂县\",\"value\":\"610827\"},{\"label\":\"佳县\",\"value\":\"610828\"},{\"label\":\"吴堡县\",\"value\":\"610829\"},{\"label\":\"清涧县\",\"value\":\"610830\"},{\"label\":\"子洲县\",\"value\":\"610831\"},{\"label\":\"神木市\",\"value\":\"610881\"}],[{\"label\":\"汉滨区\",\"value\":\"610902\"},{\"label\":\"汉阴县\",\"value\":\"610921\"},{\"label\":\"石泉县\",\"value\":\"610922\"},{\"label\":\"宁陕县\",\"value\":\"610923\"},{\"label\":\"紫阳县\",\"value\":\"610924\"},{\"label\":\"岚皋县\",\"value\":\"610925\"},{\"label\":\"平利县\",\"value\":\"610926\"},{\"label\":\"镇坪县\",\"value\":\"610927\"},{\"label\":\"旬阳县\",\"value\":\"610928\"},{\"label\":\"白河县\",\"value\":\"610929\"}],[{\"label\":\"商州区\",\"value\":\"611002\"},{\"label\":\"洛南县\",\"value\":\"611021\"},{\"label\":\"丹凤县\",\"value\":\"611022\"},{\"label\":\"商南县\",\"value\":\"611023\"},{\"label\":\"山阳县\",\"value\":\"611024\"},{\"label\":\"镇安县\",\"value\":\"611025\"},{\"label\":\"柞水县\",\"value\":\"611026\"}]],[[{\"label\":\"城关区\",\"value\":\"620102\"},{\"label\":\"七里河区\",\"value\":\"620103\"},{\"label\":\"西固区\",\"value\":\"620104\"},{\"label\":\"安宁区\",\"value\":\"620105\"},{\"label\":\"红古区\",\"value\":\"620111\"},{\"label\":\"永登县\",\"value\":\"620121\"},{\"label\":\"皋兰县\",\"value\":\"620122\"},{\"label\":\"榆中县\",\"value\":\"620123\"},{\"label\":\"兰州新区\",\"value\":\"620171\"}],[{\"label\":\"嘉峪关市\",\"value\":\"620201\"}],[{\"label\":\"金川区\",\"value\":\"620302\"},{\"label\":\"永昌县\",\"value\":\"620321\"}],[{\"label\":\"白银区\",\"value\":\"620402\"},{\"label\":\"平川区\",\"value\":\"620403\"},{\"label\":\"靖远县\",\"value\":\"620421\"},{\"label\":\"会宁县\",\"value\":\"620422\"},{\"label\":\"景泰县\",\"value\":\"620423\"}],[{\"label\":\"秦州区\",\"value\":\"620502\"},{\"label\":\"麦积区\",\"value\":\"620503\"},{\"label\":\"清水县\",\"value\":\"620521\"},{\"label\":\"秦安县\",\"value\":\"620522\"},{\"label\":\"甘谷县\",\"value\":\"620523\"},{\"label\":\"武山县\",\"value\":\"620524\"},{\"label\":\"张家川回族自治县\",\"value\":\"620525\"}],[{\"label\":\"凉州区\",\"value\":\"620602\"},{\"label\":\"民勤县\",\"value\":\"620621\"},{\"label\":\"古浪县\",\"value\":\"620622\"},{\"label\":\"天祝藏族自治县\",\"value\":\"620623\"}],[{\"label\":\"甘州区\",\"value\":\"620702\"},{\"label\":\"肃南裕固族自治县\",\"value\":\"620721\"},{\"label\":\"民乐县\",\"value\":\"620722\"},{\"label\":\"临泽县\",\"value\":\"620723\"},{\"label\":\"高台县\",\"value\":\"620724\"},{\"label\":\"山丹县\",\"value\":\"620725\"}],[{\"label\":\"崆峒区\",\"value\":\"620802\"},{\"label\":\"泾川县\",\"value\":\"620821\"},{\"label\":\"灵台县\",\"value\":\"620822\"},{\"label\":\"崇信县\",\"value\":\"620823\"},{\"label\":\"华亭县\",\"value\":\"620824\"},{\"label\":\"庄浪县\",\"value\":\"620825\"},{\"label\":\"静宁县\",\"value\":\"620826\"},{\"label\":\"平凉工业园区\",\"value\":\"620871\"}],[{\"label\":\"肃州区\",\"value\":\"620902\"},{\"label\":\"金塔县\",\"value\":\"620921\"},{\"label\":\"瓜州县\",\"value\":\"620922\"},{\"label\":\"肃北蒙古族自治县\",\"value\":\"620923\"},{\"label\":\"阿克塞哈萨克族自治县\",\"value\":\"620924\"},{\"label\":\"玉门市\",\"value\":\"620981\"},{\"label\":\"敦煌市\",\"value\":\"620982\"}],[{\"label\":\"西峰区\",\"value\":\"621002\"},{\"label\":\"庆城县\",\"value\":\"621021\"},{\"label\":\"环县\",\"value\":\"621022\"},{\"label\":\"华池县\",\"value\":\"621023\"},{\"label\":\"合水县\",\"value\":\"621024\"},{\"label\":\"正宁县\",\"value\":\"621025\"},{\"label\":\"宁县\",\"value\":\"621026\"},{\"label\":\"镇原县\",\"value\":\"621027\"}],[{\"label\":\"安定区\",\"value\":\"621102\"},{\"label\":\"通渭县\",\"value\":\"621121\"},{\"label\":\"陇西县\",\"value\":\"621122\"},{\"label\":\"渭源县\",\"value\":\"621123\"},{\"label\":\"临洮县\",\"value\":\"621124\"},{\"label\":\"漳县\",\"value\":\"621125\"},{\"label\":\"岷县\",\"value\":\"621126\"}],[{\"label\":\"武都区\",\"value\":\"621202\"},{\"label\":\"成县\",\"value\":\"621221\"},{\"label\":\"文县\",\"value\":\"621222\"},{\"label\":\"宕昌县\",\"value\":\"621223\"},{\"label\":\"康县\",\"value\":\"621224\"},{\"label\":\"西和县\",\"value\":\"621225\"},{\"label\":\"礼县\",\"value\":\"621226\"},{\"label\":\"徽县\",\"value\":\"621227\"},{\"label\":\"两当县\",\"value\":\"621228\"}],[{\"label\":\"临夏市\",\"value\":\"622901\"},{\"label\":\"临夏县\",\"value\":\"622921\"},{\"label\":\"康乐县\",\"value\":\"622922\"},{\"label\":\"永靖县\",\"value\":\"622923\"},{\"label\":\"广河县\",\"value\":\"622924\"},{\"label\":\"和政县\",\"value\":\"622925\"},{\"label\":\"东乡族自治县\",\"value\":\"622926\"},{\"label\":\"积石山保安族东乡族撒拉族自治县\",\"value\":\"622927\"}],[{\"label\":\"合作市\",\"value\":\"623001\"},{\"label\":\"临潭县\",\"value\":\"623021\"},{\"label\":\"卓尼县\",\"value\":\"623022\"},{\"label\":\"舟曲县\",\"value\":\"623023\"},{\"label\":\"迭部县\",\"value\":\"623024\"},{\"label\":\"玛曲县\",\"value\":\"623025\"},{\"label\":\"碌曲县\",\"value\":\"623026\"},{\"label\":\"夏河县\",\"value\":\"623027\"}]],[[{\"label\":\"城东区\",\"value\":\"630102\"},{\"label\":\"城中区\",\"value\":\"630103\"},{\"label\":\"城西区\",\"value\":\"630104\"},{\"label\":\"城北区\",\"value\":\"630105\"},{\"label\":\"大通回族土族自治县\",\"value\":\"630121\"},{\"label\":\"湟中县\",\"value\":\"630122\"},{\"label\":\"湟源县\",\"value\":\"630123\"}],[{\"label\":\"乐都区\",\"value\":\"630202\"},{\"label\":\"平安区\",\"value\":\"630203\"},{\"label\":\"民和回族土族自治县\",\"value\":\"630222\"},{\"label\":\"互助土族自治县\",\"value\":\"630223\"},{\"label\":\"化隆回族自治县\",\"value\":\"630224\"},{\"label\":\"循化撒拉族自治县\",\"value\":\"630225\"}],[{\"label\":\"门源回族自治县\",\"value\":\"632221\"},{\"label\":\"祁连县\",\"value\":\"632222\"},{\"label\":\"海晏县\",\"value\":\"632223\"},{\"label\":\"刚察县\",\"value\":\"632224\"}],[{\"label\":\"同仁县\",\"value\":\"632321\"},{\"label\":\"尖扎县\",\"value\":\"632322\"},{\"label\":\"泽库县\",\"value\":\"632323\"},{\"label\":\"河南蒙古族自治县\",\"value\":\"632324\"}],[{\"label\":\"共和县\",\"value\":\"632521\"},{\"label\":\"同德县\",\"value\":\"632522\"},{\"label\":\"贵德县\",\"value\":\"632523\"},{\"label\":\"兴海县\",\"value\":\"632524\"},{\"label\":\"贵南县\",\"value\":\"632525\"}],[{\"label\":\"玛沁县\",\"value\":\"632621\"},{\"label\":\"班玛县\",\"value\":\"632622\"},{\"label\":\"甘德县\",\"value\":\"632623\"},{\"label\":\"达日县\",\"value\":\"632624\"},{\"label\":\"久治县\",\"value\":\"632625\"},{\"label\":\"玛多县\",\"value\":\"632626\"}],[{\"label\":\"玉树市\",\"value\":\"632701\"},{\"label\":\"杂多县\",\"value\":\"632722\"},{\"label\":\"称多县\",\"value\":\"632723\"},{\"label\":\"治多县\",\"value\":\"632724\"},{\"label\":\"囊谦县\",\"value\":\"632725\"},{\"label\":\"曲麻莱县\",\"value\":\"632726\"}],[{\"label\":\"格尔木市\",\"value\":\"632801\"},{\"label\":\"德令哈市\",\"value\":\"632802\"},{\"label\":\"乌兰县\",\"value\":\"632821\"},{\"label\":\"都兰县\",\"value\":\"632822\"},{\"label\":\"天峻县\",\"value\":\"632823\"},{\"label\":\"大柴旦行政委员会\",\"value\":\"632857\"},{\"label\":\"冷湖行政委员会\",\"value\":\"632858\"},{\"label\":\"茫崖行政委员会\",\"value\":\"632859\"}]],[[{\"label\":\"兴庆区\",\"value\":\"640104\"},{\"label\":\"西夏区\",\"value\":\"640105\"},{\"label\":\"金凤区\",\"value\":\"640106\"},{\"label\":\"永宁县\",\"value\":\"640121\"},{\"label\":\"贺兰县\",\"value\":\"640122\"},{\"label\":\"灵武市\",\"value\":\"640181\"}],[{\"label\":\"大武口区\",\"value\":\"640202\"},{\"label\":\"惠农区\",\"value\":\"640205\"},{\"label\":\"平罗县\",\"value\":\"640221\"}],[{\"label\":\"利通区\",\"value\":\"640302\"},{\"label\":\"红寺堡区\",\"value\":\"640303\"},{\"label\":\"盐池县\",\"value\":\"640323\"},{\"label\":\"同心县\",\"value\":\"640324\"},{\"label\":\"青铜峡市\",\"value\":\"640381\"}],[{\"label\":\"原州区\",\"value\":\"640402\"},{\"label\":\"西吉县\",\"value\":\"640422\"},{\"label\":\"隆德县\",\"value\":\"640423\"},{\"label\":\"泾源县\",\"value\":\"640424\"},{\"label\":\"彭阳县\",\"value\":\"640425\"}],[{\"label\":\"沙坡头区\",\"value\":\"640502\"},{\"label\":\"中宁县\",\"value\":\"640521\"},{\"label\":\"海原县\",\"value\":\"640522\"}]],[[{\"label\":\"天山区\",\"value\":\"650102\"},{\"label\":\"沙依巴克区\",\"value\":\"650103\"},{\"label\":\"新市区\",\"value\":\"650104\"},{\"label\":\"水磨沟区\",\"value\":\"650105\"},{\"label\":\"头屯河区\",\"value\":\"650106\"},{\"label\":\"达坂城区\",\"value\":\"650107\"},{\"label\":\"米东区\",\"value\":\"650109\"},{\"label\":\"乌鲁木齐县\",\"value\":\"650121\"},{\"label\":\"乌鲁木齐经济技术开发区\",\"value\":\"650171\"},{\"label\":\"乌鲁木齐高新技术产业开发区\",\"value\":\"650172\"}],[{\"label\":\"独山子区\",\"value\":\"650202\"},{\"label\":\"克拉玛依区\",\"value\":\"650203\"},{\"label\":\"白碱滩区\",\"value\":\"650204\"},{\"label\":\"乌尔禾区\",\"value\":\"650205\"}],[{\"label\":\"高昌区\",\"value\":\"650402\"},{\"label\":\"鄯善县\",\"value\":\"650421\"},{\"label\":\"托克逊县\",\"value\":\"650422\"}],[{\"label\":\"伊州区\",\"value\":\"650502\"},{\"label\":\"巴里坤哈萨克自治县\",\"value\":\"650521\"},{\"label\":\"伊吾县\",\"value\":\"650522\"}],[{\"label\":\"昌吉市\",\"value\":\"652301\"},{\"label\":\"阜康市\",\"value\":\"652302\"},{\"label\":\"呼图壁县\",\"value\":\"652323\"},{\"label\":\"玛纳斯县\",\"value\":\"652324\"},{\"label\":\"奇台县\",\"value\":\"652325\"},{\"label\":\"吉木萨尔县\",\"value\":\"652327\"},{\"label\":\"木垒哈萨克自治县\",\"value\":\"652328\"}],[{\"label\":\"博乐市\",\"value\":\"652701\"},{\"label\":\"阿拉山口市\",\"value\":\"652702\"},{\"label\":\"精河县\",\"value\":\"652722\"},{\"label\":\"温泉县\",\"value\":\"652723\"}],[{\"label\":\"库尔勒市\",\"value\":\"652801\"},{\"label\":\"轮台县\",\"value\":\"652822\"},{\"label\":\"尉犁县\",\"value\":\"652823\"},{\"label\":\"若羌县\",\"value\":\"652824\"},{\"label\":\"且末县\",\"value\":\"652825\"},{\"label\":\"焉耆回族自治县\",\"value\":\"652826\"},{\"label\":\"和静县\",\"value\":\"652827\"},{\"label\":\"和硕县\",\"value\":\"652828\"},{\"label\":\"博湖县\",\"value\":\"652829\"},{\"label\":\"库尔勒经济技术开发区\",\"value\":\"652871\"}],[{\"label\":\"阿克苏市\",\"value\":\"652901\"},{\"label\":\"温宿县\",\"value\":\"652922\"},{\"label\":\"库车县\",\"value\":\"652923\"},{\"label\":\"沙雅县\",\"value\":\"652924\"},{\"label\":\"新和县\",\"value\":\"652925\"},{\"label\":\"拜城县\",\"value\":\"652926\"},{\"label\":\"乌什县\",\"value\":\"652927\"},{\"label\":\"阿瓦提县\",\"value\":\"652928\"},{\"label\":\"柯坪县\",\"value\":\"652929\"}],[{\"label\":\"阿图什市\",\"value\":\"653001\"},{\"label\":\"阿克陶县\",\"value\":\"653022\"},{\"label\":\"阿合奇县\",\"value\":\"653023\"},{\"label\":\"乌恰县\",\"value\":\"653024\"}],[{\"label\":\"喀什市\",\"value\":\"653101\"},{\"label\":\"疏附县\",\"value\":\"653121\"},{\"label\":\"疏勒县\",\"value\":\"653122\"},{\"label\":\"英吉沙县\",\"value\":\"653123\"},{\"label\":\"泽普县\",\"value\":\"653124\"},{\"label\":\"莎车县\",\"value\":\"653125\"},{\"label\":\"叶城县\",\"value\":\"653126\"},{\"label\":\"麦盖提县\",\"value\":\"653127\"},{\"label\":\"岳普湖县\",\"value\":\"653128\"},{\"label\":\"伽师县\",\"value\":\"653129\"},{\"label\":\"巴楚县\",\"value\":\"653130\"},{\"label\":\"塔什库尔干塔吉克自治县\",\"value\":\"653131\"}],[{\"label\":\"和田市\",\"value\":\"653201\"},{\"label\":\"和田县\",\"value\":\"653221\"},{\"label\":\"墨玉县\",\"value\":\"653222\"},{\"label\":\"皮山县\",\"value\":\"653223\"},{\"label\":\"洛浦县\",\"value\":\"653224\"},{\"label\":\"策勒县\",\"value\":\"653225\"},{\"label\":\"于田县\",\"value\":\"653226\"},{\"label\":\"民丰县\",\"value\":\"653227\"}],[{\"label\":\"伊宁市\",\"value\":\"654002\"},{\"label\":\"奎屯市\",\"value\":\"654003\"},{\"label\":\"霍尔果斯市\",\"value\":\"654004\"},{\"label\":\"伊宁县\",\"value\":\"654021\"},{\"label\":\"察布查尔锡伯自治县\",\"value\":\"654022\"},{\"label\":\"霍城县\",\"value\":\"654023\"},{\"label\":\"巩留县\",\"value\":\"654024\"},{\"label\":\"新源县\",\"value\":\"654025\"},{\"label\":\"昭苏县\",\"value\":\"654026\"},{\"label\":\"特克斯县\",\"value\":\"654027\"},{\"label\":\"尼勒克县\",\"value\":\"654028\"}],[{\"label\":\"塔城市\",\"value\":\"654201\"},{\"label\":\"乌苏市\",\"value\":\"654202\"},{\"label\":\"额敏县\",\"value\":\"654221\"},{\"label\":\"沙湾县\",\"value\":\"654223\"},{\"label\":\"托里县\",\"value\":\"654224\"},{\"label\":\"裕民县\",\"value\":\"654225\"},{\"label\":\"和布克赛尔蒙古自治县\",\"value\":\"654226\"}],[{\"label\":\"阿勒泰市\",\"value\":\"654301\"},{\"label\":\"布尔津县\",\"value\":\"654321\"},{\"label\":\"富蕴县\",\"value\":\"654322\"},{\"label\":\"福海县\",\"value\":\"654323\"},{\"label\":\"哈巴河县\",\"value\":\"654324\"},{\"label\":\"青河县\",\"value\":\"654325\"},{\"label\":\"吉木乃县\",\"value\":\"654326\"}],[{\"label\":\"石河子市\",\"value\":\"659001\"},{\"label\":\"阿拉尔市\",\"value\":\"659002\"},{\"label\":\"图木舒克市\",\"value\":\"659003\"},{\"label\":\"五家渠市\",\"value\":\"659004\"},{\"label\":\"铁门关市\",\"value\":\"659006\"}]],[[{\"label\":\"台北\",\"value\":\"660101\"}],[{\"label\":\"高雄\",\"value\":\"660201\"}],[{\"label\":\"基隆\",\"value\":\"660301\"}],[{\"label\":\"台中\",\"value\":\"660401\"}],[{\"label\":\"台南\",\"value\":\"660501\"}],[{\"label\":\"新竹\",\"value\":\"660601\"}],[{\"label\":\"嘉义\",\"value\":\"660701\"}],[{\"label\":\"宜兰\",\"value\":\"660801\"}],[{\"label\":\"桃园\",\"value\":\"660901\"}],[{\"label\":\"苗栗\",\"value\":\"661001\"}],[{\"label\":\"彰化\",\"value\":\"661101\"}],[{\"label\":\"南投\",\"value\":\"661201\"}],[{\"label\":\"云林\",\"value\":\"661301\"}],[{\"label\":\"屏东\",\"value\":\"661401\"}],[{\"label\":\"台东\",\"value\":\"661501\"}],[{\"label\":\"花莲\",\"value\":\"661601\"}],[{\"label\":\"澎湖\",\"value\":\"661701\"}]],[[{\"label\":\"香港岛\",\"value\":\"670101\"}],[{\"label\":\"九龙\",\"value\":\"670201\"}],[{\"label\":\"新界\",\"value\":\"670301\"}]],[[{\"label\":\"澳门半岛\",\"value\":\"680101\"}],[{\"label\":\"氹仔岛\",\"value\":\"680201\"}],[{\"label\":\"路环岛\",\"value\":\"680301\"}],[{\"label\":\"路氹城\",\"value\":\"680401\"}]]];export default areaData;"
  },
  {
    "path": "uview-ui/libs/util/async-validator.js",
    "content": "function _extends() {\n\t_extends = Object.assign || function(target) {\n\t\tfor (var i = 1; i < arguments.length; i++) {\n\t\t\tvar source = arguments[i];\n\n\t\t\tfor (var key in source) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(source, key)) {\n\t\t\t\t\ttarget[key] = source[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn target;\n\t};\n\n\treturn _extends.apply(this, arguments);\n}\n\n/* eslint no-console:0 */\nvar formatRegExp = /%[sdj%]/g;\nvar warning = function warning() {}; // don't print warning message when in production env or node runtime\n\nif (typeof process !== 'undefined' && process.env && process.env.NODE_ENV !== 'production' && typeof window !==\n\t'undefined' && typeof document !== 'undefined') {\n\twarning = function warning(type, errors) {\n\t\tif (typeof console !== 'undefined' && console.warn) {\n\t\t\tif (errors.every(function(e) {\n\t\t\t\t\treturn typeof e === 'string';\n\t\t\t\t})) {\n\t\t\t\tconsole.warn(type, errors);\n\t\t\t}\n\t\t}\n\t};\n}\n\nfunction convertFieldsError(errors) {\n\tif (!errors || !errors.length) return null;\n\tvar fields = {};\n\terrors.forEach(function(error) {\n\t\tvar field = error.field;\n\t\tfields[field] = fields[field] || [];\n\t\tfields[field].push(error);\n\t});\n\treturn fields;\n}\n\nfunction format() {\n\tfor (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n\t\targs[_key] = arguments[_key];\n\t}\n\n\tvar i = 1;\n\tvar f = args[0];\n\tvar len = args.length;\n\n\tif (typeof f === 'function') {\n\t\treturn f.apply(null, args.slice(1));\n\t}\n\n\tif (typeof f === 'string') {\n\t\tvar str = String(f).replace(formatRegExp, function(x) {\n\t\t\tif (x === '%%') {\n\t\t\t\treturn '%';\n\t\t\t}\n\n\t\t\tif (i >= len) {\n\t\t\t\treturn x;\n\t\t\t}\n\n\t\t\tswitch (x) {\n\t\t\t\tcase '%s':\n\t\t\t\t\treturn String(args[i++]);\n\n\t\t\t\tcase '%d':\n\t\t\t\t\treturn Number(args[i++]);\n\n\t\t\t\tcase '%j':\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn JSON.stringify(args[i++]);\n\t\t\t\t\t} catch (_) {\n\t\t\t\t\t\treturn '[Circular]';\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\treturn x;\n\t\t\t}\n\t\t});\n\n\t\tfor (var arg = args[i]; i < len; arg = args[++i]) {\n\t\t\tstr += \" \" + arg;\n\t\t}\n\n\t\treturn str;\n\t}\n\n\treturn f;\n}\n\nfunction isNativeStringType(type) {\n\treturn type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'pattern';\n}\n\nfunction isEmptyValue(value, type) {\n\tif (value === undefined || value === null) {\n\t\treturn true;\n\t}\n\n\tif (type === 'array' && Array.isArray(value) && !value.length) {\n\t\treturn true;\n\t}\n\n\tif (isNativeStringType(type) && typeof value === 'string' && !value) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction asyncParallelArray(arr, func, callback) {\n\tvar results = [];\n\tvar total = 0;\n\tvar arrLength = arr.length;\n\n\tfunction count(errors) {\n\t\tresults.push.apply(results, errors);\n\t\ttotal++;\n\n\t\tif (total === arrLength) {\n\t\t\tcallback(results);\n\t\t}\n\t}\n\n\tarr.forEach(function(a) {\n\t\tfunc(a, count);\n\t});\n}\n\nfunction asyncSerialArray(arr, func, callback) {\n\tvar index = 0;\n\tvar arrLength = arr.length;\n\n\tfunction next(errors) {\n\t\tif (errors && errors.length) {\n\t\t\tcallback(errors);\n\t\t\treturn;\n\t\t}\n\n\t\tvar original = index;\n\t\tindex = index + 1;\n\n\t\tif (original < arrLength) {\n\t\t\tfunc(arr[original], next);\n\t\t} else {\n\t\t\tcallback([]);\n\t\t}\n\t}\n\n\tnext([]);\n}\n\nfunction flattenObjArr(objArr) {\n\tvar ret = [];\n\tObject.keys(objArr).forEach(function(k) {\n\t\tret.push.apply(ret, objArr[k]);\n\t});\n\treturn ret;\n}\n\nfunction asyncMap(objArr, option, func, callback) {\n\tif (option.first) {\n\t\tvar _pending = new Promise(function(resolve, reject) {\n\t\t\tvar next = function next(errors) {\n\t\t\t\tcallback(errors);\n\t\t\t\treturn errors.length ? reject({\n\t\t\t\t\terrors: errors,\n\t\t\t\t\tfields: convertFieldsError(errors)\n\t\t\t\t}) : resolve();\n\t\t\t};\n\n\t\t\tvar flattenArr = flattenObjArr(objArr);\n\t\t\tasyncSerialArray(flattenArr, func, next);\n\t\t});\n\n\t\t_pending[\"catch\"](function(e) {\n\t\t\treturn e;\n\t\t});\n\n\t\treturn _pending;\n\t}\n\n\tvar firstFields = option.firstFields || [];\n\n\tif (firstFields === true) {\n\t\tfirstFields = Object.keys(objArr);\n\t}\n\n\tvar objArrKeys = Object.keys(objArr);\n\tvar objArrLength = objArrKeys.length;\n\tvar total = 0;\n\tvar results = [];\n\tvar pending = new Promise(function(resolve, reject) {\n\t\tvar next = function next(errors) {\n\t\t\tresults.push.apply(results, errors);\n\t\t\ttotal++;\n\n\t\t\tif (total === objArrLength) {\n\t\t\t\tcallback(results);\n\t\t\t\treturn results.length ? reject({\n\t\t\t\t\terrors: results,\n\t\t\t\t\tfields: convertFieldsError(results)\n\t\t\t\t}) : resolve();\n\t\t\t}\n\t\t};\n\n\t\tif (!objArrKeys.length) {\n\t\t\tcallback(results);\n\t\t\tresolve();\n\t\t}\n\n\t\tobjArrKeys.forEach(function(key) {\n\t\t\tvar arr = objArr[key];\n\n\t\t\tif (firstFields.indexOf(key) !== -1) {\n\t\t\t\tasyncSerialArray(arr, func, next);\n\t\t\t} else {\n\t\t\t\tasyncParallelArray(arr, func, next);\n\t\t\t}\n\t\t});\n\t});\n\tpending[\"catch\"](function(e) {\n\t\treturn e;\n\t});\n\treturn pending;\n}\n\nfunction complementError(rule) {\n\treturn function(oe) {\n\t\tif (oe && oe.message) {\n\t\t\toe.field = oe.field || rule.fullField;\n\t\t\treturn oe;\n\t\t}\n\n\t\treturn {\n\t\t\tmessage: typeof oe === 'function' ? oe() : oe,\n\t\t\tfield: oe.field || rule.fullField\n\t\t};\n\t};\n}\n\nfunction deepMerge(target, source) {\n\tif (source) {\n\t\tfor (var s in source) {\n\t\t\tif (source.hasOwnProperty(s)) {\n\t\t\t\tvar value = source[s];\n\n\t\t\t\tif (typeof value === 'object' && typeof target[s] === 'object') {\n\t\t\t\t\ttarget[s] = _extends({}, target[s], {}, value);\n\t\t\t\t} else {\n\t\t\t\t\ttarget[s] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn target;\n}\n\n/**\n *  Rule for validating required fields.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction required(rule, value, source, errors, options, type) {\n\tif (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type || rule.type))) {\n\t\terrors.push(format(options.messages.required, rule.fullField));\n\t}\n}\n\n/**\n *  Rule for validating whitespace.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction whitespace(rule, value, source, errors, options) {\n\tif (/^\\s+$/.test(value) || value === '') {\n\t\terrors.push(format(options.messages.whitespace, rule.fullField));\n\t}\n}\n\n/* eslint max-len:0 */\n\nvar pattern = {\n\t// http://emailregex.com/\n\temail: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n\turl: new RegExp(\n\t\t\"^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\\\S+(?::\\\\S*)?@)?(?:(?:(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}(?:\\\\.(?:[0-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))|(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,})))|localhost)(?::\\\\d{2,5})?(?:(/|\\\\?|#)[^\\\\s]*)?$\",\n\t\t'i'),\n\thex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i\n};\nvar types = {\n\tinteger: function integer(value) {\n\t\treturn types.number(value) && parseInt(value, 10) === value;\n\t},\n\t\"float\": function float(value) {\n\t\treturn types.number(value) && !types.integer(value);\n\t},\n\tarray: function array(value) {\n\t\treturn Array.isArray(value);\n\t},\n\tregexp: function regexp(value) {\n\t\tif (value instanceof RegExp) {\n\t\t\treturn true;\n\t\t}\n\n\t\ttry {\n\t\t\treturn !!new RegExp(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t},\n\tdate: function date(value) {\n\t\treturn typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear ===\n\t\t\t'function';\n\t},\n\tnumber: function number(value) {\n\t\tif (isNaN(value)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// 修改源码，将字符串数值先转为数值\n\t\treturn typeof +value === 'number';\n\t},\n\tobject: function object(value) {\n\t\treturn typeof value === 'object' && !types.array(value);\n\t},\n\tmethod: function method(value) {\n\t\treturn typeof value === 'function';\n\t},\n\temail: function email(value) {\n\t\treturn typeof value === 'string' && !!value.match(pattern.email) && value.length < 255;\n\t},\n\turl: function url(value) {\n\t\treturn typeof value === 'string' && !!value.match(pattern.url);\n\t},\n\thex: function hex(value) {\n\t\treturn typeof value === 'string' && !!value.match(pattern.hex);\n\t}\n};\n/**\n *  Rule for validating the type of a value.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction type(rule, value, source, errors, options) {\n\tif (rule.required && value === undefined) {\n\t\trequired(rule, value, source, errors, options);\n\t\treturn;\n\t}\n\n\tvar custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'];\n\tvar ruleType = rule.type;\n\n\tif (custom.indexOf(ruleType) > -1) {\n\t\tif (!types[ruleType](value)) {\n\t\t\terrors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));\n\t\t} // straight typeof check\n\n\t} else if (ruleType && typeof value !== rule.type) {\n\t\terrors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));\n\t}\n}\n\n/**\n *  Rule for validating minimum and maximum allowed values.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction range(rule, value, source, errors, options) {\n\tvar len = typeof rule.len === 'number';\n\tvar min = typeof rule.min === 'number';\n\tvar max = typeof rule.max === 'number'; // 正则匹配码点范围从U+010000一直到U+10FFFF的文字（补充平面Supplementary Plane）\n\n\tvar spRegexp = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n\tvar val = value;\n\tvar key = null;\n\tvar num = typeof value === 'number';\n\tvar str = typeof value === 'string';\n\tvar arr = Array.isArray(value);\n\n\tif (num) {\n\t\tkey = 'number';\n\t} else if (str) {\n\t\tkey = 'string';\n\t} else if (arr) {\n\t\tkey = 'array';\n\t} // if the value is not of a supported type for range validation\n\t// the validation rule rule should use the\n\t// type property to also test for a particular type\n\n\n\tif (!key) {\n\t\treturn false;\n\t}\n\n\tif (arr) {\n\t\tval = value.length;\n\t}\n\n\tif (str) {\n\t\t// 处理码点大于U+010000的文字length属性不准确的bug，如\"𠮷𠮷𠮷\".length !== 3\n\t\tval = value.replace(spRegexp, '_').length;\n\t}\n\n\tif (len) {\n\t\tif (val !== rule.len) {\n\t\t\terrors.push(format(options.messages[key].len, rule.fullField, rule.len));\n\t\t}\n\t} else if (min && !max && val < rule.min) {\n\t\terrors.push(format(options.messages[key].min, rule.fullField, rule.min));\n\t} else if (max && !min && val > rule.max) {\n\t\terrors.push(format(options.messages[key].max, rule.fullField, rule.max));\n\t} else if (min && max && (val < rule.min || val > rule.max)) {\n\t\terrors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max));\n\t}\n}\n\nvar ENUM = 'enum';\n/**\n *  Rule for validating a value exists in an enumerable list.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction enumerable(rule, value, source, errors, options) {\n\trule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];\n\n\tif (rule[ENUM].indexOf(value) === -1) {\n\t\terrors.push(format(options.messages[ENUM], rule.fullField, rule[ENUM].join(', ')));\n\t}\n}\n\n/**\n *  Rule for validating a regular expression pattern.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction pattern$1(rule, value, source, errors, options) {\n\tif (rule.pattern) {\n\t\tif (rule.pattern instanceof RegExp) {\n\t\t\t// if a RegExp instance is passed, reset `lastIndex` in case its `global`\n\t\t\t// flag is accidentally set to `true`, which in a validation scenario\n\t\t\t// is not necessary and the result might be misleading\n\t\t\trule.pattern.lastIndex = 0;\n\n\t\t\tif (!rule.pattern.test(value)) {\n\t\t\t\terrors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));\n\t\t\t}\n\t\t} else if (typeof rule.pattern === 'string') {\n\t\t\tvar _pattern = new RegExp(rule.pattern);\n\n\t\t\tif (!_pattern.test(value)) {\n\t\t\t\terrors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar rules = {\n\trequired: required,\n\twhitespace: whitespace,\n\ttype: type,\n\trange: range,\n\t\"enum\": enumerable,\n\tpattern: pattern$1\n};\n\n/**\n *  Performs validation for string types.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction string(rule, value, callback, source, options) {\n\tvar errors = [];\n\tvar validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n\tif (validate) {\n\t\tif (isEmptyValue(value, 'string') && !rule.required) {\n\t\t\treturn callback();\n\t\t}\n\n\t\trules.required(rule, value, source, errors, options, 'string');\n\n\t\tif (!isEmptyValue(value, 'string')) {\n\t\t\trules.type(rule, value, source, errors, options);\n\t\t\trules.range(rule, value, source, errors, options);\n\t\t\trules.pattern(rule, value, source, errors, options);\n\n\t\t\tif (rule.whitespace === true) {\n\t\t\t\trules.whitespace(rule, value, source, errors, options);\n\t\t\t}\n\t\t}\n\t}\n\n\tcallback(errors);\n}\n\n/**\n *  Validates a function.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction method(rule, value, callback, source, options) {\n\tvar errors = [];\n\tvar validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n\tif (validate) {\n\t\tif (isEmptyValue(value) && !rule.required) {\n\t\t\treturn callback();\n\t\t}\n\n\t\trules.required(rule, value, source, errors, options);\n\n\t\tif (value !== undefined) {\n\t\t\trules.type(rule, value, source, errors, options);\n\t\t}\n\t}\n\n\tcallback(errors);\n}\n\n/**\n *  Validates a number.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction number(rule, value, callback, source, options) {\n\tvar errors = [];\n\tvar validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n\tif (validate) {\n\t\tif (value === '') {\n\t\t\tvalue = undefined;\n\t\t}\n\n\t\tif (isEmptyValue(value) && !rule.required) {\n\t\t\treturn callback();\n\t\t}\n\n\t\trules.required(rule, value, source, errors, options);\n\n\t\tif (value !== undefined) {\n\t\t\trules.type(rule, value, source, errors, options);\n\t\t\trules.range(rule, value, source, errors, options);\n\t\t}\n\t}\n\n\tcallback(errors);\n}\n\n/**\n *  Validates a boolean.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction _boolean(rule, value, callback, source, options) {\n\tvar errors = [];\n\tvar validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n\tif (validate) {\n\t\tif (isEmptyValue(value) && !rule.required) {\n\t\t\treturn callback();\n\t\t}\n\n\t\trules.required(rule, value, source, errors, options);\n\n\t\tif (value !== undefined) {\n\t\t\trules.type(rule, value, source, errors, options);\n\t\t}\n\t}\n\n\tcallback(errors);\n}\n\n/**\n *  Validates the regular expression type.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction regexp(rule, value, callback, source, options) {\n\tvar errors = [];\n\tvar validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n\tif (validate) {\n\t\tif (isEmptyValue(value) && !rule.required) {\n\t\t\treturn callback();\n\t\t}\n\n\t\trules.required(rule, value, source, errors, options);\n\n\t\tif (!isEmptyValue(value)) {\n\t\t\trules.type(rule, value, source, errors, options);\n\t\t}\n\t}\n\n\tcallback(errors);\n}\n\n/**\n *  Validates a number is an integer.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction integer(rule, value, callback, source, options) {\n\tvar errors = [];\n\tvar validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n\tif (validate) {\n\t\tif (isEmptyValue(value) && !rule.required) {\n\t\t\treturn callback();\n\t\t}\n\n\t\trules.required(rule, value, source, errors, options);\n\n\t\tif (value !== undefined) {\n\t\t\trules.type(rule, value, source, errors, options);\n\t\t\trules.range(rule, value, source, errors, options);\n\t\t}\n\t}\n\n\tcallback(errors);\n}\n\n/**\n *  Validates a number is a floating point number.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction floatFn(rule, value, callback, source, options) {\n\tvar errors = [];\n\tvar validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n\tif (validate) {\n\t\tif (isEmptyValue(value) && !rule.required) {\n\t\t\treturn callback();\n\t\t}\n\n\t\trules.required(rule, value, source, errors, options);\n\n\t\tif (value !== undefined) {\n\t\t\trules.type(rule, value, source, errors, options);\n\t\t\trules.range(rule, value, source, errors, options);\n\t\t}\n\t}\n\n\tcallback(errors);\n}\n\n/**\n *  Validates an array.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction array(rule, value, callback, source, options) {\n\tvar errors = [];\n\tvar validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n\tif (validate) {\n\t\tif (isEmptyValue(value, 'array') && !rule.required) {\n\t\t\treturn callback();\n\t\t}\n\n\t\trules.required(rule, value, source, errors, options, 'array');\n\n\t\tif (!isEmptyValue(value, 'array')) {\n\t\t\trules.type(rule, value, source, errors, options);\n\t\t\trules.range(rule, value, source, errors, options);\n\t\t}\n\t}\n\n\tcallback(errors);\n}\n\n/**\n *  Validates an object.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction object(rule, value, callback, source, options) {\n\tvar errors = [];\n\tvar validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n\tif (validate) {\n\t\tif (isEmptyValue(value) && !rule.required) {\n\t\t\treturn callback();\n\t\t}\n\n\t\trules.required(rule, value, source, errors, options);\n\n\t\tif (value !== undefined) {\n\t\t\trules.type(rule, value, source, errors, options);\n\t\t}\n\t}\n\n\tcallback(errors);\n}\n\nvar ENUM$1 = 'enum';\n/**\n *  Validates an enumerable list.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction enumerable$1(rule, value, callback, source, options) {\n\tvar errors = [];\n\tvar validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n\tif (validate) {\n\t\tif (isEmptyValue(value) && !rule.required) {\n\t\t\treturn callback();\n\t\t}\n\n\t\trules.required(rule, value, source, errors, options);\n\n\t\tif (value !== undefined) {\n\t\t\trules[ENUM$1](rule, value, source, errors, options);\n\t\t}\n\t}\n\n\tcallback(errors);\n}\n\n/**\n *  Validates a regular expression pattern.\n *\n *  Performs validation when a rule only contains\n *  a pattern property but is not declared as a string type.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction pattern$2(rule, value, callback, source, options) {\n\tvar errors = [];\n\tvar validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n\tif (validate) {\n\t\tif (isEmptyValue(value, 'string') && !rule.required) {\n\t\t\treturn callback();\n\t\t}\n\n\t\trules.required(rule, value, source, errors, options);\n\n\t\tif (!isEmptyValue(value, 'string')) {\n\t\t\trules.pattern(rule, value, source, errors, options);\n\t\t}\n\t}\n\n\tcallback(errors);\n}\n\nfunction date(rule, value, callback, source, options) {\n\tvar errors = [];\n\tvar validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); \n\n\tif (validate) {\n\t\tif (isEmptyValue(value) && !rule.required) {\n\t\t\treturn callback();\n\t\t}\n\n\t\trules.required(rule, value, source, errors, options);\n\n\t\tif (!isEmptyValue(value)) {\n\t\t\tvar dateObject;\n\n\t\t\tif (typeof value === 'number') {\n\t\t\t\tdateObject = new Date(value);\n\t\t\t} else {\n\t\t\t\tdateObject = value;\n\t\t\t}\n\n\t\t\trules.type(rule, dateObject, source, errors, options);\n\n\t\t\tif (dateObject) {\n\t\t\t\trules.range(rule, dateObject.getTime(), source, errors, options);\n\t\t\t}\n\t\t}\n\t}\n\n\tcallback(errors);\n}\n\nfunction required$1(rule, value, callback, source, options) {\n\tvar errors = [];\n\tvar type = Array.isArray(value) ? 'array' : typeof value;\n\trules.required(rule, value, source, errors, options, type);\n\tcallback(errors);\n}\n\nfunction type$1(rule, value, callback, source, options) {\n\tvar ruleType = rule.type;\n\tvar errors = [];\n\tvar validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n\tif (validate) {\n\t\tif (isEmptyValue(value, ruleType) && !rule.required) {\n\t\t\treturn callback();\n\t\t}\n\n\t\trules.required(rule, value, source, errors, options, ruleType);\n\n\t\tif (!isEmptyValue(value, ruleType)) {\n\t\t\trules.type(rule, value, source, errors, options);\n\t\t}\n\t}\n\n\tcallback(errors);\n}\n\n/**\n *  Performs validation for any type.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction any(rule, value, callback, source, options) {\n\tvar errors = [];\n\tvar validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n\tif (validate) {\n\t\tif (isEmptyValue(value) && !rule.required) {\n\t\t\treturn callback();\n\t\t}\n\n\t\trules.required(rule, value, source, errors, options);\n\t}\n\n\tcallback(errors);\n}\n\nvar validators = {\n\tstring: string,\n\tmethod: method,\n\tnumber: number,\n\t\"boolean\": _boolean,\n\tregexp: regexp,\n\tinteger: integer,\n\t\"float\": floatFn,\n\tarray: array,\n\tobject: object,\n\t\"enum\": enumerable$1,\n\tpattern: pattern$2,\n\tdate: date,\n\turl: type$1,\n\thex: type$1,\n\temail: type$1,\n\trequired: required$1,\n\tany: any\n};\n\nfunction newMessages() {\n\treturn {\n\t\t\"default\": 'Validation error on field %s',\n\t\trequired: '%s is required',\n\t\t\"enum\": '%s must be one of %s',\n\t\twhitespace: '%s cannot be empty',\n\t\tdate: {\n\t\t\tformat: '%s date %s is invalid for format %s',\n\t\t\tparse: '%s date could not be parsed, %s is invalid ',\n\t\t\tinvalid: '%s date %s is invalid'\n\t\t},\n\t\ttypes: {\n\t\t\tstring: '%s is not a %s',\n\t\t\tmethod: '%s is not a %s (function)',\n\t\t\tarray: '%s is not an %s',\n\t\t\tobject: '%s is not an %s',\n\t\t\tnumber: '%s is not a %s',\n\t\t\tdate: '%s is not a %s',\n\t\t\t\"boolean\": '%s is not a %s',\n\t\t\tinteger: '%s is not an %s',\n\t\t\t\"float\": '%s is not a %s',\n\t\t\tregexp: '%s is not a valid %s',\n\t\t\temail: '%s is not a valid %s',\n\t\t\turl: '%s is not a valid %s',\n\t\t\thex: '%s is not a valid %s'\n\t\t},\n\t\tstring: {\n\t\t\tlen: '%s must be exactly %s characters',\n\t\t\tmin: '%s must be at least %s characters',\n\t\t\tmax: '%s cannot be longer than %s characters',\n\t\t\trange: '%s must be between %s and %s characters'\n\t\t},\n\t\tnumber: {\n\t\t\tlen: '%s must equal %s',\n\t\t\tmin: '%s cannot be less than %s',\n\t\t\tmax: '%s cannot be greater than %s',\n\t\t\trange: '%s must be between %s and %s'\n\t\t},\n\t\tarray: {\n\t\t\tlen: '%s must be exactly %s in length',\n\t\t\tmin: '%s cannot be less than %s in length',\n\t\t\tmax: '%s cannot be greater than %s in length',\n\t\t\trange: '%s must be between %s and %s in length'\n\t\t},\n\t\tpattern: {\n\t\t\tmismatch: '%s value %s does not match pattern %s'\n\t\t},\n\t\tclone: function clone() {\n\t\t\tvar cloned = JSON.parse(JSON.stringify(this));\n\t\t\tcloned.clone = this.clone;\n\t\t\treturn cloned;\n\t\t}\n\t};\n}\nvar messages = newMessages();\n\n/**\n *  Encapsulates a validation schema.\n *\n *  @param descriptor An object declaring validation rules\n *  for this schema.\n */\n\nfunction Schema(descriptor) {\n\tthis.rules = null;\n\tthis._messages = messages;\n\tthis.define(descriptor);\n}\n\nSchema.prototype = {\n\tmessages: function messages(_messages) {\n\t\tif (_messages) {\n\t\t\tthis._messages = deepMerge(newMessages(), _messages);\n\t\t}\n\n\t\treturn this._messages;\n\t},\n\tdefine: function define(rules) {\n\t\tif (!rules) {\n\t\t\tthrow new Error('Cannot configure a schema with no rules');\n\t\t}\n\n\t\tif (typeof rules !== 'object' || Array.isArray(rules)) {\n\t\t\tthrow new Error('Rules must be an object');\n\t\t}\n\n\t\tthis.rules = {};\n\t\tvar z;\n\t\tvar item;\n\n\t\tfor (z in rules) {\n\t\t\tif (rules.hasOwnProperty(z)) {\n\t\t\t\titem = rules[z];\n\t\t\t\tthis.rules[z] = Array.isArray(item) ? item : [item];\n\t\t\t}\n\t\t}\n\t},\n\tvalidate: function validate(source_, o, oc) {\n\t\tvar _this = this;\n\n\t\tif (o === void 0) {\n\t\t\to = {};\n\t\t}\n\n\t\tif (oc === void 0) {\n\t\t\toc = function oc() {};\n\t\t}\n\n\t\tvar source = source_;\n\t\tvar options = o;\n\t\tvar callback = oc;\n\n\t\tif (typeof options === 'function') {\n\t\t\tcallback = options;\n\t\t\toptions = {};\n\t\t}\n\n\t\tif (!this.rules || Object.keys(this.rules).length === 0) {\n\t\t\tif (callback) {\n\t\t\t\tcallback();\n\t\t\t}\n\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\tfunction complete(results) {\n\t\t\tvar i;\n\t\t\tvar errors = [];\n\t\t\tvar fields = {};\n\n\t\t\tfunction add(e) {\n\t\t\t\tif (Array.isArray(e)) {\n\t\t\t\t\tvar _errors;\n\n\t\t\t\t\terrors = (_errors = errors).concat.apply(_errors, e);\n\t\t\t\t} else {\n\t\t\t\t\terrors.push(e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (i = 0; i < results.length; i++) {\n\t\t\t\tadd(results[i]);\n\t\t\t}\n\n\t\t\tif (!errors.length) {\n\t\t\t\terrors = null;\n\t\t\t\tfields = null;\n\t\t\t} else {\n\t\t\t\tfields = convertFieldsError(errors);\n\t\t\t}\n\n\t\t\tcallback(errors, fields);\n\t\t}\n\n\t\tif (options.messages) {\n\t\t\tvar messages$1 = this.messages();\n\n\t\t\tif (messages$1 === messages) {\n\t\t\t\tmessages$1 = newMessages();\n\t\t\t}\n\n\t\t\tdeepMerge(messages$1, options.messages);\n\t\t\toptions.messages = messages$1;\n\t\t} else {\n\t\t\toptions.messages = this.messages();\n\t\t}\n\n\t\tvar arr;\n\t\tvar value;\n\t\tvar series = {};\n\t\tvar keys = options.keys || Object.keys(this.rules);\n\t\tkeys.forEach(function(z) {\n\t\t\tarr = _this.rules[z];\n\t\t\tvalue = source[z];\n\t\t\tarr.forEach(function(r) {\n\t\t\t\tvar rule = r;\n\n\t\t\t\tif (typeof rule.transform === 'function') {\n\t\t\t\t\tif (source === source_) {\n\t\t\t\t\t\tsource = _extends({}, source);\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = source[z] = rule.transform(value);\n\t\t\t\t}\n\n\t\t\t\tif (typeof rule === 'function') {\n\t\t\t\t\trule = {\n\t\t\t\t\t\tvalidator: rule\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\trule = _extends({}, rule);\n\t\t\t\t}\n\n\t\t\t\trule.validator = _this.getValidationMethod(rule);\n\t\t\t\trule.field = z;\n\t\t\t\trule.fullField = rule.fullField || z;\n\t\t\t\trule.type = _this.getType(rule);\n\n\t\t\t\tif (!rule.validator) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tseries[z] = series[z] || [];\n\t\t\t\tseries[z].push({\n\t\t\t\t\trule: rule,\n\t\t\t\t\tvalue: value,\n\t\t\t\t\tsource: source,\n\t\t\t\t\tfield: z\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t\tvar errorFields = {};\n\t\treturn asyncMap(series, options, function(data, doIt) {\n\t\t\tvar rule = data.rule;\n\t\t\tvar deep = (rule.type === 'object' || rule.type === 'array') && (typeof rule.fields === 'object' || typeof rule.defaultField ===\n\t\t\t\t'object');\n\t\t\tdeep = deep && (rule.required || !rule.required && data.value);\n\t\t\trule.field = data.field;\n\n\t\t\tfunction addFullfield(key, schema) {\n\t\t\t\treturn _extends({}, schema, {\n\t\t\t\t\tfullField: rule.fullField + \".\" + key\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction cb(e) {\n\t\t\t\tif (e === void 0) {\n\t\t\t\t\te = [];\n\t\t\t\t}\n\n\t\t\t\tvar errors = e;\n\n\t\t\t\tif (!Array.isArray(errors)) {\n\t\t\t\t\terrors = [errors];\n\t\t\t\t}\n\n\t\t\t\tif (!options.suppressWarning && errors.length) {\n\t\t\t\t\tSchema.warning('async-validator:', errors);\n\t\t\t\t}\n\n\t\t\t\tif (errors.length && rule.message) {\n\t\t\t\t\terrors = [].concat(rule.message);\n\t\t\t\t}\n\n\t\t\t\terrors = errors.map(complementError(rule));\n\n\t\t\t\tif (options.first && errors.length) {\n\t\t\t\t\terrorFields[rule.field] = 1;\n\t\t\t\t\treturn doIt(errors);\n\t\t\t\t}\n\n\t\t\t\tif (!deep) {\n\t\t\t\t\tdoIt(errors);\n\t\t\t\t} else {\n\t\t\t\t\t// if rule is required but the target object\n\t\t\t\t\t// does not exist fail at the rule level and don't\n\t\t\t\t\t// go deeper\n\t\t\t\t\tif (rule.required && !data.value) {\n\t\t\t\t\t\tif (rule.message) {\n\t\t\t\t\t\t\terrors = [].concat(rule.message).map(complementError(rule));\n\t\t\t\t\t\t} else if (options.error) {\n\t\t\t\t\t\t\terrors = [options.error(rule, format(options.messages.required, rule.field))];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\terrors = [];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn doIt(errors);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar fieldsSchema = {};\n\n\t\t\t\t\tif (rule.defaultField) {\n\t\t\t\t\t\tfor (var k in data.value) {\n\t\t\t\t\t\t\tif (data.value.hasOwnProperty(k)) {\n\t\t\t\t\t\t\t\tfieldsSchema[k] = rule.defaultField;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfieldsSchema = _extends({}, fieldsSchema, {}, data.rule.fields);\n\n\t\t\t\t\tfor (var f in fieldsSchema) {\n\t\t\t\t\t\tif (fieldsSchema.hasOwnProperty(f)) {\n\t\t\t\t\t\t\tvar fieldSchema = Array.isArray(fieldsSchema[f]) ? fieldsSchema[f] : [fieldsSchema[f]];\n\t\t\t\t\t\t\tfieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tvar schema = new Schema(fieldsSchema);\n\t\t\t\t\tschema.messages(options.messages);\n\n\t\t\t\t\tif (data.rule.options) {\n\t\t\t\t\t\tdata.rule.options.messages = options.messages;\n\t\t\t\t\t\tdata.rule.options.error = options.error;\n\t\t\t\t\t}\n\n\t\t\t\t\tschema.validate(data.value, data.rule.options || options, function(errs) {\n\t\t\t\t\t\tvar finalErrors = [];\n\n\t\t\t\t\t\tif (errors && errors.length) {\n\t\t\t\t\t\t\tfinalErrors.push.apply(finalErrors, errors);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (errs && errs.length) {\n\t\t\t\t\t\t\tfinalErrors.push.apply(finalErrors, errs);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdoIt(finalErrors.length ? finalErrors : null);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar res;\n\n\t\t\tif (rule.asyncValidator) {\n\t\t\t\tres = rule.asyncValidator(rule, data.value, cb, data.source, options);\n\t\t\t} else if (rule.validator) {\n\t\t\t\tres = rule.validator(rule, data.value, cb, data.source, options);\n\n\t\t\t\tif (res === true) {\n\t\t\t\t\tcb();\n\t\t\t\t} else if (res === false) {\n\t\t\t\t\tcb(rule.message || rule.field + \" fails\");\n\t\t\t\t} else if (res instanceof Array) {\n\t\t\t\t\tcb(res);\n\t\t\t\t} else if (res instanceof Error) {\n\t\t\t\t\tcb(res.message);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (res && res.then) {\n\t\t\t\tres.then(function() {\n\t\t\t\t\treturn cb();\n\t\t\t\t}, function(e) {\n\t\t\t\t\treturn cb(e);\n\t\t\t\t});\n\t\t\t}\n\t\t}, function(results) {\n\t\t\tcomplete(results);\n\t\t});\n\t},\n\tgetType: function getType(rule) {\n\t\tif (rule.type === undefined && rule.pattern instanceof RegExp) {\n\t\t\trule.type = 'pattern';\n\t\t}\n\n\t\tif (typeof rule.validator !== 'function' && rule.type && !validators.hasOwnProperty(rule.type)) {\n\t\t\tthrow new Error(format('Unknown rule type %s', rule.type));\n\t\t}\n\n\t\treturn rule.type || 'string';\n\t},\n\tgetValidationMethod: function getValidationMethod(rule) {\n\t\tif (typeof rule.validator === 'function') {\n\t\t\treturn rule.validator;\n\t\t}\n\n\t\tvar keys = Object.keys(rule);\n\t\tvar messageIndex = keys.indexOf('message');\n\n\t\tif (messageIndex !== -1) {\n\t\t\tkeys.splice(messageIndex, 1);\n\t\t}\n\n\t\tif (keys.length === 1 && keys[0] === 'required') {\n\t\t\treturn validators.required;\n\t\t}\n\n\t\treturn validators[this.getType(rule)] || false;\n\t}\n};\n\nSchema.register = function register(type, validator) {\n\tif (typeof validator !== 'function') {\n\t\tthrow new Error('Cannot register a validator by type, validator is not a function');\n\t}\n\n\tvalidators[type] = validator;\n};\n\nSchema.warning = warning;\nSchema.messages = messages;\n\nexport default Schema;\n//# sourceMappingURL=index.js.map\n"
  },
  {
    "path": "uview-ui/libs/util/city.js",
    "content": "var cityData=[[{\"label\":\"市辖区\",\"value\":\"1101\"}],[{\"label\":\"市辖区\",\"value\":\"1201\"}],[{\"label\":\"石家庄市\",\"value\":\"1301\"},{\"label\":\"唐山市\",\"value\":\"1302\"},{\"label\":\"秦皇岛市\",\"value\":\"1303\"},{\"label\":\"邯郸市\",\"value\":\"1304\"},{\"label\":\"邢台市\",\"value\":\"1305\"},{\"label\":\"保定市\",\"value\":\"1306\"},{\"label\":\"张家口市\",\"value\":\"1307\"},{\"label\":\"承德市\",\"value\":\"1308\"},{\"label\":\"沧州市\",\"value\":\"1309\"},{\"label\":\"廊坊市\",\"value\":\"1310\"},{\"label\":\"衡水市\",\"value\":\"1311\"}],[{\"label\":\"太原市\",\"value\":\"1401\"},{\"label\":\"大同市\",\"value\":\"1402\"},{\"label\":\"阳泉市\",\"value\":\"1403\"},{\"label\":\"长治市\",\"value\":\"1404\"},{\"label\":\"晋城市\",\"value\":\"1405\"},{\"label\":\"朔州市\",\"value\":\"1406\"},{\"label\":\"晋中市\",\"value\":\"1407\"},{\"label\":\"运城市\",\"value\":\"1408\"},{\"label\":\"忻州市\",\"value\":\"1409\"},{\"label\":\"临汾市\",\"value\":\"1410\"},{\"label\":\"吕梁市\",\"value\":\"1411\"}],[{\"label\":\"呼和浩特市\",\"value\":\"1501\"},{\"label\":\"包头市\",\"value\":\"1502\"},{\"label\":\"乌海市\",\"value\":\"1503\"},{\"label\":\"赤峰市\",\"value\":\"1504\"},{\"label\":\"通辽市\",\"value\":\"1505\"},{\"label\":\"鄂尔多斯市\",\"value\":\"1506\"},{\"label\":\"呼伦贝尔市\",\"value\":\"1507\"},{\"label\":\"巴彦淖尔市\",\"value\":\"1508\"},{\"label\":\"乌兰察布市\",\"value\":\"1509\"},{\"label\":\"兴安盟\",\"value\":\"1522\"},{\"label\":\"锡林郭勒盟\",\"value\":\"1525\"},{\"label\":\"阿拉善盟\",\"value\":\"1529\"}],[{\"label\":\"沈阳市\",\"value\":\"2101\"},{\"label\":\"大连市\",\"value\":\"2102\"},{\"label\":\"鞍山市\",\"value\":\"2103\"},{\"label\":\"抚顺市\",\"value\":\"2104\"},{\"label\":\"本溪市\",\"value\":\"2105\"},{\"label\":\"丹东市\",\"value\":\"2106\"},{\"label\":\"锦州市\",\"value\":\"2107\"},{\"label\":\"营口市\",\"value\":\"2108\"},{\"label\":\"阜新市\",\"value\":\"2109\"},{\"label\":\"辽阳市\",\"value\":\"2110\"},{\"label\":\"盘锦市\",\"value\":\"2111\"},{\"label\":\"铁岭市\",\"value\":\"2112\"},{\"label\":\"朝阳市\",\"value\":\"2113\"},{\"label\":\"葫芦岛市\",\"value\":\"2114\"}],[{\"label\":\"长春市\",\"value\":\"2201\"},{\"label\":\"吉林市\",\"value\":\"2202\"},{\"label\":\"四平市\",\"value\":\"2203\"},{\"label\":\"辽源市\",\"value\":\"2204\"},{\"label\":\"通化市\",\"value\":\"2205\"},{\"label\":\"白山市\",\"value\":\"2206\"},{\"label\":\"松原市\",\"value\":\"2207\"},{\"label\":\"白城市\",\"value\":\"2208\"},{\"label\":\"延边朝鲜族自治州\",\"value\":\"2224\"}],[{\"label\":\"哈尔滨市\",\"value\":\"2301\"},{\"label\":\"齐齐哈尔市\",\"value\":\"2302\"},{\"label\":\"鸡西市\",\"value\":\"2303\"},{\"label\":\"鹤岗市\",\"value\":\"2304\"},{\"label\":\"双鸭山市\",\"value\":\"2305\"},{\"label\":\"大庆市\",\"value\":\"2306\"},{\"label\":\"伊春市\",\"value\":\"2307\"},{\"label\":\"佳木斯市\",\"value\":\"2308\"},{\"label\":\"七台河市\",\"value\":\"2309\"},{\"label\":\"牡丹江市\",\"value\":\"2310\"},{\"label\":\"黑河市\",\"value\":\"2311\"},{\"label\":\"绥化市\",\"value\":\"2312\"},{\"label\":\"大兴安岭地区\",\"value\":\"2327\"}],[{\"label\":\"市辖区\",\"value\":\"3101\"}],[{\"label\":\"南京市\",\"value\":\"3201\"},{\"label\":\"无锡市\",\"value\":\"3202\"},{\"label\":\"徐州市\",\"value\":\"3203\"},{\"label\":\"常州市\",\"value\":\"3204\"},{\"label\":\"苏州市\",\"value\":\"3205\"},{\"label\":\"南通市\",\"value\":\"3206\"},{\"label\":\"连云港市\",\"value\":\"3207\"},{\"label\":\"淮安市\",\"value\":\"3208\"},{\"label\":\"盐城市\",\"value\":\"3209\"},{\"label\":\"扬州市\",\"value\":\"3210\"},{\"label\":\"镇江市\",\"value\":\"3211\"},{\"label\":\"泰州市\",\"value\":\"3212\"},{\"label\":\"宿迁市\",\"value\":\"3213\"}],[{\"label\":\"杭州市\",\"value\":\"3301\"},{\"label\":\"宁波市\",\"value\":\"3302\"},{\"label\":\"温州市\",\"value\":\"3303\"},{\"label\":\"嘉兴市\",\"value\":\"3304\"},{\"label\":\"湖州市\",\"value\":\"3305\"},{\"label\":\"绍兴市\",\"value\":\"3306\"},{\"label\":\"金华市\",\"value\":\"3307\"},{\"label\":\"衢州市\",\"value\":\"3308\"},{\"label\":\"舟山市\",\"value\":\"3309\"},{\"label\":\"台州市\",\"value\":\"3310\"},{\"label\":\"丽水市\",\"value\":\"3311\"}],[{\"label\":\"合肥市\",\"value\":\"3401\"},{\"label\":\"芜湖市\",\"value\":\"3402\"},{\"label\":\"蚌埠市\",\"value\":\"3403\"},{\"label\":\"淮南市\",\"value\":\"3404\"},{\"label\":\"马鞍山市\",\"value\":\"3405\"},{\"label\":\"淮北市\",\"value\":\"3406\"},{\"label\":\"铜陵市\",\"value\":\"3407\"},{\"label\":\"安庆市\",\"value\":\"3408\"},{\"label\":\"黄山市\",\"value\":\"3410\"},{\"label\":\"滁州市\",\"value\":\"3411\"},{\"label\":\"阜阳市\",\"value\":\"3412\"},{\"label\":\"宿州市\",\"value\":\"3413\"},{\"label\":\"六安市\",\"value\":\"3415\"},{\"label\":\"亳州市\",\"value\":\"3416\"},{\"label\":\"池州市\",\"value\":\"3417\"},{\"label\":\"宣城市\",\"value\":\"3418\"}],[{\"label\":\"福州市\",\"value\":\"3501\"},{\"label\":\"厦门市\",\"value\":\"3502\"},{\"label\":\"莆田市\",\"value\":\"3503\"},{\"label\":\"三明市\",\"value\":\"3504\"},{\"label\":\"泉州市\",\"value\":\"3505\"},{\"label\":\"漳州市\",\"value\":\"3506\"},{\"label\":\"南平市\",\"value\":\"3507\"},{\"label\":\"龙岩市\",\"value\":\"3508\"},{\"label\":\"宁德市\",\"value\":\"3509\"}],[{\"label\":\"南昌市\",\"value\":\"3601\"},{\"label\":\"景德镇市\",\"value\":\"3602\"},{\"label\":\"萍乡市\",\"value\":\"3603\"},{\"label\":\"九江市\",\"value\":\"3604\"},{\"label\":\"新余市\",\"value\":\"3605\"},{\"label\":\"鹰潭市\",\"value\":\"3606\"},{\"label\":\"赣州市\",\"value\":\"3607\"},{\"label\":\"吉安市\",\"value\":\"3608\"},{\"label\":\"宜春市\",\"value\":\"3609\"},{\"label\":\"抚州市\",\"value\":\"3610\"},{\"label\":\"上饶市\",\"value\":\"3611\"}],[{\"label\":\"济南市\",\"value\":\"3701\"},{\"label\":\"青岛市\",\"value\":\"3702\"},{\"label\":\"淄博市\",\"value\":\"3703\"},{\"label\":\"枣庄市\",\"value\":\"3704\"},{\"label\":\"东营市\",\"value\":\"3705\"},{\"label\":\"烟台市\",\"value\":\"3706\"},{\"label\":\"潍坊市\",\"value\":\"3707\"},{\"label\":\"济宁市\",\"value\":\"3708\"},{\"label\":\"泰安市\",\"value\":\"3709\"},{\"label\":\"威海市\",\"value\":\"3710\"},{\"label\":\"日照市\",\"value\":\"3711\"},{\"label\":\"莱芜市\",\"value\":\"3712\"},{\"label\":\"临沂市\",\"value\":\"3713\"},{\"label\":\"德州市\",\"value\":\"3714\"},{\"label\":\"聊城市\",\"value\":\"3715\"},{\"label\":\"滨州市\",\"value\":\"3716\"},{\"label\":\"菏泽市\",\"value\":\"3717\"}],[{\"label\":\"郑州市\",\"value\":\"4101\"},{\"label\":\"开封市\",\"value\":\"4102\"},{\"label\":\"洛阳市\",\"value\":\"4103\"},{\"label\":\"平顶山市\",\"value\":\"4104\"},{\"label\":\"安阳市\",\"value\":\"4105\"},{\"label\":\"鹤壁市\",\"value\":\"4106\"},{\"label\":\"新乡市\",\"value\":\"4107\"},{\"label\":\"焦作市\",\"value\":\"4108\"},{\"label\":\"濮阳市\",\"value\":\"4109\"},{\"label\":\"许昌市\",\"value\":\"4110\"},{\"label\":\"漯河市\",\"value\":\"4111\"},{\"label\":\"三门峡市\",\"value\":\"4112\"},{\"label\":\"南阳市\",\"value\":\"4113\"},{\"label\":\"商丘市\",\"value\":\"4114\"},{\"label\":\"信阳市\",\"value\":\"4115\"},{\"label\":\"周口市\",\"value\":\"4116\"},{\"label\":\"驻马店市\",\"value\":\"4117\"},{\"label\":\"省直辖县级行政区划\",\"value\":\"4190\"}],[{\"label\":\"武汉市\",\"value\":\"4201\"},{\"label\":\"黄石市\",\"value\":\"4202\"},{\"label\":\"十堰市\",\"value\":\"4203\"},{\"label\":\"宜昌市\",\"value\":\"4205\"},{\"label\":\"襄阳市\",\"value\":\"4206\"},{\"label\":\"鄂州市\",\"value\":\"4207\"},{\"label\":\"荆门市\",\"value\":\"4208\"},{\"label\":\"孝感市\",\"value\":\"4209\"},{\"label\":\"荆州市\",\"value\":\"4210\"},{\"label\":\"黄冈市\",\"value\":\"4211\"},{\"label\":\"咸宁市\",\"value\":\"4212\"},{\"label\":\"随州市\",\"value\":\"4213\"},{\"label\":\"恩施土家族苗族自治州\",\"value\":\"4228\"},{\"label\":\"省直辖县级行政区划\",\"value\":\"4290\"}],[{\"label\":\"长沙市\",\"value\":\"4301\"},{\"label\":\"株洲市\",\"value\":\"4302\"},{\"label\":\"湘潭市\",\"value\":\"4303\"},{\"label\":\"衡阳市\",\"value\":\"4304\"},{\"label\":\"邵阳市\",\"value\":\"4305\"},{\"label\":\"岳阳市\",\"value\":\"4306\"},{\"label\":\"常德市\",\"value\":\"4307\"},{\"label\":\"张家界市\",\"value\":\"4308\"},{\"label\":\"益阳市\",\"value\":\"4309\"},{\"label\":\"郴州市\",\"value\":\"4310\"},{\"label\":\"永州市\",\"value\":\"4311\"},{\"label\":\"怀化市\",\"value\":\"4312\"},{\"label\":\"娄底市\",\"value\":\"4313\"},{\"label\":\"湘西土家族苗族自治州\",\"value\":\"4331\"}],[{\"label\":\"广州市\",\"value\":\"4401\"},{\"label\":\"韶关市\",\"value\":\"4402\"},{\"label\":\"深圳市\",\"value\":\"4403\"},{\"label\":\"珠海市\",\"value\":\"4404\"},{\"label\":\"汕头市\",\"value\":\"4405\"},{\"label\":\"佛山市\",\"value\":\"4406\"},{\"label\":\"江门市\",\"value\":\"4407\"},{\"label\":\"湛江市\",\"value\":\"4408\"},{\"label\":\"茂名市\",\"value\":\"4409\"},{\"label\":\"肇庆市\",\"value\":\"4412\"},{\"label\":\"惠州市\",\"value\":\"4413\"},{\"label\":\"梅州市\",\"value\":\"4414\"},{\"label\":\"汕尾市\",\"value\":\"4415\"},{\"label\":\"河源市\",\"value\":\"4416\"},{\"label\":\"阳江市\",\"value\":\"4417\"},{\"label\":\"清远市\",\"value\":\"4418\"},{\"label\":\"东莞市\",\"value\":\"4419\"},{\"label\":\"中山市\",\"value\":\"4420\"},{\"label\":\"潮州市\",\"value\":\"4451\"},{\"label\":\"揭阳市\",\"value\":\"4452\"},{\"label\":\"云浮市\",\"value\":\"4453\"}],[{\"label\":\"南宁市\",\"value\":\"4501\"},{\"label\":\"柳州市\",\"value\":\"4502\"},{\"label\":\"桂林市\",\"value\":\"4503\"},{\"label\":\"梧州市\",\"value\":\"4504\"},{\"label\":\"北海市\",\"value\":\"4505\"},{\"label\":\"防城港市\",\"value\":\"4506\"},{\"label\":\"钦州市\",\"value\":\"4507\"},{\"label\":\"贵港市\",\"value\":\"4508\"},{\"label\":\"玉林市\",\"value\":\"4509\"},{\"label\":\"百色市\",\"value\":\"4510\"},{\"label\":\"贺州市\",\"value\":\"4511\"},{\"label\":\"河池市\",\"value\":\"4512\"},{\"label\":\"来宾市\",\"value\":\"4513\"},{\"label\":\"崇左市\",\"value\":\"4514\"}],[{\"label\":\"海口市\",\"value\":\"4601\"},{\"label\":\"三亚市\",\"value\":\"4602\"},{\"label\":\"三沙市\",\"value\":\"4603\"},{\"label\":\"儋州市\",\"value\":\"4604\"},{\"label\":\"省直辖县级行政区划\",\"value\":\"4690\"}],[{\"label\":\"市辖区\",\"value\":\"5001\"},{\"label\":\"县\",\"value\":\"5002\"}],[{\"label\":\"成都市\",\"value\":\"5101\"},{\"label\":\"自贡市\",\"value\":\"5103\"},{\"label\":\"攀枝花市\",\"value\":\"5104\"},{\"label\":\"泸州市\",\"value\":\"5105\"},{\"label\":\"德阳市\",\"value\":\"5106\"},{\"label\":\"绵阳市\",\"value\":\"5107\"},{\"label\":\"广元市\",\"value\":\"5108\"},{\"label\":\"遂宁市\",\"value\":\"5109\"},{\"label\":\"内江市\",\"value\":\"5110\"},{\"label\":\"乐山市\",\"value\":\"5111\"},{\"label\":\"南充市\",\"value\":\"5113\"},{\"label\":\"眉山市\",\"value\":\"5114\"},{\"label\":\"宜宾市\",\"value\":\"5115\"},{\"label\":\"广安市\",\"value\":\"5116\"},{\"label\":\"达州市\",\"value\":\"5117\"},{\"label\":\"雅安市\",\"value\":\"5118\"},{\"label\":\"巴中市\",\"value\":\"5119\"},{\"label\":\"资阳市\",\"value\":\"5120\"},{\"label\":\"阿坝藏族羌族自治州\",\"value\":\"5132\"},{\"label\":\"甘孜藏族自治州\",\"value\":\"5133\"},{\"label\":\"凉山彝族自治州\",\"value\":\"5134\"}],[{\"label\":\"贵阳市\",\"value\":\"5201\"},{\"label\":\"六盘水市\",\"value\":\"5202\"},{\"label\":\"遵义市\",\"value\":\"5203\"},{\"label\":\"安顺市\",\"value\":\"5204\"},{\"label\":\"毕节市\",\"value\":\"5205\"},{\"label\":\"铜仁市\",\"value\":\"5206\"},{\"label\":\"黔西南布依族苗族自治州\",\"value\":\"5223\"},{\"label\":\"黔东南苗族侗族自治州\",\"value\":\"5226\"},{\"label\":\"黔南布依族苗族自治州\",\"value\":\"5227\"}],[{\"label\":\"昆明市\",\"value\":\"5301\"},{\"label\":\"曲靖市\",\"value\":\"5303\"},{\"label\":\"玉溪市\",\"value\":\"5304\"},{\"label\":\"保山市\",\"value\":\"5305\"},{\"label\":\"昭通市\",\"value\":\"5306\"},{\"label\":\"丽江市\",\"value\":\"5307\"},{\"label\":\"普洱市\",\"value\":\"5308\"},{\"label\":\"临沧市\",\"value\":\"5309\"},{\"label\":\"楚雄彝族自治州\",\"value\":\"5323\"},{\"label\":\"红河哈尼族彝族自治州\",\"value\":\"5325\"},{\"label\":\"文山壮族苗族自治州\",\"value\":\"5326\"},{\"label\":\"西双版纳傣族自治州\",\"value\":\"5328\"},{\"label\":\"大理白族自治州\",\"value\":\"5329\"},{\"label\":\"德宏傣族景颇族自治州\",\"value\":\"5331\"},{\"label\":\"怒江傈僳族自治州\",\"value\":\"5333\"},{\"label\":\"迪庆藏族自治州\",\"value\":\"5334\"}],[{\"label\":\"拉萨市\",\"value\":\"5401\"},{\"label\":\"日喀则市\",\"value\":\"5402\"},{\"label\":\"昌都市\",\"value\":\"5403\"},{\"label\":\"林芝市\",\"value\":\"5404\"},{\"label\":\"山南市\",\"value\":\"5405\"},{\"label\":\"那曲地区\",\"value\":\"5424\"},{\"label\":\"阿里地区\",\"value\":\"5425\"}],[{\"label\":\"西安市\",\"value\":\"6101\"},{\"label\":\"铜川市\",\"value\":\"6102\"},{\"label\":\"宝鸡市\",\"value\":\"6103\"},{\"label\":\"咸阳市\",\"value\":\"6104\"},{\"label\":\"渭南市\",\"value\":\"6105\"},{\"label\":\"延安市\",\"value\":\"6106\"},{\"label\":\"汉中市\",\"value\":\"6107\"},{\"label\":\"榆林市\",\"value\":\"6108\"},{\"label\":\"安康市\",\"value\":\"6109\"},{\"label\":\"商洛市\",\"value\":\"6110\"}],[{\"label\":\"兰州市\",\"value\":\"6201\"},{\"label\":\"嘉峪关市\",\"value\":\"6202\"},{\"label\":\"金昌市\",\"value\":\"6203\"},{\"label\":\"白银市\",\"value\":\"6204\"},{\"label\":\"天水市\",\"value\":\"6205\"},{\"label\":\"武威市\",\"value\":\"6206\"},{\"label\":\"张掖市\",\"value\":\"6207\"},{\"label\":\"平凉市\",\"value\":\"6208\"},{\"label\":\"酒泉市\",\"value\":\"6209\"},{\"label\":\"庆阳市\",\"value\":\"6210\"},{\"label\":\"定西市\",\"value\":\"6211\"},{\"label\":\"陇南市\",\"value\":\"6212\"},{\"label\":\"临夏回族自治州\",\"value\":\"6229\"},{\"label\":\"甘南藏族自治州\",\"value\":\"6230\"}],[{\"label\":\"西宁市\",\"value\":\"6301\"},{\"label\":\"海东市\",\"value\":\"6302\"},{\"label\":\"海北藏族自治州\",\"value\":\"6322\"},{\"label\":\"黄南藏族自治州\",\"value\":\"6323\"},{\"label\":\"海南藏族自治州\",\"value\":\"6325\"},{\"label\":\"果洛藏族自治州\",\"value\":\"6326\"},{\"label\":\"玉树藏族自治州\",\"value\":\"6327\"},{\"label\":\"海西蒙古族藏族自治州\",\"value\":\"6328\"}],[{\"label\":\"银川市\",\"value\":\"6401\"},{\"label\":\"石嘴山市\",\"value\":\"6402\"},{\"label\":\"吴忠市\",\"value\":\"6403\"},{\"label\":\"固原市\",\"value\":\"6404\"},{\"label\":\"中卫市\",\"value\":\"6405\"}],[{\"label\":\"乌鲁木齐市\",\"value\":\"6501\"},{\"label\":\"克拉玛依市\",\"value\":\"6502\"},{\"label\":\"吐鲁番市\",\"value\":\"6504\"},{\"label\":\"哈密市\",\"value\":\"6505\"},{\"label\":\"昌吉回族自治州\",\"value\":\"6523\"},{\"label\":\"博尔塔拉蒙古自治州\",\"value\":\"6527\"},{\"label\":\"巴音郭楞蒙古自治州\",\"value\":\"6528\"},{\"label\":\"阿克苏地区\",\"value\":\"6529\"},{\"label\":\"克孜勒苏柯尔克孜自治州\",\"value\":\"6530\"},{\"label\":\"喀什地区\",\"value\":\"6531\"},{\"label\":\"和田地区\",\"value\":\"6532\"},{\"label\":\"伊犁哈萨克自治州\",\"value\":\"6540\"},{\"label\":\"塔城地区\",\"value\":\"6542\"},{\"label\":\"阿勒泰地区\",\"value\":\"6543\"},{\"label\":\"自治区直辖县级行政区划\",\"value\":\"6590\"}],[{\"label\":\"台北\",\"value\":\"6601\"},{\"label\":\"高雄\",\"value\":\"6602\"},{\"label\":\"基隆\",\"value\":\"6603\"},{\"label\":\"台中\",\"value\":\"6604\"},{\"label\":\"台南\",\"value\":\"6605\"},{\"label\":\"新竹\",\"value\":\"6606\"},{\"label\":\"嘉义\",\"value\":\"6607\"},{\"label\":\"宜兰\",\"value\":\"6608\"},{\"label\":\"桃园\",\"value\":\"6609\"},{\"label\":\"苗栗\",\"value\":\"6610\"},{\"label\":\"彰化\",\"value\":\"6611\"},{\"label\":\"南投\",\"value\":\"6612\"},{\"label\":\"云林\",\"value\":\"6613\"},{\"label\":\"屏东\",\"value\":\"6614\"},{\"label\":\"台东\",\"value\":\"6615\"},{\"label\":\"花莲\",\"value\":\"6616\"},{\"label\":\"澎湖\",\"value\":\"6617\"}],[{\"label\":\"香港岛\",\"value\":\"6701\"},{\"label\":\"九龙\",\"value\":\"6702\"},{\"label\":\"新界\",\"value\":\"6703\"}],[{\"label\":\"澳门半岛\",\"value\":\"6801\"},{\"label\":\"氹仔岛\",\"value\":\"6802\"},{\"label\":\"路环岛\",\"value\":\"6803\"},{\"label\":\"路氹城\",\"value\":\"6804\"}]];export default cityData;"
  },
  {
    "path": "uview-ui/libs/util/emitter.js",
    "content": "/**\n * 递归使用 call 方式this指向\n * @param componentName // 需要找的组件的名称\n * @param eventName // 事件名称\n * @param params // 需要传递的参数\n */\nfunction broadcast(componentName, eventName, params) {\n    // 循环子节点找到名称一样的子节点 否则 递归 当前子节点\n    this.$children.map(child=>{\n        if (componentName===child.$options.name) {\n            child.$emit.apply(child,[eventName].concat(params))\n        }else {\n            broadcast.apply(child,[componentName,eventName].concat(params))\n        }\n    })\n}\nexport default {\n    methods: {\n        /**\n         * 派发 (向上查找) (一个)\n         * @param componentName // 需要找的组件的名称\n         * @param eventName // 事件名称\n         * @param params // 需要传递的参数\n         */\n        dispatch(componentName, eventName, params) {\n            let parent = this.$parent || this.$root;//$parent 找到最近的父节点 $root 根节点\n            let name = parent.$options.name; // 获取当前组件实例的name\n            // 如果当前有节点 && 当前没名称 且 当前名称等于需要传进来的名称的时候就去查找当前的节点\n            // 循环出当前名称的一样的组件实例\n            while (parent && (!name||name!==componentName)) {\n                parent = parent.$parent;\n                if (parent) {\n                    name = parent.$options.name;\n                }\n            }\n            // 有节点表示当前找到了name一样的实例\n            if (parent) {\n                parent.$emit.apply(parent,[eventName].concat(params))\n            }\n        },\n        /**\n         * 广播 (向下查找) (广播多个)\n         * @param componentName // 需要找的组件的名称\n         * @param eventName // 事件名称\n         * @param params // 需要传递的参数\n         */\n        broadcast(componentName, eventName, params) {\n            broadcast.call(this,componentName, eventName, params)\n        }\n    }\n}\n"
  },
  {
    "path": "uview-ui/libs/util/province.js",
    "content": "var provinceData=[{\"label\":\"北京市\",\"value\":\"11\"},{\"label\":\"天津市\",\"value\":\"12\"},{\"label\":\"河北省\",\"value\":\"13\"},{\"label\":\"山西省\",\"value\":\"14\"},{\"label\":\"内蒙古自治区\",\"value\":\"15\"},{\"label\":\"辽宁省\",\"value\":\"21\"},{\"label\":\"吉林省\",\"value\":\"22\"},{\"label\":\"黑龙江省\",\"value\":\"23\"},{\"label\":\"上海市\",\"value\":\"31\"},{\"label\":\"江苏省\",\"value\":\"32\"},{\"label\":\"浙江省\",\"value\":\"33\"},{\"label\":\"安徽省\",\"value\":\"34\"},{\"label\":\"福建省\",\"value\":\"35\"},{\"label\":\"江西省\",\"value\":\"36\"},{\"label\":\"山东省\",\"value\":\"37\"},{\"label\":\"河南省\",\"value\":\"41\"},{\"label\":\"湖北省\",\"value\":\"42\"},{\"label\":\"湖南省\",\"value\":\"43\"},{\"label\":\"广东省\",\"value\":\"44\"},{\"label\":\"广西壮族自治区\",\"value\":\"45\"},{\"label\":\"海南省\",\"value\":\"46\"},{\"label\":\"重庆市\",\"value\":\"50\"},{\"label\":\"四川省\",\"value\":\"51\"},{\"label\":\"贵州省\",\"value\":\"52\"},{\"label\":\"云南省\",\"value\":\"53\"},{\"label\":\"西藏自治区\",\"value\":\"54\"},{\"label\":\"陕西省\",\"value\":\"61\"},{\"label\":\"甘肃省\",\"value\":\"62\"},{\"label\":\"青海省\",\"value\":\"63\"},{\"label\":\"宁夏回族自治区\",\"value\":\"64\"},{\"label\":\"新疆维吾尔自治区\",\"value\":\"65\"},{\"label\":\"台湾\",\"value\":\"66\"},{\"label\":\"香港\",\"value\":\"67\"},{\"label\":\"澳门\",\"value\":\"68\"}];export default provinceData;"
  },
  {
    "path": "uview-ui/package.json",
    "content": "{\n  \"name\": \"uview-ui\",\n  \"version\": \"1.8.8\",\n  \"description\": \"uView UI，是uni-app生态优秀的UI框架，全面的组件和便捷的工具会让您信手拈来，如鱼得水\",\n  \"main\": \"index.js\",\n  \"keywords\": [\n    \"uview\",\n    \"uView\",\n    \"uni-app\",\n    \"uni-app ui\",\n    \"uniapp\",\n    \"uviewui\",\n    \"uview ui\",\n    \"uviewUI\",\n    \"uViewui\",\n    \"uViewUI\",\n    \"uView UI\",\n    \"uni ui\",\n    \"uni UI\",\n    \"uniapp ui\",\n    \"ui\",\n    \"UI框架\",\n    \"uniapp ui框架\",\n    \"uniapp UI\"\n  ],\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"\"\n  },\n  \"devDependencies\": {\n    \"sass\": \"1.26.2\",\n    \"sass-loader\": \"8.0.2\"\n  },\n  \"author\": \"uView\",\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "uview-ui/theme.scss",
    "content": "// 此文件为uView的主题变量，这些变量目前只能通过uni.scss引入才有效，另外由于\n// uni.scss中引入的样式会同时混入到全局样式文件和单独每一个页面的样式中，造成微信程序包太大，\n// 故uni.scss只建议放scss变量名相关样式，其他的样式可以通过main.js或者App.vue引入\n\n$u-main-color: #303133;\n$u-content-color: #606266;\n$u-tips-color: #909399;\n$u-light-color: #c0c4cc;\n$u-border-color: #e4e7ed;\n$u-bg-color: #f3f4f6;\n\n$u-type-primary: #2979ff;\n$u-type-primary-light: #ecf5ff;\n$u-type-primary-disabled: #a0cfff;\n$u-type-primary-dark: #2b85e4;\n\n$u-type-warning: #ff9900;\n$u-type-warning-disabled: #fcbd71;\n$u-type-warning-dark: #f29100;\n$u-type-warning-light: #fdf6ec;\n\n$u-type-success: #19be6b;\n$u-type-success-disabled: #71d5a1;\n$u-type-success-dark: #18b566;\n$u-type-success-light: #dbf1e1;\n\n$u-type-error: #fa3534;\n$u-type-error-disabled: #fab6b6;\n$u-type-error-dark: #dd6161;\n$u-type-error-light: #fef0f0;\n\n$u-type-info: #909399;\n$u-type-info-disabled: #c8c9cc;\n$u-type-info-dark: #82848a;\n$u-type-info-light: #f4f4f5;\n\n$u-form-item-height: 70rpx;\n$u-form-item-border-color: #dcdfe6;\n"
  },
  {
    "path": "vue.config.js",
    "content": "module.exports = {\n\t// 配置路径别名\n\tconfigureWebpack: {\n\t\tdevServer: {\n\t\t\t// 调试时允许内网穿透，让外网的人访问到本地调试的H5页面\n\t\t\tdisableHostCheck: true\n\t\t}\n\t},\n\t//productionSourceMap: false,\n}\n"
  }
]