YapiCopy

Yapi接口数据一键复制

Mint 2023.07.28.. Lásd a legutóbbi verzió

// ==UserScript==
// @name         YapiCopy
// @namespace    http://tampermonkey.net/
// @version      0.0.7
// @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==


function cellecteData() {

  let paramsInnerText = document.querySelectorAll('table tbody')[1].innerText || ''
  let paramsStr = formatParamsStr(paramsInnerText)

  let desc = document.querySelector('.colName').innerText || ''

  let pageUrl = location.href

  let values = document.querySelectorAll('.colValue')
  let method = values[3]?.innerText.toLocaleLowerCase() || ''
  let apiUrl = values[4]?.innerText || ''

  let template = `
/* // 参数说明
 let  params = { ${paramsStr}
  }
*/

/**
* @description ${desc}
* @see ${pageUrl}
* @param { params } params
*/
export function ${apiUrl.replace(/^.*\//,'')} (params) {
  return http.${method} ('${apiUrl}',params)
}`
  return template
}

function formatParamsStr(paramsStr) {
  ;['\n','非必须','必须','format: int32','\t'].forEach(item => {
    paramsStr = paramsStr.replace(new RegExp(item,'g'),'')
  })
    ;['integer','string'].forEach(item => {
      paramsStr = paramsStr.replace(new RegExp(item,'g'),`:'${item}',// `)
    })

  paramsStr = paramsStr.replace(/([a-zA-Z]+:['a-zA-Z]+,\/\/)/g,'\n $1')
  return paramsStr
}
function createBtn(options = {}) {
  let { selector = 'yapiShuctCopy' } = options
  let btnDom = document.querySelector(`#${selector}`)
  if (btnDom) return btnDom
  btnDom = document.createElement('div')
  btnDom.innerHTML = `
  \uf0c5
  <style>
    #yapiShuctCopy {
      width: 20px;
      height: 35px;
      opacity: 0.2;
      background: #0b7d1e;
      font-weight: 800;
      display: flex;
      align-items: center;
      justify-content: center;
      border-radius: 35px 0 0 35px;
      cursor: pointer;
      color: #fff;
      transition: all 0.2s;
      font-size: 18px;
      position: fixed;
      right: 0;
      top: 70px;
    }

    #yapiShuctCopy:hover {
      opacity: 0.5;
      width: 35px;
    }
  `
  btnDom.setAttribute('id',selector)
  btnDom.setAttribute('title','一键复制')
  // btnDom.style.cssText = ''
  document.body.appendChild(btnDom)
  btnDom.addEventListener('click',() => {
    doCopy(cellecteData())
  })
}

createBtn()


function doCopy(newValue,selector = 'textarea') {
  let textarea = document.querySelector(`#${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(() => {
    document.execCommand('Copy')
  },200)
}