智慧团建系统

 

 一个红色主题的智慧团建系统,包含团队活动、任务管理、进度跟踪等功能:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>智慧团建系统</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: 'Microsoft YaHei', sans-serif;
            background: linear-gradient(135deg, #dc143c 0%, #b22222 50%, #8b0000 100%);
            min-height: 100vh;
            color: #333;
        }

        .container {
            max-width: 1400px;
            margin: 0 auto;
            padding: 20px;
        }

        .header {
            text-align: center;
            margin-bottom: 30px;
            color: white;
        }

        .header h1 {
            font-size: 2.8em;
            margin-bottom: 10px;
            text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
        }

        .header p {
            font-size: 1.2em;
            opacity: 0.9;
        }

        .main-content {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 30px;
            margin-bottom: 30px;
        }

        .card {
            background: rgba(255, 255, 255, 0.95);
            border-radius: 20px;
            padding: 25px;
            box-shadow: 0 15px 35px rgba(0, 0, 0, 0.1);
            backdrop-filter: blur(10px);
            border: 1px solid rgba(255, 255, 255, 0.2);
        }

        .card-title {
            font-size: 1.5em;
            font-weight: bold;
            color: #dc143c;
            margin-bottom: 20px;
            display: flex;
            align-items: center;
            gap: 10px;
        }

        .team-stats {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
            gap: 20px;
            margin-bottom: 30px;
        }

        .stat-card {
            background: linear-gradient(135deg, #dc143c, #b22222);
            color: white;
            padding: 20px;
            border-radius: 15px;
            text-align: center;
            box-shadow: 0 8px 25px rgba(220, 20, 60, 0.3);
        }

        .stat-value {
            font-size: 2em;
            font-weight: bold;
            margin-bottom: 5px;
        }

        .stat-label {
            font-size: 0.9em;
            opacity: 0.9;
        }

        .activity-list {
            max-height: 400px;
            overflow-y: auto;
        }

        .activity-item {
            background: #f8f9fa;
            border-radius: 12px;
            padding: 15px;
            margin-bottom: 15px;
            border-left: 4px solid #dc143c;
            transition: all 0.3s ease;
            cursor: pointer;
        }

        .activity-item:hover {
            transform: translateX(5px);
            box-shadow: 0 5px 15px rgba(220, 20, 60, 0.2);
        }

        .activity-item.completed {
            border-left-color: #28a745;
            background: #d4edda;
        }

        .activity-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-bottom: 10px;
        }

        .activity-title {
            font-weight: bold;
            color: #333;
        }

        .activity-status {
            padding: 4px 12px;
            border-radius: 20px;
            font-size: 0.8em;
            font-weight: bold;
        }

        .status-pending {
            background: #fff3cd;
            color: #856404;
        }

        .status-in-progress {
            background: #cce5ff;
            color: #004085;
        }

        .status-completed {
            background: #d4edda;
            color: #155724;
        }

        .activity-desc {
            color: #666;
            font-size: 0.9em;
            margin-bottom: 10px;
        }

        .activity-meta {
            display: flex;
            justify-content: space-between;
            align-items: center;
            font-size: 0.8em;
            color: #888;
        }

        .progress-bar {
            width: 100%;
            height: 8px;
            background: #e9ecef;
            border-radius: 4px;
            overflow: hidden;
            margin: 10px 0;
        }

        .progress-fill {
            height: 100%;
            background: linear-gradient(90deg, #dc143c, #ff6b6b);
            transition: width 0.3s ease;
        }

        .form-group {
            margin-bottom: 20px;
        }

        label {
            display: block;
            font-weight: bold;
            color: #555;
            margin-bottom: 8px;
        }

        input[type="text"], input[type="number"], select, textarea {
            width: 100%;
            padding: 12px;
            border: 2px solid #ddd;
            border-radius: 8px;
            font-size: 1em;
            transition: border-color 0.3s ease;
        }

        input[type="text"]:focus, input[type="number"]:focus, select:focus, textarea:focus {
            outline: none;
            border-color: #dc143c;
        }

        textarea {
            resize: vertical;
            min-height: 80px;
        }

        .button-group {
            display: flex;
            gap: 10px;
            flex-wrap: wrap;
        }

        button {
            padding: 12px 24px;
            border: none;
            border-radius: 25px;
            font-weight: bold;
            cursor: pointer;
            transition: all 0.3s ease;
            font-size: 1em;
        }

        .btn-primary {
            background: linear-gradient(135deg, #dc143c, #b22222);
            color: white;
            box-shadow: 0 4px 15px rgba(220, 20, 60, 0.3);
        }

        .btn-primary:hover {
            transform: translateY(-2px);
            box-shadow: 0 6px 20px rgba(220, 20, 60, 0.4);
        }

        .btn-secondary {
            background: #6c757d;
            color: white;
        }

        .btn-success {
            background: #28a745;
            color: white;
        }

        .btn-warning {
            background: #ffc107;
            color: #212529;
        }

        .team-members {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
            gap: 15px;
            margin-top: 20px;
        }

        .member-card {
            background: #f8f9fa;
            border-radius: 12px;
            padding: 15px;
            text-align: center;
            border: 2px solid transparent;
            transition: all 0.3s ease;
        }

        .member-card:hover {
            border-color: #dc143c;
            transform: translateY(-2px);
        }

        .member-avatar {
            width: 60px;
            height: 60px;
            border-radius: 50%;
            background: linear-gradient(135deg, #dc143c, #b22222);
            margin: 0 auto 10px;
            display: flex;
            align-items: center;
            justify-content: center;
            color: white;
            font-size: 1.5em;
            font-weight: bold;
        }

        .member-name {
            font-weight: bold;
            color: #333;
            margin-bottom: 5px;
        }

        .member-role {
            color: #666;
            font-size: 0.9em;
            margin-bottom: 10px;
        }

        .member-points {
            color: #dc143c;
            font-weight: bold;
        }

        .leaderboard {
            background: linear-gradient(135deg, #dc143c, #b22222);
            color: white;
            border-radius: 15px;
            padding: 20px;
            margin-top: 20px;
        }

        .leaderboard-title {
            font-size: 1.3em;
            font-weight: bold;
            margin-bottom: 15px;
            text-align: center;
        }

        .leaderboard-item {
            display: flex;
            justify-content: space-between;
            align-items: center;
            padding: 10px;
            background: rgba(255, 255, 255, 0.1);
            border-radius: 8px;
            margin-bottom: 8px;
        }

        .leaderboard-rank {
            font-weight: bold;
            font-size: 1.2em;
        }

        .leaderboard-name {
            flex: 1;
            margin-left: 15px;
        }

        .leaderboard-points {
            font-weight: bold;
        }

        @media (max-width: 768px) {
            .main-content {
                grid-template-columns: 1fr;
            }
            
            .header h1 {
                font-size: 2.2em;
            }
            
            .team-stats {
                grid-template-columns: repeat(2, 1fr);
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="header">
            <h1>🏆 智慧团建系统</h1>
            <p>激发团队活力,共创美好未来</p>
        </div>

        <div class="team-stats">
            <div class="stat-card">
                <div class="stat-value" id="totalMembers">12</div>
                <div class="stat-label">团队成员</div>
            </div>
            <div class="stat-card">
                <div class="stat-value" id="activeActivities">8</div>
                <div class="stat-label">进行中活动</div>
            </div>
            <div class="stat-card">
                <div class="stat-value" id="totalPoints">2,450</div>
                <div class="stat-label">团队积分</div>
            </div>
            <div class="stat-card">
                <div class="stat-value" id="completionRate">85%</div>
                <div class="stat-label">完成率</div>
            </div>
        </div>

        <div class="main-content">
            <div class="card">
                <div class="card-title">📋 团队活动</div>
                <div class="activity-list" id="activityList">
                    <!-- 活动列表将通过JavaScript动态生成 -->
                </div>
            </div>

            <div class="card">
                <div class="card-title">👥 团队成员</div>
                <div class="team-members" id="teamMembers">
                    <!-- 团队成员将通过JavaScript动态生成 -->
                </div>
            </div>
        </div>

        <div class="main-content">
            <div class="card">
                <div class="card-title">➕ 添加活动</div>
                <form id="activityForm">
                    <div class="form-group">
                        <label for="activityName">活动名称</label>
                        <input type="text" id="activityName" placeholder="输入活动名称" required>
                    </div>
                    <div class="form-group">
                        <label for="activityDesc">活动描述</label>
                        <textarea id="activityDesc" placeholder="描述活动内容和目标"></textarea>
                    </div>
                    <div class="form-group">
                        <label for="activityType">活动类型</label>
                        <select id="activityType">
                            <option value="team-building">团队建设</option>
                            <option value="training">技能培训</option>
                            <option value="competition">竞赛活动</option>
                            <option value="celebration">庆祝活动</option>
                            <option value="volunteer">志愿服务</option>
                        </select>
                    </div>
                    <div class="form-group">
                        <label for="activityPoints">积分奖励</label>
                        <input type="number" id="activityPoints" min="10" max="1000" value="50">
                    </div>
                    <div class="button-group">
                        <button type="submit" class="btn-primary">添加活动</button>
                        <button type="button" class="btn-secondary" onclick="clearForm()">清空表单</button>
                    </div>
                </form>
            </div>

            <div class="card">
                <div class="card-title">🏅 积分排行榜</div>
                <div class="leaderboard">
                    <div class="leaderboard-title">本月积分榜</div>
                    <div id="leaderboardList">
                        <!-- 排行榜将通过JavaScript动态生成 -->
                    </div>
                </div>
            </div>
        </div>
    </div>

    <script>
        // 团队数据
        let activities = [
            {
                id: 1,
                name: "团队拓展训练",
                description: "户外拓展活动,提升团队协作能力",
                type: "team-building",
                status: "in-progress",
                points: 100,
                participants: 12,
                progress: 60,
                startDate: "2024-01-15",
                endDate: "2024-01-20"
            },
            {
                id: 2,
                name: "技能分享会",
                description: "团队成员分享专业技能和经验",
                type: "training",
                status: "completed",
                points: 80,
                participants: 8,
                progress: 100,
                startDate: "2024-01-10",
                endDate: "2024-01-12"
            },
            {
                id: 3,
                name: "创新竞赛",
                description: "团队创新项目竞赛",
                type: "competition",
                status: "pending",
                points: 150,
                participants: 6,
                progress: 0,
                startDate: "2024-01-25",
                endDate: "2024-02-05"
            }
        ];

        let teamMembers = [
            { id: 1, name: "张三", role: "项目经理", points: 450, avatar: "张" },
            { id: 2, name: "李四", role: "技术主管", points: 380, avatar: "李" },
            { id: 3, name: "王五", role: "设计师", points: 320, avatar: "王" },
            { id: 4, name: "赵六", role: "开发工程师", points: 290, avatar: "赵" },
            { id: 5, name: "钱七", role: "测试工程师", points: 260, avatar: "钱" },
            { id: 6, name: "孙八", role: "产品经理", points: 240, avatar: "孙" }
        ];

        // 初始化
        function init() {
            renderActivities();
            renderTeamMembers();
            renderLeaderboard();
            updateStats();
        }

        // 渲染活动列表
        function renderActivities() {
            const activityList = document.getElementById('activityList');
            activityList.innerHTML = '';

            activities.forEach(activity => {
                const activityItem = document.createElement('div');
                activityItem.className = `activity-item ${activity.status === 'completed' ? 'completed' : ''}`;
                
                activityItem.innerHTML = `
                    <div class="activity-header">
                        <div class="activity-title">${activity.name}</div>
                        <div class="activity-status status-${activity.status}">
                            ${getStatusText(activity.status)}
                        </div>
                    </div>
                    <div class="activity-desc">${activity.description}</div>
                    <div class="progress-bar">
                        <div class="progress-fill" style="width: ${activity.progress}%"></div>
                    </div>
                    <div class="activity-meta">
                        <span>🏆 ${activity.points}积分</span>
                        <span>👥 ${activity.participants}人参与</span>
                        <span>📅 ${activity.startDate}</span>
                    </div>
                `;

                activityItem.onclick = () => toggleActivityStatus(activity.id);
                activityList.appendChild(activityItem);
            });
        }

        // 渲染团队成员
        function renderTeamMembers() {
            const teamMembersContainer = document.getElementById('teamMembers');
            teamMembersContainer.innerHTML = '';

            teamMembers.forEach(member => {
                const memberCard = document.createElement('div');
                memberCard.className = 'member-card';
                
                memberCard.innerHTML = `
                    <div class="member-avatar">${member.avatar}</div>
                    <div class="member-name">${member.name}</div>
                    <div class="member-role">${member.role}</div>
                    <div class="member-points">🏆 ${member.points}积分</div>
                `;

                teamMembersContainer.appendChild(memberCard);
            });
        }

        // 渲染排行榜
        function renderLeaderboard() {
            const leaderboardList = document.getElementById('leaderboardList');
            leaderboardList.innerHTML = '';

            const sortedMembers = [...teamMembers].sort((a, b) => b.points - a.points);

            sortedMembers.forEach((member, index) => {
                const leaderboardItem = document.createElement('div');
                leaderboardItem.className = 'leaderboard-item';
                
                leaderboardItem.innerHTML = `
                    <div class="leaderboard-rank">${index + 1}</div>
                    <div class="leaderboard-name">${member.name}</div>
                    <div class="leaderboard-points">🏆 ${member.points}</div>
                `;

                leaderboardList.appendChild(leaderboardItem);
            });
        }

        // 更新统计信息
        function updateStats() {
            const totalMembers = teamMembers.length;
            const activeActivities = activities.filter(a => a.status === 'in-progress').length;
            const totalPoints = teamMembers.reduce((sum, member) => sum + member.points, 0);
            const completedActivities = activities.filter(a => a.status === 'completed').length;
            const completionRate = activities.length > 0 ? Math.round((completedActivities / activities.length) * 100) : 0;

            document.getElementById('totalMembers').textContent = totalMembers;
            document.getElementById('activeActivities').textContent = activeActivities;
            document.getElementById('totalPoints').textContent = totalPoints.toLocaleString();
            document.getElementById('completionRate').textContent = completionRate + '%';
        }

        // 获取状态文本
        function getStatusText(status) {
            const statusMap = {
                'pending': '待开始',
                'in-progress': '进行中',
                'completed': '已完成'
            };
            return statusMap[status] || status;
        }

        // 切换活动状态
        function toggleActivityStatus(activityId) {
            const activity = activities.find(a => a.id === activityId);
            if (activity) {
                const statusOrder = ['pending', 'in-progress', 'completed'];
                const currentIndex = statusOrder.indexOf(activity.status);
                const nextIndex = (currentIndex + 1) % statusOrder.length;
                activity.status = statusOrder[nextIndex];
                
                if (activity.status === 'completed') {
                    activity.progress = 100;
                    // 给参与者分配积分
                    distributePoints(activity.points, activity.participants);
                } else if (activity.status === 'in-progress') {
                    activity.progress = 60;
                } else {
                    activity.progress = 0;
                }
                
                renderActivities();
                renderTeamMembers();
                renderLeaderboard();
                updateStats();
            }
        }

        // 分配积分
        function distributePoints(totalPoints, participants) {
            const pointsPerPerson = Math.floor(totalPoints / participants);
            const remainingPoints = totalPoints % participants;
            
            // 随机选择成员分配积分
            const shuffledMembers = [...teamMembers].sort(() => Math.random() - 0.5);
            
            for (let i = 0; i < participants && i < shuffledMembers.length; i++) {
                const extraPoints = i < remainingPoints ? 1 : 0;
                shuffledMembers[i].points += pointsPerPerson + extraPoints;
            }
        }

        // 添加新活动
        document.getElementById('activityForm').addEventListener('submit', function(e) {
            e.preventDefault();
            
            const name = document.getElementById('activityName').value;
            const description = document.getElementById('activityDesc').value;
            const type = document.getElementById('activityType').value;
            const points = parseInt(document.getElementById('activityPoints').value);
            
            const newActivity = {
                id: Date.now(),
                name: name,
                description: description,
                type: type,
                status: 'pending',
                points: points,
                participants: Math.floor(Math.random() * 10) + 5,
                progress: 0,
                startDate: new Date().toISOString().split('T')[0],
                endDate: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString().split('T')[0]
            };
            
            activities.push(newActivity);
            renderActivities();
            updateStats();
            clearForm();
        });

        // 清空表单
        function clearForm() {
            document.getElementById('activityForm').reset();
        }

        // 初始化应用
        init();
    </script>
</body>
</html>

🏆 主要功能

1. 团队统计面板

  • 团队成员数量
  • 进行中活动数量
  • 团队总积分
  • 活动完成率

2. 活动管理系统

  • 添加新活动
  • 活动状态管理(待开始、进行中、已完成)
  • 活动类型分类(团队建设、技能培训、竞赛活动等)
  • 积分奖励系统

3. 团队成员展示

  • 成员头像和基本信息
  • 个人积分显示
  • 角色分工展示

4. 积分排行榜

  • 实时积分排名
  • 动态更新机制
  • 红色主题设计

5. 交互功能

  • 点击活动切换状态
  • 表单添加新活动
  • 自动积分分配
  • 进度条显示

🎨 设计特色

红色主题

  • 渐变红色背景
  • 红色强调色
  • 白色卡片设计
  • 现代化UI界面

响应式布局

  • 适配不同屏幕尺寸
  • 网格布局系统
  • 流畅的动画效果

数据管理

  • 活动数据管理
  • 成员积分系统
  • 实时统计更新
  • 状态跟踪

🎯 使用说明

  1. 查看团队状态:顶部统计面板显示团队整体情况
  1. 管理活动:左侧活动列表,点击可切换状态
  1. 添加活动:使用表单添加新的团队活动
  1. 查看成员:右侧显示团队成员和积分
  1. 排行榜:底部显示积分排行榜

�� 特色功能

  • 智能积分分配:活动完成时自动分配积分
  • 进度可视化:活动进度条显示
  • 状态管理:活动状态循环切换
  • 实时更新:数据变化时自动刷新显示

这个系统可以帮助团队:

  • 组织和管理团建活动
  • 激励成员参与
  • 跟踪活动进度
  • 建立积分奖励机制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值