vue-pro/yudao-ui-app-v1/components/version-update/version-update.vue

1812 lines
32 KiB
Vue
Raw Normal View History

2021-11-24 23:33:06 +08:00
/**
* BaseCloud APP更新检测组件
v1.0.4
*/
<template>
<view class="base-cloud" style="display: inline-block;">
<view class="father" style="display: flex;align-items: center;" v-if="showVersion" @click.stop.prevent="checkVersion">
<text class="version-text">版本{{version}}</text>
<view class="abs top right" v-if="updateData.updated" style="top: -3px;right: -7px;">
<view class="w7 h7 rds redBg"></view>
</view>
</view>
<view class="fixed z20 wp6 flex ct plr50 pb50 " v-if="show">
<view class="w100p showIn" :animation="inData" style="max-width: 300px;">
<view class="rds12" :style="{'background-color':color}">
<view class="father">
<view class="h120 father hidden">
<view class="abs top left50p">
<image src="./static/cloudRight.png" mode="widthFix" class="w500 h120 animated goAway infinite"></image>
</view>
<view class="abs top right50p">
<image src="./static/cloudLeft.png" mode="widthFix" class="w500 h120 animated goAwayLeft infinite"></image>
</view>
<image class="abs top30 left30 w10 h10 animated infinite fadeOut slow" src="./static/star.png" mode="widthFix"></image>
<image class="abs top60 left80 w10 h10 animated infinite fadeOut slowest delay-1s" src="./static/star.png" mode="widthFix"></image>
<image class="abs top20 right20 w10 h10 animated infinite fadeOut slower delay-2s" src="./static/star.png" mode="widthFix"></image>
<image class="abs top20 right50 w30 h30 animated fadeOutRight infinite slowest" src="./static/smallCloud.png"
mode="widthFix"></image>
<image class="abs top30 left50 w30 h30 animated fadeOutRight infinite slow8 " src="./static/smallCloud.png" mode="widthFix"></image>
</view>
<view class="abs bottom animated bounceUp infinite">
<view class="animated goUp delay-06s">
<image src="./static/airship.png" mode="widthFix" class="w80 h75 center-block father z3"></image>
<view class="father" style="top: -5px;">
<image src="./static/shipAir.png" mode="widthFix" class="w40 h85 center-block animated infinite splashOut"></image>
<view class="abs">
<image src="./static/shipAir.png" mode="widthFix" class="w40 h85 center-block animated infinite splashOut delay-03s"></image>
</view>
<view class="abs">
<image src="./static/shipAir.png" mode="widthFix" class="w40 h85 center-block animated infinite splashOut delay-06s"></image>
</view>
<view class="abs bottom" style="bottom: -80upx;">
<image src="./static/shipGas.png" mode="widthFix" class="w40 h85 center-block animated infinite splash"></image>
</view>
</view>
</view>
</view>
</view>
<view class=" whiteBg hidden plr20 father z3 rdsBr12 rdsBl12" :class="{'pb100':progress <= 0 || progress >= 100 || completed}">
<view class="ptb10 fz16 bold">
<block v-if="progress == 0">
{{title}} {{ updateData.version ? 'v' + updateData.version : ''}}
</block>
<block v-else-if="progress <=100 && !completed">
<view>
<view class="fz30 normal avanti pt15 text-center">
{{ progress }}
<text class="fz12 ml2">
%
</text>
</view>
<view class="text-center pb40 op8 gray fz14 normal">
版本更新中不要离开...
</view>
</view>
</block>
<view class="text-center pt15" v-else-if="completed">
版本升级成功
<view class="pb40 op8 gray fz14 normal pt5">
更新已完成请重启应用体验新版
</view>
</view>
</view>
<scroll-view scroll-y="true" class="scroll-view h60 autoY pb20" v-if="progress == 0">
<view class="column">
<text v-if="updateData.description.length === 0">
{{ defaultContent }}
</text>
<text v-for="(item, index) in updateData.description" :key="index">
{{ index + 1 }}.{{ item }}
</text>
</view>
</scroll-view>
<view class="pd50 pt25" v-else-if="progress < 100">
<view class="grayBg bd rds23">
<view class="grayBg rds23">
<view class="ptb3 rds23" :style="{width:progress+'%','background-color':color}"></view>
</view>
</view>
</view>
<view class="father">
<view class="abs top left50p roundBox rds text-center" :style="{'background-color':color}">
<view class="pt30" v-if="!completed">
<button hover-class="op9" @tap.stop="download" class="btn bd2 whiteBg line rds23 inline plr50 ptb10 fz16">
立即升级
</button>
</view>
<view class="pt30" v-else>
<button hover-class="op8" @tap.stop="restart" class="btn bd2 whiteBg line rds23 inline plr50 ptb10 fz16">
立即重启
</button>
</view>
</view>
</view>
</view>
</view>
<view class="op9 father" v-if="progress == 0">
<view class="abs">
<view class="flex ct ">
<view class="h30 bl3 whiteBd"></view>
</view>
<view class="close-btn" @click="hide">
<text class="mix-icon icon-close"></text>
</view>
</view>
</view>
</view>
</view>
<mix-loading v-if="isLoading"></mix-loading>
</view>
</template>
<script>
export default {
name: "version-update",
props: {
title: {
default: "发现新版本"
},
defaultContent: {
default: "快来升级,体验最新的功能吧!"
},
showVersion: {
default: true
},
autoShow: {
default: false
},
isCache: {
default: true
},
updateUrl: {
default: "api/base-app-version"
},
color: {
default: "#ff536f"
}
},
data() {
return {
show: false,
version: "1.0.0",
updateData: {
description: []
},
progress: 0,
completed: false,
inData: null
};
},
created() {
// #ifdef APP-PLUS
plus.runtime.getProperty(plus.runtime.appid, (widgetInfo) => {
this.version = widgetInfo.version;
});
// #endif
},
methods: {
async checkVersion(e) {
console.log(e);
const res = await this.$request('version', 'check', {
version: this.version
}, {
showLoading: true
})
if (res.status === 0) {
this.$util.msg(res.msg);
} else {
res.data.description = res.data.description.split(';');
this.updateData = res.data;
this.show = true;
}
},
download(e) {
if(this.isDownloading){
return;
}
this.isDownloading = true;
const task = uni.downloadFile({
url: this.updateData.downloadLink,
success: (downloadResult) => {
this.isDownloading =false;
uni.hideLoading();
if (downloadResult.statusCode === 200) {
plus.runtime.install(downloadResult.tempFilePath, {
force: false
}, (e) => {
this.downloadSuccess(e);
}, (err) => {
this.downloadError(err);
});
}
},
fail: err => {
this.isDownloading =false;
this.downloadError(err);
}
});
task.onProgressUpdate((e) => {
console.log(e.progress);
this.progress = e.progress;
});
},
downloadError(e) {
this.show = false;
this.progress = 0;
uni.showModal({
title: '提示',
content: '更新失败,请稍后再试',
showCancel: false,
confirmColor: '#414cd9'
});
},
downloadSuccess(e) {
this.completed = true;
},
restart(e) {
this.show = false;
this.completed = false;
this.progress = 0;
// #ifdef APP-PLUS
plus.runtime.restart();
// #endif
},
hide(e) {
var animation = uni.createAnimation({
duration: 300,
timingFunction: 'ease',
});
animation.scale(0).opacity(0).step();
this.inData = animation.export();
setTimeout((e) => {
this.show = false;
this.inData = null;
}, 420);
},
},
}
</script>
<style scoped lang="scss">
.version-text{
margin-right: 10rpx;
font-size: 26rpx;
color: #999;
position: relative;
z-index: -2rpx;
}
.close-btn{
display: flex;
justify-content: center;
color: #fff;
.mix-icon{
margin-top: -20rpx;
padding: 20rpx;
font-size: 48rpx;
}
}
.scroll-view{
height: auto !important;
min-height: 120rpx;
max-height: 17vh;
text{
margin-bottom: 16rpx;
line-height: 1.5;
font-size: 28rpx;
}
}
.roundBox {
width: 5000upx;
height: 5000upx;
margin-left: -2500upx;
}
.animated {
-webkit-animation-duration: 1s;
animation-duration: 1s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
animation-timing-function: linear;
}
.animated.infinite {
-webkit-animation-iteration-count: infinite;
animation-iteration-count: infinite;
}
@keyframes goUp {
from {
-webkit-transform: translate3d(0, 70%, 0);
transform: translate3d(0, 70%, 0);
}
to {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
}
.goUp {
-webkit-animation-name: goUp;
animation-name: goUp;
-webkit-animation-duration: 600ms;
animation-duration: 600ms;
animation-timing-function: ease-in;
}
@keyframes splash {
0,
100% {
transform: scaleX(0.9);
}
5%,
95% {
transform: scaleX(1.02);
}
10%,
80% {
transform: scaleX(1.05);
}
25%,
75% {
transform: scaleX(1.08);
}
50% {
transform: scaleX(1.1);
}
}
.splash {
-webkit-animation-name: splash;
animation-name: splash;
-webkit-animation-duration: 0.6s;
animation-duration: 0.6s;
animation-timing-function: linear;
}
@-webkit-keyframes splashOut {
from {
opacity: 1;
transform: scaleX(0);
}
to {
opacity: 0;
transform: scaleX(2);
}
}
.splashOut {
-webkit-animation-name: splashOut;
animation-name: splashOut;
-webkit-animation-duration: 1s;
animation-duration: 1s;
}
@keyframes bounceUp {
0% {
transform: translate3d(0, 0, 0);
}
50% {
transform: translate3d(0, -30rpx, 0);
}
}
.bounceUp {
-webkit-animation-name: bounceUp;
animation-name: bounceUp;
-webkit-animation-duration: 1.6s;
animation-duration: 1.6s;
animation-timing-function: linear;
}
@keyframes fadeOut {
0,
100% {
opacity: 1;
}
50% {
opacity: 0;
}
}
.fadeOut {
-webkit-animation-name: fadeOut;
animation-name: fadeOut;
}
@keyframes fadeOutRight {
0% {
opacity: 0;
transform: translate3d(-200%, 0, 0);
}
50% {
opacity: 1;
transform: translate3d(0, 0, 0);
}
100% {
opacity: 0;
transform: translate3d(200%, 0, 0);
}
}
.fadeOutRight {
-webkit-animation-name: fadeOutRight;
animation-name: fadeOutRight;
}
.animated.delay-03s {
-webkit-animation-delay: 0.3s;
animation-delay: 0.3s;
}
.animated.delay-06s {
-webkit-animation-delay: 0.6s;
animation-delay: 0.6s;
}
.animated.delay-1s {
-webkit-animation-delay: 1s;
animation-delay: 1s;
}
.animated.delay-2s {
-webkit-animation-delay: 2s;
animation-delay: 2s;
}
.animated.delay-3s {
-webkit-animation-delay: 3s;
animation-delay: 3s;
}
.animated.fast {
-webkit-animation-duration: 800ms;
animation-duration: 800ms;
}
.animated.faster {
-webkit-animation-duration: 500ms;
animation-duration: 500ms;
}
.animated.fastest {
-webkit-animation-duration: 200ms;
animation-duration: 200ms;
}
.animated.slow {
-webkit-animation-duration: 2s;
animation-duration: 2s;
}
.animated.slower {
-webkit-animation-duration: 3s;
animation-duration: 3s;
}
.animated.slowest {
-webkit-animation-duration: 10s;
animation-duration: 10s;
}
.animated.slow4 {
-webkit-animation-duration: 5s;
animation-duration: 5s;
}
.animated.slow5 {
-webkit-animation-duration: 5s;
animation-duration: 5s;
}
.animated.slow8 {
-webkit-animation-duration: 8s;
animation-duration: 8s;
}
.goAway {
transform: translate3d(-50%, 10%, 0);
-webkit-animation-name: goAway;
animation-name: goAway;
-webkit-animation-duration: 2s;
animation-duration: 2s;
}
@keyframes goAway {
from {
transform: translate3d(-50%, 10%, 0);
}
to {
transform: translate3d(-1.3%, -17.6%, 0);
}
}
.goAwayLeft {
transform: translate3d(50%, 10%, 0);
-webkit-animation-name: goAwayLeft;
animation-name: goAwayLeft;
-webkit-animation-duration: 2s;
animation-duration: 2s;
}
@keyframes goAwayLeft {
from {
transform: translate3d(50%, 10%, 0);
}
to {
transform: translate3d(2%, -17%, 0);
}
}
@keyframes showIn {
0% {
opacity: 0;
transform: scale3d(0.5, 0.5, 0.5);
}
100% {
opacity: 1;
transform: scale3d(1, 1, 1);
}
}
.showIn {
animation-duration: 0.4s;
animation-name: showIn;
}
div,a,img,span,page,view,navigator,image,text,input,textarea,button,form{
box-sizing: border-box;
}
a{
text-decoration: none;
color: $main;
}
form{
display: block;
width: 100%;
}
image{will-change: transform}
input,textarea,form{
width: 100%;
height: auto;
min-height: 10px;
display: block;
font-size: inherit;
}
button{
color: inherit;
line-height: inherit;
margin: 0;
background-color: transparent;
padding: 0;
-webkit-border-radius: 0;
-moz-border-radius: 0;
border-radius: 0;
&:after{
display: none;
}
}
switch .uni-switch-input{
margin-right: 0;
}
.wx-switch-input,.uni-switch-input{width:42px !important;height:22px !important;}
.wx-switch-input::before,.uni-switch-input::before{width:40px !important;height: 20px !important;}
.wx-switch-input::after,.uni-switch-input::after{width: 20px !important;height: 20px !important;}
/**背景颜色**/
.bg{
background-color: $main;
color: $mainInverse;
}
.gradualBg{
background-image: $mainGradual;
color: $mainGradualInverse ;
}
.grayBg{
background-color: #f7f7f7;
color: #30302f;
}
.whiteBg{
background-color: #fff;
color: #000;
}
.blackBg{
background-color: #000;
color: #fff;
}
.orangeBg{
background-color: $orange;
color: #fff;
}
.redBg{
background-color: $red;
color: #fff;
}
.yellowBg{
background-color: $yellow;
color: #000;
}
.greenBg{
background-color: $green;
color: #fff;
}
.brownBg{
background-color: $brown;
color: #fff;
}
.blueBg{
background-color: $blue;
color: #fff;
}
.purpleBg{
background-color: $purple;
color: #fff;
}
/* 文字颜色 */
.main{
color: $main;
}
.green{
color: $green;
}
.red{
color: $red;
}
.yellow{
color: $yellow;
}
.black{
color: $black;
}
.white{
color: $white;
}
.gray{
color: $gray;
}
.grey{
color: $grey;
}
.orange{
color: $orange;
}
.brown{
color: $brown;
}
.blue{
color: $blue;
}
.purple{
color: $purple;
}
.hoverMain{
&:hover{
color: $main;
}
}
.hoverGreen{
&:hover{
color: $green;
}
}
.hoverRed{
&:hover{
color: $red;
}
}
.hoverBlue{
&:hover{
color: $blue;
}
}
.hoverGray{
&:hover{
color: $gray;
}
}
.hoverWhite{
&:hover{
color: $white;
}
}
.hoverBlack{
&:hover{
color: $black;
}
}
.hoverOrange{
&:hover{
color: $orange;
}
}
.hoverYellow{
&:hover{
color: $yellow;
}
}
.hoverBrown{
&:hover{
color: $brown;
}
}
.hoverPurple{
&:hover{
color: $purple;
}
}
/* 宽度 高度 */
$w:0;
@while $w <= 500 {
@if $w <= 100 {
.w#{$w}p{
width: $w*1%;
}
.h#{$w}p{
height: $w*1%;
}
@if $w == 100 {
.100p{
width: 100%;
height: 100%;
}
.ww{
width: 100vw;
}
.hh{
height: 100vh;
}
}
}
.w#{$w}{
width: $w*2upx;
}
.h#{$w}{
height: $w*2upx;
}
@if $w < 10 {
$w : $w + 1 ;
} @else{
$w : $w + 5 ;
}
}
/* 字号 */
@for $fz from 12 through 100 {
.fz#{$fz}{
font-size: $fz*2upx !important;
}
}
/* 边距 - 覆盖顺序是小的尺寸覆盖大的尺寸 少的方向覆盖多的方向 */
$s : 0 ;
@while $s <= 500 {
.pd#{$s}{
padding: $s*2upx!important;
}
.m#{$s}{
margin: $s*2upx!important;
}
@if $s == 15 {
.pd{
padding: 30upx!important;
}
.m{
margin: 30upx!important;
}
}
@if $s < 10 {
$s : $s + 1 ;
} @else if($s < 100){
$s : $s + 5 ;
} @else if($s < 300){
$s : $s + 10 ;
} @else{
$s : $s + 50 ;
}
}
$s : 0 ;
@while $s <= 500 {
.ptb#{$s}{
padding-top: $s*2upx!important;
padding-bottom: $s*2upx!important;
}
.plr#{$s}{
padding-left: $s*2upx!important;
padding-right: $s*2upx!important;
}
.mtb#{$s}{
margin-top: $s*2upx!important;
margin-bottom: $s*2upx!important;
}
.mlr#{$s}{
margin-left: $s*2upx!important;
margin-right: $s*2upx!important;
}
@if $s == 15 {
.ptb{
padding-top: 30upx!important;
padding-bottom: 30upx!important;
}
.plr{
padding-left: 30upx!important;
padding-right: 30upx!important;
}
.mlr{
margin-left: 30upx!important;
margin-right: 30upx!important;
}
.mtb{
margin-top: 30upx!important;
margin-bottom: 30upx!important;
}
}
@if $s < 10 {
$s : $s + 1 ;
} @else if($s < 100){
$s : $s + 5 ;
} @else if($s < 300){
$s : $s + 10 ;
} @else{
$s : $s + 50 ;
}
}
$s : 0 ;
@while $s <= 500 {
.pl#{$s}{
padding-left: $s*2upx!important;
}
.pr#{$s}{
padding-right: $s*2upx!important;
}
.pt#{$s}{
padding-top: $s*2upx!important;
}
.pb#{$s}{
padding-bottom: $s*2upx!important;
}
.ml#{$s}{
margin-left: $s*2upx!important;
}
.mr#{$s}{
margin-right: $s*2upx!important;
}
.mt#{$s}{
margin-top: $s*2upx!important;
}
.mb#{$s}{
margin-bottom: $s*2upx!important;
}
@if $s == 15 {
.pt{
padding-top: 30upx!important;
}
.pb{
padding-bottom: 30upx!important;
}
.pl{
padding-left: 30upx!important;
}
.pr{
padding-right: 30upx!important;
}
.mt{
margin-top: 30upx!important;
}
.mr{
margin-right: 30upx!important;
}
.ml{
margin-left: 30upx!important;
}
.mb{
margin-bottom: 30upx!important;
}
}
@if $s < 10 {
$s : $s + 1 ;
} @else if($s < 100){
$s : $s + 5 ;
} @else if($s < 300){
$s : $s + 10 ;
} @else{
$s : $s + 50 ;
}
}
/* 文字溢出隐藏 */
.clip{
width: 100%;
display: -webkit-box;
overflow: hidden;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
@for $i from 2 through 10{
&.c#{$i}{
-webkit-line-clamp: $i;
}
}
}
.cut{
display: block;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* 价格 */
.price{
font-size: inherit ;
&:before{
content: "¥";
font-size: 70%;
color: inherit;
font-weight: normal;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif ;
}
.point{
display: inline-block;
font-size: 70%;
font-weight: inherit;
letter-spacing: 1px;
color: inherit;
}
&.noPrefix{
&:before{
content: '';
}
}
}
/* 布局 */
.grid,.gridNoPd,.gridSmPd,.gridNoMb{
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
width: 100%;
padding: 20upx 20upx 0 20upx;
>.item,>image,>view,>navigator,>text,>button{
width: 50%;
padding: 0 10upx;
margin-bottom: 20upx;
}
@for $i from 1 through 50{
&.g#{$i}{
>.item,>image,>view,>navigator,>text,>button{
width: 100%/$i;
}
}
}
}
.gridNoMb{
>.item,>image,>view,>navigator,>text,>button{
margin-bottom: 0;
}
}
.gridNoPd{
padding: 0;
>.item,>image,>view,>navigator,>text,>button{
padding: 0;
margin-bottom: 0;
}
}
.gridSmPd{
padding: 0;
>.item,>image,>view,>navigator,>text,>button{
padding-right: 0;
&:first-child{
padding-left: 0;
padding-right: 10upx;
}
}
}
/* flex布局 */
.flex{
display: flex;
align-items: center;
justify-content: space-between;
&.t{
align-items: flex-start;
}
&.b{
align-items: flex-end;
}
&.cv{ //垂直方向铺满
align-items: stretch;
}
&.bk{ //水平方向铺满
flex-direction: column;
}
&.lt{
justify-content: flex-start;
}
&.ct{
justify-content: center;
}
&.rt{
justify-content: flex-end;
}
&.ar{
justify-content: space-around;
}
&.av{
>.item,view,button,navigator,image,text{
flex:1;
}
}
}
/* 定位布局 */
.father{
position: relative;
}
.abs,.fixed{
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 1;
&image{
width: 100%;
height: 100%;
}
&.top{
bottom: auto;
}
&.bottom{
top: auto;
}
&.left{
right: auto;
}
&.right{
left: auto;
}
}
@for $i from 0 through 20 {
.z#{$i}{
z-index: $i !important;
}
}
@for $i from 1 through 200 {
.top-#{$i}{
bottom: auto;
top: $i * -2upx;
}
.left-#{$i}{
right: auto;
left: $i * -2upx;
}
.bottom-#{$i}{
top: auto;
bottom: $i * -2upx;
}
.right-#{$i}{
left: auto;
right: $i * -2upx;
}
.top#{$i}{
bottom: auto;
top: $i * 2upx;
}
.left#{$i}{
right: auto;
left: $i * 2upx;
}
.bottom#{$i}{
top: auto;
bottom: $i * 2upx;
}
.right#{$i}{
left: auto;
right: $i * 2upx;
}
.top-#{$i}p{
bottom: auto;
top: $i * -1%;
}
.left-#{$i}p{
right: auto;
left: $i * -1%;
}
.bottom-#{$i}p{
top: auto;
bottom: $i * -1%;
}
.right-#{$i}p{
left: auto;
right: $i * -1%;
}
.top#{$i}p{
bottom: auto;
top: $i * 1%;
}
.left#{$i}p{
right: auto;
left: $i * 1%;
}
.bottom#{$i}p{
top: auto;
bottom: $i * 1%;
}
.right#{$i}p{
left: auto;
right: $i * 1%;
}
}
.fixed{
position: fixed;
}
/* fix-auto布局 */
.fixAuto,.fixAutoNoPd,.fixAutoSmPd{
display: table;
width: 100%;
padding: 20upx 10upx;
>.item,>view,>image,>navigator,>text,>button{
vertical-align: top;
padding: 0 10upx;
display: table-cell ;
}
&.middle{
>.item,>view,>image,>navigator,>text{
vertical-align: middle;
}
}
&.bottom{
>.item,>view,>image,>navigator,>text{
vertical-align: bottom;
}
}
}
.fixAutoSmPd{
padding: 0;
>.item,>view,>image,>navigator,>text{
padding-right: 0;
&:first-child{
padding-left: 0;
padding-right: 10upx;
}
}
}
.fixAutoNoPd{
padding: 0;
>.item,>view,>image,>navigator,>text{
padding: 0;
}
}
/* 浮动组件 */
.clear{
&:after{
content: "";
clear: both;
height: 0;
display: block;
visibility: hidden;
}
}
.fl{
float: left;
}
.fr{
float: right;
}
/* 按钮样式类 */
.btn,.roundBtn{
cursor: pointer;
display: inline-block;
text-align: center;
padding: 8upx 24upx;
background-color: $main;
color: $mainInverse ;
font-size: 28upx;
border: 1px solid $main;
-webkit-border-radius: 8upx;
-moz-border-radius: 8upx;
border-radius: 8upx;
transition: 0.4s;
white-space: nowrap;
text-overflow: ellipsis;
&.gradualBg{
border-color: transparent;
background-image: $mainGradual;
color: $mainGradualInverse;
}
&.blackBg{
background-color: $black;
border-color: $black;
color: #fff;
&.shadow{
box-shadow: 0px 2px 9px -1px rgba($black , 0.4);
}
}
&.greenBg{
background-color: $green;
border-color: $green;
color: #fff;
&.shadow{
box-shadow: 0px 2px 9px -1px rgba($green , 0.4);
}
}
&.grayBg{
border-color: rgba(#30302f,0.2);
background-color: #f7f7f7;
color: #30302f;
&.shadow{
box-shadow: 0px 2px 9px -1px rgba( #30302f , 0.2);
}
}
&.whiteBg{
border-color: rgba(#fff,0.2);
background-color: #fff;
color: #000;
}
&.orangeBg{
border-color: $orange;
background-color: $orange;
color: #fff;
&.shadow{
box-shadow: 0px 2px 9px -1px rgba( $orange , 0.4);
}
}
&.redBg{
border-color: $red;
background-color: $red;
color: #fff;
&.shadow{
box-shadow: 0px 2px 9px -1px rgba( $red , 0.4);
}
}
&.yellowBg{
border-color: $yellow;
background-color: $yellow;
color: #000;
&.shadow{
box-shadow: 0px 2px 9px -1px rgba( $yellow , 0.4);
}
}
&.line{
background-color: transparent;
background-image: none;
color: $main;
&.blackBg{
color: $black;
}
&.greenBg{
color: $green;
}
&.yellowBg{
color: $yellow;
}
&.grayBg{
color: #30302f;
}
&.whiteBg{
border-color: rgba(#fff,0.7);
color: #fff;
}
&.orangeBg{
color: $orange;
}
&.redBg{
color: $red;
}
}
&+.btn,&+.roundBtn{
margin-left: 20upx;
}
&.block{
margin: 0;
padding: 20upx 24upx;
display: block;
width: 100%;
&+.btn{
margin-left: 0;
}
}
&:hover{
-webkit-transform: scale(0.99);
-moz-transform: scale(0.99);
-ms-transform: scale(0.99);
-o-transform: scale(0.99);
transform: scale(0.99);
opacity: 0.8;
}
&.disabled{
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1);
opacity: 0.4;
cursor: not-allowed;
}
}
[class^="tag"] , [class*=" tag"]{
display: inline-block;
font-size: 24upx;
padding: 4upx 14upx;
border-radius: 4upx;
margin-right: 6upx;
margin-left: 6upx;
}
.tag{
background-color: rgba($main,0.2);
color: $main;
}
.tagBlue{
background-color: rgba($blue,0.2);
color: $blue;
}
.tagGray{
background-color: rgba($gray,0.2);
color: $gray;
}
.tagGradual{
background-image: linear-gradient(to top right,rgba($main,0.2),rgba($main,0.1));
color: $main;
}
.tagBlack{
background-color: rgba($black,0.2);
color: $black;
}
.tagGreen{
background-color: rgba($green,0.2);
color: $green;
}
.tagWhite{
background-color: rgba($white,0.2);
color: $white;
}
.tagOrange{
background-color: rgba($orange,0.2);
color: $orange;
}
.tagRed{
background-color: rgba($red,0.2);
color: $red;
}
.tagYellow{
background-color: rgba($yellow,0.2);
color: $yellow;
}
/* 边线(实线、虚线) */
.bdn{
border: none;
}
.bd{
border: 1px solid $borderColor;
&.dashed{
border-style: dashed;
}
}
.bt{
border-top:1px solid $borderColor;
&.dashed{
border-top-style: dashed;
}
}
.bb{
border-bottom:1px solid $borderColor;
&.dashed{
border-bottom-style: dashed;
}
}
.bl{
border-left:1px solid $borderColor;
&.dashed{
border-left-style: dashed;
}
}
.br{
border-right: 1px solid $borderColor;
&.dashed{
border-right-style: dashed;
}
}
$b:2;
@while $b <= 10 {
.bd#{$b}{
border: #{$b}px solid $borderColor;
&.dashed{
border-style: dashed;
}
}
.bt#{$b}{
border-top:#{$b}px solid $borderColor;
&.dashed{
border-top-style: dashed;
}
}
.bb#{$b}{
border-bottom:#{$b}px solid $borderColor;
&.dashed{
border-bottom-style: dashed;
}
}
.bl#{$b}{
border-left:#{$b}px solid $borderColor;
&.dashed{
border-left-style: dashed;
}
}
.br#{$b}{
border-right: #{$b}px solid $borderColor;
&.dashed{
border-right-style: dashed;
}
}
$b : $b + 1 ;
}
/* 边线颜色 */
.mainBd{
border-color: $main;
}
.greenBd{
border-color: $green;
}
.redBd{
border-color: $red;
}
.yellowBd{
border-color:$yellow ;
}
.blackBd{
border-color: $black;
}
.whiteBd{
border-color:$white ;
}
.grayBd{
border-color:$gray;
}
.greyBd{
border-color:$grey;
}
.orangeBd{
border-color:$orange;
}
/* 圆角 */
.radius,.rds{
-webkit-border-radius: 100%!important;
-moz-border-radius: 100%!important;
border-radius: 100%!important;
}
$r:0;
@while $r <= 50{
.rds#{$r},&.radius#{$r}{
-webkit-border-radius:$r*2upx!important;
-moz-border-radius:$r*2upx!important;
border-radius:$r*2upx!important;
}
$r : $r + 1;
}
.rdsTl,.radiusTopLeft{
border-top-left-radius:100%!important;
}
.rdsTr,.radiusTopRight{
border-top-right-radius: 100%!important;
}
.rdsBl,.radiusBottomLeft{
border-bottom-left-radius: 100%!important;
}
.rdsBr,.radiusBottomRight{
border-bottom-right-radius: 100%!important;
}
$r:0;
@while $r <= 50{
.rdsTl#{$r},.radiusTopLeft#{$r}{
border-top-left-radius: $r*2upx!important;
}
.rdsTr#{$r},.radiusTopRight#{$r}{
border-top-right-radius: $r*2upx!important;
}
.rdsBl#{$r},.radiusBottomLeft#{$r}{
border-bottom-left-radius: $r*2upx!important;
}
.rdsBr#{$r},.radiusBottomRight#{$r}{
border-bottom-right-radius: $r*2upx!important;
}
$r : $r + 1;
}
/* 正方形&长方形 */
[class^="square"] , [class*=" square"]{
width: 100%;
position: relative;
height: auto;
>.item,>image,>view,>navigator,>text,>button{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
}
$p : 200 ;
@while $p > 0 {
.square#{$p}{
padding-top: $p*1%;
}
@if $p == 100 {
.square{
padding-top: 100%;
}
}
$p : $p - 5 ;
}
/* 阴影 */
.shadow{
box-shadow: 0px 2px 9px -1px rgba(0, 0, 0, 0.1);
}
/* 遮罩层 */
.wrapper-top,.wt{
background-image: linear-gradient(rgba(0,0,0,0.3) , rgba(0,0,0,0.02));
}
.wrapper-bottom,.wb{
background-image: linear-gradient( rgba(0,0,0,0.02) , rgba(0,0,0,0.3) );
}
[class^="wp"],[class*=" wp"] {
z-index: 10;
}
/* 透明度 */
@for $op from 0 through 10 {
.op#{$op}{
opacity: $op * 0.1!important;
}
.wp#{$op}{
background-color: rgba(#000,$op*0.1);
}
@if $op == 5 {
.wp{
background-color: rgba(#000,0.5);
}
}
}
/* 分割线 */
[class*=" split"],[class^="split"] {
position: relative;
&:before{
content:"";
display: block;
position: absolute;
left: 0;
top: 50%;
border-left: 1px solid $borderColor;
}
}
$s:10;
@while $s <= 100 {
.split#{$s}{
&:before{
height: #{$s*2}upx;
margin-top: -#{$s}upx;
}
}
@if $s == 10 {
.split{
&:before{
height: 20upx;
margin-top: -10upx;
}
}
}
$s:$s+2;
}
.hover,[class^="hover"],[class*=" hover"]{
transition: all 0.4s;
cursor: pointer;
&:hover{
opacity: 0.8 !important;
}
}
.statusBar{
height: var(--status-bar-height);
}
.winBottom{
height: var(--windown-bottom);
}
.safeBottom{
padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom);
}
.disabled{
opacity:0.8;
cursor: not-allowed;
}
.grid,.gridNoMb,.gridNoPd{
>.btn,>.roundBtn{
&+.btn,&+.roundBtn{
margin-left: 0 ;
}
}
}
.roundBtn{
-webkit-border-radius: 100upx;
-moz-border-radius: 100upx;
border-radius: 100upx;
}
/* 位置 */
.text-center,.tc{
text-align: center!important;
}
.text-left,.tl{
text-align: left!important;
}
.text-right,.tr{
text-align: right!important;
}
.text-justify,.tj{
text-align: justify!important;
}
.text-bold,.bold{
font-weight: bold!important;
}
.text-normal,.normal{
font-weight: normal!important;
}
.break{
white-space: normal;
word-break: break-all;
}
.noBreak{
white-space: nowrap;
word-break: keep-all;
}
.inline{
display: inline-block;
}
.block{
display: block;
width: 100%;
}
.none{
display: none;
}
.center-block{
margin: 0 auto;
display: block;
}
.hidden{
overflow: hidden;
}
.hiddenX{
overflow-x: hidden;
}
.hiddenY{
overflow-y: hidden;
}
.auto{
overflow: auto;
}
.autoX{
overflow-x: auto;
}
.autoY{
overflow-y: auto;
}
.showInMb{
display: block;
}
.showInPc{
display: none;
}
table{
width: 100%;
border-collapse: collapse;
border-spacing: 0;
border: 1px solid #e6e6e6;
thead{
tr{
background-color: #f2f2f2;
th{
color: #8799a3;
width: 1%;
}
}
}
tr{
background-color: #fff;
transition: all 0.4s;
td,th{
border: 1px solid #e6e6e6;
overflow: hidden;
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
white-space: nowrap;
word-wrap: break-word;
padding: 5px 10px;
height: 28px;
line-height: 28px;
&.autoWidth{
width: auto;
}
}
&:hover{
background-color: #f2f2f2;
}
}
}
</style>