| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811 | /*** 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>
 |