卡厄思
梦
境
菜单
首页
回到首页
WIKI工具
全站样式
全站JS
修改导航栏
测试
沙盒
可视化管理器
战斗员管理器
卡牌管理器
伙伴管理器
装备管理器
词典管理器
图鉴
战斗员
伙伴
装备
怪物卡牌
中立卡牌
词典
小工具
配队模拟器
节奏榜生成器
搜索
链入页面
相关更改
特殊页面
页面信息
最近更改
登录
微件
查看“︁BatchCreateEquipment”︁的源代码
←
微件:BatchCreateEquipment
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您没有权限编辑
微件
命名空间内的页面。
您可以查看和复制此页面的源代码。
<noinclude> 这是一个用于批量创建装备页面的Widget。 使用方法:在任何页面中添加 {{#widget:BatchCreateEquipment}} </noinclude> <includeonly> <div id="batch-create-equipment"> <style> #equipment-creator { border: 1px solid #ccc; padding: 20px; margin: 20px 0; background: #f9f9f9; border-radius: 5px; } #equipment-list { width: 100%; min-height: 150px; margin: 10px 0; padding: 10px; border: 1px solid #ddd; border-radius: 3px; font-family: monospace; } .create-btn { background: #36c; color: white; padding: 10px 20px; border: none; border-radius: 3px; cursor: pointer; font-size: 14px; margin-right: 10px; } .create-btn:hover { background: #2a52be; } .create-btn:disabled { background: #ccc; cursor: not-allowed; } #create-log { margin-top: 20px; padding: 10px; border: 1px solid #ddd; background: white; max-height: 300px; overflow-y: auto; display: none; border-radius: 3px; } .log-success { color: green; } .log-error { color: red; } .log-info { color: blue; } #progress-bar { width: 100%; height: 20px; border: 1px solid #ddd; border-radius: 3px; margin: 10px 0; display: none; background: white; } #progress-fill { height: 100%; background: #36c; border-radius: 3px; transition: width 0.3s; width: 0; } </style> <div id="equipment-creator"> <h3>批量创建装备页面</h3> <div> <label for="equipment-list"> <strong>装备名称列表</strong>(每行一个装备名称): </label> <textarea id="equipment-list" placeholder="装备名称1 装备名称2 装备名称3"></textarea> </div> <div style="margin: 10px 0;"> <label> <input type="checkbox" id="skip-existing" checked> 跳过已存在的页面 </label> </div> <div style="margin: 10px 0;"> <label> 创建延迟(毫秒): <input type="number" id="create-delay" value="1000" min="500" max="5000" style="width: 80px;"> </label> <small>(建议设置1000ms以上,避免请求过快)</small> </div> <div> <button class="create-btn" id="start-create">开始创建</button> <button class="create-btn" id="stop-create" style="display:none; background: #d33;">停止创建</button> <button class="create-btn" id="clear-log" style="background: #666;">清空日志</button> </div> <div id="progress-bar"> <div id="progress-fill"></div> </div> <div id="create-log"></div> </div> <script> (function() { var isCreating = false; var stopRequested = false; var api = new mw.Api(); // 页面内容模板 function getPageContent(pageName) { return '{{面包屑|装备图鉴}}\n' + '<div style="display:flex;justify-content:center;align-items:center;flex-wrap:wrap;gap:5px">\n' + '{{#invoke:装备|displaypopup|' + pageName + '|1}} {{#invoke:装备|displaypopup|' + pageName + '|2}} {{#invoke:装备|displaypopup|' + pageName + '|3}}{{#invoke:装备|displaypopup|' + pageName + '|4}} {{#invoke:装备|displaypopup|' + pageName + '|5}}\n' + '</div>\n' + '[[分类:装备]]'; } function addLog(message, type) { var logDiv = document.getElementById('create-log'); logDiv.style.display = 'block'; var logEntry = document.createElement('div'); logEntry.className = 'log-' + type; var timestamp = new Date().toLocaleTimeString(); logEntry.textContent = '[' + timestamp + '] ' + message; logDiv.appendChild(logEntry); logDiv.scrollTop = logDiv.scrollHeight; } function updateProgress(current, total) { var progressBar = document.getElementById('progress-bar'); var progressFill = document.getElementById('progress-fill'); progressBar.style.display = 'block'; var percentage = (current / total) * 100; progressFill.style.width = percentage + '%'; } function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } async function checkPageExists(title) { try { var result = await api.get({ action: 'query', titles: title, format: 'json' }); var pages = result.query.pages; for (var pageId in pages) { return pageId !== '-1'; } } catch (error) { console.error('检查页面存在性失败:', error); return false; } } async function createPage(title, content) { try { await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: '批量创建装备页面', createonly: true, format: 'json' }); return { success: true }; } catch (error) { return { success: false, error: error }; } } async function startBatchCreate() { if (isCreating) return; var equipmentList = document.getElementById('equipment-list').value.trim(); if (!equipmentList) { alert('请输入装备名称列表'); return; } var equipments = equipmentList.split('\n').filter(name => name.trim()); if (equipments.length === 0) { alert('没有有效的装备名称'); return; } isCreating = true; stopRequested = false; document.getElementById('start-create').style.display = 'none'; document.getElementById('stop-create').style.display = 'inline-block'; document.getElementById('equipment-list').disabled = true; var skipExisting = document.getElementById('skip-existing').checked; var delay = parseInt(document.getElementById('create-delay').value) || 1000; addLog('开始批量创建装备页面,共 ' + equipments.length + ' 个', 'info'); var successCount = 0; var skipCount = 0; var errorCount = 0; for (var i = 0; i < equipments.length; i++) { if (stopRequested) { addLog('用户停止了创建过程', 'info'); break; } var equipmentName = equipments[i].trim(); if (!equipmentName) continue; updateProgress(i + 1, equipments.length); // 检查页面是否存在 if (skipExisting) { var exists = await checkPageExists(equipmentName); if (exists) { addLog('页面 "' + equipmentName + '" 已存在,跳过', 'info'); skipCount++; await sleep(delay / 2); // 检查操作延迟减半 continue; } } // 创建页面 var content = getPageContent(equipmentName); var result = await createPage(equipmentName, content); if (result.success) { addLog('成功创建页面: ' + equipmentName, 'success'); successCount++; } else { if (result.error && result.error.code === 'articleexists') { addLog('页面 "' + equipmentName + '" 已存在', 'info'); skipCount++; } else { addLog('创建页面 "' + equipmentName + '" 失败: ' + (result.error ? result.error.info : '未知错误'), 'error'); errorCount++; } } // 延迟下一次请求 if (i < equipments.length - 1) { await sleep(delay); } } addLog('批量创建完成!成功: ' + successCount + ', 跳过: ' + skipCount + ', 失败: ' + errorCount, 'info'); isCreating = false; document.getElementById('start-create').style.display = 'inline-block'; document.getElementById('stop-create').style.display = 'none'; document.getElementById('equipment-list').disabled = false; } // 绑定事件 document.getElementById('start-create').addEventListener('click', startBatchCreate); document.getElementById('stop-create').addEventListener('click', function() { stopRequested = true; this.disabled = true; this.textContent = '正在停止...'; }); document.getElementById('clear-log').addEventListener('click', function() { document.getElementById('create-log').innerHTML = ''; document.getElementById('create-log').style.display = 'none'; document.getElementById('progress-bar').style.display = 'none'; document.getElementById('progress-fill').style.width = '0'; }); })(); </script> </div> </includeonly>
返回
微件:BatchCreateEquipment
。