2025-06-25 10:53:11 +08:00

426 lines
14 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="breadcrumb"}
<span class="layui-breadcrumb">
<a href="http://www.meteteme.com/" target="_blank">江苏美天科技</a>
<a href="/application/nav/index"><cite>应用</cite></a>
<a><cite>文件中转模块</cite></a>
</span>
{/block}
{block name="body"}
<div class="table-content p-3">
<div class="layui-form-bar border-t border-x">
<button class="layui-btn layui-btn-sm add-new" lay-on="test-page-wrap">
上传文件
</button>
<button class="layui-btn layui-btn-sm" id="create-folder" lay-on="create-folder">
创建文件夹
</button>
<button class="layui-btn layui-btn-sm" id="batchmove-folder" lay-on="batchmove-folder">
批量移动
</button>
<button class="layui-btn layui-btn-sm" id="select-all" lay-on="select-all">
全选
</button>
<input type="text" id="folder-url" placeholder="输入文件夹链接地址" class="layui-input" />
</div>
<div class="layui-tab layui-tab-brief">
<ul class="layui-tab-title" id="folder-tabs">
<li class="layui-this" data-id="all">未分类</li>
</ul>
<div class="card-container" id="tab-content">
<div class="layui-tab-item layui-show" id="content-all">
</div>
</div>
</div>
</div>
<button class="layui-btn layui-btn-sm" id="go-to-top">
回到顶部
</button>
{/block}
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ["tool", "gouguEdit", "gouguComment"];
let currentPage = 1;
function gouguInit() {
var table = layui.table;
var tool = layui.tool;
var tool = layui.laypage;
// 复制路径
$("body").on("click", ".copy-path", function () {
var path = $(this).parents(".card-item").find("img").attr("src");
if (path) {
copyToClipboard(path);
layui.layer.msg("复制成功");
} else {
layui.layer.msg("复制失败");
}
});
// 在脚本中添加获取文件夹链接地址的功能
$("#folder-url").on("input", function () {
var folderUrl = $(this).val(); // 获取输入的链接地址
// 这里可以添加逻辑来处理 folderUrl例如调用 getfloderfiles() 接口
console.log("输入的文件夹链接地址: ", folderUrl); // 调试输出
});
// 新增获取文件夹文件的接口
function getFolderFiles(folderId) {
$.get(`/picbed/index/getfloderfiles`, { folder_id: folderId }, function (res) {
if (res.code === 0) {
console.log("文件列表: ", res.data); // 处理文件列表
} else {
layui.layer.msg(res.msg);
}
});
}
// 监听文件夹链接输入框变化
$("#folder-url").on("change", function () {
var folderId = $(this).val(); // 假设输入的是文件夹ID
if (folderId) {
getFolderFiles(folderId); // 调用接口获取文件
}
});
// 下载文件
$("body").on("click", ".action-item.download", function () {
var path = $(this).parents(".card-item").find("img").attr("src");
if (path) {
var domain = window.location.origin + '/'; // 获取当前域名
var fullPath = new URL(path, domain).href; // 拼接完整路径
console.log("下载路径: ", fullPath); // 调试路径
fetch(fullPath)
.then(response => response.blob())
.then(blob => {
var link = document.createElement("a");
link.href = URL.createObjectURL(blob);
link.setAttribute('download', path.split('/').pop()); // 使用文件名作为下载名
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
})
.catch(() => {
layui.layer.msg("下载失败,无法获取文件");
});
} else {
layui.layer.msg("下载失败,路径不存在");
}
});
// 监听删除按钮点击事件
$("body").on("click", ".action-item.delete", function () {
var cardItem = $(this).closest(".card-item");
var id = cardItem.data("id"); // 获取文件 ID
layui.layer.confirm(
"确定删除该文件吗?",
{ icon: 3, title: "提示" },
function (index) {
$.ajax({
url: "/picbed/index/delete",
type: "POST",
data: { id: id },
success: function (res) {
if (res.code === 0) {
layui.layer.msg(res.msg);
cardItem.remove(); // 从 DOM 中删除该卡片
} else {
layui.layer.msg(res.msg);
}
},
error: function () {
layui.layer.msg("删除失败,请重试");
}
});
layui.layer.close(index);
}
);
});
// 复制文本到剪贴板
function copyToClipboard(text) {
var el = document.createElement("textarea");
el.value = text;
el.setAttribute("readonly", "");
el.style.position = "absolute";
el.style.left = "-9999px";
document.body.appendChild(el);
el.select();
document.execCommand("copy");
document.body.removeChild(el);
}
// 上传文件
$(".add-new").on("click", function () {
layer.open({
type: 2,
title: "上传文件",
content: "/picbed/index/add",
area: ["800px", "600px"],
maxmin: true,
});
});
$('.layui-form-bar').on('click', '.add-new', function () {
tool.open('/project/index/add');
});
// 创建文件夹
$("#create-folder").on("click", function () {
layer.open({
type: 2,
title: "创建文件夹",
shadeClose: true,
content: "/picbed/index/createfolder",
area: ["800px", "300px"],
maxmin: true,
end: function () { // 添加关闭回调
loadTableData(currentPage); // 重新加载数据
}
});
});
// 移动图片到文件夹
$(document).on("click", ".action-item.move", function () {
var currentImageId = $(this).closest(".card-item").data("id"); // 获取当前图片的ID
layer.open({
type: 2,
title: "移动文件",
shadeClose: true,
content: "/picbed/index/movefolder?imageId=" + currentImageId, // 传递当前图片ID
area: ["800px", "400px"],
maxmin: true,
end: function () { // 添加关闭回调
loadTableData(currentPage); // 重新加载数据
}
});
});
// 批量移动到文件夹
$(document).on("click", "#batchmove-folder", function () {
var selectedIds = []; // 初始化选中的ID数组
$(".select-item:checked").each(function () {
selectedIds.push($(this).data("id")); // 获取选中的ID
});
if (selectedIds.length === 0) {
layui.layer.msg("请至少选择一个文件进行移动"); // 提示用户选择文件
return;
}
layer.open({
type: 2,
title: "批量移动文件",
shadeClose: true,
content: "/picbed/index/movefolder?imageIds=" + selectedIds.join(","), // 传递选中的ID
area: ["800px", "400px"],
maxmin: true,
end: function () { // 添加关闭回调
loadTableData(currentPage); // 重新加载数据
}
});
});
$("#refresh-btn").on("click", function () {
loadTableData(currentPage);
});
// 加载相册标签和内容
function loadFolderTabs() {
$.get("/picbed/index/getpicbedfolder", function (res) {
if (res.code === 0) {
var tabs = $("#folder-tabs");
var tabContent = $("#tab-content");
tabs.empty();
tabContent.empty();
// 添加固定的全部标签
tabs.append(`<li class="layui-this" data-id="all">未分类</li>`);
tabContent.append(`<div class="layui-tab-item layui-show" id="content-all"></div>`); // 全部内容
res.data.forEach(function (folder) {
tabs.append(`<li data-id="${folder.id}">${folder.name}</li>`); // 动态添加标签
tabContent.append(`<div class="layui-tab-item" id="content-${folder.id}"></div>`); // 动态添加内容
});
// 绑定点击事件
tabs.children().on("click", function () {
var id = $(this).data("id");
loadTabContent(id); // 加载对应的内容
loadTableData(currentPage, id); // 传递 id 以获取特定相册的数据
});
// 默认加载全部内容
loadTabContent("all");
} else {
layui.layer.msg(res.msg);
}
});
}
// 加载特定标签的内容
function loadTabContent(id) {
if (id === "all") {
loadTableData(currentPage); // 加载全部内容
} else {
$.get(`/picbed/index/index`, { folder: id }, function (res) { // 修改为传递参数
if (res.code === 0) {
$(`#content-${id}`).html(res.data); // 更新对应标签的内容
} else {
layui.layer.msg(res.msg);
}
});
}
}
// 获取所有员工信息
function loadEmployeeNames() {
return $.get('/api/index/getallstaff').then(function (res) {
if (res.code === 0) {
// 构建员工 ID 和名称的映射
return res.data.reduce((map, employee) => {
map[employee.id] = employee.name;
return map;
}, {});
}
return {};
});
}
// 加载数据
function loadTableData(page = null, folder = "all") {
const params = {}; // 初始化参数对象
if (folder) {
params.folder = folder; // 添加 folder 参数
}
$.get("/picbed/index/index", params, function (res) {
if (res.code === 0) {
var container = $("#content-all");
container.empty();
var domain = window.location.origin;
// 调用接口获取员工名称
loadEmployeeNames().then(employeeMap => {
res.data.forEach(function (item) {
var card = `
<div class="card-item" data-id="${item.id}">
<div class="items">
<div class="img-ids">
<div>
<input type="checkbox" class="select-item" data-id="${item.id}">
编号:<strong>${item.id}</strong>
上传者:<strong>${employeeMap[item.admin_id] || '未知'}</strong> <!-- 更新为员工名称 -->
</div>
</div>
<div class="item-image">
<img src="${domain}/${item.path}" alt="">
</div>
<div class="item-name">
<div class="path-row">
<div class="path-value">${item.name}</div>
</div>
<div class="action-row">
<div class="action-item copy-path">复制</div>
<div class="action-item download">下载</div>
<div class="action-item move">移动</div>
<div class="action-item delete">删除</div>
</div>
</div>
</div>
</div>
`;
container.append(card);
});
$('#pagination').hide(); // 隐藏分页
});
} else {
layui.layer.msg(res.msg);
$('#pagination').hide(); // 隐藏分页
}
});
}
// 初始加载数据
loadTableData(currentPage);
loadFolderTabs();
$(document).on("click", ".item-image img", function () {
var src = $(this).attr("src");
// 使用layer弹窗展示图片自适应大小无背景、边框和阴影
layer.open({
type: 1, // 弹窗类型
title: false, // 不显示标题
shadeClose: true, // 点击遮罩关闭
area: 'auto', // 弹窗大小自适应内容
shade: [0.8, '#000'], // 透明度为0.8的黑色遮罩
content: `<div id="zoom-container" style="display: flex; justify-content: center; align-items: center; background: transparent; border: none;">
<img id="zoom-img" src="${src}" style="max-width: 100%; max-height: 100%; object-fit: contain;">
</div>`,
skin: 'layui-layer-no-shadow' // 自定义皮肤,移除阴影
});
// 添加自定义样式移除box-shadow
$('.layui-layer-no-shadow').css({
'box-shadow': 'none', // 移除阴影
'background': 'transparent', // 透明背景
'border': 'none', // 无边框
});
// 实现图片通过滚轮放大缩小的功能
var zoomLevel = 1;
var img = $('.layui-layer-page'); // 修改为动态选择
img.on('wheel', function (event) {
if (event.originalEvent.deltaY < 0) {
zoomLevel += 0.1; // 滚轮向上放大
} else {
zoomLevel = Math.max(0.1, zoomLevel - 0.1); // 滚轮向下缩小最小缩放比例为0.1
}
img.css('transform', `scale(${zoomLevel})`);
event.preventDefault(); // 阻止默认滚动行为
});
});
// 回到顶部功能
$("#go-to-top").on("click", function () {
$('html, body').animate({ scrollTop: 0 }, 500); // 平滑滚动到顶部
});
// 显示或隐藏回到顶部按钮
$(window).on("scroll", function () {
if ($(this).scrollTop() > 200) {
$("#go-to-top").fadeIn();
} else {
$("#go-to-top").fadeOut();
}
});
// 全选功能
$("#select-all").on("click", function () {
var isChecked = $(this).hasClass("selected"); // 检查当前状态
$(".select-item").prop("checked", !isChecked); // 切换所有选择框状态
$(this).toggleClass("selected"); // 切换全选按钮状态
});
// 监听点击事件,选择当前数据
$(document).on("click", ".img-ids, .select-item", function (event) {
// 阻止事件冒泡,避免重复触发
event.stopPropagation();
var checkbox = $(this).find(".select-item");
if ($(this).hasClass("select-item")) {
checkbox.prop("checked", !checkbox.prop("checked")); // 切换选择状态
} else {
checkbox.prop("checked", !checkbox.prop("checked")); // 切换选择状态
}
});
}
</script>
{/block}