Files
love-nav-vue/src/components/setting/importExport/Export.vue
2023-12-27 16:44:51 +08:00

1131 lines
19 KiB
Vue

<template>
<div>
<div class="dl">
<div class="dl-box">
<div class="dl-button" @click="downloadByUserId">
<div class="arrow"></div>
<div class="basket">
<div class="basket-top"></div>
</div>
</div>
<div class="dl-progress">
<div class="check">
<svg>
<use xlink:href="#check"></use>
</svg>
</div>
</div>
</div>
<div class="dl-status">
<div class="text text-file">Status</div>
<div class="text text-number"></div>
</div>
</div>
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 130 130" id="check">
<polyline points="100.2,40.2 51.5,88.8 29.8,67.5 "></polyline>
</symbol>
</svg>
</div>
</template>
<script>
import axios from "axios";
import Vue from "vue";
export default {
name: "Export",
data() {
return {
}
},
mounted() {
var $ = (s, o = document) => o.querySelector(s);
$(".dl").addEventListener("click", function () {
this.classList.add("run");
setTimeout(() => this.classList.add("done"), 4000);
setTimeout(() => this.classList.remove("done"), 5500);
setTimeout(() => this.classList.remove("run"), 5500);
});
},
created() {
},
computed: {},
methods: {
getCurrentDate() {
let now = new Date();
let year = now.getFullYear();
let month = now.getMonth() + 1;
let day = now.getDate();
return year + "-" + month + "-" + day;
},
downloadByUserId(){
let _this = this;
if (localStorage.getItem('userId')&&localStorage.getItem('Authorization')) {
axios({
method: 'post',
url: '/api/UrlAndCate/dataDownload/excel',
responseType: 'blob',
params: {
userId:localStorage.getItem('userId'),
},
}).then(function (res) {
if(res.status!==200){
Vue.prototype.$notify.error({
title: '错误',
message: "导出失败!",
offset: 0
});
}
else {
setTimeout(()=>{
Vue.prototype.$notify({
title: '成功',
message: ('i', {style: 'color: teal'} , "导出成功!"),
type: 'success',
offset: 0
});
const link = document.createElement('a')
const blob = new Blob([res.data], { type: 'application/vnd.ms-excel' })
link.style.display = 'none'
link.href = URL.createObjectURL(blob)
link.setAttribute('download', `data.xls`)
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
},4000)
}
}).catch((error) => {
// Vue.prototype.$notify.error({
// title: '错误',
// message: error,
// offset: 0
// });
})
} else {
Vue.prototype.$notify.error({
title: '错误',
message: '登录状态失效,请重新登录!',
offset: 0
});
}
}
}
}
</script>
<style scoped>
@-webkit-keyframes status-animation {
1% {
content: "1%";
}
2% {
content: "2%";
}
3% {
content: "3%";
}
4% {
content: "4%";
}
5% {
content: "5%";
}
6% {
content: "6%";
}
7% {
content: "7%";
}
8% {
content: "8%";
}
9% {
content: "9%";
}
10% {
content: "10%";
}
11% {
content: "11%";
}
12% {
content: "12%";
}
13% {
content: "13%";
}
14% {
content: "14%";
}
15% {
content: "15%";
}
16% {
content: "16%";
}
17% {
content: "17%";
}
18% {
content: "18%";
}
19% {
content: "19%";
}
20% {
content: "20%";
}
21% {
content: "21%";
}
22% {
content: "22%";
}
23% {
content: "23%";
}
24% {
content: "24%";
}
25% {
content: "25%";
}
26% {
content: "26%";
}
27% {
content: "27%";
}
28% {
content: "28%";
}
29% {
content: "29%";
}
30% {
content: "30%";
}
31% {
content: "31%";
}
32% {
content: "32%";
}
33% {
content: "33%";
}
34% {
content: "34%";
}
35% {
content: "35%";
}
36% {
content: "36%";
}
37% {
content: "37%";
}
38% {
content: "38%";
}
39% {
content: "39%";
}
40% {
content: "40%";
}
41% {
content: "41%";
}
42% {
content: "42%";
}
43% {
content: "43%";
}
44% {
content: "44%";
}
45% {
content: "45%";
}
46% {
content: "46%";
}
47% {
content: "47%";
}
48% {
content: "48%";
}
49% {
content: "49%";
}
50% {
content: "50%";
}
51% {
content: "51%";
}
52% {
content: "52%";
}
53% {
content: "53%";
}
54% {
content: "54%";
}
55% {
content: "55%";
}
56% {
content: "56%";
}
57% {
content: "57%";
}
58% {
content: "58%";
}
59% {
content: "59%";
}
60% {
content: "60%";
}
61% {
content: "61%";
}
62% {
content: "62%";
}
63% {
content: "63%";
}
64% {
content: "64%";
}
65% {
content: "65%";
}
66% {
content: "66%";
}
67% {
content: "67%";
}
68% {
content: "68%";
}
69% {
content: "69%";
}
70% {
content: "70%";
}
71% {
content: "71%";
}
72% {
content: "72%";
}
73% {
content: "73%";
}
74% {
content: "74%";
}
75% {
content: "75%";
}
76% {
content: "76%";
}
77% {
content: "77%";
}
78% {
content: "78%";
}
79% {
content: "79%";
}
80% {
content: "80%";
}
81% {
content: "81%";
}
82% {
content: "82%";
}
83% {
content: "83%";
}
84% {
content: "84%";
}
85% {
content: "85%";
}
86% {
content: "86%";
}
87% {
content: "87%";
}
88% {
content: "88%";
}
89% {
content: "89%";
}
90% {
content: "90%";
}
91% {
content: "91%";
}
92% {
content: "92%";
}
93% {
content: "93%";
}
94% {
content: "94%";
}
95% {
content: "95%";
}
96% {
content: "96%";
}
97% {
content: "97%";
}
98% {
content: "98%";
}
99% {
content: "99%";
}
100% {
content: "100%";
}
}
@keyframes status-animation {
1% {
content: "1%";
}
2% {
content: "2%";
}
3% {
content: "3%";
}
4% {
content: "4%";
}
5% {
content: "5%";
}
6% {
content: "6%";
}
7% {
content: "7%";
}
8% {
content: "8%";
}
9% {
content: "9%";
}
10% {
content: "10%";
}
11% {
content: "11%";
}
12% {
content: "12%";
}
13% {
content: "13%";
}
14% {
content: "14%";
}
15% {
content: "15%";
}
16% {
content: "16%";
}
17% {
content: "17%";
}
18% {
content: "18%";
}
19% {
content: "19%";
}
20% {
content: "20%";
}
21% {
content: "21%";
}
22% {
content: "22%";
}
23% {
content: "23%";
}
24% {
content: "24%";
}
25% {
content: "25%";
}
26% {
content: "26%";
}
27% {
content: "27%";
}
28% {
content: "28%";
}
29% {
content: "29%";
}
30% {
content: "30%";
}
31% {
content: "31%";
}
32% {
content: "32%";
}
33% {
content: "33%";
}
34% {
content: "34%";
}
35% {
content: "35%";
}
36% {
content: "36%";
}
37% {
content: "37%";
}
38% {
content: "38%";
}
39% {
content: "39%";
}
40% {
content: "40%";
}
41% {
content: "41%";
}
42% {
content: "42%";
}
43% {
content: "43%";
}
44% {
content: "44%";
}
45% {
content: "45%";
}
46% {
content: "46%";
}
47% {
content: "47%";
}
48% {
content: "48%";
}
49% {
content: "49%";
}
50% {
content: "50%";
}
51% {
content: "51%";
}
52% {
content: "52%";
}
53% {
content: "53%";
}
54% {
content: "54%";
}
55% {
content: "55%";
}
56% {
content: "56%";
}
57% {
content: "57%";
}
58% {
content: "58%";
}
59% {
content: "59%";
}
60% {
content: "60%";
}
61% {
content: "61%";
}
62% {
content: "62%";
}
63% {
content: "63%";
}
64% {
content: "64%";
}
65% {
content: "65%";
}
66% {
content: "66%";
}
67% {
content: "67%";
}
68% {
content: "68%";
}
69% {
content: "69%";
}
70% {
content: "70%";
}
71% {
content: "71%";
}
72% {
content: "72%";
}
73% {
content: "73%";
}
74% {
content: "74%";
}
75% {
content: "75%";
}
76% {
content: "76%";
}
77% {
content: "77%";
}
78% {
content: "78%";
}
79% {
content: "79%";
}
80% {
content: "80%";
}
81% {
content: "81%";
}
82% {
content: "82%";
}
83% {
content: "83%";
}
84% {
content: "84%";
}
85% {
content: "85%";
}
86% {
content: "86%";
}
87% {
content: "87%";
}
88% {
content: "88%";
}
89% {
content: "89%";
}
90% {
content: "90%";
}
91% {
content: "91%";
}
92% {
content: "92%";
}
93% {
content: "93%";
}
94% {
content: "94%";
}
95% {
content: "95%";
}
96% {
content: "96%";
}
97% {
content: "97%";
}
98% {
content: "98%";
}
99% {
content: "99%";
}
100% {
content: "100%";
}
}
.dl {
--background: #FFFFFF;
--primary: #1F242D;
--border-radius: 3px;
--square-size: 70px;
--progress-color: linear-gradient(to right top, #00A7FC, #0070ED);
display: flex;
justify-content: space-between;
align-items: center;
}
.dl .dl-box {
display: flex;
justify-content: center;
align-items: center;
border-radius: var(--border-radius);
overflow: hidden;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
}
.dl .dl-box .dl-button {
width: 55px;
height: 55px;
position: relative;
display: flex;
justify-content: center;
background: var(--theme-bg-color);
cursor: pointer;
transition: width 0.2s ease-in 0.4s, height 0.2s ease-in 0.4s, background 0.2s ease-in 0.4s;
}
.dl .dl-box .dl-button .arrow {
position: absolute;
top: 20px;
width: 2px;
height: 15px;
background: var(--background);
border-radius: var(--border-radius);
transition: background 0.2s ease-in 0.4s;
}
.dl .dl-box .dl-button .arrow:before, .dl .dl-box .dl-button .arrow:after {
content: "";
display: block;
width: 2px;
height: 8px;
background: var(--background);
position: absolute;
bottom: 0px;
transform-origin: 50% 100%;
border-radius: var(--border-radius);
transition: background 0.2s ease-in 0.4s;
}
.dl .dl-box .dl-button .arrow:before {
transform: rotate(-45deg) translateX(25%);
}
.dl .dl-box .dl-button .arrow:after {
transform: rotate(45deg) translateX(-25%);
}
.dl .dl-box .dl-button .basket {
position: absolute;
width: 40px;
height: 20px;
bottom: 20px;
border-radius: var(--border-radius);
}
.dl .dl-box .dl-button .basket:before, .dl .dl-box .dl-button .basket:after {
content: "";
position: absolute;
bottom: 0;
height: 0;
width: 0;
display: block;
opacity: var(--opacity, 0);
transition: opacity 0.15s linear;
border-bottom: solid 2px var(--primary);
box-sizing: border-box;
}
.dl .dl-box .dl-button .basket:before {
left: calc(40px / 2);
border-right: solid 2px var(--primary);
border-radius: 0 var(--border-radius) var(--border-radius) 0;
}
.dl .dl-box .dl-button .basket:after {
right: calc(40px / 2);
border-left: solid 2px var(--primary);
border-radius: var(--border-radius) 0 0 var(--border-radius);
}
.dl .dl-box .dl-button .basket .basket-top:before, .dl .dl-box .dl-button .basket .basket-top:after {
content: "";
position: absolute;
top: 0;
height: 0;
width: 0;
display: block;
border-top: solid 2px var(--primary);
}
.dl .dl-box .dl-button .basket .basket-top:before {
left: 2px;
border-radius: 0 var(--border-radius) var(--border-radius) 0;
}
.dl .dl-box .dl-button .basket .basket-top:after {
right: 2px;
border-radius: var(--border-radius) 0 0 var(--border-radius);
}
.dl .dl-box .dl-progress {
width: 0px;
height: 100%;
position: relative;
transition: width 0.2s ease-in, height 0s linear 0.2s;
}
.dl .dl-box .dl-progress::after {
content: "";
position: absolute;
top: 100%;
bottom: 0;
left: 0;
width: 100%;
background: var(--progress-color);
transition: top 0s ease 0.4s;
}
.dl .dl-box .dl-progress .check {
position: relative;
z-index: 1;
pointer-events: none;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.dl .dl-box .dl-progress .check svg {
height: 45px;
width: 45px;
fill: none;
stroke: var(--background);
stroke-width: 6;
stroke-linecap: round;
stroke-linejoin: round;
stroke-dasharray: 100 100;
stroke-dashoffset: 100;
}
.dl .dl-status {
margin-left: 0;
flex-basis: 0;
width: 0;
transition: all 0.2s ease-out 0.2s;
-webkit-clip-path: inset(0 var(--square-size) 0 0);
clip-path: inset(0 var(--square-size) 0 0);
}
.dl .dl-status .text {
text-align: left;
text-transform: uppercase;
color: rgba(0, 0, 0, 0.3);
font-weight: 500;
letter-spacing: 0.5px;
line-height: 23px;
}
.dl .dl-status .text.text-number {
font-weight: 600;
color: rgba(0, 0, 0, 0.6);
}
.dl .dl-status .text.text-number::after {
content: "0%";
}
.dl.run .dl-box {
height: 100%;
}
.dl.run .dl-box .dl-button {
width: var(--square-size);
height: var(--square-size);
background: var(--background);
transition: width 0.2s ease-out 0.3s, height 0.2s ease-out 0.3s, background 0.2s ease-out 0.3s;
}
.dl.run .dl-box .dl-button .arrow {
background: var(--primary);
transition: background 0.3s ease-in;
-webkit-animation: arrow-main 0.75s ease-in forwards infinite;
animation: arrow-main 0.75s ease-in forwards infinite;
}
.dl.run .dl-box .dl-button .arrow:before, .dl.run .dl-box .dl-button .arrow:after {
transition: background 0.3s ease-in;
background: var(--primary);
}
.dl.run .dl-box .dl-button .arrow:before {
-webkit-animation: arrow-left 0.75s ease-in forwards infinite;
animation: arrow-left 0.75s ease-in forwards infinite;
}
.dl.run .dl-box .dl-button .arrow:after {
-webkit-animation: arrow-right 0.75s ease-in forwards infinite;
animation: arrow-right 0.75s ease-in forwards infinite;
}
.dl.run .dl-box .dl-button .basket:before, .dl.run .dl-box .dl-button .basket:after {
--opacity: 1;
transition: opacity 0s linear 0.3s;
-webkit-animation: btn-border 0.3s forwards ease-in normal 0.5s;
animation: btn-border 0.3s forwards ease-in normal 0.5s;
}
.dl.run .dl-box .dl-button .basket .basket-top:before, .dl.run .dl-box .dl-button .basket .basket-top:after {
-webkit-animation: btn-border-top 0.3s forwards ease-in normal 0.8s;
animation: btn-border-top 0.3s forwards ease-in normal 0.8s;
}
.dl.run .dl-box .dl-progress {
width: var(--square-size);
height: var(--square-size);
transition: width 0.3s ease-in 0.7s, height 0.3s ease-in 0.7s;
background: var(--background);
}
.dl.run .dl-box .dl-progress::after {
top: 0px;
transition: top 2.5s ease 1.5s;
}
.dl.run .dl-status {
width: var(--square-size);
-webkit-clip-path: inset(0 0 0 0);
clip-path: inset(0 0 0 0);
transition: all 0.3s ease-in 0.7s;
}
.dl.run .dl-status .text.text-number::after {
-webkit-animation: status-animation 2.5s ease 1.5s forwards;
animation: status-animation 2.5s ease 1.5s forwards;
}
.dl.done .dl-box .dl-button .arrow {
-webkit-animation-play-state: paused;
animation-play-state: paused;
}
.dl.done .dl-box .dl-button .arrow:before {
-webkit-animation-play-state: paused;
animation-play-state: paused;
}
.dl.done .dl-box .dl-button .arrow:after {
-webkit-animation-play-state: paused;
animation-play-state: paused;
}
.dl.done .dl-box .dl-progress .check svg {
-webkit-animation: check 0.3s ease-in-out forwards;
animation: check 0.3s ease-in-out forwards;
}
@-webkit-keyframes arrow-main {
0% {
transform: translateY(0);
}
30% {
transform: translateY(-5px);
}
80% {
transform: translateY(5px);
}
100% {
transform: translateY(0);
}
}
@keyframes arrow-main {
0% {
transform: translateY(0);
}
30% {
transform: translateY(-5px);
}
80% {
transform: translateY(5px);
}
100% {
transform: translateY(0);
}
}
@-webkit-keyframes arrow-left {
0% {
transform: rotate(-45deg) translateX(25%);
}
30% {
transform: rotate(-55deg) translateX(25%);
}
80% {
transform: rotate(-35deg) translateX(25%);
}
100% {
transform: rotate(-45deg) translateX(25%);
}
}
@keyframes arrow-left {
0% {
transform: rotate(-45deg) translateX(25%);
}
30% {
transform: rotate(-55deg) translateX(25%);
}
80% {
transform: rotate(-35deg) translateX(25%);
}
100% {
transform: rotate(-45deg) translateX(25%);
}
}
@-webkit-keyframes arrow-right {
0% {
transform: rotate(45deg) translateX(-25%);
}
30% {
transform: rotate(55deg) translateX(-25%);
}
80% {
transform: rotate(35deg) translateX(-25%);
}
100% {
transform: rotate(45deg) translateX(-25%);
}
}
@keyframes arrow-right {
0% {
transform: rotate(45deg) translateX(-25%);
}
30% {
transform: rotate(55deg) translateX(-25%);
}
80% {
transform: rotate(35deg) translateX(-25%);
}
100% {
transform: rotate(45deg) translateX(-25%);
}
}
@-webkit-keyframes btn-border {
0% {
width: 0;
height: 0;
}
50% {
width: calc(40px / 2);
height: 0;
}
100% {
width: calc(40px / 2);
height: 20px;
}
}
@keyframes btn-border {
0% {
width: 0;
height: 0;
}
50% {
width: calc(40px / 2);
height: 0;
}
100% {
width: calc(40px / 2);
height: 20px;
}
}
@-webkit-keyframes btn-border-top {
0% {
width: 0px;
}
100% {
width: 10px;
}
}
@keyframes btn-border-top {
0% {
width: 0px;
}
100% {
width: 10px;
}
}
@-webkit-keyframes check {
0% {
stroke-dashoffset: 100;
}
100% {
stroke-dashoffset: 200;
}
}
@keyframes check {
0% {
stroke-dashoffset: 100;
}
100% {
stroke-dashoffset: 200;
}
}
body {
background: #E8EBF3;
height: 100vh;
font: 400 16px "Poppins", sans-serif;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
body .socials {
position: fixed;
display: block;
left: 20px;
bottom: 20px;
}
body .socials > a {
display: block;
width: 30px;
opacity: 0.2;
transform: scale(var(--scale, 0.8));
transition: transform 0.3s cubic-bezier(0.38, -0.12, 0.24, 1.91);
}
body .socials > a:hover {
--scale: 1;
}</style>