1. 修复badge尺寸无效问题

2. 添加noticebar的多个参数
3. 改进http拦截器实现和逻辑
4. 文档更新等
parent 2bfded3d
......@@ -2,29 +2,13 @@
export default {
// 此处globalData为了演示其作用,不是uView框架的一部分
globalData: {
username: '竹青'
username: '11'
},
async onLaunch() {
this.$u.http.setConfig({
baseUrl: 'https://api.youzixy.com',
// 如果将此值设置为true,拦截回调中将会返回服务端返回的所有数据response,而不是response.data
// 设置为true后,就需要在this.$u.http.interceptor.response进行多一次的判断,请打印查看具体值
// originalData: true,
});
// 请求拦截,配置Token等参数
this.$u.http.interceptor.request = (config) => {
config.header.Token = 'xxxxxx';
return config;
}
// 响应拦截,判断状态码是否通过
this.$u.http.interceptor.response = (res) => {
// 如果把originalData设置为了true,这里得到将会是服务器返回的所有的原始数据
// 判断可能变成了res.statueCode,或者res.data.code之类的,请打印查看结果
if(res.code == 200) {
// 如果把originalData设置为了true,这里return回什么,this.$u.post的then回调中就会得到什么
return res.data;
} else return false;
}
onLaunch() {
// 1.1.0版本之前关于http拦截器代码,已平滑移动到/common/http.interceptor.js中
// 注意,需要在/main.js中实例化Vue之后引入如下(详见文档说明):
// import httpInterceptor from '@/common/http.interceptor.js'
// Vue.use(httpInterceptor, app)
},
}
</script>
......
// 这里的vm,就是我们在vue文件里面的this,所以我们能在这里获取vuex的变量,比如存放在里面的token
// 同时,我们也可以在此使用getApp().globalData,如果你把token放在getApp().globalData的话,也是可以使用的
const install = (Vue, vm) => {
Vue.prototype.$u.http.setConfig({
baseUrl: 'https://api.youzixy.com',
// 如果将此值设置为true,拦截回调中将会返回服务端返回的所有数据response,而不是response.data
// 设置为true后,就需要在this.$u.http.interceptor.response进行多一次的判断,请打印查看具体值
// originalData: true,
});
// 请求拦截,配置Token等参数
Vue.prototype.$u.http.interceptor.request = (config) => {
config.header.Token = 'xxxxxx';
// 方式一,存放在vuex的token,假设使用了uView封装的vuex方式,见:https://uviewui.com/components/globalVariable.html
// config.header.token = vm.token;
// 方式二,如果没有使用uView封装的vuex方法,那么需要使用$store.state获取
// config.header.token = vm.$store.state.token;
// 方式三,如果token放在了globalData,通过getApp().globalData获取
// config.header.token = getApp().globalData.username;
// 方式四,如果token放在了Storage本地存储中,拦截是每次请求都执行的,所以哪怕您重新登录修改了Storage,下一次的请求将会是最新值
// const token = uni.getStorageSync('token');
// config.header.token = token;
return config;
}
// 响应拦截,判断状态码是否通过
Vue.prototype.$u.http.interceptor.response = (res) => {
// 如果把originalData设置为了true,这里得到将会是服务器返回的所有的原始数据
// 判断可能变成了res.statueCode,或者res.data.code之类的,请打印查看结果
if(res.code == 200) {
// 如果把originalData设置为了true,这里return回什么,this.$u.post的then回调中就会得到什么
return res.data;
} else return false;
}
}
export default {
install
}
\ No newline at end of file
......@@ -31,3 +31,8 @@ const app = new Vue({
...App
})
app.$mount()
// http拦截器
import httpInterceptor from '@/common/http.interceptor.js'
Vue.use(httpInterceptor, app)
......@@ -15,7 +15,7 @@
</view>
<view class="u-config-item">
<view class="u-item-title">主题</view>
<u-subsection vibrateShort :current="3" :list="['primary', 'success', 'error', 'warning', 'info']" @change="typeChange"></u-subsection>
<u-subsection vibrateShort :current="3" :list="['primary', 'success', 'error', 'warning', 'none']" @change="typeChange"></u-subsection>
</view>
<view class="u-config-item">
<view class="u-item-title">滚动模式</view>
......@@ -63,9 +63,15 @@
current: 0
}
},
onLoad() {
setTimeout(() => {
this.list = [];
}, 3000)
},
methods: {
typeChange(index) {
this.type = index == 0 ? 'primary' : index == 1 ? 'success' : index == 2 ? 'error' : index == 3 ? 'warning' : 'info';
let type = ['primary', 'success', 'error', 'warning', 'none'];
this.type = type[index];
},
modeChange(index) {
this.current = index;
......
......@@ -15,7 +15,7 @@
:endVal="endVal"
:duration="duration"
:decimals="decimals"
:fontWeight="fontWeight"
:bold="bold"
@end="end"
></u-count-to>
</view>
......@@ -25,12 +25,7 @@
<view class="u-config-title u-border-bottom">参数配置</view>
<view class="u-config-item">
<view class="u-item-title">状态</view>
<u-subsection
vibrateShort
:current="current"
:list="['启动', '暂停', '继续', '重置']"
@change="statusChange"
></u-subsection>
<u-subsection vibrateShort :current="current" :list="['启动', '暂停', '继续', '重置']" @change="statusChange"></u-subsection>
</view>
<view class="u-config-item">
<view class="u-item-title">目标值</view>
......@@ -46,12 +41,7 @@
</view>
<view class="u-config-item">
<view class="u-item-title">字体加粗</view>
<u-subsection
vibrateShort
current="1"
:list="['normal', 'bold', 'bolder','lighter']"
@change="fontWidthChange"
></u-subsection>
<u-subsection vibrateShort current="1" :list="['是', '否']" @change="boldChange"></u-subsection>
</view>
</view>
</view>
......@@ -63,14 +53,14 @@ export default {
return {
startVal: 0,
endVal: 608,
separator: ",",
separator: ',',
decimals: 0,
duration: 2000,
autoplay: false,
useEasing: true,
current: 3,
isStop: false, // 如果开没启动前,不允许点击状态选项的"继续"按钮,否则会导致显示NaN
fontWeight: 400
bold: false
};
},
methods: {
......@@ -82,9 +72,8 @@ export default {
durationChange(index) {
this.duration = index == 0 ? 1000 : index == 1 ? 2000 : 3000;
},
fontWidthChange(index) {
let arr = ["normal", "bold", "bolder", "lighter"];
this.fontWeight = arr[index];
boldChange(index) {
this.bold = !!!index;
},
decimalsChange(index) {
this.decimals = index == 0 ? 2 : 0;
......@@ -104,8 +93,8 @@ export default {
end() {
this.current = 3;
this.$refs.uToast.show({
type: "warning",
title: "滚动结束"
type: 'warning',
title: '滚动结束'
});
},
start() {
......@@ -119,8 +108,8 @@ export default {
resume() {
if (!this.isStop) {
this.$refs.uToast.show({
type: "error",
title: "请开始并暂停后才能继续"
type: 'error',
title: '请开始并暂停后才能继续'
});
this.$nextTick(() => {
this.current = 3;
......
......@@ -90,6 +90,10 @@
style.right = this.offset[1] + 'rpx';
style.transform = "translateY(0) translateX(0)";
}
// 如果尺寸为mini,后接上scal()
if(this.size == 'mini') {
style.transform = style.transform + " scale(0.8)";
}
return style;
},
// isDot类型时,不显示文字
......
......@@ -2,7 +2,8 @@
<view
class="u-notice-bar"
:style="{
background: computeBgColor
background: computeBgColor,
padding: padding
}"
>
<view class="u-icon-wrap">
......@@ -109,7 +110,7 @@ export default {
type: String,
default: 'horizontal'
},
// 播放状态,paly-播放,paused-暂停
// 播放状态,play-播放,paused-暂停
playState: {
type: String,
default: 'play'
......@@ -119,12 +120,18 @@ export default {
disableTouch: {
type: Boolean,
default: true
},
// 通知的边距
padding: {
type: [Number, String],
default: '18rpx 24rpx'
}
},
computed: {
// 计算字体颜色,如果没有自定义的,就用uview主题颜色
computeColor() {
if (this.color) return this.color;
else if(this.type == 'none') return this.$u.color['contentColor'];
else return this.$u.color[this.type];
},
// 垂直或者水平滚动
......@@ -135,7 +142,8 @@ export default {
// 计算背景颜色
computeBgColor() {
if (this.bgColor) return this.bgColor;
return this.$u.color[this.type + 'Light'];
else if(this.type == 'none') return 'transparent';
else return this.$u.color[this.type + 'Light'];
}
},
data() {
......
......@@ -60,7 +60,7 @@ export default {
default: 0
},
// 是否自动开始倒计时
autopaly: {
autoplay: {
type: Boolean,
default: true
},
......@@ -175,7 +175,7 @@ export default {
},
mounted() {
// 如果自动倒计时
this.autopaly && this.timestamp && this.start();
this.autoplay && this.timestamp && this.start();
},
methods: {
// 倒计时
......
......@@ -3,10 +3,12 @@
class="u-count-num"
:style="{
fontSize: fontSize + 'rpx',
fontWeight:fontWeight,
fontWeight: bold ? 'bold' : 'normal',
color: color
}"
>{{ displayValue }}</view>
>
{{ displayValue }}
</view>
</template>
<script>
......@@ -46,27 +48,27 @@ export default {
// 十进制分割
decimal: {
type: [Number, String],
default: "."
default: '.'
},
// 字体颜色
color: {
type: String,
default: "#303133"
default: '#303133'
},
// 字体大小
fontSize: {
type: [Number, String],
default: 50
},
// 字体粗细
fontWeight: {
type: [Number, String],
default: 400
// 是否加粗字体
bold: {
type: Boolean,
default: false
},
// 千位分隔符,类似金额的分割(¥23,321.05中的",")
separator: {
type: String,
default: ""
default: ''
}
},
data() {
......@@ -159,47 +161,27 @@ export default {
this.remaining = this.localDuration - progress;
if (this.useEasing) {
if (this.countDown) {
this.printVal =
this.localStartVal -
this.easingFn(
progress,
0,
this.localStartVal - this.endVal,
this.localDuration
);
this.printVal = this.localStartVal - this.easingFn(progress, 0, this.localStartVal - this.endVal, this.localDuration);
} else {
this.printVal = this.easingFn(
progress,
this.localStartVal,
this.endVal - this.localStartVal,
this.localDuration
);
this.printVal = this.easingFn(progress, this.localStartVal, this.endVal - this.localStartVal, this.localDuration);
}
} else {
if (this.countDown) {
this.printVal =
this.localStartVal -
(this.localStartVal - this.endVal) *
(progress / this.localDuration);
this.printVal = this.localStartVal - (this.localStartVal - this.endVal) * (progress / this.localDuration);
} else {
this.printVal =
this.localStartVal +
(this.endVal - this.localStartVal) *
(progress / this.localDuration);
this.printVal = this.localStartVal + (this.endVal - this.localStartVal) * (progress / this.localDuration);
}
}
if (this.countDown) {
this.printVal =
this.printVal < this.endVal ? this.endVal : this.printVal;
this.printVal = this.printVal < this.endVal ? this.endVal : this.printVal;
} else {
this.printVal =
this.printVal > this.endVal ? this.endVal : this.printVal;
this.printVal = this.printVal > this.endVal ? this.endVal : this.printVal;
}
this.displayValue = this.formatNumber(this.printVal);
if (progress < this.localDuration) {
this.rAF = this.requestAnimationFrame(this.count);
} else {
this.$emit("end");
this.$emit('end');
}
},
// 判断是否数字
......@@ -208,14 +190,14 @@ export default {
},
formatNumber(num) {
num = num.toFixed(Number(this.decimals));
num += "";
const x = num.split(".");
num += '';
const x = num.split('.');
let x1 = x[0];
const x2 = x.length > 1 ? this.decimal + x[1] : "";
const x2 = x.length > 1 ? this.decimal + x[1] : '';
const rgx = /(\d+)(\d{3})/;
if (this.separator && !this.isNumber(this.separator)) {
while (rgx.test(x1)) {
x1 = x1.replace(rgx, "$1" + this.separator + "$2");
x1 = x1.replace(rgx, '$1' + this.separator + '$2');
}
}
return x1 + x2;
......
......@@ -36,7 +36,7 @@ export default {
text: '无权限'
},
history: {
image: 'data:image/png;base64,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',
image: 'data:image/png;base64,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',
text: '无历史记录'
},
news: {
......
<template>
<view :id="elId" class="u-grid" :class="{'u-border-top u-border-left': border}"><slot /></view>
<view :id="elId" class="u-grid" :class="{'u-border-top u-border-left': border}" :style="[gridStyle]"><slot /></view>
</template>
<script>
......@@ -20,6 +20,11 @@ export default {
type: Boolean,
default: false
},
// 宫格对齐方式,表现为数量少的时候,靠左,居中,还是靠右
align: {
type: String,
default: 'left'
}
},
data() {
return {
......@@ -38,6 +43,25 @@ export default {
mounted() {
this.getGridRect();
},
computed: {
// 宫格对齐方式
gridStyle() {
let style = {};
switch(this.align) {
case 'left':
style.justifyContent = 'flex-start';
break;
case 'center':
style.justifyContent = 'center';
break;
case 'right':
style.justifyContent = 'flex-end';
break;
default: style.justifyContent = 'flex-start';
};
return style;
}
},
methods: {
click(index) {
this.$emit('click', index);
......@@ -58,6 +82,5 @@ export default {
width: 100%;
align-items: center;
flex-wrap: wrap;
justify-content: center;
}
</style>
<template>
<view class="" v-if="show">
<view class="u-notice-bar-wrap" v-if="isShow" :style="{
borderRadius: borderRadius + 'rpx',
}">
<block v-if="mode == 'horizontal' && isCircular">
<u-row-notice
:type="type"
......@@ -13,6 +15,7 @@
:fontSize="fontSize"
:speed="speed"
:playState="playState"
:padding="padding"
@getMore="getMore"
@close="close"
@click="click"
......@@ -32,6 +35,7 @@
:fontSize="fontSize"
:duration="duration"
:playState="playState"
:padding="padding"
@getMore="getMore"
@close="close"
@click="click"
......@@ -116,7 +120,7 @@ export default {
type: Boolean,
default: true
},
// 播放状态,paly-播放,paused-暂停
// 播放状态,play-播放,paused-暂停
playState: {
type: String,
default: 'play'
......@@ -126,6 +130,28 @@ export default {
disableTouch: {
type: Boolean,
default: true
},
// 滚动通知设置圆角
borderRadius: {
type: [Number, String],
default: 0
},
// 通知的边距
padding: {
type: [Number, String],
default: '18rpx 24rpx'
},
// list列表为空时,是否显示组件
noListHidden: {
type: Boolean,
default: true
}
},
computed: {
// 如果设置show为false,或者设置了noListHidden为true,且list长度又为零的话,隐藏组件
isShow() {
if(this.show == false || (this.noListHidden == true && this.list.length == 0)) return false;
else return true;
}
},
methods: {
......@@ -150,6 +176,10 @@ export default {
</script>
<style lang="scss" scoped>
.u-notice-bar-wrap {
overflow: hidden;
}
.u-notice-bar {
padding: 18rpx 24rpx;
overflow: hidden;
......
......@@ -2,7 +2,10 @@
<view
v-if="show"
class="u-notice-bar"
:style="{background: computeBgColor}"
:style="{
background: computeBgColor,
padding: padding
}"
>
<view class="u-direction-row">
<view class="u-icon-wrap">
......@@ -40,7 +43,8 @@ export default {
return [];
}
},
// 显示的主题,success|error|primary|info|warning
// 显示的主题,success|error|primary|info|warning|none
// none主题默认为透明背景,黑色(contentColor)字体
type: {
type: String,
default: 'warning'
......@@ -90,10 +94,15 @@ export default {
type: [Number, String],
default: 160
},
// 播放状态,paly-播放,paused-暂停
// 播放状态,play-播放,paused-暂停
playState: {
type: String,
default: 'play'
},
// 通知的边距
padding: {
type: [Number, String],
default: '18rpx 24rpx'
}
},
data() {
......@@ -127,12 +136,14 @@ export default {
// 计算字体颜色,如果没有自定义的,就用uview主题颜色
computeColor() {
if (this.color) return this.color;
else if(this.type == 'none') return this.$u.color['contentColor'];
else return this.$u.color[this.type];
},
// 计算背景颜色
computeBgColor() {
if (this.bgColor) return this.bgColor;
return this.$u.color[this.type + 'Light'];
else if(this.type == 'none') return 'transparent';
else return this.$u.color[this.type + 'Light'];
}
},
mounted() {
......
......@@ -9,9 +9,9 @@
</view>
<view class="u-right-info" v-if="right" :style="{
color: subColor
}">
}" @tap="rightClick">
{{subTitle}}
<view class="u-icon-arrow" @tap="rightClick">
<view class="u-icon-arrow">
<u-icon name="arrow-right" size="22" :color="subColor"></u-icon>
</view>
</view>
......
// 引入全局mixin
import mixin from '@/uview/libs/mixin/mixin.js'
import wxshare from '@/uview/libs/mixin/wxshare.js'
// 引入关于是否mixin集成小程序分享的配置
import wxshare from '@/uview/libs/mixin/mpShare.js'
// 全局挂载引入http相关请求拦截插件
import http from '@/uview/libs/request'
function wranning (str) {
function wranning(str) {
// 开发环境进行信息输出,主要是一些报错信息
// 这个环境的来由是在程序编写时候,点击hx编辑器运行调试代码的时候,详见:
// https://uniapp.dcloud.io/frame?id=%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e5%92%8c%e7%94%9f%e4%ba%a7%e7%8e%af%e5%a2%83
......@@ -23,13 +24,21 @@ function wranning (str) {
// }
// post类型对象参数转为get类型url参数
import { queryParams } from '@/uview/libs/function/queryParams.js'
import {
queryParams
} from '@/uview/libs/function/queryParams.js'
// 路由封装
import { route } from '@/uview/libs/function/route.js'
import {
route
} from '@/uview/libs/function/route.js'
// 时间格式化
import { timeFormat } from '@/uview/libs/function/timeFormat.js'
import {
timeFormat
} from '@/uview/libs/function/timeFormat.js'
// 时间戳格式化,返回多久之前
import { timeFrom } from '@/uview/libs/function/timeFrom.js'
import {
timeFrom
} from '@/uview/libs/function/timeFrom.js'
// 颜色渐变相关,colorGradient-颜色渐变,hexToRgb-十六进制颜色转rgb颜色,rgbToHex-rgb转十六进制
import {
colorGradient,
......@@ -37,22 +46,36 @@ import {
rgbToHex
} from '@/uview/libs/function/colorGradient.js'
// 生成全局唯一guid字符串
import { guid } from '@/uview/libs/function/guid.js'
import {
guid
} from '@/uview/libs/function/guid.js'
// 主题相关颜色,info|success|warning|primary|default|error,此颜色已在uview.scss中定义,但是为js中也能使用,故也定义一份
import { color } from '@/uview/libs/function/color.js'
import {
color
} from '@/uview/libs/function/color.js'
// 根据type获取图标名称
import { type2icon } from '@/uview/libs/function/type2icon.js'
import {
type2icon
} from '@/uview/libs/function/type2icon.js'
// 打乱数组的顺序
import { randomArray } from '@/uview/libs/function/randomArray.js'
import {
randomArray
} from '@/uview/libs/function/randomArray.js'
// 规则检验
import test from '@/uview/libs/function/test.js'
// 随机数
import { random } from '@/uview/libs/function/random.js'
import {
random
} from '@/uview/libs/function/random.js'
// 去除空格
import { trim } from '@/uview/libs/function/trim.js'
import {
trim
} from '@/uview/libs/function/trim.js'
// toast提示,对uni.showToast的封装
import { toast } from '@/uview/libs/function/toast.js'
import {
toast
} from '@/uview/libs/function/toast.js'
// 配置信息
import config from '@/uview/libs/config/config.js'
......@@ -87,9 +110,8 @@ const $u = {
const install = Vue => {
Vue.mixin(mixin)
console.log(Vue.prototype.openShare)
if (Vue.prototype.openShare) {
Vue.mixin(wxshare)
Vue.mixin(mpShare);
}
// Vue.mixin(vuexStore);
// 时间格式化,同时两个名称,date和timeFormat
......
module.exports = {
data () {
data() {
return {}
},
onLoad() {
// getRect挂载到$u上,因为这方法需要使用in(this),所以无法把它独立成一个单独的文件导出
this.$u.getRect = this.$uGetRect
},
methods: {
// 查询节点信息
$uGetRect (selector, all) {
$uGetRect(selector, all) {
return new Promise(resolve => {
uni
.createSelectorQuery()
.in(this)
[all ? 'selectAll' : 'select'](selector)
uni.createSelectorQuery()
.in(this)[all ? 'selectAll' : 'select'](selector)
.boundingClientRect(rect => {
if (all && Array.isArray(rect) && rect.length) {
resolve(rect)
......@@ -22,7 +24,7 @@ module.exports = {
})
}
},
onReachBottom () {
onReachBottom() {
uni.$emit('uOnReachBottom')
}
}
module.exports = {
onLoad() {
// 设置默认的转发参数
this.$u.mpShare = {
title: '', // 默认为小程序名称
path: '', // 默认为当前页面路径
imageUrl: '' // 默认为当前页面的截图
}
},
onShareAppMessage() {
return this.$u.mpShare
}
}
module.exports = {
onLoad () {
// getRect挂载到$u上,因为这方法需要使用in(this),所以无法把它独立成一个单独的文件导出
this.$u.getRect = this.$uGetRect
// 设置默认的转发参数
this.$u.mpShare = {
title: '', // 默认为小程序名称
path: '', // 默认为当前页面路径
imageUrl: '' // 默认为当前页面的截图
}
},
onShareAppMessage () {
return this.$u.mpShare
}
}
......@@ -107,7 +107,9 @@ class Request {
options.url : '/' + options.url));
// 是否显示loading
if(this.config.showLoading) {
// 加一个是否已有timer定时器的判断,否则有两个同时请求的时候,后者会清除前者的定时器id
// 而没有清除前者的定时器,导致前者超时,一直显示loading
if(this.config.showLoading && !this.config.timer) {
this.config.timer = setTimeout(() => {
uni.showLoading({
title: this.config.loadingText,
......@@ -115,7 +117,7 @@ class Request {
})
}, this.config.loadingTime);
}
uni.request(options)
uni.request(options);
})
}
......@@ -141,5 +143,4 @@ class Request {
}
}
}
export default new Request
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