PixelAI-mobile/pages/mobile_web/home/home.vue

882 lines
24 KiB
Vue
Raw Normal View History

2024-12-03 09:34:24 +08:00
<template>
<view class="mobile-home">
<!-- #ifdef APP -->
<view class="app-top" :style="{ height: CustomBar+2+'rpx',
background: topLevel===0? 'linear-gradient(180deg, #d8fa35 0%, #f0fdbf 100%)' : `rgba(255, 255, 255,${topLevel})` }"></view>
<view :style="{ height: CustomBar+'rpx',background: 'linear-gradient(180deg, #d8fa35 0%, #f0fdbf 100%)'}"></view>
<view class="mobile-logo" :style="{backgroundColor: `rgba(255, 255, 255,${topLevel})`,marginTop: CustomBar+2+'rpx'}">
<!-- #endif -->
2025-01-22 20:25:38 +08:00
<!-- #ifdef MP -->
<view class="app-top" :style="{height: `${StatusBar}px`,background: topLevel===0? 'linear-gradient(180deg, #d8fa35 0%, #f0fdbf 100%)' : `rgba(255, 255, 255,${topLevel})`}"></view>
<view :style="{height: `${StatusBar}px`}"></view>
<view class="mobile-logo" :style="{marginTop: `${StatusBar}px`,height: `${CustomBarHeight}px`,backgroundColor: `rgba(255, 255, 255,${topLevel})`}">
<!-- #endif -->
<!-- #ifdef H5 -->
2024-12-03 09:34:24 +08:00
<view class="mobile-logo" :style="{backgroundColor: `rgba(255, 255, 255,${topLevel})`}">
<!-- #endif -->
<image :src="fileUrl+logo"></image>
</view>
2024-12-29 16:09:08 +08:00
<u-swiper @click="linkTo" height="420" :list="swiperList" name="path" circular
bgColor="#e2fd7d"></u-swiper>
2024-12-03 09:34:24 +08:00
<view class="mobile-content">
<view class="content-inner">
<!-- 功能栏 -->
<view class="first-functions">
2024-12-18 14:45:53 +08:00
<!-- ai换衣 -->
2024-12-03 09:34:24 +08:00
<view class="ff-left">
2024-12-18 14:45:53 +08:00
<image :src="fileUrl+functionImg[0].picture" @click="toDeal(5)"></image>
<image :src="fileUrl+functionImg[1].picture" class="go" @click="toDeal(5)"></image>
2024-12-03 09:34:24 +08:00
</view>
2025-01-22 20:25:38 +08:00
<!-- 文生图 -->
2024-12-03 09:34:24 +08:00
<view class="ff-right">
2025-01-22 20:25:38 +08:00
<image @click="toDeal(8)" class="redraw" :src="fileUrl+functionImg[2].picture"></image>
2024-12-03 09:34:24 +08:00
<image class="tip" :src="fileUrl+functionImg[3].picture"></image>
</view>
</view>
<!-- 轮播功能栏 -->
<view class="second-functions">
2025-01-22 20:25:38 +08:00
<swiper class="swiper" :style="{height: swiperFunctionList[currentPageindex-1]&&
swiperFunctionList[currentPageindex-1].length>5?'270rpx':'125rpx'}" duration="300" @change="categoryChange">
2024-12-06 23:58:58 +08:00
<swiper-item v-for="(item, index) in swiperFunctionList" :key="index">
2024-12-11 19:36:51 +08:00
<view class="category">
2024-12-03 09:34:24 +08:00
<template v-for="(category, itemIndex) in item">
2024-12-06 23:58:58 +08:00
<view class="category-item" @click="toDeal(category.id)">
2025-01-22 20:25:38 +08:00
<image :class="category.icon?'':'other-set'"
2024-12-18 14:45:53 +08:00
:src="encodeURI(staticIp+(category.icon||'static/pixel/home/default-work.png'))"></image>
2024-12-10 10:25:46 +08:00
<view>{{ category.name }}</view>
2024-12-03 09:34:24 +08:00
</view>
</template>
</view>
</swiper-item>
</swiper>
<view class="dots">
<!-- #ifdef MP -->
<view v-for="item in swiperFunctionList.length" :key="item"
:class="{ active: item+1 === currentPageindex }"></view>
<!-- #endif -->
<!-- #ifndef MP -->
2024-12-03 09:34:24 +08:00
<view v-for="item in swiperFunctionList.length" :key="item"
:class="{ active: item === currentPageindex }"></view>
<!-- #endif -->
2024-12-03 09:34:24 +08:00
</view>
</view>
<!-- 推荐作品 -->
<view class="third-functions">
<view class="tf-control">
2025-01-22 20:25:38 +08:00
<image @click="toWall" :src="fileUrl+recommendImg"></image>
2024-12-03 09:34:24 +08:00
<view class="tfc-right">
筛选
<view class="tfcr-btn" @click="showSift = true">
<u-icon class="tfcr-sift" :label="siftLabel||'暂无'" :name="fileUrl+select" color="#d4ff00"
2024-12-03 09:34:24 +08:00
size="17" label-pos="left" label-color="#d4ff00"></u-icon>
</view>
</view>
</view>
2025-01-22 20:25:38 +08:00
<u-waterfall class="show-work" v-model="workList" ref="uWaterfall">
<template v-slot:left="{leftList}">
<view @click="maskTouchend(item)" class="work-item work-item-odd" v-for="(item,index) in leftList" :key="item.id">
<view :class="item.display?'ribbon-fadeOutUp':''" class="collect-ribbon" v-if="item.collect">收藏</view>
2025-01-22 20:25:38 +08:00
<u-lazy-load border-radius="30" class="work-picture"
:image="item.path"></u-lazy-load>
2025-01-22 20:25:38 +08:00
<!-- <image class="work-picture" :src="item.picture" mode="widthFix"></image> -->
<view class="sign-text">{{ item.serviceName || '暂无' }}</view>
<!-- #ifdef MP -->
<image :lazy-load="true" class="sign" :src="item.signIcon"></image>
<!-- #endif -->
<!-- #ifndef MP -->
2025-01-22 20:25:38 +08:00
<image :lazy-load="true" class="sign" :src="fileUrl+sign"></image>
<!-- #endif -->
2025-01-22 20:25:38 +08:00
<view class="work-todo" @click.stop="toDeal(item.serviceId)">
<!-- #ifdef MP -->
<image :src="item.magicWand"></image>
<!-- #endif -->
<!-- #ifndef MP -->
2025-01-22 20:25:38 +08:00
<image :src="fileUrl+magicWand"></image>
<!-- #endif -->
2025-01-22 20:25:38 +08:00
<text>做同款</text>
</view>
<image v-if="item.sourcePath" class="compare-sign" mode="widthFix" :src="item.sourcePath"></image>
2024-12-30 19:01:03 +08:00
</view>
2025-01-22 20:25:38 +08:00
</template>
<template v-slot:right="{rightList}">
<view @click="maskTouchend(item)" class="work-item work-item-even" v-for="(item,index) in rightList" :key="item.id">
<view :class="item.display?'ribbon-fadeOutUp':''" class="collect-ribbon" v-if="item.collect">收藏</view>
2025-01-22 20:25:38 +08:00
<u-lazy-load border-radius="30" class="work-picture"
:image="item.path"></u-lazy-load>
2025-01-22 20:25:38 +08:00
<!-- <image class="work-picture" :src="item.picture" mode="widthFix"></image> -->
<view class="sign-text">{{ item.serviceName || '暂无' }}</view>
<!-- #ifdef MP -->
<image :lazy-load="true" class="sign" :src="item.signIcon"></image>
<!-- #endif -->
<!-- #ifndef MP -->
2025-01-22 20:25:38 +08:00
<image :lazy-load="true" class="sign" :src="fileUrl+sign"></image>
<!-- #endif -->
2025-01-22 20:25:38 +08:00
<view class="work-todo" @click.stop="toDeal(item.serviceId)">
<!-- #ifdef MP -->
<image :src="item.magicWand"></image>
<!-- #endif -->
<!-- #ifndef MP -->
2025-01-22 20:25:38 +08:00
<image :src="fileUrl+magicWand"></image>
<!-- #endif -->
2025-01-22 20:25:38 +08:00
<text>做同款</text>
</view>
<image v-if="item.sourcePath" class="compare-sign" mode="widthFix" :src="item.sourcePath"></image>
2025-01-22 20:25:38 +08:00
</view>
</template>
</u-waterfall>
2024-12-03 09:34:24 +08:00
<!-- 下面这里等后端有了之后用isFinish判断 -->
2025-01-06 00:54:54 +08:00
<view class="last-tip" @click="getMore">
{{ recommendForm.isFinish ? '~~ 已加载全部 ~~' : '~~ 点击加载更多 ~~' }}
2024-12-03 09:34:24 +08:00
</view>
</view>
</view>
</view>
2024-12-06 23:58:58 +08:00
<u-toast ref="uToast"></u-toast>
2024-12-03 09:34:24 +08:00
<!-- 筛选项下拉栏 -->
2024-12-29 16:09:08 +08:00
<u-select v-model="showSift" :list="siftList" @confirm="selectSift" :defaultValue="[siftIndex]"
confirm-color="#94d500" labelName="name" valueName="id"></u-select>
2024-12-03 09:34:24 +08:00
</view>
</template>
<script>
import configService from '@/common/config.service.js';
import { tools } from '@/utils/utils.js';
export default {
// #ifdef MP
options: {
styleIsolation: 'shared'
},
// #endif
2024-12-03 09:34:24 +08:00
props: {
topLevel:{
type: Number,
default: 0
},
},
data(){
return{
2025-01-22 20:25:38 +08:00
// #ifdef MP
// 微信小程序自定义导航栏参数
StatusBar: this.StatusBar || 0,
CustomBarHeight: this.Custom.height+(this.Custom.top-this.StatusBar)*2 || 0,
// #endif
2025-01-06 00:54:54 +08:00
// 基础地址
2024-12-18 14:45:53 +08:00
staticIp: configService.ip,
2024-12-03 09:34:24 +08:00
fileUrl: configService.fileUrl + 'pixel/home/',
// logo图标
2025-01-22 20:25:38 +08:00
logo: 'logo-new.png',
2024-12-03 09:34:24 +08:00
// 第一层功能图片
functionImg:[
{
// ai换装
2025-01-06 21:41:04 +08:00
picture: 'n-dressup.png'
2024-12-03 09:34:24 +08:00
},
{
// ai换装-go
picture: 'dressupgo.png'
},
{
// 涂抹重绘
2025-01-06 21:41:04 +08:00
picture: 'n-redraw.png'
2024-12-03 09:34:24 +08:00
},
{
// 涂抹重绘提示词
picture: 'redrawtip.png'
}
],
// 横向工具栏
2024-12-11 19:36:51 +08:00
swiperFunctionList:[],
2024-12-03 09:34:24 +08:00
// 当前横向工具栏页码
currentPageindex: 1,
// 轮播图
2024-12-29 16:09:08 +08:00
swiperList:[],
2024-12-03 09:34:24 +08:00
// 推荐作品图标
recommendImg: 'recommend.png',
// 筛选下拉栏三角形
select: 'select.png',
// 展示筛选项
showSift: false,
2024-12-18 14:45:53 +08:00
// 筛选项
siftList: [],
// 筛选项label
siftLabel: '全部',
2024-12-29 16:09:08 +08:00
// 筛选项下标
siftIndex: 0,
2024-12-03 09:34:24 +08:00
// 推荐作品列表
2024-12-29 16:09:08 +08:00
workList:[],
2024-12-03 09:34:24 +08:00
// 标签图标
sign: 'typelam.png',
// 点击次数
touchNum : 0,
2024-12-11 19:36:51 +08:00
// 轮播功能列表单组功能数
2025-01-22 20:25:38 +08:00
group: 8,
2024-12-30 19:01:03 +08:00
// 魔术棒
2025-01-06 00:54:54 +08:00
magicWand: 'magic-wand.png',
// 推荐作品表单
recommendForm: {
current: 1,
size: 10,
isFinish: true,
2025-01-22 20:25:38 +08:00
total: 0,
serviceName: '',
isBackend: 0
2025-01-06 00:54:54 +08:00
}
2024-12-03 09:34:24 +08:00
}
},
methods:{
2024-12-06 23:58:58 +08:00
// 初始化
async init(){
2024-12-29 16:09:08 +08:00
this.getBanner();
this.getServices();
2025-01-22 20:25:38 +08:00
this.workList = [];
this.$refs.uWaterfall.clear();
this.recommendForm = {current: 1,size: 10,isFinish: false,total: 0,isBackend: 0};
2024-12-29 16:09:08 +08:00
this.getWorkList();
},
// 获取轮播图
async getBanner(){
let res = await this.$api.allBanners();
if(res?.success){
this.swiperList = res.data.map(item=>{
return {...item,path: encodeURI(this.staticIp+item.path)}
});
}else{
this.$refs.uToast.show({type:'error',title: "轮播图获取失败!"});
}
},
2025-01-06 00:54:54 +08:00
// 图片格式化
2024-12-29 16:09:08 +08:00
getWorkPath(path){
2025-01-22 20:25:38 +08:00
if(!path) return;
let index = path?.indexOf('?');
let judge = path?.includes(configService.anotherAliUrl);
return path?.includes('://') ? path.substring(0,(judge||!index||index===-1) ? path.length : index) : encodeURI(this.staticIp+path);
2024-12-29 16:09:08 +08:00
},
// 获取应用服务列表
async getServices(){
2024-12-06 23:58:58 +08:00
let res = await this.$api.allServices();
if(res.success){
2024-12-11 19:36:51 +08:00
// 这里按一页10个分组
2024-12-06 23:58:58 +08:00
this.swiperFunctionList = [];
const arr = res.data;
2024-12-29 16:09:08 +08:00
this.siftList = [{id: -1,name:"全部"},...arr];
2024-12-11 19:36:51 +08:00
for (let i = 0; i < arr.length; i += this.group) {
this.swiperFunctionList.push(arr.slice(i, i + this.group));
2024-12-06 23:58:58 +08:00
}
}else{
this.$refs.uToast.show({type:'error',title: "应用列表获取失败!"});
}
},
2024-12-29 16:09:08 +08:00
// 获取推荐作品列表
async getWorkList(){
let that = this;
2025-01-06 00:54:54 +08:00
if(this.recommendForm.isFinish) return;
let res = await this.$api.getRecommend(this.recommendForm);
2024-12-29 16:09:08 +08:00
if(res?.success){
2025-01-06 00:54:54 +08:00
const { records, total, current, size } = res.data;
const result = records;
if(current === 1){
this.workList = result.map((item)=>{
let nowResult = {...item,path: that.getWorkPath(item.path)};
if(nowResult.sourcePath) nowResult.sourcePath = that.getWorkPath(item.sourcePath);
// #ifdef MP
nowResult.magicWand = that.fileUrl+that.magicWand;
nowResult.signIcon = that.fileUrl+that.sign;
// #endif
return nowResult;
});
2025-01-06 00:54:54 +08:00
}else{
this.workList.push(...result.map((item)=>{
let nowResult = {...item,path: that.getWorkPath(item.path)};
if(nowResult.sourcePath) nowResult.sourcePath = that.getWorkPath(item.sourcePath);
// #ifdef MP
nowResult.magicWand = that.fileUrl+that.magicWand;
nowResult.signIcon = that.fileUrl+that.sign;
// #endif
return nowResult;
}));
2025-01-06 00:54:54 +08:00
}
this.recommendForm.total = total;
this.recommendForm.isFinish = current*size >= total;
// this.$refs.uWaterfall.$forceUpdate();
2024-12-29 16:09:08 +08:00
}else{
this.$refs.uToast.show({type:'error',title: "推荐作品获取失败!"});
}
},
2025-01-06 00:54:54 +08:00
// 查看更多
getMore(){
if(this.recommendForm.isFinish) return;
this.recommendForm.current++;
this.getWorkList();
},
2024-12-03 09:34:24 +08:00
// 横向功能列表切换页
categoryChange(event){
this.currentPageindex = event.detail.current+1;
},
// 推荐作品筛选
selectSift(e){
2024-12-29 16:09:08 +08:00
this.siftLabel = e[0].label;
this.siftIndex = this.siftList.findIndex(item=>item.id === e[0].value) || 0;
2025-01-22 20:25:38 +08:00
this.recommendForm.current = 1;
this.recommendForm.isFinish = false;
2025-03-07 09:59:21 +08:00
this.recommendForm.serviceId = this.siftLabel==='全部'?'':this.siftList[this.siftIndex].id;
2025-01-22 20:25:38 +08:00
this.$refs.uWaterfall.clear();
this.getWorkList();
2024-12-03 09:34:24 +08:00
},
// 监听单双击,单击-预览图片、双击-收藏
2025-01-22 20:25:38 +08:00
maskTouchend(item){
// 暂时只能预览,不收藏
const array = [this.getWorkPath(item.path)];
if(item.sourcePath) array.push(this.getWorkPath(item.sourcePath));
tools.methods.lookImage(0,array);
// this.touchNum ++;
// setTimeout(()=>{
// if(this.touchNum == 1){
// const array = [this.getWorkPath(item.path)];
// if(item.sourcePath) array.push(this.getWorkPath(item.sourcePath));
// tools.methods.lookImage(0,array);
// }
// if(this.touchNum >= 2){
// // 若collect为null默认没收藏那接下来就是收藏操作
// const result = item.collect ? (item.collect+1)%2 : 1;
// if(result === 0){
// // 添加淡出的class样式
// item.display = 1;
// this.$refs.uWaterfall.$forceUpdate();
// // 下面的操作应该替换为请求后端数据后,再停止动画
// // 模拟操作这里用setTimeout模拟
// setTimeout(() => {
// // 移除淡出类
// item.display = 0;
// item.collect = result;
// }, 1000); // 假设操作需要1秒
// }else{
// item.collect = result;
// this.$refs.uWaterfall.$forceUpdate();
// }
// }
// this.touchNum = 0;
// },250)
2024-12-03 09:34:24 +08:00
},
2025-01-22 20:25:38 +08:00
// 前往作品墙
toWall(){
// uni.navigateTo({url: `/pages/mobile_web/wall/wall`});
uni.navigateTo({url: `/pages/mobile_web/wall/detail`});
},
2024-12-03 09:34:24 +08:00
// 前往工作室
2024-12-06 23:58:58 +08:00
toDeal(id = null){
2024-12-30 19:01:03 +08:00
if(id!==null&&id!=='')
2024-12-06 23:58:58 +08:00
uni.navigateTo({url: `/pages/mobile_web/workshops/index?id=${id}`});
else this.$refs.uToast.show({type:'error',title: "暂未开放对应功能!"});
2024-12-05 11:46:54 +08:00
},
// 轮播图跳转
linkTo(e){
2024-12-29 16:09:08 +08:00
if(this.swiperList[e].url){
2025-01-22 20:25:38 +08:00
if(this.UniPlatform === 'web'){
window.open(encodeURI(this.swiperList[e].url));
}else{
uni.navigateTo({
url: `/pages/index/webview?src=${encodeURI(this.swiperList[e].url)}`
})
}
2024-12-05 11:46:54 +08:00
}
2024-12-03 09:34:24 +08:00
}
}
}
</script>
<style scoped lang="scss">
.mobile-home{
display: flex;
flex-direction: column;
min-height: 100vh;
2025-01-22 20:25:38 +08:00
// #ifdef APP || MP
2024-12-03 09:34:24 +08:00
.app-top{
width: 100%;
position: fixed;
z-index: 81;
}
// #endif
.mobile-logo{
width: 100%;
display: flex;
2025-01-22 20:25:38 +08:00
align-items: center;
2024-12-03 09:34:24 +08:00
justify-content: center;
position: fixed;
z-index: 81;
padding: 15rpx 0;
image{
width: 200rpx;
height: 45rpx;
}
}
.mobile-content{
box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 12px;
z-index: 80;
width: 100%;
flex: 1;
margin-top: -50rpx;
border-top-right-radius: 36rpx;
border-top-left-radius: 36rpx;
background-color: #1a1929;
.content-inner{
margin: 60rpx 45rpx 150rpx;
.first-functions{
display: flex;
height: 270rpx;
.ff-left{
width: 250rpx;
height: 100%;
margin-right: 20rpx;
position: relative;
image{
width: 100%;
height: 105%;
&:active{
filter: opacity(0.8);
}
}
.go{
width: 90rpx;
height: 80rpx;
position: absolute;
bottom: 24rpx;
right: 0;
}
}
.ff-right{
flex: 1;
height: 100%;
width: 250rpx;
display: flex;
flex-direction: column;
justify-content: space-between;
image{
width: 100%;
height: 70%;
}
.redraw{
margin-top: -1%;
&:active{
filter: opacity(0.8);
}
}
.tip{
height: 24%;
margin-bottom: 1%;
}
}
}
.second-functions{
position: relative;
2024-12-11 19:36:51 +08:00
// height: 125rpx;
2024-12-03 09:34:24 +08:00
width: 100%;
margin-top: 50rpx;
.swiper{
width: 100%;
2024-12-11 19:36:51 +08:00
height: 125rpx;
2024-12-03 09:34:24 +08:00
.category{
width: 100%;
height: auto;
2024-12-11 19:36:51 +08:00
display: grid;
row-gap: 20rpx;
2025-01-22 20:25:38 +08:00
grid-template-columns: repeat(4,25%);
2024-12-03 09:34:24 +08:00
.category-item{
display: flex;
flex-direction: column;
align-items: center;
2024-12-18 14:45:53 +08:00
justify-content: flex-end;
2025-01-22 20:25:38 +08:00
// border: 2rpx solid #a3d4ff;
2024-12-03 09:34:24 +08:00
padding: 0 12rpx;
&:active{
filter: opacity(0.8);
}
2024-12-10 10:25:46 +08:00
view{
width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
color: #fff;
2024-12-18 14:45:53 +08:00
text-align: center;
2025-01-22 20:25:38 +08:00
font-size: 24rpx;
2024-12-10 10:25:46 +08:00
}
2024-12-03 09:34:24 +08:00
image{
2024-12-18 14:45:53 +08:00
// width: 110rpx;
// height: 60rpx;
2025-01-22 20:25:38 +08:00
width: 66rpx;
2024-12-18 14:45:53 +08:00
height:60rpx;
2024-12-03 09:34:24 +08:00
margin-bottom: 14rpx;
}
}
}
}
.dots{
display: flex;
justify-content: center;
height: 14rpx;
width: 100%;
view{
background-color: #818e4f;
width: 20rpx;
height: 10rpx;
margin: 0 6rpx;
border-radius: 20rpx;
transition: all 0.5s;
}
.active{
background-color: #d5ff00 !important;
width: 45rpx !important;
height: 10rpx;
}
}
}
.third-functions{
width: 100%;
margin-top: 35rpx;
.tf-control{
display: flex;
justify-content: space-between;
height: 80rpx;
width: 100%;
image{
margin-left: 15rpx;
width: 160rpx;
height: 52rpx;
filter: drop-shadow(0 0 6rpx rgba(236, 250, 197, 1));
2024-12-03 09:34:24 +08:00
}
.tfc-right{
height: 70rpx;
display: flex;
align-items: center;
margin-right: 5rpx;
color: #ffffff;
font-size: 30rpx;
.tfcr-btn{
margin-left: 25rpx;
border: 2rpx solid #d5ff00;
border-radius: 25rpx;
background-color: #1a1929;
.tfcr-sift{
2024-12-03 09:34:24 +08:00
margin: 16rpx 15rpx;
}
}
}
}
.show-work{
margin-top: 13rpx;
width: 100%;
2025-01-22 20:25:38 +08:00
// column-count:2;
// -moz-column-count:2; /* Firefox */
// -webkit-column-count:2; /* Safari 和 Chrome */
2024-12-03 09:34:24 +08:00
column-gap: 1em;
-moz-column-gap: 1em;
-webkit-column-gap: 1em;
// #ifndef MP
2024-12-03 09:34:24 +08:00
.work-item{
-webkit-column-break-inside: avoid;
break-inside: avoid; /*防止断点*/
margin-bottom: 1em;
position: relative;
padding-top: 13rpx;
.work-picture{
border: 0.1em solid #d5ff00;
border-radius: 30rpx;
2024-12-29 16:09:08 +08:00
// 骗系统开启硬件加速
transform: transition3d(0, 0, 0);
// 防止图片加载“闪一下”
will-change: transform;
2024-12-03 09:34:24 +08:00
}
.sign{
border: none;
border-radius: 0;
position: absolute;
top: 0.8em;
left: 0.6em;
2025-01-22 20:25:38 +08:00
width: 170rpx;
2024-12-03 09:34:24 +08:00
height: 47rpx;
}
.sign-text{
2025-01-22 20:25:38 +08:00
width: 140rpx;
2024-12-18 14:45:53 +08:00
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
2024-12-03 09:34:24 +08:00
color: #ffffff;
font-size: 28rpx;
position: absolute;
top: 0.85em;
left: 0.9em;
z-index: 1;
}
2024-12-30 19:01:03 +08:00
.work-todo{
position: absolute;
bottom: 0.85em;
right: 0.7em;
z-index: 1;
border-radius: 12rpx;
padding: 14rpx 30rpx;
background-color: rgba(0, 0, 0, 0.3);
display: flex;
align-items: center;
text{
font-weight: bold;
background-image: linear-gradient(to right, #cdfbf2 0%, #a3d4ff 100%);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
image{
margin-right: 10rpx;
width: 34rpx;
height: 34rpx;
}
&:active{
opacity: 0.8;
}
}
2024-12-03 09:34:24 +08:00
.compare-sign{
position: absolute;
left: 0;
bottom: 0.2em;
width: 120rpx;
2025-01-22 20:25:38 +08:00
height: 50%;
2024-12-03 09:34:24 +08:00
border: 0.1em solid #d5ff00;
border-radius: 20rpx;
2025-01-22 20:25:38 +08:00
box-shadow: 0 0 20rpx #eee;
// box-shadow: rgba(213, 255, 0, 0.3) 0px 4px 12px;
2024-12-03 09:34:24 +08:00
}
.ribbon-fadeOutUp{
animation-name: fadeOutUp !important;
}
.collect-ribbon {
position: absolute;
z-index: 2;
margin-top: -13rpx;
right: 30rpx;
width: 62rpx;
padding: 20rpx 14rpx 0;
box-sizing: border-box;
text-align: center;
background: #ff9900;
font-size: 25rpx;
color: #fff;
animation-name: bounceInDown;
animation-duration: 0.5s;
animation-fill-mode: both;
&::before,
&::after {
content: '';
position: absolute;
}
&::before {
top: 0;
left: -10rpx;
height: 0;
width: 0;
border-bottom: 14rpx solid #ff9900;
border-left: 12rpx solid transparent;
opacity: .8;
}
&::after {
height: 0;
width: 0;
left: 0;
bottom: -39rpx;
border-left: 31rpx solid #ff9900;
border-right: 32rpx solid #ff9900;
border-bottom: 43rpx solid transparent;
}
}
}
// #endif
2024-12-03 09:34:24 +08:00
}
.last-tip{
color: #d5ff00;
font-size: 28rpx;
text-align: center;
margin-top: 20rpx;
margin-bottom: 160rpx;
}
}
}
}
}
::v-deep .u-swiper-indicator {
margin-bottom: 50rpx;
.u-indicator-item-round-active{
background-color: #1d1d1d !important;
width: 45rpx !important;
height: 10rpx;
}
.u-indicator-item-round{
background-color: #818e4f;
width: 20rpx;
height: 10rpx;
}
}
// 淡入
@keyframes bounceInDown {
from {
opacity: 0;
transform: translate3d(0, -5%, 0);
}
to {
opacity: 1;
transform: translate3d(0, 0, 0);
}
}
// 淡出
@keyframes fadeOutUp {
from {
opacity: 1;
}
to {
opacity: 0;
transform: translate3d(0, -5%, 0);
}
}
2025-01-22 20:25:38 +08:00
.other-set{
width: 80rpx !important;
height: 74rpx !important;
}
// #ifdef MP
.show-work{
margin-top: 13rpx;
width: 100%;
// column-count:2;
// -moz-column-count:2; /* Firefox */
// -webkit-column-count:2; /* Safari 和 Chrome */
column-gap: 1em;
-moz-column-gap: 1em;
-webkit-column-gap: 1em;
}
.work-item-odd{
margin-right: 0.5em;
}
.work-item-even{
margin-left: 0.5em;
}
.work-item{
-webkit-column-break-inside: avoid;
break-inside: avoid; /*防止断点*/
margin-bottom: 1em;
position: relative;
padding-top: 13rpx;
.work-picture{
// border: 0.1em solid #d5ff00;
border-radius: 30rpx;
// 骗系统开启硬件加速
transform: transition3d(0, 0, 0);
// 防止图片加载“闪一下”
will-change: transform;
}
.sign{
border: none;
border-radius: 0;
position: absolute;
top: 0.8em;
left: 0.6em;
width: 170rpx;
height: 47rpx;
}
.sign-text{
width: 140rpx;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
color: #ffffff;
font-size: 28rpx;
position: absolute;
top: 0.85em;
left: 0.9em;
z-index: 1;
}
.work-todo{
position: absolute;
bottom: 0.85em;
right: 0.7em;
z-index: 1;
border-radius: 12rpx;
padding: 14rpx 30rpx;
background-color: rgba(0, 0, 0, 0.3);
display: flex;
align-items: center;
text{
font-weight: bold;
background-image: linear-gradient(to right, #cdfbf2 0%, #a3d4ff 100%);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
image{
margin-right: 10rpx;
width: 34rpx;
height: 34rpx;
}
&:active{
opacity: 0.8;
}
}
.compare-sign{
position: absolute;
left: 0;
bottom: 0.2em;
width: 120rpx;
height: 50%;
border: 0.1em solid #d5ff00;
border-radius: 20rpx;
box-shadow: 0 0 20rpx #eee;
// box-shadow: rgba(213, 255, 0, 0.3) 0px 4px 12px;
}
.ribbon-fadeOutUp{
animation-name: fadeOutUp !important;
}
.collect-ribbon {
position: absolute;
z-index: 2;
margin-top: -13rpx;
right: 30rpx;
width: 62rpx;
padding: 20rpx 14rpx 0;
box-sizing: border-box;
text-align: center;
background: #ff9900;
font-size: 25rpx;
color: #fff;
animation-name: bounceInDown;
animation-duration: 0.5s;
animation-fill-mode: both;
&::before,
&::after {
content: '';
position: absolute;
}
&::before {
top: 0;
left: -10rpx;
height: 0;
width: 0;
border-bottom: 14rpx solid #ff9900;
border-left: 12rpx solid transparent;
opacity: .8;
}
&::after {
height: 0;
width: 0;
left: 0;
bottom: -39rpx;
border-left: 31rpx solid #ff9900;
border-right: 32rpx solid #ff9900;
border-bottom: 43rpx solid transparent;
}
}
}
// #endif
2024-12-03 09:34:24 +08:00
</style>