242 lines
7.7 KiB
Vue
242 lines
7.7 KiB
Vue
<template >
|
||
<!-- 图标选择 -->
|
||
<div class="tab-container borderOverflow" >
|
||
<!-- el-tabs 组件的容器 -->
|
||
<div class="tab-scroll-content" ref="tabScrollContent">
|
||
<el-tabs
|
||
v-model="activeName"
|
||
type="card"
|
||
class="demo-tabs"
|
||
@tab-click="handleClick"
|
||
>
|
||
<el-tab-pane v-for="item in list" :key="item.id" :name="item.label">
|
||
<template #label>
|
||
<el-badge :is-dot="activeName == item.label" class="item"><span style="padding: 0 10px;">{{ item.label }}</span></el-badge>
|
||
</template>
|
||
<div class="tab-content" :style="isExpand?'height: 500px;':'height: 180px;'">
|
||
<div :class="disabled==true?'disable-click contents':'contents'">
|
||
<div v-for="items in item.gameMaterialDatas" :key="items.label" @click="clickSelect(items,'not')" :class="selectType ==items.url?'contentsBorder select':'contentsBorder Uncheck' ">
|
||
<img :src="fileHost+items.url" style="width: 100%;" alt="" >
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</el-tab-pane>
|
||
<el-tab-pane :label="t('自定义')" name="自定义">
|
||
<div :class="disabled==true? 'disable-click tab-content':'tab-content'" :style="isExpand?'height: 500px;':'height: 180px;'">
|
||
<div class="contents contentsIcon" style="display: flex;">
|
||
<upload-icon @updateIcon="updateIcons" :typeUpImg="101" :limit="1" :fileType="['jpg', 'png', 'jpeg']"
|
||
:fileSize="1"></upload-icon>
|
||
<div style="width: 290px;text-wrap: wrap;margin-left: 5px;">
|
||
<span style="color: red;">*</span>{{ t('只能上传文件,且不超过1MB,图片尺寸为343px*300px') }}</div>
|
||
<div class="buttonClass" style="cursor: pointer;" @click="delectClick">{{ t('删除') }}</div>
|
||
</div>
|
||
<div class="contents" style="margin-top: 10px;">
|
||
<div v-for="item2 in listFale" @click="clickSelect(item2,'its')" :class="selectType ==item2.url?'contentsBorder select':'contentsBorder Uncheck' ">
|
||
<img :src="fileHost+item2.url" style="width: 100%;" alt="" >
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</el-tab-pane>
|
||
</el-tabs>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="imgArrow" @click="clickAwor">
|
||
<img v-if="!isExpand" src="@/assets/icons/svg/arrow1.svg" style="width: 25;height: 23px;"/>
|
||
<img v-else src="@/assets/icons/svg/arrow2.svg" style="width: 25;height: 23px;"/>
|
||
<span v-if="!isExpand">展开</span>
|
||
<span v-else>收起</span>
|
||
</div>
|
||
|
||
</template>
|
||
|
||
<script setup>
|
||
import { getSelectData } from '@/api/common.js';
|
||
import { getLocalStorage } from "@/utils/auth";
|
||
import UploadIcon from "@/components/UploadIcon"; // Banner排版BannerImg
|
||
const props = defineProps({
|
||
url: {
|
||
type: String,
|
||
default: ''
|
||
},
|
||
query: {
|
||
type: Object
|
||
},
|
||
method: {
|
||
type: String,
|
||
default: 'get'
|
||
},
|
||
imageUrl: {
|
||
type: String, //Banner图图标
|
||
default: ''
|
||
},
|
||
disabled:{ // 是否禁用
|
||
type: Boolean,
|
||
default: false
|
||
}
|
||
});
|
||
const emits = defineEmits(['clickSelect']) //子组件传值
|
||
const fileHost = getLocalStorage('fileUrl') || ''; // 文件host
|
||
const tabScrollContent = ref(null); // 获取tab-scroll-content
|
||
const list = ref([]); // 默认数据
|
||
const delectItem = ref({});
|
||
const listFale = ref([]); // 自定义上传列表数据
|
||
const activeName = ref(''); // 默认选中
|
||
const selectType = ref(''); // 选中类型
|
||
const isExpand = ref(false); //展开收起
|
||
// 点击选择
|
||
const clickSelect = (item,type) => {
|
||
selectType.value = item.url
|
||
item.type = type;
|
||
delectItem.value = item.url;
|
||
emits('clickSelect', item);
|
||
}
|
||
|
||
const delectClick = () =>{
|
||
if (!delectItem.value || Object.keys(delectItem.value).length === 0){
|
||
proxy.$modal.msgError(proxy.t('请选择需要删除的内容'));
|
||
return
|
||
}
|
||
const index = listFale.value.findIndex(item => item.url === delectItem.value);
|
||
if (index !== -1) {
|
||
listFale.value.splice(index, 1)
|
||
emits('clickSelect', '');
|
||
}
|
||
}
|
||
const clickAwor = () => {
|
||
isExpand.value = !isExpand.value;
|
||
}
|
||
// 获取数据
|
||
const getList = async () => {
|
||
const { query, method, url } = props
|
||
try {
|
||
const parmas = { pageNumber: 1, pageSize: 1000, ...query }
|
||
await getSelectData(url, parmas, method).then(res => {
|
||
//循环
|
||
res.data.map((item,index) => {
|
||
if (index == 0){
|
||
activeName.value = item.label
|
||
}
|
||
if (props.imageUrl){
|
||
selectType.value = props.imageUrl
|
||
}else{
|
||
if (index == 0){
|
||
selectType.value = item.gameMaterialDatas[0].url
|
||
emits('clickSelect', item.gameMaterialDatas[0]);
|
||
}
|
||
}
|
||
|
||
list.value.push(item);
|
||
})
|
||
res.data.map(item => {
|
||
item.gameMaterialDatas.map(item2 => {
|
||
if (item2.url == props.imageUrl){
|
||
activeName.value = item.label;
|
||
}
|
||
})
|
||
})
|
||
})
|
||
} catch (e) {
|
||
}
|
||
}
|
||
getList();
|
||
const handleClick = (tab, event) => {
|
||
}
|
||
const updateIcons = (file) => {
|
||
listFale.value=file;
|
||
}
|
||
</script>
|
||
<style lang="scss" scoped>
|
||
|
||
.tab-container {
|
||
position: relative;
|
||
// width: 462px;
|
||
// height: 300px;
|
||
overflow: hidden;
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
|
||
.tab-scroll-content {
|
||
overflow-x: auto;
|
||
white-space: nowrap;
|
||
flex-grow: 1;
|
||
}
|
||
|
||
.scroll-btn {
|
||
position: absolute;
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
cursor: pointer;
|
||
z-index: 1;
|
||
user-select: none; /* 禁止用户选择文本 */
|
||
}
|
||
|
||
.left-btn {
|
||
left: 10px; /* 根据需要调整位置 */
|
||
}
|
||
|
||
.right-btn {
|
||
right: 10px; /* 根据需要调整位置 */
|
||
}
|
||
|
||
/* 可选:为el-tab-pane设置内联块样式以确保它们在同一行显示 */
|
||
.el-tab-pane {
|
||
display: inline-block;
|
||
}
|
||
.tab-content{
|
||
// width: 462px;
|
||
height: 500px;
|
||
overflow-y: auto;
|
||
.contents{
|
||
// width: 455px;
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
.contentsBorder{
|
||
width: 70px;
|
||
height: 70px;
|
||
margin-right: 3px;
|
||
margin-top: 3px;
|
||
cursor: pointer;
|
||
}
|
||
.Uncheck{
|
||
border: 1px solid #d1d5db;
|
||
}
|
||
.select{
|
||
border: 1px solid #409EFF;
|
||
}
|
||
}
|
||
}
|
||
.buttonClass{
|
||
width: 70px;
|
||
text-align: center;
|
||
height: 40px;
|
||
line-height: 40px;
|
||
border: 1px solid #409EFF;
|
||
color: #fff;
|
||
background: #409EFF;
|
||
border-radius: 5px;
|
||
}
|
||
.imgArrow{
|
||
display: flex;
|
||
align-items: center;
|
||
// width: 500px;
|
||
justify-content: right;
|
||
padding-right: 0px;
|
||
color: #409EFF;
|
||
cursor: pointer;
|
||
}
|
||
.borderOverflow{
|
||
border: 1px solid #d1d5db;
|
||
overflow: hidden;
|
||
}
|
||
.disable-click {
|
||
pointer-events: none;
|
||
}
|
||
</style>
|
||
<style>
|
||
.contentsIcon .el-upload--picture-card {
|
||
width: 70px !important; /* 设置上传后图片卡片的宽度 */
|
||
height: 70px !important; /* 设置上传后图片卡片的高度 */
|
||
}
|
||
</style> |