Files
lilishop-uniapp/pages/live/live.scss
2026-07-01 18:07:51 +08:00

804 lines
13 KiB
SCSS

$theme-color: #ff6b35;
$text-color: #333;
$text-color-light: #666;
$text-color-lighter: #999;
$border-color: #eee;
.flex {
display: flex;
}
.flex-a-c {
align-items: center;
}
.flex-j-sb {
justify-content: space-between;
}
.live-detail-page {
display: flex;
flex-direction: column;
min-height: 100vh;
background: #fff;
}
.live-container {
width: 100%;
background: #000;
}
.live-box {
position: relative;
width: 100%;
overflow: hidden;
&.layout-horizontal {
height: 420rpx;
}
&.layout-triple {
height: 560rpx;
}
> video,
> live-player,
> .stream-player {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
}
.live-cover-wrap,
.cover-wrap {
position: absolute;
inset: 0;
z-index: 2;
}
.live-cover,
.cover-img {
width: 100%;
height: 100%;
}
.cover-mask {
position: absolute;
inset: 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
background: rgba(0, 0, 0, 0.45);
}
.status-tag {
padding: 12rpx 32rpx;
border-radius: 100rpx;
font-size: 28rpx;
color: #fff;
background: rgba(255, 255, 255, 0.2);
margin-bottom: 24rpx;
&.living {
background: linear-gradient(90deg, #ff6b35, #ff9f28);
}
&.pending {
background: rgba(96, 98, 102, 0.8);
}
&.paused {
background: rgba(255, 159, 40, 0.85);
}
&.ended {
background: rgba(96, 98, 102, 0.6);
}
}
.tips-text {
font-size: 26rpx;
color: rgba(255, 255, 255, 0.85);
margin-top: 8rpx;
}
.nav-back {
position: fixed;
top: calc(var(--status-bar-height, 44px) + 12rpx);
left: 24rpx;
z-index: 100;
width: 64rpx;
height: 64rpx;
border-radius: 50%;
background: rgba(0, 0, 0, 0.35);
display: flex;
align-items: center;
justify-content: center;
}
.bottom-container {
flex: 1;
display: flex;
flex-direction: column;
position: relative;
background: #fff;
}
.tab-container {
background: #fff;
border-bottom: 1rpx solid $border-color;
}
.tab-items {
display: flex;
}
.tab-item {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
height: 88rpx;
font-size: 30rpx;
color: $text-color-light;
position: relative;
&.active {
color: $theme-color;
font-weight: 600;
&::after {
content: "";
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 48rpx;
height: 4rpx;
border-radius: 2rpx;
background: $theme-color;
}
}
}
.message-container {
flex: 1;
overflow: hidden;
}
.message-scroll,
.live-intro-scroll {
height: 100%;
padding: 0 24rpx;
box-sizing: border-box;
}
.message-item {
display: flex;
align-items: flex-start;
padding: 20rpx 0;
border-bottom: 1rpx solid #f5f5f5;
}
.user-avatar {
width: 72rpx;
height: 72rpx;
border-radius: 50%;
flex-shrink: 0;
margin-right: 16rpx;
background: #f0f0f0;
}
.message-content {
flex: 1;
min-width: 0;
}
.username {
font-size: 26rpx;
color: $text-color-light;
margin-bottom: 8rpx;
display: block;
}
.message-text {
font-size: 28rpx;
color: $text-color;
word-break: break-all;
line-height: 1.5;
}
.floating-right-container {
position: absolute;
right: 24rpx;
bottom: 180rpx;
z-index: 50;
display: flex;
flex-direction: column;
align-items: flex-end;
gap: 24rpx;
}
.floating-recommend-card {
width: 260rpx;
background: rgba(255, 255, 255, 0.95);
border-radius: 20rpx;
padding: 12rpx;
box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.12);
}
.floating-recommend-img-wrap {
width: 100%;
height: 236rpx;
border-radius: 14rpx;
overflow: hidden;
position: relative;
background: #f8f8f8;
}
.floating-recommend-img {
width: 100%;
height: 100%;
}
.floating-recommend-tag {
position: absolute;
top: 0;
left: 0;
background: linear-gradient(135deg, #ff3b30, #ff2d55);
color: #fff;
font-size: 20rpx;
padding: 6rpx 14rpx;
border-radius: 0 0 14rpx 0;
font-weight: 700;
}
.floating-recommend-info {
display: flex;
flex-direction: column;
gap: 6rpx;
padding: 0 4rpx 4rpx;
}
.floating-recommend-name {
font-size: 26rpx;
color: #1c1c1e;
font-weight: 600;
margin-top: 12rpx;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.floating-recommend-price {
color: #ff3b30;
font-weight: 700;
font-size: 34rpx;
margin-top: 6rpx;
}
.cart-btn {
display: flex;
justify-content: flex-end;
}
.cart-btn-inner {
width: 106rpx;
height: 116rpx;
background: linear-gradient(135deg, #ff6b35, #ff9f28);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 8rpx 24rpx rgba(255, 107, 53, 0.35);
}
.bottom-actions {
display: flex;
align-items: center;
padding: 16rpx 24rpx;
padding-bottom: calc(16rpx + env(safe-area-inset-bottom));
background: #fff;
border-top: 1rpx solid #f0f0f0;
}
.input-box {
flex: 1;
height: 72rpx;
background: #f5f5f5;
border-radius: 36rpx;
padding: 0 24rpx;
margin-right: 16rpx;
display: flex;
align-items: center;
}
.input-content {
width: 100%;
font-size: 28rpx;
color: $text-color;
}
.chat-coupon-btn {
width: 72rpx;
height: 72rpx;
margin-right: 16rpx;
border-radius: 50%;
background: #fff5f0;
display: flex;
align-items: center;
justify-content: center;
}
.send-btn-small {
padding: 0 28rpx;
height: 72rpx;
line-height: 72rpx;
border-radius: 36rpx;
font-size: 28rpx;
color: #fff;
background: linear-gradient(90deg, #ff6b35, #ff9f28);
&.disabled {
opacity: 0.5;
}
}
.live-intro-wrapper {
padding: 24rpx;
}
.live-title {
font-size: 36rpx;
font-weight: 600;
color: $text-color;
margin-bottom: 16rpx;
}
.live-time {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 26rpx;
color: $text-color-light;
margin-bottom: 24rpx;
}
.live-intro-title {
font-size: 28rpx;
font-weight: 600;
color: $text-color;
margin-bottom: 12rpx;
padding-top: 24rpx;
border-top: 1rpx solid $border-color;
}
.live-intro-content-text {
font-size: 26rpx;
color: $text-color-light;
line-height: 1.6;
}
.dialog-overlay {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.5);
z-index: 999;
}
.goods-list-container,
.coupon-list-container {
width: 100%;
max-height: 75vh;
background: #f7f8fa;
border-radius: 32rpx 32rpx 0 0;
position: absolute;
bottom: 0;
display: flex;
flex-direction: column;
}
.goods-list-header,
.coupon-list-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 32rpx 40rpx;
background: #fff;
border-radius: 32rpx 32rpx 0 0;
}
.goods-list-title,
.coupon-list-title {
font-size: 34rpx;
font-weight: 700;
color: #333;
}
.goods-list-close,
.coupon-list-close {
font-size: 36rpx;
color: #999;
padding: 8rpx;
}
.goods-list-scroll,
.coupon-list-scroll {
flex: 1;
max-height: calc(75vh - 110rpx);
}
.goods-list {
padding: 24rpx;
}
.goods-item-row {
margin-bottom: 24rpx;
}
.goods-item-content {
display: flex;
padding: 24rpx;
background: #fff;
border-radius: 24rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.03);
}
.goods-image-container {
width: 200rpx;
height: 200rpx;
border-radius: 16rpx;
overflow: hidden;
background: #f5f5f5;
flex-shrink: 0;
}
.goods-image {
width: 100%;
height: 100%;
}
.goods-right {
flex: 1;
margin-left: 24rpx;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.goods-name {
font-size: 28rpx;
color: #333;
font-weight: 600;
line-height: 1.4;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.hot-tag {
display: inline-block;
background: linear-gradient(135deg, #ff7a18, #ffb11b);
color: #fff;
font-size: 20rpx;
padding: 4rpx 12rpx;
border-radius: 8rpx;
margin-right: 8rpx;
}
.goods-bottom {
display: flex;
align-items: flex-end;
justify-content: space-between;
margin-top: 16rpx;
}
.current-price {
color: #ff4b2b;
font-size: 36rpx;
font-weight: 700;
}
.price-symbol {
font-size: 24rpx;
}
.original-price-text {
font-size: 24rpx;
color: #999;
text-decoration: line-through;
}
.goods-btn {
padding: 12rpx 32rpx;
border-radius: 32rpx;
font-size: 26rpx;
font-weight: 600;
&.btn-active {
background: linear-gradient(135deg, #ff4b2b, #ff416c);
color: #fff;
}
&.btn-sold-out {
background: #f0f0f0;
color: #999;
}
}
.goods-empty,
.coupon-empty {
text-align: center;
padding: 100rpx 0;
font-size: 28rpx;
color: #999;
}
.coupon-list-inner {
padding: 0 32rpx 48rpx;
}
.coupon-card {
display: flex;
align-items: stretch;
background: #fff;
border-radius: 24rpx;
margin-bottom: 24rpx;
position: relative;
box-shadow: 0 8rpx 24rpx rgba(0, 0, 0, 0.03);
}
.coupon-card-left {
width: 220rpx;
min-height: 160rpx;
display: flex;
align-items: center;
justify-content: center;
color: #ff3b30;
flex-shrink: 0;
}
.coupon-price-value {
font-size: 56rpx;
font-weight: 900;
}
.coupon-card-right {
flex: 1;
padding: 32rpx;
display: flex;
align-items: center;
justify-content: space-between;
}
.coupon-card-name {
font-size: 30rpx;
color: #111;
font-weight: 700;
}
.coupon-claim-btn {
padding: 12rpx 28rpx;
border-radius: 40rpx;
font-size: 26rpx;
color: #fff;
background: #111;
&.disabled {
background: #f0f0f0;
color: #999;
}
}
.loading-wrap {
position: fixed;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
z-index: 200;
background: rgba(0, 0, 0, 0.3);
}
// 售罄置灰
.goods-item-row.is-sold-out,
.product-showcase.is-sold-out,
.floating-recommend-card.is-sold-out {
opacity: 0.55;
filter: grayscale(0.85);
pointer-events: none;
}
.current-price.price-sold-out {
color: #999 !important;
}
// 左上角优惠券浮标
@keyframes coupon-shake {
0%,
100% {
transform: rotate(0deg);
}
10% {
transform: rotate(-8deg);
}
20% {
transform: rotate(8deg);
}
30% {
transform: rotate(-6deg);
}
40% {
transform: rotate(6deg);
}
50% {
transform: rotate(-3deg);
}
60% {
transform: rotate(3deg);
}
70%,
100% {
transform: rotate(0deg);
}
}
.coupon-float-btn {
position: fixed;
top: calc(var(--status-bar-height, 44px) + 88rpx);
left: 24rpx;
z-index: 100;
width: 72rpx;
height: 72rpx;
border-radius: 50%;
background: rgba(255, 255, 255, 0.95);
box-shadow: 0 8rpx 24rpx rgba(255, 107, 53, 0.25);
display: flex;
align-items: center;
justify-content: center;
&.shake-animation {
animation: coupon-shake 1.2s ease-in-out infinite;
animation-delay: 0.5s;
}
}
.coupon-float-btn-horizontal {
top: calc(var(--status-bar-height, 44px) + 12rpx);
left: 100rpx;
}
.recommend-coupon-overlay {
display: flex;
align-items: center;
justify-content: center;
padding: 48rpx 32rpx;
box-sizing: border-box;
}
.recommend-coupon-container.white-theme {
width: 600rpx;
max-width: 100%;
background: #fff;
border-radius: 32rpx;
display: flex;
flex-direction: column;
overflow: hidden;
box-shadow: 0 24rpx 64rpx rgba(0, 0, 0, 0.15);
animation: coupon-pop-up 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards;
}
@keyframes coupon-pop-up {
0% {
transform: scale(0.8) translateY(40rpx);
opacity: 0;
}
100% {
transform: scale(1) translateY(0);
opacity: 1;
}
}
.rc-header {
position: relative;
padding: 48rpx 0 32rpx;
text-align: center;
}
.rc-title {
font-size: 36rpx;
font-weight: 700;
color: #333;
}
.rc-close {
position: absolute;
top: 24rpx;
right: 24rpx;
width: 48rpx;
height: 48rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: #999;
}
.rc-body {
padding: 0 40rpx 40rpx;
}
.rc-ticket-box {
background: #fff5f5;
border: 2rpx solid #ffe0e0;
border-radius: 16rpx;
display: flex;
height: 180rpx;
overflow: hidden;
}
.rc-ticket-left {
width: 180rpx;
display: flex;
align-items: baseline;
justify-content: center;
color: #ff4b2b;
border-right: 2rpx dashed #ffcaca;
flex-shrink: 0;
}
.rc-symbol {
font-size: 32rpx;
font-weight: 600;
margin-right: 4rpx;
}
.rc-value {
font-size: 56rpx;
font-weight: 800;
line-height: 180rpx;
}
.rc-ticket-right {
flex: 1;
padding: 0 24rpx;
display: flex;
align-items: center;
}
.rc-name {
font-size: 30rpx;
color: #333;
font-weight: 600;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
line-height: 1.4;
}
.rc-footer {
padding: 0 40rpx 48rpx;
}
.rc-btn {
width: 100%;
height: 88rpx;
border-radius: 44rpx;
background: linear-gradient(135deg, #ff4b2b, #ff416c);
color: #fff;
font-size: 32rpx;
font-weight: 600;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 8rpx 24rpx rgba(255, 65, 108, 0.25);
&.disabled {
background: #f0f0f0;
color: #999;
box-shadow: none;
}
}