You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

225 lines
5.0 KiB

<template>
<cu-custom :isBack="true" bgColor="bg-white">
<template #content>表情管理{{emojiList.length}}</template>
<template #right>
<view class="ml-10 mr-10" @tap="manage()">
{{manageName}}
</view>
</template>
</cu-custom>
<view>
<scroll-view scroll-y class="bg-white" style="padding-bottom:100rpx">
<uni-grid :column="5" :highlight="true" @change="change" style="padding:10rpx">
<uni-grid-item>
<view class="grid-item-box" :index="0">
<view class="upload-emoji" @tap="uploadEmoji"><text class="cuIcon-add c-999" style="vertical-align: sub;"></text></view>
</view>
</uni-grid-item>
<uni-grid-item v-for="(item, index) in emojiList" :index="index+1" :key="index">
<view class="grid-item-box">
<image :src="item.src" style="width:100rpx;height:100rpx" :fade-show="false" mode="aspectFit" lazy-load></image>
<view class="emoji-check-box" v-if="isManage" :class="item.isCheck ? 'text-green cuIcon-roundcheckfill' : 'cuIcon-round'"></view>
</view>
</uni-grid-item>
</uni-grid>
</scroll-view>
<view class="btn-opt bg-white im-flex im-align-items-center im-space-between pd-10" v-if="checkList.length>0">
<button class="cu-btn bg-green" @tap="moveEmoji()">移动到最前面</button>
<button class="cu-btn bg-red" @tap="delEmoji()">删除({{checkList.length}})</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
emojiList:[],
isManage:false,
manageName:'整理',
checkList:[]
}
},
onLoad(option){
this.url=decodeURI(option.src);
this.name=option.name;
},
mounted(){
this.getEmojiList();
},
methods: {
getEmojiList(){
this.$api.emojiApi.emojiList({}).then((res)=>{
if(res.code==0){
this.emojiList=res.data;
}
})
},
// 上传表情
uploadEmoji(){
uni.chooseImage({
count : 9,
sizeType : ['compressed'],
sourceType : ['album', 'camera'],
success : (res)=>{
const tempFiles = res.tempFiles;
tempFiles.forEach((item) => {
if(item.size>2*1024*1024){
return uni.showToast({
title: '表情大小不能超过2MB',
icon:'error'
})
}
uni.uploadFile({
url: this.$api.emojiApi.uploadEmoji,
filePath: item.path,
name: 'file',
header: {
'Authorization': uni.getStorageSync('authToken'),
},
success: (e) => {
let res=JSON.parse(e.data);
if(res.code==0){
this.updateEmoji();
}
},
fail: (res) => {
}
})
})
}
});
},
manage(){
this.isManage =!this.isManage;
this.manageName = this.isManage ? '取消' : '整理';
if(!this.isManage){
this.checkList=[];
this.emojiList.forEach((item,index)=>{
this.emojiList[index].isCheck=false;
})
}
},
change(e) {
let { index } = e.detail;
if(!this.isManage || index==0) return;
let isCheck=this.emojiList[index-1].isCheck;
let id=this.emojiList[index-1].id;
if(!isCheck){
this.checkList.push(id);
}else{
this.checkList = this.checkList.filter(item => item !== id);
}
this.emojiList[index-1].isCheck=!isCheck;
},
// 移动表情
moveEmoji(){
if(this.checkList.length<=0){
return;
}
this.$api.emojiApi.moveEmoji({ids:this.checkList}).then((res)=>{
this.updateEmoji()
})
},
// 删除表情
delEmoji(){
if(this.checkList.length<=0){
return;
}
uni.showModal({
title: '确定要删除选中的表情吗?',
success: (res)=>{
if (res.confirm) {
this.$api.emojiApi.delEmoji({ids:this.checkList}).then((res)=>{
this.updateEmoji()
})
}
},
})
},
updateEmoji(){
this.getEmojiList();
this.checkList=[];
uni.$emit('updateEmoji',true)
}
}
}
</script>
<style lang="scss">
page{
background-color: #fff;
}
.upload-emoji{
height:70rpx;
font-size:50rpx;
text-align: center;
}
.grid-dynamic-box {
margin-bottom: 15px;
}
.btn-opt{
position: fixed;
bottom: 0;
width:100%;
height:100rpx;
border-top: solid 1px #D2D2D2;
z-index:1000;
}
.grid-item-box {
flex: 1;
// position: relative;
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: column;
align-items: center;
justify-content: center;
}
.grid-item-box-row {
flex: 1;
// position: relative;
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: row;
align-items: center;
justify-content: center;
padding: 15px 0;
}
.grid-dot {
position: absolute;
top: 5px;
right: 15px;
}
.swiper {
height: 420px;
}
.emoji-check-box{
position:absolute;
right:5rpx;
top:5rpx;
}
/* #ifdef H5 */
@media screen and (min-width: 768px) and (max-width: 1425px) {
.swiper {
height: 630px;
}
}
@media screen and (min-width: 1425px) {
.swiper {
height: 830px;
}
}
/* #endif */
</style>