Commit 2a95e3be authored by TtTao's avatar TtTao

Merge remote-tracking branch 'origin/dev' into dev

parents 5de0bd6e 667de30b
...@@ -17,7 +17,9 @@ ...@@ -17,7 +17,9 @@
uView UI,是[uni-app](https://uniapp.dcloud.io/)生态优秀的UI框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水 uView UI,是[uni-app](https://uniapp.dcloud.io/)生态优秀的UI框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水
## [点击加群交流反馈:1129077272](https://qm.qq.com/cgi-bin/qm/qr?k=1FfucLpozYbnb7FWo_KsqAdEi1mE3Qrf&jump_from=webapi) ## [官方文档:https://www.uviewui.com](https://www.uviewui.com)
### [点击加群交流反馈:1129077272](https://qm.qq.com/cgi-bin/qm/qr?k=1FfucLpozYbnb7FWo_KsqAdEi1mE3Qrf&jump_from=webapi)
## 特性 ## 特性
...@@ -39,8 +41,6 @@ uView UI,是[uni-app](https://uniapp.dcloud.io/)生态优秀的UI框架,全 ...@@ -39,8 +41,6 @@ uView UI,是[uni-app](https://uniapp.dcloud.io/)生态优秀的UI框架,全
## 友情链接 ## 友情链接
<br>
#### **vue-admin-beautiful** —— [企业级、通用型中后台前端解决方案(基于vue/cli 4 最新版,同时支持电脑,手机,平板)](https://github.com/chuzhixin/vue-admin-beautiful) #### **vue-admin-beautiful** —— [企业级、通用型中后台前端解决方案(基于vue/cli 4 最新版,同时支持电脑,手机,平板)](https://github.com/chuzhixin/vue-admin-beautiful)
#### **vue-admin-beautiful** —— [在线演示](http://beautiful.panm.cn/vue-admin-beautiful/#/index) #### **vue-admin-beautiful** —— [在线演示](http://beautiful.panm.cn/vue-admin-beautiful/#/index)
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
"name" : "uView", "name" : "uView",
"appid" : "__UNI__60F4B81", "appid" : "__UNI__60F4B81",
"description" : "多平台快速开发的UI框架", "description" : "多平台快速开发的UI框架",
"versionName" : "1.7.0", "versionName" : "1.7.3",
"versionCode" : "100", "versionCode" : "100",
"transformPx" : false, "transformPx" : false,
"app-plus" : { "app-plus" : {
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
// "current": 0, //当前激活的模式(list 的索引项) // "current": 0, //当前激活的模式(list 的索引项)
// "list": [{ // "list": [{
// "name": "test", //模式名称 // "name": "test", //模式名称
// "path": "pages/componentsB/dropdown/index", //启动页面,必选 // "path": "pages/componentsC/test/index", //启动页面,必选
// "query": "uuid=c4bba940-f69e-11ea-a419-6bafda9d095e&__id__=1" //启动参数,在页面的onLoad函数里面得到 // "query": "uuid=c4bba940-f69e-11ea-a419-6bafda9d095e&__id__=1" //启动参数,在页面的onLoad函数里面得到
// }] // }]
// }, // },
......
...@@ -3,13 +3,8 @@ ...@@ -3,13 +3,8 @@
<u-waterfall v-model="flowList" ref="uWaterfall"> <u-waterfall v-model="flowList" ref="uWaterfall">
<template v-slot:left="{ leftList }"> <template v-slot:left="{ leftList }">
<view class="demo-warter" v-for="(item, index) in leftList" :key="index"> <view class="demo-warter" v-for="(item, index) in leftList" :key="index">
<!-- 警告:微信小程序不支持嵌入lazyload组件,请自行如下使用image标签 --> <!-- 微信小程序需要hx2.8.11版本才支持在template中引入其他组件,比如下方的u-lazy-load组件 -->
<!-- #ifndef MP-WEIXIN -->
<u-lazy-load threshold="-450" border-radius="10" :image="item.image" :index="index"></u-lazy-load> <u-lazy-load threshold="-450" border-radius="10" :image="item.image" :index="index"></u-lazy-load>
<!-- #endif -->
<!-- #ifdef MP-WEIXIN -->
<view class="demo-img-wrap"><image class="demo-image" :src="item.image" mode="widthFix"></image></view>
<!-- #endif -->
<view class="demo-title">{{ item.title }}</view> <view class="demo-title">{{ item.title }}</view>
<view class="demo-price">{{ item.price }}</view> <view class="demo-price">{{ item.price }}</view>
<view class="demo-tag"> <view class="demo-tag">
...@@ -17,7 +12,6 @@ ...@@ -17,7 +12,6 @@
<view class="demo-tag-text">放心购</view> <view class="demo-tag-text">放心购</view>
</view> </view>
<view class="demo-shop">{{ item.shop }}</view> <view class="demo-shop">{{ item.shop }}</view>
<!-- 微信小程序无效,因为它不支持在template中引入组件 -->
<view class="u-close"> <view class="u-close">
<u-icon name="close-circle-fill" color="#fa3534" size="34" @click="remove(item.id)"></u-icon> <u-icon name="close-circle-fill" color="#fa3534" size="34" @click="remove(item.id)"></u-icon>
</view> </view>
...@@ -25,12 +19,7 @@ ...@@ -25,12 +19,7 @@
</template> </template>
<template v-slot:right="{ rightList }"> <template v-slot:right="{ rightList }">
<view class="demo-warter" v-for="(item, index) in rightList" :key="index"> <view class="demo-warter" v-for="(item, index) in rightList" :key="index">
<!-- #ifndef MP-WEIXIN -->
<u-lazy-load threshold="-450" border-radius="10" :image="item.image" :index="index"></u-lazy-load> <u-lazy-load threshold="-450" border-radius="10" :image="item.image" :index="index"></u-lazy-load>
<!-- #endif -->
<!-- #ifdef MP-WEIXIN -->
<view class="demo-img-wrap"><image class="demo-image" :src="item.image" mode="widthFix"></image></view>
<!-- #endif -->
<view class="demo-title">{{ item.title }}</view> <view class="demo-title">{{ item.title }}</view>
<view class="demo-price">{{ item.price }}</view> <view class="demo-price">{{ item.price }}</view>
<view class="demo-tag"> <view class="demo-tag">
...@@ -38,7 +27,6 @@ ...@@ -38,7 +27,6 @@
<view class="demo-tag-text">放心购</view> <view class="demo-tag-text">放心购</view>
</view> </view>
<view class="demo-shop">{{ item.shop }}</view> <view class="demo-shop">{{ item.shop }}</view>
<!-- 微信小程序无效,因为它不支持在template中引入组件 -->
<view class="u-close"> <view class="u-close">
<u-icon name="close-circle-fill" color="#fa3534" size="34" @click="remove(item.id)"></u-icon> <u-icon name="close-circle-fill" color="#fa3534" size="34" @click="remove(item.id)"></u-icon>
</view> </view>
......
<template> <template>
<view class=""> <view class="wrap">
<u-checkbox-group @change="checkboxGroupChange"> <u-waterfall v-model="flowList" ref="uWaterfall">
<u-checkbox <template v-slot:left="{ leftList }">
@change="checkboxChange" <view class="demo-warter" v-for="(item, index) in leftList" :key="index">
v-model="item.checked" <view class="" @tap="click1(item)">
v-for="(item, index) in list" :key="index" <!-- 警告:微信小程序不支持嵌入lazyload组件,请自行如下使用image标签 -->
:name="item.name" <!-- #ifndef MP-WEIXIN -->
>{{item.name}}</u-checkbox> <u-lazy-load threshold="-450" border-radius="10" :image="item.image" :index="index"></u-lazy-load>
</u-checkbox-group> <!-- #endif -->
<u-button @click="checkedAll">全选</u-button> <!-- #ifdef MP-WEIXIN -->
<view class="demo-img-wrap"><image class="demo-image" :src="item.image" mode="widthFix"></image></view>
<!-- #endif -->
<view class="demo-title">{{ item.title }}</view>
<view class="demo-price">{{ item.price }}</view>
<view class="demo-tag">
<view class="demo-tag-owner">自营</view>
<view class="demo-tag-text">放心购</view>
</view>
<view class="demo-shop">{{ item.shop }}</view>
<!-- 微信小程序无效,因为它不支持在template中引入组件 -->
<view class="u-close">
<u-icon name="close-circle-fill" color="#fa3534" size="34" @click="remove(item.id)"></u-icon>
</view>
</view>
</view>
</template>
<template v-slot:right="{ rightList }">
<view class="demo-warter" v-for="(item, index) in rightList" :key="index">
<!-- #ifndef MP-WEIXIN -->
<u-lazy-load threshold="-450" border-radius="10" :image="item.image" :index="index"></u-lazy-load>
<!-- #endif -->
<!-- #ifdef MP-WEIXIN -->
<view class="demo-img-wrap"><image class="demo-image" :src="item.image" mode="widthFix"></image></view>
<!-- #endif -->
<view class="demo-title">{{ item.title }}</view>
<view class="demo-price">{{ item.price }}</view>
<view class="demo-tag">
<view class="demo-tag-owner">自营</view>
<view class="demo-tag-text">放心购</view>
</view>
<view class="demo-shop">{{ item.shop }}</view>
<!-- 微信小程序无效,因为它不支持在template中引入组件 -->
<view class="u-close">
<u-icon name="close-circle-fill" color="#fa3534" size="34" @click="remove(item.id)"></u-icon>
</view>
</view>
</template>
</u-waterfall>
<u-loadmore bg-color="rgb(240, 240, 240)" :status="loadStatus" @loadmore="addRandomData"></u-loadmore>
</view> </view>
</template> </template>
...@@ -16,40 +55,186 @@ ...@@ -16,40 +55,186 @@
export default { export default {
data() { data() {
return { return {
loadStatus: 'loadmore',
flowList: [],
list: [ list: [
{ {
name: 'apple', price: 35,
checked: false, title: '北国风光,千里冰封,万里雪飘',
disabled: false shop: '李白杜甫白居易旗舰店',
image: 'http://pic.sc.chinaz.com/Files/pic/pic9/202002/zzpic23327_s.jpg'
}, },
{ {
name: 'banner', price: 75,
checked: false, title: '望长城内外,惟余莽莽',
disabled: false shop: '李白杜甫白居易旗舰店',
image: 'http://pic.sc.chinaz.com/Files/pic/pic9/202002/zzpic23325_s.jpg'
}, },
{ {
name: 'orange', price: 385,
checked: false, title: '大河上下,顿失滔滔',
disabled: false shop: '李白杜甫白居易旗舰店',
image: 'http://pic2.sc.chinaz.com/Files/pic/pic9/202002/hpic2119_s.jpg'
},
{
price: 784,
title: '欲与天公试比高',
shop: '李白杜甫白居易旗舰店',
image: 'http://pic2.sc.chinaz.com/Files/pic/pic9/202002/zzpic23369_s.jpg'
},
{
price: 7891,
title: '须晴日,看红装素裹,分外妖娆',
shop: '李白杜甫白居易旗舰店',
image: 'http://pic2.sc.chinaz.com/Files/pic/pic9/202002/hpic2130_s.jpg'
},
{
price: 2341,
shop: '李白杜甫白居易旗舰店',
title: '江山如此多娇,引无数英雄竞折腰',
image: 'http://pic1.sc.chinaz.com/Files/pic/pic9/202002/zzpic23346_s.jpg'
},
{
price: 661,
shop: '李白杜甫白居易旗舰店',
title: '惜秦皇汉武,略输文采',
image: 'http://pic1.sc.chinaz.com/Files/pic/pic9/202002/zzpic23344_s.jpg'
},
{
price: 1654,
title: '唐宗宋祖,稍逊风骚',
shop: '李白杜甫白居易旗舰店',
image: 'http://pic1.sc.chinaz.com/Files/pic/pic9/202002/zzpic23343_s.jpg'
},
{
price: 1678,
title: '一代天骄,成吉思汗',
shop: '李白杜甫白居易旗舰店',
image: 'http://pic1.sc.chinaz.com/Files/pic/pic9/202002/zzpic23343_s.jpg'
},
{
price: 924,
title: '只识弯弓射大雕',
shop: '李白杜甫白居易旗舰店',
image: 'http://pic1.sc.chinaz.com/Files/pic/pic9/202002/zzpic23343_s.jpg'
},
{
price: 8243,
title: '俱往矣,数风流人物,还看今朝',
shop: '李白杜甫白居易旗舰店',
image: 'http://pic1.sc.chinaz.com/Files/pic/pic9/202002/zzpic23343_s.jpg'
} }
] ]
}; };
}, },
onLoad() {
this.addRandomData();
},
onReachBottom() {
this.loadStatus = 'loading';
// 模拟数据加载
setTimeout(() => {
this.addRandomData();
this.loadStatus = 'loadmore';
}, 1000);
},
methods: { methods: {
// 选中某个复选框时,由checkbox时触发 addRandomData() {
checkboxChange(e) { for (let i = 0; i < 10; i++) {
console.log(e); let index = this.$u.random(0, this.list.length - 1);
// 先转成字符串再转成对象,避免数组对象引用导致数据混乱
let item = JSON.parse(JSON.stringify(this.list[index]));
item.id = this.$u.guid();
this.flowList.push(item);
}
},
remove(id) {
this.$refs.uWaterfall.remove(id);
}, },
// 选中任一checkbox时,由checkbox-group触发 clear() {
checkboxGroupChange(e) { this.$refs.uWaterfall.clear();
// console.log(e);
}, },
// 全选 click1(item){
checkedAll() { console.log(item);
this.list.map(val => {
val.checked = true;
})
} }
} }
}; };
</script> </script>
\ No newline at end of file
<style>
/* page不能写带scope的style标签中,否则无效 */
page {
background-color: rgb(240, 240, 240);
}
</style>
<style lang="scss" scoped>
.demo-warter {
border-radius: 8px;
margin: 5px;
background-color: #ffffff;
padding: 8px;
position: relative;
}
.u-close {
position: absolute;
top: 32rpx;
right: 32rpx;
}
.demo-img-wrap {
}
.demo-image {
width: 100%;
border-radius: 4px;
}
.demo-title {
font-size: 30rpx;
margin-top: 5px;
color: $u-main-color;
}
.demo-tag {
display: flex;
margin-top: 5px;
}
.demo-tag-owner {
background-color: $u-type-error;
color: #ffffff;
display: flex;
align-items: center;
padding: 4rpx 14rpx;
border-radius: 50rpx;
font-size: 20rpx;
line-height: 1;
}
.demo-tag-text {
border: 1px solid $u-type-primary;
color: $u-type-primary;
margin-left: 10px;
border-radius: 50rpx;
line-height: 1;
padding: 4rpx 14rpx;
display: flex;
align-items: center;
border-radius: 50rpx;
font-size: 20rpx;
}
.demo-price {
font-size: 30rpx;
color: $u-type-error;
margin-top: 5px;
}
.demo-shop {
font-size: 22rpx;
color: $u-tips-color;
margin-top: 5px;
}
</style>
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
zIndex: uZIndex, zIndex: uZIndex,
opacity: opacity opacity: opacity
}, customStyle]"> }, customStyle]">
<view class="u-back-top__content" v-if="!$slots.default"> <view class="u-back-top__content" v-if="!$slots.default && !$slots.$default">
<u-icon @click="backToTop" :name="icon" :custom-style="iconStyle"></u-icon> <u-icon @click="backToTop" :name="icon" :custom-style="iconStyle"></u-icon>
<view class="u-back-top__content__tips"> <view class="u-back-top__content__tips">
{{tips}} {{tips}}
......
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
/** /**
* card 卡片 * card 卡片
* @description 卡片组件一般用于多个列表条目,且风格统一的场景 * @description 卡片组件一般用于多个列表条目,且风格统一的场景
* @tutorial https://www.uviewui.com/components/line.html * @tutorial https://www.uviewui.com/components/card.html
* @property {Boolean} full 卡片与屏幕两侧是否留空隙(默认false) * @property {Boolean} full 卡片与屏幕两侧是否留空隙(默认false)
* @property {String} title 头部左边的标题 * @property {String} title 头部左边的标题
* @property {String} title-color 标题颜色(默认#303133) * @property {String} title-color 标题颜色(默认#303133)
......
<template> <template>
<view class="u-dropdown-item" v-if="active" @touchmove.stop.prevent="() => {}" @tap.stop.prevent="() => {}"> <view class="u-dropdown-item" v-if="active" @touchmove.stop.prevent="() => {}" @tap.stop.prevent="() => {}">
<block v-if="!$slots.default"> <block v-if="!$slots.default && !$slots.$default">
<scroll-view scroll-y="true" :style="{ <scroll-view scroll-y="true" :style="{
height: $u.addUnit(height) height: $u.addUnit(height)
}"> }">
...@@ -21,6 +21,18 @@ ...@@ -21,6 +21,18 @@
</template> </template>
<script> <script>
/**
* dropdown-item 下拉菜单
* @description 该组件一般用于向下展开菜单,同时可切换多个选项卡的场景
* @tutorial http://uviewui.com/components/dropdown.html
* @property {String | Number} v-model 双向绑定选项卡选择值
* @property {String} title 菜单项标题
* @property {Array[Object]} options 选项数据,如果传入了默认slot,此参数无效
* @property {Boolean} disabled 是否禁用此选项卡(默认false)
* @property {String | Number} duration 选项卡展开和收起的过渡时间,单位ms(默认300)
* @property {String | Number} height 弹窗下拉内容的高度(内容超出将会滚动)(默认auto)
* @example <u-dropdown-item title="标题"></u-dropdown-item>
*/
export default { export default {
name: 'u-dropdown-item', name: 'u-dropdown-item',
props: { props: {
......
...@@ -21,7 +21,8 @@ ...@@ -21,7 +21,8 @@
</view> </view>
<view class="u-dropdown__content" :style="[contentStyle, { <view class="u-dropdown__content" :style="[contentStyle, {
transition: `opacity ${duration / 1000}s linear`, transition: `opacity ${duration / 1000}s linear`,
top: $u.addUnit(height) top: $u.addUnit(height),
height: contentHeight + 'px'
}]" }]"
@tap="maskClick" @touchmove.stop.prevent> @tap="maskClick" @touchmove.stop.prevent>
<view @tap.stop.prevent class="u-dropdown__content__popup" :style="[popupStyle]"> <view @tap.stop.prevent class="u-dropdown__content__popup" :style="[popupStyle]">
...@@ -33,6 +34,23 @@ ...@@ -33,6 +34,23 @@
</template> </template>
<script> <script>
/**
* dropdown 下拉菜单
* @description 该组件一般用于向下展开菜单,同时可切换多个选项卡的场景
* @tutorial http://uviewui.com/components/dropdown.html
* @property {String} active-color 标题和选项卡选中的颜色(默认#2979ff)
* @property {String} inactive-color 标题和选项卡未选中的颜色(默认#606266)
* @property {Boolean} close-on-click-mask 点击遮罩是否关闭菜单(默认true)
* @property {Boolean} close-on-click-self 点击当前激活项标题是否关闭菜单(默认true)
* @property {String | Number} duration 选项卡展开和收起的过渡时间,单位ms(默认300)
* @property {String | Number} height 标题菜单的高度,单位任意(默认80)
* @property {String | Number} border-radius 菜单展开内容下方的圆角值,单位任意(默认0)
* @property {Boolean} border-bottom 标题菜单是否显示下边框(默认false)
* @property {String | Number} title-size 标题的字体大小,单位任意,数值默认为rpx单位(默认28)
* @event {Function} open 下拉菜单被打开时触发
* @event {Function} close 下拉菜单被关闭时触发
* @example <u-dropdown></u-dropdown>
*/
export default { export default {
name: 'u-dropdown', name: 'u-dropdown',
props: { props: {
...@@ -75,6 +93,11 @@ ...@@ -75,6 +93,11 @@
titleSize: { titleSize: {
type: [Number, String], type: [Number, String],
default: 28 default: 28
},
// 下拉出来的内容部分的圆角值
borderRadius: {
type: [Number, String],
default: 0
} }
}, },
data() { data() {
...@@ -91,7 +114,8 @@ ...@@ -91,7 +114,8 @@
opacity: 0 opacity: 0
}, },
// 让某个菜单保持高亮的状态 // 让某个菜单保持高亮的状态
highlightIndex: 99999 highlightIndex: 99999,
contentHeight: 0
} }
}, },
computed: { computed: {
...@@ -101,6 +125,7 @@ ...@@ -101,6 +125,7 @@
// 进行Y轴位移,展开状态时,恢复原位。收齐状态时,往上位移100%,进行隐藏 // 进行Y轴位移,展开状态时,恢复原位。收齐状态时,往上位移100%,进行隐藏
style.transform = `translateY(${this.active ? 0 : '-100%'})` style.transform = `translateY(${this.active ? 0 : '-100%'})`
style['transition-duration'] = this.duration / 1000 + 's'; style['transition-duration'] = this.duration / 1000 + 's';
style.borderRadius = `0 0 ${this.$u.addUnit(this.borderRadius)} ${this.$u.addUnit(this.borderRadius)}`;
return style; return style;
} }
}, },
...@@ -108,6 +133,9 @@ ...@@ -108,6 +133,9 @@
// 引用所有子组件(u-dropdown-item)的this,不能在data中声明变量,否则在微信小程序会造成循环引用而报错 // 引用所有子组件(u-dropdown-item)的this,不能在data中声明变量,否则在微信小程序会造成循环引用而报错
this.children = []; this.children = [];
}, },
mounted() {
this.getContentHeight();
},
methods: { methods: {
init() { init() {
// 当某个子组件内容变化时,触发父组件的init,父组件再让每一个子组件重新初始化一遍 // 当某个子组件内容变化时,触发父组件的init,父组件再让每一个子组件重新初始化一遍
...@@ -171,6 +199,20 @@ ...@@ -171,6 +199,20 @@
// 外部手动设置某个菜单高亮 // 外部手动设置某个菜单高亮
highlight(index = undefined) { highlight(index = undefined) {
this.highlightIndex = index !== undefined ? index : 99999; this.highlightIndex = index !== undefined ? index : 99999;
},
// 获取下拉菜单内容的高度
getContentHeight() {
// 这里的原理为,因为dropdown组件是相对定位的,它的下拉出来的内容,必须给定一个高度
// 才能让遮罩占满菜单一下,直到屏幕底部的高度
// this.$u.sys()为uView封装的获取设备信息的方法
let windowHeight = this.$u.sys().windowHeight;
this.$uGetRect('.u-dropdown__menu').then(res => {
// 这里获取的是dropdown的尺寸,在H5上,uniapp获取尺寸是有bug的(以前提出修复过,后来又出现了此bug,目前hx2.8.11版本)
// H5端bug表现为元素尺寸的top值为导航栏底部到到元素的上边沿的距离,但是元素的bottom值确是导航栏顶部到元素底部的距离
// 二者是互相矛盾的,本质原因是H5端导航栏非原生,uni的开发者大意造成
// 这里取菜单栏的botton值合理的,不能用res.top,否则页面会造成滚动
this.contentHeight = windowHeight - res.bottom;
})
} }
} }
} }
...@@ -182,6 +224,7 @@ ...@@ -182,6 +224,7 @@
.u-dropdown { .u-dropdown {
flex: 1; flex: 1;
width: 100%; width: 100%;
position: relative;
&__menu { &__menu {
@include vue-flex; @include vue-flex;
...@@ -220,6 +263,7 @@ ...@@ -220,6 +263,7 @@
left: 0px; left: 0px;
bottom: 0; bottom: 0;
overflow: hidden; overflow: hidden;
&__mask { &__mask {
position: absolute; position: absolute;
...@@ -236,6 +280,7 @@ ...@@ -236,6 +280,7 @@
z-index: 10; z-index: 10;
transition: all 0.3s; transition: all 0.3s;
transform: translate3D(0, -100%, 0); transform: translate3D(0, -100%, 0);
overflow: hidden;
} }
} }
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
striped ? 'u-striped' : '', striped ? 'u-striped' : '',
striped && stripedActive ? 'u-striped-active' : '' striped && stripedActive ? 'u-striped-active' : ''
]" class="u-active" :style="[progressStyle]"> ]" class="u-active" :style="[progressStyle]">
<slot v-if="$slots.default" /> <slot v-if="$slots.default || $slots.$default" />
<block v-else-if="showPercent"> <block v-else-if="showPercent">
{{percent + '%'}} {{percent + '%'}}
</block> </block>
......
...@@ -100,7 +100,7 @@ ...@@ -100,7 +100,7 @@
// 激活样式 // 激活样式
activeColor: { activeColor: {
type: String, type: String,
default: 'red' default: '#2979ff'
}, },
// 未激活的样式 // 未激活的样式
inactiveColor: { inactiveColor: {
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<view class="u-model"> <view class="u-model">
<view v-if="showTitle" class="u-model__title u-line-1" :style="[titleStyle]">{{ title }}</view> <view v-if="showTitle" class="u-model__title u-line-1" :style="[titleStyle]">{{ title }}</view>
<view class="u-model__content"> <view class="u-model__content">
<view :style="[contentStyle]" v-if="$slots.default"> <view :style="[contentStyle]" v-if="$slots.default || $slots.$default">
<slot /> <slot />
</view> </view>
<view v-else class="u-model__content__message" :style="[contentStyle]">{{ content }}</view> <view v-else class="u-model__content__message" :style="[contentStyle]">{{ content }}</view>
......
...@@ -181,7 +181,7 @@ ...@@ -181,7 +181,7 @@
inputVal: 1, // 输入框中的值,不能直接使用props中的value,因为应该改变props的状态 inputVal: 1, // 输入框中的值,不能直接使用props中的value,因为应该改变props的状态
timer: null, // 用作长按的定时器 timer: null, // 用作长按的定时器
changeFromInner: false, // 值发生变化,是来自内部还是外部 changeFromInner: false, // 值发生变化,是来自内部还是外部
timer: null, // 内部定时器 innerChangeTimer: null, // 内部定时器
}; };
}, },
created() { created() {
...@@ -291,15 +291,15 @@ ...@@ -291,15 +291,15 @@
handleChange(value, type) { handleChange(value, type) {
if (this.disabled) return; if (this.disabled) return;
// 清除定时器,避免造成混乱 // 清除定时器,避免造成混乱
if(this.timer) { if(this.innerChangeTimer) {
clearTimeout(this.timer); clearTimeout(this.innerChangeTimer);
this.timer = null; this.innerChangeTimer = null;
} }
// 发出input事件,修改通过v-model绑定的值,达到双向绑定的效果 // 发出input事件,修改通过v-model绑定的值,达到双向绑定的效果
this.changeFromInner = true; this.changeFromInner = true;
// 一定时间内,清除changeFromInner标记,否则内部值改变后 // 一定时间内,清除changeFromInner标记,否则内部值改变后
// 外部通过程序修改value值,将会无效 // 外部通过程序修改value值,将会无效
setTimeout(() => { this.innerChangeTimer = setTimeout(() => {
this.changeFromInner = false; this.changeFromInner = false;
}, 150); }, 150);
this.$emit('input', Number(value)); this.$emit('input', Number(value));
......
...@@ -91,7 +91,7 @@ ...@@ -91,7 +91,7 @@
// 所以需要手动通知子组件,这里返回一个parentData变量,供watch监听,在其中去通知每一个子组件重新从父组件(u-radio-group) // 所以需要手动通知子组件,这里返回一个parentData变量,供watch监听,在其中去通知每一个子组件重新从父组件(u-radio-group)
// 拉取父组件新的变化后的参数 // 拉取父组件新的变化后的参数
parentData() { parentData() {
return [this.disabled, this.activeColor, this.size, this.labelDisabled, this.shape, this.iconSize, this.width, this.wrap]; return [this.value, this.disabled, this.activeColor, this.size, this.labelDisabled, this.shape, this.iconSize, this.width, this.wrap];
} }
}, },
methods: { methods: {
......
...@@ -91,6 +91,7 @@ ...@@ -91,6 +91,7 @@
this.parent = false; this.parent = false;
// 支付宝小程序不支持provide/inject,所以使用这个方法获取整个父组件,在created定义,避免循环引用 // 支付宝小程序不支持provide/inject,所以使用这个方法获取整个父组件,在created定义,避免循环引用
this.updateParentData(); this.updateParentData();
this.parent.children.push(this);
}, },
computed: { computed: {
// 是否禁用,如果父组件u-raios-group禁用的话,将会忽略子组件的配置 // 是否禁用,如果父组件u-raios-group禁用的话,将会忽略子组件的配置
......
...@@ -150,6 +150,9 @@ export default { ...@@ -150,6 +150,9 @@ export default {
}, },
elActiveIcon() { elActiveIcon() {
const len = this.icons.length const len = this.icons.length
// 此处规则类似于下方的elActiveColor参数,都是根据一定的规则,显示不同的图标
// 结果可能如此:icons参数传递了3个图标,当选中两个时,用第一个图标,4个时,用第二个图标
// 第三个时,用第三个图标作为激活的图标
if (len && len <= this.count) { if (len && len <= this.count) {
const step = Math.round(this.activeIndex / Math.round(this.count / len)) const step = Math.round(this.activeIndex / Math.round(this.count / len))
if (step < 1) return this.icons[0] if (step < 1) return this.icons[0]
...@@ -160,6 +163,8 @@ export default { ...@@ -160,6 +163,8 @@ export default {
}, },
elActiveColor() { elActiveColor() {
const len = this.colors.length const len = this.colors.length
// 如果有设置colors参数(此参数用于将图标分段,比如一共5颗星,colors传3个颜色值,那么根据一定的规则,2颗星可能为第一个颜色
// 4颗星为第二个颜色值,5颗星为第三个颜色值)
if (len && len <= this.count) { if (len && len <= this.count) {
const step = Math.round(this.activeIndex / Math.round(this.count / len)) const step = Math.round(this.activeIndex / Math.round(this.count / len))
if (step < 1) return this.colors[0] if (step < 1) return this.colors[0]
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<view class="u-slider__button-wrap" @touchstart="onTouchStart" <view class="u-slider__button-wrap" @touchstart="onTouchStart"
@touchmove="onTouchMove" @touchend="onTouchEnd" @touchmove="onTouchMove" @touchend="onTouchEnd"
@touchcancel="onTouchEnd"> @touchcancel="onTouchEnd">
<slot v-if="$slots.default"/> <slot v-if="$slots.default || $slots.$default"/>
<view v-else class="u-slider__button" :style="[blockStyle, { <view v-else class="u-slider__button" :style="[blockStyle, {
height: blockWidth + 'rpx', height: blockWidth + 'rpx',
width: blockWidth + 'rpx', width: blockWidth + 'rpx',
......
...@@ -120,9 +120,9 @@ ...@@ -120,9 +120,9 @@
}, },
data() { data() {
return { return {
// 由于安卓太菜了,通过css居中凸起按钮的外层元素有误差,故通过js计算将其 // 由于安卓太菜了,通过css居中凸起按钮的外层元素有误差,故通过js计算将其
midButtonLeft: '50%', midButtonLeft: '50%',
pageUrl: '', // 当前 pageUrl: '', // 当前页面URL
} }
}, },
created() { created() {
......
// 此版本发布于2020-09-16 // 此版本发布于2020-09-22
let version = '1.7.0'; let version = '1.7.3';
export default { export default {
v: version, v: version,
......
{ {
"name": "uview-ui", "name": "uview-ui",
"version": "1.7.0", "version": "1.7.3",
"description": "uView UI,是uni-app生态优秀的UI框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水", "description": "uView UI,是uni-app生态优秀的UI框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水",
"main": "index.js", "main": "index.js",
"keywords": ["uview", "uView", "uni-app", "uni-app ui", "uniapp", "uviewui", "uview ui", "uviewUI", "uViewui", "uViewUI", "uView UI", "uni ui", "uni UI", "uniapp ui", "ui", "UI框架", "uniapp ui框架", "uniapp UI"], "keywords": ["uview", "uView", "uni-app", "uni-app ui", "uniapp", "uviewui", "uview ui", "uviewUI", "uViewui", "uViewUI", "uView UI", "uni ui", "uni UI", "uniapp ui", "ui", "UI框架", "uniapp ui框架", "uniapp UI"],
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment