jyyhq/witDisplay/page/light/videoLightSecondaryPage.html

680 lines
20 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>设备</title>
<link rel="stylesheet" type="text/css" href="../../js/layui-v2.9.18/css/layui.css"/>
</head>
<body>
<div class="container">
<form class="layui-form">
<!-- 类型选择 -->
<div class="layui-form-item">
<label class="layui-form-label">类型选择:</label>
<div class="layui-input-inline">
<select name="type" lay-verify="required"lay-filter="typeFilter">
<option value="">请选择类型</option>
<option value="3">图片</option>
<option value="2">音频</option>
<option value="1">广告屏</option>
</select>
</div>
</div>
<!-- 每天时间段 -->
<div class="layui-form-item" id="dailyTimeRange">
<label class="layui-form-label" style="color: white">每天时间段:</label>
<div class="layui-inline">
<div class="layui-input-inline">
<input type="text" name="startTime" class="layui-input" id="startTime" placeholder="开始时间">
</div>
<div class="layui-form-mid" style="color:white;">-</div>
<div class="layui-input-inline">
<input type="text" name="endTime" class="layui-input" id="endTime" placeholder="结束时间">
</div>
</div>
</div>
<!-- 文件上传 -->
<div class="layui-form-item">
<label class="layui-form-label">文件上传:</label>
<div class="layui-input-block">
<div class="upload-btns">
<button type="button" class="layui-btn" id="uploadBtn">
<i class="layui-icon">&#xe67c;</i>选择文件
</button>
<div class="upload-tips">支持图片、视频、音频文件单个文件不超过50MB</div>
</div>
<div class="upload-area">
<div class="file-list" id="fileList"></div>
</div>
</div>
</div>
<div class="fixed-bottom">
<button type="button" class="submit-btn" lay-submit lay-filter="formSubmit">
<span class="btn-text">确认提交</span>
<i class="layui-icon loading-icon" style="display: none;">&#xe63d;</i>
</button>
</div>
</form>
</div>
<script type="text/javascript" src="../../js/core/jquery-3.6.0.js"></script>
<script type="text/javascript" src="../../js/layui-v2.9.18/layui.js"></script>
<script src="../../js/core/public.js" type="text/javascript"></script>
<script>
let form, layer, laydate;
layui.use(['form', 'laydate','layer', 'upload'], function(){
var UPLOAD_FILES;
form = layui.form,
layer = layui.layer,
upload = layui.upload;
laydate = layui.laydate;
//上传文件代码
var uploadFiles = []; // 用于存储上传的文件对象
var pushFiles = {}
var upInit =upload.render({
elem: '#uploadBtn',
accept: 'file', // 允许所有类型文件
acceptMime: 'video/*,audio/*,image/*', // 只显示视频、音频、图片文件
url: '', // 上传接口
auto: false,
multiple: false, // 只允许选择一个文件
choose: function(obj){
// 清空文件输入框,以允许重新选择相同的文件
upInit.config.elem.next()[0].value = ''; // 清空文件输入框
var files = pushFiles = obj.pushFile(); // 获取文件对象数组
if (uploadFiles.length >= 1) {
layer.msg('只能上传一个文件');
return;
}
obj.preview(function(index, file, result){
// 添加新文件
uploadFiles.push(file);
// 隐藏已有文件项
$('.file-item.existing-file').hide(); // 隐藏具有 existing-file 类的文件项
/* if(file === files[index]) {
debugger
} */
// 添加文件到预览列表
var fileList = $('#fileList');
fileList.append(`
<div class="file-item" data-index="${uploadFiles.length - 1}">
<div class="file-preview">
${file.type.indexOf('image') !== -1
? `<img src="${result}" alt="${file.name}">`
: '<i class="layui-icon file-icon">&#xe621;</i>'}
</div>
<div class="file-name">${file.name}</div>
<div class="delete-file" data-file-index="${index}">
<i class="layui-icon">&#x1006;</i>
</div>
</div>
`);
});
}
});
// 删除文件
$(document).on('click', '.delete-file', function(){
debugger
var fileItem = $(this).closest('.file-item');
var index = fileItem.data('index'); // 获取文件项的索引
// 从 uploadFiles 数组中移除文件
var file = uploadFiles.splice(index, 1); // 使用正确的索引删除文件
var fileIndex = $(this).data('fileIndex')
delete pushFiles[fileIndex]
upInit.config.elem.next()[0].value = '';
fileItem.remove(); // 从页面中移除文件项
// 清空文件输入框,以允许重新选择相同的文件
});
laydate.render({
elem: '#startTime',
type: 'time',
format: 'HH:mm', // 只显示时和分
btns: ['clear', 'confirm'],
theme: '#00e0ff',
trigger: 'click', // 增加触发方式
ready: function(date) {
// 移除其他的时间选择器,只保留当前的
var currentPicker = $('.layui-laydate').last();
$('.layui-laydate').not(currentPicker).remove();
},
done: function (value, date) {
// 选择后的回调
// 每次打开时清空输入框
console.log('开始时间:', value);
}
});
// 渲染结束时间选择器
laydate.render({
elem: '#endTime',
type: 'time',
format: 'HH:mm', // 只显示时和分
btns: ['clear', 'confirm'],
theme: '#00e0ff',
trigger: 'click', // 增加触发方式
ready: function(date) {
// 移除其他的时间选择器,只保留当前的
var currentPicker = $('.layui-laydate').last();
$('.layui-laydate').not(currentPicker).remove();
},
done: function (value, date) {
console.log('结束时间:', value);
}
});
// 存储上传文件的数组
var uploadFiles = [];
// 监听表单提交
form.on('submit(formSubmit)', function(data){
// 获取各个字段的值
var formType = data.field.type;
var startTime = data.field.startTime;
var endTime = data.field.endTime;
// 表单验证
if (!formType) {
layer.msg('请选择类型');
return false;
}
if (!startTime || !endTime) {
layer.msg('请选择时间范围');
return false;
}
if (uploadFiles.length === 0) {
layer.msg('请至少上传一个文件');
return false;
}
// 文件大小限制50MB
const maxFileSize = 50 * 1024 * 1024; // 50MB
for (let file of uploadFiles) {
if (file.size > maxFileSize) {
layer.msg('文件大小不能超过50MB');
return false;
}
}
// 用户点击确认后构建FormData并提交
var formData = new FormData();
// 添加表单数据
formData.append('type', formType);
formData.append('startTime', startTime);
formData.append('endTime', endTime);
// 添加文件
uploadFiles.forEach((file, index) => {
formData.append(`files`, file);
});
// 文件格式验证
for(let file of uploadFiles) {
if(!validateFileFormat(formType, file)) {
return false;
}
}
// 发送请求
$.ajax({
url: dataUrl + 'lamp/videocommonent',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function(res) {
if (res.code === 200) {
layer.msg("下发成功", {icon: 1, time: 2000}, function () {
//关闭当前layui弹窗
let index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index); //再执行关闭
//刷新父页面
window.parent.location.reload();
});
} else {
layer.msg(res.msg || '下发失败,请重试');
}
},
error: function(xhr, status, error) {
layer.msg('提交失败:' + error);
}
});
return false; // 阻止表单默认提交
});
function validateFileFormat(type, file) {
const fileName = file.name.toLowerCase();
switch(type) {
case '3': // 图片
if(!fileName.endsWith('.png')) {
layer.msg('只能上传PNG格式的图片文件');
return false;
}
break;
case '2': // 音频
if(!fileName.endsWith('.mp3')) {
layer.msg('只能上传MP3格式的音频文件');
return false;
}
break;
case '1': // 视频
if(!fileName.endsWith('.mp4')) {
layer.msg('只能上传MP4格式的视频文件');
return false;
}
break;
default:
layer.msg('未知的文件类型');
return false;
}
return true;
}
// 监听选择框
form.on('select(typeFilter)', function(data){
var type = data.value; // 获取选中的值
$.ajax({
url: dataUrl + 'lamp/getVideoCommandInfo',
type: 'POST',
data: {
type: type
},
success: function(res) {
if(res.data == null){
$("#startTime").val("");
$("#endTime").val("");
// 清空文件列表
uploadFiles = [];
$('#fileList').empty();
return;
}
// 设置时间
$("#startTime").val(res.data[0].startTime);
$("#endTime").val(res.data[0].endTime);
// 如果有文件URL进行文件回显
if(res.data[0].pathUrl) {
// 清空现有文件列表
uploadFiles = [];
$('#fileList').empty();
// 获取文件名
const fileName = res.data[0].pathUrl.split('/').pop();
// 判断文件类型
const fileType = getFileType(fileName);
// 创建预览HTML
let previewHtml = '';
if(fileType === 'image') {
// 图片预览
previewHtml = `
<div class="file-item" data-url="${res.data[0].pathUrl}">
<div class="file-preview">
<img src="${res.data[0].pathUrl}" alt="${fileName}">
</div>
<div class="file-name">${fileName}</div>
<div class="delete-file">
<i class="layui-icon">&#x1006;</i>
</div>
</div>
`;
} else if(fileType === 'video') {
// 视频预览
previewHtml = `
<div class="file-item" data-url="${res.data[0].pathUrl}">
<div class="file-preview">
<video width="100%" height="100%" controls>
<source src="${res.data[0].pathUrl}" type="video/mp4">
</video>
</div>
<div class="file-name">${fileName}</div>
<div class="delete-file">
<i class="layui-icon">&#x1006;</i>
</div>
</div>
`;
} else if(fileType === 'audio') {
// 音频预览
previewHtml = `
<div class="file-item" data-url="${res.data[0].pathUrl}">
<div class="file-preview">
<i class="layui-icon file-icon">&#xe621;</i>
<audio controls style="width: 100%">
<source src="${res.data[0].pathUrl}" type="audio/mp3">
</audio>
</div>
<div class="file-name">${fileName}</div>
<div class="delete-file">
<i class="layui-icon">&#x1006;</i>
</div>
</div>`;
}
// 添加到文件列表
$('#fileList').html(previewHtml);
// 标记为已有文件(用于区分新上传的文件)
$('#fileList .file-item').addClass('existing-file');
}
},
error: function(err) {
console.log('请求失败:', err);
}
});
});
// 判断文件类型的辅助函数
function getFileType(fileName) {
fileName = fileName.toLowerCase();
if(fileName.endsWith('.png') || fileName.endsWith('.jpg') || fileName.endsWith('.jpeg')) {
return 'image';
} else if(fileName.endsWith('.mp4')) {
return 'video';
} else if(fileName.endsWith('.mp3')) {
return 'audio';
}
return 'unknown';
}
});
</script>
</body>
<style>
html, body {
width: 100%;
height: 100%;
color: white;
}
.container {
padding: 20px;
}
.layui-layer-content {
color: #000; /* 设置文本颜色为黑色 */
}
.layui-form-item {
margin-bottom: 20px;
display: flex;
align-items: center;
}
.layui-form-label {
color: white;
width: 120px;
text-align: right;
padding: 9px 15px;
box-sizing: border-box;
font-size: 14px;
}
/* 下拉框样式 */
.layui-select-title .layui-input {
background-color: transparent !important;
border: 1px solid rgba(255,255,255,0.2) !important;
color: white !important;
}
.layui-form-select dl {
background-color: #001a2e;
border: 1px solid rgba(255,255,255,0.2);
}
.layui-form-select dl dd {
color: white;
}
.layui-form-select dl dd.layui-this {
background-color: #00e0ff;
}
/* 输入框样式 */
.layui-input {
background-color: transparent !important;
border: 1px solid rgba(255,255,255,0.2) !important;
color: white !important;
height: 32px;
line-height: 32px;
width: 200px;
}
/* 时间范围样式 */
.time-range {
display: flex;
align-items: center;
}
.time-range .layui-form-mid {
color: white;
padding: 0 10px !important;
}
/* 按钮样式 */
.layui-btn {
background-color: #00e0ff;
height: 32px;
line-height: 32px;
padding: 0 20px;
margin-left: 10px;
}
/* 文件上传区域样式 */
.upload-area {
margin-left: 120px;
margin-top: 10px;
}
.file-list {
display: flex;
flex-wrap: wrap;
gap: 15px;
margin-top: 15px;
}
.file-item {
position: relative;
width: 120px;
background: rgba(0, 0, 0, 0.2);
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 4px;
padding: 8px;
}
.file-preview {
width: 100%;
height: 120px;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
margin-bottom: 5px;
}
.file-preview img {
max-width: 100%;
max-height: 100%;
object-fit: contain;
}
.file-preview .file-icon {
font-size: 40px;
color: #00e0ff;
}
.file-name {
font-size: 12px;
color: #fff;
word-break: break-all;
line-height: 1.2;
max-height: 2.4em;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.delete-file {
position: absolute;
top: -8px;
right: -8px;
background: #ff5722;
color: white;
border-radius: 50%;
width: 20px;
height: 20px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
font-size: 12px;
}
.upload-tips {
color: rgba(255, 255, 255, 0.6);
font-size: 12px;
margin-top: 5px;
}
/* 添加固定按钮样式 */
.fixed-bottom {
position: fixed;
bottom: 20%;
left: 0;
width: 100%;
padding: 15px 0;
text-align: center;
z-index: 1000;
backdrop-filter: blur(5px);
}
.submit-btn {
background: #00e0ff;
border: none;
color: #fff;
padding: 8px 30px;
border-radius: 4px;
cursor: pointer;
transition: all 0.3s;
}
.submit-btn:hover {
background: #00b8d4;
}
/* 添加loading样式 */
.loading-icon {
display: inline-block;
animation: loading-rotate 1s linear infinite;
}
@keyframes loading-rotate {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.layui-laydate .layui-this {
        background-color: #2F5D6B !important;
        color: #fff !important;
    }
    .layui-laydate, .layui-laydate-hint {
        border: 1px solid #d2d2d2;
        box-shadow: 0 2px 4px rgb(0 0 0 / 12%);
        background-color: #fff;
        color: #fff;
    }
    .layui-laydate-content > table > thead > tr > th {
        color: #fff;
    }
    .layui-laydate-content td {
        color: #fff;
    }
    .layui-laydate-content .laydate-day-next, .layui-laydate-content .laydate-day-prev {
        color: #666;
    }
    .layui-laydate-footer span:first-child.layui-laydate-preview {
        color: #fff !important;
    }
    .layui-laydate-content td:hover {
        color: #fff;
        background-color: #2F5D6B !important;
    }
    .layui-laydate-list > li:hover {
        background-color: #2F5D6B !important;
        color: #fff;
    }
    .layui-laydate-header i:hover, .layui-laydate-header span:hover {
        color: #2F5D6B !important;
    }
    .laydate-footer-btns span:hover {
        color: #2F5D6B !important;
    }
    .layui-table-init {
        background-color: transparent !important;
    }
    .layui-table-patch{
        background-color: transparent !important;
    }
    .layui-laydate .layui-this {
        background-color: #2F5D6B !important;
        color: #fff !important;
    }
    .layui-laydate, .layui-laydate-hint {
        border: 1px solid #d2d2d2;
        box-shadow: 0 2px 4px rgb(0 0 0 / 12%);
        background-color: #fff;
        color: #fff;
    }
    .layui-laydate-content > table > thead > tr > th {
        color: #fff;
    }
    .layui-laydate-content td {
        color: #fff;
    }
    .layui-laydate-content .laydate-day-next, .layui-laydate-content .laydate-day-prev {
        color: #666;
    }
    .layui-laydate-footer span:first-child.layui-laydate-preview {
        color: #fff !important;
    }
    .layui-laydate-content td:hover {
        color: #fff;
        background-color: #2F5D6B !important;
    }
    .layui-laydate-list > li:hover {
        background-color: #2F5D6B !important;
        color: #fff;
    }
    .layui-laydate-header i:hover, .layui-laydate-header span:hover {
        color: #2F5D6B !important;
    }
    .laydate-footer-btns span:hover {
        color: #2F5D6B !important;
    }
    .layui-table-init {
        background-color: transparent !important;
    }
    .layui-table-patch{
        background-color: transparent !important;
    }
</style>
</html>