220 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			220 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// 库存日志页面的JavaScript功能
 | 
						|
document.addEventListener('DOMContentLoaded', function() {
 | 
						|
    // 日期选择器联动
 | 
						|
    const dateFrom = document.getElementById('date_from');
 | 
						|
    const dateTo = document.getElementById('date_to');
 | 
						|
 | 
						|
    // 确保结束日期不早于开始日期
 | 
						|
    if (dateFrom && dateTo) {
 | 
						|
        dateFrom.addEventListener('change', function() {
 | 
						|
            if (dateTo.value && dateFrom.value > dateTo.value) {
 | 
						|
                dateTo.value = dateFrom.value;
 | 
						|
            }
 | 
						|
        });
 | 
						|
 | 
						|
        dateTo.addEventListener('change', function() {
 | 
						|
            if (dateFrom.value && dateFrom.value > dateTo.value) {
 | 
						|
                dateFrom.value = dateTo.value;
 | 
						|
            }
 | 
						|
        });
 | 
						|
    }
 | 
						|
 | 
						|
    // 重置筛选按钮
 | 
						|
    const resetButton = document.getElementById('reset-filters');
 | 
						|
    if (resetButton) {
 | 
						|
        resetButton.addEventListener('click', function() {
 | 
						|
            document.getElementById('book_id').value = '';
 | 
						|
            document.getElementById('change_type').value = '';
 | 
						|
            document.getElementById('date_from').value = '';
 | 
						|
            document.getElementById('date_to').value = '';
 | 
						|
 | 
						|
            // 提交表单以应用重置的筛选条件
 | 
						|
            document.querySelector('form').submit();
 | 
						|
        });
 | 
						|
    }
 | 
						|
 | 
						|
    // 备注信息悬停显示完整内容
 | 
						|
    const remarkCells = document.querySelectorAll('.remark-cell');
 | 
						|
    remarkCells.forEach(cell => {
 | 
						|
        if (cell.offsetWidth < cell.scrollWidth) {
 | 
						|
            cell.title = cell.textContent;
 | 
						|
        }
 | 
						|
    });
 | 
						|
 | 
						|
    // 创建雪花效果
 | 
						|
    createSnowflakes();
 | 
						|
 | 
						|
    // 初始化particles.js特效
 | 
						|
    initParticles();
 | 
						|
 | 
						|
    // 给表格行添加动画延迟
 | 
						|
    animateTableRows();
 | 
						|
});
 | 
						|
 | 
						|
// 创建雪花效果
 | 
						|
function createSnowflakes() {
 | 
						|
    const snowflakesCount = 50; // 雪花数量
 | 
						|
    const container = document.body;
 | 
						|
    const snowflakeChars = ['❄', '❅', '❆', '✱', '*'];
 | 
						|
 | 
						|
    for (let i = 0; i < snowflakesCount; i++) {
 | 
						|
        const snowflake = document.createElement('div');
 | 
						|
        snowflake.className = 'snowflake';
 | 
						|
        snowflake.textContent = snowflakeChars[Math.floor(Math.random() * snowflakeChars.length)];
 | 
						|
 | 
						|
        // 随机样式
 | 
						|
        snowflake.style.left = `${Math.random() * 100}%`;
 | 
						|
        snowflake.style.opacity = Math.random();
 | 
						|
        snowflake.style.fontSize = `${Math.random() * 15 + 10}px`;
 | 
						|
 | 
						|
        // 动画
 | 
						|
        const duration = Math.random() * 30 + 20;
 | 
						|
        snowflake.style.animationDuration = `${duration}s`;
 | 
						|
        snowflake.style.animationDelay = `${Math.random() * 5}s`;
 | 
						|
 | 
						|
        container.appendChild(snowflake);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
// 初始化particles.js
 | 
						|
function initParticles() {
 | 
						|
    if (typeof particlesJS !== 'undefined') {
 | 
						|
        particlesJS('magic-particles', {
 | 
						|
            "particles": {
 | 
						|
                "number": {
 | 
						|
                    "value": 80,
 | 
						|
                    "density": {
 | 
						|
                        "enable": true,
 | 
						|
                        "value_area": 800
 | 
						|
                    }
 | 
						|
                },
 | 
						|
                "color": {
 | 
						|
                    "value": ["#a2d5f2", "#6fa8dc", "#cfe2f3", "#b19cd9"]
 | 
						|
                },
 | 
						|
                "shape": {
 | 
						|
                    "type": ["circle", "star"],
 | 
						|
                    "stroke": {
 | 
						|
                        "width": 0,
 | 
						|
                        "color": "#000000"
 | 
						|
                    },
 | 
						|
                    "polygon": {
 | 
						|
                        "nb_sides": 5
 | 
						|
                    }
 | 
						|
                },
 | 
						|
                "opacity": {
 | 
						|
                    "value": 0.3,
 | 
						|
                    "random": true,
 | 
						|
                    "anim": {
 | 
						|
                        "enable": true,
 | 
						|
                        "speed": 1,
 | 
						|
                        "opacity_min": 0.1,
 | 
						|
                        "sync": false
 | 
						|
                    }
 | 
						|
                },
 | 
						|
                "size": {
 | 
						|
                    "value": 5,
 | 
						|
                    "random": true,
 | 
						|
                    "anim": {
 | 
						|
                        "enable": false,
 | 
						|
                        "speed": 40,
 | 
						|
                        "size_min": 0.1,
 | 
						|
                        "sync": false
 | 
						|
                    }
 | 
						|
                },
 | 
						|
                "line_linked": {
 | 
						|
                    "enable": true,
 | 
						|
                    "distance": 150,
 | 
						|
                    "color": "#a2d5f2",
 | 
						|
                    "opacity": 0.2,
 | 
						|
                    "width": 1
 | 
						|
                },
 | 
						|
                "move": {
 | 
						|
                    "enable": true,
 | 
						|
                    "speed": 2,
 | 
						|
                    "direction": "none",
 | 
						|
                    "random": true,
 | 
						|
                    "straight": false,
 | 
						|
                    "out_mode": "out",
 | 
						|
                    "bounce": false,
 | 
						|
                    "attract": {
 | 
						|
                        "enable": true,
 | 
						|
                        "rotateX": 600,
 | 
						|
                        "rotateY": 1200
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            },
 | 
						|
            "interactivity": {
 | 
						|
                "detect_on": "canvas",
 | 
						|
                "events": {
 | 
						|
                    "onhover": {
 | 
						|
                        "enable": true,
 | 
						|
                        "mode": "grab"
 | 
						|
                    },
 | 
						|
                    "onclick": {
 | 
						|
                        "enable": true,
 | 
						|
                        "mode": "push"
 | 
						|
                    },
 | 
						|
                    "resize": true
 | 
						|
                },
 | 
						|
                "modes": {
 | 
						|
                    "grab": {
 | 
						|
                        "distance": 140,
 | 
						|
                        "line_linked": {
 | 
						|
                            "opacity": 0.5
 | 
						|
                        }
 | 
						|
                    },
 | 
						|
                    "bubble": {
 | 
						|
                        "distance": 400,
 | 
						|
                        "size": 4,
 | 
						|
                        "duration": 2,
 | 
						|
                        "opacity": 1,
 | 
						|
                        "speed": 3
 | 
						|
                    },
 | 
						|
                    "repulse": {
 | 
						|
                        "distance": 200,
 | 
						|
                        "duration": 0.4
 | 
						|
                    },
 | 
						|
                    "push": {
 | 
						|
                        "particles_nb": 4
 | 
						|
                    },
 | 
						|
                    "remove": {
 | 
						|
                        "particles_nb": 2
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            },
 | 
						|
            "retina_detect": true
 | 
						|
        });
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
// 给表格行添加动画延迟
 | 
						|
function animateTableRows() {
 | 
						|
    const rows = document.querySelectorAll('.log-row');
 | 
						|
    rows.forEach((row, index) => {
 | 
						|
        row.style.animationDelay = `${index * 0.05}s`;
 | 
						|
        row.style.animationDuration = '0.5s';
 | 
						|
        row.style.animationName = 'fadeInUp';
 | 
						|
        row.style.animationFillMode = 'both';
 | 
						|
    });
 | 
						|
}
 | 
						|
 | 
						|
// 添加淡入向上动画
 | 
						|
const fadeInUpKeyframes = `
 | 
						|
@keyframes fadeInUp {
 | 
						|
    from {
 | 
						|
        opacity: 0;
 | 
						|
        transform: translate3d(0, 20px, 0);
 | 
						|
    }
 | 
						|
    to {
 | 
						|
        opacity: 1;
 | 
						|
        transform: translate3d(0, 0, 0);
 | 
						|
    }
 | 
						|
}`;
 | 
						|
 | 
						|
// 添加动画样式到文档
 | 
						|
document.addEventListener('DOMContentLoaded', function() {
 | 
						|
    const style = document.createElement('style');
 | 
						|
    style.textContent = fadeInUpKeyframes;
 | 
						|
    document.head.appendChild(style);
 | 
						|
});
 |