forked from opentiny/tiny-vue
331 lines
8.0 KiB
Vue
331 lines
8.0 KiB
Vue
<template>
|
||
<div class="custom-status">
|
||
<div class="error">
|
||
<div class="tiny-progress-demo">
|
||
<span class="tiny-progress-demo-title">失败:</span>
|
||
<div class="tiny-progress-content">
|
||
<div class="tiny-progress-content-des">
|
||
<div class="tiny-progress-content-des-title">安装进度</div>
|
||
</div>
|
||
<tiny-progress
|
||
class="progress"
|
||
type="line"
|
||
:percentage="percentage"
|
||
status="exception"
|
||
:stroke-width="24"
|
||
></tiny-progress>
|
||
<div class="tiny-progress-demo-status">
|
||
<tiny-icon-operationfaild-l class="tiny-progress-demo-status-icon"></tiny-icon-operationfaild-l>
|
||
<div class="tiny-progress-demo-status-des">上传失败</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="loading">
|
||
<div class="tiny-progress-demo">
|
||
<span class="tiny-progress-demo-title">上传中:</span>
|
||
<div class="tiny-progress-content">
|
||
<div class="tiny-progress-content-des">
|
||
<div class="tiny-progress-content-des-title">安装进度</div>
|
||
<div class="tiny-progress-content-des-loading">
|
||
<div class="tiny-progress-content-des-stop" @click="stop">暂停</div>
|
||
<div class="tiny-progress-content-des-on" @click="cancel">取消</div>
|
||
</div>
|
||
</div>
|
||
<tiny-progress class="progress" type="line" :percentage="percentage1" :stroke-width="24"></tiny-progress>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="reloading">
|
||
<div class="tiny-progress-demo">
|
||
<span class="tiny-progress-demo-title">失败可重试:</span>
|
||
<div class="tiny-progress-content">
|
||
<div class="tiny-progress-content-des">
|
||
<div class="tiny-progress-content-des-title">安装进度</div>
|
||
</div>
|
||
<tiny-progress
|
||
class="progress"
|
||
type="line"
|
||
:percentage="percentage2"
|
||
status="exception"
|
||
:stroke-width="24"
|
||
></tiny-progress>
|
||
<div class="tiny-progress-demo-status">
|
||
<tiny-icon-operationfaild-l class="tiny-progress-demo-status-icon"></tiny-icon-operationfaild-l>
|
||
<div class="tiny-progress-demo-status-des">
|
||
安装失败,请<i class="tiny-progress-demo-status-des-again" @click="reload">重试</i>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="success">
|
||
<div class="tiny-progress-demo">
|
||
<span class="tiny-progress-demo-title">成功:</span>
|
||
<div class="tiny-progress-content">
|
||
<div class="tiny-progress-content-des">
|
||
<div class="tiny-progress-content-des-title">安装进度</div>
|
||
</div>
|
||
<tiny-progress
|
||
class="progress"
|
||
type="line"
|
||
:percentage="percentage3"
|
||
status="success"
|
||
:stroke-width="24"
|
||
></tiny-progress>
|
||
<div class="tiny-progress-demo-status">
|
||
<tiny-icon-successfull class="tiny-progress-demo-status-icon"></tiny-icon-successfull>
|
||
<div class="tiny-progress-demo-status-des">安装成功</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<script setup>
|
||
import { ref, onMounted } from 'vue'
|
||
import { Progress as TinyProgress } from '@opentiny/vue'
|
||
import { iconOperationfaildL, iconSuccessful } from '@opentiny/vue-icon'
|
||
|
||
const TinyIconOperationfaildL = iconOperationfaildL()
|
||
const TinyIconSuccessfull = iconSuccessful()
|
||
|
||
const percentage = ref(50)
|
||
const percentage1 = ref(0)
|
||
const process1 = ref(null)
|
||
const percentage2 = ref(0)
|
||
const process2 = ref(null)
|
||
const percentage3 = ref(100)
|
||
|
||
const stop = () => {
|
||
clearTimeout(process1.value)
|
||
}
|
||
|
||
const cancel = () => {
|
||
clearTimeout(process1.value)
|
||
percentage1.value = 0
|
||
}
|
||
|
||
const getTimer1 = () => {
|
||
process1.value = setInterval(() => {
|
||
percentage1.value += 5
|
||
|
||
if (percentage1.value === 100) {
|
||
clearTimeout(process1.value)
|
||
}
|
||
}, 300)
|
||
}
|
||
|
||
const reload = () => {
|
||
clearInterval(process2.value)
|
||
percentage2.value = 0
|
||
getTimer2()
|
||
}
|
||
|
||
const getTimer2 = () => {
|
||
process2.value = setInterval(() => {
|
||
percentage2.value += 5
|
||
|
||
if (percentage2.value === 50) {
|
||
clearInterval(process2.value)
|
||
}
|
||
}, 300)
|
||
}
|
||
|
||
onMounted(() => {
|
||
getTimer1()
|
||
getTimer2()
|
||
})
|
||
</script>
|
||
|
||
<style lang="less" scoped>
|
||
.error {
|
||
.tiny-progress-demo {
|
||
display: flex;
|
||
}
|
||
.tiny-progress-content {
|
||
flex: 1;
|
||
}
|
||
.tiny-progress-demo-status {
|
||
display: flex;
|
||
align-items: center;
|
||
margin-top: 8px;
|
||
}
|
||
.tiny-progress-demo-status-icon {
|
||
fill: #e02128;
|
||
}
|
||
.tiny-progress-demo-status-des {
|
||
display: inline-block;
|
||
margin-left: 8px;
|
||
height: 20px;
|
||
line-height: 20px;
|
||
font-size: 12px;
|
||
}
|
||
.tiny-progress-content-des {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
margin-bottom: 8px;
|
||
}
|
||
.tiny-progress-content-des-title {
|
||
display: inline-block;
|
||
height: 20px;
|
||
line-height: 20px;
|
||
font-size: 12px;
|
||
}
|
||
.tiny-progress-demo-title {
|
||
display: flex;
|
||
margin-right: 40px;
|
||
color: #aeaeae;
|
||
align-items: center;
|
||
font-size: 12px;
|
||
}
|
||
}
|
||
|
||
.loading {
|
||
margin-top: 20px;
|
||
.tiny-progress-demo {
|
||
display: flex;
|
||
}
|
||
.tiny-progress-content {
|
||
flex: 1;
|
||
}
|
||
.tiny-progress-demo-status {
|
||
display: flex;
|
||
align-items: center;
|
||
margin-top: 8px;
|
||
}
|
||
.tiny-progress-content-des {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
margin-bottom: 8px;
|
||
}
|
||
.tiny-progress-content-des-title {
|
||
display: inline-block;
|
||
height: 20px;
|
||
line-height: 20px;
|
||
font-size: 12px;
|
||
}
|
||
.tiny-progress-demo-title {
|
||
display: flex;
|
||
margin-right: 40px;
|
||
color: #aeaeae;
|
||
align-items: center;
|
||
font-size: 12px;
|
||
}
|
||
.tiny-progress-content-des-loading {
|
||
display: flex;
|
||
color: #0067d1;
|
||
margin-right: 40px;
|
||
cursor: pointer;
|
||
font-size: 12px;
|
||
}
|
||
.tiny-progress-content-des-stop {
|
||
display: inline-block;
|
||
height: 20px;
|
||
margin-right: 8px;
|
||
}
|
||
.tiny-progress-content-des-on {
|
||
display: inline-block;
|
||
height: 20px;
|
||
}
|
||
}
|
||
|
||
.reloading {
|
||
margin-top: 20px;
|
||
.tiny-progress-demo {
|
||
display: flex;
|
||
}
|
||
.tiny-progress-content {
|
||
flex: 1;
|
||
}
|
||
.tiny-progress-demo-status {
|
||
display: flex;
|
||
align-items: center;
|
||
margin-top: 8px;
|
||
}
|
||
.tiny-progress-demo-status-icon {
|
||
fill: #e02128;
|
||
}
|
||
.tiny-progress-demo-status-des {
|
||
display: inline-block;
|
||
margin-left: 8px;
|
||
height: 20px;
|
||
line-height: 20px;
|
||
font-size: 12px;
|
||
}
|
||
.tiny-progress-content-des {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
margin-bottom: 8px;
|
||
}
|
||
.tiny-progress-content-des-title {
|
||
display: inline-block;
|
||
height: 20px;
|
||
line-height: 20px;
|
||
font-size: 12px;
|
||
}
|
||
.tiny-progress-demo-title {
|
||
display: flex;
|
||
margin-right: 40px;
|
||
color: #aeaeae;
|
||
align-items: center;
|
||
font-size: 12px;
|
||
}
|
||
.tiny-progress-demo-status-des-again {
|
||
margin-left: 4px;
|
||
vertical-align: top;
|
||
cursor: pointer;
|
||
font-style: normal;
|
||
color: #0067d1;
|
||
font-size: 12px;
|
||
}
|
||
}
|
||
|
||
.success {
|
||
margin-top: 20px;
|
||
.tiny-progress-demo {
|
||
display: flex;
|
||
}
|
||
.tiny-progress-content {
|
||
flex: 1;
|
||
}
|
||
.tiny-progress-demo-status {
|
||
display: flex;
|
||
align-items: center;
|
||
margin-top: 8px;
|
||
}
|
||
.tiny-progress-demo-status-icon {
|
||
fill: #09aa71;
|
||
}
|
||
.tiny-progress-demo-status-des {
|
||
display: inline-block;
|
||
margin-left: 8px;
|
||
font-size: 12px;
|
||
height: 20px;
|
||
line-height: 20px;
|
||
}
|
||
.tiny-progress-content-des {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
margin-bottom: 8px;
|
||
}
|
||
.tiny-progress-content-des-title {
|
||
display: inline-block;
|
||
height: 20px;
|
||
line-height: 20px;
|
||
font-size: 12px;
|
||
}
|
||
.tiny-progress-demo-title {
|
||
display: flex;
|
||
margin-right: 40px;
|
||
color: #aeaeae;
|
||
align-items: center;
|
||
font-size: 12px;
|
||
}
|
||
}
|
||
</style>
|