diff --git a/frontend/assets/styles.css b/frontend/assets/styles.css index adebfc0..0abafe7 100644 --- a/frontend/assets/styles.css +++ b/frontend/assets/styles.css @@ -166,6 +166,168 @@ input[type="date"]::-webkit-calendar-picker-indicator:hover{ .loader .dot:nth-child(2){animation-delay:.15s} .loader .dot:nth-child(3){animation-delay:.3s} @keyframes bounce{0%,100%{transform:translateY(0);opacity:.7}50%{transform:translateY(-8px);opacity:1}} + + .three-body { + --uib-size: 35px; + --uib-speed: 0.8s; + --uib-color: #5D3FD3; + position: relative; + display: inline-block; + height: var(--uib-size); + width: var(--uib-size); + animation: spin78236 calc(var(--uib-speed) * 2.5) infinite linear; + } + + .three-body__dot { + position: absolute; + height: 100%; + width: 30%; + } + + .three-body__dot:after { + content: ''; + position: absolute; + height: 0%; + width: 100%; + padding-bottom: 100%; + background-color: var(--uib-color); + border-radius: 50%; + } + + .three-body__dot:nth-child(1) { + bottom: 5%; + left: 0; + transform: rotate(60deg); + transform-origin: 50% 85%; + } + + .three-body__dot:nth-child(1)::after { + bottom: 0; + left: 0; + animation: wobble1 var(--uib-speed) infinite ease-in-out; + animation-delay: calc(var(--uib-speed) * -0.3); + } + + .three-body__dot:nth-child(2) { + bottom: 5%; + right: 0; + transform: rotate(-60deg); + transform-origin: 50% 85%; + } + + .three-body__dot:nth-child(2)::after { + bottom: 0; + left: 0; + animation: wobble1 var(--uib-speed) infinite + calc(var(--uib-speed) * -0.15) ease-in-out; + } + + .three-body__dot:nth-child(3) { + bottom: -5%; + left: 0; + transform: translateX(116.666%); + } + + .three-body__dot:nth-child(3)::after { + top: 0; + left: 0; + animation: wobble2 var(--uib-speed) infinite ease-in-out; + } + + @keyframes spin78236 { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } + } + + @keyframes wobble1 { + 0%, + 100% { + transform: translateY(0%) scale(1); + opacity: 1; + } + + 50% { + transform: translateY(-66%) scale(0.65); + opacity: 0.8; + } + } + + @keyframes wobble2 { + 0%, + 100% { + transform: translateY(0%) scale(1); + opacity: 1; + } + + 50% { + transform: translateY(66%) scale(0.65); + opacity: 0.8; + } + } + + .spinner { + width: 44px; + height: 44px; + position: relative; + perspective: 800px; + animation: spinner-y0fdc1 2s infinite ease; + transform-style: preserve-3d; + } + + .spinner > div { + background-color: rgba(0,77,255,0.2); + height: 100%; + position: absolute; + width: 100%; + border: 2px solid #004dff; + } + + .spinner div:nth-of-type(1) { + transform: translateZ(-22px) rotateY(180deg); + } + + .spinner div:nth-of-type(2) { + transform: rotateY(-270deg) translateX(50%); + transform-origin: top right; + } + + .spinner div:nth-of-type(3) { + transform: rotateY(270deg) translateX(-50%); + transform-origin: center left; + } + + .spinner div:nth-of-type(4) { + transform: rotateX(90deg) translateY(-50%); + transform-origin: top center; + } + + .spinner div:nth-of-type(5) { + transform: rotateX(-90deg) translateY(50%); + transform-origin: bottom center; + } + + .spinner div:nth-of-type(6) { + transform: translateZ(22px); + } + + @keyframes spinner-y0fdc1 { + 0% { + transform: rotate(45deg) rotateX(-25deg) rotateY(25deg); + } + + 50% { + transform: rotate(45deg) rotateX(-385deg) rotateY(25deg); + } + + 100% { + transform: rotate(45deg) rotateX(-385deg) rotateY(385deg); + } + } .fade-enter{opacity:0;transform:translateY(8px)} .fade-enter-active{transition:opacity .25s ease-out,transform .25s ease-out;opacity:1;transform:translateY(0)} .error{color:#ffb4b4} diff --git a/frontend/assets/汇总统计.svg b/frontend/assets/汇总统计.svg new file mode 100644 index 0000000..6ca5e6e --- /dev/null +++ b/frontend/assets/汇总统计.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/index.html b/frontend/index.html index 11d77b8..e6fec06 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -167,10 +167,13 @@