feat: 月报(菲林统计)
BIN
resources/monthly/images/bamboo.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
resources/monthly/images/bg.png
Normal file
|
After Width: | Height: | Size: 239 KiB |
BIN
resources/monthly/images/bottom-deco.gif
Normal file
|
After Width: | Height: | Size: 2.6 MiB |
BIN
resources/monthly/images/container.png
Normal file
|
After Width: | Height: | Size: 304 KiB |
BIN
resources/monthly/images/icon-bangboo.png
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
BIN
resources/monthly/images/icon-feilin.png
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
BIN
resources/monthly/images/icon-matser.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
resources/monthly/images/icon-title-deco.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
resources/monthly/images/itembox.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
resources/monthly/images/list.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
204
resources/monthly/index.css
Normal file
|
|
@ -0,0 +1,204 @@
|
|||
.container {
|
||||
background: url("./images/bg.png") no-repeat center;
|
||||
background-size: cover;
|
||||
padding-top: 0.1em;
|
||||
position: relative;
|
||||
}
|
||||
.container .lh {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
background-color: #000;
|
||||
border-radius: 0 0 0.5em 0.5em;
|
||||
padding: 0.3em 0.5em;
|
||||
width: 10em;
|
||||
font-size: 1.1em;
|
||||
text-align: center;
|
||||
color: #d3d3d3;
|
||||
filter: drop-shadow(0 0 0.3em #0d0d0d);
|
||||
}
|
||||
.container .lh::before, .container .lh::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 0;
|
||||
width: 0.5em;
|
||||
height: 0.5em;
|
||||
}
|
||||
.container .lh::before {
|
||||
left: -0.5em;
|
||||
background: radial-gradient(circle at 0 100%, transparent 0, transparent 70%, #000 70%);
|
||||
}
|
||||
.container .lh::after {
|
||||
right: -0.5em;
|
||||
background: radial-gradient(circle at 100% 100%, transparent 0, transparent 70%, #000 70%);
|
||||
}
|
||||
.container .box {
|
||||
margin: 5em 1em 0em 1em;
|
||||
border-image-source: url("./images/container.png");
|
||||
border-image-slice: 210 40 40 40 fill;
|
||||
border-image-width: 6.3em 1.2em 1.2em 1.2em;
|
||||
border-image-outset: 0 0 0 0;
|
||||
border-image-repeat: stretch stretch;
|
||||
position: relative;
|
||||
filter: drop-shadow(0.5em 0.5em 0 #000);
|
||||
}
|
||||
.container .box .user-info {
|
||||
font-size: 0.8em;
|
||||
padding: 2.8em 2em 1em 7em;
|
||||
}
|
||||
.container .box .bangboo {
|
||||
position: absolute;
|
||||
background: url("./images/bamboo.png") no-repeat center;
|
||||
background-size: contain;
|
||||
width: 10.5em;
|
||||
height: 10.5em;
|
||||
right: 0.3em;
|
||||
top: -2.5em;
|
||||
}
|
||||
.container .box .content {
|
||||
padding: 1em 2em;
|
||||
}
|
||||
.container .box .content .title {
|
||||
text-shadow: 1px 1px 0px #000;
|
||||
font-size: 1.5em;
|
||||
margin-bottom: 0.2em;
|
||||
}
|
||||
.container .box .content .title.with-icon::after {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
background: url("./images/icon-title-deco.png") no-repeat left center;
|
||||
background-size: contain;
|
||||
width: 2em;
|
||||
height: 1.1em;
|
||||
margin-bottom: -0.05em;
|
||||
}
|
||||
.container .box .content .itembox {
|
||||
background: url("./images/itembox.png") no-repeat center;
|
||||
background-size: contain;
|
||||
aspect-ratio: 2.2;
|
||||
padding: 2em 1.4em 1.2em 1.4em;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.container .box .content .itembox .item {
|
||||
width: 31%;
|
||||
}
|
||||
.container .box .content .itembox .item .icon {
|
||||
aspect-ratio: 1;
|
||||
margin: 1.5em;
|
||||
}
|
||||
.container .box .content .itembox .item .icon.feilin {
|
||||
background: url("./images/icon-feilin.png") no-repeat center;
|
||||
background-size: contain;
|
||||
}
|
||||
.container .box .content .itembox .item .icon.tape {
|
||||
background: url("./images/icon-matser.png") no-repeat center;
|
||||
background-size: contain;
|
||||
}
|
||||
.container .box .content .itembox .item .icon.boopon {
|
||||
background: url("./images/icon-bangboo.png") no-repeat center;
|
||||
background-size: contain;
|
||||
}
|
||||
.container .box .content .itembox .item .count {
|
||||
font-size: 1.3em;
|
||||
text-align: center;
|
||||
color: #000;
|
||||
margin-top: -0.1em;
|
||||
}
|
||||
.container .box .content .list {
|
||||
border-image-source: url("./images/list.png");
|
||||
border-image-slice: 550 30 30 30 fill;
|
||||
border-image-width: 22em 1.2em 1.2em 1.2em;
|
||||
border-image-outset: 0 0 0 0;
|
||||
border-image-repeat: stretch stretch;
|
||||
margin: 1em 0;
|
||||
padding-bottom: 1.3em;
|
||||
}
|
||||
.container .box .content .list .title {
|
||||
font-size: 1.3em;
|
||||
padding: 1em;
|
||||
}
|
||||
.container .box .content .list .item {
|
||||
padding: 0.6em 1em;
|
||||
}
|
||||
.container .box .content .list .item .info-line {
|
||||
display: flex;
|
||||
gap: 0.5em;
|
||||
}
|
||||
.container .box .content .list .item .info-line .name {
|
||||
color: #e3e3e3;
|
||||
}
|
||||
.container .box .content .list .item .info-line .percent {
|
||||
font-size: 0.9em;
|
||||
color: #989898;
|
||||
}
|
||||
.container .box .content .list .item .info-line .value {
|
||||
margin-left: auto;
|
||||
}
|
||||
.container .box .content .list .item .progress {
|
||||
width: 100%;
|
||||
height: 0.35em;
|
||||
margin-top: 0.3em;
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
border-radius: 0.5em;
|
||||
overflow: hidden;
|
||||
}
|
||||
.container .box .content .list .item .progress .bar {
|
||||
height: 100%;
|
||||
background-color: #fff;
|
||||
border-radius: 0.5em;
|
||||
}
|
||||
.container .box .content .list .item:nth-child(7n+1) .progress .bar {
|
||||
background-color: #ff0000;
|
||||
}
|
||||
.container .box .content .list .item:nth-child(7n+2) .progress .bar {
|
||||
background-color: #ff7f00;
|
||||
}
|
||||
.container .box .content .list .item:nth-child(7n+3) .progress .bar {
|
||||
background-color: #ffea00;
|
||||
}
|
||||
.container .box .content .list .item:nth-child(7n+4) .progress .bar {
|
||||
background-color: #00ff00;
|
||||
}
|
||||
.container .box .content .list .item:nth-child(7n+5) .progress .bar {
|
||||
background-color: #00ffea;
|
||||
}
|
||||
.container .box .content .list .item:nth-child(7n+6) .progress .bar {
|
||||
background-color: #3131ff;
|
||||
}
|
||||
.container .box .content .list .item:nth-child(7n+7) .progress .bar {
|
||||
background-color: #7f00ff;
|
||||
}
|
||||
.container .box .content .list .item:nth-child(7n+8) .progress .bar {
|
||||
background-color: #ea00ff;
|
||||
}
|
||||
|
||||
.tips {
|
||||
padding: 1em;
|
||||
color: #dfdfdf;
|
||||
}
|
||||
.tips ul {
|
||||
list-style: none;
|
||||
padding-left: 0;
|
||||
}
|
||||
.tips ul li {
|
||||
position: relative;
|
||||
padding-left: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.tips ul li::before {
|
||||
content: "*";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.copyright {
|
||||
background: url("./images/bottom-deco.gif") no-repeat center;
|
||||
background-size: cover;
|
||||
text-shadow: 1px 1px 1px #000;
|
||||
padding-top: 0.5em;
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
|
||||
/*# sourceMappingURL=index.css.map */
|
||||
58
resources/monthly/index.html
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
{{extend defaultLayout}}
|
||||
|
||||
{{block 'css'}}
|
||||
<link rel="stylesheet" href="{{@sys.currentPath}}/index.css">
|
||||
{{/block}}
|
||||
|
||||
{{block 'main'}}
|
||||
<div class="card">
|
||||
<div class="lh">
|
||||
{{monthly.query_month}}
|
||||
</div>
|
||||
<div class="box">
|
||||
{{include sys.playerInfo}}
|
||||
<div class="bangboo"></div>
|
||||
<div class="content">
|
||||
<div class="title with-icon">
|
||||
收入一览
|
||||
</div>
|
||||
<div class="itembox">
|
||||
<div class="item">
|
||||
<div class="icon feilin"></div>
|
||||
<div class="count">{{monthly.month_data.overview.poly}}</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="icon tape"></div>
|
||||
<div class="count">{{monthly.month_data.overview.tape}}</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="icon boopon"></div>
|
||||
<div class="count">{{monthly.month_data.overview.boopon}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="list">
|
||||
<div class="title">菲林收入组成</div>
|
||||
{{each monthly.month_data.income_components item}}
|
||||
<div class="item">
|
||||
<div class="info-line">
|
||||
<div class="name">{{item.name}}</div>
|
||||
<div class="percent">{{item.percent}}%</div>
|
||||
<div class="value">{{item.num}}</div>
|
||||
</div>
|
||||
<div class="progress">
|
||||
<div class="bar" style="width: {{item.percent}}%;"></div>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tips">
|
||||
<ul>
|
||||
<li>数据统计存在2小时左右延迟,请绳匠知悉</li>
|
||||
<li>菲林收入不含充值获得菲林底片所兑换的菲林数量</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{/block}}
|
||||
198
resources/monthly/index.scss
Normal file
|
|
@ -0,0 +1,198 @@
|
|||
.container {
|
||||
background: url('./images/bg.png') no-repeat center;
|
||||
background-size: cover;
|
||||
padding-top: 0.1em;
|
||||
position: relative;
|
||||
.lh {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
background-color: #000;
|
||||
border-radius: 0 0 0.5em 0.5em;
|
||||
padding: 0.3em 0.5em;
|
||||
width: 10em;
|
||||
font-size: 1.1em;
|
||||
text-align: center;
|
||||
color: #d3d3d3;
|
||||
filter: drop-shadow(0 0 0.3em #0d0d0d);
|
||||
&::before,
|
||||
&::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
width: 0.5em;
|
||||
height: 0.5em;
|
||||
}
|
||||
&::before {
|
||||
left: -0.5em;
|
||||
background: radial-gradient(
|
||||
circle at 0 100%,
|
||||
transparent 0,
|
||||
transparent 70%,
|
||||
#000 70%
|
||||
);
|
||||
}
|
||||
&::after {
|
||||
right: -0.5em;
|
||||
background: radial-gradient(
|
||||
circle at 100% 100%,
|
||||
transparent 0,
|
||||
transparent 70%,
|
||||
#000 70%
|
||||
);
|
||||
}
|
||||
}
|
||||
.box {
|
||||
margin: 5em 1em 0em 1em;
|
||||
border-image-source: url('./images/container.png');
|
||||
border-image-slice: 210 40 40 40 fill;
|
||||
border-image-width: 6.3em 1.2em 1.2em 1.2em;
|
||||
border-image-outset: 0 0 0 0;
|
||||
border-image-repeat: stretch stretch;
|
||||
position: relative;
|
||||
filter: drop-shadow(0.5em 0.5em 0 #000);
|
||||
.user-info {
|
||||
font-size: 0.8em;
|
||||
padding: 2.8em 2em 1em 7em;
|
||||
}
|
||||
.bangboo {
|
||||
position: absolute;
|
||||
background: url('./images/bamboo.png') no-repeat center;
|
||||
background-size: contain;
|
||||
width: 10.5em;
|
||||
height: 10.5em;
|
||||
right: 0.3em;
|
||||
top: -2.5em;
|
||||
}
|
||||
.content {
|
||||
padding: 1em 2em;
|
||||
.title {
|
||||
text-shadow: 1px 1px 0px #000;
|
||||
font-size: 1.5em;
|
||||
margin-bottom: 0.2em;
|
||||
&.with-icon::after {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
background: url('./images/icon-title-deco.png') no-repeat left center;
|
||||
background-size: contain;
|
||||
width: 2em;
|
||||
height: 1.1em;
|
||||
margin-bottom: -0.05em;
|
||||
}
|
||||
}
|
||||
.itembox {
|
||||
background: url('./images/itembox.png') no-repeat center;
|
||||
background-size: contain;
|
||||
aspect-ratio: 2.2;
|
||||
padding: 2em 1.4em 1.2em 1.4em;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
.item {
|
||||
width: 31%;
|
||||
.icon {
|
||||
aspect-ratio: 1;
|
||||
margin: 1.5em;
|
||||
&.feilin {
|
||||
background: url('./images/icon-feilin.png') no-repeat center;
|
||||
background-size: contain;
|
||||
}
|
||||
&.tape {
|
||||
background: url('./images/icon-matser.png') no-repeat center;
|
||||
background-size: contain;
|
||||
}
|
||||
&.boopon {
|
||||
background: url('./images/icon-bangboo.png') no-repeat center;
|
||||
background-size: contain;
|
||||
}
|
||||
}
|
||||
.count {
|
||||
font-size: 1.3em;
|
||||
text-align: center;
|
||||
color: #000;
|
||||
margin-top: -0.1em;
|
||||
}
|
||||
}
|
||||
}
|
||||
.list {
|
||||
border-image-source: url('./images/list.png');
|
||||
border-image-slice: 550 30 30 30 fill;
|
||||
border-image-width: 22em 1.2em 1.2em 1.2em;
|
||||
border-image-outset: 0 0 0 0;
|
||||
border-image-repeat: stretch stretch;
|
||||
margin: 1em 0;
|
||||
padding-bottom: 1.3em;
|
||||
.title {
|
||||
font-size: 1.3em;
|
||||
padding: 1em;
|
||||
}
|
||||
.item {
|
||||
padding: 0.6em 1em;
|
||||
.info-line {
|
||||
display: flex;
|
||||
gap: 0.5em;
|
||||
.name {
|
||||
color: #e3e3e3;
|
||||
}
|
||||
.percent {
|
||||
font-size: 0.9em;
|
||||
color: #989898;
|
||||
}
|
||||
.value {
|
||||
margin-left: auto;
|
||||
}
|
||||
}
|
||||
.progress {
|
||||
width: 100%;
|
||||
height: 0.35em;
|
||||
margin-top: 0.3em;
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
border-radius: 0.5em;
|
||||
overflow: hidden;
|
||||
.bar {
|
||||
height: 100%;
|
||||
background-color: #fff;
|
||||
border-radius: 0.5em;
|
||||
}
|
||||
}
|
||||
$colors: #ff0000, #ff7f00, #ffea00, #00ff00, #00ffea, #3131ff, #7f00ff,
|
||||
#ea00ff;
|
||||
@for $i from 1 through length($colors) {
|
||||
&:nth-child(7n + #{$i}) {
|
||||
.progress {
|
||||
.bar {
|
||||
background-color: nth($colors, $i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.tips {
|
||||
padding: 1em;
|
||||
color: #dfdfdf;
|
||||
ul {
|
||||
list-style: none;
|
||||
padding-left: 0;
|
||||
li {
|
||||
position: relative;
|
||||
padding-left: 0.5em;
|
||||
margin: 0.5em 0;
|
||||
&::before {
|
||||
content: '*';
|
||||
position: absolute;
|
||||
left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.copyright {
|
||||
background: url('./images/bottom-deco.gif') no-repeat center;
|
||||
background-size: cover;
|
||||
text-shadow: 1px 1px 1px #000;
|
||||
padding-top: 0.5em;
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||