<template>
|
|
<view class="l-loading" :class="classes">
|
|
<!-- #ifndef APP-ANDROID || APP-IOS -->
|
|
<view class="l-loading__ball" v-if="type == 'ball'" :style="[spinnerStyle]"></view>
|
|
<view class="l-loading__circular" v-if="type == 'circular'" :style="[spinnerStyle]"></view>
|
|
<view class="l-loading__spinner" v-if="type == 'spinner'" :style="[spinnerStyle]">
|
|
<view class="l-loading__dot" v-for="item in 12" :key="item" :style="{'--l-loading-dot': item}"></view>
|
|
</view>
|
|
<!-- #endif -->
|
|
<!-- #ifdef APP-ANDROID || APP-IOS -->
|
|
<view class="l-loading__view" ref="loadingRef" :style="spinnerStyle"></view>
|
|
<!-- #endif -->
|
|
<text class="l-loading__text" v-if="$slots['default'] != null || text !==''" :style="textStyle">
|
|
<slot>{{text}}</slot>
|
|
</text>
|
|
</view>
|
|
</template>
|
|
<script lang="uts" setup>
|
|
// #ifdef APP
|
|
// import {useLoading} from './useLoading'
|
|
import {useLoading} from '@/uni_modules/lime-loading'
|
|
// #endif
|
|
|
|
/**
|
|
* LimeLoading 加载
|
|
* @description 加载
|
|
* @tutorial https://ext.dcloud.net.cn/plugin?name=lime-loading
|
|
* @property {String} color loading颜色
|
|
* @property {String} type loading类型,默认circular
|
|
* @value circular 圆环
|
|
* @value spinner 菊花
|
|
* @property {String} size 尺寸
|
|
* @property {String} text 文案
|
|
* @property {String} textColor 文案颜色
|
|
* @property {String} textSize 文案字体大小
|
|
* @property {Boolean} vertical 是否垂直
|
|
* @property {Boolean} inheritColor 是否继续颜色
|
|
*/
|
|
const name = 'l-loading'
|
|
defineOptions({
|
|
name: 'l-loading'
|
|
})
|
|
const props = defineProps({
|
|
color: {
|
|
type: String,
|
|
// #ifdef APP
|
|
default: '#1677ff' // '#c9c9c9'
|
|
// #endif
|
|
},
|
|
type: {
|
|
type: String,
|
|
default: 'circular'
|
|
},
|
|
size: {
|
|
type: String,
|
|
// #ifdef APP
|
|
default: '40rpx',
|
|
// #endif
|
|
},
|
|
text: {
|
|
type: String,
|
|
default: ''
|
|
},
|
|
textColor: {
|
|
type: String,
|
|
default: ''
|
|
},
|
|
textSize: {
|
|
type: String,
|
|
default: ''
|
|
},
|
|
vertical: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
})
|
|
|
|
const classes = computed<Map<string,any>>(():Map<string,any> => {
|
|
const cls = new Map<string,any>()
|
|
cls.set(name + '--' + props.type, true)
|
|
if (props.vertical) {
|
|
cls.set('is-vertical', props.vertical)
|
|
} else {
|
|
cls.set('is-horizontal', !props.vertical)
|
|
}
|
|
return cls
|
|
})
|
|
|
|
const spinnerStyle = computed<Map<string,any>>(():Map<string,any> => {
|
|
const style = new Map<string,any>()
|
|
style.set('width', props.size)
|
|
style.set('height', props.size)
|
|
// #ifndef APP
|
|
style.set('color', props.color)
|
|
// #endif
|
|
return style
|
|
})
|
|
|
|
const textStyle = computed<Map<string,any>>(():Map<string,any> => {
|
|
const style = new Map<string,any>()
|
|
if (props.textColor !== '') {
|
|
style.set('color', props.textColor)
|
|
}
|
|
if (props.textSize !== '') {
|
|
style.set('font-size', props.textSize)
|
|
}
|
|
return style
|
|
})
|
|
// #ifdef APP
|
|
const loadingRef = ref<UniElement|null>(null)
|
|
// const {state, color} = useLoading(loadingRef, props.type, props.color, 1)
|
|
const loading = useLoading(loadingRef)
|
|
loading.type = props.type;
|
|
loading.play()
|
|
// state.value = true
|
|
watchEffect(()=>{
|
|
if(props.color != ''){
|
|
// color.value = props.color
|
|
loading.color = props.color;
|
|
}
|
|
})
|
|
// #endif
|
|
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
@import './index-u.scss';
|
|
</style>
|