Commit a9758b91 authored by wlxuqu's avatar wlxuqu

Merge branch 'yiruiwen' into dev

parents 36bc753b c1c3e009
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
uView UI,是[uni-app](https://uniapp.dcloud.io/)生态优秀的UI框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水 uView UI,是[uni-app](https://uniapp.dcloud.io/)生态优秀的UI框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水
### **欢迎加群交流反馈:249718512** ### **欢迎加群交流反馈:1129077272**
## 特性 ## 特性
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
"name" : "uView", "name" : "uView",
"appid" : "__UNI__60F4B81", "appid" : "__UNI__60F4B81",
"description" : "多平台快速开发的UI框架", "description" : "多平台快速开发的UI框架",
"versionName" : "1.5.6", "versionName" : "1.5.8",
"versionCode" : "100", "versionCode" : "100",
"transformPx" : false, "transformPx" : false,
"app-plus" : { "app-plus" : {
...@@ -107,7 +107,7 @@ ...@@ -107,7 +107,7 @@
}, },
"mp-alipay" : { "mp-alipay" : {
"usingComponents" : true, "usingComponents" : true,
"component2": true "component2" : true
}, },
"mp-baidu" : { "mp-baidu" : {
"usingComponents" : true, "usingComponents" : true,
...@@ -126,6 +126,7 @@ ...@@ -126,6 +126,7 @@
"treeShaking" : { "treeShaking" : {
"enable" : true "enable" : true
} }
} },
"title" : "uView UI"
} }
} }
...@@ -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/avatar/index", //启动页面,必选 // "path": "pages/componentsC/test/index", //启动页面,必选
"query": "id=1&name=2" //启动参数,在页面的onLoad函数里面得到 // "query": "id=1&name=2" //启动参数,在页面的onLoad函数里面得到
}] // }]
}, // },
"pages": [ "pages": [
// 演示-组件 // 演示-组件
{ {
...@@ -328,6 +328,13 @@ ...@@ -328,6 +328,13 @@
{ {
"root": "pages/library", "root": "pages/library",
"pages": [ "pages": [
// debounce-节流防抖
{
"path": "debounce/index",
"style": {
"navigationBarTitleText": "throttle | debounce-节流防抖"
}
},
// deepClone-对象深度克隆 // deepClone-对象深度克隆
{ {
"path": "deepClone/index", "path": "deepClone/index",
......
...@@ -14,6 +14,15 @@ ...@@ -14,6 +14,15 @@
data() { data() {
return { return {
iconList: [ iconList: [
{
name: 'level'
},
{
name: 'woman'
},
{
name: 'man'
},
{ {
name: 'arrow-left-double' name: 'arrow-left-double'
}, },
......
<template> <template>
<view class=""> <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"> <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="slot-wrap" v-if="useSlot">
<view class="search-wrap" v-if="search"> <view class="search-wrap" v-if="search">
<!-- 如果使用u-search组件,必须要给v-model绑定一个变量 --> <!-- 如果使用u-search组件,必须要给v-model绑定一个变量 -->
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<view class="u-demo-wrap"> <view class="u-demo-wrap">
<view class="u-demo-title">演示效果</view> <view class="u-demo-title">演示效果</view>
<view class="u-demo-area"> <view class="u-demo-area">
<u-read-more :toggle="toggle" :show-height="showHeight" ref="uReadMore"> <u-read-more @open="open" @close="close" :toggle="toggle" :show-height="showHeight" ref="uReadMore">
<!-- u-parse组件在微信小程序渲染慢,支付宝小程序rich-text不支持nodes属性 --> <!-- u-parse组件在微信小程序渲染慢,支付宝小程序rich-text不支持nodes属性 -->
<!-- #ifdef MP-ALIPAY --> <!-- #ifdef MP-ALIPAY -->
<u-parse :html="content"></u-parse> <u-parse :html="content"></u-parse>
...@@ -48,6 +48,12 @@ ...@@ -48,6 +48,12 @@
}, },
toggleChange(index) { toggleChange(index) {
this.toggle = index == 0 ? true : false; this.toggle = index == 0 ? true : false;
},
open() {
// console.log('open');
},
close() {
// console.log('close');
} }
} }
} }
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<view class="u-demo-wrap"> <view class="u-demo-wrap">
<view class="u-demo-title">演示效果</view> <view class="u-demo-title">演示效果</view>
<view class="u-demo-area"> <view class="u-demo-area">
<u-section :title="title" :right="right" :bold="bold" :color="color"></u-section> <u-section :title="title" :right="right" :bold="bold" :color="color" :show-line="showLine"></u-section>
</view> </view>
</view> </view>
<view class="u-config-wrap"> <view class="u-config-wrap">
...@@ -14,6 +14,10 @@ ...@@ -14,6 +14,10 @@
<view class="u-item-title">更换主标题</view> <view class="u-item-title">更换主标题</view>
<u-subsection vibrateShort :current="1" :list="['是', '否']" @change="titleChange"></u-subsection> <u-subsection vibrateShort :current="1" :list="['是', '否']" @change="titleChange"></u-subsection>
</view> </view>
<view class="u-config-item">
<view class="u-item-title">竖条状态</view>
<u-subsection vibrateShort :list="['显示', '隐藏']" @change="showLineChange"></u-subsection>
</view>
<view class="u-config-item"> <view class="u-config-item">
<view class="u-item-title">是否显示右边部分</view> <view class="u-item-title">是否显示右边部分</view>
<u-subsection vibrateShort :list="['是', '否']" @change="rightChange"></u-subsection> <u-subsection vibrateShort :list="['是', '否']" @change="rightChange"></u-subsection>
...@@ -37,7 +41,8 @@ ...@@ -37,7 +41,8 @@
title: '红豆生南国', title: '红豆生南国',
bold: true, bold: true,
right: true, right: true,
color: this.$u.color['mainColor'] color: this.$u.color['mainColor'],
showLine: true
} }
}, },
methods: { methods: {
...@@ -53,6 +58,9 @@ ...@@ -53,6 +58,9 @@
}, },
colorChange(index) { colorChange(index) {
this.color = index == 0 ? this.$u.color['mainColor'] : this.$u.color['primary']; this.color = index == 0 ? this.$u.color['mainColor'] : this.$u.color['primary'];
},
showLineChange(index) {
this.showLine = !index;
} }
} }
} }
......
<template> <template>
<view> <view style="padding-top: 200px;">
<u-popup v-model="show" @close="close"> <u-button @click="show = true" :custom-style="{
<view>出淤泥而不染,濯清涟而不妖</view> color: 'red',
</u-popup> borderColor: 'blue'
<u-button @click="show = true">打开</u-button> }">打开</u-button>
</view> </view>
</template> </template>
...@@ -11,12 +11,28 @@ ...@@ -11,12 +11,28 @@
export default { export default {
data() { data() {
return { return {
show: false show: true,
list: [{
name: '待收货'
}, {
name: '待付款'
}, {
name: '待评价'
}],
current: 0
} }
}, },
onLoad() {
// setTimeout(() => {
// this.show = false;
// }, 2000)
},
methods: { methods: {
close() { close() {
console.log('close'); //console.log('close');
},
change(index) {
this.current = index;
} }
} }
} }
......
...@@ -22,6 +22,11 @@ export default [ ...@@ -22,6 +22,11 @@ export default [
{ {
groupName: '工具库', groupName: '工具库',
list: [ list: [
{
path: 'debounce',
icon: 'debounce',
title: 'throttle | debounce 节流防抖',
},
{ {
path: 'deepMerge', path: 'deepMerge',
icon: 'deepMerge', icon: 'deepMerge',
......
<template>
<view class="u-demo">
<view class="u-demo-wrap">
<view class="u-demo-title">演示效果</view>
<view class="u-demo-area">
<view class="no-mode-here">
选择节流或者防抖模式,点击按钮,将会执行回调并显示在下方:
</view>
<view class="u-demo-result-line" v-if="result.length">
<view v-for="(item, index) in result" :key="index">{{(index >= 1) ? '-' : ''}}回调</view>
</view>
</view>
</view>
<view class="u-config-wrap">
<view class="u-button" hover-class="u-button--hover" hover-stay-time="150" @tap="btnClick">
点击触发
</view>
<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="modeChange"></u-subsection>
</view>
<view class="u-config-item">
<view class="u-item-title">时间间隔</view>
<u-subsection vibrateShort current="1" :list="['500ms', '1000ms', '2000ms']" @change="timeoutChange"></u-subsection>
</view>
<view class="u-config-item">
<view class="u-item-title">执行时机</view>
<u-subsection vibrateShort :list="['开始处', '结束处']" @change="immediateChange"></u-subsection>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
result: [],
timeout: 1000,
immediate: true,
mode: 'throttle'
}
},
methods: {
modeChange(index) {
this.mode = index ? 'debouncd' : 'throttle';
},
timeoutChange(index) {
this.timeout = [500, 1000, 2000][index];
},
immediateChange(index) {
this.immediate = !index;
},
getResult() {
if(this.result.length >= 6) this.result = [];
this.result.push(0);
},
btnClick() {
if(this.mode == 'throttle') {
this.$u.throttle(this.getResult, this.timeout, this.immediate);
} else {
this.$u.debounce(this.getResult, this.timeout, this.immediate);
}
}
}
}
</script>
<style lang="scss" scoped>
.u-button {
margin-top: 50rpx;
margin-bottom: 50rpx;
display: flex;
justify-content: center;
align-items: center;
height: 80rpx;
border-radius: 6rpx;
border: 1px solid $u-type-primary;
color: $u-type-primary;
}
.u-button--hover {
color: #fff;
background-color: $u-type-primary;
}
.u-demo-result-line {
display: flex;
justify-content: center;
}
</style>
...@@ -8,13 +8,13 @@ ...@@ -8,13 +8,13 @@
borderColor: borderColor borderColor: borderColor
}"> }">
<view class="u-icon-wrap"> <view class="u-icon-wrap">
<u-icon v-if="showIcon" :name="$u.type2icon(type)" :size="description ? 40 : 32" class="u-icon" :color="type"></u-icon> <u-icon v-if="showIcon" :name="uIcon" :size="description ? 40 : 32" class="u-icon" :color="uIconType" :custom-style="iconStyle"></u-icon>
</view> </view>
<view class="u-alert-content" @tap.stop="click"> <view class="u-alert-content" @tap.stop="click">
<view class="u-alert-title" :style="{fontWeight: description ? 500 : 'normal'}"> <view class="u-alert-title" :style="[uTitleStyle]">
{{title}} {{title}}
</view> </view>
<view v-if="description" class="u-alert-desc"> <view v-if="description" class="u-alert-desc" :style="[descStyle]">
{{description}} {{description}}
</view> </view>
</view> </view>
...@@ -38,6 +38,10 @@ ...@@ -38,6 +38,10 @@
* @property {String} title 显示的标题文字 * @property {String} title 显示的标题文字
* @property {String} description 辅助性文字,颜色比title浅一点,字号也小一点,可选 * @property {String} description 辅助性文字,颜色比title浅一点,字号也小一点,可选
* @property {String} type 关闭按钮(默认为叉号icon图标) * @property {String} type 关闭按钮(默认为叉号icon图标)
* @property {String} icon 图标名称
* @property {Object} icon-style 图标的样式,对象形式
* @property {Object} title-style 标题的样式,对象形式
* @property {Object} desc-style 描述的样式,对象形式
* @property {String} close-able 用文字替代关闭图标,close-able为true时有效 * @property {String} close-able 用文字替代关闭图标,close-able为true时有效
* @property {Boolean} show-icon 是否显示左边的辅助图标 * @property {Boolean} show-icon 是否显示左边的辅助图标
* @property {Boolean} show 显示或隐藏组件 * @property {Boolean} show 显示或隐藏组件
...@@ -96,12 +100,55 @@ ...@@ -96,12 +100,55 @@
show: { show: {
type: Boolean, type: Boolean,
default: true default: true
},
// 左边显示的icon
icon: {
type: String,
default: ''
},
// icon的样式
iconStyle: {
type: Object,
default() {
return {}
} }
}, },
// 标题的样式
titleStyle: {
type: Object,
default() {
return {}
}
},
// 描述文字的样式
descStyle: {
type: Object,
default() {
return {}
}
},
},
data() { data() {
return { return {
} }
}, },
computed: {
uTitleStyle() {
let style = {};
// 如果有描述文字的话,标题进行加粗
style.fontWeight = this.description ? 500 : 'normal';
// 将用户传入样式对象和style合并,传入的优先级比style高,同属性会被覆盖
return this.$u.deepMerge(style, this.titleStyle);
},
uIcon() {
// 如果有设置icon名称就使用,否则根据type主题,推定一个默认的图标
return this.icon ? this.icon : this.$u.type2icon(type);
},
uIconType() {
// 如果有设置图标的样式,优先使用,没有的话,则用type的样式
return Object.keys(this.iconStyle).length ? '' : this.type;
}
},
methods: { methods: {
// 点击内容 // 点击内容
click() { click() {
...@@ -173,16 +220,6 @@ ...@@ -173,16 +220,6 @@
visibility: hidden; visibility: hidden;
} }
@keyframes myfirst {
from {
height: 100%;
}
to {
height: 0
}
}
.u-icon { .u-icon {
margin-right: 16rpx; margin-right: 16rpx;
} }
......
...@@ -205,6 +205,11 @@ export default { ...@@ -205,6 +205,11 @@ export default {
dataName: { dataName: {
type: String, type: String,
default: '' default: ''
},
// 节流,一定时间内只能触发一次
throttleTime: {
type: [String, Number],
default: 1000
} }
}, },
computed: { computed: {
...@@ -236,6 +241,8 @@ export default { ...@@ -236,6 +241,8 @@ export default {
methods: { methods: {
// 按钮点击 // 按钮点击
click(e) { click(e) {
// 进行节流控制,每this.throttle毫秒内,只在开始处执行
this.$u.throttle(() => {
// 如果按钮时disabled和loading状态,不触发水波纹效果 // 如果按钮时disabled和loading状态,不触发水波纹效果
if (this.loading === true || this.disabled === true) return; if (this.loading === true || this.disabled === true) return;
// 是否开启水波纹效果 // 是否开启水波纹效果
...@@ -247,6 +254,7 @@ export default { ...@@ -247,6 +254,7 @@ export default {
}); });
} }
this.$emit('click', e); this.$emit('click', e);
}, this.throttleTime);
}, },
// 查询按钮的节点信息 // 查询按钮的节点信息
getWaveQuery(e) { getWaveQuery(e) {
......
...@@ -183,6 +183,11 @@ export default { ...@@ -183,6 +183,11 @@ export default {
type: Boolean, type: Boolean,
default: true default: true
}, },
// 是否自动去除两端的空格
trim: {
type: Boolean,
default: true
}
}, },
data() { data() {
return { return {
...@@ -241,7 +246,10 @@ export default { ...@@ -241,7 +246,10 @@ export default {
}, },
methods: { methods: {
onInput(event) { onInput(event) {
this.$emit('input', event.target.value); let value = event.detail.value;
// 判断是否去除空格
if(this.trim) value = this.$u.trim(value);
this.$emit('input', value);
}, },
onFocus(event) { onFocus(event) {
this.focused = true; this.focused = true;
......
...@@ -3,11 +3,11 @@ ...@@ -3,11 +3,11 @@
<view class="u-form-item__body" :style="{ <view class="u-form-item__body" :style="{
flexDirection: elLabelPosition == 'left' ? 'row' : 'column' flexDirection: elLabelPosition == 'left' ? 'row' : 'column'
}"> }">
<view class="u-form-item--left" :style="{ <!-- 微信小程序中,将一个参数设置空字符串,结果会变成字符串"true" -->
<view class="u-form-item--left" v-if="label !== '' && label !== 'true'" :style="{
width: elLabelPosition == 'left' ? $u.addUnit(elLabelWidth) : '100%', width: elLabelPosition == 'left' ? $u.addUnit(elLabelWidth) : '100%',
flex: `0 0 ${elLabelPosition == 'left' ? $u.addUnit(elLabelWidth) : '100%'}`, flex: `0 0 ${elLabelPosition == 'left' ? $u.addUnit(elLabelWidth) : '100%'}`,
marginBottom: elLabelPosition == 'left' ? 0 : '10rpx', marginBottom: elLabelPosition == 'left' ? 0 : '10rpx',
}"> }">
<!-- 为了块对齐 --> <!-- 为了块对齐 -->
<view class="u-form-item--left__content"> <view class="u-form-item--left__content">
...@@ -182,8 +182,8 @@ export default { ...@@ -182,8 +182,8 @@ export default {
}, },
// label的宽度 // label的宽度
elLabelWidth() { elLabelWidth() {
// label默认宽度为90,优先使用本组件的值,如果没有,则用u-form的值 // label默认宽度为90,优先使用本组件的值,如果没有(如果设置为0,也算是配置了值,依然起效),则用u-form的值
return this.labelWidth ? this.labelWidth : (this.parent ? this.parent.labelWidth : 90); return (this.labelWidth != 0 || this.labelWidth != '') ? this.labelWidth : (this.parent ? this.parent.labelWidth : 90);
}, },
// label的样式 // label的样式
elLabelStyle() { elLabelStyle() {
......
...@@ -143,7 +143,7 @@ export default { ...@@ -143,7 +143,7 @@ export default {
// 用于解决某些情况下,让图标垂直居中的用途 // 用于解决某些情况下,让图标垂直居中的用途
top: { top: {
type: [String, Number], type: [String, Number],
default: '' default: 0
} }
}, },
computed: { computed: {
...@@ -167,8 +167,8 @@ export default { ...@@ -167,8 +167,8 @@ export default {
style = { style = {
fontSize: this.size == 'inherit' ? 'inherit' : this.$u.addUnit(this.size), fontSize: this.size == 'inherit' ? 'inherit' : this.$u.addUnit(this.size),
fontWeight: this.bold ? 'bold' : 'normal', fontWeight: this.bold ? 'bold' : 'normal',
// 安卓和iOS各需要设置一个到顶部的距离,才能更好的垂直居中 // 某些特殊情况需要设置一个到顶部的距离,才能更好的垂直居中
top: this.top === '' ? (this.$u.os == 'ios' ? '2rpx' : '4rpx') : 0 top: this.$u.addUnit(this.top)
}; };
// 非主题色值时,才当作颜色值 // 非主题色值时,才当作颜色值
if (this.color && !this.$u.config.type.includes(this.color)) style.color = this.color; if (this.color && !this.$u.config.type.includes(this.color)) style.color = this.color;
......
...@@ -72,7 +72,7 @@ ...@@ -72,7 +72,7 @@
<script> <script>
import Emitter from '../../libs/util/emitter.js'; import Emitter from '../../libs/util/emitter.js';
/** /**
* input 输入框 * input 输入框
* @description 此组件为一个输入框,默认没有边框和样式,是专门为配合表单组件u-form而设计的,利用它可以快速实现表单验证,输入内容,下拉选择等功能。 * @description 此组件为一个输入框,默认没有边框和样式,是专门为配合表单组件u-form而设计的,利用它可以快速实现表单验证,输入内容,下拉选择等功能。
* @tutorial http://uviewui.com/components/input.html * @tutorial http://uviewui.com/components/input.html
...@@ -201,6 +201,11 @@ export default { ...@@ -201,6 +201,11 @@ export default {
selectionEnd: { selectionEnd: {
type: [Number, String], type: [Number, String],
default: -1 default: -1
},
// 是否自动去除两端的空格
trim: {
type: Boolean,
default: true
} }
}, },
data() { data() {
...@@ -260,15 +265,18 @@ export default { ...@@ -260,15 +265,18 @@ export default {
* @param event * @param event
*/ */
handleInput(event) { handleInput(event) {
let value = event.detail.value;
// 判断是否去除空格
if(this.trim) value = this.$u.trim(value);
// 当前model 赋值 // 当前model 赋值
this.defaultValue = event.detail.value; this.defaultValue = value;
// vue 原生的方法 return 出去 // vue 原生的方法 return 出去
this.$emit('input', event.detail.value); this.$emit('input', value);
// 过一个生命周期再发送事件给u-form-item,否则this.$emit('input')更新了父组件的值,但是微信小程序上 // 过一个生命周期再发送事件给u-form-item,否则this.$emit('input')更新了父组件的值,但是微信小程序上
// 尚未更新到u-form-item,导致获取的值为空,从而校验混论 // 尚未更新到u-form-item,导致获取的值为空,从而校验混论
this.$nextTick(() => { this.$nextTick(() => {
// 将当前的值发送到 u-form-item 进行校验 // 将当前的值发送到 u-form-item 进行校验
this.dispatch('u-form-item', 'on-form-change', event.detail.value); this.dispatch('u-form-item', 'on-form-change', value);
}); });
}, },
/** /**
......
...@@ -114,7 +114,7 @@ ...@@ -114,7 +114,7 @@
}, },
// 计算图片的高度,可能为auto,带%,或者直接数值 // 计算图片的高度,可能为auto,带%,或者直接数值
imgHeight() { imgHeight() {
return this.height == 'auto' ? 'auto' : String(this.height).indexOf('%') != -1 ? this.height : this.height + 'rpx'; return this.$u.addUnit(this.height);
} }
}, },
created() { created() {
...@@ -133,9 +133,18 @@ ...@@ -133,9 +133,18 @@
this.time = this.duration; this.time = this.duration;
this.opacity = 1; this.opacity = 1;
}, 30) }, 30)
},
// 图片路径发生变化时,需要重新标记一些变量,否则会一直卡在某一个状态,比如isError
image(n) {
this.init();
} }
}, },
methods: { methods: {
// 用于重新初始化
init() {
this.isError = false;
this.loadStatus = '';
},
// 点击图片触发的事件,loadlazy-还是懒加载中状态,loading-图片正在加载,loaded-图片加加载完成 // 点击图片触发的事件,loadlazy-还是懒加载中状态,loading-图片正在加载,loaded-图片加加载完成
clickImg() { clickImg() {
let whichImg = ''; let whichImg = '';
......
<template>
<view class="u-loading-page">
</view>
</template>
<script>
export default {
props: {
},
data() {
return {
}
},
methods: {
}
}
</script>
<style lang="scss" scoped>
</style>
...@@ -221,7 +221,9 @@ ...@@ -221,7 +221,9 @@
goBack() { goBack() {
// 如果自定义了点击返回按钮的函数,则执行,否则执行返回逻辑 // 如果自定义了点击返回按钮的函数,则执行,否则执行返回逻辑
if (typeof this.customBack === 'function') { if (typeof this.customBack === 'function') {
this.customBack(); // 在微信,支付宝等环境(H5正常),会导致父组件定义的customBack()函数体中的this变成子组件的this
// 通过bind()方法,绑定父组件的this,让this.customBack()的this为父组件的上下文
this.customBack.bind(this.$u.$parent.call(this))();
} else { } else {
uni.navigateBack(); uni.navigateBack();
} }
......
<template> <template>
<view class="u-numberbox"> <view class="u-numberbox">
<view class="u-icon-minus" @touchstart.stop="btnTouchStart('minus')" @touchend.stop="clearTimer" :class="{ 'u-icon-disabled': disabled || inputVal <= min }" <view class="u-icon-minus" @touchstart.stop.prevent="btnTouchStart('minus')" @touchend.stop.prevent="clearTimer" :class="{ 'u-icon-disabled': disabled || inputVal <= min }"
:style="{ :style="{
background: bgColor, background: bgColor,
height: inputHeight + 'rpx', height: inputHeight + 'rpx',
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
height: inputHeight + 'rpx', height: inputHeight + 'rpx',
width: inputWidth + 'rpx' width: inputWidth + 'rpx'
}" /> }" />
<view class="u-icon-plus" @touchstart.stop="btnTouchStart('plus')" @touchend.stop="clearTimer" :class="{ 'u-icon-disabled': disabled || inputVal >= max }" <view class="u-icon-plus" @touchstart.stop.prevent="btnTouchStart('plus')" @touchend.stop.prevent="clearTimer" :class="{ 'u-icon-disabled': disabled || inputVal >= max }"
:style="{ :style="{
background: bgColor, background: bgColor,
height: inputHeight + 'rpx', height: inputHeight + 'rpx',
......
/** /**
* html 解析器 * html 解析器
* @tutorial https://github.com/jin-yufeng/Parser * @tutorial https://github.com/jin-yufeng/Parser
* @version 20200719 * @version 20200728
* @author JinYufeng * @author JinYufeng
* @listens MIT * @listens MIT
*/ */
...@@ -102,9 +102,16 @@ MpHtmlParser.prototype.setText = function() { ...@@ -102,9 +102,16 @@ MpHtmlParser.prototype.setText = function() {
} }
if (!this.pre) { if (!this.pre) {
// 合并空白符 // 合并空白符
var tmp = []; var flag, tmp = [];
for (let i = text.length, c; c = text[--i];) for (let i = text.length, c; c = text[--i];)
if (!blankChar[c] || (!blankChar[tmp[0]] && (c = ' '))) tmp.unshift(c); if (!blankChar[c]) {
tmp.unshift(c);
if (!flag) flag = 1;
} else {
if (tmp[0] != ' ') tmp.unshift(' ');
if (c == '\n' && flag == void 0) flag = 0;
}
if (flag == 0) return;
text = tmp.join(''); text = tmp.join('');
} }
this.siblings().push({ this.siblings().push({
...@@ -119,6 +126,7 @@ MpHtmlParser.prototype.setNode = function() { ...@@ -119,6 +126,7 @@ MpHtmlParser.prototype.setNode = function() {
attrs: this.attrs attrs: this.attrs
}, },
close = cfg.selfClosingTags[node.name]; close = cfg.selfClosingTags[node.name];
if (this.options.nodes.length) node.type = 'node';
this.attrs = {}; this.attrs = {};
if (!cfg.ignoreTags[node.name]) { if (!cfg.ignoreTags[node.name]) {
// 处理属性 // 处理属性
...@@ -189,6 +197,7 @@ MpHtmlParser.prototype.setNode = function() { ...@@ -189,6 +197,7 @@ MpHtmlParser.prototype.setNode = function() {
attrs.height = void 0; attrs.height = void 0;
} }
} }
if (!attrs.controls && !attrs.autoplay) attrs.controls = 'T';
attrs.source = []; attrs.source = [];
if (attrs.src) { if (attrs.src) {
attrs.source.push(attrs.src); attrs.source.push(attrs.src);
...@@ -217,8 +226,7 @@ MpHtmlParser.prototype.setNode = function() { ...@@ -217,8 +226,7 @@ MpHtmlParser.prototype.setNode = function() {
if (info.length < 2) continue; if (info.length < 2) continue;
let key = info[0].trim().toLowerCase(), let key = info[0].trim().toLowerCase(),
value = info.slice(1).join(':').trim(); value = info.slice(1).join(':').trim();
if (value.includes('-webkit') || value.includes('-moz') || value.includes('-ms') || value.includes('-o') || value.includes( if (value[0] == '-' || value.includes('safe'))
'safe'))
style += `;${key}:${value}`; style += `;${key}:${value}`;
else if (!styleObj[key] || value.includes('import') || !styleObj[key].includes('import')) else if (!styleObj[key] || value.includes('import') || !styleObj[key].includes('import'))
styleObj[key] = value; styleObj[key] = value;
...@@ -359,13 +367,6 @@ MpHtmlParser.prototype.popNode = function(node) { ...@@ -359,13 +367,6 @@ MpHtmlParser.prototype.popNode = function(node) {
// 替换一些标签名 // 替换一些标签名
if (cfg.blockTags[node.name]) node.name = 'div'; if (cfg.blockTags[node.name]) node.name = 'div';
else if (!cfg.trustTags[node.name]) node.name = 'span'; else if (!cfg.trustTags[node.name]) node.name = 'span';
// 去除块标签前后空串
if (node.name == 'div' || node.name == 'p' || node.name[0] == 't') {
if (len > 1 && siblings[len - 2].text == ' ')
siblings.splice(--len - 1, 1);
if (childs.length && childs[childs.length - 1].text == ' ')
childs.pop();
}
// 处理列表 // 处理列表
if (node.c && (node.name == 'ul' || node.name == 'ol')) { if (node.c && (node.name == 'ul' || node.name == 'ol')) {
if ((node.attrs.style || '').includes('list-style:none')) { if ((node.attrs.style || '').includes('list-style:none')) {
......
/* 配置文件 */ /* 配置文件 */
// #ifdef MP-WEIXIN var cfg = {
const canIUse = wx.canIUse('editor'); // 高基础库标识,用于兼容
// #endif
module.exports = {
// 出错占位图 // 出错占位图
errorImg: null, errorImg: null,
// 过滤器函数 // 过滤器函数
...@@ -32,41 +29,15 @@ module.exports = { ...@@ -32,41 +29,15 @@ module.exports = {
blankChar: makeMap(' ,\xA0,\t,\r,\n,\f'), blankChar: makeMap(' ,\xA0,\t,\r,\n,\f'),
boolAttrs: makeMap('allowfullscreen,autoplay,autostart,controls,ignore,loop,muted'), boolAttrs: makeMap('allowfullscreen,autoplay,autostart,controls,ignore,loop,muted'),
// 块级标签,将被转为 div // 块级标签,将被转为 div
blockTags: makeMap('address,article,aside,body,caption,center,cite,footer,header,html,nav,section' + ( blockTags: makeMap('address,article,aside,body,caption,center,cite,footer,header,html,nav,pre,section'),
// #ifdef MP-WEIXIN
canIUse ? '' :
// #endif
',pre')),
// 将被移除的标签 // 将被移除的标签
ignoreTags: makeMap( ignoreTags: makeMap('area,base,canvas,frame,iframe,input,link,map,meta,param,script,source,style,svg,textarea,title,track,wbr'),
'area,base,canvas,frame,input,link,map,meta,param,script,source,style,svg,textarea,title,track,wbr'
// #ifdef MP-WEIXIN
+ (canIUse ? ',rp' : '')
// #endif
// #ifndef APP-PLUS
+ ',iframe'
// #endif
),
// 只能被 rich-text 显示的标签 // 只能被 rich-text 显示的标签
richOnlyTags: makeMap('a,colgroup,fieldset,legend,table' richOnlyTags: makeMap('a,colgroup,fieldset,legend,table'),
// #ifdef MP-WEIXIN
+ (canIUse ? ',bdi,bdo,caption,rt,ruby' : '')
// #endif
),
// 自闭合的标签 // 自闭合的标签
selfClosingTags: makeMap( selfClosingTags: makeMap('area,base,br,col,circle,ellipse,embed,frame,hr,img,input,line,link,meta,param,path,polygon,rect,source,track,use,wbr'),
'area,base,br,col,circle,ellipse,embed,frame,hr,img,input,line,link,meta,param,path,polygon,rect,source,track,use,wbr'
),
// 信任的标签 // 信任的标签
trustTags: makeMap( trustTags: makeMap('a,abbr,ad,audio,b,blockquote,br,code,col,colgroup,dd,del,dl,dt,div,em,fieldset,h1,h2,h3,h4,h5,h6,hr,i,img,ins,label,legend,li,ol,p,q,source,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,title,ul,video'),
'a,abbr,ad,audio,b,blockquote,br,code,col,colgroup,dd,del,dl,dt,div,em,fieldset,h1,h2,h3,h4,h5,h6,hr,i,img,ins,label,legend,li,ol,p,q,source,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,title,ul,video'
// #ifdef MP-WEIXIN
+ (canIUse ? ',bdi,bdo,caption,pre,rt,ruby' : '')
// #endif
// #ifdef APP-PLUS
+ ',embed,iframe'
// #endif
),
// 默认的标签样式 // 默认的标签样式
userAgentStyles: { userAgentStyles: {
address: 'font-style:italic', address: 'font-style:italic',
...@@ -91,3 +62,19 @@ function makeMap(str) { ...@@ -91,3 +62,19 @@ function makeMap(str) {
map[list[i]] = true; map[list[i]] = true;
return map; return map;
} }
// #ifdef MP-WEIXIN
if (wx.canIUse('editor')) {
cfg.blockTags.pre = void 0;
cfg.ignoreTags.rp = true;
Object.assign(cfg.richOnlyTags, makeMap('bdi,bdo,caption,rt,ruby'));
Object.assign(cfg.trustTags, makeMap('bdi,bdo,caption,pre,rt,ruby'));
}
// #endif
// #ifdef APP-PLUS
cfg.ignoreTags.iframe = void 0;
Object.assign(cfg.trustTags, makeMap('embed,iframe'));
// #endif
module.exports = cfg;
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
<block v-for="(n, i) in nodes" v-bind:key="i"> <block v-for="(n, i) in nodes" v-bind:key="i">
<!--图片--> <!--图片-->
<view v-if="n.name=='img'" :class="'_img '+n.attrs.class" :style="n.attrs.style" :data-attrs="n.attrs" @tap="imgtap"> <view v-if="n.name=='img'" :class="'_img '+n.attrs.class" :style="n.attrs.style" :data-attrs="n.attrs" @tap="imgtap">
<rich-text v-if="controls[i]!=0" :nodes="[{attrs:{src:loading&&(controls[i]||0)<2?loading:(lazyLoad&&!controls[i]?placeholder:(controls[i]==3?errorImg:n.attrs.src||'')),alt:n.attrs.alt||'',width:n.attrs.width||'',style:'-webkit-touch-callout:none;max-width:100%;display:block'+(n.attrs.height?';height:'+n.attrs.height:'')},name:'img'}]" /> <rich-text v-if="ctrl[i]!=0" :nodes="[{attrs:{src:loading&&(ctrl[i]||0)<2?loading:(lazyLoad&&!ctrl[i]?placeholder:(ctrl[i]==3?errorImg:n.attrs.src||'')),alt:n.attrs.alt||'',width:n.attrs.width||'',style:'-webkit-touch-callout:none;max-width:100%;display:block'+(n.attrs.height?';height:'+n.attrs.height:'')},name:'img'}]" />
<image class="_image" :src="lazyLoad&&!controls[i]?placeholder:n.attrs.src" :lazy-load="lazyLoad" <image class="_image" :src="lazyLoad&&!ctrl[i]?placeholder:n.attrs.src" :lazy-load="lazyLoad"
:show-menu-by-longpress="!n.attrs.ignore" :data-i="i" :data-index="n.attrs.i" data-source="img" @load="loadImg" :show-menu-by-longpress="!n.attrs.ignore" :data-i="i" :data-index="n.attrs.i" data-source="img" @load="loadImg"
@error="error" /> @error="error" />
</view> </view>
...@@ -14,15 +14,15 @@ ...@@ -14,15 +14,15 @@
<text v-else-if="n.name=='br'">\n</text> <text v-else-if="n.name=='br'">\n</text>
<!--#endif--> <!--#endif-->
<!--视频--> <!--视频-->
<view v-else-if="((n.lazyLoad&&!n.attrs.autoplay)||(n.name=='video'&&!loadVideo))&&controls[i]==undefined" :id="n.attrs.id" :class="'_video '+(n.attrs.class||'')" <view v-else-if="((n.lazyLoad&&!n.attrs.autoplay)||(n.name=='video'&&!loadVideo))&&ctrl[i]==undefined" :id="n.attrs.id" :class="'_video '+(n.attrs.class||'')"
:style="n.attrs.style" :data-i="i" @tap="_loadVideo" /> :style="n.attrs.style" :data-i="i" @tap="_loadVideo" />
<video v-else-if="n.name=='video'" :id="n.attrs.id" :class="n.attrs.class" :style="n.attrs.style" :autoplay="n.attrs.autoplay||controls[i]==0" <video v-else-if="n.name=='video'" :id="n.attrs.id" :class="n.attrs.class" :style="n.attrs.style" :autoplay="n.attrs.autoplay||ctrl[i]==0"
:controls="!n.attrs.autoplay||n.attrs.controls" :loop="n.attrs.loop" :muted="n.attrs.muted" :poster="n.attrs.poster" :src="n.attrs.source[controls[i]||0]" :controls="n.attrs.controls" :loop="n.attrs.loop" :muted="n.attrs.muted" :poster="n.attrs.poster" :src="n.attrs.source[ctrl[i]||0]"
:unit-id="n.attrs['unit-id']" :data-id="n.attrs.id" :data-i="i" data-source="video" @error="error" @play="play" /> :unit-id="n.attrs['unit-id']" :data-id="n.attrs.id" :data-i="i" data-source="video" @error="error" @play="play" />
<!--音频--> <!--音频-->
<audio v-else-if="n.name=='audio'" :ref="n.attrs.id" :class="n.attrs.class" :style="n.attrs.style" :author="n.attrs.author" <audio v-else-if="n.name=='audio'" :ref="n.attrs.id" :class="n.attrs.class" :style="n.attrs.style" :author="n.attrs.author"
:autoplay="n.attrs.autoplay" :controls="!n.attrs.autoplay||n.attrs.controls" :loop="n.attrs.loop" :name="n.attrs.name" :poster="n.attrs.poster" :autoplay="n.attrs.autoplay" :controls="n.attrs.controls" :loop="n.attrs.loop" :name="n.attrs.name" :poster="n.attrs.poster"
:src="n.attrs.source[controls[i]||0]" :data-i="i" :data-id="n.attrs.id" data-source="audio" :src="n.attrs.source[ctrl[i]||0]" :data-i="i" :data-id="n.attrs.id" data-source="audio"
@error.native="error" @play.native="play" /> @error.native="error" @play.native="play" />
<!--链接--> <!--链接-->
<view v-else-if="n.name=='a'" :id="n.attrs.id" :class="'_a '+(n.attrs.class||'')" hover-class="_hover" :style="n.attrs.style" <view v-else-if="n.name=='a'" :id="n.attrs.id" :class="'_a '+(n.attrs.class||'')" hover-class="_hover" :style="n.attrs.style"
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
<!--广告--> <!--广告-->
<!--<ad v-else-if="n.name=='ad'" :class="n.attrs.class" :style="n.attrs.style" :unit-id="n.attrs['unit-id']" :appid="n.attrs.appid" :apid="n.attrs.apid" :type="n.attrs.type" :adpid="n.attrs.adpid" data-source="ad" @error="error" />--> <!--<ad v-else-if="n.name=='ad'" :class="n.attrs.class" :style="n.attrs.style" :unit-id="n.attrs['unit-id']" :appid="n.attrs.appid" :apid="n.attrs.apid" :type="n.attrs.type" :adpid="n.attrs.adpid" data-source="ad" @error="error" />-->
<!--列表--> <!--列表-->
<view v-else-if="n.name=='li'" :id="n.attrs.id" :class="n.attrs.class" :style="(n.attrs.style||'')+';display:flex'"> <view v-else-if="n.name=='li'" :id="n.attrs.id" :class="n.attrs.class" :style="(n.attrs.style||'')+';display:flex;flex-direction:row'">
<view v-if="n.type=='ol'" class="_ol-bef">{{n.num}}</view> <view v-if="n.type=='ol'" class="_ol-bef">{{n.num}}</view>
<view v-else class="_ul-bef"> <view v-else class="_ul-bef">
<view v-if="n.floor%3==0" class="_ul-p1"></view> <view v-if="n.floor%3==0" class="_ul-p1"></view>
...@@ -80,7 +80,7 @@ ...@@ -80,7 +80,7 @@
name: 'trees', name: 'trees',
data() { data() {
return { return {
controls: [], ctrl: [],
placeholder: 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="300" height="225"/>', placeholder: 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="300" height="225"/>',
errorImg, errorImg,
loadVideo: typeof plus == 'undefined', loadVideo: typeof plus == 'undefined',
...@@ -124,7 +124,7 @@ ...@@ -124,7 +124,7 @@
if (res.intersectionRatio) { if (res.intersectionRatio) {
for (var j = this.nodes.length; j--;) for (var j = this.nodes.length; j--;)
if (this.nodes[j].name == 'img') if (this.nodes[j].name == 'img')
this.$set(this.controls, j, 1); this.$set(this.ctrl, j, 1);
this.observer.disconnect(); this.observer.disconnect();
} }
}) })
...@@ -184,23 +184,23 @@ ...@@ -184,23 +184,23 @@
}, },
loadImg(e) { loadImg(e) {
var i = e.currentTarget.dataset.i; var i = e.currentTarget.dataset.i;
if (this.lazyLoad && !this.controls[i]) { if (this.lazyLoad && !this.ctrl[i]) {
// #ifdef QUICKAPP-WEBVIEW // #ifdef QUICKAPP-WEBVIEW
this.$set(this.controls, i, 0); this.$set(this.ctrl, i, 0);
this.$nextTick(function() { this.$nextTick(function() {
// #endif // #endif
// #ifndef APP-PLUS // #ifndef APP-PLUS
this.$set(this.controls, i, 1); this.$set(this.ctrl, i, 1);
// #endif // #endif
// #ifdef QUICKAPP-WEBVIEW // #ifdef QUICKAPP-WEBVIEW
}) })
// #endif // #endif
} else if (this.loading && this.controls[i] != 2) { } else if (this.loading && this.ctrl[i] != 2) {
// #ifdef QUICKAPP-WEBVIEW // #ifdef QUICKAPP-WEBVIEW
this.$set(this.controls, i, 0); this.$set(this.ctrl, i, 0);
this.$nextTick(function() { this.$nextTick(function() {
// #endif // #endif
this.$set(this.controls, i, 2); this.$set(this.ctrl, i, 2);
// #ifdef QUICKAPP-WEBVIEW // #ifdef QUICKAPP-WEBVIEW
}) })
// #endif // #endif
...@@ -258,14 +258,14 @@ ...@@ -258,14 +258,14 @@
i = target.dataset.i; i = target.dataset.i;
if (source == 'video' || source == 'audio') { if (source == 'video' || source == 'audio') {
// 加载其他 source // 加载其他 source
var index = this.controls[i] ? this.controls[i].i + 1 : 1; var index = this.ctrl[i] ? this.ctrl[i].i + 1 : 1;
if (index < this.nodes[i].attrs.source.length) if (index < this.nodes[i].attrs.source.length)
this.$set(this.controls, i, index); this.$set(this.ctrl, i, index);
if (e.detail.__args__) if (e.detail.__args__)
e.detail = e.detail.__args__[0]; e.detail = e.detail.__args__[0];
} else if (errorImg && source == 'img') { } else if (errorImg && source == 'img') {
this.top.imgList.setItem(target.dataset.index, errorImg); this.top.imgList.setItem(target.dataset.index, errorImg);
this.$set(this.controls, i, 3); this.$set(this.ctrl, i, 3);
} }
this.top && this.top.$emit('error', { this.top && this.top.$emit('error', {
source, source,
...@@ -274,7 +274,7 @@ ...@@ -274,7 +274,7 @@
}); });
}, },
_loadVideo(e) { _loadVideo(e) {
this.$set(this.controls, e.target.dataset.i, 0); this.$set(this.ctrl, e.target.dataset.i, 0);
} }
} }
} }
...@@ -407,12 +407,13 @@ ...@@ -407,12 +407,13 @@
} }
._ul-bef { ._ul-bef {
display: block;
margin: 0 12px 0 23px; margin: 0 12px 0 23px;
line-height: normal; line-height: normal;
} }
._ol-bef, ._ol-bef,
._ul_bef { ._ul-bef {
flex: none; flex: none;
user-select: none; user-select: none;
} }
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
* @event {Function} imgtap 图片点击事件 * @event {Function} imgtap 图片点击事件
* @event {Function} linkpress 链接点击事件 * @event {Function} linkpress 链接点击事件
* @author JinYufeng * @author JinYufeng
* @version 20200719 * @version 20200728
* @listens MIT * @listens MIT
*/ */
export default { export default {
......
...@@ -284,6 +284,9 @@ export default { ...@@ -284,6 +284,9 @@ export default {
this.close(); this.close();
}, },
close() { close() {
// 标记关闭是内部发生的,否则修改了value值,导致watch中对value检测,导致再执行一遍close
// 造成@close事件触发两次
this.closeFromInner = true;
this.change('showDrawer', 'visibleSync', false); this.change('showDrawer', 'visibleSync', false);
}, },
// 中部弹出时,需要.u-drawer-content将居中内容,此元素会铺满屏幕,点击需要关闭弹窗 // 中部弹出时,需要.u-drawer-content将居中内容,此元素会铺满屏幕,点击需要关闭弹窗
...@@ -300,9 +303,6 @@ export default { ...@@ -300,9 +303,6 @@ export default {
change(param1, param2, status) { change(param1, param2, status) {
// 如果this.popup为false,意味着为picker,actionsheet等组件调用了popup组件 // 如果this.popup为false,意味着为picker,actionsheet等组件调用了popup组件
if (this.popup == true) { if (this.popup == true) {
// 标记关闭是内部发生的,否则修改了value值,导致watch中对value检测,导致再执行一遍close
// 造成@close事件触发两次
this.closeFromInner = true;
this.$emit('input', status); this.$emit('input', status);
} }
this[param1] = status; this[param1] = status;
......
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
// 形状,square为方形,circle为原型 // 形状,square为方形,circle为原型
shape: { shape: {
type: String, type: String,
default: 'square' default: 'circle'
}, },
// 图标的大小,单位rpx // 图标的大小,单位rpx
iconSize: { iconSize: {
......
...@@ -119,7 +119,7 @@ ...@@ -119,7 +119,7 @@
}, },
iconClass() { iconClass() {
let classes = []; let classes = [];
classes.push('u-radio__icon-wrap--' + this.shape); classes.push('u-radio__icon-wrap--' + this.elShape);
if (this.name == this.parent.value) classes.push('u-radio__icon-wrap--checked'); if (this.name == this.parent.value) classes.push('u-radio__icon-wrap--checked');
if (this.elDisabled) classes.push('u-radio__icon-wrap--disabled'); if (this.elDisabled) classes.push('u-radio__icon-wrap--disabled');
if (this.name == this.parent.value && this.elDisabled) classes.push( if (this.name == this.parent.value && this.elDisabled) classes.push(
......
...@@ -84,6 +84,11 @@ ...@@ -84,6 +84,11 @@
textIndent: { textIndent: {
type: String, type: String,
default: '2em' default: '2em'
},
// open和close事件时,将此参数返回在回调参数中
index: {
type: [Number, String],
default: ''
} }
}, },
watch: { watch: {
...@@ -128,6 +133,8 @@ ...@@ -128,6 +133,8 @@
this.showMore = !this.showMore; this.showMore = !this.showMore;
// 如果toggle为false,隐藏"收起"部分的内容 // 如果toggle为false,隐藏"收起"部分的内容
if (this.toggle == false) this.isLongContent = false; if (this.toggle == false) this.isLongContent = false;
// 发出打开或者收齐的事件
this.$emit(this.showMore ? 'open' : 'close', this.index);
} }
} }
}; };
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
}" :class="{ }" :class="{
'u-section--line': showLine 'u-section--line': showLine
}"> }">
<view class="u-section__title__icon-wrap u-flex" :style="[lineStyle]"> <view class="u-section__title__icon-wrap u-flex" :style="[lineStyle]" v-if="showLine">
<u-icon top="0" name="column-line" :size="fontSize * 1.25" bold :color="lineColor ? lineColor : color"></u-icon> <u-icon top="0" name="column-line" :size="fontSize * 1.25" bold :color="lineColor ? lineColor : color"></u-icon>
</view> </view>
<text class="u-flex u-section__title__text">{{title}}</text> <text class="u-flex u-section__title__text">{{title}}</text>
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
}, },
fontSize: { fontSize: {
type: [Number, String], type: [Number, String],
default: 32 default: 28
}, },
// 主标题是否加粗 // 主标题是否加粗
bold: { bold: {
......
...@@ -95,7 +95,15 @@ ...@@ -95,7 +95,15 @@
// 查询各节点的信息 // 查询各节点的信息
selecterQueryInfo() { selecterQueryInfo() {
// 获取整个父组件容器的高度,当做骨架屏的高度 // 获取整个父组件容器的高度,当做骨架屏的高度
uni.createSelectorQuery().selectAll('.u-skeleton').boundingClientRect().exec((res) => { // 在微信小程序中,如果把骨架屏放入组件中使用的话,需要调in(this)上下文为父组件才有效
let query = '';
// #ifdef MP-WEIXIN
query = uni.createSelectorQuery().in(this.$parent);
// #endif
// #ifndef MP-WEIXIN
query = uni.createSelectorQuery()
// #endif
query.selectAll('.u-skeleton').boundingClientRect().exec((res) => {
this.windowHeight = res[0][0].height; this.windowHeight = res[0][0].height;
this.windowWinth = res[0][0].width; this.windowWinth = res[0][0].width;
this.top = res[0][0].bottom - res[0][0].height; this.top = res[0][0].bottom - res[0][0].height;
...@@ -110,19 +118,43 @@ ...@@ -110,19 +118,43 @@
}, },
// 矩形元素列表 // 矩形元素列表
getRectEls() { getRectEls() {
uni.createSelectorQuery().selectAll('.u-skeleton-rect').boundingClientRect().exec((res) => { let query = '';
// 在微信小程序中,如果把骨架屏放入组件中使用的话,需要调in(this)上下文为父组件才有效
// #ifdef MP-WEIXIN
query = uni.createSelectorQuery().in(this.$parent);
// #endif
// #ifndef MP-WEIXIN
query = uni.createSelectorQuery()
// #endif
query.selectAll('.u-skeleton-rect').boundingClientRect().exec((res) => {
this.RectNodes = res[0]; this.RectNodes = res[0];
}); });
}, },
// 圆角元素列表 // 圆角元素列表
getFilletEls() { getFilletEls() {
uni.createSelectorQuery().selectAll('.u-skeleton-fillet').boundingClientRect().exec((res) => { let query = '';
// 在微信小程序中,如果把骨架屏放入组件中使用的话,需要调in(this)上下文为父组件才有效
// #ifdef MP-WEIXIN
query = uni.createSelectorQuery().in(this.$parent);
// #endif
// #ifndef MP-WEIXIN
query = uni.createSelectorQuery()
// #endif
query.selectAll('.u-skeleton-fillet').boundingClientRect().exec((res) => {
this.filletNodes = res[0]; this.filletNodes = res[0];
}); });
}, },
// 圆形元素列表 // 圆形元素列表
getCircleEls() { getCircleEls() {
uni.createSelectorQuery().selectAll('.u-skeleton-circle').boundingClientRect().exec((res) => { let query = '';
// 在微信小程序中,如果把骨架屏放入组件中使用的话,需要调in(this)上下文为父组件才有效
// #ifdef MP-WEIXIN
query = uni.createSelectorQuery().in(this.$parent);
// #endif
// #ifndef MP-WEIXIN
query = uni.createSelectorQuery()
// #endif
query.selectAll('.u-skeleton-circle').boundingClientRect().exec((res) => {
this.circleNodes = res[0]; this.circleNodes = res[0];
}); });
} }
......
...@@ -141,6 +141,9 @@ ...@@ -141,6 +141,9 @@
const observer = this[observerName]; const observer = this[observerName];
observer && observer.disconnect(); observer && observer.disconnect();
}, },
},
beforeDestroy() {
this.disconnectObserver('contentObserver');
} }
}; };
</script> </script>
......
<template> <template>
<view class="u-switch" :class="[value == true ? 'u-switch--on' : '', disabled ? 'u-switch--disabled' : '']" @tap="onClick" <view class="u-switch" :class="[value == true ? 'u-switch--on' : '', disabled ? 'u-switch--disabled' : '']" @tap="onClick"
:style="[switchStyle]"> :style="[switchStyle]">
<view class="u-switch__node node-class"> <view class="u-switch__node node-class" :style="{
width: $u.addUnit(this.size),
height: $u.addUnit(this.size)
}">
<u-loading :show="loading" class="u-switch__loading" :size="size * 0.6" :color="loadingColor" /> <u-loading :show="loading" class="u-switch__loading" :size="size * 0.6" :color="loadingColor" />
</view> </view>
</view> </view>
...@@ -128,8 +131,6 @@ ...@@ -128,8 +131,6 @@
left: 0; left: 0;
border-radius: 100%; border-radius: 100%;
z-index: 1; z-index: 1;
width: 1em;
height: 1em;
background-color: #fff; background-color: #fff;
background-color: #fff; background-color: #fff;
box-shadow: 0 3px 1px 0 rgba(0, 0, 0, 0.05), 0 2px 2px 0 rgba(0, 0, 0, 0.1), 0 3px 3px 0 rgba(0, 0, 0, 0.05); box-shadow: 0 3px 1px 0 rgba(0, 0, 0, 0.05), 0 2px 2px 0 rgba(0, 0, 0, 0.1), 0 3px 3px 0 rgba(0, 0, 0, 0.05);
......
...@@ -127,7 +127,7 @@ ...@@ -127,7 +127,7 @@
}, },
created() { created() {
// 是否隐藏原生tabbar // 是否隐藏原生tabbar
if(this.borderTop) uni.hideTabBar(); if(this.hideTabBar) uni.hideTabBar();
// 获取引入了u-tabbar页面的路由地址,该地址没有路径前面的"/" // 获取引入了u-tabbar页面的路由地址,该地址没有路径前面的"/"
let pages = getCurrentPages(); let pages = getCurrentPages();
// 页面栈中的最后一个即为项为当前页面,route属性为页面路径 // 页面栈中的最后一个即为项为当前页面,route属性为页面路径
...@@ -174,7 +174,9 @@ ...@@ -174,7 +174,9 @@
async clickHandler(index) { async clickHandler(index) {
if(this.beforeSwitch && typeof(this.beforeSwitch) === 'function') { if(this.beforeSwitch && typeof(this.beforeSwitch) === 'function') {
// 执行回调,同时传入索引当作参数 // 执行回调,同时传入索引当作参数
let beforeSwitch = this.beforeSwitch(index); // 在微信,支付宝等环境(H5正常),会导致父组件定义的customBack()函数体中的this变成子组件的this
// 通过bind()方法,绑定父组件的this,让this.customBack()的this为父组件的上下文
let beforeSwitch = this.beforeSwitch.bind(this.$u.$parent.call(this))(index);
// 判断是否返回了promise // 判断是否返回了promise
if (!!beforeSwitch && typeof beforeSwitch.then === 'function') { if (!!beforeSwitch && typeof beforeSwitch.then === 'function') {
await beforeSwitch.then(res => { await beforeSwitch.then(res => {
......
...@@ -359,11 +359,6 @@ export default { ...@@ -359,11 +359,6 @@ export default {
this.$emit('on-uploaded', this.lists); this.$emit('on-uploaded', this.lists);
return; return;
} }
// 检查上传地址
if (!this.action) {
this.showToast('请配置上传地址', true);
return;
}
// 检查是否是已上传或者正在上传中 // 检查是否是已上传或者正在上传中
if (this.lists[index].progress == 100) { if (this.lists[index].progress == 100) {
if (this.autoUpload == false) this.uploadFile(index + 1); if (this.autoUpload == false) this.uploadFile(index + 1);
...@@ -372,7 +367,12 @@ export default { ...@@ -372,7 +367,12 @@ export default {
// 执行before-upload钩子 // 执行before-upload钩子
if(this.beforeUpload && typeof(this.beforeUpload) === 'function') { if(this.beforeUpload && typeof(this.beforeUpload) === 'function') {
// 执行回调,同时传入索引和文件列表当作参数 // 执行回调,同时传入索引和文件列表当作参数
let beforeResponse = this.beforeUpload(index, this.lists); // 在微信,支付宝等环境(H5正常),会导致父组件定义的customBack()函数体中的this变成子组件的this
// 通过bind()方法,绑定父组件的this,让this.customBack()的this为父组件的上下文
// 因为upload组件可能会被嵌套在其他组件内,比如u-form,这时this.$parent其实为u-form的this,
// 非页面的this,所以这里需要往上历遍,一直寻找到最顶端的$parent,这里用了this.$u.$parent.call(this)
// 明白意思即可,无需纠结this.$u.$parent.call(this)的细节
let beforeResponse = this.beforeUpload.bind(this.$u.$parent.call(this))(index, this.lists);
// 判断是否返回了promise // 判断是否返回了promise
if (!!beforeResponse && typeof beforeResponse.then === 'function') { if (!!beforeResponse && typeof beforeResponse.then === 'function') {
await beforeResponse.then(res => { await beforeResponse.then(res => {
...@@ -386,6 +386,11 @@ export default { ...@@ -386,6 +386,11 @@ export default {
return this.uploadFile(index + 1); return this.uploadFile(index + 1);
} }
} }
// 检查上传地址
if (!this.action) {
this.showToast('请配置上传地址', true);
return;
}
this.lists[index].error = false; this.lists[index].error = false;
this.uploading = true; this.uploading = true;
// 创建上传对象 // 创建上传对象
...@@ -398,7 +403,7 @@ export default { ...@@ -398,7 +403,7 @@ export default {
success: res => { success: res => {
// 判断是否json字符串,将其转为json格式 // 判断是否json字符串,将其转为json格式
let data = this.toJson && this.$u.test.jsonString(res.data) ? JSON.parse(res.data) : res.data; let data = this.toJson && this.$u.test.jsonString(res.data) ? JSON.parse(res.data) : res.data;
if (![200, 201].includes(res.statusCode)) { if (![200, 201, 204].includes(res.statusCode)) {
this.uploadError(index, data); this.uploadError(index, data);
} else { } else {
// 上传成功 // 上传成功
......
/* #ifndef MP-ALIPAY || MP-BAIDU || MP-TOUTIAO */ /* #ifdef APP-PLUS */
@font-face { @font-face {
font-family: "uicon-iconfont"; font-family: "uicon-iconfont";
font-weight: normal; font-weight: normal;
...@@ -10,17 +10,15 @@ ...@@ -10,17 +10,15 @@
/* #endif */ /* #endif */
/* 支付宝,百度,头条小程序目前读取大的本地字体文件,导致无法显示图标,故用在线加载的方式-2020-05-12 */ /* 支付宝,百度,头条小程序目前读取大的本地字体文件,导致无法显示图标,故用在线加载的方式-2020-05-12 */
/* #ifdef MP-ALIPAY || MP-BAIDU || MP-TOUTIAO */ /* #ifndef APP-PLUS */
@font-face { @font-face {font-family: "uicon-iconfont";
font-family: "uicon-iconfont"; src: url('//at.alicdn.com/t/font_1529455_adug8z8qzbi.eot?t=1595859460686'); /* IE9 */
src: url('//at.alicdn.com/t/font_1529455_a1l807px8qd'); src: url('//at.alicdn.com/t/font_1529455_adug8z8qzbi.eot?t=1595859460686#iefix') format('embedded-opentype'), /* IE6-IE8 */
src: url('//at.alicdn.com/t/font_1529455_a1l807px8qd.eot?#iefix') format('embedded-opentype'), url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'),
url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), url('//at.alicdn.com/t/font_1529455_adug8z8qzbi.woff?t=1595859460686') format('woff'),
url('//at.alicdn.com/t/font_1529455_a1l807px8qd.woff') format('woff'), url('//at.alicdn.com/t/font_1529455_adug8z8qzbi.ttf?t=1595859460686') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
url('//at.alicdn.com/t/font_1529455_a1l807px8qd') format('truetype'), url('//at.alicdn.com/t/font_1529455_adug8z8qzbi.svg?t=1595859460686#iconfont') format('svg'); /* iOS 4.1- */
url('//at.alicdn.com/t/font_1529455_a1l807px8qd#iconfont') format('svg')
} }
/* #endif */ /* #endif */
.u-iconfont { .u-iconfont {
...@@ -38,10 +36,6 @@ ...@@ -38,10 +36,6 @@
align-items: center; align-items: center;
} }
.uicon-column-line:before {
content: "\e68e";
}
.uicon-level:before { .uicon-level:before {
content: "\e693"; content: "\e693";
} }
...@@ -54,100 +48,104 @@ ...@@ -54,100 +48,104 @@
content: "\e697"; content: "\e697";
} }
.uicon-arrow-left-double:before { .uicon-column-line:before {
content: "\e68c"; content: "\e68e";
} }
.uicon-arrow-right-double:before { .uicon-empty-page:before {
content: "\e68d"; content: "\e627";
} }
.uicon-youjiantou:before { .uicon-empty-data:before {
content: "\e602"; content: "\e62f";
} }
.uicon-red-packet:before { .uicon-empty-car:before {
content: "\e691"; content: "\e602";
} }
.uicon-red-packet-fill:before { .uicon-empty-order:before {
content: "\e690"; content: "\e639";
} }
.uicon-order:before { .uicon-empty-address:before {
content: "\e68f"; content: "\e646";
} }
.uicon-checkbox-mark:before { .uicon-empty-message:before {
content: "\e6a8"; content: "\e6a9";
} }
.uicon-arrow-up-fill:before { .uicon-empty-search:before {
content: "\e6b0"; content: "\e664";
} }
.uicon-arrow-down-fill:before { .uicon-empty-favor:before {
content: "\e600"; content: "\e67c";
} }
.uicon-zanwushouhuodizhisvg_huaban:before { .uicon-empty-coupon:before {
content: "\e6d5"; content: "\e682";
} }
.uicon-empty-wifi:before { .uicon-empty-history:before {
content: "\e639"; content: "\e684";
} }
.uicon-empty-history:before { .uicon-empty-permission:before {
content: "\e68b"; content: "\e686";
} }
.uicon-empty-message:before { .uicon-empty-news:before {
content: "\e687"; content: "\e687";
} }
.uicon-empty-permission:before { .uicon-empty-wifi:before {
content: "\e686"; content: "\e688";
} }
.uicon-empty-search:before { .uicon-empty-list:before {
content: "\e627"; content: "\e68b";
} }
.uicon-empty-page:before { .uicon-arrow-left-double:before {
content: "\e62f"; content: "\e68c";
} }
.uicon-empty-address:before { .uicon-arrow-right-double:before {
content: "\e646"; content: "\e68d";
} }
.uicon-empty-favor:before { .uicon-red-packet:before {
content: "\e664"; content: "\e691";
} }
.uicon-empty-coupon:before { .uicon-red-packet-fill:before {
content: "\e6af"; content: "\e690";
} }
.uicon-empty-data:before { .uicon-order:before {
content: "\e67c"; content: "\e68f";
} }
.uicon-mepty-order:before { .uicon-nav-back-arrow:before {
content: "\e7c8"; content: "\e67f";
} }
.uicon-empty-car:before { .uicon-nav-back:before {
content: "\e682"; content: "\e683";
} }
.uicon-empty-list:before { .uicon-checkbox-mark:before {
content: "\e684"; content: "\e6a8";
} }
.uicon-empty-news:before { .uicon-arrow-up-fill:before {
content: "\e6e8"; content: "\e6b0";
}
.uicon-arrow-down-fill:before {
content: "\e600";
} }
.uicon-backspace:before { .uicon-backspace:before {
......
...@@ -60,6 +60,14 @@ import toast from './libs/function/toast.js' ...@@ -60,6 +60,14 @@ import toast from './libs/function/toast.js'
import getParent from './libs/function/getParent.js' import getParent from './libs/function/getParent.js'
// 获取整个父组件 // 获取整个父组件
import $parent from './libs/function/$parent.js' import $parent from './libs/function/$parent.js'
// 获取sys()和os()工具方法
// 获取设备信息,挂载到$u的sys()(system的缩写)属性中,
// 同时把安卓和ios平台的名称"ios"和"android"挂到$u.os()中,方便取用
import {sys, os} from './libs/function/sys.js'
// 防抖方法
import debounce from './libs/function/debounce.js'
// 节流方法
import throttle from './libs/function/throttle.js'
// 配置信息 // 配置信息
...@@ -76,6 +84,8 @@ const $u = { ...@@ -76,6 +84,8 @@ const $u = {
colorGradient: colorGradient.colorGradient, colorGradient: colorGradient.colorGradient,
guid, guid,
color, color,
sys,
os,
type2icon, type2icon,
randomArray, randomArray,
wranning, wranning,
...@@ -97,7 +107,9 @@ const $u = { ...@@ -97,7 +107,9 @@ const $u = {
http, http,
toast, toast,
config, // uView配置信息相关,比如版本号 config, // uView配置信息相关,比如版本号
zIndex zIndex,
debounce,
throttle,
} }
const install = Vue => { const install = Vue => {
...@@ -117,10 +129,6 @@ const install = Vue => { ...@@ -117,10 +129,6 @@ const install = Vue => {
Vue.filter('timeFrom', (timestamp, format) => { Vue.filter('timeFrom', (timestamp, format) => {
return timeFrom(timestamp, format) return timeFrom(timestamp, format)
}) })
// 获取设备信息,挂载到$u的sys(system的缩写)属性中,
// 同时把安卓和ios平台的名称"ios"和"android"挂到$u.os中,方便取用
$u.sys = uni.getSystemInfoSync();
$u.os = $u.sys.platform;
Vue.prototype.$u = $u Vue.prototype.$u = $u
} }
......
// 此版本发布于2020-07-28 // 此版本发布于2020-08-04
let version = '1.5.6'; let version = '1.5.8';
export default { export default {
v: version, v: version,
......
...@@ -12,8 +12,6 @@ ...@@ -12,8 +12,6 @@
/* #ifndef APP-NVUE */ /* #ifndef APP-NVUE */
image { image {
display: inline-block; display: inline-block;
// 解决图片加载时可能会瞬间变形的问题
will-change: transform;
} }
// 在weex,也即nvue中,所有元素默认为border-box // 在weex,也即nvue中,所有元素默认为border-box
......
// 获取父组件的参数,因为支付宝小程序不支持provide/inject的写法 // 获取父组件的参数,因为支付宝小程序不支持provide/inject的写法
// this.$parent在非H5中,可以准确获取到父组件,但是在H5中,需要多次this.$parent.$parent.xxx // this.$parent在非H5中,可以准确获取到父组件,但是在H5中,需要多次this.$parent.$parent.xxx
export default function $parent(name, keys) { // 这里默认值等于undefined有它的含义,因为最顶层元素(组件)的$parent就是undefined,意味着不传name
// 值(默认为undefined),就是查找最顶层的$parent
export default function $parent(name = undefined) {
let parent = this.$parent; let parent = this.$parent;
// 通过while历遍,这里主要是为了H5需要多层解析的问题 // 通过while历遍,这里主要是为了H5需要多层解析的问题
while (parent) { while (parent) {
// 父组件 // 父组件
if (parent.$options.name !== name) { if (parent.$options && parent.$options.name !== name) {
// 如果组件的name不相等,继续上一级寻找 // 如果组件的name不相等,继续上一级寻找
parent = parent.$parent; parent = parent.$parent;
} else { } else {
......
let timeout = null;
/**
* 防抖原理:一定时间内,只有最后一次操作,再过wait毫秒后才执行函数
*
* @param {Function} func 要执行的回调函数
* @param {Number} wait 延时的时间
* @param {Boolean} immediate 是否立即执行
* @return null
*/
function debounce(func, wait = 500, immediate = false) {
// 清除定时器
if (timeout !== null) clearTimeout(timeout);
// 立即执行,此类情况一般用不到
if (immediate) {
var callNow = !timeout;
timeout = setTimeout(function() {
timeout = null;
}, wait);
if (callNow) typeof func === 'function' && func();
} else {
// 设置定时器,当最后一次操作后,timeout不会再被清除,所以在延时wait毫秒后执行func回调方法
timeout = setTimeout(function() {
typeof func === 'function' && func();
}, wait);
}
}
export default debounce
export function os() {
return uni.getSystemInfoSync().platform;
};
export function sys() {
return uni.getSystemInfoSync();
}
let timer, flag;
/**
* 节流原理:在一定时间内,只能触发一次
*
* @param {Function} func 要执行的回调函数
* @param {Number} wait 延时的时间
* @param {Boolean} immediate 是否立即执行
* @return null
*/
function throttle(func, wait = 500, immediate = true) {
if (immediate) {
if (!flag) {
flag = true;
// 如果是立即执行,则在wait毫秒内开始时执行
typeof func === 'function' && func();
timer = setTimeout(() => {
flag = false;
}, wait);
}
} else {
if (!flag) {
flag = true
// 如果是非立即执行,则在wait毫秒内的结束处执行
timer = setTimeout(() => {
flag = false
typeof func === 'function' && func();
}, wait);
}
}
};
export default throttle
// padStart 的 polyfill,因为某些机型或情况,还无法支持es7的padStart,比如电脑版的微信小程序
// 所以这里做一个兼容polyfill的兼容处理
if (!String.prototype.padStart){
String.prototype.padStart =
// 为了方便表示这里 fillString 用了ES6 的默认参数,不影响理解
function(maxLength, fillString = ' ') {
if (Object.prototype.toString.call(fillString) !== "[object String]") throw new TypeError('fillString must be String')
let str = this
// 返回 String(str) 这里是为了使返回的值是字符串字面量,在控制台中更符合直觉
if (str.length >= maxLength) return String(str)
let fillLength = maxLength - str.length,
times = Math.ceil(fillLength / fillString.length)
while (times >>= 1) {
fillString += fillString
if (times === 1) {
fillString += fillString
}
}
return fillString.slice(0, fillLength) + str;
}
}
function timeFormat(timestamp = null, fmt = 'yyyy-mm-dd') { function timeFormat(timestamp = null, fmt = 'yyyy-mm-dd') {
// 其他更多是格式化有如下: // 其他更多是格式化有如下:
// yyyy:mm:dd|yyyy:mm|yyyy年mm月dd日|yyyy年mm月dd日 hh时MM分等,可自定义组合 // yyyy:mm:dd|yyyy:mm|yyyy年mm月dd日|yyyy年mm月dd日 hh时MM分等,可自定义组合
...@@ -20,6 +43,7 @@ function timeFormat(timestamp = null, fmt = 'yyyy-mm-dd') { ...@@ -20,6 +43,7 @@ function timeFormat(timestamp = null, fmt = 'yyyy-mm-dd') {
for (let k in opt) { for (let k in opt) {
ret = new RegExp("(" + k + ")").exec(fmt); ret = new RegExp("(" + k + ")").exec(fmt);
if (ret) { if (ret) {
console.log(k, ret, opt[k]);
fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0"))) fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
}; };
}; };
......
{ {
"name": "uview-ui", "name": "uview-ui",
"version": "1.5.6", "version": "1.5.8",
"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