flash-Zentao

禅道与飞书的bug通信

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         flash-Zentao
// @namespace    https://www.flashmoney.com/
// @version      2.1.1
// @description  禅道与飞书的bug通信
// @grant        GM_addStyle
// @run-at       document-end
// @author       ll
// @match        https://project.flashexpress.pub/bug-*
// @require      https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    $('body')
    .delegate('#submit', 'click', function(event) {
        const href = window.top.location.href

        if(href.indexOf('bug-create') > -1) {
            // 影响版本
            const _require = $('#openedBuild_chosen .search-choice >span').text()
            // 标题
            const _bugTitle = $('.input-control #title').val()
            // 指派给
            const bugUserName = $("#assignedTo_chosen >.chosen-single-with-deselect >span").text()

            if (_require && _bugTitle) {
                sendMessageFeiShu(_bugTitle, bugUserName)
            }
        } else {
            const _bugUserName = $(".picker-selections .picker-selection-text").text()
            const _bugTitle = $('.input-control #title').val() || $('.main-header >h2').children().eq(1).text()

            // 状态置为解决不发送
            const _resolution = $('#resolution_chosen')
            if (_resolution.length) return

            sendMessageFeiShu(_bugTitle, _bugUserName)
        }

        });

    // send飞书
    function sendMessageFeiShu(_title, _name){
        const _emailElement = $(`#assignedTo option:contains(${_name})`)
        const email = _emailElement && _emailElement.val()

        // 白名单:不发送的email
        const whiteEmail = ['yanxuesong']
        if(whiteEmail.includes(email)) return

        // 发送人
        const _sendName = window.top.$("#header #userNav .user-name").text()
        // bug地址
        const href = window.top.location.href

        const query = {
            email: `${email}@flashexpress.com`,
            msg_type: "interactive",
            card: {
                "config": {
                    "update_multi": true,
                    "wide_screen_mode": true
                },
                "header": {
                    "title": {
                        "tag": "plain_text",
                        "content": '🥺【bug】' + _name,
                    },
                    "template": "red"
                },
                "elements": [
                    {
                        "tag": "div",
                        "text": {
                            "tag": "lark_md",
                            "content": `**bug:**[${_title}](${href})`
                        }
                    },
                    {
                        "tag": "div",
                        "text": {
                            "tag": "lark_md",
                            "content": `**发送人:**${_sendName}`
                        }
                    },
                    {
                        "tag": "div",
                        "text": {
                            "tag": "lark_md",
                            "content": `**发送时间:**${formatTimestamp(new Date(), "yyyy-MM-dd hh:mm:ss")}`
                        }
                    },
                    {
                        "tag": "action",
                        "actions": [
                            {
                                "tag": "button",
                                "text": {
                                    "tag":"plain_text",
                                    "content":'禅道bug地址' //指定按钮文本
                                },
                                "url": href,
                                "type": "danger"
                            }
                        ]
                    }
                ]
            }
        }

        let apiUrl = 'https://feishu-api.flashfin.com/send-message'

        // 针对没有邮箱的,url不一样
        // const whiteName = ['W:王雪晴', 'D:段飞扬']
        // if(whiteName.includes(_name)) {
        // apiUrl = 'https://open.feishu.cn/open-apis/bot/v2/hook/2cb384af-73a4-4590-9bf9-31acaf7ddc12'
        // }

        $.ajax({
            url: apiUrl,
            type: "post",
            headers:{'Content-Type':'application/json'},
            dataType: 'json',
            data: JSON.stringify(query),
            success:function(result){
                console.log('send success')
            }
        });
    }

    // 格式化时间
    function formatTimestamp (date, fmt) {
        if (!date) return date
        if (typeof date === 'string') {
            // 解决IOS上无法从dateStr parse 到Date类型问题
            date = date.replace(/-/g, '/')
            date = new Date(date)
        }
        const o = {
            'M+': date.getMonth() + 1, // 月份
            'd+': date.getDate(), // 日
            'h+': date.getHours(), // 小时
            'm+': date.getMinutes(), // 分
            's+': date.getSeconds(), // 秒
            'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
            S: date.getMilliseconds() // 毫秒
        }
        if (/(y+)/.test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
        }
        for (const k in o) {
            if (new RegExp('(' + k + ')').test(fmt)) {
                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
            }
        }
        return fmt
    }
})();