生成上线周知

try to take over the world!

目前为 2018-11-09 提交的版本。查看 最新版本

// ==UserScript==
// @name         生成上线周知
// @namespace    http://tampermonkey.net/
// @version      0.3
// @description  try to take over the world!
// @author       pujiaxun
// @match        https://km.sankuai.com/*
// @grant        GM_setClipboard
// ==/UserScript==

const BUTTON_ID = "SXZZ-GenDeployNoticeButton";

(function() {
  "use strict";
  window.addEventListener(
    "load",
    function(e) {
      setTimeout(init, 2000);
    },
    true
  );
})();

function observeIt() {
  const targetNode = document.getElementById("page-wrapper");
  const config = { childList: true, characterData: true };
  const observer = new MutationObserver(mutationList => {
    refresh();
  });

  observer.observe(targetNode, config);
}

/**
 * 初始化,添加页面切换的observer,并refresh按钮
 */
function init() {
  observeIt();
  refresh();
}

/**
 * 清除按钮,并判断是否需要添加按钮
 */
function refresh() {
  flush();
  if (hasDeployPlan()) {
    create();
  }
}

/**
 * 清除按钮
 */
function flush() {
  const existBtn = document.getElementById(BUTTON_ID);
  if (existBtn) {
    existBtn.parentNode.removeChild(existBtn);
  }
}

/**
 * 插入一个按钮,用来一键生成上线周知
 */
function create() {
  const d = document.createElement("div");
  d.innerHTML = `<button style="position: fixed; right: 40px; bottom: 150px" class="ant-btn ant-btn-danger" id="${BUTTON_ID}"><span>生成前端上线周知</span></button>`;

  d.addEventListener("click", genDeployNotice);
  document.body.appendChild(d);
}

/**
 * 生成上线周知,并复制到系统剪贴板
 */
function genDeployNotice() {
  const textList = parseHtml();
  const noticeItems = [
    `【上线项目】:${textList[1]}`,
    `【上线内容】:${textList[0]}`,
    `【上线时间】:${textList[6]}`,
    `【影响范围】:${textList[2]}`,
    `【上线计划】:${location.href}`
  ];
  const result = noticeItems.join("\n");
  GM_setClipboard(result, { type: "text" });
}

/**
 * 判断是否为上线方案页面
 */
function hasDeployPlan() {
  return !!document.querySelector('a[title="境外度假终端上线流程规范"]');
}

/**
 * 解析HTML,获取表格最后一行的所有单元格
 */
function parseHtml() {
  const trs = document.querySelectorAll("table tbody tr");
  const tds = trs[trs.length - 1].querySelectorAll("td");
  const tdContentList = Array.map(tds, td => td.textContent);
  return tdContentList;
}

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址