Commit 8f166286 authored by wlxuqu's avatar wlxuqu

1. 优化懒加载的方法

2. 优化步进器的代码逻辑
3. 修改评分组件对支付宝小程序的支持
4. 添加搜索组件的maxlength参数
5. 优化$u.getRect()方法,使其支持支付宝小程序
6. 修改README.md的描述错误
7. 优化按钮点击事件,阻止冒泡
8. 修复Empty组件的历史记录图标显示不全的问题,同时使该组件垂直居中
9. Icon图标组件新增label功能,支持右边和下方插入描述文字
10. 优化NoNetwork无网络提示组件,使其垂直居中
11. 给NumberBox步进器组件添加disabled-input组件,控制输入框是否可输入内容
12. 优化Swiper组件在App上滑动时圆角无效的问题
13. 改正Switch开关选择器参数的拼写错误
14. 添加Upload上传组件控制右上角删除图标的样式参数,可以定义颜色,背景等
15. 新增Card卡片组件
16. 新增Line线条组件
17. 给$u.test.empty改名$u.test.isEmpty,同时保留$u.test.empty,二者功能一致
parent 9d200c0c
/unpackage/dist/* /unpackage/dist/*
/node_modules/* /node_modules/*
/.idea/* /.idea/*
deploy.sh
...@@ -46,7 +46,7 @@ Vue.use(uView); ...@@ -46,7 +46,7 @@ Vue.use(uView);
3. `uni.scss`引入全局scss变量文件 3. `uni.scss`引入全局scss变量文件
```css ```css
/* uni.scss */ /* uni.scss */
@import "uview-ui/themb.scss"; @import "uview-ui/theme.scss";
``` ```
4. `pages.json`配置easycom规则(按需引入) 4. `pages.json`配置easycom规则(按需引入)
......
...@@ -113,7 +113,8 @@ ...@@ -113,7 +113,8 @@
"h5" : { "h5" : {
"template" : "template.h5.html", "template" : "template.h5.html",
"router" : { "router" : {
"mode" : "history" "mode" : "hash",
"base" : ""
}, },
"optimization" : { "optimization" : {
"treeShaking" : { "treeShaking" : {
......
...@@ -2,14 +2,14 @@ ...@@ -2,14 +2,14 @@
"easycom": { "easycom": {
"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue" "^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
}, },
"condition": { //模式配置,仅开发期间生效 // "condition": { //模式配置,仅开发期间生效
"current": 0, //当前激活的模式(list 的索引项) // "current": 0, //当前激活的模式(list 的索引项)
"list": [{ // "list": [{
"name": "test", //模式名称 // "name": "test", //模式名称
"path": "pages/componentsA/navbar/index", //启动页面,必选 // "path": "pages/componentsB/line/index", //启动页面,必选
"query": "id=1&name=2" //启动参数,在页面的-+onLoad函数里面得到 // "query": "id=1&name=2" //启动参数,在页面的-+onLoad函数里面得到
}] // }]
}, // },
"pages": [ "pages": [
// 演示-组件 // 演示-组件
{ {
...@@ -578,6 +578,20 @@ ...@@ -578,6 +578,20 @@
{ {
"root": "pages/componentsB", "root": "pages/componentsB",
"pages": [ "pages": [
// line-线条
{
"path": "line/index",
"style": {
"navigationBarTitleText": "line-线条"
}
},
// card-卡片
{
"path": "card/index",
"style": {
"navigationBarTitleText": "card-卡片"
}
},
// divider-分割线 // divider-分割线
{ {
"path": "divider/index", "path": "divider/index",
......
<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" v-if="bottomSlot">
<u-icon name="chat-fill" size="34" color="" 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 vibrateShort :list="['显示', '隐藏']" @change="thumbChange"></u-subsection>
</view>
<view class="u-config-item">
<view class="u-item-title">内边距</view>
<u-subsection vibrateShort current="1" :list="['20', '30', '40']" @change="paddingChange"></u-subsection>
</view>
<view class="u-config-item">
<view class="u-item-title">底部</view>
<u-subsection vibrateShort :list="['显示', '隐藏']" @change="bottomChange"></u-subsection>
</view>
<view class="u-config-item">
<view class="u-item-title">外边框</view>
<u-subsection vibrateShort :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>
<template>
<view class="u-demo">
<view class="u-demo-wrap">
<view class="u-demo-title">演示效果</view>
<view class="u-demo-area">
<u-line 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 vibrateShort :list="['primary', 'success', 'warning', 'error', 'info']" @change="colorChange"></u-subsection>
</view>
<view class="u-config-item">
<view class="u-item-title">细边</view>
<u-subsection vibrateShort :list="['是', '否']" @change="hairLineChange"></u-subsection>
</view>
<view class="u-config-item">
<view class="u-item-title">方向</view>
<u-subsection vibrateShort :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']
}
},
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';
},
}
}
</script>
<style scoped lang="scss">
.u-demo {
}
</style>
<template> <template>
<!-- <view class="wrap">
<view class="item">
<u-alert-tips @close="close" closeText="close" :closeAble="true" :show="show" type="primary" :title="title" :description="description"></u-alert-tips>
</view>
<view class="item">
<u-alert-tips type="warning" :showIcon="false" :closeAble="true" :title="title" :description="description"></u-alert-tips>
</view>
<view class="item">
<u-alert-tips type="success" :title="title" :closeAble="false" :description="description"></u-alert-tips>
</view>
<view class="item">
<u-alert-tips type="error" :title="title" closeText="close" :closeAble="true"></u-alert-tips>
</view>
<view class="item">
<u-alert-tips type="info" :title="title"></u-alert-tips>
</view>
</view> -->
<view class="u-demo"> <view class="u-demo">
<view class="u-demo-wrap"> <view class="u-demo-wrap">
<view class="u-demo-title">演示效果</view> <view class="u-demo-title">演示效果</view>
......
<template> <template>
<view class=""> <u-card :title="title" :sub-title="subTitle" :thumb="thumb">
<u-modal v-model="show" @confirm="confirm" :async-close="true"></u-modal> <view class="" slot="body">
<u-button @click="showModal">弹起Modal</u-button> <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>
<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 name="chat-fill" size="34" color="" label="30评论"></u-icon></view>
</u-card>
</template> </template>
<script> <script>
export default { export default {
data() { data() {
return { return {
show: false title: '素胚勾勒出青花,笔锋浓转淡',
subTitle: '2020-05-15',
thumb: 'http://pic2.sc.chinaz.com/Files/pic/pic9/202002/hpic2119_s.jpg',
};
} }
}, };
onLoad: function(opt) { </script>
}, <style scoped lang="scss">
methods:{ .u-card-wrap {
showModal() { background-color: $u-bg-color;
this.show = true; padding: 1px;
},
confirm() {
setTimeout(() => {
this.show = false;
}, 3000)
} }
.u-body-item {
font-size: 32rpx;
color: #333;
padding: 20rpx 10rpx;
} }
}
</script>
.u-body-item image {
width: 120rpx;
flex: 0 0 120rpx;
height: 120rpx;
border-radius: 8rpx;
margin-left: 12rpx;
}
</style>
...@@ -146,6 +146,14 @@ export default [{ ...@@ -146,6 +146,14 @@ export default [{
}, { }, {
groupName: '布局组件', groupName: '布局组件',
list: [{ list: [{
path: '/pages/componentsB/line/index',
icon: 'line',
title: 'Line 线条',
},{
path: '/pages/componentsB/card/index',
icon: 'card',
title: 'Card 卡片',
}, {
path: '/pages/componentsC/mask/index', path: '/pages/componentsC/mask/index',
icon: 'mask', icon: 'mask',
title: 'Mask 遮罩层', title: 'Mask 遮罩层',
......
...@@ -46,7 +46,7 @@ Vue.use(uView); ...@@ -46,7 +46,7 @@ Vue.use(uView);
3. `uni.scss`引入全局scss变量文件 3. `uni.scss`引入全局scss变量文件
```css ```css
/* uni.scss */ /* uni.scss */
@import "uview-ui/themb.scss"; @import "uview-ui/theme.scss";
``` ```
4. `pages.json`配置easycom规则(按需引入) 4. `pages.json`配置easycom规则(按需引入)
......
<template> <template>
<u-popup mode="bottom" :border-radius="borderRadius" :popup="false" v-model="value" :maskCloseAble="maskCloseAble" <u-popup mode="bottom" :border-radius="borderRadius" :popup="false" v-model="value" :maskCloseAble="maskCloseAble"
length="auto" :safeAreaInsetBottom="safeAreaInsetBottom" @close="popupClose" :z-index="uZIndex"> length="auto" :safeAreaInsetBottom="safeAreaInsetBottom" @close="popupClose" :z-index="uZIndex">
<view class="u-tips u-border-bottom" v-if="tips.text" :style="tipsStyle"> <view class="u-tips u-border-bottom" v-if="tips.text" :style="[tipsStyle]">
{{tips.text}} {{tips.text}}
</view> </view>
<block v-for="(item, index) in list" :key="index"> <block v-for="(item, index) in list" :key="index">
......
...@@ -98,16 +98,6 @@ ...@@ -98,16 +98,6 @@
return { return {
} }
}, },
watch: {
show(val) {
if (val == false) {
// 先opacity隐藏,再移除
setTimeout(() => {
this.showAlert = false;
}, 300);
}
}
},
computed: { computed: {
// 计算字体颜色,如果没有自定义的,就用uview主题颜色 // 计算字体颜色,如果没有自定义的,就用uview主题颜色
computeColor() { computeColor() {
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
@opensetting="opensetting" @opensetting="opensetting"
@launchapp="launchapp" @launchapp="launchapp"
:style="[buttonStyle]" :style="[buttonStyle]"
@tap="click($event)" @tap.stop="click($event)"
:hover-class="getHoverClass" :hover-class="getHoverClass"
:loading="loading" :loading="loading"
> >
......
<template>
<view
class="u-card"
@tap.stop="click"
:class="{ 'u-border': border, 'u-card-full': full }"
:style="{
borderRadius: full ? 0 : borderRadius + 'rpx',
margin: margin
}"
>
<view
class="u-card__head"
:style="[headStyle, {padding: padding + 'rpx'}]"
:class="{
'u-border-bottom': headBorderBottom
}"
@tap="headClick"
>
<view v-if="!$slots.head" class="u-flex u-row-between">
<view class="u-card__head--left u-flex" v-if="title">
<image
:src="thumb"
class="u-card__head--left__thumb"
mode="aspectfull"
v-if="thumb"
:style="{
height: thumbWidth + 'rpx',
width: thumbWidth + 'rpx',
borderRadius: thumbCircle ? '100rpx' : '6rpx'
}"
></image>
<text
class="u-card__head--left__title u-line-1"
:style="{
fontSize: titleSize + 'rpx',
color: titleColor
}"
>
{{ title }}
</text>
</view>
<view class="u-card__head--right" v-if="subTitle">
<text
class="u-card__head__title__text"
:style="{
fontSize: subTitleSize + 'rpx',
color: subTitleColor
}"
>
{{ subTitle }}
</text>
</view>
</view>
<slot name="head" v-else />
</view>
<view @tap="bodyClick" class="u-card__body" :style="[bodyStyle, {padding: padding + 'rpx'}]"><slot name="body" /></view>
<view
class="u-card__foot"
@tap="footClick"
:style="[footStyle, {padding: $slots.foot ? padding + 'rpx' : 0}]"
:class="{
'u-border-top': footBorderTop
}"
>
<slot name="foot" />
</view>
</view>
</template>
<script>
/**
* card 卡片
* @description 卡片组件一般用于多个列表条目,且风格统一的场景
* @tutorial https://www.uviewui.com/components/line.html
* @property {Boolean} full 卡片与屏幕两侧是否留空隙(默认false)
* @property {String} title 头部左边的标题
* @property {String} title-color 标题颜色(默认#303133)
* @property {String | Number} title-size 标题字体大小,单位rpx(默认30)
* @property {String} sub-title 头部右边的副标题
* @property {String} sub-title-color 副标题颜色(默认#909399)
* @property {String | Number} sub-title-size 副标题字体大小(默认26)
* @property {Boolean} border 是否显示边框(默认true)
* @property {String | Number} index 用于标识点击了第几个卡片
* @property {String} margin 卡片与屏幕两边和上下元素的间距,需带单位,如"30rpx 20rpx"(默认30rpx)
* @property {String | Number} border-radius 卡片整体的圆角值,单位rpx(默认16)
* @property {Object} head-style 头部自定义样式,对象形式
* @property {Object} body-style 中部自定义样式,对象形式
* @property {Object} foot-style 底部自定义样式,对象形式
* @property {Boolean} head-border-bottom 是否显示头部的下边框(默认true)
* @property {Boolean} foot-border-top 是否显示底部的上边框(默认true)
* @property {String} thumb 缩略图路径,如设置将显示在标题的左边,不建议使用相对路径
* @property {String | Number} thumb-width 缩略图的宽度,高等于宽,单位rpx(默认60)
* @property {Boolean} thumb-circle 缩略图是否为圆形(默认false)
* @event {Function} click 整个卡片任意位置被点击时触发
* @event {Function} head-click 卡片头部被点击时触发
* @event {Function} body-click 卡片主体部分被点击时触发
* @event {Function} foot-click 卡片底部部分被点击时触发
* @example <u-card padding="30" title="card"></u-card>
*/
export default {
name: 'u-card',
props: {
// 与屏幕两侧是否留空隙
full: {
type: Boolean,
default: false
},
// 标题
title: {
type: String,
default: ''
},
// 标题颜色
titleColor: {
type: String,
default: '#303133'
},
// 标题字体大小,单位rpx
titleSize: {
type: [Number, String],
default: '30'
},
// 副标题
subTitle: {
type: String,
default: ''
},
// 副标题颜色
subTitleColor: {
type: String,
default: '#909399'
},
// 副标题字体大小,单位rpx
subTitleSize: {
type: [Number, String],
default: '26'
},
// 是否显示外部边框,只对full=false时有效(卡片与边框有空隙时)
border: {
type: Boolean,
default: true
},
// 用于标识点击了第几个
index: {
type: [Number, String, Object],
default: ''
},
// 用于隔开上下左右的边距,带单位的写法,如:"30rpx 30rpx","20rpx 20rpx 30rpx 30rpx"
margin: {
type: String,
default: '30rpx'
},
// card卡片的圆角
borderRadius: {
type: [Number, String],
default: '16'
},
// 头部自定义样式,对象形式
headStyle: {
type: Object,
default() {
return {};
}
},
// 主体自定义样式,对象形式
bodyStyle: {
type: Object,
default() {
return {};
}
},
// 底部自定义样式,对象形式
footStyle: {
type: Object,
default() {
return {};
}
},
// 头部是否下边框
headBorderBottom: {
type: Boolean,
default: true
},
// 底部是否有上边框
footBorderTop: {
type: Boolean,
default: true
},
// 标题左边的缩略图
thumb: {
type: String,
default: ''
},
// 缩略图宽高,单位rpx
thumbWidth: {
type: [String, Number],
default: '60'
},
// 缩略图是否为圆形
thumbCircle: {
type: Boolean,
default: false
},
// 给head,body,foot的内边距
padding: {
type: [String, Number],
default: '30'
}
},
data() {
return {};
},
methods: {
click() {
this.$emit('click', this.index);
},
headClick() {
this.$emit('head-click', this.index);
},
bodyClick() {
this.$emit('body-click', this.index);
},
footClick() {
this.$emit('foot-click', this.index);
}
}
};
</script>
<style lang="scss" scoped>
.u-card {
position: relative;
overflow: hidden;
font-size: 28rpx;
background-color: #ffffff;
box-sizing: border-box;
&-full {
// 如果是与屏幕之间不留空隙,应该设置左右边距为0
margin-left: 0 !important;
margin-right: 0 !important;
}
&:after {
border-radius: 20rpx;
}
&__head {
&--left {
color: $u-main-color;
&__thumb {
margin-right: 16rpx;
}
&__title {
max-width: 400rpx;
}
}
&--right {
color: $u-tips-color;
}
}
&__body {
color: $u-content-color;
}
&__foot {
color: $u-tips-color;
}
}
</style>
...@@ -36,7 +36,7 @@ export default { ...@@ -36,7 +36,7 @@ export default {
text: '无权限' text: '无权限'
}, },
history: { history: {
image: 'data:image/png;base64,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', image: 'data:image/png;base64,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',
text: '无历史记录' text: '无历史记录'
}, },
news: { news: {
......
...@@ -100,7 +100,7 @@ ...@@ -100,7 +100,7 @@
flex-direction: column; flex-direction: column;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
padding-top: 30%; height: 100%;
} }
.u-image { .u-image {
......
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
* @tutorial https://www.uviewui.com/components/field.html * @tutorial https://www.uviewui.com/components/field.html
* @property {String} type 输入框的类型(默认text) * @property {String} type 输入框的类型(默认text)
* @property {String} icon label左边的图标,限uView的图标名称 * @property {String} icon label左边的图标,限uView的图标名称
* @property {Boolean} right-icon 输入框右边的(默认false) * @property {Boolean} right-icon 输入框右边的图标名称,限uView的图标名称(默认false)
* @property {Boolean} required 是否必填,左边您显示红色"*"号(默认false) * @property {Boolean} required 是否必填,左边您显示红色"*"号(默认false)
* @property {String} label 输入框左边的文字提示 * @property {String} label 输入框左边的文字提示
* @property {Boolean} password 是否密码输入方式(用点替换文字),type为text时有效(默认false) * @property {Boolean} password 是否密码输入方式(用点替换文字),type为text时有效(默认false)
......
<template> <template>
<text class="uicon" :class="customClass" :style="[iconStyle]" @tap="click" :hover-class="hoverClass" @touchstart="touchstart"></text> <view class="u-icon" :class="[labelPos == 'bottom' ? 'u-flex-col u-row-center' : 'u-flex u-col-center']">
<text class="u-icon__icon" :class="customClass" :style="[iconStyle]" @tap="click" :hover-class="hoverClass" @touchstart="touchstart"></text>
<text v-if="label" class="u-icon__label" :style="{
color: labelColor,
fontSize: labelSize + 'rpx',
marginLeft: labelPos == 'right' ? marginLeft + 'rpx' : 0,
marginTop: labelPos == 'bottom' ? marginTop + 'rpx' : 0,
}">{{label}}</text>
</view>
</template> </template>
<script> <script>
...@@ -9,7 +17,14 @@ ...@@ -9,7 +17,14 @@
* @tutorial https://www.uviewui.com/components/icon.html * @tutorial https://www.uviewui.com/components/icon.html
* @property {String} name 图标名称,见示例图标集 * @property {String} name 图标名称,见示例图标集
* @property {String} color 图标颜色(默认inherit) * @property {String} color 图标颜色(默认inherit)
* @property {String Number} size 图标字体大小,单位rpx(默认32) * @property {String | Number} size 图标字体大小,单位rpx(默认32)
* @property {String | Number} label-size label字体大小,单位rpx(默认28)
* @property {String} label 图标右侧的label文字(默认28)
* @property {String} label-pos label文字相对于图标的位置,只能right或bottom(默认right)
* @property {String} label-color label字体颜色(默认#606266)
* @property {String | Number} margin-left label在右侧时与图标的距离,单位rpx(默认6)
* @property {String | Number} margin-top label在下方时与图标的距离,单位rpx(默认6)
* @property {String} label-pos label相对于图标的位置,只能right或bottom(默认right)
* @property {String} index 一个用于区分多个图标的值,点击图标时通过click事件传出 * @property {String} index 一个用于区分多个图标的值,点击图标时通过click事件传出
* @property {String} hover-class 图标按下去的样式类,用法同uni的view组件的hover-class参数,详情见官网 * @property {String} hover-class 图标按下去的样式类,用法同uni的view组件的hover-class参数,详情见官网
* @event {Function} click 点击图标时触发 * @event {Function} click 点击图标时触发
...@@ -52,6 +67,36 @@ export default { ...@@ -52,6 +67,36 @@ export default {
customPrefix: { customPrefix: {
type: String, type: String,
default: 'uicon' default: 'uicon'
},
// 图标右边或者下面的文字
label: {
type: String,
default: ''
},
// label的位置,只能右边或者下边
labelPos: {
type: String,
default: 'right'
},
// label的大小
labelSize: {
type: [String, Number],
default: '28'
},
// label的颜色
labelColor: {
type: String,
default: '#606266'
},
// label与图标的距离(横向排列)
marginLeft: {
type: [String, Number],
default: '6'
},
// label与图标的距离(竖向排列)
marginTop: {
type: [String, Number],
default: '6'
} }
}, },
data() { data() {
...@@ -93,8 +138,12 @@ export default { ...@@ -93,8 +138,12 @@ export default {
<style scoped lang="scss"> <style scoped lang="scss">
@import '../../iconfont.css'; @import '../../iconfont.css';
.uicon { .u-icon {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
} }
.u-icon__label {
}
</style> </style>
<template>
<view class="u-line" :style="[lineStyle]">
</view>
</template>
<script>
/**
* line 线条
* @description 此组件一般用于显示一根线条,用于分隔内容块,有横向和竖向两种模式,且能设置0.5px线条,使用也很简单
* @tutorial https://www.uviewui.com/components/line.html
* @property {String} color 线条的颜色(默认#e4e7ed)
* @property {String} length 长度,竖向时表现为高度,横向时表现为长度,可以为百分比,带rpx单位的值等
* @property {String} direction 线条的方向,row-横向,col-竖向(默认row)
* @property {Boolean} hair-line 是否显示细线条(默认true)
* @example <u-line color="red"></u-line>
*/
export default {
name: 'u-line',
props: {
color: {
type: String,
default: '#e4e7ed'
},
// 长度,竖向时表现为高度,横向时表现为长度,可以为百分比,带rpx单位的值等
length: {
type: String,
default: '100%'
},
// 线条方向,col-竖向,row-横向
direction: {
type: String,
default: 'row'
},
// 是否显示细边框
hairLine: {
type: Boolean,
default: true
}
},
computed: {
lineStyle() {
let style = {};
style.backgroundColor = this.color;
if(this.direction == 'row') {
style.height = '1px';
style.width = this.length;
if(this.hairLine) style.transform = 'scaleY(0.5)';
} else {
style.width = '1px';
style.height = this.length;
if(this.hairLine) style.transform = 'scaleX(0.5)';
}
return style;
}
}
}
</script>
<style scoped lang="scss">
.u-line {
vertical-align: middle;
display: inline-flex;
}
</style>
...@@ -60,6 +60,10 @@ ...@@ -60,6 +60,10 @@
} }
}, },
mounted() { mounted() {
uni.setNavigationBarColor({
frontColor: '#000000',
backgroundColor: '#ffffff',
})
this.isIOS = (uni.getSystemInfoSync().platform === 'ios'); this.isIOS = (uni.getSystemInfoSync().platform === 'ios');
uni.onNetworkStatusChange((res) => { uni.onNetworkStatusChange((res) => {
this.isConnected = res.isConnected; this.isConnected = res.isConnected;
...@@ -187,10 +191,12 @@ ...@@ -187,10 +191,12 @@
} }
.u-inner { .u-inner {
padding-top: 200rpx; height: 100vh;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
justify-content: center;
margin-top: -15%;
} }
.u-tips { .u-tips {
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
}"> }">
<u-icon name="minus" :size="size"></u-icon> <u-icon name="minus" :size="size"></u-icon>
</view> </view>
<input :disabled="disabled" :class="{ 'u-input-disabled': disabled }" v-model="inputVal" class="u-number-input" @blur="onBlur" <input :disabled="disabledInput || disabled" :class="{ 'u-input-disabled': disabled }" v-model="inputVal" class="u-number-input" @blur="onBlur"
type="number" :style="{ type="number" :style="{
color: color, color: color,
fontSize: size + 'rpx', fontSize: size + 'rpx',
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
* @property {Number} max 用户可输入的最大值(默认99999) * @property {Number} max 用户可输入的最大值(默认99999)
* @property {Number} step 步长,每次加或减的值(默认1) * @property {Number} step 步长,每次加或减的值(默认1)
* @property {Boolean} disabled 是否禁用操作,禁用后无法加减或手动修改输入框的值(默认false) * @property {Boolean} disabled 是否禁用操作,禁用后无法加减或手动修改输入框的值(默认false)
* @property {Boolean} disabled-input 是否禁止输入框手动输入值(默认false)
* @property {String Number} size 输入框文字和按钮字体大小,单位rpx(默认26) * @property {String Number} size 输入框文字和按钮字体大小,单位rpx(默认26)
* @property {String} color 输入框文字和加减按钮图标的颜色(默认#323233) * @property {String} color 输入框文字和加减按钮图标的颜色(默认#323233)
* @property {String Number} input-width 输入框宽度,单位rpx(默认80) * @property {String Number} input-width 输入框宽度,单位rpx(默认80)
...@@ -104,6 +105,12 @@ ...@@ -104,6 +105,12 @@
index: { index: {
type: [Number, String], type: [Number, String],
default: '' default: ''
},
// 是否禁用输入框,与disabled作用于输入框时,为OR的关系,即想要禁用输入框,又可以加减的话
// 设置disabled为false,disabledInput为true即可
disabledInput: {
type: Boolean,
default: false
} }
}, },
watch: { watch: {
......
...@@ -25,6 +25,8 @@ ...@@ -25,6 +25,8 @@
* @property {String Number} size 星星的大小,单位rpx(默认32) * @property {String Number} size 星星的大小,单位rpx(默认32)
* @property {String} inactive-color 未选中星星的颜色(默认#b2b2b2) * @property {String} inactive-color 未选中星星的颜色(默认#b2b2b2)
* @property {String} active-color 选中的星星颜色(默认#FA3534) * @property {String} active-color 选中的星星颜色(默认#FA3534)
* @property {String} active-icon 选中时的图标名,只能为uView的内置图标(默认star-fill)
* @property {String} inactive-icon 未选中时的图标名,只能为uView的内置图标(默认star)
* @property {String} gutter 星星之间的距离(默认10) * @property {String} gutter 星星之间的距离(默认10)
* @property {String Number} min-count 最少选中星星的个数(默认0) * @property {String Number} min-count 最少选中星星的个数(默认0)
* @property {Boolean} allow-half 是否允许半星选择(默认false) * @property {Boolean} allow-half 是否允许半星选择(默认false)
......
...@@ -170,11 +170,11 @@ export default { ...@@ -170,11 +170,11 @@ export default {
}, },
onTouchEnd() { onTouchEnd() {
if (this.disabled) return; if (this.disabled) return;
this.status = 'end';
if (this.status === 'moving') { if (this.status === 'moving') {
this.updateValue(this.newValue, false); this.updateValue(this.newValue, false);
this.$emit('end'); this.$emit('end');
} }
this.status = 'end';
}, },
updateValue(value, drag) { updateValue(value, drag) {
// 去掉小数部分,同时也是对step步进的处理 // 去掉小数部分,同时也是对step步进的处理
......
...@@ -197,6 +197,7 @@ ...@@ -197,6 +197,7 @@
.u-swiper-wrap { .u-swiper-wrap {
position: relative; position: relative;
overflow: hidden; overflow: hidden;
transform: translateY(0);
} }
.u-swiper-image { .u-swiper-image {
......
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
default: '#2979ff' default: '#2979ff'
}, },
// 关闭时的背景颜色 // 关闭时的背景颜色
unactiveColor: { inactiveColor: {
type: String, type: String,
default: '#ffffff' default: '#ffffff'
}, },
...@@ -80,7 +80,7 @@ ...@@ -80,7 +80,7 @@
switchStyle() { switchStyle() {
let style = {}; let style = {};
style.fontSize = this.size + 'rpx'; style.fontSize = this.size + 'rpx';
style.backgroundColor = this.value ? this.activeColor : this.unactiveColor; style.backgroundColor = this.value ? this.activeColor : this.inactiveColor;
return style; return style;
}, },
loadingColor() { loadingColor() {
......
...@@ -4,8 +4,10 @@ ...@@ -4,8 +4,10 @@
width: width + 'rpx', width: width + 'rpx',
height: width + 'rpx' height: width + 'rpx'
}"> }">
<view v-if="deletable" class="u-delete-icon" @tap.stop="deleteItem(index)"> <view v-if="deletable" class="u-delete-icon" @tap.stop="deleteItem(index)" :style="{
<u-icon class="u-icon" name="close" size="20" color="#ffffff"></u-icon> background: delBgColor
}">
<u-icon class="u-icon" :name="delIcon" size="20" :color="delColor"></u-icon>
</view> </view>
<u-line-progress v-if="showProgress && item.progress > 0 && !item.error" :show-percent="false" height="16" class="u-progress" :percent="item.progress"></u-line-progress> <u-line-progress v-if="showProgress && item.progress > 0 && !item.error" :show-percent="false" height="16" class="u-progress" :percent="item.progress"></u-line-progress>
<view @tap.stop="retry(index)" v-if="item.error" class="u-error-btn">点击重试</view> <view @tap.stop="retry(index)" v-if="item.error" class="u-error-btn">点击重试</view>
...@@ -37,6 +39,9 @@ ...@@ -37,6 +39,9 @@
* @property {Boolean} show-progress 是否显示进度条(默认true) * @property {Boolean} show-progress 是否显示进度条(默认true)
* @property {Boolean} disabled 是否启用(显示/移仓)组件(默认false) * @property {Boolean} disabled 是否启用(显示/移仓)组件(默认false)
* @property {String} image-mode 预览图片等显示模式,可选值为uni的image的mode属性值(默认aspectFill) * @property {String} image-mode 预览图片等显示模式,可选值为uni的image的mode属性值(默认aspectFill)
* @property {String} del-icon 右上角删除图标名称,只能为uView内置图标
* @property {String} del-bg-color 右上角关闭按钮的背景颜色
* @property {String} del-color 右上角关闭按钮图标的颜色
* @property {Object} header 上传携带的头信息,对象形式 * @property {Object} header 上传携带的头信息,对象形式
* @property {Object} form-data 上传额外携带的参数 * @property {Object} form-data 上传额外携带的参数
* @property {String} name 上传文件的字段名,供后端获取使用(默认file) * @property {String} name 上传文件的字段名,供后端获取使用(默认file)
...@@ -178,6 +183,21 @@ ...@@ -178,6 +183,21 @@
width: { width: {
type: [String, Number], type: [String, Number],
default: 200 default: 200
},
// 右上角关闭按钮的背景颜色
delBgColor: {
type: String,
default: '#fa3534'
},
// 右上角关闭按钮的叉号图标的颜色
delColor: {
type: String,
default: '#ffffff'
},
// 右上角删除图标名称,只能为uView内置图标
delIcon: {
type: String,
default: 'close'
} }
}, },
mounted() { mounted() {
......
// 此版本发布于2020-05-12 // 此版本发布于2020-05-16
let version = '1.2.5'; let version = '1.2.6';
export default { export default {
v: version, v: version,
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
.u-flex { .u-flex {
display: flex; display: flex;
flex-wrap: wrap;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
} }
...@@ -114,40 +113,40 @@ ...@@ -114,40 +113,40 @@
} }
// 定义内外边距,历遍1-80 // 定义内外边距,历遍1-80
@for $i from 1 through 80 { @for $i from 0 through 80 {
// 只要双数和能被5除尽的数 // 只要双数和能被5除尽的数
@if $i % 2 == 0 or $i % 5 == 0 { @if $i % 2 == 0 or $i % 5 == 0 {
// 得出:u-margin-30或者u-m-30 // 得出:u-margin-30或者u-m-30
.u-margin-#{$i}, .u-m-#{$i} { .u-margin-#{$i}, .u-m-#{$i} {
margin: $i + rpx; margin: $i + rpx!important;
} }
// 得出:u-padding-30或者u-p-30 // 得出:u-padding-30或者u-p-30
.u-padding-#{$i}, .u-p-#{$i} { .u-padding-#{$i}, .u-p-#{$i} {
padding: $i + rpx; padding: $i + rpx!important;
} }
@each $short, $long in l left, t top, r right, b bottom { @each $short, $long in l left, t top, r right, b bottom {
// 缩写版,结果如: u-m-l-30 // 缩写版,结果如: u-m-l-30
// 定义外边距 // 定义外边距
.u-m-#{$short}-#{$i} { .u-m-#{$short}-#{$i} {
margin-#{$long}: $i + rpx; margin-#{$long}: $i + rpx!important;
} }
// 定义内边距 // 定义内边距
.u-p-#{$short}-#{$i} { .u-p-#{$short}-#{$i} {
padding-#{$long}: $i + rpx; padding-#{$long}: $i + rpx!important;
} }
// 完整版,结果如:u-margin-left-30 // 完整版,结果如:u-margin-left-30
// 定义外边距 // 定义外边距
.u-margin-#{$long}-#{$i} { .u-margin-#{$long}-#{$i} {
margin-#{$long}: $i + rpx; margin-#{$long}: $i + rpx!important;
} }
// 定义内边距 // 定义内边距
.u-padding-#{$long}-#{$i} { .u-padding-#{$long}-#{$i} {
padding-#{$long}: $i + rpx; padding-#{$long}: $i + rpx!important;
} }
} }
} }
......
var array = require('./array.wxs');
var object = require('./object.wxs');
var PREFIX = 'van-';
function join(name, mods) {
name = PREFIX + name;
mods = mods.map(function(mod) {
return name + '--' + mod;
});
mods.unshift(name);
return mods.join(' ');
}
function traversing(mods, conf) {
if (!conf) {
return;
}
if (typeof conf === 'string' || typeof conf === 'number') {
mods.push(conf);
} else if (array.isArray(conf)) {
conf.forEach(function(item) {
traversing(mods, item);
});
} else if (typeof conf === 'object') {
object.keys(conf).forEach(function(key) {
conf[key] && mods.push(key);
});
}
}
function bem(name, conf) {
var mods = [];
traversing(mods, conf);
return join(name, mods);
}
module.exports.bem = bem;
...@@ -170,5 +170,6 @@ export default { ...@@ -170,5 +170,6 @@ export default {
contains, contains,
range, range,
rangeLength, rangeLength,
empty empty,
isEmpty: empty
} }
\ No newline at end of file
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