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
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>
|
|
|