Full Code of umicro/uView for AI

master 1c73d473e15d cached
287 files
1.3 MB
508.8k tokens
169 symbols
1 requests
Download .txt
Showing preview only (1,392K chars total). Download the full file or copy to clipboard to get everything.
Repository: umicro/uView
Branch: master
Commit: 1c73d473e15d
Files: 287
Total size: 1.3 MB

Directory structure:
gitextract_471h43ez/

├── .editorconfig
├── .eslintignore
├── .gitee/
│   └── ISSUE_TEMPLATE.zh-CN.md
├── .github/
│   └── ISSUE_TEMPLATE/
│       └── config.yml
├── .gitignore
├── .vscode/
│   └── settings.json
├── App.vue
├── LICENSE
├── README.md
├── common/
│   ├── classify.data.js
│   ├── demo.scss
│   ├── http.api.js
│   ├── http.interceptor.js
│   ├── index.list.js
│   └── locales/
│       ├── en.js
│       └── zh.js
├── components/
│   └── page-nav/
│       └── page-nav.vue
├── main.js
├── manifest.json
├── package.json
├── pages/
│   ├── componentsA/
│   │   ├── avatar/
│   │   │   └── index.vue
│   │   ├── avatarCropper/
│   │   │   └── index.vue
│   │   ├── backTop/
│   │   │   └── index.vue
│   │   ├── calendar/
│   │   │   └── index.vue
│   │   ├── empty/
│   │   │   └── index.vue
│   │   ├── field/
│   │   │   └── index.vue
│   │   ├── form/
│   │   │   └── index.vue
│   │   ├── fullScreen/
│   │   │   └── index.vue
│   │   ├── icon/
│   │   │   └── index.vue
│   │   ├── indexList/
│   │   │   └── index.vue
│   │   ├── keyboard/
│   │   │   └── index.vue
│   │   ├── lazyLoad/
│   │   │   └── index.vue
│   │   ├── modal/
│   │   │   └── index.vue
│   │   ├── navbar/
│   │   │   └── index.vue
│   │   ├── noNetwork/
│   │   │   └── index.vue
│   │   ├── parse/
│   │   │   └── index.vue
│   │   ├── select/
│   │   │   └── index.vue
│   │   ├── slider/
│   │   │   └── index.vue
│   │   ├── tabs/
│   │   │   └── index.vue
│   │   ├── tag/
│   │   │   └── index.vue
│   │   ├── test/
│   │   │   └── index.vue
│   │   ├── timeLine/
│   │   │   └── index.vue
│   │   ├── toast/
│   │   │   └── index.vue
│   │   ├── topTips/
│   │   │   └── index.vue
│   │   └── verificationCode/
│   │       └── index.vue
│   ├── componentsB/
│   │   ├── card/
│   │   │   └── index.vue
│   │   ├── checkbox/
│   │   │   └── index.vue
│   │   ├── divider/
│   │   │   └── index.vue
│   │   ├── dropdown/
│   │   │   └── index.vue
│   │   ├── image/
│   │   │   └── index.vue
│   │   ├── line/
│   │   │   └── index.vue
│   │   ├── loading/
│   │   │   └── index.vue
│   │   ├── noticeBar/
│   │   │   └── index.vue
│   │   ├── picker/
│   │   │   └── index.vue
│   │   ├── radio/
│   │   │   └── index.vue
│   │   ├── rate/
│   │   │   └── index.vue
│   │   ├── readMore/
│   │   │   └── index.vue
│   │   ├── search/
│   │   │   └── index.vue
│   │   ├── skeleton/
│   │   │   └── index.vue
│   │   ├── steps/
│   │   │   └── index.vue
│   │   ├── sticky/
│   │   │   └── index.vue
│   │   ├── swipeAction/
│   │   │   └── index.vue
│   │   ├── swiper/
│   │   │   └── index.vue
│   │   ├── switch/
│   │   │   └── index.vue
│   │   ├── tabbar/
│   │   │   └── index.vue
│   │   ├── table/
│   │   │   └── index.vue
│   │   ├── upload/
│   │   │   └── index.vue
│   │   └── waterfall/
│   │       └── index.vue
│   ├── componentsC/
│   │   ├── actionSheet/
│   │   │   └── index.vue
│   │   ├── alertTips/
│   │   │   └── index.vue
│   │   ├── badge/
│   │   │   └── index.vue
│   │   ├── button/
│   │   │   └── index.vue
│   │   ├── cell/
│   │   │   └── index.vue
│   │   ├── circleProgress/
│   │   │   └── index.vue
│   │   ├── collapse/
│   │   │   └── index.vue
│   │   ├── color/
│   │   │   └── index.vue
│   │   ├── countDown/
│   │   │   └── index.vue
│   │   ├── countTo/
│   │   │   └── index.vue
│   │   ├── gap/
│   │   │   └── index.vue
│   │   ├── grid/
│   │   │   └── index.vue
│   │   ├── layout/
│   │   │   └── index.vue
│   │   ├── link/
│   │   │   └── index.vue
│   │   ├── loadmore/
│   │   │   └── index.vue
│   │   ├── mask/
│   │   │   └── index.vue
│   │   ├── messageInput/
│   │   │   └── index.vue
│   │   ├── numberBox/
│   │   │   └── index.vue
│   │   ├── popup/
│   │   │   └── index.vue
│   │   ├── progress/
│   │   │   └── index.vue
│   │   ├── section/
│   │   │   └── index.vue
│   │   ├── subsection/
│   │   │   └── index.vue
│   │   └── test/
│   │       └── index.vue
│   ├── example/
│   │   ├── components.config.js
│   │   ├── components.vue
│   │   ├── js.config.js
│   │   ├── js.vue
│   │   ├── template.config.js
│   │   └── template.vue
│   ├── library/
│   │   ├── color/
│   │   │   └── index.vue
│   │   ├── colorSwitch/
│   │   │   └── index.vue
│   │   ├── debounce/
│   │   │   └── index.vue
│   │   ├── deepClone/
│   │   │   └── index.vue
│   │   ├── deepMerge/
│   │   │   └── index.vue
│   │   ├── getRect/
│   │   │   └── index.vue
│   │   ├── globalVariable/
│   │   │   ├── globalData.vue
│   │   │   ├── index.vue
│   │   │   ├── prototype.vue
│   │   │   └── vuex.vue
│   │   ├── guid/
│   │   │   └── index.vue
│   │   ├── http/
│   │   │   └── index.vue
│   │   ├── md5/
│   │   │   └── index.vue
│   │   ├── mpShare/
│   │   │   └── index.vue
│   │   ├── queryParams/
│   │   │   └── index.vue
│   │   ├── random/
│   │   │   └── index.vue
│   │   ├── randomArray/
│   │   │   └── index.vue
│   │   ├── route/
│   │   │   ├── index.vue
│   │   │   └── routeTo.vue
│   │   ├── test/
│   │   │   └── index.vue
│   │   ├── timeFormat/
│   │   │   └── index.vue
│   │   ├── timeFrom/
│   │   │   └── index.vue
│   │   └── trim/
│   │       └── index.vue
│   └── template/
│       ├── address/
│       │   ├── addSite.vue
│       │   └── index.vue
│       ├── citySelect/
│       │   ├── index.vue
│       │   └── u-city-select.vue
│       ├── comment/
│       │   ├── index.vue
│       │   └── reply.vue
│       ├── coupon/
│       │   └── index.vue
│       ├── douyin/
│       │   └── index.nvue
│       ├── keyboardPay/
│       │   └── index.vue
│       ├── login/
│       │   ├── code.vue
│       │   └── index.vue
│       ├── mallMenu/
│       │   ├── index1.vue
│       │   └── index2.vue
│       ├── order/
│       │   └── index.vue
│       ├── submitBar/
│       │   └── index.vue
│       └── wxCenter/
│           └── index.vue
├── pages.json
├── static/
│   └── common/
│       └── js/
│           └── touch-emulator.js
├── store/
│   ├── $u.mixin.js
│   └── index.js
├── template.h5.html
├── uni.scss
├── uview-ui/
│   ├── LICENSE
│   ├── README.md
│   ├── components/
│   │   ├── u-action-sheet/
│   │   │   └── u-action-sheet.vue
│   │   ├── u-alert-tips/
│   │   │   └── u-alert-tips.vue
│   │   ├── u-avatar/
│   │   │   └── u-avatar.vue
│   │   ├── u-avatar-cropper/
│   │   │   ├── u-avatar-cropper.vue
│   │   │   └── weCropper.js
│   │   ├── u-back-top/
│   │   │   └── u-back-top.vue
│   │   ├── u-badge/
│   │   │   └── u-badge.vue
│   │   ├── u-button/
│   │   │   └── u-button.vue
│   │   ├── u-calendar/
│   │   │   └── u-calendar.vue
│   │   ├── u-car-keyboard/
│   │   │   └── u-car-keyboard.vue
│   │   ├── u-card/
│   │   │   └── u-card.vue
│   │   ├── u-cell-group/
│   │   │   └── u-cell-group.vue
│   │   ├── u-cell-item/
│   │   │   └── u-cell-item.vue
│   │   ├── u-checkbox/
│   │   │   └── u-checkbox.vue
│   │   ├── u-checkbox-group/
│   │   │   └── u-checkbox-group.vue
│   │   ├── u-circle-progress/
│   │   │   ├── u-circle-progress.vue
│   │   │   └── u-line-progress/
│   │   │       └── u-line-progress.vue
│   │   ├── u-col/
│   │   │   └── u-col.vue
│   │   ├── u-collapse/
│   │   │   └── u-collapse.vue
│   │   ├── u-collapse-item/
│   │   │   └── u-collapse-item.vue
│   │   ├── u-column-notice/
│   │   │   └── u-column-notice.vue
│   │   ├── u-count-down/
│   │   │   └── u-count-down.vue
│   │   ├── u-count-to/
│   │   │   └── u-count-to.vue
│   │   ├── u-divider/
│   │   │   └── u-divider.vue
│   │   ├── u-dropdown/
│   │   │   └── u-dropdown.vue
│   │   ├── u-dropdown-item/
│   │   │   └── u-dropdown-item.vue
│   │   ├── u-empty/
│   │   │   └── u-empty.vue
│   │   ├── u-field/
│   │   │   └── u-field.vue
│   │   ├── u-form/
│   │   │   └── u-form.vue
│   │   ├── u-form-item/
│   │   │   └── u-form-item.vue
│   │   ├── u-full-screen/
│   │   │   └── u-full-screen.vue
│   │   ├── u-gap/
│   │   │   └── u-gap.vue
│   │   ├── u-grid/
│   │   │   └── u-grid.vue
│   │   ├── u-grid-item/
│   │   │   └── u-grid-item.vue
│   │   ├── u-icon/
│   │   │   └── u-icon.vue
│   │   ├── u-image/
│   │   │   └── u-image.vue
│   │   ├── u-index-anchor/
│   │   │   └── u-index-anchor.vue
│   │   ├── u-index-list/
│   │   │   └── u-index-list.vue
│   │   ├── u-input/
│   │   │   └── u-input.vue
│   │   ├── u-keyboard/
│   │   │   └── u-keyboard.vue
│   │   ├── u-lazy-load/
│   │   │   └── u-lazy-load.vue
│   │   ├── u-line/
│   │   │   └── u-line.vue
│   │   ├── u-line-progress/
│   │   │   └── u-line-progress.vue
│   │   ├── u-link/
│   │   │   └── u-link.vue
│   │   ├── u-loading/
│   │   │   └── u-loading.vue
│   │   ├── u-loading-page/
│   │   │   └── u-loading-page.vue
│   │   ├── u-loadmore/
│   │   │   └── u-loadmore.vue
│   │   ├── u-mask/
│   │   │   └── u-mask.vue
│   │   ├── u-message-input/
│   │   │   └── u-message-input.vue
│   │   ├── u-modal/
│   │   │   └── u-modal.vue
│   │   ├── u-navbar/
│   │   │   └── u-navbar.vue
│   │   ├── u-no-network/
│   │   │   └── u-no-network.vue
│   │   ├── u-notice-bar/
│   │   │   └── u-notice-bar.vue
│   │   ├── u-number-box/
│   │   │   └── u-number-box.vue
│   │   ├── u-number-keyboard/
│   │   │   └── u-number-keyboard.vue
│   │   ├── u-parse/
│   │   │   ├── libs/
│   │   │   │   ├── CssHandler.js
│   │   │   │   ├── MpHtmlParser.js
│   │   │   │   ├── config.js
│   │   │   │   ├── handler.wxs
│   │   │   │   └── trees.vue
│   │   │   └── u-parse.vue
│   │   ├── u-picker/
│   │   │   └── u-picker.vue
│   │   ├── u-popup/
│   │   │   └── u-popup.vue
│   │   ├── u-radio/
│   │   │   └── u-radio.vue
│   │   ├── u-radio-group/
│   │   │   └── u-radio-group.vue
│   │   ├── u-rate/
│   │   │   └── u-rate.vue
│   │   ├── u-read-more/
│   │   │   └── u-read-more.vue
│   │   ├── u-row/
│   │   │   └── u-row.vue
│   │   ├── u-row-notice/
│   │   │   └── u-row-notice.vue
│   │   ├── u-search/
│   │   │   └── u-search.vue
│   │   ├── u-section/
│   │   │   └── u-section.vue
│   │   ├── u-select/
│   │   │   └── u-select.vue
│   │   ├── u-skeleton/
│   │   │   └── u-skeleton.vue
│   │   ├── u-slider/
│   │   │   └── u-slider.vue
│   │   ├── u-steps/
│   │   │   └── u-steps.vue
│   │   ├── u-sticky/
│   │   │   └── u-sticky.vue
│   │   ├── u-subsection/
│   │   │   └── u-subsection.vue
│   │   ├── u-swipe-action/
│   │   │   └── u-swipe-action.vue
│   │   ├── u-swiper/
│   │   │   └── u-swiper.vue
│   │   ├── u-switch/
│   │   │   └── u-switch.vue
│   │   ├── u-tabbar/
│   │   │   └── u-tabbar.vue
│   │   ├── u-table/
│   │   │   └── u-table.vue
│   │   ├── u-tabs/
│   │   │   └── u-tabs.vue
│   │   ├── u-tabs-swiper/
│   │   │   └── u-tabs-swiper.vue
│   │   ├── u-tag/
│   │   │   └── u-tag.vue
│   │   ├── u-td/
│   │   │   └── u-td.vue
│   │   ├── u-th/
│   │   │   └── u-th.vue
│   │   ├── u-time-line/
│   │   │   └── u-time-line.vue
│   │   ├── u-time-line-item/
│   │   │   └── u-time-line-item.vue
│   │   ├── u-toast/
│   │   │   └── u-toast.vue
│   │   ├── u-top-tips/
│   │   │   └── u-top-tips.vue
│   │   ├── u-tr/
│   │   │   └── u-tr.vue
│   │   ├── u-upload/
│   │   │   └── u-upload.vue
│   │   ├── u-verification-code/
│   │   │   └── u-verification-code.vue
│   │   ├── u-waterfall/
│   │   │   └── u-waterfall.vue
│   │   └── uview-v1/
│   │       └── uview-v1.vue
│   ├── iconfont.css
│   ├── index.js
│   ├── index.scss
│   ├── libs/
│   │   ├── config/
│   │   │   ├── config.js
│   │   │   └── zIndex.js
│   │   ├── css/
│   │   │   ├── color.scss
│   │   │   ├── common.scss
│   │   │   ├── style.components.scss
│   │   │   ├── style.h5.scss
│   │   │   ├── style.mp.scss
│   │   │   ├── style.nvue.scss
│   │   │   └── style.vue.scss
│   │   ├── function/
│   │   │   ├── $parent.js
│   │   │   ├── addUnit.js
│   │   │   ├── bem.js
│   │   │   ├── color.js
│   │   │   ├── colorGradient.js
│   │   │   ├── debounce.js
│   │   │   ├── deepClone.js
│   │   │   ├── deepMerge.js
│   │   │   ├── getParent.js
│   │   │   ├── guid.js
│   │   │   ├── md5.js
│   │   │   ├── queryParams.js
│   │   │   ├── random.js
│   │   │   ├── randomArray.js
│   │   │   ├── route.js
│   │   │   ├── sys.js
│   │   │   ├── test.js
│   │   │   ├── throttle.js
│   │   │   ├── timeFormat.js
│   │   │   ├── timeFrom.js
│   │   │   ├── toast.js
│   │   │   ├── trim.js
│   │   │   └── type2icon.js
│   │   ├── mixin/
│   │   │   ├── mixin.js
│   │   │   └── mpShare.js
│   │   ├── request/
│   │   │   └── index.js
│   │   ├── store/
│   │   │   └── index.js
│   │   └── util/
│   │       ├── area.js
│   │       ├── async-validator.js
│   │       ├── city.js
│   │       ├── emitter.js
│   │       └── province.js
│   ├── package.json
│   └── theme.scss
└── vue.config.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
[*]
#缩进风格:空格
indent_style = tab
#缩进大小2
indent_size = 4
#换行符lf
end_of_line = lf
#字符集utf-8
charset = utf-8




================================================
FILE: .eslintignore
================================================
unpackage
node_modules
uview-ui


================================================
FILE: .gitee/ISSUE_TEMPLATE.zh-CN.md
================================================
你好,请使用下面的链接创建 issue 以帮助我们更快的排查问题,不规范的 issue 会被关闭,感谢配合。

https://new-issue.uviewui.com/


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
    - name: 创建一个新issue
      url: https://new-issue.uviewui.com/
      about: 请使用接下来的链接创建新issue。
    - name: Create new issue
      url: https://new-issue.uviewui.com/?lang=en
      about: Please use the following link to create a new issue.


================================================
FILE: .gitignore
================================================
/unpackage/dist/*
/node_modules/*
/.idea/*
deploy.sh
.hbuilderx/

deploy
.DS_Store

================================================
FILE: .vscode/settings.json
================================================
{
	"editor.formatOnSave": false
}


================================================
FILE: App.vue
================================================
<script>
	export default {
		// 此处globalData为了演示其作用,不是uView框架的一部分
		globalData: {
			username: '白居易'
		},
		onLaunch() {
			// 1.1.0版本之前关于http拦截器代码,已平滑移动到/common/http.interceptor.js中
			// 注意,需要在/main.js中实例化Vue之后引入如下(详见文档说明):
			// import httpInterceptor from '@/common/http.interceptor.js'
			// Vue.use(httpInterceptor, app)
			// process.env.VUE_APP_PLATFORM 为通过js判断平台名称的方法,结果分别如下:
			/**
			 * h5,app-plus(nvue下也为app-plus),mp-weixin,mp-alipay......
			 */
		},
	}
</script>

<style lang="scss">
	@import "uview-ui/index.scss";
	@import "common/demo.scss";
</style>

================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2023 www.uviewui.com

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
<p align="center">
    <img alt="logo" src="https://uviewui.com/common/logo.png" width="120" height="120" style="margin-bottom: 10px;">
</p>
<h3 align="center" style="margin: 30px 0 30px;font-weight: bold;font-size:40px;">uView</h3>
<h3 align="center">多平台快速开发的UI框架</h3>

[![star](https://gitee.com/umicro/uView/badge/star.svg?theme=gvp)](https://gitee.com/umicro/uView/stargazers)
[![fork](https://gitee.com/umicro/uView/badge/fork.svg?theme=gvp)](https://gitee.com/umicro/uView/members)
[![stars](https://img.shields.io/github/stars/YanxinNet/uView?style=flat-square&logo=GitHub)](https://github.com/umicro/uView)
[![forks](https://img.shields.io/github/forks/YanxinNet/uView?style=flat-square&logo=GitHub)](https://github.com/umicro/uView)
[![issues](https://img.shields.io/github/issues/YanxinNet/uView?style=flat-square&logo=GitHub)](https://github.com/umicro/uView/issues)
[![Website](https://img.shields.io/badge/uView-up-blue?style=flat-square)](https://uviewui.com)
[![release](https://img.shields.io/github/v/release/YanxinNet/uView?style=flat-square)](https://gitee.com/umicro/uView/releases)
[![license](https://img.shields.io/github/license/YanxinNet/uView?style=flat-square)](https://en.wikipedia.org/wiki/MIT_License)

## 说明

uView UI,是[uni-app](https://uniapp.dcloud.io/)生态优秀的UI框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水

## [官方文档:https://v1.uviewui.com](https://v1.uviewui.com)

### 官方1群:1042987248(已满)
### 官方2群:249718512(已满)
### 官方3群:1129077272(已满)
### 官方4群:1084514613(已满)
### 官方5群:863820668(已满)
### 官方6群:745721078(已满)
### 官方7群:627867855(已满)
### 官方8群:496409492(已满)
### 官方9群:828504448(已满)
### [点击加10群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU)

## 特性

- 兼容安卓,iOS,微信小程序,H5,QQ小程序,百度小程序,支付宝小程序,头条小程序
- 60+精选组件,功能丰富,多端兼容,让您快速集成,开箱即用
- 众多贴心的JS利器,让您飞镖在手,召之即来,百步穿杨
- 众多的常用页面和布局,让您专注逻辑,事半功倍
- 详尽的文档支持,现代化的演示效果
- 按需引入,精简打包体积


## 预览

您可以通过**微信**扫码,查看最佳的演示效果。
<br>
<br>
<img src="https://uviewui.com/common/weixin_mini_qrcode.png" width="220" height="220" >


## 友情链接

#### **vue-admin-beautiful** —— [企业级、通用型中后台前端解决方案(基于vue/cli 4 最新版,同时支持电脑,手机,平板)](https://github.com/chuzhixin/vue-admin-beautiful)

#### **vue-admin-beautiful** —— [在线演示](http://beautiful.panm.cn/vue-admin-beautiful/#/index)

#### **pl-table** —— [ 完美解决 element 万级表格数据渲染卡顿问题](https://github.com/livelyPeng/pl-table)

#### **luch-request** —— [基于 Promise 开发的 uni-app 跨平台、项目级别的请求库,它有更小的体积,易用的 api,方便简单的自定义能力](https://www.quanzhan.co/luch-request/)
<br>

## 链接

- [官方文档](https://v1.uviewui.com/)
- [更新日志](https://v1.uviewui.com/components/changelog.html)
- [升级指南](https://v1.uviewui.com/components/changelog.html)
- [关于我们](https://v1.uviewui.com/cooperation/about.html)

## 交流反馈

欢迎加入我们的QQ群交流反馈:[点此跳转](https://www.uviewui.com/components/addQQGroup.html)

## 关于PR

> 我们非常乐意接受各位的优质PR,但在此之前我希望您了解uView2.0是一个需要兼容多个平台的(小程序、h5、ios app、android app)包括nvue页面、vue页面。
> 所以希望在您修复bug并提交之前尽可能的去这些平台测试一下兼容性。最好能携带测试截图以方便审核。非常感谢!

## 安装

#### **下载地址** —— [https://ext.dcloud.net.cn/plugin?id=1593](https://ext.dcloud.net.cn/plugin?id=1593)

## 快速上手

1. `main.js`引入uView库
```js
// main.js
import uView from 'uview-ui';
Vue.use(uView);
```

2. `App.vue`引入基础样式(注意style标签需声明scss属性支持)
```css
/* App.vue */
<style lang="scss">
@import "uview-ui/index.scss";
</style>
```

3. `uni.scss`引入全局scss变量文件
```css
/* uni.scss */
@import "uview-ui/theme.scss";
```

4. `pages.json`配置easycom规则(按需引入)

```js
// pages.json
{
	"easycom": {
		// 下载安装的方式需要前面的"@/",npm安装的方式无需"@/"
		// 下载安装方式
		"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
		// npm安装方式
		// "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
	},
	// 此为本身已有的内容
	"pages": [
		// ......
	]
}
```

请通过[快速上手](https://uviewui.com/components/quickstart.html)了解更详细的内容

## 使用方法
配置easycom规则后,自动按需引入,无需`import`组件,直接引用即可。

```html
<template>
	<u-button>按钮</u-button>
</template>
```

请通过[快速上手](https://uviewui.com/components/quickstart.html)了解更详细的内容


## 捐赠uView的研发

uView文档内容和框架源码全部开源免费,如果您认为uView帮到了您的开发工作,您可以捐赠uView的研发工作,捐赠无门槛,哪怕是一杯可乐也好(相信这比打赏主播更有意义)。

<img src="https://uviewui.com/common/wechat.png" width="220" >
<img style="margin-left: 100px;" src="https://uviewui.com/common/alipay.png" width="220" >

## 版权信息
uView遵循[MIT](https://en.wikipedia.org/wiki/MIT_License)开源协议,意味着您无需支付任何费用,也无需授权,即可将uView应用到您的产品中。


================================================
FILE: common/classify.data.js
================================================
export default[
   {
      "name": "女装",
      "foods": [
          {
            "name": "A字裙",
            "key": "A字裙",
            "icon": "https://cdn.uviewui.com/uview/common/classify/1/1.jpg",
            "cat": 10
          },
          {
            "name": "T恤",
            "key": "T恤",
            "icon": "https://cdn.uviewui.com/uview/common/classify/1/2.jpg",
            "cat": 10
          },
          {
            "name": "半身裙",
            "key": "半身裙",
            "icon": "https://cdn.uviewui.com/uview/common/classify/1/3.jpg",
            "cat": 10
          },
          {
            "name": "衬衫",
            "key": "衬衫",
            "icon": "https://cdn.uviewui.com/uview/common/classify/1/4.jpg",
            "cat": 10
          },
          {
            "name": "短裙",
            "key": "短裙",
            "icon": "https://cdn.uviewui.com/uview/common/classify/1/5.jpg",
            "cat": 10
          },
          {
            "name": "阔腿裤",
            "key": "阔腿裤",
            "icon": "https://cdn.uviewui.com/uview/common/classify/1/6.jpg",
            "cat": 10
          },
          {
            "name": "连衣裙",
            "key": "连衣裙",
            "icon": "https://cdn.uviewui.com/uview/common/classify/1/7.jpg",
            "cat": 10
          },
          {
            "name": "妈妈装",
            "key": "妈妈装",
            "icon": "https://cdn.uviewui.com/uview/common/classify/1/8.jpg",
            "cat": 10
          },
          {
            "name": "牛仔裤",
            "key": "牛仔裤",
            "icon": "https://cdn.uviewui.com/uview/common/classify/1/9.jpg",
            "cat": 10
          },
          {
            "name": "情侣装",
            "key": "情侣装",
            "icon": "https://cdn.uviewui.com/uview/common/classify/1/10.jpg",
            "cat": 10
          },
          {
            "name": "休闲裤",
            "key": "休闲裤",
            "icon": "https://cdn.uviewui.com/uview/common/classify/1/11.jpg",
            "cat": 10
          },
          {
            "name": "雪纺衫",
            "key": "雪纺衫",
            "icon": "https://cdn.uviewui.com/uview/common/classify/1/12.jpg",
            "cat": 10
          },
          {
            "name": "防晒衣",
            "key": "防晒衣",
            "icon": "https://cdn.uviewui.com/uview/common/classify/1/13.jpg",
            "cat": 10
          },
          {
            "name": "礼服/婚纱",
            "key": "礼服婚纱",
            "icon": "https://cdn.uviewui.com/uview/common/classify/1/14.jpg",
            "cat": 10
          }
      ]
   },
   {
    "name": "美食",
    "foods": [
        {
          "name": "火锅",
          "key": "火锅",
          "icon": "https://cdn.uviewui.com/uview/common/classify/2/1.jpg",
          "cat": 6
        },
        {
          "name": "糕点饼干",
          "key": "糕点饼干",
          "icon": "https://cdn.uviewui.com/uview/common/classify/2/2.jpg",
          "cat": 6
        },
        {
          "name": "坚果果干",
          "key": "坚果果干",
          "icon": "https://cdn.uviewui.com/uview/common/classify/2/3.jpg",
          "cat": 6
        },
        {
          "name": "酒类",
          "key": "酒类",
          "icon": "https://cdn.uviewui.com/uview/common/classify/2/4.jpg",
          "cat": 6
        },
        {
          "name": "辣条",
          "key": "辣条",
          "icon": "https://cdn.uviewui.com/uview/common/classify/2/5.jpg",
          "cat": 6
        },
        {
          "name": "大礼包",
          "key": "大礼包",
          "icon": "https://cdn.uviewui.com/uview/common/classify/2/6.jpg",
          "cat": 6
        },
        {
          "name": "精品茗茶",
          "key": "茶",
          "icon": "https://cdn.uviewui.com/uview/common/classify/2/7.jpg",
          "cat": 6
        },
        {
          "name": "休闲食品",
          "key": "休闲食品",
          "icon": "https://cdn.uviewui.com/uview/common/classify/2/8.jpg",
          "cat": 6
        },
        {
          "name": "糖果巧克力",
          "key": "糖果巧克力",
          "icon": "https://cdn.uviewui.com/uview/common/classify/2/9.jpg",
          "cat": 6
        },
        {
          "name": "方便速食",
          "key": "方便速食",
          "icon": "https://cdn.uviewui.com/uview/common/classify/2/10.jpg",
          "cat": 6
        },
        {
          "name": "营养代餐",
          "key": "营养代餐",
          "icon": "https://cdn.uviewui.com/uview/common/classify/2/11.jpg",
          "cat": 6
        },
        {
          "name": "粮油副食",
          "key": "粮油",
          "icon": "https://cdn.uviewui.com/uview/common/classify/2/12.jpg",
          "cat": 6
        },
        {
          "name": "生鲜水果",
          "key": "水果",
          "icon": "https://cdn.uviewui.com/uview/common/classify/2/13.jpg",
          "cat": 6
        },
        {
          "name": "饮品",
          "key": "饮品",
          "icon": "https://cdn.uviewui.com/uview/common/classify/2/14.jpg",
          "cat": 6
        }
        ]
    },
    {
        "name": "美妆",
        "foods": [
            {
                "name": "化妆刷",
                "key": "化妆刷",
                "icon": "https://cdn.uviewui.com/uview/common/classify/3/1.jpg",
                "cat": 3
            },
            {
                "name": "粉底",
                "key": "粉底",
                "icon": "https://cdn.uviewui.com/uview/common/classify/3/2.jpg",
                "cat": 3
            },
            {
                "name": "洗发护发",
                "key": "洗发护发",
                "icon": "https://cdn.uviewui.com/uview/common/classify/3/3.jpg",
                "cat": 3
            },
            {
                "name": "美容工具",
                "key": "美容工具",
                "icon": "https://cdn.uviewui.com/uview/common/classify/3/4.jpg",
                "cat": 3
            },
            {
                "name": "眼部护理",
                "key": "眼部护理",
                "icon": "https://cdn.uviewui.com/uview/common/classify/3/5.jpg",
                "cat": 3
            },
            {
                "name": "眉妆",
                "key": "眉妆",
                "icon": "https://cdn.uviewui.com/uview/common/classify/3/6.jpg",
                "cat": 3
            },
            {
                "name": "卸妆品",
                "key": "卸妆品",
                "icon": "https://cdn.uviewui.com/uview/common/classify/3/7.jpg",
                "cat": 3
            },
            {
                "name": "基础护肤",
                "key": "基础护肤",
                "icon": "https://cdn.uviewui.com/uview/common/classify/3/8.jpg",
                "cat": 3
            },
            {
                "name": "眼妆",
                "key": "眼妆",
                "icon": "https://cdn.uviewui.com/uview/common/classify/3/9.jpg",
                "cat": 3
            },
            {
                "name": "唇妆",
                "key": "唇妆",
                "icon": "https://cdn.uviewui.com/uview/common/classify/3/10.jpg",
                "cat": 3
            },
            {
                "name": "面膜",
                "key": "面膜",
                "icon": "https://cdn.uviewui.com/uview/common/classify/3/11.jpg",
                "cat": 3
            },
            {
                "name": "沐浴用品",
                "key": "沐浴用品",
                "icon": "https://cdn.uviewui.com/uview/common/classify/3/12.jpg",
                "cat": 3
            },
            {
                "name": "护肤套装",
                "key": "护肤套装",
                "icon": "https://cdn.uviewui.com/uview/common/classify/3/13.jpg",
                "cat": 3
            },
            {
                "name": "防晒品",
                "key": "防晒品",
                "icon": "https://cdn.uviewui.com/uview/common/classify/3/14.jpg",
                "cat": 3
            },
            {
                "name": "美甲",
                "key": "美甲",
                "icon": "https://cdn.uviewui.com/uview/common/classify/3/15.jpg",
                "cat": 3
            }

        ]
    },
    {
        "name": "居家日用",
        "foods": [
            {
              "name": "垃圾袋",
              "key": "垃圾袋",
              "icon": "https://cdn.uviewui.com/uview/common/classify/4/1.jpg",
              "cat": 4
            },
            {
                "name": "纸巾",
                "key": "纸巾",
                "icon": "https://cdn.uviewui.com/uview/common/classify/4/2.jpg",
                "cat": 4
            },
            {
                "name": "驱蚊用品",
                "key": "驱蚊用品",
                "icon": "https://cdn.uviewui.com/uview/common/classify/4/3.jpg",
                "cat": 4
            },
            {
                "name": "收纳神器",
                "key": "收纳神器",
                "icon": "https://cdn.uviewui.com/uview/common/classify/4/4.jpg",
                "cat": 4
            },
            {
                "name": "厨房用品",
                "key": "厨房用品",
                "icon": "https://cdn.uviewui.com/uview/common/classify/4/5.jpg",
                "cat": 4
            },
            {
                "name": "厨房烹饪",
                "key": "烹饪",
                "icon": "https://cdn.uviewui.com/uview/common/classify/4/6.jpg",
                "cat": 4
            },
            {
                "name": "衣物晾晒",
                "key": "衣物晾晒",
                "icon": "https://cdn.uviewui.com/uview/common/classify/4/7.jpg",
                "cat": 4
            },
            {
                "name": "衣物护理",
                "key": "衣物护理",
                "icon": "https://cdn.uviewui.com/uview/common/classify/4/8.jpg",
                "cat": 4
            },
            {
                "name": "宠物用品",
                "key": "宠物用品",
                "icon": "https://cdn.uviewui.com/uview/common/classify/4/9.jpg",
                "cat": 4
            },
            {
                "name": "医药保健",
                "key": "医药",
                "icon": "https://cdn.uviewui.com/uview/common/classify/4/10.jpg",
                "cat": 4
            },
            {
                "name": "日用百货",
                "key": "百货",
                "icon": "https://cdn.uviewui.com/uview/common/classify/4/11.jpg",
                "cat": 4
            },
            {
                "name": "清洁用品",
                "key": "清洁",
                "icon": "https://cdn.uviewui.com/uview/common/classify/4/12.jpg",
                "cat": 4
            },
            {
                "name": "绿植园艺",
                "key": "绿植",
                "icon": "https://cdn.uviewui.com/uview/common/classify/4/13.jpg",
                "cat": 4
            }
        ]
    },
    {
        "name": "男装",
        "foods": [
            {
                "name": "爸爸装",
                "key": "爸爸装",
                "icon": "https://cdn.uviewui.com/uview/common/classify/5/1.jpg",
                "cat": 12
            },
            {
                "name": "牛仔裤",
                "key": "牛仔裤",
                "icon": "https://cdn.uviewui.com/uview/common/classify/5/2.jpg",
                "cat": 12
            },
            {
                "name": "衬衫",
                "key": "衬衫",
                "icon": "https://cdn.uviewui.com/uview/common/classify/5/3.jpg",
                "cat": 12
            },
            {
                "name": "休闲裤",
                "key": "休闲裤",
                "icon": "https://cdn.uviewui.com/uview/common/classify/5/4.jpg",
                "cat": 12
            },
            {
                "name": "外套",
                "key": "外套",
                "icon": "https://cdn.uviewui.com/uview/common/classify/5/5.jpg",
                "cat": 12
            },
            {
                "name": "T恤",
                "key": "T恤",
                "icon": "https://cdn.uviewui.com/uview/common/classify/5/6.jpg",
                "cat": 12
            },
            {
                "name": "套装",
                "key": "套装",
                "icon": "https://cdn.uviewui.com/uview/common/classify/5/7.jpg",
                "cat": 12
            },
            {
                "name": "运动裤",
                "key": "运动裤",
                "icon": "https://cdn.uviewui.com/uview/common/classify/5/8.jpg",
                "cat": 12
            },
            {
                "name": "马甲/背心",
                "key": "马甲背心",
                "icon": "https://cdn.uviewui.com/uview/common/classify/5/9.jpg",
                "cat": 12
            },
            {
                "name": "POLO衫",
                "key": "POLO衫",
                "icon": "https://cdn.uviewui.com/uview/common/classify/5/10.jpg",
                "cat": 12
            },
            {
                "name": "商务装",
                "key": "商务装",
                "icon": "https://cdn.uviewui.com/uview/common/classify/5/11.jpg",
                "cat": 12
            }
        ]
    },
    {
        "name": "鞋品",
        "foods": [
            {
                "name": "单鞋",
                "key": "单鞋",
                "icon": "https://cdn.uviewui.com/uview/common/classify/6/1.jpg",
                "cat": 5
            },
            {
                "name": "皮鞋",
                "key": "皮鞋",
                "icon": "https://cdn.uviewui.com/uview/common/classify/6/2.jpg",
                "cat": 5
            },
            {
                "name": "帆布鞋",
                "key": "帆布鞋",
                "icon": "https://cdn.uviewui.com/uview/common/classify/6/3.jpg",
                "cat": 5
            },
            {
                "name": "北京老布鞋",
                "key": "北京老布鞋",
                "icon": "https://cdn.uviewui.com/uview/common/classify/6/4.jpg",
                "cat": 5
            },
            {
                "name": "运动鞋",
                "key": "运动鞋",
                "icon": "https://cdn.uviewui.com/uview/common/classify/6/5.jpg",
                "cat": 5
            },
            {
                "name": "拖鞋",
                "key": "拖鞋",
                "icon": "https://cdn.uviewui.com/uview/common/classify/6/6.jpg",
                "cat": 5
            },
            {
                "name": "凉鞋",
                "key": "凉鞋",
                "icon": "https://cdn.uviewui.com/uview/common/classify/6/7.jpg",
                "cat": 5
            },
            {
                "name": "休闲鞋",
                "key": "休闲鞋",
                "icon": "https://cdn.uviewui.com/uview/common/classify/6/8.jpg",
                "cat": 5
            },
            {
                "name": "高跟鞋",
                "key": "高跟鞋",
                "icon": "https://cdn.uviewui.com/uview/common/classify/6/9.jpg",
                "cat": 5
            },
            {
                "name": "老人鞋",
                "key": "老人鞋",
                "icon": "https://cdn.uviewui.com/uview/common/classify/6/10.jpg",
                "cat": 5
            },
            {
                "name": "懒人鞋",
                "key": "懒人鞋",
                "icon": "https://cdn.uviewui.com/uview/common/classify/6/11.jpg",
                "cat": 5
            }
        ]
    },
    {
        "name": "数码家电",
        "foods": [
            {
                "name": "数据线",
                "key": "数据线",
                "icon": "https://cdn.uviewui.com/uview/common/classify/7/1.jpg",
                "cat": 8
            },
            {
                "name": "耳机",
                "key": "耳机",
                "icon": "https://cdn.uviewui.com/uview/common/classify/7/2.jpg",
                "cat": 8
            },
            {
                "name": "生活家电",
                "key": "家电",
                "icon": "https://cdn.uviewui.com/uview/common/classify/7/3.jpg",
                "cat": 8
            },
            {
                "name": "电风扇",
                "key": "电风扇",
                "icon": "https://cdn.uviewui.com/uview/common/classify/7/4.jpg",
                "cat": 8
            },
            {
                "name": "电吹风",
                "key": "电吹风",
                "icon": "https://cdn.uviewui.com/uview/common/classify/7/5.jpg",
                "cat": 8
            },
            {
                "name": "手机壳",
                "key": "手机壳",
                "icon": "https://cdn.uviewui.com/uview/common/classify/7/6.jpg",
                "cat": 8
            },
            {
                "name": "榨汁机",
                "key": "榨汁机",
                "icon": "https://cdn.uviewui.com/uview/common/classify/7/7.jpg",
                "cat": 8
            },
            {
                "name": "小家电",
                "key": "小家电",
                "icon": "https://cdn.uviewui.com/uview/common/classify/7/8.jpg",
                "cat": 8
            },
            {
                "name": "数码电子",
                "key": "数码",
                "icon": "https://cdn.uviewui.com/uview/common/classify/7/9.jpg",
                "cat": 8
            },
            {
                "name": "电饭锅",
                "key": "电饭锅",
                "icon": "https://cdn.uviewui.com/uview/common/classify/7/10.jpg",
                "cat": 8
            },
            {
                "name": "手机支架",
                "key": "手机支架",
                "icon": "https://cdn.uviewui.com/uview/common/classify/7/11.jpg",
                "cat": 8
            },
            {
                "name": "剃须刀",
                "key": "剃须刀",
                "icon": "https://cdn.uviewui.com/uview/common/classify/7/12.jpg",
                "cat": 8
            },
            {
                "name": "充电宝",
                "key": "充电宝",
                "icon": "https://cdn.uviewui.com/uview/common/classify/7/13.jpg",
                "cat": 8
            },
            {
                "name": "手机配件",
                "key": "手机配件",
                "icon": "https://cdn.uviewui.com/uview/common/classify/7/14.jpg",
                "cat": 8
            }
        ]
    },
    {
        "name": "母婴",
        "foods": [
            {
              "name": "婴童服饰",
              "key": "衣服",
              "icon": "https://cdn.uviewui.com/uview/common/classify/8/1.jpg",
              "cat": 2  
            },
            {
                "name": "玩具乐器",
                "key": "玩具乐器",
                "icon": "https://cdn.uviewui.com/uview/common/classify/8/2.jpg",
                "cat": 2  
            },
            {
                "name": "尿不湿",
                "key": "尿不湿",
                "icon": "https://cdn.uviewui.com/uview/common/classify/8/3.jpg",
                "cat": 2  
            },
            {
                "name": "安抚牙胶",
                "key": "安抚牙胶",
                "icon": "https://cdn.uviewui.com/uview/common/classify/8/4.jpg",
                "cat": 2  
            },
            {
                "name": "奶瓶奶嘴",
                "key": "奶瓶奶嘴",
                "icon": "https://cdn.uviewui.com/uview/common/classify/8/5.jpg",
                "cat": 2  
            },
            {
                "name": "孕妈用品",
                "key": "孕妈用品",
                "icon": "https://cdn.uviewui.com/uview/common/classify/8/6.jpg",
                "cat": 2  
            },
            {
                "name": "宝宝用品",
                "key": "宝宝用品",
                "icon": "https://cdn.uviewui.com/uview/common/classify/8/7.jpg",
                "cat": 2  
            },
            {
                "name": "婴童湿巾",
                "key": "湿巾",
                "icon": "https://cdn.uviewui.com/uview/common/classify/8/8.jpg",
                "cat": 2  
            },
            {
                "name": "喂养洗护",
                "key": "洗护",
                "icon": "https://cdn.uviewui.com/uview/common/classify/8/9.jpg",
                "cat": 2  
            },
            {
                "name": "婴童鞋靴",
                "key": "童鞋",
                "icon": "https://cdn.uviewui.com/uview/common/classify/8/10.jpg",
                "cat": 2  
            },
            {
                "name": "口水巾",
                "key": "口水巾",
                "icon": "https://cdn.uviewui.com/uview/common/classify/8/11.jpg",
                "cat": 2  
            },
            {
                "name": "营养辅食",
                "key": "营养",
                "icon": "https://cdn.uviewui.com/uview/common/classify/8/12.jpg",
                "cat": 2  
            },
            {
                "name": "婴幼书籍",
                "key": "书籍",
                "icon": "https://cdn.uviewui.com/uview/common/classify/8/13.jpg",
                "cat": 2  
            },
            {
                "name": "婴儿车",
                "key": "婴儿车",
                "icon": "https://cdn.uviewui.com/uview/common/classify/8/14.jpg",
                "cat": 2  
            }
        ]
    },
    {
        "name": "箱包",
        "foods": [
            {
                "name": "单肩包",
                "key": "单肩包",
                "icon": "https://cdn.uviewui.com/uview/common/classify/9/1.jpg",
                "cat": 0
            },
            {
                "name": "斜挎包",
                "key": "斜挎包",
                "icon": "https://cdn.uviewui.com/uview/common/classify/9/2.jpg",
                "cat": 0
            },
            {
                "name": "女包",
                "key": "女包",
                "icon": "https://cdn.uviewui.com/uview/common/classify/9/3.jpg",
                "cat": 0
            },
            {
                "name": "男包",
                "key": "男包",
                "icon": "https://cdn.uviewui.com/uview/common/classify/9/4.jpg",
                "cat": 0
            },
            {
                "name": "双肩包",
                "key": "双肩包",
                "icon": "https://cdn.uviewui.com/uview/common/classify/9/5.jpg",
                "cat": 0
            },
            {
                "name": "小方包",
                "key": "小方包",
                "icon": "https://cdn.uviewui.com/uview/common/classify/9/6.jpg",
                "cat": 0
            },
            {
                "name": "钱包",
                "key": "钱包",
                "icon": "https://cdn.uviewui.com/uview/common/classify/9/7.jpg",
                "cat": 0
            },
            {
                "name": "旅行箱包",
                "key": "旅行箱包",
                "icon": "https://cdn.uviewui.com/uview/common/classify/9/8.jpg",
                "cat": 0
            },
            {
                "name": "零钱包",
                "key": "零钱包",
                "icon": "https://cdn.uviewui.com/uview/common/classify/9/9.jpg",
                "cat": 0
            },
            {
                "name": "手提包",
                "key": "手提包",
                "icon": "https://cdn.uviewui.com/uview/common/classify/9/10.jpg",
                "cat": 0
            },
            {
                "name": "胸包",
                "key": "胸包",
                "icon": "https://cdn.uviewui.com/uview/common/classify/9/11.jpg",
                "cat": 0
            }
        ]
    },
    {
        "name": "内衣",
        "foods": [
            {
                "name": "袜子",
                "key": "袜子",
                "icon": "https://cdn.uviewui.com/uview/common/classify/10/1.jpg",
                "cat": 11
            },
            {
                "name": "吊带背心",
                "key": "吊带背心",
                "icon": "https://cdn.uviewui.com/uview/common/classify/10/2.jpg",
                "cat": 11
            },
            {
                "name": "抹胸",
                "key": "抹胸",
                "icon": "https://cdn.uviewui.com/uview/common/classify/10/3.jpg",
                "cat": 11
            },
            {
                "name": "内裤",
                "key": "内裤",
                "icon": "https://cdn.uviewui.com/uview/common/classify/10/4.jpg",
                "cat": 11
            },
            {
                "name": "文胸",
                "key": "文胸",
                "icon": "https://cdn.uviewui.com/uview/common/classify/10/5.jpg",
                "cat": 11
            },
            {
                "name": "文胸套装",
                "key": "文胸套装",
                "icon": "https://cdn.uviewui.com/uview/common/classify/10/6.jpg",
                "cat": 11
            },
            {
                "name": "打底塑身",
                "key": "打底塑身",
                "icon": "https://cdn.uviewui.com/uview/common/classify/10/7.jpg",
                "cat": 11
            },
            {
                "name": "家居服",
                "key": "家居服",
                "icon": "https://cdn.uviewui.com/uview/common/classify/10/8.jpg",
                "cat": 11
            },
            {
                "name": "船袜",
                "key": "船袜",
                "icon": "https://cdn.uviewui.com/uview/common/classify/10/9.jpg",
                "cat": 11
            },
            {
                "name": "情侣睡衣",
                "key": "情侣睡衣",
                "icon": "https://cdn.uviewui.com/uview/common/classify/10/10.jpg",
                "cat": 11
            },
            {
                "name": "丝袜",
                "key": "丝袜",
                "icon": "https://cdn.uviewui.com/uview/common/classify/10/11.jpg",
                "cat": 11
            }
        ]
    },
    {
        "name": "文娱车品",
        "foods": [
            {
                "name": "车市车品",
                "key": "车市车品",
                "icon": "https://cdn.uviewui.com/uview/common/classify/11/1.jpg",
                "cat": 7
            },
            {
                "name": "办公文具",
                "key": "办公文具",
                "icon": "https://cdn.uviewui.com/uview/common/classify/11/2.jpg",
                "cat": 7
            },
            {
                "name": "考试必备",
                "key": "考试必备",
                "icon": "https://cdn.uviewui.com/uview/common/classify/11/3.jpg",
                "cat": 7
            },
            {
                "name": "笔记本",
                "key": "笔记本",
                "icon": "https://cdn.uviewui.com/uview/common/classify/11/4.jpg",
                "cat": 7
            },
            {
                "name": "艺术礼品",
                "key": "礼品",
                "icon": "https://cdn.uviewui.com/uview/common/classify/11/5.jpg",
                "cat": 7
            },
            {
                "name": "书写工具",
                "key": "书写工具",
                "icon": "https://cdn.uviewui.com/uview/common/classify/11/6.jpg",
                "cat": 7
            },
            {
                "name": "车载电器",
                "key": "车载电器",
                "icon": "https://cdn.uviewui.com/uview/common/classify/11/7.jpg",
                "cat": 7
            },
            {
                "name": "图书音像",
                "key": "图书音像",
                "icon": "https://cdn.uviewui.com/uview/common/classify/11/8.jpg",
                "cat": 7
            },
            {
                "name": "画具画材",
                "key": "画具画材",
                "icon": "https://cdn.uviewui.com/uview/common/classify/11/9.jpg",
                "cat": 7
            }
        ]
    },
    {
        "name": "配饰",
        "foods": [
            {
                "name": "太阳镜",
                "key": "太阳镜",
                "icon": "https://cdn.uviewui.com/uview/common/classify/12/1.jpg",
                "cat": 0
            },
            {
                "name": "皮带",
                "key": "皮带",
                "icon": "https://cdn.uviewui.com/uview/common/classify/12/2.jpg",
                "cat": 0
            },
            {
                "name": "棒球帽",
                "key": "棒球帽",
                "icon": "https://cdn.uviewui.com/uview/common/classify/12/3.jpg",
                "cat": 0
            },
            {
                "name": "手表",
                "key": "手表",
                "icon": "https://cdn.uviewui.com/uview/common/classify/12/4.jpg",
                "cat": 0
            },
            {
                "name": "发饰",
                "key": "发饰",
                "icon": "https://cdn.uviewui.com/uview/common/classify/12/5.jpg",
                "cat": 0
            },
            {
                "name": "项链",
                "key": "项链",
                "icon": "https://cdn.uviewui.com/uview/common/classify/12/6.jpg",
                "cat": 0
            },
            {
                "name": "手饰",
                "key": "手饰",
                "icon": "https://cdn.uviewui.com/uview/common/classify/12/7.jpg",
                "cat": 0
            },
            {
                "name": "耳环",
                "key": "耳环",
                "icon": "https://cdn.uviewui.com/uview/common/classify/12/8.jpg",
                "cat": 0
            },
            {
                "name": "帽子丝巾",
                "key": "帽子丝巾",
                "icon": "https://cdn.uviewui.com/uview/common/classify/12/9.jpg",
                "cat": 0
            },
            {
                "name": "眼镜墨镜",
                "key": "眼镜墨镜",
                "icon": "https://cdn.uviewui.com/uview/common/classify/12/10.jpg",
                "cat": 0
            },
            {
                "name": "发带发箍",
                "key": "发带发箍",
                "icon": "https://cdn.uviewui.com/uview/common/classify/12/11.jpg",
                "cat": 0
            }
        ]
    },
    {
        "name": "家装家纺",
        "foods": [
            {
                "name": "家居饰品",
                "key": "家居饰品",
                "icon": "https://cdn.uviewui.com/uview/common/classify/13/1.jpg",
                "cat": 0
            },
            {
                "name": "凉席",
                "key": "凉席",
                "icon": "https://cdn.uviewui.com/uview/common/classify/13/2.jpg",
                "cat": 0
            },
            {
                "name": "背枕靠枕",
                "key": "靠枕",
                "icon": "https://cdn.uviewui.com/uview/common/classify/13/3.jpg",
                "cat": 0
            },
            {
                "name": "床上用品",
                "key": "床上用品",
                "icon": "https://cdn.uviewui.com/uview/common/classify/13/4.jpg",
                "cat": 0
            },
            {
                "name": "摆件",
                "key": "摆件",
                "icon": "https://cdn.uviewui.com/uview/common/classify/13/5.jpg",
                "cat": 0
            },
            {
                "name": "四件套",
                "key": "四件套",
                "icon": "https://cdn.uviewui.com/uview/common/classify/13/6.jpg",
                "cat": 0
            },
            {
                "name": "装饰品",
                "key": "装饰品",
                "icon": "https://cdn.uviewui.com/uview/common/classify/13/7.jpg",
                "cat": 0
            },
            {
                "name": "卫浴用品",
                "key": "卫浴",
                "icon": "https://cdn.uviewui.com/uview/common/classify/13/8.jpg",
                "cat": 0
            },
            {
                "name": "家居家装",
                "key": "家具",
                "icon": "https://cdn.uviewui.com/uview/common/classify/13/9.jpg",
                "cat": 0
            },
            {
                "name": "蚊帐",
                "key": "蚊帐",
                "icon": "https://cdn.uviewui.com/uview/common/classify/13/10.jpg",
                "cat": 0
            },
            {
                "name": "墙纸贴纸",
                "key": "墙纸",
                "icon": "https://cdn.uviewui.com/uview/common/classify/13/11.jpg",
                "cat": 0
            },
            {
                "name": "空调被",
                "key": "空调被",
                "icon": "https://cdn.uviewui.com/uview/common/classify/13/12.jpg",
                "cat": 0
            }
        ]
    },
    {
        "name": "户外运动",
        "foods": [
            {
                "name": "游泳装备",
                "key": "游泳",
                "icon": "https://cdn.uviewui.com/uview/common/classify/14/1.jpg",
                "cat": 0
            },
            {
                "name": "泳镜",
                "key": "泳镜",
                "icon": "https://cdn.uviewui.com/uview/common/classify/14/2.jpg",
                "cat": 0
            },
            {
                "name": "户外装备",
                "key": "户外",
                "icon": "https://cdn.uviewui.com/uview/common/classify/14/3.jpg",
                "cat": 0
            },
            {
                "name": "健身服饰",
                "key": "健身",
                "icon": "https://cdn.uviewui.com/uview/common/classify/14/4.jpg",
                "cat": 0
            },
            {
                "name": "泳衣",
                "key": "泳衣",
                "icon": "https://cdn.uviewui.com/uview/common/classify/14/5.jpg",
                "cat": 0
            },
            {
                "name": "瑜伽垫",
                "key": "瑜伽垫",
                "icon": "https://cdn.uviewui.com/uview/common/classify/14/6.jpg",
                "cat": 0
            },
            {
                "name": "瑜伽用品",
                "key": "瑜伽",
                "icon": "https://cdn.uviewui.com/uview/common/classify/14/7.jpg",
                "cat": 0
            },
            {
                "name": "健身装备",
                "key": "健身",
                "icon": "https://cdn.uviewui.com/uview/common/classify/14/8.jpg",
                "cat": 0
            },
            {
                "name": "球迷用品",
                "key": "球迷",
                "icon": "https://cdn.uviewui.com/uview/common/classify/14/9.jpg",
                "cat": 0
            }
        ]
    }
]

================================================
FILE: common/demo.scss
================================================
/* #ifndef APP-NVUE */
view,
text {
	box-sizing: border-box;
}
/* #endif */

/* start--演示页面使用的统一样式--start */
.u-demo {
	padding: 25px 20px;
}

.u-demo-wrap {
	border-width: 1px;
	border-color: #ddd;
	border-style: dashed;
	background-color: rgb(250, 250, 250);
	padding: 20px 10px;
	border-radius: 3px;
}

.u-demo-area {
	text-align: center;
}

.u-no-demo-here {
	color: $u-tips-color;
	font-size: 13px;
}

.u-demo-result-line {
	border-width: 1px;
	border-color: #ddd;
	border-style: dashed;
	padding: 5px 20px;
	margin-top: 30px;
	border-radius: 5px;
	background-color: rgb(240, 240, 240);
	color: $u-content-color;
	font-size: 16px;
	/* #ifndef APP-NVUE */
	word-break: break-word;
	display: inline-block;
	/* #endif */
	text-align: left;
	
}

.u-demo-title,
.u-config-title {
	text-align: center;
	font-size: 16px;
	font-weight: bold;
	margin-bottom: 20px;
}

.u-config-item {
	margin-top: 25px;
}

.u-config-title {
	margin-top: 20px;
	padding-bottom: 5px;
}

.u-item-title {
	position: relative;
	font-size: 15px;
	padding-left: 8px;
	line-height: 1;
	margin-bottom: 11px;
}

.u-item-title:after {
	position: absolute;
	width: 4px;
	top: -1px;
	height: 16px;
	/* #ifndef APP-NVUE */
	content: '';
	/* #endif */
	left: 0;
	border-radius: 10px;
	background-color: $u-content-color;
}
/* end--演示页面使用的统一样式--end */


================================================
FILE: common/http.api.js
================================================
// 如果没有通过拦截器配置域名的话,可以在这里写上完整的URL(加上域名部分)
let hotSearchUrl = '/ebapi/store_api/hot_search';
let indexUrl = '/ebapi/public_api/index';

// 此处第二个参数vm,就是我们在页面使用的this,你可以通过vm获取vuex等操作,更多内容详见uView对拦截器的介绍部分:
// 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
const install = (Vue, vm) => {
	// 此处没有使用传入的params参数
	let getSearch = (params = {}) => vm.$u.get(hotSearchUrl, {
		id: 2
	});
	
	// 此处使用了传入的params参数,一切自定义即可
	let getInfo = (params = {}) => vm.$u.post(indexUrl, params);
	
	// 将各个定义的接口名称,统一放进对象挂载到vm.$u.api(因为vm就是this,也即this.$u.api)下
	vm.$u.api = {getSearch, getInfo};
}

export default {
	install
}

================================================
FILE: common/http.interceptor.js
================================================
// 这里的vm,就是我们在vue文件里面的this,所以我们能在这里获取vuex的变量,比如存放在里面的token
// 同时,我们也可以在此使用getApp().globalData,如果你把token放在getApp().globalData的话,也是可以使用的
const install = (Vue, vm) => {
	Vue.prototype.$u.http.setConfig({
		baseUrl: 'https://api.youzixy.com',
		// 如果将此值设置为true,拦截回调中将会返回服务端返回的所有数据response,而不是response.data
		// 设置为true后,就需要在this.$u.http.interceptor.response进行多一次的判断,请打印查看具体值
		// originalData: true, 
		// 设置自定义头部content-type
		// header: {
		// 	'content-type': 'xxx'
		// }
	});
	// 请求拦截,配置Token等参数
	Vue.prototype.$u.http.interceptor.request = (config) => {
		config.header.Token = 'xxxxxx';
		
		// 方式一,存放在vuex的token,假设使用了uView封装的vuex方式,见:https://uviewui.com/components/globalVariable.html
		// config.header.token = vm.token;
		
		// 方式二,如果没有使用uView封装的vuex方法,那么需要使用$store.state获取
		// config.header.token = vm.$store.state.token;
		
		// 方式三,如果token放在了globalData,通过getApp().globalData获取
		// config.header.token = getApp().globalData.username;
		
		// 方式四,如果token放在了Storage本地存储中,拦截是每次请求都执行的,所以哪怕您重新登录修改了Storage,下一次的请求将会是最新值
		// const token = uni.getStorageSync('token');
		// config.header.token = token;
		
		return config; 
	}
	// 响应拦截,判断状态码是否通过
	Vue.prototype.$u.http.interceptor.response = (res) => {
		// 如果把originalData设置为了true,这里得到将会是服务器返回的所有的原始数据
		// 判断可能变成了res.statueCode,或者res.data.code之类的,请打印查看结果
		if(res.code == 200) {
			// 如果把originalData设置为了true,这里return回什么,this.$u.post的then回调中就会得到什么
			return res.data;  
		} else return false;
	}
}

export default {
	install
}

================================================
FILE: common/index.list.js
================================================
module.exports = {
	list: [{
			"letter": "A",
			"data": [{
					"name": "阿拉斯加",
					"mobile": "13588889999",
					"keyword": "阿拉斯加ABA13588889999"
				},
				{
					"name": "阿克苏",
					"mobile": "0551-4386721",
					"keyword": "阿克苏AKESU0551-4386721"
				},
				{
					"name": "阿拉善",
					"mobile": "4008009100",
					"keyword": "阿拉善ALASHAN4008009100"
				},
				{
					"name": "阿勒泰",
					"mobile": "13588889999",
					"keyword": "阿勒泰ALETAI13588889999"
				},
				{
					"name": "阿里",
					"mobile": "13588889999",
					"keyword": "阿里ALI13588889999"
				},
				{
					"name": "安阳",
					"mobile": "13588889999",
					"keyword": "13588889999安阳ANYANG"
				}
			]
		},
		{
			"letter": "B",
			"data": [{
					"name": "白城",
					"mobile": "该主子没有留电话~",
					"keyword": "白城BAICHENG"
				},
				{
					"name": "白山",
					"mobile": "13588889999",
					"keyword": "白山BAISHAN13588889999"
				},
				{
					"name": "白银",
					"mobile": "13588889999",
					"keyword": "白银BAIYIN13588889999"
				},
				{
					"name": "保定",
					"mobile": "13588889999",
					"keyword": "保定BAODING13588889999"
				}
			]
		},
		{
			"letter": "C",
			"data": [{
					"name": "沧州",
					"mobile": "13588889999",
					"keyword": "沧州CANGZHOU13588889999"
				},
				{
					"name": "长春",
					"mobile": "13588889999",
					"keyword": "长春CHANGCHUN13588889999"
				}
			]
		},
		{
			"letter": "D",
			"data": [{
					"name": "大理",
					"mobile": "13588889999",
					"keyword": "大理DALI13588889999"
				},
				{
					"name": "大连",
					"mobile": "13588889999",
					"keyword": "大连DALIAN13588889999"
				}
			]
		},
		{
			"letter": "E",
			"data": [{
					"name": "鄂尔多斯",
					"mobile": "13588889999",
					"keyword": "鄂尔多斯EERDUOSI13588889999"
				},
				{
					"name": "恩施",
					"mobile": "13588889999",
					"keyword": "恩施ENSHI13588889999"
				},
				{
					"name": "鄂州",
					"mobile": "13588889999",
					"keyword": "鄂州EZHOU13588889999"
				}
			]
		},
		{
			"letter": "F",
			"data": [{
					"name": "防城港",
					"mobile": "该主子没有留电话~",
					"keyword": "防城港FANGCHENGGANG"
				},
				{
					"name": "抚顺",
					"mobile": "13588889999",
					"keyword": "抚顺FUSHUN13588889999"
				},
				{
					"name": "阜新",
					"mobile": "13588889999",
					"keyword": "阜新FUXIN13588889999"
				},
				{
					"name": "阜阳",
					"mobile": "13588889999",
					"keyword": "阜阳FUYANG13588889999"
				},
				{
					"name": "抚州",
					"mobile": "13588889999",
					"keyword": "抚州FUZHOU13588889999"
				},
				{
					"name": "福州",
					"mobile": "13588889999",
					"keyword": "福州FUZHOU13588889999"
				}
			]
		},
		{
			"letter": "G",
			"data": [{
					"name": "甘南",
					"mobile": "13588889999",
					"keyword": "甘南GANNAN13588889999"
				},
				{
					"name": "赣州",
					"mobile": "13588889999",
					"keyword": "赣州GANZHOU13588889999"
				},
				{
					"name": "甘孜",
					"mobile": "13588889999",
					"keyword": "甘孜GANZI13588889999"
				}
			]
		},
		{
			"letter": "H",
			"data": [{
					"name": "哈尔滨",
					"mobile": "13588889999",
					"keyword": "哈尔滨HAERBIN13588889999"
				},
				{
					"name": "海北",
					"mobile": "13588889999",
					"keyword": "海北HAIBEI13588889999"
				},
				{
					"name": "海东",
					"mobile": "13588889999",
					"keyword": "海东HAIDONG13588889999"
				},
				{
					"name": "海口",
					"mobile": "13588889999",
					"keyword": "海口HAIKOU13588889999"
				}
			]
		},
		{
			"letter": "I",
			"data": [{
				"name": "ice",
				"mobile": "13588889999",
				"keyword": "佳木斯JIAMUSI13588889999"
			}]
		},
		{
			"letter": "J",
			"data": [{
					"name": "佳木斯",
					"mobile": "13588889999",
					"keyword": "佳木斯JIAMUSI13588889999"
				},
				{
					"name": "吉安",
					"mobile": "13588889999",
					"keyword": "吉安JIAN13588889999"
				},
				{
					"name": "江门",
					"mobile": "13588889999",
					"keyword": "江门JIANGMEN13588889999"
				}
			]
		},
		{
			"letter": "K",
			"data": [{
					"name": "开封",
					"mobile": "13588889999",
					"keyword": "开封KAIFENG13588889999"
				},
				{
					"name": "喀什",
					"mobile": "13588889999",
					"keyword": "喀什KASHI13588889999"
				},
				{
					"name": "克拉玛依",
					"mobile": "13588889999",
					"keyword": "克拉玛依KELAMAYI13588889999"
				}
			]
		},
		{
			"letter": "L",
			"data": [{
					"name": "来宾",
					"mobile": "13588889999",
					"keyword": "来宾LAIBIN13588889999"
				},
				{
					"name": "兰州",
					"mobile": "13588889999",
					"keyword": "兰州LANZHOU13588889999"
				},
				{
					"name": "拉萨",
					"mobile": "13588889999",
					"keyword": "拉萨LASA13588889999"
				},
				{
					"name": "乐山",
					"mobile": "13588889999",
					"keyword": "乐山LESHAN13588889999"
				},
				{
					"name": "凉山",
					"mobile": "13588889999",
					"keyword": "凉山LIANGSHAN13588889999"
				},
				{
					"name": "连云港",
					"mobile": "13588889999",
					"keyword": "连云港LIANYUNGANG13588889999"
				},
				{
					"name": "聊城",
					"mobile": "18322223333",
					"keyword": "聊城LIAOCHENG18322223333"
				},
				{
					"name": "辽阳",
					"mobile": "18322223333",
					"keyword": "辽阳LIAOYANG18322223333"
				},
				{
					"name": "辽源",
					"mobile": "18322223333",
					"keyword": "辽源LIAOYUAN18322223333"
				},
				{
					"name": "丽江",
					"mobile": "18322223333",
					"keyword": "丽江LIJIANG18322223333"
				},
				{
					"name": "临沧",
					"mobile": "18322223333",
					"keyword": "临沧LINCANG18322223333"
				},
				{
					"name": "临汾",
					"mobile": "18322223333",
					"keyword": "临汾LINFEN18322223333"
				},
				{
					"name": "临夏",
					"mobile": "18322223333",
					"keyword": "临夏LINXIA18322223333"
				},
				{
					"name": "临沂",
					"mobile": "18322223333",
					"keyword": "临沂LINYI18322223333"
				},
				{
					"name": "林芝",
					"mobile": "18322223333",
					"keyword": "林芝LINZHI18322223333"
				},
				{
					"name": "丽水",
					"mobile": "18322223333",
					"keyword": "丽水LISHUI18322223333"
				}
			]
		},
		{
			"letter": "M",
			"data": [{
					"name": "眉山",
					"mobile": "15544448888",
					"keyword": "眉山MEISHAN15544448888"
				},
				{
					"name": "梅州",
					"mobile": "15544448888",
					"keyword": "梅州MEIZHOU15544448888"
				},
				{
					"name": "绵阳",
					"mobile": "15544448888",
					"keyword": "绵阳MIANYANG15544448888"
				},
				{
					"name": "牡丹江",
					"mobile": "15544448888",
					"keyword": "牡丹江MUDANJIANG15544448888"
				}
			]
		},
		{
			"letter": "N",
			"data": [{
					"name": "南昌",
					"mobile": "15544448888",
					"keyword": "南昌NANCHANG15544448888"
				},
				{
					"name": "南充",
					"mobile": "15544448888",
					"keyword": "南充NANCHONG15544448888"
				},
				{
					"name": "南京",
					"mobile": "15544448888",
					"keyword": "南京NANJING15544448888"
				},
				{
					"name": "南宁",
					"mobile": "15544448888",
					"keyword": "南宁NANNING15544448888"
				},
				{
					"name": "南平",
					"mobile": "15544448888",
					"keyword": "南平NANPING15544448888"
				}
			]
		},
		{
			"letter": "O",
			"data": [{
				"name": "欧阳",
				"mobile": "15544448888",
				"keyword": "欧阳ouyang15544448888"
			}]
		},
		{
			"letter": "P",
			"data": [{
					"name": "盘锦",
					"mobile": "15544448888",
					"keyword": "盘锦PANJIN15544448888"
				},
				{
					"name": "攀枝花",
					"mobile": "15544448888",
					"keyword": "攀枝花PANZHIHUA15544448888"
				},
				{
					"name": "平顶山",
					"mobile": "15544448888",
					"keyword": "平顶山PINGDINGSHAN15544448888"
				},
				{
					"name": "平凉",
					"mobile": "15544448888",
					"keyword": "平凉PINGLIANG15544448888"
				},
				{
					"name": "萍乡",
					"mobile": "15544448888",
					"keyword": "萍乡PINGXIANG15544448888"
				},
				{
					"name": "普洱",
					"mobile": "15544448888",
					"keyword": "普洱PUER15544448888"
				},
				{
					"name": "莆田",
					"mobile": "15544448888",
					"keyword": "莆田PUTIAN15544448888"
				},
				{
					"name": "濮阳",
					"mobile": "15544448888",
					"keyword": "濮阳PUYANG15544448888"
				}
			]
		},
		{
			"letter": "Q",
			"data": [{
					"name": "黔东南",
					"mobile": "15544448888",
					"keyword": "黔东南QIANDONGNAN15544448888"
				},
				{
					"name": "黔南",
					"mobile": "15544448888",
					"keyword": "黔南QIANNAN15544448888"
				},
				{
					"name": "黔西南",
					"mobile": "15544448888",
					"keyword": "黔西南QIANXINAN15544448888"
				}
			]
		},
		{
			"letter": "R",
			"data": [{
					"name": "日喀则",
					"mobile": "15544448888",
					"keyword": "日喀则RIKAZE15544448888"
				},
				{
					"name": "日照",
					"mobile": "15544448888",
					"keyword": "日照RIZHAO15544448888"
				}
			]
		},
		{
			"letter": "S",
			"data": [{
					"name": "三门峡",
					"mobile": "15544448888",
					"keyword": "三门峡SANMENXIA15544448888"
				},
				{
					"name": "三明",
					"mobile": "15544448888",
					"keyword": "三明SANMING15544448888"
				},
				{
					"name": "三沙",
					"mobile": "15544448888",
					"keyword": "三沙SANSHA15544448888"
				}
			]
		},
		{
			"letter": "T",
			"data": [{
					"name": "塔城",
					"mobile": "15544448888",
					"keyword": "塔城TACHENG15544448888"
				},
				{
					"name": "漯河",
					"mobile": "15544448888",
					"keyword": "漯河TAHE15544448888"
				},
				{
					"name": "泰安",
					"mobile": "15544448888",
					"keyword": "泰安TAIAN15544448888"
				}
			]
		},
		{
			"letter": "W",
			"data": [{
					"name": "潍坊",
					"mobile": "15544448888",
					"keyword": "潍坊WEIFANG15544448888"
				},
				{
					"name": "威海",
					"mobile": "15544448888",
					"keyword": "威海WEIHAI15544448888"
				},
				{
					"name": "渭南",
					"mobile": "15544448888",
					"keyword": "渭南WEINAN15544448888"
				},
				{
					"name": "文山",
					"mobile": "15544448888",
					"keyword": "文山WENSHAN15544448888"
				}
			]
		},
		{
			"letter": "X",
			"data": [{
					"name": "厦门",
					"mobile": "15544448888",
					"keyword": "厦门XIAMEN15544448888"
				},
				{
					"name": "西安",
					"mobile": "15544448888",
					"keyword": "西安XIAN15544448888"
				},
				{
					"name": "湘潭",
					"mobile": "15544448888",
					"keyword": "湘潭XIANGTAN15544448888"
				}
			]
		},
		{
			"letter": "Y",
			"data": [{
					"name": "雅安",
					"mobile": "15544448888",
					"keyword": "雅安YAAN15544448888"
				},
				{
					"name": "延安",
					"mobile": "15544448888",
					"keyword": "延安YANAN15544448888"
				},
				{
					"name": "延边",
					"mobile": "15544448888",
					"keyword": "延边YANBIAN15544448888"
				},
				{
					"name": "盐城",
					"mobile": "15544448888",
					"keyword": "盐城YANCHENG15544448888"
				}
			]
		},
		{
			"letter": "Z",
			"data": [{
					"name": "枣庄",
					"mobile": "15544448888",
					"keyword": "枣庄ZAOZHUANG15544448888"
				},
				{
					"name": "张家界",
					"mobile": "15544448888",
					"keyword": "张家界ZHANGJIAJIE15544448888"
				},
				{
					"name": "张家口",
					"mobile": "15544448888",
					"keyword": "张家口ZHANGJIAKOU15544448888"
				}
			]
		},
		{
			"letter": "#",
			"data": [{
				"name": "其他.",
				"mobile": "16666666666",
				"keyword": "echo16666666666"
			}]
		}
	]
}


================================================
FILE: common/locales/en.js
================================================
export default {
	// 可以以页面为单位来写,比如首页的内容,写在index字段,个人中心写在center,共同部分写在common部分
	components: {
		desc: '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'
	},
	js: {
		desc: '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'
	},
	template: {
		desc: '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'
	},
	nav: {
		components: 'Components',
		js: 'JS',
		template: 'Template'
	},
	common: {
		intro: 'UI framework for rapid development of multiple platforms',
		title: 'uView UI',
	},
}

================================================
FILE: common/locales/zh.js
================================================
export default {
	// 可以以页面为单位来写,比如首页的内容,写在index字段,个人中心写在center,共同部分写在common部分
	components: {
		desc: '众多组件覆盖开发过程的各个需求,组件功能丰富,多端兼容。让你快速集成,开箱即用'
	},
	js: {
		desc: '众多的贴心小工具,是你开发过程中召之即来的利器,让你飞镖在手,百步穿杨'
	},
	template: {
		desc: '收集众多的常用页面和布局,减少开发者的重复工作,让你专注逻辑,事半功倍'
	},
	nav: {
		components: '组件',
		js: '工具',
		template: '模板'
	},
	common: {
		intro: '多平台快速开发的UI框架',
		title: 'uView UI',
	},
}

================================================
FILE: components/page-nav/page-nav.vue
================================================
<template>
	<view class="nav-wrap">
		<view class="nav-title">
			<image class="logo" src="https://cdn.uviewui.com/uview/common/logo.png" mode="widthFix"></image>
			<view class="nav-info">
				<view class="nav-title__text">
					<text class="nav-info__title__text">uView {{version}}</text>
				</view>
				<view class="nav-slogan">
					{{$t('common.intro')}}
				</view>
			</view>
		</view>
		<view class="nav-desc">
			{{desc}}
		</view>
		<view class="lang" @tap="switchLang">
			<u-icon size="46" color="warning" :name="lang"></u-icon>
		</view>
	</view>
</template>

<script>
export default {
	props: {
		desc: String,
		title: String,
	},
	computed: {
		lang() {
			return this.$i18n.locale == 'zh' ? 'zh' : 'en';
		}
	},
	data() {
		return {
			version: uni.$u.config.v
		}
	},
	methods: {
		switchLang() {
			this.$i18n.locale = this.$i18n.locale == 'en' ? 'zh' : 'en';
			this.vuex_tabbar[0].text = this.$t('nav.components')
			this.vuex_tabbar[1].text = this.$t('nav.js')
			this.vuex_tabbar[2].text = this.$t('nav.template')
			uni.setNavigationBarTitle({
				title: this.$t(this.title)
			});
		}
	}
}
</script>

<style lang="scss" scoped>
.nav-wrap {
	padding: 15px;
	position: relative;
}

.lang {
	position: absolute;
	top: 15px;
	right: 15px;
}

.nav-title {
	/* #ifndef APP-NVUE */
	display: flex;
	/* #endif */
	flex-direction: row;
	align-items: center;
}

.nav-info {
	margin-left: 15px;
}

.nav-title__text {
	/* #ifndef APP-NVUE */
	display: flex;
	/* #endif */
	color: $u-main-color;
	font-size: 25px;
	font-weight: bold;
}

.logo {
	width: 70px;
	/* #ifndef APP-NVUE */
	height: auto;
	/* #endif */
}

.nav-slogan {
	color: $u-tips-color;
	font-size: 14px;
}

.nav-desc {
	margin-top: 10px;
	font-size: 14px;
	color: $u-content-color;
}
</style>


================================================
FILE: main.js
================================================
import Vue from 'vue';
import App from './App';

Vue.config.productionTip = false;

App.mpType = 'app';

// 此处为演示Vue.prototype使用,非uView的功能部分
Vue.prototype.vuePrototype = '枣红';

// 引入全局uView
import uView from 'uview-ui';
Vue.use(uView);

// 此处为演示vuex使用,非uView的功能部分
import store from '@/store';

// 引入uView提供的对vuex的简写法文件
let vuexStore = require('@/store/$u.mixin.js');
Vue.mixin(vuexStore);

// 引入uView对小程序分享的mixin封装
let mpShare = require('uview-ui/libs/mixin/mpShare.js');
Vue.mixin(mpShare);

// i18n部分的配置
// 引入语言包,注意路径
import Chinese from '@/common/locales/zh.js';
import English from '@/common/locales/en.js';

// VueI18n
import VueI18n from '@/common/vue-i18n.min.js';

// VueI18n
Vue.use(VueI18n);

const i18n = new VueI18n({
	// 默认语言
	locale: 'zh',
	// 引入语言文件
	messages: {
		'zh': Chinese,
		'en': English,
	}
});

// 由于微信小程序的运行机制问题,需声明如下一行,H5和APP非必填
Vue.prototype._i18n = i18n;

const app = new Vue({
	i18n,
	store,
	...App
});

// http拦截器,将此部分放在new Vue()和app.$mount()之间,才能App.vue中正常使用
import httpInterceptor from '@/common/http.interceptor.js';
Vue.use(httpInterceptor, app);

// http接口API抽离,免于写url或者一些固定的参数
import httpApi from '@/common/http.api.js';
Vue.use(httpApi, app);

app.$mount();


================================================
FILE: manifest.json
================================================
{
    "name" : "uView",
    "appid" : "__UNI__6655525",
    "description" : "多平台快速开发的UI框架",
    "versionName" : "1.8.8",
    "versionCode" : "100",
    "transformPx" : false,
    "app-plus" : {
        // APP-VUE分包,可提APP升启动速度,2.7.12开始支持,兼容微信小程序分包方案,默认关闭
        "optimization" : {
            "subPackages" : true
        },
        "safearea" : {
            "bottom" : {
                "offset" : "none"
            }
        },
        "splashscreen" : {
            "alwaysShowBeforeRender" : true,
            "waiting" : true,
            "autoclose" : true,
            "delay" : 0
        },
        "usingComponents" : true,
        "nvueCompiler" : "uni-app",
        "compilerVersion" : 3,
        "modules" : {},
        "distribute" : {
            "android" : {
                "permissions" : [
                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
                    "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
                    "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
                    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
                    "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
                    "<uses-feature android:name=\"android.hardware.camera\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
                ],
                "abiFilters" : [ "armeabi-v7a", "arm64-v8a" ]
            },
            "ios" : {},
            "sdkConfigs" : {
                "ad" : {}
            },
            "icons" : {
                "android" : {
                    "hdpi" : "unpackage/res/icons/72x72.png",
                    "xhdpi" : "unpackage/res/icons/96x96.png",
                    "xxhdpi" : "unpackage/res/icons/144x144.png",
                    "xxxhdpi" : "unpackage/res/icons/192x192.png"
                },
                "ios" : {
                    "appstore" : "unpackage/res/icons/1024x1024.png",
                    "ipad" : {
                        "app" : "unpackage/res/icons/76x76.png",
                        "app@2x" : "unpackage/res/icons/152x152.png",
                        "notification" : "unpackage/res/icons/20x20.png",
                        "notification@2x" : "unpackage/res/icons/40x40.png",
                        "proapp@2x" : "unpackage/res/icons/167x167.png",
                        "settings" : "unpackage/res/icons/29x29.png",
                        "settings@2x" : "unpackage/res/icons/58x58.png",
                        "spotlight" : "unpackage/res/icons/40x40.png",
                        "spotlight@2x" : "unpackage/res/icons/80x80.png"
                    },
                    "iphone" : {
                        "app@2x" : "unpackage/res/icons/120x120.png",
                        "app@3x" : "unpackage/res/icons/180x180.png",
                        "notification@2x" : "unpackage/res/icons/40x40.png",
                        "notification@3x" : "unpackage/res/icons/60x60.png",
                        "settings@2x" : "unpackage/res/icons/58x58.png",
                        "settings@3x" : "unpackage/res/icons/87x87.png",
                        "spotlight@2x" : "unpackage/res/icons/80x80.png",
                        "spotlight@3x" : "unpackage/res/icons/120x120.png"
                    }
                }
            }
        }
    },
    "quickapp" : {},
    "mp-weixin" : {
        "appid" : "",
        "setting" : {
            "urlCheck" : true,
            "es6" : false,
            "minified" : true,
            "postcss" : true
        },
        "optimization" : {
            "subPackages" : true
        },
        "usingComponents" : true
    },
    "mp-alipay" : {
        "usingComponents" : true,
        "component2" : true
    },
    "mp-qq" : {
        "optimization" : {
            "subPackages" : true
        },
        "appid" : "15646153"
    },
    "mp-baidu" : {
        "usingComponents" : true,
        "appid" : "17597421"
    },
    "mp-toutiao" : {
        "usingComponents" : true,
        "appid" : ""
    },
    "h5" : {
        "template" : "template.h5.html",
        "router" : {
            "mode" : "hash",
            "base" : ""
        },
        "optimization" : {
            "treeShaking" : {
                "enable" : false
            }
        },
        "title" : "uView UI"
    }
}


================================================
FILE: package.json
================================================
{
  "name": "uview1.0",
  "version": "1.0.0",
  "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>",
  "main": "main.js",
  "scripts": {
	"test": "echo \"Error: no test specified\" && exit 1",
	"deploy": "node deploy",
	"preinstall": "npx only-allow pnpm"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/YanxinNet/uView.git"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/YanxinNet/uView/issues"
  },
  "homepage": "https://github.com/YanxinNet/uView#readme",
  "dependencies": {
    "vue-i18n": "^8.20.0",
	"anve-upload-upyun": "^1.0.8"
  }
}


================================================
FILE: pages/componentsA/avatar/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<u-avatar 
					:mode="mode" 
					:size="size" 
					:src="src" 
					:text="text"
					:showLevel="showLevel"
					:showSex="showSex"
					:sexIcon="sexIcon"
					:bgColor='bgColor'
				></u-avatar>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">
				参数配置
			</view>
			<view class="u-config-item">
				<view class="u-item-title">模式选择</view>
				<u-subsection :list="['圆形', '圆角方形']" @change="modeChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">性别选择</view>
				<u-subsection :list="['男', '女', '不显示']" @change="sexChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">等级</view>
				<u-subsection :list="['显示', '不显示']" @change="levelChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">自定义内容</view>
				<u-subsection current="0" :list="['图片', '文字']" @change="styleChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">尺寸</view>
				<u-subsection current="1" :list="['large', 'default', 'mini', 160]" @change="sizeChange"></u-subsection>
			</view> 
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				mode: 'circle',
				src: 'http://pic2.sc.chinaz.com/Files/pic/pic9/202002/hpic2119_s.jpg',
				text: '', // 优先级比src高
				size: '90',
				showLevel: true,
				showSex: true,
				sexIcon: 'man',
				bgColor: '#fcbd71'
			}
		},
		methods: {
			modeChange(index) {
				this.mode = index == 0 ? 'circle' : 'square';
			},
			styleChange(index) {
				if(index == 0) {
					this.text = '';
					this.src = 'http://pic2.sc.chinaz.com/Files/pic/pic9/202002/hpic2119_s.jpg';
				} else {
					this.text = '无头像';
				}
			},
			sizeChange(index) {
				this.size = index == 0 ? 'large' : index == 1 ? 'default' : index == 2 ? 'mini' : 160;
			},
			sexChange(index) {
				this.showSex = true;
				if(index == 0) this.sexIcon = 'man';
				if(index == 1) this.sexIcon = 'woman';
				if(index == 2) this.showSex = false;
			},
			levelChange(index) {
				this.showLevel = !index;
			}
		}
	}
</script>

<style lang="scss" scoped>
	
</style>


================================================
FILE: pages/componentsA/avatarCropper/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<u-toast ref="uToast"></u-toast>
				<view class="u-avatar-wrap">
					<image @tap="preAvatar" class="u-avatar-demo" v-if="avatar" :src="avatar" mode="aspectFill"></image>
				</view>
				<u-button @click="chooseAvatar">选择图片</u-button>
			</view>
		</view>
		<!-- <view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">
				参数配置
			</view>
			<view class="u-config-item">
				<view class="u-item-title">生成图片质量</view>
				<u-subsection :current="1" :list="['0.3', '0.7', '1']" @change="qualityChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">自定义参数</view>
				<u-subsection :current="1" :list="['是', '否']" @change="styleChange"></u-subsection>
			</view>
		</view> -->
	</view>
</template>

<script>
	export default {
		data() {
			return {
				avatar: 'https://cdn.uviewui.com/uview/common/logo.png',
			}
		},
		created() {
			uni.$on('uAvatarCropper', path => {
				this.avatar = path;
				// 可以在此上传到服务端
				// uni.uploadFile({
				// 	url: 'http://192.168.100.17/index.php/index/index/upload',
				// 	filePath: path,
				// 	name: 'file',
				// 	complete: (res) => {
				// 		console.log(res);
				// 	}
				// });
			})
		},
		methods: {
			chooseAvatar() {
				this.$u.route({
					url: '/uview-ui/components/u-avatar-cropper/u-avatar-cropper',
					params: {
						// 输出图片宽度,高等于宽,单位px
						destWidth: 300,
						// 裁剪框宽度,高等于宽,单位px
						rectWidth: 200,
						// 输出的图片类型,如果'png'类型发现裁剪的图片太大,改成"jpg"即可
						fileType: 'jpg',
					}
				})
			},
			qualityChange(index) {
				this.quality = index == 0 ? 0.3 : index == 1 ? 0.7 : 1;
			},
			styleChange(index) {
				if (index == 0) {
					this.rectHeight = this.rectWidth = this.destHeight = this.destWidth = 200;
					this.boundStyle = {
						lineWidth: 8,
						borderColor: this.$u.color['error'],
						mask: 'rgba(0, 0, 0, 0.8)'
					}
				} else {
					this.rectHeight = this.rectWidth = this.destHeight = this.destWidth = 400;
					this.boundStyle = {
						lineWidth: 4,
						borderColor: 'rgb(245, 245, 245)',
						mask: 'rgba(0, 0, 0, 0.35)'
					}
				}
			},
			// 预览图片
			preAvatar() {
				wx.previewImage({
					current: '', // 当前显示图片的 http 链接
					urls: [this.avatar] // 需要预览的图片 http 链接列表
				})
			}
		}
	}
</script>

<style lang="scss" scoped>
	.wrap {
		padding: 24rpx;
	}

	.u-avatar-wrap {
		overflow: hidden;
		margin-bottom: 20rpx;
	}

	.u-avatar-demo {
		width: 150rpx;
		height: 150rpx;
		border-radius: 100rpx;
	}
</style>


================================================
FILE: pages/componentsA/backTop/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<view class="u-no-demo-here">滚动页面即可在右下角看到返回顶部的按钮</view>
			</view>
			<u-back-top :scrollTop="scrollTop" :mode="mode"
			:bottom="bottom" :right="right" :top="top" :icon="icon" :custom-style="customStyle"
			:icon-style="iconStyle" :tips="tips"
			>
			</u-back-top>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">
				参数配置
			</view>
			<view class="u-config-item">
				<view class="u-item-title">模式</view>
				<u-subsection :list="['圆形', '方形']" @change="modeChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">组件位置</view>
				<u-subsection :list="['默认', '自定义']" @change="positionChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">显示组件的滚动条距离</view>
				<u-subsection current="1" :list="['200', '400', '600']" @change="scrollTopChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">自定义样式</view>
				<u-subsection current="1" :list="['是', '否']" @change="styleChange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				scrollTop: 0,
				mode: 'circle',
				bottom: 200,
				right: 40,
				top: 400,
				icon: 'arrow-upward',
				iconStyle: {
					color: '#909399',
					fontSize: '38rpx'
				},
				customStyle: {},
				tips: ''
			}
		},
		methods: {
			modeChange(index) {
				this.mode = !index ? 'circle' : 'square';
			},
			positionChange(index) {
				if(index == 0) {
					this.bottom = 200;
					this.right = 40;
				} else {
					this.bottom = 400;
					this.right = 80;
				}
			},
			scrollTopChange(index) {
				this.top = [200, 400, 600][index];
			},
			styleChange(index) {
				if(index == 0) {
					this.icon = 'arrow-up';
					this.iconStyle = {
						color: '#2979ff',
						fontSize: '34rpx'
					};
					this.customStyle = {
						backgroundColor: '#a0cfff',
						color: '#2979ff'
					};
					this.tips = '顶部';
				} else {
					this.icon = 'arrow-upward';
					this.iconStyle = {
						color: '#909399',
						fontSize: '38rpx'
					};
					this.customStyle = {};
					this.tips = '';
				}
			}
		},
		onPageScroll(e) {
			this.scrollTop = e.scrollTop;
		}
	}
</script>

<style lang="scss" scoped>
	.u-demo {
		height: 200vh;
	}
</style>


================================================
FILE: pages/componentsA/calendar/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap" style="background-color: #FFFFFF;">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<u-calendar v-model="show" ref="calendar" @change="change" :mode="mode"
					:start-text="startText" :end-text="endText" :range-color="rangeColor"
					:range-bg-color="rangeBgColor" :active-bg-color="activeBgColor" :btn-type="btnType"
				>
				</u-calendar>
				<view class="u-demo-result-line">
					{{result}}
				</view>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">
				参数配置
			</view>
			<view class="u-config-item">
				<view class="u-item-title">状态</view>
				<u-subsection :current="showBtnStatus" :list="['显示', '隐藏']" @change="showChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">模式</view>
				<u-subsection current="1" :list="['单个日期', '日期范围']" @change="modeChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">自定义样式</view>
				<u-subsection current="1" :list="['是', '否']" @change="styleChange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				show: false,
				mode: 'range',
				result: "请选择日期",
				startText: '开始',
				endText: '结束',
				rangeColor: '#2979ff',
				rangeBgColor: 'rgba(41,121,255,0.13)',
				activeBgColor: '#2979ff',
				btnType: 'primary',
			}
		},
		computed: {
			showBtnStatus() {
				return this.show ? 0 : 1;
			}
		},
		methods: {
			showChange(index) {
				this.show = !index;
			},
			modeChange(index) {
				this.mode = index == 0 ? 'date' : 'range';
				this.show = true;
			},
			styleChange(index) {
				if(index == 0) {
					this.startText = '住店';
					this.endText = '离店';
					this.activeBgColor = '#19be6b';
					this.rangeColor = '#19be6b';
					this.rangeBgColor = 'rgba(25,190,107, 0.13)';
					this.btnType = 'success';
				} else {
					this.startText = '开始';
					this.endText = '结束';
					this.activeBgColor = '#2979ff';
					this.rangeColor = '#2979ff';
					this.rangeBgColor = 'rgba(41,121,255,0.13)';
					this.btnType = 'primary';
				}
				this.show = true;
			},
			customChange(index) {
				if(index == 0) {
					this.icon1 = 'map';
					this.icon2 = 'photo';
					this.arrow = true;
				} else {
					this.icon1 = '';
					this.icon2 = '';
					this.arrow = false;
				}
			},
			textareaChange(index) {
				this.type = index == 0 ? 'textarea' : 'text';
			},
			change(e) {
				if (this.mode == 'range') {
					this.result = e.startDate + " - " + e.endDate;
				} else {
					this.result = e.result;
				}
			}
		}
	}
</script>

<style lang="scss" scoped>
	.u-demo {
		
	}
</style>


================================================
FILE: pages/componentsA/empty/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<u-empty :mode="mode">
					<u-button v-if="slot" slot="bottom" size="medium">
						slot按钮
					</u-button>
				</u-empty>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">
				参数配置
			</view>
			<view class="u-config-item">
				<view class="u-item-title">模式选择</view>
				<u-table>
					<u-tr class="u-tr">
						<u-td class="u-td">
							<u-button :hair-line="false" size="mini" @click="modeChange('car')">购物车为空</u-button>
						</u-td>
						<u-td class="u-td">
							<u-button :hair-line="false" size="mini" @click="modeChange('page')">页面不存在</u-button>
						</u-td>
						<u-td class="u-td">
							<u-button :hair-line="false" size="mini" @click="modeChange('search')">没有搜索结果</u-button>
						</u-td>
					</u-tr>
					<u-tr class="u-tr">
						<u-td class="u-td">
							<u-button :hair-line="false" size="mini" @click="modeChange('address')">没有收货地址</u-button>
						</u-td>
						<u-td class="u-td">
							<u-button :hair-line="false" size="mini" @click="modeChange('wifi')">没有WiFi</u-button>
						</u-td>
						<u-td class="u-td">
							<u-button :hair-line="false" size="mini" @click="modeChange('order')">订单为空</u-button>
						</u-td>
					</u-tr>
					<u-tr class="u-tr">
						<u-td class="u-td">
							<u-button :hair-line="false" size="mini" @click="modeChange('coupon')">没有优惠券</u-button>
						</u-td>
						<u-td class="u-td">
							<u-button :hair-line="false" size="mini" @click="modeChange('favor')">没有收藏</u-button>
						</u-td>
						<u-td class="u-td">
							<u-button :hair-line="false" size="mini" @click="modeChange('permission')">无权限</u-button>
						</u-td>
					</u-tr>
					<u-tr class="u-tr">
						<u-td class="u-td">
							<u-button :hair-line="false" size="mini" @click="modeChange('history')">无历史记录</u-button>
						</u-td>
						<u-td class="u-td">
							<u-button :hair-line="false" size="mini" @click="modeChange('news')">无新闻列表</u-button>
						</u-td>
						<u-td class="u-td">
							<u-button :hair-line="false" size="mini" @click="modeChange('message')">消息列表为空</u-button>
						</u-td>
					</u-tr>
					<u-tr class="u-tr">
						<u-td class="u-td">
							<u-button :hair-line="false" size="mini" @click="modeChange('list')">列表为空</u-button>
						</u-td>
						<u-td class="u-td">
							<u-button :hair-line="false" size="mini" @click="modeChange('data')">数据为空</u-button>
						</u-td>
						<u-td class="u-td">
							待扩展
						</u-td>
					</u-tr>
				</u-table>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">传入slot</view>
				<u-subsection current="1" :list="['是', '否']" @change="slotChange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				mode: 'data',
				slot: false
			}
		},
		methods: {
			modeChange(mode = 'data') {
				this.mode = mode;
			},
			slotChange(index) {
				this.slot = !index;
			}
		}
	}
</script>

<style lang="scss" scoped>
	.u-demo-area {
		height: 160px;
		display: flex;
		align-items: center;
		justify-content: center;
	}
	
	.u-demo-area .u-empty {
		padding-top: 0;
	}
</style>


================================================
FILE: pages/componentsA/field/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap" style="background-color: #FFFFFF;">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<u-field
					v-model="mobile"
					label="手机号"
					:error-message="errorMessage"
					placeholder="请填写手机号"
					:required="required"
					:icon="icon1"
					:type="type"
				>
				</u-field>
				<u-field
					v-model="code"
					label="验证码"
					placeholder="请填写验证码"
					:required="required"
					:icon="icon2"
				>
					<u-button v-if="showBtn" slot="right" size="mini" type="success">发送验证码</u-button>
				</u-field>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">
				参数配置
			</view>
			<view class="u-config-item">
				<view class="u-item-title">右侧按钮</view>
				<u-subsection current="1" :list="['是', '否']" @change="showBtnChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">显示错误信息</view>
				<u-subsection current="1" :list="['是', '否']" @change="errorMessageChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">是否必填</view>
				<u-subsection current="1" :list="['是', '否']" @change="requiredChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">显示左图标和右箭头</view>
				<u-subsection current="1" :list="['是', '否']" @change="customChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">第一个输入框为textarea类型</view>
				<u-subsection current="1" :list="['是', '否']" @change="textareaChange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				mobile: '',
				code: '',
				errorMessage: '',
				required: false,
				placeholderColor: this.$u.color['tipsColor'],
				arrow: false,
				showBtn: false,
				icon1: '',
				icon2: '',
				type: 'text',
			}
		},
		methods: {
			showBtnChange(index) {
				this.showBtn = index == 0 ? true : false;
			},
			errorMessageChange(index) {
				this.errorMessage = index == 0 ? '手机号有误' : false
			},
			requiredChange(index) {
				this.required = index == 0 ? true : false;
			},
			customChange(index) {
				if(index == 0) {
					this.icon1 = 'map';
					this.icon2 = 'photo';
					this.arrow = true;
				} else {
					this.icon1 = '';
					this.icon2 = '';
					this.arrow = false;
				}
			},
			textareaChange(index) {
				this.type = index == 0 ? 'textarea' : 'text';
			}
		}
	}
</script>

<style lang="scss" scoped>
	.u-demo {
		
	}
</style>


================================================
FILE: pages/componentsA/form/index.vue
================================================
<template>
	<view class="wrap">
		<u-form :model="model" :rules="rules" ref="uForm" :errorType="errorType">
			<u-form-item :leftIconStyle="{color: '#888', fontSize: '32rpx'}" left-icon="account" label-width="120" :label-position="labelPosition" label="姓名" prop="name">
				<u-input :border="border" placeholder="请输入姓名" v-model="model.name" type="text"></u-input>
			</u-form-item>
			<u-form-item :label-position="labelPosition" label="性别" prop="sex">
				<u-input :border="border" type="select" :select-open="actionSheetShow" v-model="model.sex" placeholder="请选择性别" @click="actionSheetShow = true"></u-input>
			</u-form-item>
			<u-form-item :label-position="labelPosition" label="简介" prop="intro">
				<u-input type="textarea" :border="border" placeholder="请填写简介" v-model="model.intro" />
			</u-form-item>
			<u-form-item :label-position="labelPosition" label="密码" prop="password">
				<u-input :password-icon="true" :border="border" type="password" v-model="model.password" placeholder="请输入密码"></u-input>
			</u-form-item>
			<u-form-item :label-position="labelPosition" label="确认密码" label-width="150" prop="rePassword">
				<u-input :border="border" type="password" v-model="model.rePassword" placeholder="请确认密码"></u-input>
			</u-form-item>
			<u-form-item :label-position="labelPosition" label="水果品种" label-width="150" prop="likeFruit">
				<u-checkbox-group @change="checkboxGroupChange" :width="radioCheckWidth" :wrap="radioCheckWrap">
					<u-checkbox v-model="item.checked" v-for="(item, index) in checkboxList" :key="index" :name="item.name">{{ item.name }}</u-checkbox>
				</u-checkbox-group>
			</u-form-item>
			<u-form-item :label-position="labelPosition" label="结算方式" prop="payType" label-width="150">
				<u-radio-group v-model="radio" @change="radioGroupChange" :width="radioCheckWidth" :wrap="radioCheckWrap">
					<u-radio shape="circle" v-for="(item, index) in radioList" :key="index" :name="item.name">{{ item.name }}</u-radio>
				</u-radio-group>
			</u-form-item>
			<u-form-item :label-position="labelPosition" label="所在地区" prop="region" label-width="150">
				<u-input :border="border" type="select" :select-open="pickerShow" v-model="model.region" placeholder="请选择地区" @click="pickerShow = true"></u-input>
			</u-form-item>
			<u-form-item :label-position="labelPosition" label="商品类型" prop="goodsType" label-width="150">
				<u-input :border="border" type="select" :select-open="selectShow" v-model="model.goodsType" placeholder="请选择商品类型" @click="selectShow = true"></u-input>
			</u-form-item>
			<u-form-item :rightIconStyle="{color: '#888', fontSize: '32rpx'}" right-icon="kefu-ermai" :label-position="labelPosition" label="手机号码" prop="phone" label-width="150">
				<u-input :border="border" placeholder="请输入手机号" v-model="model.phone" type="number"></u-input>
			</u-form-item>
			<u-form-item :label-position="labelPosition" label="验证码" prop="code" label-width="150">
				<u-input :border="border" placeholder="请输入验证码" v-model="model.code" type="text"></u-input>
				<u-button slot="right" type="success" size="mini" @click="getCode">{{codeTips}}</u-button>
			</u-form-item>
			<!-- 此处switch的slot为right,如果不填写slot名,也即<u-switch v-model="model.remember"></u-switch>,将会左对齐 -->
			<u-form-item :label-position="labelPosition" label="记住密码" prop="remember" label-width="150">
				<u-switch v-model="model.remember" slot="right"></u-switch>
			</u-form-item>
			<u-form-item :label-position="labelPosition" label="上传图片" prop="photo" label-width="150">
				<u-upload width="160" height="160"></u-upload>
			</u-form-item>
		</u-form>
		<view class="agreement">
			<u-checkbox v-model="check" @change="checkboxChange"></u-checkbox>
			<view class="agreement-text">
				勾选代表同意uView的版权协议
			</view>
		</view>
		<u-button @click="submit">提交</u-button>
		<u-action-sheet :list="actionSheetList" v-model="actionSheetShow" @click="actionSheetCallback"></u-action-sheet>
		<u-select mode="single-column" :list="selectList" v-model="selectShow" @confirm="selectConfirm"></u-select>
		<u-picker mode="region" v-model="pickerShow" @confirm="regionConfirm"></u-picker>
		<u-verification-code seconds="60" ref="uCode" @change="codeChange"></u-verification-code>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">
				参数配置
			</view>
			<view class="u-config-item">
				<view class="u-item-title">label对齐方式</view>
				<u-subsection :list="['左边', '上方']" @change="labelPositionChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">边框</view>
				<u-subsection :current="borderCurrent" :list="['显示', '隐藏']" @change="borderChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">radio、checkbox样式</view>
				<u-subsection :list="['自适应', '换行', '50%宽度']" @change="radioCheckboxChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">错误提示方式</view>
				<u-subsection :list="['message', 'toast', '下划线', '输入框']" @change="errorChange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
export default {
	data() {
		let that = this;
		return {
			model: {
				name: '',
				sex: '',
				likeFruit: '',
				intro: '',
				payType: '支付宝',
				agreement: false,
				region: '',
				goodsType: '',
				phone: '',
				code: '',
				password: '',
				rePassword: '',
				remember: false,
				photo: ''
			},
			selectList: [
				{
					value: '电子产品',
					label: '电子产品'
				},
				{
					value: '服装',
					label: '服装'
				},
				{
					value: '工艺品',
					label: '工艺品'
				}
			],
			rules: {
				name: [
					{
						required: true,
						message: '请输入姓名',
						trigger: 'blur' ,
					},
					{
						min: 3,
						max: 5,
						message: '姓名长度在3到5个字符',
						trigger: ['change','blur'],
					},
					{
						// 此为同步验证,可以直接返回true或者false,如果是异步验证,稍微不同,见下方说明
						validator: (rule, value, callback) => {
							// 调用uView自带的js验证规则,详见:https://www.uviewui.com/js/test.html
							return this.$u.test.chinese(value);
						},
						message: '姓名必须为中文',
						// 触发器可以同时用blur和change,二者之间用英文逗号隔开
						trigger: ['change','blur'],
					},
					// 异步验证,用途:比如用户注册时输入完账号,后端检查账号是否已存在
					// {
					// 	trigger: ['blur'],
					// 	// 异步验证需要通过调用callback(),并且在里面抛出new Error()
					// 	// 抛出的内容为需要提示的信息,和其他方式的message属性的提示一样
					// 	asyncValidator: (rule, value, callback) => {
					// 		this.$u.post('/ebapi/public_api/index').then(res => {
					// 			// 如果验证出错,需要在callback()抛出new Error('错误提示信息')
					// 			if(res.error) {
					// 				callback(new Error('姓名重复'));
					// 			} else {
					// 				// 如果没有错误,也要执行callback()回调
					// 				callback();
					// 			}
					// 		})
					// 	},
					// }
				],
				sex: [
					{
						required: true,
						message: '请选择性别',
						trigger: 'change'
					},
				],
				intro: [
					{
						required: true,
						message: '请填写简介'
					},
					{
						min: 5,
						message: '简介不能少于5个字',
						trigger: 'change' ,
					},
					// 正则校验示例,此处用正则校验是否中文,此处仅为示例,因为uView有this.$u.test.chinese可以判断是否中文
					{
						pattern: /^[\u4e00-\u9fa5]+$/gi,
						message: '简介只能为中文',
						trigger: 'change',
					},
				],
				likeFruit: [
					{
						required: true,
						message: '请选择您喜欢的水果',
						trigger: 'change',
						type: 'array',
					}
				],
				payType: [
					{
						required: true,
						message: '请选择任意一种支付方式',
						trigger: 'change',
					}
				],
				region: [
					{
						required: true,
						message: '请选择地区',
						trigger: 'change',
					}
				],
				goodsType: [
					{
						required: true,
						message: '请选择商品类型',
						trigger: 'change',
					}
				],
				phone: [
					{
						required: true,
						message: '请输入手机号',
						trigger: ['change','blur'],
					},
					{
						validator: (rule, value, callback) => {
							// 调用uView自带的js验证规则,详见:https://www.uviewui.com/js/test.html
							return this.$u.test.mobile(value);
						},
						message: '手机号码不正确',
						// 触发器可以同时用blur和change,二者之间用英文逗号隔开
						trigger: ['change','blur'],
					}
				],
				code: [
					{
						required: true,
						message: '请输入验证码',
						trigger: ['change','blur'],
					},
					{
						type: 'number',
						message: '验证码只能为数字',
						trigger: ['change','blur'],
					}
				],
				password: [
					{
						required: true,
						message: '请输入密码',
						trigger: ['change','blur'],
					},
					{
						// 正则不能含有两边的引号
						pattern: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]+\S{5,12}$/,
						message: '需同时含有字母和数字,长度在6-12之间',
						trigger: ['change','blur'],
					}
				],
				rePassword: [
					{
						required: true,
						message: '请重新输入密码',
						trigger: ['change','blur'],
					},
					{
						validator: (rule, value, callback) => {
							return value === this.model.password;
						},
						message: '两次输入的密码不相等',
						trigger: ['change','blur'],
					}
				],
			},
			border: false,
			check: false,
			selectStatus: 'close',
			checkboxList: [
				{
					name: '荔枝',
					checked: false,
					disabled: false
				},
				{
					name: '香蕉',
					checked: false,
					disabled: false
				},
				{
					name: '橙子',
					checked: false,
					disabled: false
				},
				{
					name: '草莓',
					checked: false,
					disabled: false
				}
			],
			radioList: [
				{
					name: '支付宝',
					checked: true,
					disabled: false
				},
				{
					name: '微信',
					checked: false,
					disabled: false
				},
				{
					name: '银联',
					checked: false,
					disabled: false
				},
				{
					name: '现金',
					checked: false,
					disabled: false
				}
			],
			radio: '支付宝',
			actionSheetList: [
				{
					text: '男'
				},
				{
					text: '女'
				},
				{
					text: '保密'
				}
			],
			actionSheetShow: false,
			pickerShow: false,
			selectShow: false,
			radioCheckWidth: 'auto',
			radioCheckWrap: false,
			labelPosition: 'left',
			codeTips: '',
			errorType: ['message'],
		};
	},
	onLoad() {

	},
	computed: {
		borderCurrent() {
			return this.border ? 0 : 1;
		}
	},
	onReady() {
		this.$refs.uForm.setRules(this.rules);
	},
	methods: {
		submit() {
			this.$refs.uForm.validate(valid => {
				if (valid) {
					if(!this.model.agreement) return this.$u.toast('请勾选协议');
					console.log('验证通过');
				} else {
					console.log('验证失败');
				}
			});
		},
		// 点击actionSheet回调
		actionSheetCallback(index) {
			uni.hideKeyboard();
			this.model.sex = this.actionSheetList[index].text;
		},
		// checkbox选择发生变化
		checkboxGroupChange(e) {
			this.model.likeFruit = e;
		},
		// radio选择发生变化
		radioGroupChange(e) {
			this.model.payType = e;
		},
		// 勾选版权协议
		checkboxChange(e) {
			this.model.agreement = e.value;
		},
		// 选择地区回调
		regionConfirm(e) {
			this.model.region = e.province.label + '-' + e.city.label + '-' + e.area.label;
		},
		// 选择商品类型回调
		selectConfirm(e) {
			this.model.goodsType = '';
			e.map((val, index) => {
				this.model.goodsType += this.model.goodsType == '' ? val.label : '-' + val.label;
			})
		},
		borderChange(index) {
			this.border = !index;
		},
		radioCheckboxChange(index) {
			if(index == 0) {
				this.radioCheckWrap = false;
				this.radioCheckWidth = 'auto';
			} else if(index == 1) {
				this.radioCheckWrap = true;
				this.radioCheckWidth = 'auto';
			} else if(index == 2) {
				this.radioCheckWrap = false;
				this.radioCheckWidth = '50%';
			}
		},
		labelPositionChange(index) {
			this.labelPosition = index == 0 ? 'left' : 'top';
		},
		codeChange(text) {
			this.codeTips = text;
		},
		// 获取验证码
		getCode() {
			if(this.$refs.uCode.canGetCode) {
				// 模拟向后端请求验证码
				uni.showLoading({
					title: '正在获取验证码',
					mask: true
				})
				setTimeout(() => {
					uni.hideLoading();
					// 这里此提示会被this.start()方法中的提示覆盖
					this.$u.toast('验证码已发送');
					// 通知验证码组件内部开始倒计时
					this.$refs.uCode.start();
				}, 2000);
			} else {
				this.$u.toast('倒计时结束后再发送');
			}
		},
		errorChange(index) {
			if(index == 0) this.errorType = ['message'];
			if(index == 1) this.errorType = ['toast'];
			if(index == 2) this.errorType = ['border-bottom'];
			if(index == 3) this.errorType = ['border'];
		}
	}
};
</script>

<style scoped lang="scss">
.wrap {
	padding: 30rpx;
}

.agreement {
	display: flex;
	align-items: center;
	margin: 40rpx 0;

	.agreement-text {
		padding-left: 8rpx;
		color: $u-tips-color;
	}
}
</style>


================================================
FILE: pages/componentsA/fullScreen/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<view class="u-no-demo-here">
					通过压窗屏打开的模态框,可以遮盖顶部原生的导航栏和底部tabbar栏。
					注意:压窗屏只对APP有效,其他端无效。
				</view>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">
				参数配置
			</view>
			<view class="u-config-item">
				<view class="u-item-title">状态</view>
				<u-subsection :current="current" :list="['打开', '关闭']" @change="openModal"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				current: 1
			}
		},
		onShow() {
			this.$nextTick(() => {
				this.current = 1;
			})
		},
		methods: {
			openModal(index) {
				// 可以传递参数
				if(index == 0) {
					this.$u.route("/uview-ui/components/u-full-screen/u-full-screen?id=1");
				}
			}
		}
	}
</script>

<style lang="scss" scoped>
	.u-demo {}
</style>


================================================
FILE: pages/componentsA/icon/index.vue
================================================
<template>
	<view class="wrap">
		<view class="u-border-left u-border-top inner-wrap">
			<view @tap="selectIcon(item.name)" class="u-icon-item u-border-bottom u-border-right" v-for="(item, index) in iconList" :key="index">
				<u-icon :name="item.name" size="40" color="#909399"></u-icon>
				<text class="u-icon-name">{{item.name}}</text>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				iconList: [
					{
						name: 'level'
					},
					{
						name: 'woman'
					},
					{
						name: 'man'
					},
					{
						name: 'arrow-left-double'
					},
					{
						name: 'arrow-right-double'
					},
					{
						name: 'chat'
					},
					{
						name: 'chat-fill'
					},
					{
						name: 'red-packet'
					},
					{
						name: 'red-packet-fill'
					},
					{
						name: 'order'
					},
					{
						name: 'checkbox-mark'
					},
					{
						name: 'arrow-up-fill'
					},
					{
						name: 'arrow-down-fill'
					},
					{
						name: 'backspace'
					},
					{
						name: 'photo'
					},
					{
						name: 'photo-fill'
					},
					{
						name: 'lock'
					},
					{
						name: 'lock-fill'
					},
					{
						name: 'lock-open'
					},
					{
						name: 'lock-opened-fill'
					},
					{
						name: 'hourglass'
					},
					{
						name: 'hourglass-half-fill'
					},
					{
						name: 'home'
					},
					{
						name: 'home-fill'
					},
					{
						name: 'fingerprint'
					},
					{
						name: 'cut'
					},
					{
						name: 'star'
					},
					{
						name: 'star-fill'
					},
					{
						name: 'share'
					},
					{
						name: 'share-fill'
					},
					{
						name: 'volume-up'
					},
					{
						name: 'volume-up-fill'
					},
					{
						name: 'volume-off'
					},
					{
						name: 'volume-off-fill'
					},
					{
						name: 'trash'
					},
					{
						name: 'trash-fill'
					},
					{
						name: 'rewind-right'
					},
					{
						name: 'rewind-right-fill'
					},
					{
						name: 'rewind-left'
					},
					{
						name: 'rewind-left-fill'
					},
					{
						name: 'shopping-cart'
					},
					{
						name: 'shopping-cart-fill'
					},
					{
						name: 'question'
					},
					{
						name: 'question-circle'
					},
					{
						name: 'question-circle-fill'
					},
					{
						name: 'plus'
					},
					{
						name: 'plus-circle'
					},
					{
						name: 'plus-circle-fill'
					},
					{
						name: 'tags'
					},
					{
						name: 'tags-fill'
					},
					{
						name: 'pause'
					},
					{
						name: 'pause-circle'
					},
					{
						name: 'pause-circle-fill'
					},
					{
						name: 'play-circle'
					},
					{
						name: 'play-circle-fill'
					},
					{
						name: 'map'
					},
					{
						name: 'map-fill'
					},
					{
						name: 'phone'
					},
					{
						name: 'phone-fill'
					},
					{
						name: 'list'
					},
					{
						name: 'list-dot'
					},
					{
						name: 'man-delete'
					},
					{
						name: 'man-add'
					},
					{
						name: 'man-add-fill'
					},
					{
						name: 'person-delete-fill'
					},
					{
						name: 'info'
					},
					{
						name: 'info-circle'
					},
					{
						name: 'info-circle-fill'
					},
					{
						name: 'minus'
					},
					{
						name: 'minus-circle'
					},
					{
						name: 'minus-circle-fill'
					},
					{
						name: 'mic'
					},
					{
						name: 'mic-off'
					},
					{
						name: 'grid'
					},
					{
						name: 'grid-fill'
					},
					{
						name: 'eye'
					},
					{
						name: 'eye-fill'
					},
					{
						name: 'eye-off'
					},
					{
						name: 'file-text'
					},
					{
						name: 'file-text-fill'
					},
					{
						name: 'edit-pen'
					},
					{
						name: 'edit-pen-fill'
					},
					{
						name: 'email'
					},
					{
						name: 'email-fill'
					},
					{
						name: 'download'
					},
					{
						name: 'checkmark'
					},
					{
						name: 'checkmark-circle'
					},
					{
						name: 'checkmark-circle-fill'
					},
					{
						name: 'clock'
					},
					{
						name: 'clock-fill'
					},
					{
						name: 'close'
					},
					{
						name: 'close-circle'
					},
					{
						name: 'close-circle-fill'
					},
					{
						name: 'calendar'
					},
					{
						name: 'calendar-fill'
					},
					{
						name: 'car'
					},
					{
						name: 'car-fill'
					},
					{
						name: 'bell'
					},
					{
						name: 'bell-fill'
					},
					{
						name: 'bookmark'
					},
					{
						name: 'bookmark-fill'
					},
					{
						name: 'attach'
					},
					{
						name: 'play-right'
					},
					{
						name: 'play-right-fill'
					},
					{
						name: 'play-left'
					},
					{
						name: 'play-left-fill'
					},
					{
						name: 'error'
					},
					{
						name: 'error-circle'
					},
					{
						name: 'error-circle-fill'
					},
					{
						name: 'wifi'
					},
					{
						name: 'wifi-off'
					},
					{
						name: 'skip-back-left'
					},
					{
						name: 'skip-forward-right'
					},
					{
						name: 'search'
					},
					{
						name: 'setting'
					},
					{
						name: 'setting-fill'
					},
					{
						name: 'volume'
					},
					{
						name: 'volume-fill'
					},
					{
						name: 'more-dot-fill'
					},
					{
						name: 'more-circle'
					},
					{
						name: 'more-circle-fill'
					},
					{
						name: 'bag'
					},
					{
						name: 'bag-fill'
					},
					{
						name: 'arrow-upward'
					},
					{
						name: 'arrow-downward'
					},
					{
						name: 'arrow-leftward'
					},
					{
						name: 'arrow-rightward'
					},
					{
						name: 'arrow-up'
					},
					{
						name: 'arrow-down'
					},
					{
						name: 'arrow-left'
					},
					{
						name: 'arrow-right'
					},
					{
						name: 'rmb'
					},
					{
						name: 'rmb-circle'
					},
					{
						name: 'rmb-circle-fill'
					},
					{
						name: 'thumb-up'
					},
					{
						name: 'thumb-up-fill'
					},
					{
						name: 'thumb-down'
					},
					{
						name: 'thumb-down-fill'
					},
					{
						name: 'coupon'
					},
					{
						name: 'coupon-fill'
					},
					{
						name: 'kefu-ermai'
					},
					{
						name: 'server-fill'
					},
					{
						name: 'server-man'
					},
					{
						name: 'scan'
					},
					{
						name: 'warning'
					},
					{
						name: 'warning-fill'
					},
					{
						name: 'google'
					},
					{
						name: 'google-circle-fill'
					},
					{
						name: 'chrome-circle-fill'
					},
					{
						name: 'ie'
					},
					{
						name: 'IE-circle-fill'
					},
					{
						name: 'github-circle-fill'
					},
					{
						name: 'android-fill'
					},
					{
						name: 'android-circle-fill'
					},
					{
						name: 'apple-fill'
					},
					{
						name: 'camera'
					},
					{
						name: 'camera-fill'
					},
					{
						name: 'pushpin'
					},
					{
						name: 'pushpin-fill'
					},
					{
						name: 'minus-square-fill'
					},
					{
						name: 'plus-square-fill'
					},
					{
						name: 'heart'
					},
					{
						name: 'heart-fill'
					},
					{
						name: 'reload'
					},
					{
						name: 'account'
					},
					{
						name: 'account-fill'
					},
					{
						name: 'minus-people-fill'
					},
					{
						name: 'plus-people-fill'
					},
					{
						name: 'integral'
					},
					{
						name: 'integral-fill'
					},
					{
						name: 'zhihu'
					},
					{
						name: 'zhihu-circle-fill'
					},
					{
						name: 'gift'
					},
					{
						name: 'gift-fill'
					},
					{
						name: 'zhifubao'
					},
					{
						name: 'zhifubao-circle-fill'
					},
					{
						name: 'weixin-fill'
					},
					{
						name: 'weixin-circle-fill'
					},
					{
						name: 'twitter'
					},
					{
						name: 'twitter-circle-fill'
					},
					{
						name: 'taobao'
					},
					{
						name: 'taobao-circle-fill'
					},
					{
						name: 'weibo'
					},
					{
						name: 'weibo-circle-fill'
					},
					{
						name: 'qq-fill'
					},
					{
						name: 'qq-circle-fill'
					},
					{
						name: 'moments'
					},
					{
						name: 'moments-circel-fill'
					},
					{
						name: 'qzone'
					},
					{
						name: 'qzone-circle-fill'
					},
					{
						name: 'facebook'
					},
					{
						name: 'facebook-circle-fill'
					},
					{
						name: 'baidu'
					},
					{
						name: 'baidu-circle-fill'
					},
					{
						name: 'zhuanfa'
					},
				]
			};
		},
		methods: {
			selectIcon(name) {
				// #ifdef H5
				return this.$u.toast('H5暂不支持复制');
				// #endif
				uni.setClipboardData({
				    data: name,
				    success: () => {
				        
				    }
				});
				uni.hideToast()
				this.$u.toast('图标名称已复制');
			}
		}
	}
</script>

<style scoped lang="scss">
	.wrap {
		padding: 24rpx;
	}
	
	.inner-wrap {
		display: flex;
		flex-wrap: wrap;
	}
	.u-icon-item {
		display: flex;
		flex-direction: column;
		align-items: center;
		height: 190rpx;
		flex: 0 0 33.33333333%;
		justify-content: center;
		overflow: hidden;
	}
	
	.u-icon-name {
		color: $u-tips-color;
		word-wrap: break-word;
		word-break:break-all;
		margin-top: 16rpx;
		font-size: 26rpx;
		padding: 0 14rpx;
		// 给定高度是为了图标名超出一行时,进行换行能有更好的效果
		height: 26rpx;
	}
</style>


================================================
FILE: pages/componentsA/indexList/index.vue
================================================
<template>
	<u-index-list :scrollTop="scrollTop" :index-list="indexList">
		<view v-for="(item, index) in list" :key="index">
			<u-index-anchor :index="item.letter" />
			<view class="list-cell u-border-bottom" v-for="(item1, index) in item.data" :key="index">
				{{item1.name}}
			</view>
		</view>
	</u-index-list>
</template>

<script>
	import indexList from "@/common/index.list.js";
	const letterArr = indexList.list.map(val => {
		return val.letter;
	})
	export default {
		data() {
			return {
				scrollTop: 0,
				indexList: letterArr,
				list: indexList.list
			}
		},
		onPageScroll(e) {
			this.scrollTop = e.scrollTop;
		}
	}
</script>

<style lang="scss" scoped>
	.list-cell {
		display: flex;
		box-sizing: border-box;
		width: 100%;
		padding: 10px 24rpx;
		overflow: hidden;
		color: $u-content-color;
		font-size: 14px;
		line-height: 24px;
		background-color: #fff;
	}
</style>


================================================
FILE: pages/componentsA/keyboard/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<view class="input-wrap">
					<input class="input" disabled type="text" :value="input" placeholder="来自键盘的输入内容" />
					<u-button :custom-style="{height: '32px'}" :hairLine="false" class="clear-btn" @tap="input = ''">清空</u-button>
				</view>
				<u-keyboard :mask="mask" ref="uKeyboard" safe-area-inset-bottom @confirm="confirm" 
				:random="random" :dotEnable="false" :mode="mode"
				:confirmBtn="true" :cancelBtn="true" :tooltip="tooltip" v-model="show" 
				@change="change" @backspace="backspace"></u-keyboard>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">
				参数配置 
			</view>
			<view class="u-config-item">
				<view class="u-item-title">键盘开关</view>
				<u-subsection :current="show == true ? 0 : 1" :list="['开', '关']" @change="statusChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">键盘类型</view>
				<u-subsection :list="['数字键盘', '身份证键盘', '车牌号键盘']" @change="modeChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">打乱顺序</view>
				<u-subsection :current="1" :list="['是', '否']" @change="randomChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">上方工具条</view>
				<u-subsection :list="['显示', '隐藏']" @change="tooltipChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">是否显示遮罩</view>
				<u-subsection :list="['显示', '隐藏']" @change="maskChange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				show: false,
				input: '', 
				mode: 'number',
				random: false,
				tooltip: true,
				mask: true,
				
			}
		},
		methods: {
			statusChange(index) {
				this.show = index == 0 ? true : false;
			},
			modeChange(index) {
				if(index == 0) this.mode = 'number';
				if(index == 1) this.mode = 'card';
				if(index == 2) this.mode = 'car';
				this.show = true;
			},
			randomChange(index) {
				this.random = index == 0 ? true : false;
				this.show = true;
			},
			tooltipChange(index) {
				this.tooltip = index == 0 ? true : false;
				this.show = true;
			},
			maskChange(index) {
				this.show = true;
				this.mask = !index;
			},
			// 点击退格键
			backspace() {
				if(this.input.length) this.input = this.input.substr(0, this.input.length - 1);
			},
			// 键盘按键发生变化
			change(detail) {
				this.input += detail;
			},
			confirm(e) {
				
			}
		}
	}
</script>

<style lang="scss" scoped>
	.input {
		border: 1px solid $u-light-color;
		border-radius: 4px;
		margin-bottom: 20px;
		height: 32px;
		font-size: 26rpx;
		flex: 1;
		box-sizing: border-box;
	}
	
	.input-wrap {
		display: flex;
	}
	
	.clear-btn {
		margin-left: 10px;
		font-size: 28rpx;
	}
</style>


================================================
FILE: pages/componentsA/lazyLoad/index.vue
================================================
<template>
	<view class="wrap">
		<view class="item-warp">
			<view class="item" v-for="(item, index) in list" :key="index">
				<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>
			</view>
		</view>
		<u-loadmore :status="status" @loadmore="getData"></u-loadmore>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				list: [],
				status: 'loadmore',
				data: [{
						src: "https://gtd.alicdn.com/sns_logo/i1/TB124_3NXXXXXasXVXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i7/TB1IWtgQFXXXXcmXFXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i1/TB1_f_PLXXXXXbVXpXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						// 这里会加载失败,显示错误的占位图
						src: "error.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i6/TB1SIYrLXXXXXaAXpXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i1/TB11yxeNVXXXXbwXFXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i3/TB1ndJiQFXXXXctaXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i4/TB1BYGDLpXXXXbuXXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i2/TB1_9GoMVXXXXXmaXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i2/TB1cSZZNFXXXXaKaXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						// 这里会加载失败,显示错误的占位图
						src: "error.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i8/TB1RVS_QpXXXXXBXXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i5/TB1xEJiLXXXXXcxaXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i6/TB1DSuHJVXXXXXmXXXXwu0bFXXX.png_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i5/TB1aMNyLpXXXXa2XXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i8/TB1JRHEQpXXXXXwXVXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i7/TB1qKEuQpXXXXXYXXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i7/TB1TlOfQFXXXXX2XXXXwu0bFXXX.png_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i1/TB1SKu.QpXXXXbDXVXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						// 这里会加载失败,显示错误的占位图
						src: "error.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i8/TB1um5GQpXXXXbiaXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i1/TB1pxCTQpXXXXa2apXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i6/TB1zksMNVXXXXaRapXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i4/TB1nbrcOXXXXXXEXpXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i4/TB1CI_NQpXXXXXaXVXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i2/TB18vTdQFXXXXXlXpXXwu0bFXXX.png_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i7/TB1doDVQpXXXXcRaXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i1/TB17LgBNFXXXXaSXVXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i6/TB1fVJJQFXXXXcyXpXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i3/TB1wnBTKFXXXXcQXXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i1/TB124_3NXXXXXasXVXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i7/TB1IWtgQFXXXXcmXFXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i1/TB1_f_PLXXXXXbVXpXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i1/TB1DX3hIpXXXXXIaXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i6/TB1SIYrLXXXXXaAXpXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i1/TB11yxeNVXXXXbwXFXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i3/TB1ndJiQFXXXXctaXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i4/TB1BYGDLpXXXXbuXXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i2/TB1_9GoMVXXXXXmaXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i2/TB1cSZZNFXXXXaKaXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						// 这里会加载失败,显示错误的占位图
						src: "error.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i8/TB1RVS_QpXXXXXBXXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i5/TB1xEJiLXXXXXcxaXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i6/TB1DSuHJVXXXXXmXXXXwu0bFXXX.png_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i5/TB1aMNyLpXXXXa2XXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i8/TB1JRHEQpXXXXXwXVXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i7/TB1qKEuQpXXXXXYXXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i7/TB1TlOfQFXXXXX2XXXXwu0bFXXX.png_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i1/TB1SKu.QpXXXXbDXVXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i2/TB17gJ3OXXXXXcrXpXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i8/TB1um5GQpXXXXbiaXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i1/TB1pxCTQpXXXXa2apXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i6/TB1zksMNVXXXXaRapXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i4/TB1nbrcOXXXXXXEXpXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i4/TB1CI_NQpXXXXXaXVXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i2/TB18vTdQFXXXXXlXpXXwu0bFXXX.png_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i7/TB1doDVQpXXXXcRaXXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						src: "https://gtd.alicdn.com/sns_logo/i1/TB17LgBNFXXXXaSXVXXSutbFXXX.jpg_240x240xz.jpg",
					},
					{
						// 这里会加载失败,显示错误的占位图
						src: "error.jpg",
					}
				]
			}
		},
		onLoad() {
			this.getData();
		},
		onReachBottom() {
			this.getData();
		},
		methods: {
			statusChange(status) {
				//console.log(status);
			},
			clickImg(img) {
				//console.log(img);
			},
			getData() {
				let index = 0;
				this.status = 'loading';
				setTimeout(() => {
					for(let i = 0; i < 10; i++) {
						index = this.$u.random(0, this.data.length - 1);
						this.list.push({
							src: this.data[index].src
						})
					}
					this.status = 'loadmore';
				}, 1500);
			}
		},
	} 
</script>

<style lang="scss" scoped>
	.wrap {
		padding: 30rpx;
		display: block;
		
	}
	
	.item-warp {
		display: flex;
		justify-content: space-between;
		flex-wrap: wrap;
	}
	
	.item-warp .item {
		flex: 0 0 335rpx;
		height: 400rpx;
		margin-bottom: 20rpx;
		border-radius: 10rpx;
		overflow: hidden;
	}
</style>


================================================
FILE: pages/componentsA/modal/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<u-toast ref="uToast"></u-toast>
				<view class="u-no-demo-here">请点击弹出弹窗查看效果</view>
				<u-modal ref="uModal" v-model="show" :show-cancel-button="true" 
					:show-title="showTitle" :async-close="asyncClose"
					@confirm="confirm" :content="content"
				>
					<!-- #ifndef MP-WEIXIN || MP-TOUTIAO -->
					<view class="warp" style="margin: 30rpx;" v-if="contentSlot">
						<image class="logo" src="https://uviewui.com/common/logo.png" style="width: 220rpx;" mode="widthFix"></image>
					</view>
					<!-- #endif -->
				</u-modal>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">参数配置</view>
			<view class="u-config-item">
				<view class="u-item-title">状态</view>
				<u-subsection :current="current" :list="['显示', '隐藏']" @change="showChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">是否显示标题</view>
				<u-subsection current="0" :list="['是', '否']" @change="titleChange"></u-subsection>
			</view>
			<!-- #ifndef MP-WEIXIN -->
			<view class="u-config-item">
				<view class="u-item-title">自定义内容</view>
				<u-subsection current="1" :list="['是', '否']" @change="contentChange"></u-subsection>
			</view>
			<!-- #endif -->
			<view class="u-config-item">
				<view class="u-item-title">异步关闭</view>
				<u-subsection current="1" :list="['是', '否']" @change="asyncChange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				show: false,
				zoom: false,
				content: '慈母手中线,游子身上衣',
				contentSlot: false,
				showTitle: true,
				asyncClose: false,
			};
		},
		computed: {
			current() {
				return this.show ? 0 : 1;
			}
		},
		methods: {
			showChange(index) {
				this.show = !index;
			},
			titleChange(index) {
				this.showTitle = !index;
				this.show = true;
			},
			contentChange(index) {
				this.contentSlot = !index;
				this.show = true;
			},
			asyncChange(index) {
				this.show = true;
				this.asyncClose = !index;
			},
			confirm() {
				setTimeout(() => {
					this.show = false;
				}, 2000)
			}
		}
	};
</script>

<style scoped lang="scss">
	.logo {
		height: auto;
		will-change: transform;
	}
</style>


================================================
FILE: pages/componentsA/navbar/index.vue
================================================
<template>
	<view class="">
		<u-navbar title-color="#fff" back-icon-color="#ffffff" 
			:is-fixed="isFixed" :is-back="isBack" 
			:background="background" 
			:back-text-style="{color: '#fff'}" :title="title" 
			:back-icon-name="backIconName" :back-text="backText"
		>
			<view class="slot-wrap" v-if="useSlot">
				<view class="search-wrap" v-if="search">
					<!-- 如果使用u-search组件,必须要给v-model绑定一个变量 -->
					<u-search v-model="keyword" :show-action="showAction" height="56" :action-style="{color: '#fff'}"></u-search>
				</view>
				<view class="navbar-right" v-if="rightSlot">
					<view class="message-box right-item">
						<u-icon name="chat" size="38"></u-icon>
						<u-badge count="18" size="mini" :offset="[-15, -15]"></u-badge>
					</view>
					<view class="dot-box right-item">
						<u-icon name="calendar-fill" size="38"></u-icon>
						<u-badge size="mini" :is-dot="true" :offset="[-6, -6]"></u-badge>
					</view>
				</view>
				<view class="map-wrap" v-if="custom">
					<u-icon name="map" color="#ffffff" size="24"></u-icon>
					<text class="map-wrap-text">轻舟已过万重山</text>
					<u-icon name="arrow-down-fill" color="#ffffff" size="22"></u-icon>
				</view>
			</view>
			<view class="navbar-right" slot="right" v-if="slotRight">
				<view class="message-box right-item">
					<u-icon name="chat" size="38"></u-icon>
					<u-badge count="18" size="mini" :offset="[-15, -15]"></u-badge>
				</view>
				<view class="dot-box right-item">
					<u-icon name="calendar-fill" size="38"></u-icon>
					<u-badge size="mini" :is-dot="true" :offset="[-6, -6]"></u-badge>
				</view>
			</view>
		</u-navbar>
		<view class="u-demo">
			<view class="u-demo-wrap">
				<view class="u-demo-title">演示效果</view>
				<view class="u-demo-area">
					<u-toast ref="uToast"></u-toast>
					<view class="u-no-demo-here">查看顶部导航栏效果</view>
				</view> 
			</view>
			<view class="u-config-wrap">
				<view class="u-config-title u-border-bottom">
					参数配置
				</view>
				<view class="u-config-item">
					<view class="u-item-title">标题长度</view>
					<u-subsection :list="['短', '中', '长']" @change="titleChange"></u-subsection>
				</view>
				<view class="u-config-item">
					<view class="u-item-title">隐藏左侧返回区域</view>
					<u-subsection current="1" :list="['是', '否']" @change="backChange"></u-subsection>
				</view>
				<view class="u-config-item">
					<view class="u-item-title">自定义左侧内容</view>
					<u-subsection current="1" :list="['是', '否']" @change="leftChange"></u-subsection>
				</view>
				<view class="u-config-item">
					<view class="u-item-title">自定义右侧内容</view>
					<u-subsection :current="slotRightCurrent" :list="['是', '否']" @change="rightChange"></u-subsection>
				</view>
				<view class="u-config-item">
					<view class="u-item-title">传入整体slot</view>
					<u-subsection :list="['无', '搜索框', '搜索+按钮', '搜索+图标']" @change="searchChange"></u-subsection>
				</view>
				<view class="u-config-item">
					<view class="u-item-title">完全自定义传入内容</view>
					<u-subsection current="1" :list="['是', '否']" @change="customChange"></u-subsection>
				</view>
				<view class="u-config-item">
					<view class="u-item-title">背景色</view>
					<u-subsection :list="['渐变', '#39CCCC', '#B471CC', '#001f3f']" @change="bgColorChange"></u-subsection>
				</view>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				title: '新闻',
				backText: '返回',
				backIconName: 'nav-back',
				right: false,
				showAction: false,
				rightSlot: false,
				useSlot: false,
				background: {
					'background-image': 'linear-gradient(45deg, rgb(28, 187, 180), rgb(141, 198, 63))'
				},
				isBack: true,
				search: false,
				custom: false,
				isFixed: true,
				keyword: '',
				// #ifdef MP
				slotRight: false,
				// #endif
				// #ifndef MP
				slotRight: true
				// #endif
			}
		},
		computed: {
			slotRightCurrent() {
				return this.slotRight ? 0 : 1;
			}
		},
		methods: {
			titleChange(index) {
				this.useSlot = false;
				this.title = index == 0 ? '新闻' : index == 1 ? '新闻列表' : '雨打梨花深闭门,忘了青春,误了青春';
			},
			leftChange(index) {
				if(index == 0) {
					this.backText = '';
					this.backIconName = 'arrow-leftward';
				} else {
					this.backText = '返回';
					this.backIconName = 'arrow-left';
				}
			},
			searchChange(index) {
				this.title = null;
				this.useSlot = true;
				this.search = false;
				this.custom = false;
				if(index == 0) {
					this.title = '新闻';
					this.useSlot = false;
					this.rightSlot = false;
				} else if(index == 1) {
					this.showAction = false;
					this.useSlot = true;
					this.rightSlot = false;
					this.search = true;
					this.slotRight = false;
				} else if(index == 2) {
					this.useSlot = true;
					this.showAction = true;
					this.rightSlot = false;
					this.search = true;
					this.slotRight = false;
				} else {
					this.useSlot = true;
					this.search = true;
					this.showAction = false;
					this.rightSlot = true;
					this.slotRight = false;
				}
			},
			backChange(index) {
				this.isBack = !!index;
			},
			bgColorChange(index) {
				this.background = {};
				if(index == 0) {
					this.background = {
						'background-image': 'linear-gradient(45deg, rgb(28, 187, 180), rgb(141, 198, 63))'
					}
				} else {
					let color = index == 1 ? '#39CCCC' : index == 2 ? '#B471CC' : '#001f3f';
					this.background = {
						background: color
					}
				}
				
			},
			rightChange(index) {
				if(index == 0) {
					this.slotRight = true;
					this.useSlot = false;
				} else {
					this.slotRight = false;
				}
			},
			customChange(index) {
				this.search = false;
				this.rightSlot = false;
				if(index == 0) {
					this.custom = true;
					this.title = null;
					this.isBack = false;
					this.useSlot = true;
				} else {
					this.useSlot = false;
					this.title = '新闻';
					this.isBack = true;
				}
			}
		}
	}
</script>

<style lang="scss" scoped>
	.u-demo {
		//height: 200vh;
		height: calc(100% - 44px);
		height: calc(100% - 44px - constant(safe-area-inset-top));
		height: calc(100% - 44px - env(safe-area-inset-top));
	}
	
	.wrap {
		padding: 24rpx;
	}
	
	.navbar-right {
		margin-right: 24rpx;
		display: flex;
	}
	
	.search-wrap {
		margin: 0 20rpx;
		flex: 1;
	}
	
	.right-item {
		margin: 0 12rpx;
		position: relative;
		color: #ffffff;
		display: flex;
	}
	
	.message-box {
		
	}
	
	.slot-wrap {
		display: flex;
		align-items: center;
		flex: 1;
	}
	
	.map-wrap {
		display: flex;
		align-items: center;
		padding: 4px 6px;
		background-color: rgba(240,240, 240, 0.35);
		color: #fff;
		font-size: 22rpx;
		border-radius: 100rpx;
		margin-left: 30rpx;
	}
	
	.map-wrap-text {
		padding: 0 6rpx;
	}
</style>



================================================
FILE: pages/componentsA/noNetwork/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<text class="no-net-tips">请断开手机的WiFi和移动数据来查看效果</text>
				<u-no-network :tips="tips" :image="image"></u-no-network>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">
				参数配置
			</view>
			<view class="u-config-item">
				<view class="u-item-title">自定义提示语</view>
				<u-subsection :current="1" :list="['是', '否']" @change="tipsChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">自定义图标</view>
				<u-subsection :current="1" :list="['是', '否']" @change="imageChange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
	let 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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';
	export default {
		data() {
			return {
				tips: '哎呀,网络信号丢失',
				image: image,
			}
		},
		methods: {
			tipsChange(index) {
				this.tips = index == 0 ? '人生得意须尽欢' : '哎呀,网络信号丢失';
			},
			imageChange(index) {
				this.image = index == 0 ? 'https://cdn.uviewui.com/uview/no-network/no_network.png' : image;
			}
		}
	}
</script>

<style scoped lang="scss">
	.no-net-tips {
		color: $u-tips-color;
		font-size: 26rpx;
	}
</style>

================================================
FILE: pages/componentsA/parse/index.vue
================================================
<template>
	<view class="u-content">
		<u-parse :html="detail.content"></u-parse>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				detail: {
					content: `
						<div class="content_area" id="content_area" style="display: block;">
						                    
						                        <!--repaste.body.begin--><p>  巴尼小镇是云南省怒江傈僳族自治州首个易地扶贫搬迁集中安置点。从山上的金满村搬迁到巴尼小镇,近3年的时间里,搬迁户们的生活发生了可喜的变化。</p>
						<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>
						<p class="photo_alt_20190808" style="text-align: center;"><em></em>泸水市巴尼小镇易地扶贫搬迁安置点全景 李韩金摄(人民视觉)</p>
						<p>  搬出四面透风、容易漏雨的“千脚落地房”,住进如今宽敞明亮的楼房,当地居民的生活不断改善。另一边,留在山上的村民在企业帮助下改种经济林果,家庭收入节节攀升。</p>
						<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>
						<p class="photo_alt_20190808" style="text-align: center;"><em></em>金满村搬迁户在巴尼小镇的扶贫车间里上班 余秀英摄(人民视觉)</p>
						<p>  这阵子,52岁的米四东心里老惦记个事:吃两碗包谷稀饭。包谷稀饭是把包谷和蚕豆混在一起,有时加点腊肉,搁在三脚架上,生火煮制而成。在高黎贡山上,包谷稀饭曾是金满村人的主食,大多数人连个菜都不舍得炒,就配一碗蘸水吃。从山上搬下来快3年了,米四东说:“在山上盼着吃大米饭,如今天天吃米饭,又想念包谷稀饭了。”</p>
						<p>  米四东的家在巴尼小镇,地处云南省怒江傈僳族自治州泸水市洛本卓白族乡,紧邻着怒江。这里是怒江州首个易地扶贫搬迁集中安置点,2017年国庆节,金满村首批40户村民入住,2018年最后11户村民入住新居。如今已有搬迁户168户744人,都属于白族支系勒墨人。</p>
						<p>  3年时间,这里的人和生活发生了哪些变化?这个夏天,记者走进了巴尼小镇。</p>
						<p>  曾经——</p>
						<p>  8公里的距离,20年的差距</p>
						<p>  村民叁益光的家里干净亮堂,客厅的墙上,挂着一家三口在老房子前的合影。由于山地太陡,找不到平地打地基,老房子都是篱笆为墙、木板为顶、木头为柱的“千脚落地房”的样子。四面透风的房子里面黑黢黢的,下面养牲畜,中间住人,上面放粮食。“一入雨季,屋里就怕漏雨,潮乎乎有虱子”。2017年搬迁前,金满村九成村民就住在这种房子里。</p>
						<p>  从巴尼小镇往背后的高黎贡山深处走,沿着一条水泥路走上8公里,就回到了金满村村委会。金满村11个村民小组,其中5个不通公路、1个是地质灾害隐患点,这6个组如今已整体搬迁。“最远的马社王底小组有16户人家,到村委会要过悬崖、涉小河、爬陡坡,走上三四个小时。”说起过往,村委会主任沈光干嘘唏不已。</p>
						<p>  站在村委会的院子里,只见大山围绕、白云悠悠,山外面还是山。2014年底,金满村人均收入仅有1400多元,全村1310人有建档立卡贫困户1250人。沈光干说:“在山上,一年到头辛辛苦苦,还是穷成这个样!”</p>
						<p>  听老人们说起以前的生活,就像听“穿越故事”一样:去邻近的县背洋芋回来种,前后得一星期,头疼脑热不舍得花钱去卫生院……“过去从金满村到巴尼小镇的8公里距离,也是发展相差20年的距离。”巴尼小镇社区副主任和碧武介绍,群众刚搬出大山时,不会用电器,连起床叠被子的习惯都没有。</p>
						<p>  不过,在宽敞明亮的楼房里住上一段时间,大家都知道了现代生活的好处。乡中心完小五年级的学生花燕梅一家去年搬到小镇上,每天早上走几分钟就能到学校。“搬下来好,在这里衣服不容易脏,老师也讲得好!”孩子的话,总是简单明了。</p>
						<p>  如今,按照“一户一宅基地”的政策,米四东在山上的老房子拆了,一家人踏踏实实住在了小镇上。米四东感慨:“还是在山下容易赚钱。”</p>
						<p>  山下——</p>
						<p>  干活更方便,管理更规范</p>
						<p>  在巴尼小镇,最常见的交通工具就是摩托车,还有不少人家门口停着机动三轮车、小货车和轿车。米四东说,有了钱,大家都愿意买辆摩托车,“干活方便了许多。”</p>
						<p>  记者了解到,巴尼小镇目前外出务工118户282人,以本地打零工为主。在小镇上,就有家扶贫车间生产民族服装,平时有20多个女工。车间的管理人员告诉记者,一个熟练女工一个月挣三四千元没问题。</p>
						<p>  赚得多了,还要看花得多不多,对于搬出大山的人来说,上楼后的生活成本增加了多少?</p>
						<p>  米四东算了算账:小镇的水费一户每年20元,电费也不贵,过日子主要就是买些吃的。“这个就丰俭由己了,青菜要买,土豆南瓜山上就有。”</p>
						<p>  和碧武介绍,随着巴尼小镇社区建设越来越规范,一些以前“难以想象”的方法都有了实打实的用处。“比如我们这里实行积分制管理,积极参加升国旗仪式、搞好卫生都有加分,居民可以到超市用积分兑换商品。”社区超市经营者玉花梅说,去年超市里兑换了2万多元的积分。</p>
						<p>  当然,搬下来的时间并不长,对大部分人来说还是处在适应阶段。在和碧武看来,村子里的人与外界的交流还是偏少,视野和观念转变得还不够快。</p>
						<p>  米四东就有这种体会。洛本卓白族乡是“中国民间文化艺术之乡”,金满村被列入“云南省第四批旅游特色村”。作为州级非物质文化遗产传人,米四东如今在巴尼小镇教授勒墨人的传统歌舞。“等哪天怒江大峡谷的旅游火起来了,这门技艺一定会是旅游的‘招牌’产品。”米四东心里寻思着。</p>
						<p>  山上——</p>
						<p>  既抓“生态账”,又算“经济账”</p>
						<p>  一边是米四东感慨“山下容易赚钱”,另一边却是仍然留在山上的5个村民小组80户人家,如今的8公里,还有20年的发展差距吗?</p>
						<p>  “‘两不愁三保障’早就实现了,现在村里的生活跟过去相比简直是天壤之别。眼下村里惦记的,是怎样既抓‘生态账’,又算‘经济账’。”洛本卓乡宣传委员麻继成兼任金满村党总支书记,搬迁启动前就驻村工作,到现在还扎在村里忙活调整种养殖业结构。</p>
						<p>  靠山吃山,金满村过去是在四五十度的山坡地上开荒种包谷,如今要进行山体生态修复,除了改种经济林果,别无他法。</p>
						<p>  麻继成说,乡里组织搬迁群众将原住地的土地林地出租、流转或退耕还林,采取“合作社+村党总支+农户+基地”模式,种植花椒、核桃、草果、香橼等经济作物。现在,1000多亩花椒、1000多亩核桃、600多亩草果和300多亩香橼已经成了山上的“绿色银行”。“村里今年准备再发展250亩香橼,香橼两年就能挂果,收益前景非常可观。”</p>
						<p>  农产品“升了级”,收入也“开了源”。麻继成说,农民在企业承包的果园里务工,每天的工资有100元,如今每天都有二三十人在果园里干活。</p>
						<p>  “搬出去有盼头,留下来有干劲。”如今,乡里还在加紧研究制定金满村乡村旅游规划。“等客栈、农家乐、步行街都建好了,幸福一定来敲门。”洛本卓乡党委书记郝春荣说,巩固脱贫成果、走向乡村振兴,“好日子还在后头”。</p><!--repaste.body.end-->
						                    
						                </div>
					`
				}
			}
		},
		onLoad() {
		},
		methods: {
			
		}
	}
</script>

<style lang="scss" scoped>
	.u-content {
		padding: 24rpx;
		font-size: 32rpx;
		color: $u-content-color;
		line-height: 1.6;
	}
</style>


================================================
FILE: pages/componentsA/select/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<u-select @click="show = true" :default-value="defaultValue" :mode="mode" v-model="show" :list="list" @confirm="confirm" @cancel="cancel"></u-select>
				<view class="u-demo-result-line">select值:{{ result }}</view>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">参数配置</view>
			<view class="u-config-item">
				<view class="u-item-title">状态</view>
				<u-subsection :current="current" :list="['打开', '收起']" @change="statusChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">模式</view>
				<u-subsection :list="['单列', '多列独立', '多列联动']" @change="modeChange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
export default {
	data() {
		return {
			show: false,
			result: '尚未选择',
			defaultValue: [3],
			mode: 'single-column', // single-column, mutil-column, mutil-column-auto
			list: [],
			list1: [
				{
					value: '江',
					label: '江'
				},
				{
					value: '湖',
					label: '湖'
				},
				{
					value: '夜',
					label: '夜'
				},
				{
					value: '雨',
					label: '雨'
				},
				{
					value: '十',
					label: '十'
				},
				{
					value: '年',
					label: '年'
				},
				{
					value: '灯',
					label: '灯'
				}
			],
			list2: [
				[
					{
						value: '昔',
						label: '昔'
					},
					{
						value: '去',
						label: '去'
					},
					{
						value: '雪',
						label: '雪'
					},
					{
						value: '如',
						label: '如'
					},
					{
						value: '花',
						label: '花'
					}
				],
				[
					{
						value: '今',
						label: '今'
					},
					{
						value: '来',
						label: '来'
					},
					{
						value: '花',
						label: '花'
					},
					{
						value: '似',
						label: '似'
					},
					{
						value: '雪',
						label: '雪'
					}
				]
			],
			list3: [
				{
					label: '中国',
					value: '1',
					children: [
						{
							label: '广西',
							value: '2',
							children: [
								{
									label: '南宁',
									value: '3'
								},
								{
									label: '梧州',
									value: '3'
								},
								{
									label: '柳州',
									value: '3'
								}
							]
						},
						{
							label: '广东',
							value: '2',
							children: [
								{
									label: '深圳',
									value: '3'
								},
								{
									label: '惠州',
									value: '3'
								},
								{
									label: '清远',
									value: '3'
								}
							]
						}
					]
				},
				{
					label: '美国',
					value: '1',
					children: [
						{
							label: '纽约',
							value: '2',
							children: [
								{
									label: '皇后街道',
									value: '3'
								}
							]
						}
					]
				}
			]
		};
	},
	onLoad() {
		this.list = this.list1;
	},
	computed: {
		current() {
			return this.show ? 0 : 1;
		}
	},
	methods: {
		statusChange(index) {
			this.show = !index;
		},
		modeChange(index) {
			let type = ['single-column', 'mutil-column', 'mutil-column-auto'];
			this.mode = type[index];
			this.list = index == 0 ? this.list1 : index == 1 ? this.list2 : this.list3;
			this.show = true;
		},
		confirm(e) {
			this.result = '';
			e.map((val, index) => {
				this.result += this.result == '' ? val.label : '-' + val.label;
			})
		},
		cancel(e) {
			console.log(e);
		}
	}
};
</script>

<style scoped lang="scss">
.badge-button {
	padding: 4rpx 6rpx;
	background-color: $u-type-error;
	color: #fff;
	border-radius: 10rpx;
	font-size: 22rpx;
	line-height: 1;
}
</style>


================================================
FILE: pages/componentsA/slider/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<u-toast ref="uToast"></u-toast>
				<u-slider :step="step" :height="height" :block-width="blockWidth" 
					:active-color="activeColor" :value="30" 
					:use-slot="useSlot" v-model="value"
					:min="min" :max="max" 
					@end="end"
					@moving="moving"
				>
					<!-- #ifndef MP-WEIXIN || MP-TOUTIAO -->
					<view class="" v-if="useSlot">
						<view class="badge-button">
							{{value}}
						</view>
					</view>
					<!-- #endif -->
				</u-slider>
				<view class="u-demo-result-line">
					滑块值:{{value}}
				</view>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">参数配置</view>
			<view class="u-config-item">
				<view class="u-item-title">自定义颜色</view>
				<u-subsection :list="['primary', 'warning', 'error', 'success']" @change="typeChange"></u-subsection>
			</view>
			<!-- #ifndef MP-WEIXIN -->
			<view class="u-config-item">
				<view class="u-item-title">自定义传入内容</view>
				<u-subsection current="1" :list="['是', '否']" @change="slotChange"></u-subsection>
			</view>
			<!-- #endif -->
			<view class="u-config-item">
				<view class="u-item-title">自定义尺寸</view>
				<u-subsection current="1" :list="['是', '否']" @change="sizeChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">步进值</view>
				<u-subsection :list="['1', '10', '20']" @change="stepChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">最大最小值</view>
				<u-subsection :list="['0-100', '40-80']" @change="minMaxchange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				value: 30,
				useSlot: false,
				setp: 1,
				activeColor: '#2979ff',
				height: 6,
				blockWidth: 30,
				step: 1,
				min: 0,
				max: 100
			};
		},
		onLoad() {
			
		},
		computed: {
			current() {
				return this.show ? 0 : 1;
			}
		},
		methods: {
			typeChange(index) {
				let type = ['primary', 'warning', 'error', 'success'];
				this.activeColor = this.$u.color[type[index]];
			},
			sizeChange(index) {
				if(index == 0) {
					this.height = 4;
					this.blockWidth = 30;
				} else {
					this.height = 6;
					this.blockWidth = 20;
				}
			},
			stepChange(index) {
				let arr = ['1', '10', '20'];
				this.step = arr[index];
			},
			slotChange(index) {
				this.useSlot = !index;
			},
			minMaxchange(index) {
				if(index == 0) {
					this.min = 0;
					this.max = 100;
				} else {
					this.min = 40;
					this.max = 80;
				}
			},
			end() {
				// console.log('end');
			},
			moving() {
				// console.log('moving');
			}
		}
	};
</script>

<style scoped lang="scss">
	.badge-button {
		padding: 4rpx 6rpx;
		background-color: $u-type-error;
		color: #fff;
		border-radius: 10rpx;
		font-size: 22rpx;
		line-height: 1;
	}
</style>


================================================
FILE: pages/componentsA/tabs/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<u-toast ref="uToast"></u-toast>
				<u-tabs v-if="control" bg-color="#fafafa" :bold="bold" :active-color="activeColor" :list="list"
				@change="change" :current="current" :is-scroll="isScroll" :offset="offset"></u-tabs>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">
				参数配置
			</view>
			<view class="u-config-item">
				<view class="u-item-title">模式选择</view>
				<u-subsection :current="sectionCurrent" :list="['滚动', '非滚动']" @change="modeChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">标签个数(非滚动模式)</view>
				<u-subsection :list="['2', '3',  '4']" @change="countChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">活动选项字颜色</view>
				<u-subsection mode="button" :list="['primary', 'success', 'error', 'warning']" @change="colorChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">字体加粗</view>
				<u-subsection mode="button" :list="['是', '否']" @change="boldChange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				list: [],
				data: [{
					name: '关注',
					count: 100
				}, {
					name:  '推荐',
					count: 7
				}, {
					name: '电影'
				},{
					name: '电视剧'
				},{
					name: '小视频'
				}, {
					name:  '游戏'
				}, {
					name: '校园'
				},{
					name: '影视'
				},{
					name: '音乐'
				}],
				current: 0,
				sectionCurrent: 0,
				isScroll: true,
				tabCountIndex: 0,
				activeColor: this.$u.color['primary'],
				bold: true,
				control: true,
				offset: [5, -5]
			}
		},
		onLoad() {
			this.list = this.data;
		},
		methods: {
			countChange(index) {
				this.sectionCurrent = 1;
				if(index == 0) {
					this.list = [];
					this.list.push(this.data[0]);
					this.list.push(this.data[1]);
					this.offset = [5, 60]
				} else if(index == 1) {
					this.list = [];
					this.list.push(this.data[0]);
					this.list.push(this.data[1]);
					this.list.push(this.data[2]);
					this.offset = [5, 20]
				} else {
					this.list = [];
					this.list.push(this.data[0]);
					this.list.push(this.data[1]);
					this.list.push(this.data[2]);
					this.list.push(this.data[3]);
					this.offset = [5, 5]
				}
				this.tabCountIndex = index;
				this.isScroll = false;
			},
			change(index) {
				this.current = index;
			},
			modeChange(index) {
				this.control = false;
				this.current = 0;
				if(index == 0) {
					this.isScroll = true;
					this.list = this.data;
					this.offset = [5, -5]
				} else {
					this.isScroll = false;
					this.countChange(this.tabCountIndex);
				}
				this.$nextTick(() => {
					this.control = true;
				})
			},
			colorChange(e) {
				let color = 'primary';
				switch(e) {
					case 0:
						color = 'primary';break;
					case 1:
						color = 'success';break;
					case 2:
						color = 'error';break;
					case 3:
						color = 'warning';break;
				}
				this.activeColor = this.$u.color[color];
			},
			boldChange(e) {
				switch(e) {
					case 0:
						this.bold = true;break;
					case 1:
						this.bold = false;break;
				}
			}
		}
	}
</script>

<style lang="scss" scoped>
	.u-config-wrap {

	}
</style>


================================================
FILE: pages/componentsA/tag/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<u-toast ref="uToast"></u-toast>
				<u-tag :text="text" :type="type" :shape="shape" :closeable="closeable" :mode="mode" @close="close" @click="click" :show="show" :size="size" />
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">参数配置</view>
			<view class="u-config-item">
				<view class="u-item-title">模式选择</view>
				<u-subsection :list="['light', 'dark', 'plain']" @change="modeChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">显示内容</view>
				<u-subsection :list="['蒹葭苍苍', '白露为霜', '在水一方']" @change="textChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">主题选择</view>
				<u-subsection current="2" :list="['primary', 'success', 'error', 'warning', 'info']" @change="typeChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">形状</view>
				<u-subsection :list="['square', 'circle', 'circleLeft', 'circleRight']" @change="shapeChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">尺寸</view>
				<u-subsection :list="['default', 'mini']" @change="sizeChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">关闭图标</view>
				<u-subsection :list="['是', '否']" @change="closeableChange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
export default {
	data() {
		return {
			text: '蒹葭苍苍',
			mode: 'light',
			type: 'error',
			size: 'default',
			shape: 'square',
			closeable: true,
			show: true
		};
	},
	methods: {
		modeChange(index) {
			this.mode = index == 0 ? 'light' : index == 1 ? 'dark' : 'plain';
		},
		textChange(index) {
			this.text = index == 0 ? '蒹葭苍苍' : index == 1 ? '白露为霜' : '在水一方';
		},
		typeChange(index) {
			this.type = index == 0 ? 'primary' : index == 1 ? 'success' : index == 2 ? 'error' : index == 3 ? 'warning' : 'info';
		},
		shapeChange(index) {
			this.shape = index == 0 ? 'square' : index == 1 ? 'circle' : index == 2 ? 'circleLeft' : 'circleRight';
		},
		sizeChange(index) {
			this.size = index == 0 ? 'default' : 'mini';
		},
		closeableChange(index) {
			this.closeable = index == 0 ? true : false;
		},
		click(index) {
			this.$refs.uToast.show({
				title: `第${index + 1}个标签被点击`,
				type: 'success'
			});
		},
		close(index) {
			this.$refs.uToast.show({
				title: `关闭图标被点击`,
				type: 'success'
			});
		}
	}
};
</script>

<style lang="scss" scoped>
.u-demo {
}
</style>


================================================
FILE: pages/componentsA/test/index.vue
================================================
<template>
    <u-form
        :model="form"
        ref="uForm"
    >
        <u-form-item label="姓名">
            <u-input v-model="form.name" />
        </u-form-item>
        <u-form-item label="简介">
            <u-input v-model="form.intro" />
        </u-form-item>
        <u-form-item label="性别">
            <u-input
                v-model="form.sex"
                type="select"
            />
        </u-form-item>
        <u-form-item label="水果">
            <u-checkbox-group>
                <u-checkbox
                    v-model="item.checked"
                    v-for="(item, index) in checkboxList"
                    :key="index"
                    :name="item.name"
                >
                    {{ item.name }}
                </u-checkbox>
            </u-checkbox-group>
        </u-form-item>
        <u-form-item label="味道">
            <u-radio-group v-model="radio">
                <u-radio
                    v-for="(item, index) in radioList"
                    :key="index"
                    :name="item.name"
                    :disabled="item.disabled"
                >
                    {{ item.name }}
                </u-radio>
            </u-radio-group>
        </u-form-item>
        <u-form-item label="开关">
            <u-switch
                slot="right"
                v-model="switchVal"
            ></u-switch>
        </u-form-item>
    </u-form>
</template>

<script>
    export default {
        data() {
            return {
                form: {
                    name: '',
                    intro: '',
                    sex: ''
                },
                checkboxList: [{
                        name: '苹果',
                        checked: false,
                        disabled: false
                    },
                    {
                        name: '雪梨',
                        checked: false,
                        disabled: false
                    },
                    {
                        name: '柠檬',
                        checked: false,
                        disabled: false
                    }
                ],
                radioList: [{
                        name: '鲜甜',
                        disabled: false
                    },
                    {
                        name: '麻辣',
                        disabled: false
                    }
                ],
                radio: '',
                switchVal: false
            };
        }
    };
</script>


================================================
FILE: pages/componentsA/timeLine/index.vue
================================================
<template>
	<view class="wrap">
		<u-time-line>
			<u-time-line-item nodeTop="2">
				<template v-slot:node>
					<view class="u-node" style="background: #19be6b;">
						<u-icon name="pushpin-fill" color="#fff" :size="24"></u-icon>
					</view>
				</template>
				<template v-slot:content>
					<view>
						<view class="u-order-title">待取件</view>
						<view class="u-order-desc">[自提柜]您的快件已放在楼下侧门,直走前方53.6米,左拐约10步,再右拐直走,见一红灯笼停下,叩门三下,喊“芝麻开门”即可。</view>
						<view class="u-order-time">2019-05-08 12:12</view>
					</view>
				</template>
			</u-time-line-item>
			<u-time-line-item nodeTop="2">
				<template v-slot:node>
					<view class="u-node">
						<u-icon name="account-fill" color="#fff" :size="24"></u-icon>
					</view>
				</template>
				<template v-slot:content>
					<view>
						<view class="u-order-title unacive">派送中</view>
						<view class="u-order-desc">【深圳市】快件已到达目的地,派件员为国产锦衣卫007号,电话:<text class="tel">13833882438</text>,请留意快递信息</view>
						<view class="u-order-time">2019-05-08 06:03</view>
					</view>
				</template>
			</u-time-line-item>
			<u-time-line-item nodeTop="2">
				<template v-slot:node>
					<view class="u-node">
						<u-icon name="car-fill" color="#fff" :size="24"></u-icon>
					</view>
				</template>
				<template v-slot:content>
					<view>
						<view class="u-order-title unacive">运输中</view>
						<view class="u-order-desc">【深圳市】快递已到达 深圳固戍一部</view>
						<view class="u-order-time">2019-05-07 08:05</view>
					</view>
				</template>
			</u-time-line-item>
			<u-time-line-item>
				<template v-slot:content>
					<view>
						<view class="u-order-desc">【深圳市】快件已从深圳运转中心发出,正在发往深圳宝安一部</view>
						<view class="u-order-time">2019-12-06 22:30</view>
					</view>
				</template>
			</u-time-line-item>
			<u-time-line-item>
				<template v-slot:content>
					<view>
						<view class="u-order-desc">【深圳市】快件已到达 深圳运转中心</view>
						<view class="u-order-time">2019-12-04 16:42</view>
					</view>
				</template>
			</u-time-line-item>
			<u-time-line-item>
				<template v-slot:content>
					<view>
						<view class="u-order-desc">【郑州市】快件已从郑州运转中心出发,正在发往深圳运转中心</view>
						<view class="u-order-time">2019-12-02 12:55</view>
					</view>
				</template>
			</u-time-line-item>
			<u-time-line-item>
				<template v-slot:content>
					<view>
						<view class="u-order-desc">【郑州市】快件已到达 郑州运转中心</view>
						<view class="u-order-time">2019-12-02 08:23</view>
					</view>
				</template>
			</u-time-line-item>
			<u-time-line-item nodeTop="0">
				<template v-slot:node>
					<view class="u-node">
						<u-icon name="file-text-fill" color="#fff" :size="24"></u-icon>
					</view>
				</template>
				<template v-slot:content>
					<view>
						<view class="u-order-desc">您购买的商品【尚方宝剑,先斩后奏】,经由北京军区仓库发货,国内快递承运人【中南海保镖】。</view>
						<view class="u-order-time">2019-12-01 07:00</view>
					</view>
				</template>
			</u-time-line-item>
		</u-time-line>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				
			}
		}
	}
</script>

<style lang="scss" scoped>
	.wrap {
		padding: 24rpx 24rpx 24rpx 40rpx;
	}
	
	.u-node {
		width: 44rpx;
		height: 44rpx;
		border-radius: 100rpx;
		display: flex;
		justify-content: center;
		align-items: center;
		background: #d0d0d0;
	}
	
	.u-order-title {
		color: #333333;
		font-weight: bold;
		font-size: 32rpx;
	}
	
	.u-order-title.unacive {
		color: rgb(150, 150, 150);
	}
	
	.u-order-desc {
		color: rgb(150, 150, 150);
		font-size: 28rpx;
		margin-bottom: 6rpx;
	}
	
	.u-order-time {
		color: rgb(200, 200, 200);
		font-size: 26rpx;
	}
	
	.tel {
		color: $u-type-primary;
	}
</style>


================================================
FILE: pages/componentsA/toast/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<u-toast :type="type" ref="uToast"></u-toast>
				<text class="no-mode-here">见弹出toast</text>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">
				参数配置
			</view>
			<view class="u-config-item">
				<view class="u-item-title">主题</view>
				<u-subsection :current="4" :list="['primary', 'success', 'error', 'warning', 'default']" @change="typeChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">结束后自动跳转</view>
				<u-subsection current="1" :list="['是', '否']" @change="urlChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">位置</view>
				<u-subsection current="1" :list="['顶部', '中部', '底部']" @change="positionChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">显示图标</view>
				<u-subsection :list="['是', '否']" @change="iconChange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				type: 'success',
				title: '桃花潭水深千尺',
				icon: true,
				position: 'center',
				url: '',
			}
		},
		methods: {
			typeChange(index) {
				this.type = index == 0 ? 'primary' : index == 1 ? 'success' : index == 2 ? 'error' : index == 3 ? 'warning'  : 'default';
				this.show();
			},
			positionChange(index) {
				this.position = index == 0 ? 'top' : index == 1 ? 'center' : 'bottom';
				this.show();
			},
			iconChange(index) {
				this.icon = index == 0 ? true : false;
				this.show();
			},
			urlChange(index) {
				this.url = index == 0 ? '/pages/components/button/index' : '';
				this.show();
			},
			show() {
				this.$refs.uToast.show({
					title: this.title,
					position: this.position,
					type: this.type,
					icon: this.icon,
					url: this.url,
				});
			},
			hide() {
				this.$refs.uToast.hide();
			}
		}
	}
</script>

<style lang="scss" scoped>
	.no-mode-here {
		color: $u-tips-color;
		font-size: 28rpx;
	}
</style>


================================================
FILE: pages/componentsA/topTips/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<u-top-tips ref="uTips"></u-top-tips>
				<text class="u-no-demo-here">点击参数配置查看效果</text>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">
				参数配置
			</view>
			<view class="u-config-item">
				<view class="u-item-title">主题选择</view>
				<u-subsection :list="['primary', 'success', 'error', 'warning', 'info']" @change="typeChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">显示时间</view>
				<u-subsection current="1" :list="['长', '正常', '短']" @change="durationChange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				duration: 2000,
				title: '忽如一夜春风来,千树万树梨花开',
				type: 'primary'
			}
		},
		methods: {
			showTips() {
				this.$refs.uTips.show({
					duration: this.duration,
					title: this.title,
					type: this.type
				});
			},
			typeChange(index) {
				this.type = index == 0 ? 'primary' : index == 1 ? 'success' : index == 2 ? 'error' : index == 3 ? 'warning'  : 'info';
				this.showTips();
			},
			durationChange(index) {
				this.duration = index == 0 ? 4000 : index == 1 ? 2000 : 500;
				this.showTips();
			}
		}
	}
</script>

<style lang="scss" scoped>
	.u-demo {}
</style>

================================================
FILE: pages/componentsA/verificationCode/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<u-toast ref="uToast"></u-toast>
				<u-verification-code :keep-running="true" :seconds="seconds" @end="end" @start="start" ref="uCode" 
				@change="codeChange" :startText="startText" :changeText="changeText" 
				:endText="endText"></u-verification-code>
				<u-button @click="getCode">{{tips}}</u-button>
				<u-button :custom-style="{marginTop: '30rpx'}" @tap="reset" style="margin-top: 30rpx;">重置</u-button>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">
				参数配置
			</view>
			<view class="u-config-item">
				<view class="u-item-title">倒计时间</view>
				<u-subsection :current="0" :list="['60s', '10s', '5s']" @change="secondsChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">自定义提示语</view>
				<u-subsection :current="1" :list="['是', '否']" @change="textChange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				tips: '',
				seconds: 60,
				refCode: null,
				startText: '获取验证码',
				changeText: 'X秒重新获取',
				endText: '重新获取'
			}
		},
		onReady() {
			// 注意这里为错误示例,目前微信小程序最新稳定版开发工具如此
			// 赋值会报错,很诡异,其他端无此问题
			// this.refCode = this.$refs.uCode;
		},
		methods: {
			codeChange(text) {
				// console.log(text);
				this.tips = text;
			},
			getCode() {
				if(this.$refs.uCode.canGetCode) {
					// 模拟向后端请求验证码
					uni.showLoading({
						title: '正在获取验证码'
					})
					setTimeout(() => {
						uni.hideLoading();
						// 这里此提示会被this.start()方法中的提示覆盖
						this.$u.toast('验证码已发送');
						// 通知验证码组件内部开始倒计时
						this.$refs.uCode.start();
					}, 2000);
				} else {
					this.$u.toast('倒计时结束后再发送');
				}
			},
			secondsChange(index) {
				this.seconds = index == 0 ? 60 : index == 1 ? 10 : 5;
			},
			textChange(index) {
				if(index == 0) {
					this.startText = '点一下获取',
					this.changeText = '重新获取Xs',
					this.endText = '再次获取'
				} else {
					this.startText = '获取验证码',
					this.changeText = 'X秒重新获取',
					this.endText = '重新获取'
				}
			},
			end() {
				this.$u.toast('倒计时结束');
			},
			start() {
				this.$u.toast('倒计时开始');
			},
			reset() {
				this.$refs.uCode.reset();
			}
		}
	}
</script>

<style lang="scss" scoped>
	.u-demo {}
</style>


================================================
FILE: pages/componentsB/card/index.vue
================================================
<template>
	<view class="">
		<view class="u-card-wrap">
			<u-card @click="click" @head-click="headClick" :title="title" :sub-title="subTitle" :thumb="thumb" :padding="padding" :border="border">
				<view class="" slot="body"> 
					<view class="u-body-item u-flex u-border-bottom u-col-between u-p-t-0">
						<view class="u-body-item-title u-line-2">
							瓶身描绘的牡丹一如你初妆,冉冉檀香透过窗心事我了然,宣纸上走笔至此搁一半
						</view>
						<image src="https://img11.360buyimg.com/n7/jfs/t1/94448/29/2734/524808/5dd4cc16E990dfb6b/59c256f85a8c3757.jpg" mode="aspectFill"></image>
					</view>
					<view class="u-body-item u-flex u-row-between u-p-b-0">
						<view class="u-body-item-title u-line-2">
							釉色渲染仕女图韵味被私藏,而你嫣然的一笑如含苞待放
						</view>
						<image src="https://img12.360buyimg.com/n7/jfs/t1/102191/19/9072/330688/5e0af7cfE17698872/c91c00d713bf729a.jpg" mode="aspectFill"></image>
					</view>
				</view>
				<view class="" slot="foot">
					<u-icon v-if="bottomSlot" name="chat-fill" size="34" label="30评论"></u-icon>
				</view>
			</u-card>
		</view>
		<view class="u-config-wrap u-demo">
			<view class="u-config-title u-border-bottom">
				参数配置
			</view>
			<view class="u-config-item">
				<view class="u-item-title">左上角图标</view>
				<u-subsection :list="['显示', '隐藏']" @change="thumbChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">内边距</view>
				<u-subsection current="1" :list="['20', '30', '40']" @change="paddingChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">底部</view>
				<u-subsection :list="['显示', '隐藏']" @change="bottomChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">外边框</view>
				<u-subsection :list="['显示', '隐藏']" @change="borderChange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				title: '素胚勾勒出青花,笔锋浓转淡',
				subTitle: '2020-05-15',
				thumb: 'http://pic2.sc.chinaz.com/Files/pic/pic9/202002/hpic2119_s.jpg',
				padding: 20,
				bottomSlot: true,
				border: true
			}
		},
		methods: {
			thumbChange(index) {
				this.thumb = index == 0 ? 'http://pic2.sc.chinaz.com/Files/pic/pic9/202002/hpic2119_s.jpg' : '';
			},
			paddingChange(index) {
				this.padding = [20, 30, 40][index];
			},
			bottomChange(index) {
				this.bottomSlot = !index;
			},
			borderChange(index) {
				this.border = !index;
			},
			click(index) {
				console.log(index);
			},
			headClick(index) {
				console.log(index);
			}
		}
	}
</script>

<style scoped lang="scss">
	.u-demo {
		padding-top: 0;
	}
	
	.u-card-wrap { 
		background-color: $u-bg-color;
		padding: 1px;
	}
	
	.u-body-item {
		font-size: 32rpx;
		color: #333;
		padding: 20rpx 10rpx;
	}
		
	.u-body-item image {
		width: 120rpx;
		flex: 0 0 120rpx;
		height: 120rpx;
		border-radius: 8rpx;
		margin-left: 12rpx;
	}
</style>


================================================
FILE: pages/componentsB/checkbox/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<view class="">
					<u-checkbox-group :size="size" :width="width" 
						:wrap="wrap" :max="max" 
						@change="checkboxGroupChange" 
						:activeColor="activeColor"
					>
						<u-checkbox @change="checkboxChange"
							v-model="item.checked" v-for="(item, index) in list" 
							:key="index" :name="item.name"
							:shape="shape"
							:disabled="item.disabled"
						>{{item.name}}</u-checkbox>
					</u-checkbox-group>
				</view>
				<view class="u-demo-result-line">
					{{result.length ? `选中了"${getResult}"` : '请选择'}}
				</view>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">
				参数配置
			</view>
			<view class="u-config-item">
				<view class="u-item-title">形状</view>
				<u-subsection :list="['方形', '圆形']" @change="shapeChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">整体大小(单位rpx)</view>
				<u-subsection current="1" :list="['30', '40', '50']" @change="sizeChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">激活颜色</view>
				<u-subsection :list="['primary', 'error', 'warning', 'success', 'info']" @change="activeColorChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">默认选中第一个</view>
				<u-subsection current="1" :list="['是', '否']" @change="defaultChooseChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">每个占一行</view>
				<u-subsection current="1" :list="['是', '否']" @change="wrapChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">每个宽度50%</view>
				<u-subsection current="1" :list="['是', '否']" @change="widthChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">最大选择数量</view>
				<u-subsection current="2" :list="['1', '2', '3']" @change="maxChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">禁用第一个</view>
				<u-subsection current="1" :list="['是', '否']" @change="disabledChange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				list: [
					{
						name: '荔枝',
						checked: false,
						disabled: false
					},
					{
						name: '香蕉',
						checked: false,
						disabled: false
					},
					{
						name: '橙子',
						checked: false,
						disabled: false
					},
					{
						name: '草莓',
						checked: false,
						disabled: false
					}
				],
				disabled: false,
				checked: true,
				result: [],
				shape: 'square',
				max: 3,
				activeColor: '#2979ff',
				size: 34,
				wrap: false,
				width: 'auto'
			}
		},
		computed: {
			getResult() {
				return this.result.join(",");
			}
		},
		methods: {
			shapeChange(index) {
				this.shape = index == 0 ? 'square' : 'circle';
			},
			sizeChange(index) {
				this.size = index == 0 ? 30 : index == 1 ? 40 : 50;
			},
			defaultChooseChange(index) {
				// 特别处理对第一个选的选中的情况,涉及到提示语,选中状态等
				// 实际开发中不会存在这些情况,只是演示用
				if(index == 0) {
					this.list[0].checked = true;
					this.result = [this.list[0].name];
				} else {
					this.list[0].checked = false;
					this.result.splice(this.result.indexOf(this.list[0].name), 1);
				}
			},
			maxChange(index) {
				this.max = index + 1;
			},
			disabledChange(index) {
				if(index == 0) {
					this.list[0].disabled = true;
				} else {
					this.list[0].disabled = false;
				}
			},
			activeColorChange(index) {
				// 如果用户尚未勾选任何checkbox,切换颜色时,默认选中第一个让用户看到效果,因为勾选了才有效果
				if(!this.result.length) this.list[0].checked = true;
				let theme = index == 0 ? 'primary' : index == 1 ? 'error' : index == 2 ? 'warning' : index == 3 ? 'success' : 'info';
				this.activeColor = this.$u.color[theme];
			},
			// 选中某个复选框时,由checkbox时触发
			checkboxChange(e) {
				// console.log(e);
			},
			// 选中任一checkbox时,由checkbox-group触发
			checkboxGroupChange(e) {
				this.result = e;
			},
			widthChange(index) {
				this.width = index == 0 ? '50%' : '';
			},
			wrapChange(index) {
				this.wrap = !index;
			}
		}
	}
</script>

<style scoped lang="scss">
	.u-demo {}
</style>


================================================
FILE: pages/componentsB/divider/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<u-divider :type="type" :borderColor="borderColor" :bg-color="bgColor" @click="click"
				:half-width="halfWidth" :color="color" :font-size="fontSize">{{text}}</u-divider>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">
				参数配置
			</view>
			<view class="u-config-item">
				<view class="u-item-title">提示内容</view>
				<u-subsection :list="['没有更多了', '到底了']" @change="textChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">单边线宽</view>
				<u-subsection current="1" :list="['50', '150', '250']" @change="halfWidthChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">横线颜色</view>
				<u-subsection :list="['#dcdfe6', 'primary', 'error', 'warning', 'success']" @change="borderColorChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">内容样式</view>
				<u-subsection :list="['默认', '自定义']" @change="contentChange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				text: '没有更多了',
				bgColor: '#fafafa',
				halfWidth: 150,
				borderColor: '#dcdfe6',
				type: 'primary',
				color: '#909399',
				fontSize: '26'
			}
		},
		methods: {
			textChange(index) {
				this.text = index == 0 ? '没有更多了' : '到底了';
			},
			halfWidthChange(index) {
				this.halfWidth = index == 0 ? 50 : index == 1 ? 150 : 250;
			},
			borderColorChange(index) {
				if(index == 0) {
					this.borderColor = '#dcdfe6';
				} else {
					// 因为border-color参数优先级高于type,要让type起作用,就需要设置border-color为空
					this.borderColor = '';
					this.type = index == 1 ? 'primary' : index == 2 ? 'error' : index == 3 ? 'warning' : 'success';
				}
			},
			contentChange(index) {
				if(index == 0) {
					 this.color = '#909399';
					 this.fontSize = 26;
				} else {
					this.color = this.$u.color['primary'];
					this.fontSize = 30;
				}
			},
			click() {
				console.log('click');
			}
		}
	}
</script>

<style scoped lang="scss">
	.u-demo {}
</style>


================================================
FILE: pages/componentsB/dropdown/index.vue
================================================
<template>
	<view class="">
		<view class="u-m-p-50">
			<view class="u-demo-area u-flex u-row-center">
				<u-dropdown :close-on-click-mask="mask" ref="uDropdown" :activeColor="activeColor" :borderBottom="borderBottom">
					<u-dropdown-item @change="change" v-model="value1" title="距离" :options="options1"></u-dropdown-item>
					<u-dropdown-item @change="change" v-model="value2" title="温度" :options="options2"></u-dropdown-item>
					<u-dropdown-item title="属性">
						<view class="slot-content">
							<view class="item-box">
								<view class="item" :class="[item.active ? 'active' : '']" @tap="tagClick(index)" v-for="(item, index) in list" :key="index">
									{{item.label}}
								</view>
							</view>
							<u-button type="primary" @click="closeDropdown">确定</u-button>
						</view>
					</u-dropdown-item>
				</u-dropdown>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">
				参数配置
			</view>
			<view class="u-config-item">
				<view class="u-item-title">下边框</view>
				<u-subsection current="1" :list="['有', '无']" @change="borderChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">激活颜色</view>
				<u-subsection :list="['#2979ff', '#ff9900', '#19be6b']" @change="activeColorChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">遮罩是否可点击</view>
				<u-subsection :list="['是', '否']" @change="maskChange"></u-subsection>
			</view> 
		</view>
	</view>
</template>

<script>
	export default {
		data() { 
			return {
				value1: '',
				value2: '2',
				mask: true,
				options1: [{
						label: '默认排序',
						value: 1,
					},
					{
						label: '距离优先',
						value: 2,
					},
					{
						label: '价格优先',
						value: 3,
					}
				],
				options2: [{
						label: '去冰',
						value: 1,
					},
					{
						label: '加冰',
						value: 2,
					},
					{
						label: '正常温',
						value: 3,
					},
					{
						label: '加热',
						value: 4,
					},
					{
						label: '极寒风暴',
						value: 5,
					}
				],
				list: [{
						label: '琪花瑶草',
						active: true,
					},
					{
						label: '清词丽句',
						active: false,
					},
					{
						label: '宛转蛾眉',
						active: false,
					},
					{
						label: '煦色韶光',
						active: false,
					},
					{
						label: '鱼沉雁落',
						active: false,
					},
					{
						label: '章台杨柳',
						active: false,
					},
					{
						label: '霞光万道',
						active: false,
					}
				],
				borderBottom: false,
				activeColor: '#2979ff'
			}
		},
		methods: {
			borderChange(index) {
				this.borderBottom = !index;
			},
			activeColorChange(index) {
				this.activeColor = ['#2979ff', '#ff9900', '#19be6b'][index];
			},
			change(index) {
				this.$u.toast(`点击了第${index}项`);
			},
			closeDropdown() {
				this.$refs.uDropdown.close();
			},
			tagClick(index) {
				this.list[index].active = !this.list[index].active;
			},
			maskChange(index) {
				this.mask = !index;
			}
		}
	}
</script>

<style scoped lang="scss">
	.u-config-wrap {
		padding: 40rpx;
	}
	
	.slot-content {
		background-color: #FFFFFF;
		padding: 24rpx;
		
		.item-box {
			margin-bottom: 50rpx;
			display: flex;
			flex-wrap: wrap;
			justify-content: space-between;
			
			.item {
				border: 1px solid $u-type-primary;
				color: $u-type-primary;
				padding: 8rpx 40rpx;
				border-radius: 100rpx;
				margin-top: 30rpx;
			}
			
			.active {
				color: #FFFFFF;
				background-color: $u-type-primary;
			}
		}
	}
</style>


================================================
FILE: pages/componentsB/image/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area u-flex u-row-center">
				<u-image :shape="shape" ref="uImage" :width="width" :height="height" :src="src" mode="aspectFill">
					<u-loading size="44" mode="flower" slot="loading" v-if="loadingSlot"></u-loading>
					<view v-if="errorSlot" slot="error" style="font-size: 24rpx;">加载失败</view>
				</u-image>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">参数配置</view>
			<view class="u-config-item">
				<view class="u-item-title">状态</view>
				<u-subsection :current="statusCurrent" :list="['加载成功', '加载中', '加载失败']" @change="statusChange"></u-subsection>
			</view>
			<!-- 微信小程序中,无法动态切换slot,所以隐藏此部分的演示 -->
			<!-- #ifndef MP-WEIXIN -->
			<view class="u-config-item">
				<view class="u-item-title">加载中状态</view>
				<u-subsection :list="['默认', '自定义']" @change="loadingChange"></u-subsection>
			</view>
			<!-- #endif -->
			<view class="u-config-item">
				<view class="u-item-title">加载失败状态</view>
				<u-subsection :list="['默认', '自定义']" @change="errorChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">形状</view>
				<u-subsection :list="['方形', '圆形']" @change="shapeChange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
export default {
	data() {
		return {
			src: 'https://cdn.uviewui.com/uview/example/fade.jpg',
			width: '200',
			height: '200',
			loadingSlot: false,
			statusCurrent: 0,
			errorSlot: false,
			shape: 'square'
		};
	},
	computed: {
		// statusCurrent() {
		// }
	},
	methods: {
		statusChange(index) {
			// 此处通过ref操作组件内部状态,仅是为了演示使用,实际中无需这些操作,由内部的图片加载事件自动完成
			if (index == 0) {
				this.src = 'http://img5.imgtn.bdimg.com/it/u=2438062088,2808868405&fm=26&gp=0.jpg';
				this.$refs.uImage.loading = false;
				this.$refs.uImage.isError = false;
			} else if (index == 1) {
				this.$refs.uImage.loading = true;
			} else {
				this.$refs.uImage.loading = false;
				this.$refs.uImage.isError = true;
			}
		},
		loadingChange(index) {
			this.statusCurrent = 1;
			this.statusChange(1);
			if (index == 0) {
				this.loadingSlot = false;
			} else {
				this.loadingSlot = true;
			}
		},
		errorChange(index) {
			this.statusCurrent = 2;
			this.statusChange(2);
			if (index == 0) {
				this.errorSlot = false;
			} else {
				this.errorSlot = true;
			}
		},
		shapeChange(index) {
			this.shape = index == 0 ? 'square' : 'circle';
		}
	}
};
</script>

<style scoped lang="scss">
.u-demo-area {
}
</style>


================================================
FILE: pages/componentsB/line/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area u-flex u-row-center">
				<!-- 头条小程序因为兼容性,必须要给组件写上u-line类 -->
				<u-line class="u-line" :border-style="borderStyle" color="red" :color="color" :length="length" :direction="direction" :hair-line="hairLine"></u-line>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">
				参数配置
			</view>
			<view class="u-config-item">
				<view class="u-item-title">颜色</view>
				<u-subsection :list="['primary', 'success', 'warning', 'error', 'info']" @change="colorChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">线条类型</view>
				<u-subsection :list="['实线', '方形虚线', '圆点虚线']" @change="borderStyleChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">细边</view>
				<u-subsection :list="['是', '否']" @change="hairLineChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">方向</view>
				<u-subsection :list="['水平', '垂直']" @change="directionChange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				direction: 'row',
				hairLine: true,
				length: '100%',
				color: this.$u.color['primary'],
				borderStyle: 'solid'
			}
		},
		methods: {
			colorChange(index) {
				this.color = this.$u.color[['primary', 'success', 'warning', 'error', 'info'][index]];
			},
			hairLineChange(index) {
				this.hairLine = !index;
			},
			directionChange(index) {
				this.direction = index == 0 ? 'row' : 'col';
				if(index == 0) this.length = '100%';
				else this.length = '50rpx';
			},
			borderStyleChange(index) {
				this.borderStyle = ['solid', 'dashed', 'dotted'][index];
			}
		}
	}
</script>

<style scoped lang="scss">
	.u-demo-area {
		
	}
</style>


================================================
FILE: pages/componentsB/loading/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<u-loading :mode="mode" :show="show" :color="color" :size="size"></u-loading>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">
				参数配置
			</view>
			<view class="u-config-item">
				<view class="u-item-title">模式</view>
				<u-subsection :list="['圆圈', '花朵']" @change="modeChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">颜色(只对圆圈模式有效)</view>
				<u-subsection :list="['default', 'primary', 'error', 'warning', 'success']" @change="colorChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">尺寸(单位rpx)</view>
				<u-subsection current="1" :list="['28', '34', '40']" @change="sizeChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">是否显示</view>
				<u-subsection current="1" :list="['否', '是']" @change="showChange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				mode: 'circle',
				color: '#c7c7c7',
				size: '34', 
				show: true
			}
		},
		methods: {
			modeChange(index) {
				this.mode = index == 0 ? 'circle' : 'flower';
			},
			colorChange(index) {
				if(index == 0) {
					this.color = '#c7c7c7';
				} else {
					let color = index == 1 ? 'primary' : index == 2 ? 'error' : index == 3 ? 'warning' : 'success';
					this.color = this.$u.color[color];
				}
			},
			sizeChange(index) {
				this.size = index == 0 ? '28' : index == 1 ? '34' : '40';
			},
			showChange(index) {
				// 两个!!可以把0变成false,1变成true
				this.show = !!index;
			},
			// 选中某个复选框时,由checkbox时触发
			checkboxChange(e) {
				//console.log(e);
			},
			// 选中任一checkbox时,由checkbox-group触发
			checkboxGroupChange(e) {
				this.result = e;
				// console.log(this.result);
			}
		}
	}
</script>

<style scoped lang="scss">
	.u-demo {}
</style>


================================================
FILE: pages/componentsB/noticeBar/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<u-toast :type="type" ref="uToast"></u-toast>
				<u-notice-bar :autoplay="autoplay" :playState="playState" :speed="speed" @getMore="getMore" 
				:mode="mode" @end="end" @close="close" @click="click" :show="show" :type="type" :list="list"
				:moreIcon="moreIcon" :volumeIcon="volumeIcon" :duration="duration" :isCircular="isCircular"></u-notice-bar>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">
				参数配置
			</view>
			<view class="u-config-item">
				<view class="u-item-title">主题</view>
				<u-subsection :current="3" :list="['primary', 'success', 'error', 'warning', 'none']" @change="typeChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">滚动模式</view>
				<u-subsection :current="current" :list="['水平', '垂直']" @change="modeChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">是否衔接(水平模式有效)</view>
				<u-subsection :list="['是', '否']" @change="isCircularChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">状态</view>
				<u-subsection :list="['播放', '暂停']" @change="playStateChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">速度</view>
				<u-subsection :current="1" :list="['慢', '正常', '快']" @change="speedChange"></u-subsection>
			</view>
			<view class="u-config-item">
				<view class="u-item-title">图标</view>
				<u-subsection :list="['显示', '隐藏']" @change="iconChange"></u-subsection>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				show: true,
				autoplay: false,
				type: 'warning',
				list: [
					'锦瑟无端五十弦,一弦一柱思华年',
					'庄生晓梦迷蝴蝶,望帝春心托杜鹃',
					'沧海月明珠有泪,蓝田日暖玉生烟'
				],
				mode: 'horizontal',
				playState: 'play',
				speed: 160,
				duration: 2000,
				moreIcon: true,
				volumeIcon: true,
				isCircular: true,
				current: 0
			}
		},
		onLoad() {
			
		},
		methods: {
			typeChange(index) {
				let type = ['primary', 'success', 'error', 'warning', 'none'];
				this.type = type[index];
			},
			modeChange(index) {
				this.current = index;
				this.mode = index == 0 ? 'horizontal' : 'vertical';
			},
			playStateChange(index) {
				this.playState = index == 0 ? 'play' : 'paused';
			},
			speedChange(index) {
				if(index == 0) {
					this.$nextTick(() => {
						this.speed = 50;
						this.duration = 6000;
					})
				} else if(index == 1) {
					this.$nextTick(() => {
						this.speed = 160;
						this.duration = 2000;
					})
				} else {
					this.$nextTick(() => {
						this.speed = 350;
						this.duration = 400;
					})
				}
			},
			iconChange(index) {
				if(index == 0) {
					this.moreIcon = true;
					this.volumeIcon = true;
				} else {
					this.moreIcon = false;
					this.volumeIcon = false;
				}
			},
			isCircularChange(index) {
				this.isCircular = index == 0 ? true : false;
				this.current = 0;
				this.mode = 'horizontal';
			},
			close() {
				this.toast(`点击了关闭图标`);
			},
			click(index) {
				if(this.mode == 'horizontal' && this.isCircular) {
					this.toast('此模式无法获取Index值');
				} else {
					this.toast(`点击了第${index + 1}条消息`);
				}
				
			},
			getMore() {
				this.toast(`点击了更多图标`);
			},
			toast(title) {
				this.$refs.uToast.show({
					title: title,
					type: 'warning'
				})
			},
			end() {
				// console.log('end');
			}
		}
	}
</script>

<style lang="scss" scoped>
	.item {
		margin-top: 30px;
	}
</style>


================================================
FILE: pages/componentsB/picker/index.vue
================================================
<template>
	<view class="u-demo">
		<view class="u-demo-wrap">
			<view class="u-demo-title">演示效果</view>
			<view class="u-demo-area">
				<view class="u-demo-result-line">{{ input ? input : 'Picker值' }}</view>
				<u-picker
					:mode="mode"
					:defaultTime="defaultTime"
					v-model="show"
					:defaultRegion="defaultRegion"
					:params="params"
					end-year="2030"
					@confirm="confirm"
					:defaultSelector="defaultSelector"
					:range="range"
					:range-key="rangKey"
					@columnchange="columnchange"
				></u-picker>
			</view>
		</view>
		<view class="u-config-wrap">
			<view class="u-config-title u-border-bottom">参数
Download .txt
gitextract_471h43ez/

├── .editorconfig
├── .eslintignore
├── .gitee/
│   └── ISSUE_TEMPLATE.zh-CN.md
├── .github/
│   └── ISSUE_TEMPLATE/
│       └── config.yml
├── .gitignore
├── .vscode/
│   └── settings.json
├── App.vue
├── LICENSE
├── README.md
├── common/
│   ├── classify.data.js
│   ├── demo.scss
│   ├── http.api.js
│   ├── http.interceptor.js
│   ├── index.list.js
│   └── locales/
│       ├── en.js
│       └── zh.js
├── components/
│   └── page-nav/
│       └── page-nav.vue
├── main.js
├── manifest.json
├── package.json
├── pages/
│   ├── componentsA/
│   │   ├── avatar/
│   │   │   └── index.vue
│   │   ├── avatarCropper/
│   │   │   └── index.vue
│   │   ├── backTop/
│   │   │   └── index.vue
│   │   ├── calendar/
│   │   │   └── index.vue
│   │   ├── empty/
│   │   │   └── index.vue
│   │   ├── field/
│   │   │   └── index.vue
│   │   ├── form/
│   │   │   └── index.vue
│   │   ├── fullScreen/
│   │   │   └── index.vue
│   │   ├── icon/
│   │   │   └── index.vue
│   │   ├── indexList/
│   │   │   └── index.vue
│   │   ├── keyboard/
│   │   │   └── index.vue
│   │   ├── lazyLoad/
│   │   │   └── index.vue
│   │   ├── modal/
│   │   │   └── index.vue
│   │   ├── navbar/
│   │   │   └── index.vue
│   │   ├── noNetwork/
│   │   │   └── index.vue
│   │   ├── parse/
│   │   │   └── index.vue
│   │   ├── select/
│   │   │   └── index.vue
│   │   ├── slider/
│   │   │   └── index.vue
│   │   ├── tabs/
│   │   │   └── index.vue
│   │   ├── tag/
│   │   │   └── index.vue
│   │   ├── test/
│   │   │   └── index.vue
│   │   ├── timeLine/
│   │   │   └── index.vue
│   │   ├── toast/
│   │   │   └── index.vue
│   │   ├── topTips/
│   │   │   └── index.vue
│   │   └── verificationCode/
│   │       └── index.vue
│   ├── componentsB/
│   │   ├── card/
│   │   │   └── index.vue
│   │   ├── checkbox/
│   │   │   └── index.vue
│   │   ├── divider/
│   │   │   └── index.vue
│   │   ├── dropdown/
│   │   │   └── index.vue
│   │   ├── image/
│   │   │   └── index.vue
│   │   ├── line/
│   │   │   └── index.vue
│   │   ├── loading/
│   │   │   └── index.vue
│   │   ├── noticeBar/
│   │   │   └── index.vue
│   │   ├── picker/
│   │   │   └── index.vue
│   │   ├── radio/
│   │   │   └── index.vue
│   │   ├── rate/
│   │   │   └── index.vue
│   │   ├── readMore/
│   │   │   └── index.vue
│   │   ├── search/
│   │   │   └── index.vue
│   │   ├── skeleton/
│   │   │   └── index.vue
│   │   ├── steps/
│   │   │   └── index.vue
│   │   ├── sticky/
│   │   │   └── index.vue
│   │   ├── swipeAction/
│   │   │   └── index.vue
│   │   ├── swiper/
│   │   │   └── index.vue
│   │   ├── switch/
│   │   │   └── index.vue
│   │   ├── tabbar/
│   │   │   └── index.vue
│   │   ├── table/
│   │   │   └── index.vue
│   │   ├── upload/
│   │   │   └── index.vue
│   │   └── waterfall/
│   │       └── index.vue
│   ├── componentsC/
│   │   ├── actionSheet/
│   │   │   └── index.vue
│   │   ├── alertTips/
│   │   │   └── index.vue
│   │   ├── badge/
│   │   │   └── index.vue
│   │   ├── button/
│   │   │   └── index.vue
│   │   ├── cell/
│   │   │   └── index.vue
│   │   ├── circleProgress/
│   │   │   └── index.vue
│   │   ├── collapse/
│   │   │   └── index.vue
│   │   ├── color/
│   │   │   └── index.vue
│   │   ├── countDown/
│   │   │   └── index.vue
│   │   ├── countTo/
│   │   │   └── index.vue
│   │   ├── gap/
│   │   │   └── index.vue
│   │   ├── grid/
│   │   │   └── index.vue
│   │   ├── layout/
│   │   │   └── index.vue
│   │   ├── link/
│   │   │   └── index.vue
│   │   ├── loadmore/
│   │   │   └── index.vue
│   │   ├── mask/
│   │   │   └── index.vue
│   │   ├── messageInput/
│   │   │   └── index.vue
│   │   ├── numberBox/
│   │   │   └── index.vue
│   │   ├── popup/
│   │   │   └── index.vue
│   │   ├── progress/
│   │   │   └── index.vue
│   │   ├── section/
│   │   │   └── index.vue
│   │   ├── subsection/
│   │   │   └── index.vue
│   │   └── test/
│   │       └── index.vue
│   ├── example/
│   │   ├── components.config.js
│   │   ├── components.vue
│   │   ├── js.config.js
│   │   ├── js.vue
│   │   ├── template.config.js
│   │   └── template.vue
│   ├── library/
│   │   ├── color/
│   │   │   └── index.vue
│   │   ├── colorSwitch/
│   │   │   └── index.vue
│   │   ├── debounce/
│   │   │   └── index.vue
│   │   ├── deepClone/
│   │   │   └── index.vue
│   │   ├── deepMerge/
│   │   │   └── index.vue
│   │   ├── getRect/
│   │   │   └── index.vue
│   │   ├── globalVariable/
│   │   │   ├── globalData.vue
│   │   │   ├── index.vue
│   │   │   ├── prototype.vue
│   │   │   └── vuex.vue
│   │   ├── guid/
│   │   │   └── index.vue
│   │   ├── http/
│   │   │   └── index.vue
│   │   ├── md5/
│   │   │   └── index.vue
│   │   ├── mpShare/
│   │   │   └── index.vue
│   │   ├── queryParams/
│   │   │   └── index.vue
│   │   ├── random/
│   │   │   └── index.vue
│   │   ├── randomArray/
│   │   │   └── index.vue
│   │   ├── route/
│   │   │   ├── index.vue
│   │   │   └── routeTo.vue
│   │   ├── test/
│   │   │   └── index.vue
│   │   ├── timeFormat/
│   │   │   └── index.vue
│   │   ├── timeFrom/
│   │   │   └── index.vue
│   │   └── trim/
│   │       └── index.vue
│   └── template/
│       ├── address/
│       │   ├── addSite.vue
│       │   └── index.vue
│       ├── citySelect/
│       │   ├── index.vue
│       │   └── u-city-select.vue
│       ├── comment/
│       │   ├── index.vue
│       │   └── reply.vue
│       ├── coupon/
│       │   └── index.vue
│       ├── douyin/
│       │   └── index.nvue
│       ├── keyboardPay/
│       │   └── index.vue
│       ├── login/
│       │   ├── code.vue
│       │   └── index.vue
│       ├── mallMenu/
│       │   ├── index1.vue
│       │   └── index2.vue
│       ├── order/
│       │   └── index.vue
│       ├── submitBar/
│       │   └── index.vue
│       └── wxCenter/
│           └── index.vue
├── pages.json
├── static/
│   └── common/
│       └── js/
│           └── touch-emulator.js
├── store/
│   ├── $u.mixin.js
│   └── index.js
├── template.h5.html
├── uni.scss
├── uview-ui/
│   ├── LICENSE
│   ├── README.md
│   ├── components/
│   │   ├── u-action-sheet/
│   │   │   └── u-action-sheet.vue
│   │   ├── u-alert-tips/
│   │   │   └── u-alert-tips.vue
│   │   ├── u-avatar/
│   │   │   └── u-avatar.vue
│   │   ├── u-avatar-cropper/
│   │   │   ├── u-avatar-cropper.vue
│   │   │   └── weCropper.js
│   │   ├── u-back-top/
│   │   │   └── u-back-top.vue
│   │   ├── u-badge/
│   │   │   └── u-badge.vue
│   │   ├── u-button/
│   │   │   └── u-button.vue
│   │   ├── u-calendar/
│   │   │   └── u-calendar.vue
│   │   ├── u-car-keyboard/
│   │   │   └── u-car-keyboard.vue
│   │   ├── u-card/
│   │   │   └── u-card.vue
│   │   ├── u-cell-group/
│   │   │   └── u-cell-group.vue
│   │   ├── u-cell-item/
│   │   │   └── u-cell-item.vue
│   │   ├── u-checkbox/
│   │   │   └── u-checkbox.vue
│   │   ├── u-checkbox-group/
│   │   │   └── u-checkbox-group.vue
│   │   ├── u-circle-progress/
│   │   │   ├── u-circle-progress.vue
│   │   │   └── u-line-progress/
│   │   │       └── u-line-progress.vue
│   │   ├── u-col/
│   │   │   └── u-col.vue
│   │   ├── u-collapse/
│   │   │   └── u-collapse.vue
│   │   ├── u-collapse-item/
│   │   │   └── u-collapse-item.vue
│   │   ├── u-column-notice/
│   │   │   └── u-column-notice.vue
│   │   ├── u-count-down/
│   │   │   └── u-count-down.vue
│   │   ├── u-count-to/
│   │   │   └── u-count-to.vue
│   │   ├── u-divider/
│   │   │   └── u-divider.vue
│   │   ├── u-dropdown/
│   │   │   └── u-dropdown.vue
│   │   ├── u-dropdown-item/
│   │   │   └── u-dropdown-item.vue
│   │   ├── u-empty/
│   │   │   └── u-empty.vue
│   │   ├── u-field/
│   │   │   └── u-field.vue
│   │   ├── u-form/
│   │   │   └── u-form.vue
│   │   ├── u-form-item/
│   │   │   └── u-form-item.vue
│   │   ├── u-full-screen/
│   │   │   └── u-full-screen.vue
│   │   ├── u-gap/
│   │   │   └── u-gap.vue
│   │   ├── u-grid/
│   │   │   └── u-grid.vue
│   │   ├── u-grid-item/
│   │   │   └── u-grid-item.vue
│   │   ├── u-icon/
│   │   │   └── u-icon.vue
│   │   ├── u-image/
│   │   │   └── u-image.vue
│   │   ├── u-index-anchor/
│   │   │   └── u-index-anchor.vue
│   │   ├── u-index-list/
│   │   │   └── u-index-list.vue
│   │   ├── u-input/
│   │   │   └── u-input.vue
│   │   ├── u-keyboard/
│   │   │   └── u-keyboard.vue
│   │   ├── u-lazy-load/
│   │   │   └── u-lazy-load.vue
│   │   ├── u-line/
│   │   │   └── u-line.vue
│   │   ├── u-line-progress/
│   │   │   └── u-line-progress.vue
│   │   ├── u-link/
│   │   │   └── u-link.vue
│   │   ├── u-loading/
│   │   │   └── u-loading.vue
│   │   ├── u-loading-page/
│   │   │   └── u-loading-page.vue
│   │   ├── u-loadmore/
│   │   │   └── u-loadmore.vue
│   │   ├── u-mask/
│   │   │   └── u-mask.vue
│   │   ├── u-message-input/
│   │   │   └── u-message-input.vue
│   │   ├── u-modal/
│   │   │   └── u-modal.vue
│   │   ├── u-navbar/
│   │   │   └── u-navbar.vue
│   │   ├── u-no-network/
│   │   │   └── u-no-network.vue
│   │   ├── u-notice-bar/
│   │   │   └── u-notice-bar.vue
│   │   ├── u-number-box/
│   │   │   └── u-number-box.vue
│   │   ├── u-number-keyboard/
│   │   │   └── u-number-keyboard.vue
│   │   ├── u-parse/
│   │   │   ├── libs/
│   │   │   │   ├── CssHandler.js
│   │   │   │   ├── MpHtmlParser.js
│   │   │   │   ├── config.js
│   │   │   │   ├── handler.wxs
│   │   │   │   └── trees.vue
│   │   │   └── u-parse.vue
│   │   ├── u-picker/
│   │   │   └── u-picker.vue
│   │   ├── u-popup/
│   │   │   └── u-popup.vue
│   │   ├── u-radio/
│   │   │   └── u-radio.vue
│   │   ├── u-radio-group/
│   │   │   └── u-radio-group.vue
│   │   ├── u-rate/
│   │   │   └── u-rate.vue
│   │   ├── u-read-more/
│   │   │   └── u-read-more.vue
│   │   ├── u-row/
│   │   │   └── u-row.vue
│   │   ├── u-row-notice/
│   │   │   └── u-row-notice.vue
│   │   ├── u-search/
│   │   │   └── u-search.vue
│   │   ├── u-section/
│   │   │   └── u-section.vue
│   │   ├── u-select/
│   │   │   └── u-select.vue
│   │   ├── u-skeleton/
│   │   │   └── u-skeleton.vue
│   │   ├── u-slider/
│   │   │   └── u-slider.vue
│   │   ├── u-steps/
│   │   │   └── u-steps.vue
│   │   ├── u-sticky/
│   │   │   └── u-sticky.vue
│   │   ├── u-subsection/
│   │   │   └── u-subsection.vue
│   │   ├── u-swipe-action/
│   │   │   └── u-swipe-action.vue
│   │   ├── u-swiper/
│   │   │   └── u-swiper.vue
│   │   ├── u-switch/
│   │   │   └── u-switch.vue
│   │   ├── u-tabbar/
│   │   │   └── u-tabbar.vue
│   │   ├── u-table/
│   │   │   └── u-table.vue
│   │   ├── u-tabs/
│   │   │   └── u-tabs.vue
│   │   ├── u-tabs-swiper/
│   │   │   └── u-tabs-swiper.vue
│   │   ├── u-tag/
│   │   │   └── u-tag.vue
│   │   ├── u-td/
│   │   │   └── u-td.vue
│   │   ├── u-th/
│   │   │   └── u-th.vue
│   │   ├── u-time-line/
│   │   │   └── u-time-line.vue
│   │   ├── u-time-line-item/
│   │   │   └── u-time-line-item.vue
│   │   ├── u-toast/
│   │   │   └── u-toast.vue
│   │   ├── u-top-tips/
│   │   │   └── u-top-tips.vue
│   │   ├── u-tr/
│   │   │   └── u-tr.vue
│   │   ├── u-upload/
│   │   │   └── u-upload.vue
│   │   ├── u-verification-code/
│   │   │   └── u-verification-code.vue
│   │   ├── u-waterfall/
│   │   │   └── u-waterfall.vue
│   │   └── uview-v1/
│   │       └── uview-v1.vue
│   ├── iconfont.css
│   ├── index.js
│   ├── index.scss
│   ├── libs/
│   │   ├── config/
│   │   │   ├── config.js
│   │   │   └── zIndex.js
│   │   ├── css/
│   │   │   ├── color.scss
│   │   │   ├── common.scss
│   │   │   ├── style.components.scss
│   │   │   ├── style.h5.scss
│   │   │   ├── style.mp.scss
│   │   │   ├── style.nvue.scss
│   │   │   └── style.vue.scss
│   │   ├── function/
│   │   │   ├── $parent.js
│   │   │   ├── addUnit.js
│   │   │   ├── bem.js
│   │   │   ├── color.js
│   │   │   ├── colorGradient.js
│   │   │   ├── debounce.js
│   │   │   ├── deepClone.js
│   │   │   ├── deepMerge.js
│   │   │   ├── getParent.js
│   │   │   ├── guid.js
│   │   │   ├── md5.js
│   │   │   ├── queryParams.js
│   │   │   ├── random.js
│   │   │   ├── randomArray.js
│   │   │   ├── route.js
│   │   │   ├── sys.js
│   │   │   ├── test.js
│   │   │   ├── throttle.js
│   │   │   ├── timeFormat.js
│   │   │   ├── timeFrom.js
│   │   │   ├── toast.js
│   │   │   ├── trim.js
│   │   │   └── type2icon.js
│   │   ├── mixin/
│   │   │   ├── mixin.js
│   │   │   └── mpShare.js
│   │   ├── request/
│   │   │   └── index.js
│   │   ├── store/
│   │   │   └── index.js
│   │   └── util/
│   │       ├── area.js
│   │       ├── async-validator.js
│   │       ├── city.js
│   │       ├── emitter.js
│   │       └── province.js
│   ├── package.json
│   └── theme.scss
└── vue.config.js
Download .txt
SYMBOL INDEX (169 symbols across 36 files)

FILE: static/common/js/touch-emulator.js
  function Touch (line 50) | function Touch(target, identifier, pos, deltaX, deltaY) {
  function TouchList (line 69) | function TouchList() {
  function fakeTouchSupport (line 89) | function fakeTouchSupport() {
  function hasTouchSupport (line 106) | function hasTouchSupport() {
  function preventMouseEvents (line 116) | function preventMouseEvents(ev) {
  function onMouse (line 127) | function onMouse(touchType) {
  function triggerTouch (line 179) | function triggerTouch(eventName, mouseEv) {
  function createTouchList (line 200) | function createTouchList(mouseEv) {
  function getActiveTouches (line 222) | function getActiveTouches(mouseEv, eventName) {
  function getChangedTouches (line 241) | function getChangedTouches(mouseEv, eventName) {
  function showTouches (line 260) | function showTouches(ev) {
  function TouchEmulator (line 294) | function TouchEmulator() {

FILE: store/$u.mixin.js
  method beforeCreate (line 13) | beforeCreate() {

FILE: store/index.js
  method $uStore (line 62) | $uStore(state, payload) {

FILE: uview-ui/components/u-avatar-cropper/weCropper.js
  function firstLetterUpper (line 16) | function firstLetterUpper(str) {
  function setTouchState (line 20) | function setTouchState(instance) {
  function validator (line 32) | function validator(instance, o) {
  function getDevice (line 36) | function getDevice() {
  function prepare (line 200) | function prepare() {
  function createCommonjsModule (line 247) | function createCommonjsModule(fn, module) {
  function observer (line 337) | function observer() {
  function wxPromise (line 354) | function wxPromise(fn) {
  function draw (line 373) | function draw(ctx, reserve) {
  function makeURI (line 552) | function makeURI(strData, type) {
  function fixType (line 556) | function fixType(type) {
  function encodeData (line 562) | function encodeData(data) {
  function getImageData (line 583) | function getImageData(canvasId, x, y, width, height, done) {
  function genBitmapImage (line 605) | function genBitmapImage(oData) {
  function convertToImage (line 719) | function convertToImage(canvasId, x, y, width, height, type, done) {
  function methods (line 760) | function methods() {
  function update (line 952) | function update() {
  function cut (line 1082) | function cut() {

FILE: uview-ui/components/u-parse/libs/CssHandler.js
  function CssHandler (line 4) | function CssHandler(tagStyle) {
  function parser (line 27) | function parser(data, init) {

FILE: uview-ui/components/u-parse/libs/MpHtmlParser.js
  function MpHtmlParser (line 14) | function MpHtmlParser(data, options = {}) {

FILE: uview-ui/components/u-parse/libs/config.js
  function makeMap (line 58) | function makeMap(str) {

FILE: uview-ui/index.js
  function wranning (line 8) | function wranning(str) {

FILE: uview-ui/libs/function/$parent.js
  function $parent (line 5) | function $parent(name = undefined) {

FILE: uview-ui/libs/function/addUnit.js
  function addUnit (line 4) | function addUnit(value = 'auto', unit = 'rpx') {

FILE: uview-ui/libs/function/bem.js
  function bem (line 1) | function bem(name, conf) {

FILE: uview-ui/libs/function/colorGradient.js
  function colorGradient (line 7) | function colorGradient(startColor = 'rgb(0, 0, 0)', endColor = 'rgb(255,...
  function hexToRgb (line 32) | function hexToRgb(sColor, str = true) {
  function rgbToHex (line 62) | function rgbToHex(rgb) {
  function colorToRgba (line 102) | function colorToRgba(color, alpha = 0.3) {

FILE: uview-ui/libs/function/debounce.js
  function debounce (line 11) | function debounce(func, wait = 500, immediate = false) {

FILE: uview-ui/libs/function/deepClone.js
  function isArray (line 2) | function isArray(arr) {
  function deepClone (line 7) | function deepClone(obj, cache = new WeakMap()) {

FILE: uview-ui/libs/function/deepMerge.js
  function deepMerge (line 4) | function deepMerge(target = {}, source = {}) {

FILE: uview-ui/libs/function/getParent.js
  function getParent (line 3) | function getParent(name, keys) {

FILE: uview-ui/libs/function/guid.js
  function guid (line 11) | function guid(len = 32, firstU = true, radix = null) {

FILE: uview-ui/libs/function/md5.js
  function hex_md5 (line 21) | function hex_md5(s)    { return rstr2hex(rstr_md5(str2rstr_utf8(s))); }
  function b64_md5 (line 22) | function b64_md5(s)    { return rstr2b64(rstr_md5(str2rstr_utf8(s))); }
  function any_md5 (line 23) | function any_md5(s, e) { return rstr2any(rstr_md5(str2rstr_utf8(s)), e); }
  function hex_hmac_md5 (line 24) | function hex_hmac_md5(k, d)
  function b64_hmac_md5 (line 26) | function b64_hmac_md5(k, d)
  function any_hmac_md5 (line 28) | function any_hmac_md5(k, d, e)
  function md5_vm_test (line 34) | function md5_vm_test()
  function rstr_md5 (line 42) | function rstr_md5(s)
  function rstr_hmac_md5 (line 50) | function rstr_hmac_md5(key, data)
  function rstr2hex (line 69) | function rstr2hex(input)
  function rstr2b64 (line 87) | function rstr2b64(input)
  function rstr2any (line 110) | function rstr2any(input, encoding)
  function str2rstr_utf8 (line 159) | function str2rstr_utf8(input)
  function str2rstr_utf16le (line 198) | function str2rstr_utf16le(input)
  function str2rstr_utf16be (line 207) | function str2rstr_utf16be(input)
  function rstr2binl (line 220) | function rstr2binl(input)
  function binl2rstr (line 233) | function binl2rstr(input)
  function binl_md5 (line 244) | function binl_md5(x, len)
  function md5_cmn (line 341) | function md5_cmn(q, a, b, x, s, t)
  function md5_ff (line 345) | function md5_ff(a, b, c, d, x, s, t)
  function md5_gg (line 349) | function md5_gg(a, b, c, d, x, s, t)
  function md5_hh (line 353) | function md5_hh(a, b, c, d, x, s, t)
  function md5_ii (line 357) | function md5_ii(a, b, c, d, x, s, t)
  function safe_add (line 366) | function safe_add(x, y)
  function bit_rol (line 376) | function bit_rol(num, cnt)

FILE: uview-ui/libs/function/queryParams.js
  function queryParams (line 6) | function queryParams(data = {}, isPrefix = true, arrayFormat = 'brackets...

FILE: uview-ui/libs/function/random.js
  function random (line 1) | function random(min, max) {

FILE: uview-ui/libs/function/randomArray.js
  function randomArray (line 2) | function randomArray(array = []) {

FILE: uview-ui/libs/function/route.js
  class Router (line 6) | class Router {
    method constructor (line 7) | constructor() {
    method addRootPath (line 24) | addRootPath(url) {
    method mixinParam (line 29) | mixinParam(url, params) {
    method route (line 48) | async route(options = {}, params = {}) {
    method openPage (line 83) | openPage(config) {

FILE: uview-ui/libs/function/sys.js
  function os (line 1) | function os() {
  function sys (line 5) | function sys() {

FILE: uview-ui/libs/function/test.js
  function email (line 4) | function email(value) {
  function mobile (line 11) | function mobile(value) {
  function url (line 18) | function url(value) {
  function date (line 25) | function date(value) {
  function dateISO (line 32) | function dateISO(value) {
  function number (line 39) | function number(value) {
  function digits (line 46) | function digits(value) {
  function idCard (line 53) | function idCard(value) {
  function carNo (line 61) | function carNo(value) {
  function amount (line 78) | function amount(value) {
  function chinese (line 86) | function chinese(value) {
  function letter (line 94) | function letter(value) {
  function enOrNum (line 101) | function enOrNum(value) {
  function contains (line 110) | function contains(value, param) {
  function range (line 117) | function range(value, param) {
  function rangeLength (line 124) | function rangeLength(value, param) {
  function landline (line 131) | function landline(value) {
  function empty (line 139) | function empty(value) {
  function jsonString (line 165) | function jsonString(value) {
  function array (line 185) | function array(value) {
  function object (line 196) | function object(value) {
  function code (line 203) | function code(value, len = 6) {

FILE: uview-ui/libs/function/throttle.js
  function throttle (line 10) | function throttle(func, wait = 500, immediate = true) {

FILE: uview-ui/libs/function/timeFormat.js
  function timeFormat (line 26) | function timeFormat(dateTime = null, fmt = 'yyyy-mm-dd') {

FILE: uview-ui/libs/function/timeFrom.js
  function timeFrom (line 9) | function timeFrom(dateTime = null, format = 'yyyy-mm-dd') {

FILE: uview-ui/libs/function/toast.js
  function toast (line 1) | function toast(title, duration = 1500) {

FILE: uview-ui/libs/function/trim.js
  function trim (line 1) | function trim(str, pos = 'both') {

FILE: uview-ui/libs/function/type2icon.js
  function type2icon (line 6) | function type2icon(type = 'success', fill = false) {

FILE: uview-ui/libs/mixin/mixin.js
  method data (line 2) | data() {
  method onLoad (line 5) | onLoad() {
  method $uGetRect (line 13) | $uGetRect(selector, all) {
  method getParentData (line 28) | getParentData(parentName = '') {
  method preventEvent (line 43) | preventEvent(e) {
  method onReachBottom (line 47) | onReachBottom() {
  method beforeDestroy (line 50) | beforeDestroy() {

FILE: uview-ui/libs/mixin/mpShare.js
  method onLoad (line 2) | onLoad() {
  method onShareAppMessage (line 10) | onShareAppMessage() {
  method onShareTimeline (line 14) | onShareTimeline() {

FILE: uview-ui/libs/request/index.js
  class Request (line 3) | class Request {
    method setConfig (line 5) | setConfig(customConfig) {
    method request (line 11) | request(options = {}) {
    method constructor (line 102) | constructor() {

FILE: uview-ui/libs/store/index.js
  method $uStore (line 4) | $uStore({rootState}, params) {

FILE: uview-ui/libs/util/async-validator.js
  function _extends (line 1) | function _extends() {
  function convertFieldsError (line 36) | function convertFieldsError(errors) {
  function format (line 47) | function format() {
  function isNativeStringType (line 101) | function isNativeStringType(type) {
  function isEmptyValue (line 105) | function isEmptyValue(value, type) {
  function asyncParallelArray (line 121) | function asyncParallelArray(arr, func, callback) {
  function asyncSerialArray (line 140) | function asyncSerialArray(arr, func, callback) {
  function flattenObjArr (line 163) | function flattenObjArr(objArr) {
  function asyncMap (line 171) | function asyncMap(objArr, option, func, callback) {
  function complementError (line 238) | function complementError(rule) {
  function deepMerge (line 252) | function deepMerge(target, source) {
  function required (line 282) | function required(rule, value, source, errors, options, type) {
  function whitespace (line 300) | function whitespace(rule, value, source, errors, options) {
  function type (line 377) | function type(rule, value, source, errors, options) {
  function range (line 408) | function range(rule, value, source, errors, options) {
  function enumerable (line 470) | function enumerable(rule, value, source, errors, options) {
  function pattern$1 (line 490) | function pattern$1(rule, value, source, errors, options) {
  function string (line 531) | function string(rule, value, callback, source, options) {
  function method (line 567) | function method(rule, value, callback, source, options) {
  function number (line 597) | function number(rule, value, callback, source, options) {
  function _boolean (line 632) | function _boolean(rule, value, callback, source, options) {
  function regexp (line 662) | function regexp(rule, value, callback, source, options) {
  function integer (line 692) | function integer(rule, value, callback, source, options) {
  function floatFn (line 723) | function floatFn(rule, value, callback, source, options) {
  function array (line 754) | function array(rule, value, callback, source, options) {
  function object (line 785) | function object(rule, value, callback, source, options) {
  function enumerable$1 (line 816) | function enumerable$1(rule, value, callback, source, options) {
  function pattern$2 (line 849) | function pattern$2(rule, value, callback, source, options) {
  function date (line 868) | function date(rule, value, callback, source, options) {
  function required$1 (line 899) | function required$1(rule, value, callback, source, options) {
  function type$1 (line 906) | function type$1(rule, value, callback, source, options) {
  function any (line 937) | function any(rule, value, callback, source, options) {
  function newMessages (line 972) | function newMessages() {
  function Schema (line 1035) | function Schema(descriptor) {
  function complete (line 1097) | function complete(results) {
  function addFullfield (line 1191) | function addFullfield(key, schema) {
  function cb (line 1197) | function cb(e) {

FILE: uview-ui/libs/util/emitter.js
  function broadcast (line 7) | function broadcast(componentName, eventName, params) {
  method dispatch (line 25) | dispatch(componentName, eventName, params) {
  method broadcast (line 47) | broadcast(componentName, eventName, params) {
Condensed preview — 287 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,572K chars).
[
  {
    "path": ".editorconfig",
    "chars": 107,
    "preview": "[*]\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",
    "chars": 32,
    "preview": "unpackage\nnode_modules\nuview-ui\n"
  },
  {
    "path": ".gitee/ISSUE_TEMPLATE.zh-CN.md",
    "chars": 87,
    "preview": "你好,请使用下面的链接创建 issue 以帮助我们更快的排查问题,不规范的 issue 会被关闭,感谢配合。\n\nhttps://new-issue.uviewui.com/\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 285,
    "preview": "blank_issues_enabled: false\ncontact_links:\n    - name: 创建一个新issue\n      url: https://new-issue.uviewui.com/\n      about:"
  },
  {
    "path": ".gitignore",
    "chars": 82,
    "preview": "/unpackage/dist/*\n/node_modules/*\n/.idea/*\ndeploy.sh\n.hbuilderx/\n\ndeploy\n.DS_Store"
  },
  {
    "path": ".vscode/settings.json",
    "chars": 34,
    "preview": "{\n\t\"editor.formatOnSave\": false\n}\n"
  },
  {
    "path": "App.vue",
    "chars": 568,
    "preview": "<script>\n\texport default {\n\t\t// 此处globalData为了演示其作用,不是uView框架的一部分\n\t\tglobalData: {\n\t\t\tusername: '白居易'\n\t\t},\n\t\tonLaunch() {"
  },
  {
    "path": "LICENSE",
    "chars": 1072,
    "preview": "MIT License\n\nCopyright (c) 2023 www.uviewui.com\n\nPermission is hereby granted, free of charge, to any person obtaining a"
  },
  {
    "path": "README.md",
    "chars": 4198,
    "preview": "<p align=\"center\">\n    <img alt=\"logo\" src=\"https://uviewui.com/common/logo.png\" width=\"120\" height=\"120\" style=\"margin-"
  },
  {
    "path": "common/classify.data.js",
    "chars": 33442,
    "preview": "export default[\n   {\n      \"name\": \"女装\",\n      \"foods\": [\n          {\n            \"name\": \"A字裙\",\n            \"key\": \"A字裙"
  },
  {
    "path": "common/demo.scss",
    "chars": 1316,
    "preview": "/* #ifndef APP-NVUE */\nview,\ntext {\n\tbox-sizing: border-box;\n}\n/* #endif */\n\n/* start--演示页面使用的统一样式--start */\n.u-demo {\n\t"
  },
  {
    "path": "common/http.api.js",
    "chars": 648,
    "preview": "// 如果没有通过拦截器配置域名的话,可以在这里写上完整的URL(加上域名部分)\nlet hotSearchUrl = '/ebapi/store_api/hot_search';\nlet indexUrl = '/ebapi/public"
  },
  {
    "path": "common/http.interceptor.js",
    "chars": 1481,
    "preview": "// 这里的vm,就是我们在vue文件里面的this,所以我们能在这里获取vuex的变量,比如存放在里面的token\n// 同时,我们也可以在此使用getApp().globalData,如果你把token放在getApp().global"
  },
  {
    "path": "common/index.list.js",
    "chars": 10779,
    "preview": "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\"ke"
  },
  {
    "path": "common/locales/en.js",
    "chars": 880,
    "preview": "export default {\n\t// 可以以页面为单位来写,比如首页的内容,写在index字段,个人中心写在center,共同部分写在common部分\n\tcomponents: {\n\t\tdesc: 'Numerous component"
  },
  {
    "path": "common/locales/zh.js",
    "chars": 390,
    "preview": "export default {\n\t// 可以以页面为单位来写,比如首页的内容,写在index字段,个人中心写在center,共同部分写在common部分\n\tcomponents: {\n\t\tdesc: '众多组件覆盖开发过程的各个需求,组件"
  },
  {
    "path": "components/page-nav/page-nav.vue",
    "chars": 1772,
    "preview": "<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"
  },
  {
    "path": "main.js",
    "chars": 1197,
    "preview": "import Vue from 'vue';\nimport App from './App';\n\nVue.config.productionTip = false;\n\nApp.mpType = 'app';\n\n// 此处为演示Vue.pro"
  },
  {
    "path": "manifest.json",
    "chars": 5863,
    "preview": "{\n    \"name\" : \"uView\",\n    \"appid\" : \"__UNI__6655525\",\n    \"description\" : \"多平台快速开发的UI框架\",\n    \"versionName\" : \"1.8.8\","
  },
  {
    "path": "package.json",
    "chars": 889,
    "preview": "{\n  \"name\": \"uview1.0\",\n  \"version\": \"1.0.0\",\n  \"description\": \"<p align=\\\"center\\\">\\r     <img alt=\\\"logo\\\" src=\\\"https"
  },
  {
    "path": "pages/componentsA/avatar/index.vue",
    "chars": 2336,
    "preview": "<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="
  },
  {
    "path": "pages/componentsA/avatarCropper/index.vue",
    "chars": 2615,
    "preview": "<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="
  },
  {
    "path": "pages/componentsA/backTop/index.vue",
    "chars": 2440,
    "preview": "<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="
  },
  {
    "path": "pages/componentsA/calendar/index.vue",
    "chars": 2735,
    "preview": "<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"
  },
  {
    "path": "pages/componentsA/empty/index.vue",
    "chars": 3249,
    "preview": "<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="
  },
  {
    "path": "pages/componentsA/field/index.vue",
    "chars": 2549,
    "preview": "<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"
  },
  {
    "path": "pages/componentsA/form/index.vue",
    "chars": 12164,
    "preview": "<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-i"
  },
  {
    "path": "pages/componentsA/fullScreen/index.vue",
    "chars": 950,
    "preview": "<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="
  },
  {
    "path": "pages/componentsA/icon/index.vue",
    "chars": 9128,
    "preview": "<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.na"
  },
  {
    "path": "pages/componentsA/indexList/index.vue",
    "chars": 900,
    "preview": "<template>\n\t<u-index-list :scrollTop=\"scrollTop\" :index-list=\"indexList\">\n\t\t<view v-for=\"(item, index) in list\" :key=\"in"
  },
  {
    "path": "pages/componentsA/keyboard/index.vue",
    "chars": 2917,
    "preview": "<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="
  },
  {
    "path": "pages/componentsA/lazyLoad/index.vue",
    "chars": 7620,
    "preview": "<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=\"ind"
  },
  {
    "path": "pages/componentsA/modal/index.vue",
    "chars": 2334,
    "preview": "<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="
  },
  {
    "path": "pages/componentsA/navbar/index.vue",
    "chars": 6660,
    "preview": "<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=\"i"
  },
  {
    "path": "pages/componentsA/noNetwork/index.vue",
    "chars": 16700,
    "preview": "<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="
  },
  {
    "path": "pages/componentsA/parse/index.vue",
    "chars": 4099,
    "preview": "<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"
  },
  {
    "path": "pages/componentsA/select/index.vue",
    "chars": 3554,
    "preview": "<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="
  },
  {
    "path": "pages/componentsA/slider/index.vue",
    "chars": 2958,
    "preview": "<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="
  },
  {
    "path": "pages/componentsA/tabs/index.vue",
    "chars": 3368,
    "preview": "<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="
  },
  {
    "path": "pages/componentsA/tag/index.vue",
    "chars": 2651,
    "preview": "<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="
  },
  {
    "path": "pages/componentsA/test/index.vue",
    "chars": 2516,
    "preview": "<template>\n    <u-form\n        :model=\"form\"\n        ref=\"uForm\"\n    >\n        <u-form-item label=\"姓名\">\n            <u-i"
  },
  {
    "path": "pages/componentsA/timeLine/index.vue",
    "chars": 3590,
    "preview": "<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 "
  },
  {
    "path": "pages/componentsA/toast/index.vue",
    "chars": 2120,
    "preview": "<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="
  },
  {
    "path": "pages/componentsA/topTips/index.vue",
    "chars": 1395,
    "preview": "<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="
  },
  {
    "path": "pages/componentsA/verificationCode/index.vue",
    "chars": 2371,
    "preview": "<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="
  },
  {
    "path": "pages/componentsB/card/index.vue",
    "chars": 2900,
    "preview": "<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"
  },
  {
    "path": "pages/componentsB/checkbox/index.vue",
    "chars": 4284,
    "preview": "<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="
  },
  {
    "path": "pages/componentsB/divider/index.vue",
    "chars": 2202,
    "preview": "<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="
  },
  {
    "path": "pages/componentsB/dropdown/index.vue",
    "chars": 3496,
    "preview": "<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 "
  },
  {
    "path": "pages/componentsB/image/index.vue",
    "chars": 2588,
    "preview": "<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="
  },
  {
    "path": "pages/componentsB/line/index.vue",
    "chars": 1914,
    "preview": "<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="
  },
  {
    "path": "pages/componentsB/loading/index.vue",
    "chars": 2011,
    "preview": "<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="
  },
  {
    "path": "pages/componentsB/noticeBar/index.vue",
    "chars": 3620,
    "preview": "<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="
  },
  {
    "path": "pages/componentsB/picker/index.vue",
    "chars": 5264,
    "preview": "<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="
  },
  {
    "path": "pages/componentsB/radio/index.vue",
    "chars": 3855,
    "preview": "<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="
  },
  {
    "path": "pages/componentsB/rate/index.vue",
    "chars": 3373,
    "preview": "<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="
  },
  {
    "path": "pages/componentsB/readMore/index.vue",
    "chars": 2292,
    "preview": "<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="
  },
  {
    "path": "pages/componentsB/search/index.vue",
    "chars": 2512,
    "preview": "<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="
  },
  {
    "path": "pages/componentsB/skeleton/index.vue",
    "chars": 3043,
    "preview": "<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="
  },
  {
    "path": "pages/componentsB/steps/index.vue",
    "chars": 1753,
    "preview": "<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="
  },
  {
    "path": "pages/componentsB/sticky/index.vue",
    "chars": 1709,
    "preview": "<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="
  },
  {
    "path": "pages/componentsB/swipeAction/index.vue",
    "chars": 3175,
    "preview": "<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="
  },
  {
    "path": "pages/componentsB/swiper/index.vue",
    "chars": 2468,
    "preview": "<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="
  },
  {
    "path": "pages/componentsB/switch/index.vue",
    "chars": 2985,
    "preview": "<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="
  },
  {
    "path": "pages/componentsB/tabbar/index.vue",
    "chars": 3092,
    "preview": "<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-bo"
  },
  {
    "path": "pages/componentsB/table/index.vue",
    "chars": 2101,
    "preview": "<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="
  },
  {
    "path": "pages/componentsB/upload/index.vue",
    "chars": 5764,
    "preview": "<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="
  },
  {
    "path": "pages/componentsB/waterfall/index.vue",
    "chars": 5282,
    "preview": "<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"
  },
  {
    "path": "pages/componentsC/actionSheet/index.vue",
    "chars": 1840,
    "preview": "<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="
  },
  {
    "path": "pages/componentsC/alertTips/index.vue",
    "chars": 2286,
    "preview": "<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="
  },
  {
    "path": "pages/componentsC/badge/index.vue",
    "chars": 2515,
    "preview": "<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="
  },
  {
    "path": "pages/componentsC/button/index.vue",
    "chars": 2989,
    "preview": "<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="
  },
  {
    "path": "pages/componentsC/cell/index.vue",
    "chars": 3278,
    "preview": "<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;"
  },
  {
    "path": "pages/componentsC/circleProgress/index.vue",
    "chars": 1177,
    "preview": "<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"
  },
  {
    "path": "pages/componentsC/collapse/index.vue",
    "chars": 3340,
    "preview": "<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"
  },
  {
    "path": "pages/componentsC/color/index.vue",
    "chars": 7691,
    "preview": "<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-b"
  },
  {
    "path": "pages/componentsC/countDown/index.vue",
    "chars": 2815,
    "preview": "<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="
  },
  {
    "path": "pages/componentsC/countTo/index.vue",
    "chars": 3083,
    "preview": "<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="
  },
  {
    "path": "pages/componentsC/gap/index.vue",
    "chars": 1731,
    "preview": "<!--\n * @Desc: ---   ----\n * @Date: 2020-04-22 12:29:21\n * @LastEditors: 王\n * @LastEditTime: 2020-04-22 18:33:28\n -->\n<t"
  },
  {
    "path": "pages/componentsC/grid/index.vue",
    "chars": 5390,
    "preview": "<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="
  },
  {
    "path": "pages/componentsC/layout/index.vue",
    "chars": 2774,
    "preview": "<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="
  },
  {
    "path": "pages/componentsC/link/index.vue",
    "chars": 1265,
    "preview": "<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="
  },
  {
    "path": "pages/componentsC/loadmore/index.vue",
    "chars": 2374,
    "preview": "<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="
  },
  {
    "path": "pages/componentsC/mask/index.vue",
    "chars": 2103,
    "preview": "<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="
  },
  {
    "path": "pages/componentsC/messageInput/index.vue",
    "chars": 2579,
    "preview": "<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="
  },
  {
    "path": "pages/componentsC/numberBox/index.vue",
    "chars": 1868,
    "preview": "<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="
  },
  {
    "path": "pages/componentsC/popup/index.vue",
    "chars": 2633,
    "preview": "<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="
  },
  {
    "path": "pages/componentsC/progress/index.vue",
    "chars": 2656,
    "preview": "<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="
  },
  {
    "path": "pages/componentsC/section/index.vue",
    "chars": 1902,
    "preview": "<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="
  },
  {
    "path": "pages/componentsC/subsection/index.vue",
    "chars": 2171,
    "preview": "<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="
  },
  {
    "path": "pages/componentsC/test/index.vue",
    "chars": 37,
    "preview": "<template>\n\t<view></view>\n</template>"
  },
  {
    "path": "pages/example/components.config.js",
    "chars": 8965,
    "preview": "\nexport default [{\n\t\tgroupName: '基础组件',\n\t\tgroupName_en: 'Basic components',\n\t\tlist: [{\n\t\t\tpath: '/pages/componentsC/colo"
  },
  {
    "path": "pages/example/components.vue",
    "chars": 1652,
    "preview": "<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"
  },
  {
    "path": "pages/example/js.config.js",
    "chars": 2230,
    "preview": "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"
  },
  {
    "path": "pages/example/js.vue",
    "chars": 1620,
    "preview": "<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-cel"
  },
  {
    "path": "pages/example/template.config.js",
    "chars": 1532,
    "preview": "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"
  },
  {
    "path": "pages/example/template.vue",
    "chars": 1681,
    "preview": "<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"
  },
  {
    "path": "pages/library/color/index.vue",
    "chars": 1523,
    "preview": "<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="
  },
  {
    "path": "pages/library/colorSwitch/index.vue",
    "chars": 1708,
    "preview": "<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="
  },
  {
    "path": "pages/library/debounce/index.vue",
    "chars": 2281,
    "preview": "<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="
  },
  {
    "path": "pages/library/deepClone/index.vue",
    "chars": 582,
    "preview": "<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="
  },
  {
    "path": "pages/library/deepMerge/index.vue",
    "chars": 1450,
    "preview": "<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="
  },
  {
    "path": "pages/library/getRect/index.vue",
    "chars": 2082,
    "preview": "<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="
  },
  {
    "path": "pages/library/globalVariable/globalData.vue",
    "chars": 1096,
    "preview": "<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="
  },
  {
    "path": "pages/library/globalVariable/index.vue",
    "chars": 1833,
    "preview": "<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="
  },
  {
    "path": "pages/library/globalVariable/prototype.vue",
    "chars": 1063,
    "preview": "<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="
  },
  {
    "path": "pages/library/globalVariable/vuex.vue",
    "chars": 865,
    "preview": "<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="
  },
  {
    "path": "pages/library/guid/index.vue",
    "chars": 1591,
    "preview": "<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="
  },
  {
    "path": "pages/library/http/index.vue",
    "chars": 1125,
    "preview": "<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="
  },
  {
    "path": "pages/library/md5/index.vue",
    "chars": 950,
    "preview": "<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="
  },
  {
    "path": "pages/library/mpShare/index.vue",
    "chars": 327,
    "preview": "<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="
  },
  {
    "path": "pages/library/queryParams/index.vue",
    "chars": 1040,
    "preview": "<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="
  },
  {
    "path": "pages/library/random/index.vue",
    "chars": 1125,
    "preview": "<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="
  },
  {
    "path": "pages/library/randomArray/index.vue",
    "chars": 880,
    "preview": "<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="
  },
  {
    "path": "pages/library/route/index.vue",
    "chars": 1888,
    "preview": "<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="
  },
  {
    "path": "pages/library/route/routeTo.vue",
    "chars": 778,
    "preview": "<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="
  },
  {
    "path": "pages/library/test/index.vue",
    "chars": 2355,
    "preview": "<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="
  },
  {
    "path": "pages/library/timeFormat/index.vue",
    "chars": 1450,
    "preview": "<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="
  },
  {
    "path": "pages/library/timeFrom/index.vue",
    "chars": 1687,
    "preview": "<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="
  },
  {
    "path": "pages/library/trim/index.vue",
    "chars": 1253,
    "preview": "<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="
  },
  {
    "path": "pages/template/address/addSite.vue",
    "chars": 3648,
    "preview": "<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"
  },
  {
    "path": "pages/template/address/index.vue",
    "chars": 2410,
    "preview": "<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 "
  },
  {
    "path": "pages/template/citySelect/index.vue",
    "chars": 1014,
    "preview": "<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="
  },
  {
    "path": "pages/template/citySelect/u-city-select.vue",
    "chars": 6133,
    "preview": "<template>\n\t<u-popup v-model=\"value\" mode=\"bottom\" :popup=\"false\" :mask=\"true\" :closeable=\"true\" :safe-area-inset-bottom"
  },
  {
    "path": "pages/template/comment/index.vue",
    "chars": 4418,
    "preview": "<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\"><ima"
  },
  {
    "path": "pages/template/comment/reply.vue",
    "chars": 5338,
    "preview": "<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="
  },
  {
    "path": "pages/template/coupon/index.vue",
    "chars": 7635,
    "preview": "<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 "
  },
  {
    "path": "pages/template/douyin/index.nvue",
    "chars": 75,
    "preview": "<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",
    "chars": 2190,
    "preview": "<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=\"r"
  },
  {
    "path": "pages/template/login/code.vue",
    "chars": 1876,
    "preview": "<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\">验证码"
  },
  {
    "path": "pages/template/login/index.vue",
    "chars": 2492,
    "preview": "<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"
  },
  {
    "path": "pages/template/mallMenu/index1.vue",
    "chars": 4313,
    "preview": "<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=\"searc"
  },
  {
    "path": "pages/template/mallMenu/index2.vue",
    "chars": 6680,
    "preview": "<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=\"searc"
  },
  {
    "path": "pages/template/order/index.vue",
    "chars": 13836,
    "preview": "<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"
  },
  {
    "path": "pages/template/submitBar/index.vue",
    "chars": 1511,
    "preview": "<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="
  },
  {
    "path": "pages/template/wxCenter/index.vue",
    "chars": 1780,
    "preview": "<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\" st"
  },
  {
    "path": "pages.json",
    "chars": 16795,
    "preview": "{\n\t\"easycom\": {\n\t\t\"^u-(.*)\": \"@/uview-ui/components/u-$1/u-$1.vue\"\n\t},\n\t// \"condition\": { //模式配置,仅开发期间生效\n\t// \t\"current\":"
  },
  {
    "path": "static/common/js/touch-emulator.js",
    "chars": 11290,
    "preview": "(function(window, document, exportName, undefined) {\n    \"use strict\";\n\n    var isMultiTouch = false;\n    var multiTouch"
  },
  {
    "path": "store/$u.mixin.js",
    "chars": 605,
    "preview": "import { mapState } from 'vuex'\nimport store from \"@/store\"\n\n// 尝试将用户在根目录中的store/index.js的vuex的state变量,全部加载到全局变量中\nlet $u"
  },
  {
    "path": "store/index.js",
    "chars": 2183,
    "preview": "import Vue from 'vue'\nimport Vuex from 'vuex'\nVue.use(Vuex)\n\nlet lifeData = {};\n\ntry{\n\t// 尝试获取本地是否存在lifeData变量,第一次启动APP时"
  },
  {
    "path": "template.h5.html",
    "chars": 1336,
    "preview": "<!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=ed"
  },
  {
    "path": "uni.scss",
    "chars": 188,
    "preview": "/**\n * 下方引入的为uView UI的集成样式文件,为scss预处理器,其中包含了一些\"u-\"开头的自定义变量\n * 使用的时候,请将下面的一行复制到您的uniapp项目根目录的uni.scss中即可\n * uView自定义的css类"
  },
  {
    "path": "uview-ui/LICENSE",
    "chars": 1072,
    "preview": "MIT License\n\nCopyright (c) 2023 www.uviewui.com\n\nPermission is hereby granted, free of charge, to any person obtaining a"
  },
  {
    "path": "uview-ui/README.md",
    "chars": 2126,
    "preview": "<p align=\"center\">\n    <img alt=\"logo\" src=\"https://uviewui.com/common/logo.png\" width=\"120\" height=\"120\" style=\"margin-"
  },
  {
    "path": "uview-ui/components/u-action-sheet/u-action-sheet.vue",
    "chars": 4646,
    "preview": "<template>\n\t<u-popup mode=\"bottom\" :border-radius=\"borderRadius\" :popup=\"false\" v-model=\"value\" :maskCloseAble=\"maskClos"
  },
  {
    "path": "uview-ui/components/u-alert-tips/u-alert-tips.vue",
    "chars": 5139,
    "preview": "<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-"
  },
  {
    "path": "uview-ui/components/u-avatar/u-avatar.vue",
    "chars": 9014,
    "preview": "<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=\"[imgStyl"
  },
  {
    "path": "uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue",
    "chars": 6605,
    "preview": "<template>\n\t<view class=\"content\">\n\t\t<view class=\"cropper-wrapper\" :style=\"{ height: cropperOpt.height + 'px' }\">\n\t\t\t<ca"
  },
  {
    "path": "uview-ui/components/u-avatar-cropper/weCropper.js",
    "chars": 30706,
    "preview": "/**\n * we-cropper v1.3.9\n * (c) 2020 dlhandsome\n * @license MIT\n */\n(function(global, factory) {\n\ttypeof exports === 'ob"
  },
  {
    "path": "uview-ui/components/u-back-top/u-back-top.vue",
    "chars": 2828,
    "preview": "<template>\n\t<view @tap=\"backToTop\" class=\"u-back-top\" :class=\"['u-back-top--mode--' + mode]\" :style=\"[{\n\t\tbottom: bottom"
  },
  {
    "path": "uview-ui/components/u-badge/u-badge.vue",
    "chars": 4563,
    "preview": "<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-min"
  },
  {
    "path": "uview-ui/components/u-button/u-button.vue",
    "chars": 13615,
    "preview": "<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\t"
  },
  {
    "path": "uview-ui/components/u-calendar/u-calendar.vue",
    "chars": 17175,
    "preview": "<template>\n\t<u-popup closeable :maskCloseAble=\"maskCloseAble\" mode=\"bottom\" :popup=\"false\" v-model=\"value\" length=\"auto\""
  },
  {
    "path": "uview-ui/components/u-car-keyboard/u-car-keyboard.vue",
    "chars": 4828,
    "preview": "<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"
  },
  {
    "path": "uview-ui/components/u-card/u-card.vue",
    "chars": 6068,
    "preview": "<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--bor"
  },
  {
    "path": "uview-ui/components/u-cell-group/u-cell-group.vue",
    "chars": 1378,
    "preview": "<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</"
  },
  {
    "path": "uview-ui/components/u-cell-item/u-cell-item.vue",
    "chars": 6387,
    "preview": "<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"
  },
  {
    "path": "uview-ui/components/u-checkbox/u-checkbox.vue",
    "chars": 7132,
    "preview": "<template>\n\t<view class=\"u-checkbox\" :style=\"[checkboxStyle]\">\n\t\t<view class=\"u-checkbox__icon-wrap\" @tap=\"toggle\" :clas"
  },
  {
    "path": "uview-ui/components/u-checkbox-group/u-checkbox-group.vue",
    "chars": 2690,
    "preview": "<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 fr"
  },
  {
    "path": "uview-ui/components/u-circle-progress/u-circle-progress.vue",
    "chars": 5435,
    "preview": "<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\tbackgr"
  },
  {
    "path": "uview-ui/components/u-circle-progress/u-line-progress/u-line-progress.vue",
    "chars": 3145,
    "preview": "<template>\n\t<view class=\"u-progress\" :style=\"{\n\t\tborderRadius: round ? '100rpx' : 0,\n\t\theight: height + 'rpx',\n\t\tbackgro"
  },
  {
    "path": "uview-ui/components/u-col/u-col.vue",
    "chars": 2859,
    "preview": "<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\t"
  },
  {
    "path": "uview-ui/components/u-collapse/u-collapse.vue",
    "chars": 1954,
    "preview": "<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 通"
  },
  {
    "path": "uview-ui/components/u-collapse-item/u-collapse-item.vue",
    "chars": 4976,
    "preview": "<template>\n\t<view class=\"u-collapse-item\" :style=\"[itemStyle]\">\n\t\t<view :hover-stay-time=\"200\" class=\"u-collapse-head\" @"
  },
  {
    "path": "uview-ui/components/u-column-notice/u-column-notice.vue",
    "chars": 4430,
    "preview": "<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=\"["
  },
  {
    "path": "uview-ui/components/u-count-down/u-count-down.vue",
    "chars": 7680,
    "preview": "<template>\n\t<view class=\"u-countdown\">\n\t\t<view class=\"u-countdown-item\" :style=\"[itemStyle]\" v-if=\"showDays && (hideZero"
  },
  {
    "path": "uview-ui/components/u-count-to/u-count-to.vue",
    "chars": 5719,
    "preview": "<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' : 'norma"
  },
  {
    "path": "uview-ui/components/u-divider/u-divider.vue",
    "chars": 3487,
    "preview": "<template>\n\t<view class=\"u-divider\" :style=\"{\n\t\theight: height == 'auto' ? 'auto' : height + 'rpx',\n\t\tbackgroundColor: b"
  },
  {
    "path": "uview-ui/components/u-dropdown/u-dropdown.vue",
    "chars": 7386,
    "preview": "<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}\" :cla"
  },
  {
    "path": "uview-ui/components/u-dropdown-item/u-dropdown-item.vue",
    "chars": 3394,
    "preview": "<template>\n\t<view class=\"u-dropdown-item\" v-if=\"active\" @touchmove.stop.prevent=\"() => {}\" @tap.stop.prevent=\"() => {}\">"
  },
  {
    "path": "uview-ui/components/u-empty/u-empty.vue",
    "chars": 3706,
    "preview": "<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 ? sr"
  },
  {
    "path": "uview-ui/components/u-field/u-field.vue",
    "chars": 9599,
    "preview": "<template>\n\t<view class=\"u-field\" :class=\"{'u-border-top': borderTop, 'u-border-bottom': borderBottom }\">\n\t\t<view class="
  },
  {
    "path": "uview-ui/components/u-form/u-form.vue",
    "chars": 2907,
    "preview": "<template>\n\t<view class=\"u-form\"><slot /></view>\n</template>\n\n<script>\n\t/**\n\t * form 表单\n\t * @description 此组件一般用于表单场景,可以配"
  },
  {
    "path": "uview-ui/components/u-form-item/u-form-item.vue",
    "chars": 11250,
    "preview": "<template>\n\t<view class=\"u-form-item\" :class=\"{'u-border-bottom': elBorderBottom, 'u-form-item__border-bottom--error': v"
  },
  {
    "path": "uview-ui/components/u-full-screen/u-full-screen.vue",
    "chars": 933,
    "preview": "<template>\n\t<u-modal v-model=\"show\" :show-cancel-button=\"true\" confirm-text=\"升级\" title=\"发现新版本\" @cancel=\"cancel\" @confirm"
  },
  {
    "path": "uview-ui/components/u-gap/u-gap.vue",
    "chars": 1136,
    "preview": "<template>\n\t<view class=\"u-gap\" :style=\"[gapStyle]\"></view>\n</template>\n\n<script>\n/**\n * gap 间隔槽\n * @description 该组件一般用于"
  },
  {
    "path": "uview-ui/components/u-grid/u-grid.vue",
    "chars": 2183,
    "preview": "<template>\n\t<view class=\"u-grid\" :class=\"{'u-border-top u-border-left': border}\" :style=\"[gridStyle]\"><slot /></view>\n</"
  },
  {
    "path": "uview-ui/components/u-grid-item/u-grid-item.vue",
    "chars": 2494,
    "preview": "<template>\n\t<view class=\"u-grid-item\" :hover-class=\"parentData.hoverClass\"\n\t :hover-stay-time=\"200\" @tap=\"click\" :style="
  },
  {
    "path": "uview-ui/components/u-icon/u-icon.vue",
    "chars": 8161,
    "preview": "<template>\n\t<view :style=\"[customStyle]\" class=\"u-icon\" @tap=\"click\" :class=\"['u-icon--' + labelPos]\">\n\t\t<image class=\"u"
  },
  {
    "path": "uview-ui/components/u-image/u-image.vue",
    "chars": 6313,
    "preview": "<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:"
  },
  {
    "path": "uview-ui/components/u-index-anchor/u-index-anchor.vue",
    "chars": 1919,
    "preview": "<template>\n\t<!-- 支付宝小程序使用$u.getRect()获取组件的根元素尺寸,所以在外面套一个\"壳\" -->\n\t<view>\n\t\t<view class=\"u-index-anchor-wrapper\" :id=\"$u.g"
  },
  {
    "path": "uview-ui/components/u-index-list/u-index-list.vue",
    "chars": 7789,
    "preview": "<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<vie"
  },
  {
    "path": "uview-ui/components/u-input/u-input.vue",
    "chars": 9576,
    "preview": "<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"
  },
  {
    "path": "uview-ui/components/u-keyboard/u-keyboard.vue",
    "chars": 4973,
    "preview": "<template>\n\t<u-popup class=\"\" :mask=\"mask\" :maskCloseAble=\"maskCloseAble\" mode=\"bottom\" :popup=\"false\" v-model=\"value\" l"
  },
  {
    "path": "uview-ui/components/u-lazy-load/u-lazy-load.vue",
    "chars": 14803,
    "preview": "<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  "
  },
  {
    "path": "uview-ui/components/u-line/u-line.vue",
    "chars": 2075,
    "preview": "<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 * @descripti"
  },
  {
    "path": "uview-ui/components/u-line-progress/u-line-progress.vue",
    "chars": 3150,
    "preview": "<template>\n\t<view class=\"u-progress\" :style=\"{\n\t\tborderRadius: round ? '100rpx' : 0,\n\t\theight: height + 'rpx',\n\t\tbackgro"
  },
  {
    "path": "uview-ui/components/u-link/u-link.vue",
    "chars": 1883,
    "preview": "<template>\n\t<text class=\"u-link\" @tap.stop=\"openLink\" :style=\"{\n\t\tcolor: color,\n\t\tfontSize: fontSize + 'rpx',\n\t\tborderBo"
  },
  {
    "path": "uview-ui/components/u-loading/u-loading.vue",
    "chars": 4105,
    "preview": "<template>\n\t<view v-if=\"show\" class=\"u-loading\" :class=\"mode == 'circle' ? 'u-loading-circle' : 'u-loading-flower'\" :sty"
  },
  {
    "path": "uview-ui/components/u-loading-page/u-loading-page.vue",
    "chars": 225,
    "preview": "<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"
  },
  {
    "path": "uview-ui/components/u-loadmore/u-loadmore.vue",
    "chars": 4588,
    "preview": "<template>\n\t<view class=\"u-load-more-wrap\" :style=\"{\n\t\tbackgroundColor: bgColor,\n\t\tmarginBottom: marginBottom + 'rpx',\n\t"
  },
  {
    "path": "uview-ui/components/u-mask/u-mask.vue",
    "chars": 2635,
    "preview": "<template>\n\t<view class=\"u-mask\" hover-stop-propagation :style=\"[maskStyle, zoomStyle]\" @tap=\"click\" @touchmove.stop.pre"
  },
  {
    "path": "uview-ui/components/u-message-input/u-message-input.vue",
    "chars": 7109,
    "preview": "<template>\n\t<view class=\"u-char-box\">\n\t\t<view class=\"u-char-flex\">\n\t\t\t<input :disabled=\"disabledKeyboard\" :value=\"valueM"
  },
  {
    "path": "uview-ui/components/u-modal/u-modal.vue",
    "chars": 6497,
    "preview": "<template>\n\t<view>\n\t\t<u-popup :zoom=\"zoom\" mode=\"center\" :popup=\"false\" :z-index=\"uZIndex\" v-model=\"value\" :length=\"widt"
  },
  {
    "path": "uview-ui/components/u-navbar/u-navbar.vue",
    "chars": 7834,
    "preview": "<template>\n\t<view class=\"\">\n\t\t<view class=\"u-navbar\" :style=\"[navbarStyle]\" :class=\"{ 'u-navbar-fixed': isFixed, 'u-bord"
  },
  {
    "path": "uview-ui/components/u-no-network/u-no-network.vue",
    "chars": 21261,
    "preview": "<template>\n\t<view class=\"u-no-network\" v-if=\"!isConnected\" :style=\"{'z-index': uZIndex}\" @touchmove.stop.prevent=\"() => "
  },
  {
    "path": "uview-ui/components/u-notice-bar/u-notice-bar.vue",
    "chars": 5894,
    "preview": "<template>\n\t<view class=\"u-notice-bar-wrap\" v-if=\"isShow\" :style=\"{\n\t\tborderRadius: borderRadius + 'rpx',\n\t}\">\n\t\t<block "
  },
  {
    "path": "uview-ui/components/u-number-box/u-number-box.vue",
    "chars": 9168,
    "preview": "<template>\n\t<view class=\"u-numberbox\">\n\t\t<view class=\"u-icon-minus\" @touchstart.stop.prevent=\"btnTouchStart('minus')\" @t"
  },
  {
    "path": "uview-ui/components/u-number-keyboard/u-number-keyboard.vue",
    "chars": 3924,
    "preview": "<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 "
  },
  {
    "path": "uview-ui/components/u-parse/libs/CssHandler.js",
    "chars": 2889,
    "preview": "const cfg = require('./config.js'),\n\tisLetter = c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');\n\nfunction CssHand"
  }
]

// ... and 87 more files (download for full content)

About this extraction

This page contains the full source code of the umicro/uView GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 287 files (1.3 MB), approximately 508.8k tokens, and a symbol index with 169 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!