HTML5、JS、CSS3、Vue3联手打造人员抽取小程序:杜绝重复抽取,体验绝佳!
好的,下面是一个使用 HTML5、CSS3、JavaScript 和 Vue 3 实现的人员抽取小程序。这个程序允许用户自定义名单,确保同一个组中的人员不会被重复抽中,直到所有组的人员都被抽取一次。 HTML (index.html) ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>人员抽取小程序</title> <link rel="stylesheet" href="styles.css"> <script src="https://unpkg.com/vue@next"></script> </head> <body> <div id="app"> <h1>人员抽取小程序</h1> <div class="input-section"> <label for="groups">请输入组名和人员(格式:组名: 人员1, 人员2, ...)</label> <textarea v-model="groupsInput" rows="10" placeholder="例如:组1: 张三, 李四\n组2: 王五, 赵六"></textarea> <button @click="parseGroups">解析名单</button> </div> <div v-if="groups.length > 0" class="result-section"> <h2>已解析的组和人员</h2> <ul> <li v-for="(group, index) in groups" :key="index">{{ group.name }}: {{ group.members.join(', ') }}</li> </ul> <button @click="drawPerson">抽取人员</button> <p v-if="selectedPerson">抽取结果:{{ selectedPerson }}</p> </div> </div> <script src="app.js"></script> </body> </html> ``` CSS (styles.css) ```css body { font-family: Arial, sans-serif; background-color: #f0f0f0; margin: 0; padding: 20px; } #app { max-width: 600px; margin: 0 auto; background-color: #fff; padding: 20px; border-radius: 8px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); } h1, h2 { text-align: center; } .input-section, .result-section { margin-bottom: 20px; } textarea { width: 100%; height: 100px; padding: 10px; border: 1px solid #ccc; border-radius: 4px; resize: none; } button { display: block; width: 100%; padding: 10px; background-color: #007bff; color: #fff; border: none; border-radius: 4px; cursor: pointer; margin-top: 10px; } button:hover { background-color: #0056b3; } ul { list-style-type: none; padding: 0; } li { margin: 5px 0; } ``` JavaScript (app.js) ```javascript const app = Vue.createApp({ data() { return { groupsInput: '', groups: [], selectedPerson: null, drawnMembers: [] }; }, methods: { parseGroups() { this.groups = []; const lines = this.groupsInput.trim().split('\n'); lines.forEach(line => { const [groupName, members] = line.split(':'); if (groupName && members) { this.groups.push({ name: groupName.trim(), members: members.trim().split(',').map(member => member.trim()) }); } }); this.drawnMembers = new Array(this.groups.length).fill(null); }, drawPerson() { let availableGroups = this.groups.filter((group, index) => !this.drawnMembers[index]); if (availableGroups.length === 0) { alert('所有组的人员都已抽取完毕,重新开始。'); this.drawnMembers = new Array(this.groups.length).fill(null); availableGroups = this.groups; } const randomGroupIndex = Math.floor(Math.random() * availableGroups.length); const randomGroup = availableGroups[randomGroupIndex]; const availableMembers = randomGroup.members.filter(member => !this.drawnMembers.includes(member)); if (availableMembers.length === 0) { alert(`组 ${randomGroup.name} 的人员都已抽取完毕,重新开始。`); this.drawnMembers[randomGroupIndex] = null; return; } const randomMemberIndex = Math.floor(Math.random() * availableMembers.length); const selectedMember = availableMembers[randomMemberIndex]; this.selectedPerson = `${randomGroup.name}: ${selectedMember}`; this.drawnMembers[randomGroupIndex] = selectedMember; } } }); app.mount('#app'); ``` 需要注意的逻辑点 1. 解析名单时的格式检查:确保用户输入的格式正确,避免因格式错误导致解析失败。 2. 抽取逻辑的优化:确保每个组的人员在所有组的人员都被抽取一次之前不会被重复抽取。 3. 用户体验:添加更多的提示信息和友好的用户交互,如抽取完毕后的提示和重新开始的功能。 ######[AI写代码神器 | 1179点数解答 | 2024-12-12 16:55:01]
- HTML5、JS、CSS3、Vue3联手打造人员抽取小程序:杜绝重复抽取,体验绝佳! (阿里通义 | 1179点数解答 | 2024-12-12 16:55:01)225
- 修复代码错误:解决 Python 格式化字符串引发的 ValueError 问题(字节豆包 | 187点数解答 | 2024-10-16 15:53:08)357
- 代码修复:解决“invalid format specifier”实现商品信息正确输出(字节豆包 | 204点数解答 | 2024-10-16 15:53:41)306
- "Debugging 'Cannot Read Properties of Null (reading \'userid\')' Error in Vue Components: Steps and Example"(讯飞星火 | 614点数解答 | 2024-11-28 14:31:57)267
- HTML+jQuery 实现列表元素悬停动画效果:代码详解与注意事项(字节豆包 | 475点数解答 | 2024-12-19 14:58:05)367
- HTML+jQuery:打造动态导航栏动画效果及注意事项(字节豆包 | 495点数解答 | 2024-12-19 14:58:06)316
- HTML+jQuery:打造带动态交互效果的商品展示页面(讯飞星火 | 497点数解答 | 2024-12-19 14:58:18)321
- HTML与jQuery结合:实现商品列表交互动画的首页代码解析(讯飞星火 | 497点数解答 | 2024-12-19 14:58:20)337
- Three.js 示例代码解析:优化场景渲染与注意要点(字节豆包 | 164点数解答 | 2025-02-27 23:30:20)257
- Three.js实现可360°观察正交长方体:代码分析、优化与注意要点(DeepSeek | 466点数解答 | 2025-03-01 11:35:41)247
- 用 HTML、JS、CSS3 和 Vue 实现不重复的人员名单抽取(附代码与注意点)(阿里通义 | 767点数解答 | 2024-12-12 16:45:18)207
- "Debugging 'Cannot Read Properties of Null (Reading 'userid')' Error: A Step-by-Step Guide"(讯飞星火 | 523点数解答 | 2024-11-28 14:32:05)251