<!--
|
* @Author: 秦少卫
|
* @Date: 2024-05-30 10:03:30
|
* @LastEditors: 秦少卫
|
* @LastEditTime: 2024-05-30 18:39:13
|
* @Description: 文件夹
|
-->
|
|
<template>
|
<div class="file-type-box">
|
<img :src="fileTypeIcon" />
|
<span>{{ props.name }}</span>
|
<div class="click-bg" @click="emit('select')"></div>
|
<div class="more">
|
<Dropdown trigger="click" @on-click="operation">
|
<Button size="small" shape="circle" type="text">
|
<Icon type="ios-more" :size="24" />
|
</Button>
|
<template #list>
|
<DropdownMenu>
|
<DropdownItem name="reName">重命名</DropdownItem>
|
<DropdownItem name="delete">删除</DropdownItem>
|
</DropdownMenu>
|
</template>
|
</Dropdown>
|
</div>
|
</div>
|
</template>
|
|
<script setup name="ImportTmpl">
|
import fileTypeIcon from '@/assets/icon/fileType.png';
|
import useMaterial from '@/hooks/useMaterial';
|
|
const { reNameFileType, removeFileType } = useMaterial();
|
|
import { Modal, Input, Message } from 'view-ui-plus';
|
|
const props = defineProps({
|
name: {
|
type: String,
|
default: '',
|
},
|
itemId: {
|
type: [Number, String],
|
default: '',
|
},
|
});
|
|
const emit = defineEmits(['change', 'select']);
|
|
const operation = (value) => {
|
const mapActions = {
|
reName: reNameFile,
|
delete: deleteFile,
|
};
|
mapActions[value]();
|
};
|
const fileName = ref('');
|
|
const reNameFile = () => {
|
fileName.value = props.name;
|
Modal.confirm({
|
title: '重命名文件夹',
|
render: (h) => {
|
return h(Input, {
|
size: 'large',
|
modelValue: fileName,
|
autofocus: true,
|
placeholder: '请输入文件夹名称',
|
});
|
},
|
onOk: async () => {
|
if (fileName.value === '') {
|
Message.warning('文件夹名称不能为空');
|
return;
|
}
|
await reNameFileType(fileName.value, props.itemId);
|
emit('change');
|
},
|
});
|
};
|
|
const deleteFile = async () => {
|
const res = await removeFileType(props.itemId);
|
if (res?.data?.msg) {
|
Message.error({
|
content: res.data?.msg,
|
duration: 3,
|
});
|
return;
|
}
|
emit('change');
|
};
|
</script>
|
|
<style scoped lang="less">
|
// 文件夹
|
.file-type-box {
|
width: 134px;
|
height: 116px;
|
cursor: pointer;
|
background: #fff;
|
position: relative;
|
display: flex;
|
flex-direction: column;
|
justify-content: center;
|
align-items: center;
|
// border: 1px solid #fff;
|
border: 1px solid #f1f1f1;
|
border-radius: 10px;
|
img {
|
width: 60px;
|
margin-top: 12px;
|
}
|
span {
|
display: block;
|
padding-top: 10px;
|
text-align: center;
|
width: 90%;
|
overflow: hidden; //超出的文本隐藏
|
text-overflow: ellipsis; //溢出用省略号显示
|
white-space: nowrap; //溢出不换行
|
}
|
div.more {
|
position: absolute;
|
display: none;
|
}
|
|
.click-bg {
|
position: absolute;
|
top: 0;
|
left: 0;
|
right: 0;
|
bottom: 0;
|
}
|
|
&:hover {
|
background: rgb(243, 245, 249);
|
border: 1px solid rgb(225, 230, 239);
|
border-radius: 8px;
|
img {
|
opacity: 0.8;
|
}
|
div.more {
|
display: block;
|
top: 5px;
|
right: 5px;
|
}
|
}
|
}
|
</style>
|