YapiCopy

Yapi接口数据一键复制

2023/07/28のページです。最新版はこちら

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください
// ==UserScript==
// @name         YapiCopy
// @namespace    http://tampermonkey.net/
// @version      0.1.2
// @description  Yapi接口数据一键复制
// @author       Enjoy
// @icon         https://foruda.gitee.com/avatar/1671100286067517749/4867929_enjoy_li_1671100285.png!avatar60
// @match        *://yapi.*.com/project/*/interface/api/*
// @grant        GM_addElement
// @grant        GM_addStyle
// @grant        GM_setClipboard
// @license      GPL License
// ==/UserScript==

createBtn();
function cellecteData() {
  'use esversion:11';

  var _values$, _values$2;
  var paramsInnerText = document.querySelectorAll('table tbody')[1].innerText || '';
  var paramsStr = formatParamsStr(paramsInnerText);
  var desc = document.querySelector('.colName').innerText || '';
  var pageUrl = location.href;
  var values = document.querySelectorAll('.colValue');
  var method = ((_values$ = values[3]) === null || _values$ === void 0 ? void 0 : _values$.innerText.toLocaleLowerCase()) || '';
  var apiUrl = ((_values$2 = values[4]) === null || _values$2 === void 0 ? void 0 : _values$2.innerText) || '';
  var template = "\n/* // \u53C2\u6570\u8BF4\u660E\n let  params = { ".concat(paramsStr, "\n  }\n*/\n\n/**\n* @description ").concat(desc, "\n* @see ").concat(pageUrl, "\n* @param { params } params\n*/\nexport function ").concat(apiUrl.replace(/^.*\//, ''), " (params) {\n  return http.").concat(method, " ('").concat(apiUrl, "',params)\n}");
  return template;
}
function formatParamsStr(paramsStr) {
  ;['\n', '非必须', '必须', 'format: int32', '\t'].forEach(function (item) {
    paramsStr = paramsStr.replace(new RegExp(item, 'g'), '');
  });
  ['integer', 'string'].forEach(function (item) {
    paramsStr = paramsStr.replace(new RegExp(item, 'g'), ":'".concat(item, "',// "));
  });
  paramsStr = paramsStr.replace(/([a-zA-Z]+:['a-zA-Z]+,\/\/)/g, '\n $1');
  return paramsStr;
}
function createBtn() {
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  var _options$selector = options.selector,
    selector = _options$selector === void 0 ? 'yapiShuctCopy' : _options$selector;
  var btnDom = document.querySelector("#".concat(selector));
  if (btnDom) return btnDom;
  btnDom = document.createElement('div');
  btnDom.innerHTML = "\n  \uF0C5\n  <style>\n    #yapiShuctCopy {\n      width: 20px;\n      height: 35px;\n      opacity: 0.2;\n      background: #0b7d1e;\n      font-weight: 800;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      border-radius: 35px 0 0 35px;\n      cursor: pointer;\n      color: #fff;\n      transition: all 0.2s;\n      font-size: 18px;\n      position: fixed;\n      right: 0;\n      top: 50vh;\n    }\n\n    #yapiShuctCopy:hover {\n      opacity: 0.5;\n      width: 35px;\n    }\n  ";
  btnDom.setAttribute('id', selector);
  btnDom.setAttribute('title', '一键复制');
  // btnDom.style.cssText = ''
  document.body.appendChild(btnDom);
  btnDom.addEventListener('click', function () {
    doCopy(cellecteData());
  });
}
function doCopy(newValue) {
  var selector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'textarea';
  var textarea = document.querySelector("#".concat(selector));
  if (!textarea) {
    textarea = document.createElement('textarea');
    textarea.style.cssText = 'position: absolute;left: -500px;top: -500px;max-width: 50px;opacity: 0;';
    document.body.appendChild(textarea);
  }
  textarea.value = newValue;
  textarea.select();
  setTimeout(function () {
    document.execCommand('Copy');
  }, 200);
}