diff --git a/src/main/java/com/example/workutils/biz/apidoc/generator/ApiDocGenerator.java b/src/main/java/com/example/workutils/biz/apidoc/generator/ApiDocGenerator.java index 83cf2d1..2ec0737 100644 --- a/src/main/java/com/example/workutils/biz/apidoc/generator/ApiDocGenerator.java +++ b/src/main/java/com/example/workutils/biz/apidoc/generator/ApiDocGenerator.java @@ -71,6 +71,8 @@ public class ApiDocGenerator { sb.append("\n"); sb.append("
").append(escapeHtml(mi.returnType)).append("\n");
}
+ sb.append(" \n");
+ sb.append(" \n");
sb.append(" \n");
// 方法体
@@ -516,6 +523,20 @@ public class ApiDocGenerator {
sb.append(".copy-btn:hover{color:#fff;border-color:#888}\n");
sb.append(".copy-btn.copied{color:#52c41a;border-color:#52c41a}\n");
+ // 接口/方法级复制按钮
+ sb.append(".api-copy-btn{padding:4px 12px;border:1px solid #1677ff;border-radius:4px;background:#e8f3ff;color:#1677ff;font-size:12px;cursor:pointer;transition:.15s;font-family:inherit}\n");
+ sb.append(".api-copy-btn:hover{background:#1677ff;color:#fff}\n");
+ sb.append(".api-copy-btn.copied{background:#52c41a;border-color:#52c41a;color:#fff}\n");
+ sb.append(".method-copy-btn{margin-left:auto;padding:3px 10px;border:1px solid #e5e6eb;border-radius:3px;background:#fff;color:#4e5969;font-size:11px;cursor:pointer;transition:.15s;font-family:inherit;flex-shrink:0}\n");
+ sb.append(".method-copy-btn:hover{border-color:#1677ff;color:#1677ff;background:#e8f3ff}\n");
+ sb.append(".method-copy-btn.copied{border-color:#52c41a;color:#52c41a;background:#f6ffed}\n");
+ // 复制双按钮:图片为主,富文本为次
+ sb.append(".api-copy-btn.txt{background:#fff;color:#1677ff}\n");
+ sb.append(".api-copy-btn.txt:hover{background:#e8f3ff}\n");
+ sb.append(".method-copy-btn.txt{color:#1677ff;border-color:#91caff;background:#f0f7ff}\n");
+ sb.append(".method-copy-btn.img{background:#1677ff;color:#fff;border-color:#1677ff}\n");
+ sb.append(".method-copy-btn.img:hover{background:#0958d9;border-color:#0958d9}\n");
+
// 参数块
sb.append(".params-block{margin-bottom:12px}\n");
sb.append(".params-block-title{font-size:13px;font-weight:600;color:#4e5969;margin-bottom:6px}\n");
@@ -656,6 +677,208 @@ public class ApiDocGenerator {
sb.append(" btn.textContent='\\u2714';btn.classList.add('copied');\n");
sb.append(" setTimeout(function(){btn.textContent='\\u590D\\u5236';btn.classList.remove('copied');},1500);\n");
sb.append("}\n");
+
+ // 复制用内联样式(保证粘贴到 Word 保留表格/缩进/配色,且可编辑)
+ sb.append("var DOC_CSS=\"\";\n");
+
+ // 复制按钮反馈
+ sb.append("function markCopied(btn,msg){\n");
+ sb.append(" if(!btn._orig)btn._orig=btn.innerHTML;\n");
+ sb.append(" btn.classList.add('copied');\n");
+ sb.append(" btn.textContent=msg||'\\u2714 已复制';\n");
+ sb.append(" setTimeout(function(){if(btn._orig)btn.innerHTML=btn._orig;btn.classList.remove('copied');},2000);\n");
+ sb.append("}\n");
+
+ // 去掉复制按钮等干扰元素
+ sb.append("function cleanBody(body){\n");
+ sb.append(" var t=document.createElement('div');t.innerHTML=body.innerHTML;\n");
+ sb.append(" t.querySelectorAll('.copy-btn').forEach(function(b){if(b.parentNode)b.parentNode.removeChild(b);});\n");
+ sb.append(" return t.innerHTML;\n");
+ sb.append("}\n");
+
+ // 构建接口级富文本
+ sb.append("function buildFacadeHtml(card){\n");
+ sb.append(" var name=card.querySelector('.api-name').textContent;\n");
+ sb.append(" var fqn=card.querySelector('.info-value.mono');\n");
+ sb.append(" var fqnText=fqn?fqn.textContent:'';\n");
+ sb.append(" var html='