zentao4HAT-2

take on the world!

// ==UserScript==
// @name         zentao4HAT-2
// @namespace    http://www.akuvox.com/
// @version      1.37
// @description  take on the world!
// @author       andy.wang
// @match        http://192.168.10.17/zentao/bug-browse*.html*
// @match        http://192.168.10.17/zentao/bug-view-*.html*
// @match        http://192.168.10.17/zentao/bug-edit-*.html*
// @match        http://192.168.10.17/zentao/story-view-*.html*
// @match        http://192.168.10.17/zentao/build-view-*.html*
// @match        http://192.168.10.17/zentao/testtask-create*.html*
// @match        http://192.168.10.17/zentao/testtask-edit*.html*

// @match        http://zentao.akuvox.local/zentao/bug-browse*.html*
// @match        http://zentao.akuvox.local/zentao/bug-view-*.html*
// @match        http://zentao.akuvox.local/zentao/bug-edit-*.html*
// @match        http://zentao.akuvox.local/zentao/story-view-*.html*
// @match        http://zentao.akuvox.local/zentao/build-view-*.html*
// @match        http://zentao.akuvox.local/zentao/testtask-create*.html*
// @match        http://zentao.akuvox.local/zentao/testtask-edit*.html*

// @grant        none
// @license      none
// ==/UserScript==

(async function () {
    'use strict';

    if (!window.location.href.includes('bug-edit-')) {
        await zentaoAssociate().then(async () => {
            await zentaoScore()
        })
    }
    zentaoScoreDialog()
    if (window.location.href.includes('bug-edit-')) {
        createWriteButton()
    }

})();
async function zentaoAssociate(){
    style()


    if(window.location.href.includes('bug-view-')||window.location.href.includes('story-view-')){
        const bugid = document.getElementById('titlebar').querySelector('strong').textContent
        const post = ()=>{
            const needModels = []
            const resovedModels = []
            const assignedto = userInput.value
            const title = document.getElementById('titlebar').querySelectorAll('strong')[1].textContent
            for(let key in result.allcheck){
                if(result.allcheck[key]){
                    needModels.push(key)
                }
            }
            for(let key in result.solved){
                if(result.solved[key]&&result.allcheck[key]){
                    resovedModels.push(key)
                }
            }
            fetch('http://192.168.10.51:63183/postbugctrl', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({
                    bugid,
                    title,
                    url:window.location.href,
                    needModels:needModels.join(','),
                    resovedModels:resovedModels.join(','),
                    assignedto,
                    finish:arraysEqual(needModels,resovedModels)
                })
            })
        }

        const get = async()=>{
            const sql = `SELECT * FROM modelctrl WHERE bugid = '${bugid}'`
            return new Promise(async (resolve)=>{
                const result = await fetch(`http://192.168.10.51:63183/getbugctrl`, {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json'
                    },
                    body: JSON.stringify({
                        sql
                    })
                })

                try {
                    let res = await result.text()
                    res = res?JSON.parse(res):{}
                    resolve(res)
                } catch (e) {
                    resolve([])
                }
            })
        }

        const change = async()=>{
            const needModels = []
            const resovedModels = []
            const assignedto = userInput.value
            for(let key in result.allcheck){
                if(result.allcheck[key]){
                    needModels.push(key)
                }
            }
            for(let key in result.solved){
                if(result.solved[key]&&result.allcheck[key]){
                    resovedModels.push(key)
                }
            }
            const sql = `UPDATE modelctrl SET  needModels='${needModels.join(',')}',resovedModels='${resovedModels.join(',')}',assignedto='${assignedto}',finish='${arraysEqual(needModels,resovedModels)}' WHERE bugid = '${bugid}'`
            return new Promise(async (resolve)=>{
                const result = await fetch(`http://192.168.10.51:63183/getbugctrl`, {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json'
                    },
                    body: JSON.stringify({
                        sql
                    })
                })

                try {
                    let res = await result.text()
                    res = res?JSON.parse(res):{}
                    resolve(res)
                } catch (e) {
                    resolve([])
                }
            })
        }

        const deviceListy = ['无需','HA','31','41','42','51','251','52','53','61','161','71','81','1001','933','119']

        const container = document.getElementsByClassName('main-side')[0]
        const tabs = document.createElement('div');

        const table = document.createElement('table');

        const tr1 = document.createElement('tr');
        const td11 = document.createElement('th');
        const td12 = document.createElement('td');

        td11.textContent = '需管控机型'
        td11.width="80px"
        let deviceDom = ''
        deviceListy.forEach(item=>{
            deviceDom+=`<label class="device"><input type="checkbox" name="devices" value="${item}"/><span>${item}</span></label>`
        })
        td12.innerHTML = deviceDom

        let checkboxs = td12.querySelectorAll("input[name='devices']")
        let solvedCheckboxs = []
        let userInput

        const sqlresult = await get()

        let isEdit = !!sqlresult.bugid

        let result = {
            allcheck:{},
            solved:{},
        }

        if(sqlresult.needModels){
            const needModelsArray = sqlresult.needModels.split(',')
            deviceListy.forEach(key=>{
                result.allcheck[key] = needModelsArray.includes(key)
            })
            if(sqlresult.resovedModels){
                const resovedModelsArray = sqlresult.resovedModels.split(',')
                needModelsArray.forEach(key=>{
                    result.solved[key] = resovedModelsArray.includes(key)
                })
            }
        }

        let oldReult

        const clickEvent = (index)=>{
            if(result.allcheck[checkboxs[index].value]){
                checkboxs[index].parentNode.style=""
                checkboxs[index].style="display:none"
                checkboxs[index].disabled = true
            }else{
                checkboxs[index].parentNode.style="display:none"
            }

            checkboxs[index].addEventListener('click', function(e) {
                result.allcheck[e.target.value] = e.target.checked
                let solvedDom = ''
                deviceListy.forEach(key=>{
                    if(result.allcheck[key]){
                        solvedDom += `<label class="device"><input type="checkbox" name="solved" value="${key}" ${result.solved[key]?'checked="false"':''}/><span>${key}</span></label>`
                    }
                })

                td22.innerHTML = solvedDom

                solvedCheckboxs = td22.querySelectorAll("input[name='solved']")

                const solvedClickEvent = (sIndex)=>{
                    solvedCheckboxs[sIndex].addEventListener('click', function(se) {
                        result.solved[se.target.value] = se.target.checked
                    })
                }

                for (let i = 0; i < solvedCheckboxs.length; i++) {
                    solvedClickEvent(i)
                }
            });
        }

        for (let i = 0; i < checkboxs.length; i++) {
            clickEvent(i)
        }

        tr1.appendChild(td11);
        tr1.appendChild(td12);
        table.appendChild(tr1)

        const tr2 = document.createElement('tr');
        const td21 = document.createElement('th');
        const td22 = document.createElement('td');

        let solvedDom = ''
        deviceListy.forEach(key=>{
            if(result.allcheck[key]){
                solvedDom += `<label class="device" style="${result.solved[key]?'':'display:none'}"><input type="checkbox" name="solved" value="${key}" style="display:none" disabled="true"/><span>${key}</span></label>`
            }
        })

        td22.innerHTML = solvedDom
        solvedCheckboxs = td22.querySelectorAll("input[name='solved']")

        const solvedClickEvent = (sIndex)=>{
            solvedCheckboxs[sIndex].addEventListener('click', function(se) {
                result.solved[se.target.value] = se.target.checked
            })
        }

        for (let i = 0; i < solvedCheckboxs.length; i++) {
            solvedClickEvent(i)
        }

        td21.textContent = '已解决机型'
        td21.width="80px"

        tr2.appendChild(td21);
        tr2.appendChild(td22);
        table.appendChild(tr2)

        const tr3 = document.createElement('tr');
        const td31 = document.createElement('th');
        const td32 = document.createElement('td');

        td32.innerHTML = `<label class="user"><input type="text" name="user"/></label>`

        userInput = td32.querySelector("input[name='user']")
        userInput.disabled = true

        userInput.value = sqlresult.assignedto||''

        tr3.appendChild(td31);
        tr3.appendChild(td32);
        table.appendChild(tr3)

        //td31.textContent = '负责人'
        //td31.width="80px"

        const button = document.createElement('div');
        const editButton = document.createElement('span');
        const submitButton = document.createElement('span');
        const cancelButton = document.createElement('span');

        submitButton.style="display:none"
        cancelButton.style="display:none"

        button.classList.add('button')

        editButton.textContent = "编辑"
        submitButton.textContent = "提交"
        cancelButton.textContent = "取消"

        editButton.addEventListener('click', function(e) {
            editButton.style="display:none"
            submitButton.style=""
            cancelButton.style=""
            userInput.disabled = true

            oldReult = JSON.parse(JSON.stringify(result))

            for (let i = 0; i < checkboxs.length; i++) {
                checkboxs[i].disabled = false
                checkboxs[i].parentNode.style=""
                checkboxs[i].style=""
                checkboxs[i].checked = result.allcheck[checkboxs[i].value]
            }
            for (let i = 0; i < solvedCheckboxs.length; i++) {
                solvedCheckboxs[i].disabled = false
                solvedCheckboxs[i].parentNode.style=""
                solvedCheckboxs[i].style=""
                solvedCheckboxs[i].checked = result.solved[solvedCheckboxs[i].value]
            }
        })
        submitButton.addEventListener('click', function(e) {
            editButton.style=""
            submitButton.style="display:none"
            cancelButton.style="display:none"
            userInput.disabled = true

            if(isEdit){
                change()
            }else{
                post()
                isEdit = true
            }

            for (let i = 0; i < checkboxs.length; i++) {
                checkboxs[i].disabled = true
                if(result.allcheck[checkboxs[i].value]){
                    checkboxs[i].parentNode.style=""
                    checkboxs[i].style="display:none"
                }else{
                    checkboxs[i].parentNode.style="display:none"
                }
            }
            for (let i = 0; i < solvedCheckboxs.length; i++) {
                solvedCheckboxs[i].disabled = true
                if(result.solved[solvedCheckboxs[i].value]){
                    solvedCheckboxs[i].parentNode.style=""
                    solvedCheckboxs[i].style="display:none"
                }else{
                    solvedCheckboxs[i].parentNode.style="display:none"
                }
            }
        })
        cancelButton.addEventListener('click', function(e) {
            editButton.style=""
            submitButton.style="display:none"
            cancelButton.style="display:none"
            userInput.disabled = true

            result = JSON.parse(JSON.stringify(oldReult))

            for (let i = 0; i < checkboxs.length; i++) {
                checkboxs[i].disabled = true
                if(result.allcheck[checkboxs[i].value]){
                    checkboxs[i].parentNode.style=""
                    checkboxs[i].style="display:none"
                }else{
                    checkboxs[i].parentNode.style="display:none"
                }
            }
            for (let i = 0; i < solvedCheckboxs.length; i++) {
                solvedCheckboxs[i].disabled = true
                if(result.solved[solvedCheckboxs[i].value]){
                    solvedCheckboxs[i].parentNode.style=""
                    solvedCheckboxs[i].style="display:none"
                }else{
                    solvedCheckboxs[i].parentNode.style="display:none"
                }
            }
        })

        button.appendChild(editButton)
        button.appendChild(submitButton)
        button.appendChild(cancelButton)

        tabs.appendChild(button)
        tabs.appendChild(table)

        tabs.classList.add("tabs");
        tabs.classList.add("associate");
        container.appendChild(tabs);
    }else{

        const get = async()=>{
            const sql = `SELECT * FROM modelctrl WHERE finish='false' AND ${modelName==='所有机型'?'1=1':`needModels like '%${modelName}%'`}`
            return new Promise(async (resolve)=>{
                const result = await fetch(`http://192.168.10.51:63183/getbugctrl`, {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json'
                    },
                    body: JSON.stringify({
                        sql
                    })
                })

                try {
                    let res = await result.text()
                    res = res?JSON.parse(res):[]
                    const resTable = Array.isArray(res)?res:[res]
                    resolve(resTable)
                } catch (e) {
                    resolve([])
                }
            })
        }

        const modelTable = document.getElementsByClassName('table-borderless')[0]

        const modelTr = modelTable?modelTable.getElementsByTagName('tr'):[]

        let modelName = ''

        for(let i in modelTr){
            const item = modelTr[i]
            if(item.innerText&&item.innerText.includes('所属机型')){
                modelName=item.children[1].textContent
            }
        }

        const navTabs = document.getElementsByClassName('nav-tabs')[0]
        const tabsLi = document.createElement('li');
        tabsLi.innerHTML ='<a href="#legacyBugs" data-toggle="tab"><i class="icon-bug red"></i>机型遗留问题</a>'
        navTabs&&navTabs.appendChild(tabsLi);

        const tabContent = document.getElementsByClassName('tab-content')[0]
        const tabPane = document.createElement('div');
        tabPane.classList.add('tab-pane')
        tabPane.id = 'legacyBugs'

        const table = document.createElement('table');
        table.classList.add('table','table-hover','table-condensed','table-striped','tablesorter','table-fixed')

        const thead = document.createElement('thead');
        thead.innerHTML =
            '<tr><th class="w-id">ID</th>'+
            '<th>标题</th>'+
            '<th class="w-100px">创建日期</th>'+
            '<th class="w-100px">管控机型</th>'+
            '<th class="w-100px">已解决机型</th></tr>'

        const tbody = document.createElement('tbody');

        const result = await get()
        let tbodyhtml = ''
        result.forEach(item=>{
            tbodyhtml +=
                '<tr class="text-center">'+
                `<td>${item.bugid}</td>`+
                `<td><a href="${item.url}">${item.title}</a></td>`+
                `<td>${item.tdate.split('T')[0]}</td>`+
                `<td>${item.needModels}</td>`+
                `<td>${item.resovedModels}</td></tr>`
        })

        tbody.innerHTML = tbodyhtml

        table.appendChild(thead);
        table.appendChild(tbody);
        tabPane.appendChild(table);
        tabContent&&tabContent.appendChild(tabPane);

    }

    function arraysEqual(arr1, arr2) {
        if (arr1.length !== arr2.length) {
            return false;
        }

        const set1 = new Set(arr1);
        const set2 = new Set(arr2);

        for (const item of set1) {
            if (!set2.has(item)) {
                return false;
            }
        }

        return true;
    }

    function style(){
        const modalStyle = `
        .associate{
           border: 1px solid #ddd;
           padding: 10px 10px;
        }

        .associate th{
           font-weight: normal;
           color: #444;
           padding: 3px 8px 3px 0;
           vertical-align: top;
        }

        .device{
           margin:0 10px 5px 0
        }

        .device span{
           margin-left:5px;
           display: inline-block;
           width: 40px;
        }

        .user input{
           border: none;
           border-bottom: 1px solid #cfcfcf;
           padding: 0;
           width: 200px;
           max-width: 100%;
           outline-color: #00000000;
        }
        .button{
           text-align: right;
           color: #036;
        }
        .button span{
           cursor: pointer;
        }
        .button span:active{
           opacity: .7;
        }
        .button span+span{
           margin-left:5px;
        }
        input:disabled {
           background: #fff;
           border: none;
           color: #141414;
           font-weight: 700;
           padding-left: 5px;
           font-size: 14px;
        }
        input[type=checkbox]{
           margin-top: 0;
           position: relative;
           top: 2px;
        }
   `;

        const styleBlock = document.createElement('style');
        styleBlock.textContent = modalStyle;
        document.head.appendChild(styleBlock);
    }
}

async function zentaoScoreDialog(){

    const resolve = document.getElementsByClassName('icon-bug-resolve')

    let isSubmit = false

    resolve&&resolve.length&&Array.from(resolve).forEach(item=>{
        item.parentNode.addEventListener('click', function() {
            isSubmit = true
        });
    })

    // 配置观察器以监视弹窗的添加,然后操作
    var observer = new MutationObserver(function(mutationsList, observer) {
        for (var mutation of mutationsList) {
            if (mutation.addedNodes) {
                for (var addedNode of mutation.addedNodes) {
                    if (addedNode.id === "ajaxModal") {
                        observer.disconnect();
                        iframeInit()
                        break;
                    }
                }
            }
        }
    });
    observer.observe(document.documentElement, { childList: true, subtree: true });


    function iframeInit(){
        document.getElementById("modalIframe").addEventListener("load", function() {
            const iframe = document.getElementById("modalIframe").contentWindow.document
            style(iframe)
            // 配置观察器以监视子节点button的添加,然后操作
            var observer = new MutationObserver(function(mutationsList) {
                for (var mutation of mutationsList) {
                    if (mutation.type === "childList" && mutation.addedNodes.length > 0) {
                        const button = iframe.getElementById("submit")
                        if (button&&isSubmit) {
                            isSubmit = false
                            setIframe()
                            observer.disconnect();
                        }
                        break;
                    }
                }
            });

            observer.observe(iframe, { childList: true, subtree: true });
        });

    }

    function setIframe(){
        const iframe = document.getElementById("modalIframe").contentWindow.document
        const commentTr = iframe.getElementById("comment").parentNode.parentNode
        const nextSibling = commentTr.nextSibling;
        const parent = commentTr.parentNode

        const buttonElement = document.createElement("tr");

        const buttonThElement = document.createElement("th");
        buttonThElement.textContent = "自动关联git链接";

        const buttonTdElement = document.createElement("td");
        const gitButton = document.createElement("button");

        gitButton.textContent = "关联";
        gitButton.classList.add("btn");
        gitButton.classList.add("btn-primary");

        gitButton.addEventListener('click', async(event)=>{
            event.preventDefault()
            const gitUrl = await getGitUrl()
            if(gitUrl?.result?.length){
                const iframe = document.getElementById("modalIframe").contentWindow.document
                const iframeDocument = iframe.querySelector('.ke-edit').childNodes[0].contentWindow.document
                const iframDom = iframeDocument.querySelector('body').innerHTML
                const gitText = gitUrl.result.map(item=>`<p><a href="${item}">${item}</a></p>`).join('')
                iframeDocument.querySelector('body').innerHTML = iframDom.replace('<p>请在此处描述该bug修复时提交&amp;合并的分支及revision号</p>',gitText)
            }else{
                alert('id未查询到git合并记录!')
            }
        })

        buttonTdElement.appendChild(gitButton);

        buttonElement.appendChild(buttonThElement);
        buttonElement.appendChild(buttonTdElement);

        if (nextSibling) {
            parent.insertBefore(buttonElement, nextSibling);
        } else {
            parent.appendChild(buttonElement);
        }

        const submitButton = iframe.getElementById("submit")

        submitButton&&submitButton.addEventListener('click', function() {
            const titlebarElement = document.getElementById("titlebar");

            //const inputElement = iframe.getElementById("bugTime");
            const repair_time = 0;

            const valueElement = titlebarElement.querySelector(".prefix strong");

            const radioElements = iframe.getElementsByName("bug")

            let bugid = valueElement.innerText
            let type = ''
            let title = ''
            let score = ''

            parent.removeChild(buttonElement)
        });
    }

    const posturl = async(bugid, type, title, score, repair_time)=>{
        return new Promise(async (resolve)=>{
            const result = await fetch(`http://192.168.10.51:63183/postscoreurl`, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({
                    bugid,
                    type,
                    title,
                    score,
                    repair_time
                })
            })
            })
    }

    const getGitUrl = async()=>{
        return new Promise(async (resolve)=>{
            const id = document.querySelector('#titlebar .heading .prefix strong').textContent
            const result = await fetch(`http://192.168.10.51:51081/api/gitlab/getGitUrl?id=${id}`, {
                method: 'GET',
            })

            try {
                let res = await result.json()
                resolve(res)
            } catch (e) {
                resolve('')
            }
        })
    }

    function style(iframeDocument){
        const modalStyle = `
        .bug-label {
          margin-left:15px
        }
        .bug-label input {
          margin-right:5px;
          position:relative;
          top:2px
        }
        .bug-list {
          margin-top:10px
        }
        .bug-select {
          width:100px
        }
        .bug-time{
          margin:10px
        }
   `;

        const styleBlock = iframeDocument.createElement('style');
        styleBlock.textContent = modalStyle;
        iframeDocument.head.appendChild(styleBlock);
    }
}

async function zentaoScore(){
    const titlebarElement = document.getElementById("titlebar");
    const valueElement = titlebarElement.querySelector(".prefix strong");
    const bugid = valueElement.innerText

    const get = ()=>{
        return new Promise(async (resolve)=>{
            const result = await fetch(`http://192.168.10.51:63183/getscoreurl?bugid=${bugid}`, {
                method: 'GET',
            })

            try {
                let res = await result.text()
                res = res?JSON.parse(res):{type:0,repair_time:''}
                const resTable = Array.isArray(res)?res:[res]
                resolve(resTable.length?resTable:[{type:0,repair_time:''}])
            } catch (e) {
                resolve([{type:0,repair_time:''}])
            }
        })
    }

    const result = await get()

    const tabs = document.createElement('div');
    const container = document.getElementsByClassName('main-side')[0]
    style()
    /*
    tabs.style="border:1px solid #ddd;padding:10px"
    tabs.innerHTML=`
        <div style="text-align: right;color: #036;"><span class="scoreButton" style="cursor: pointer;" id="bugSubmit">提交</span></div>
        <div>
        BUG原因:<br>
         <label class="bug-label" for="bug1"><input id="bug1" type="radio" name="bug" value="0" ${result[0].type===0 ? "checked='checked'" : "" } />无特殊原因</label><br>
        <label class="bug-label" for="bug2"><input id="bug2" type="radio" name="bug" value="1" ${result[0].type===1 ? "checked='checked'" : "" } />需求设计问题</label><br>
        <label class="bug-label" for="bug3"><input id="bug3" type="radio" name="bug" value="2" ${result[0].type===2 ? "checked='checked'" : "" } />上个版本已存在</label><br>
        <label class="bug-label" for="bug4"><input id="bug4" type="radio" name="bug" value="3" ${result[0].type===3 ? "checked='checked'" : "" } />无自测条件</label><br>
        <label class="bug-label" for="bug5"><input id="bug5" type="radio" name="bug" value="4" ${result[0].type===4 ? "checked='checked'" : "" } />外部因素</label><br>
        <label class="bug-label" for="bug6"><input id="bug6" type="radio" name="bug" value="5" ${result[0].type===5 ? "checked='checked'" : "" } />无测试用例</label><br>
        <label class="bug-label" for="bug7"><input id="bug7" type="radio" name="bug" value="6" ${result[0].type===6 ? "checked='checked'" : "" } />已知技术风险点</label><br>
        <label class="bug-label" for="bug8"><input id="bug8" type="radio" name="bug" value="7" ${result[0].type===7 ? "checked='checked'" : "" } />重复bug</label>

        </div>
        <div id="list1" class="bug-list">
        BUG系数:
        <select id="select1" class="bug-select">
            <option value="0">0</option>
    <option value="0.1">0.1</option>
    <option value="0.2">0.2</option>
    <option value="0.3">0.3</option>
    <option value="0.4">0.4</option>
    <option value="0.5">0.5</option>
    </select>
    </div>
    `

    container.appendChild(tabs);

    //const inputElement = document.getElementById("bugTime");
    //inputElement.value = result[0].repair_time

    const bug1 = document.querySelector('#bug1')
    const bug2 = document.querySelector('#bug2')
    const bug3 = document.querySelector('#bug3')
    const bug4 = document.querySelector('#bug4')
    const bug5 = document.querySelector('#bug5')
    const bug6 = document.querySelector('#bug6')
    const bug7 = document.querySelector('#bug7')
    const bug8 = document.querySelector('#bug8')
    const list1 = document.querySelector('#list1')
    const select1 = document.querySelector('#select1')

    switch(result[0].type){
        case 0:
            list1.style="display:none"
            break
        default:
            list1.style=""
            select1.selectedIndex = result[0].score*10
            break

    }

    bug1.addEventListener('click', function() {
        list1.style="display:none"
    });
    bug2.addEventListener('click', function() {
        list1.style=""
        select1.selectedIndex = 0
    });
    bug3.addEventListener('click', function() {
        list1.style=""
        select1.selectedIndex = 0
    });
    bug4.addEventListener('click', function() {
        list1.style=""
        select1.selectedIndex = 0
    });
    bug5.addEventListener('click', function() {
        list1.style=""
        select1.selectedIndex = 0
    });
    bug6.addEventListener('click', function() {
        list1.style=""
        select1.selectedIndex = 0
    });
    bug7.addEventListener('click', function() {
        list1.style=""
        select1.selectedIndex = 0
    });
    bug8.addEventListener('click', function() {
        list1.style=""
        select1.selectedIndex = 0
    });

    const submitButton = document.getElementById("bugSubmit")


    submitButton&&submitButton.addEventListener('click', function() {


        const radioElements = document.getElementsByName("bug")

        //const inputElement = document.getElementById("bugTime");
        const repair_time = 0;

        let type = ''
        let title = ''
        let score = ''

        for (var i = 0; i < radioElements.length; i++) {
            if (radioElements[i].checked) {
                type = radioElements[i].value;
                switch(type){
                    case '0':
                        title='无特殊原因'
                        score=1
                        break
                    case '1':
                        title='需求设计问题'
                        score=select1.value
                        break
                    case '2':
                        title='上个版本已存在'
                        score=select1.value
                        break
                    case '3':
                        title='无自测条件'
                        score=select1.value
                        break
                    case '4':
                        title='外部因素'
                        score=select1.value
                        break
                    case '5':
                        title='无测试用例'
                        score=select1.value
                        break
                    case '6':
                        title='已知技术风险点'
                        score=select1.value
                        break
                    case '7':
                        title='重复bug'
                        score=select1.value
                        break
                    default:

                }

            }
        }

        posturl(bugid, type, title, score, repair_time)
    });
*/
    const button = document.createElement('div');

    const posturl = async(bugid, type, title, score, repair_time)=>{
        return new Promise(async (resolve)=>{
            const result = await fetch(`http://192.168.10.51:63183/postscoreurl`, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({
                    bugid,
                    type,
                    title,
                    score,
                    repair_time
                })
            })
             const operator = document.getElementById('userMenu').children[0].text.trim()
             fetch('http://192.168.10.51:63183/postzentao', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({
                    bugid,
                    username: '外部',
                    operator
                })
            })
            document.getElementById('distributeName').innerHTML = '外部'
            alert('提交成功')
        })
    }
    function style(){
        const modalStyle = `
        .bug-label {
          margin-left:15px
        }
        .bug-label input {
          margin-right:5px;
          position:relative;
          top:2px
        }
        .bug-list {
          margin-top:10px
        }
        .bug-select {
          width:100px
        }
        .scoreButton:active{
          opacity: 0.7;
        }
        .bug-time{
          margin:10px
        }
   `;

        const styleBlock = document.createElement('style');
        styleBlock.textContent = modalStyle;
        document.head.appendChild(styleBlock);
    }


}
/**
 * 创建快捷备注
 */
async function createWriteButton() {
    let nowDom = {}
    const fileArray = document.getElementsByTagName('fieldset')
    Object.keys(fileArray).forEach(v => {
        if (fileArray[v].innerText.includes('备注') && fileArray[v].getElementsByClassName('form-group').length) {
            nowDom = fileArray[v]
        }
    })
    const container = document.getElementsByClassName('main-side')[0]
    const div3 = document.createElement("div")
    div3.style = "border:1px solid #ccc;padding:10px;width: 340px;margin-top: 10px;"
    container.appendChild(div3);
    const button1 = document.createElement("div")
    button1.innerHTML = `
    <span id="aku-button-write" style="padding: 5px;border: 1px solid;cursor: pointer;background: aliceblue;">非研发问题</span> <span id="aku-some-write" style="padding: 5px;border: 1px solid;cursor: pointer;background: aliceblue;">重复bug</span>`
    div3.appendChild(button1);
    // 给予点击按钮事件
    const akuButtonWrite = document.getElementById('aku-button-write')
    const akuSomeWrite = document.getElementById('aku-some-write')
    akuButtonWrite.addEventListener('click', function (e) {
        nowDom.getElementsByClassName('ke-edit-iframe')[0].contentDocument.body.nextSibling.innerHTML = ''
        nowDom.getElementsByClassName('ke-edit-iframe')[0].contentDocument.activeElement.innerHTML = '非研发问题,严重等级降为P2'
    })
    akuSomeWrite.addEventListener('click', function (e) {
        nowDom.getElementsByClassName('ke-edit-iframe')[0].contentDocument.body.nextSibling.innerHTML = ''
        nowDom.getElementsByClassName('ke-edit-iframe')[0].contentDocument.activeElement.innerHTML = '重复bug,严重程度降为P2'
   })
}