预警制作辅助

预警发布增加模板文字功能。

// ==UserScript==
// @name         预警制作辅助
// @namespace    https://greasyfork.org/zh-CN/scripts/524381
// @version      3.1
// @description  预警发布增加模板文字功能。
// @author       Pysoer
// @match        http://10.203.8.35:50001/warnMake/make/*
// @match        http://10.203.8.35:60004/warnMake/make/*
// @match        http://10.203.8.35:50001/Zdz/*
// @license      GPL-3.0 License
// ==/UserScript==

(function() {
    var url=window.location.href.toLowerCase();
    function initTools()
    {
        if($("input[value='light']").length <= 0)
        {
             console.log("等待加载");
             setTimeout(function () { initTools(); }, 10000);
        }
        else
        {
            $("input[value='light']").click(); //切换地图为浅色
            $("li[data-type='cordon']").find("label").click();//去掉三区
            $("li[data-type='name']").find("label").click();//去掉站名
            $("li[data-type='dot']").find("label").click();//去掉站点
            $("li[data-type='townName']:first").find("label").click();//加载乡镇名
            //$("input[data-type='ws']").parent("div").click();//去掉危险天气
            //$("input[data-type='almtSign']").parent("div").click();//去掉预警信号
            $("input[data-type='rainWarning']").parent("div").click();//去掉雨量报警
            //$("li[data-type='12hjrain']").click();//加载12小时雨量
            //TODO:加载单站雷达图
        }
    }
    function formatDate(fmt, date) {
        let ret;
        let opt = {
            "Y+": date.getFullYear().toString(),
            "m+": (date.getMonth() + 1).toString(),
            "d+": date.getDate().toString(),
            "H+": date.getHours().toString(),
            "M+": date.getMinutes().toString(),
            "S+": date.getSeconds().toString()
        };
        for (let k in opt) {
            ret = new RegExp("(" + k + ")").exec(fmt);
            if (ret) {
                fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
            };
        };
        return fmt;
    }
    function saveTextAsFile() {
        var textToWrite = $('#textImport').val();
        var textFileAsBlob = new Blob([ textToWrite ],{ type: 'text/plain' });
        var fileNameToSaveAs = "预警信号模板.txt";

        var downloadLink = document.createElement("a");
        downloadLink.download = fileNameToSaveAs;
        downloadLink.innerHTML = "Download File";
        if (window.webkitURL != null) {
            // Chrome allows the link to be clicked without actually adding it to the DOM.
            downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
        } else {
            // Firefox requires the link to be added to the DOM before it can be clicked.
            downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
            downloadLink.onclick = destroyClickedElement;
            downloadLink.style.display = "none";
            document.body.appendChild(downloadLink);
        }

        downloadLink.click();
    }
    function destroyClickedElement(event) {
        // remove the link from the DOM
        document.body.removeChild(event.target);
    }
    if(url.indexOf("zdz")!=-1){
        setTimeout(function () { initTools(); }, 10000);
    }
    else if(url.indexOf("warnmake")!=-1){
         console.log("warnmake");
        //$("#i-improt").css("display","none");
        var btStr='<li data-type="myAlarm" id="myAlarm" style="width:120px;background-color: brown;" >匹配模板</li>';
        var btStr1='<input type="file" id="myImport"  style="display:none;" />';
        var btStr2='<li data-type="myAlarm" id="openEdit" style="width:120px;" >修改模板</li>';
        $("#i-improt").after(btStr);
        $("#i-improt").after(btStr1);
        $("#i-improt").after(btStr2);
        var editPanel='<div id="editpanel" style="z-index:9999;width:1000px;height:800px;font-size:16px;line-height:38px;background-color:#e1effd;position:absolute;margin-left:150px;margin-top:10px;border:#ccc solid 1px;font-weight: bold;display:none;color:#000"><i id="i-edit-bg" class="u-blue-bg" style="background: rgb(218, 196, 3);"></i>修改模板'+
            '<input type="button" id="saveImport" value="保存模板" style="display: inline-block;height: 38px;line-height: 38px; padding: 0 18px; background-color: #2584f3;color: #fff;white-space: nowrap;text-align: center;font-size: 14px;border: none;border-radius: 2px;cursor: pointer;margin-top:10px;margin-left:20px;">'+
             '<button id="myImportLi" style="display: inline-block;height: 38px;line-height: 38px; padding: 0 18px; background-color: #2584f3;color: #fff;white-space: nowrap;text-align: center;font-size: 14px;border: none;border-radius: 2px;cursor: pointer;margin-top:10px;margin-left:20px;">导入</button>'+
             '<input type="button" id="exportImport" value="导出" style="display: inline-block;height: 38px;line-height: 38px; padding: 0 18px; background-color: #2584f3;color: #fff;white-space: nowrap;text-align: center;font-size: 14px;border: none;border-radius: 2px;cursor: pointer;margin-top:10px;margin-left:20px;">'+
             '<input type="button" id="closeImport" value="关闭窗口" style="display: inline-block;height: 38px;line-height: 38px; padding: 0 18px; background-color: #FF5722;color: #fff;white-space: nowrap;text-align: center;font-size: 14px;border: none;border-radius: 2px;cursor: pointer;margin-top:10px;margin-left:20px;">'+
             '&nbsp;&nbsp;&nbsp;[地区]会替换为“我县xx、xx等乡镇”、“我市xx、xx等地”<br><p style="color:red">清除浏览器缓存后,模板会恢复到默认状态,请导出存到本地再重新导入!!!</p><textarea id="textImport" style="width:998px;height:750px;margin-top:10px;color:#000" ></textarea>'+
            '</div>';
        $("#i-list-panel").after(editPanel);
    }
    var levelsCHN=["蓝色","黄色","橙色","红色"];
    var SSMZ="土家族|仡佬族|布依族|侗族|自治|彝族|回族|水族|苗族|毛南族|白族|满族|蒙古族|壮族|瑶族|街道办|街道办事处|街道|镇|乡";
    function getAlarmText()
    {
        console.log("匹配预警");
        var alarmType=$("#i-edit-label").text();
        var senderName=$("#i-company").val().replace(/气象局/g,"气象台");
        if(senderName=="")return;
        var ceshi="";
        if(url.indexOf("60004")!=-1)ceshi="【测试预警】";
        var woxian="我"+senderName.replace(/气象局|气象台/g,"").substr(-1);
        var isuTime=new Date(($("#i-issueTime").val()).replace("-","/")+":00");
        var isuTimeCHN=formatDate("m月d日H时M分",isuTime);
        var countyStr="";
        var townStr="";
        var countys=[];
        var ttl=$("#i-almt-title").val();
        var fbxxyjxh="发布"+alarmType+"预警信号:"
        if(ttl.indexOf("解除")!==-1){
            var desc=ceshi+senderName+isuTimeCHN+"解除"+alarmType+"预警信号。";
            console.log(desc);
            //$("#i-almt-desc").val(desc);
        }else{
            if(ttl.indexOf("继续")!==-1){
              fbxxyjxh="继续发布"+alarmType+"预警信号:";
              var cur=$("#i-cur-img").attr("data-ws");
              var oper=$("#i-oper-img").attr("data-ws");
              var level1=cur.split("-")[1];
              var level2=oper.split("-")[1];
              var level_index1=$.inArray(level1,levelsCHN);
              var level_index2=$.inArray(level2,levelsCHN);
              var shengji="升级";
              if(level_index1>level_index2)shengji="降级";
              if(level1!=level2){
                  var yj1=cur.replace("-","");
                  var yj2=oper.replace("-","");
                  fbxxyjxh="将"+yj1+"预警"+shengji+"为"+yj2+"预警信号:";
              }
            }
            var storage=window.localStorage;
            var AlarmTempla=storage.getItem("AlarmTempla");
            if(AlarmTempla !== null ){
                var affectArea=app.editor.getLassoNameData();
                console.log(affectArea);
                if(affectArea !== null && affectArea.length>0){
                    var maxTownCount=10;
                    for(var p=0;p<affectArea.length;p++){
                        if(maxTownCount>0)
                        {
                            var townName=$.trim(affectArea[p].town);
                            if(townName.substr(-1)=="镇" || townName.substr(-1)=="乡")townName=townName.substr(0,townName.length-1);
                            if(townName!="")townStr=townStr+townName.replace(new RegExp(SSMZ,"g"),"")+"、";
                        }
                        maxTownCount--;
                        if(countys.indexOf(affectArea[p].county)==-1)
                        {
                            countys.push(affectArea[p].county);
                            countyStr=countyStr+affectArea[p].county+"、";
                        }
                    }
                    console.log(townStr);
                    console.log(countys);
                    if(countys.length>1 || global.user.level!=4)
                    {
                        countyStr=countyStr.substr(0,countyStr.length-1);
                        woxian=woxian+countyStr+"等地";
                    }else{
                        townStr=townStr.substr(0,townStr.length-1);
                        woxian=woxian+townStr+"等乡镇";
                    }
                }
                var lines=AlarmTempla.split(/[\s\n]/);
                var AlarmText="";
                $.each(lines,function(i,val){
                    if(val.indexOf("=")!=-1){
                        var line=val.split("=");
                        if(line[0]==alarmType){
                            AlarmText=line[1].replace("[地区]",woxian);
                            return false;
                        }
                    }
                });
                var desc1=ceshi+senderName+isuTimeCHN+fbxxyjxh+AlarmText;
                console.log(desc1);
                if(AlarmText==""){myalert("还未查询到预警模板,请先上传模板。");}
                else{$("#i-almt-desc").val(desc1);$("#i-almt-sms").val(desc1);}
            }else
            {
                 myalert("请先上传预警模板");
            }
        }

    }
    $("#myAlarm").click(function(){
       getAlarmText();
    });
    $("#map").mouseup(function(){
       // getAlarmText();
    });
    $("#myImportLi").click(function () {
        //myalert("模板路径为d:/swan/AddIns/SWAN_LEFT_CONTROL/预警信号模板.ini");
        return $("#myImport").click();
    });
    $("#openEdit").click(function () {
       $("#editpanel").css("display","block");
       var AlarmTempla=window.localStorage.getItem("AlarmTempla");
       if(AlarmTempla==null)AlarmTempla="暴雨黄色=预计未来6小时[地区]降雨量将达50毫米以上且仍将持续,请注意防范。\n暴雨橙色=预计未来3小时[地区]降雨量将达100毫米以上且仍将持续,引发山洪、滑坡、泥石流等风险很高,请加强防范。\n暴雨红色=预计未来3小时[地区]降雨量将达150毫米以上且仍将持续,引发山洪、滑坡、泥石流等风险极高,请加强防范。\n\n冰雹橙色=预计未来3小时[地区]将出现冰雹天气,并可能造成雹灾,请注意防范。\n冰雹红色=预计未来3小时[地区]将出现冰雹天气,并可能造成重雹灾,请注意防范。\n\n大风蓝色=预计未来24小时[地区]将受大风影响,平均风力可达6级,阵风7级并可能持续,建议停止高空作业和水上作业,其他相关行业和个人也要注意防范。\n大风黄色=预计未来12小时[地区]将受大风影响,平均风力可达8级,阵风9级并可能持续,建议停止高空作业,相关行业请注意防范。\n大风橙色=预计未来6小时[地区]将受大风影响,平均风力可达10级,阵风11级并可能持续,建议停止高空作业,相关行业请注意防范。\n大风红色=无此预警。\n\n大雾黄色=目前我县高速以及高山乡镇部分路段已出现能见度小于500米的大雾天气,对交通运输有一定影响,未来12小时将持续,请注意防范。\n大雾橙色=预计未来6小时我县高速以及高山乡镇部分路段将出现能见度小于200米的大雾天气,对交通运输有较大影响,请注意防范。\n大雾红色=预计未来2小时我县高速以及高山乡镇部分路段将出现能见度小于50米的浓雾天气,对交通运输有很大影响,请注意防范。\n\n低温凝冻黄色=预计未来24小时[地区]将出现低温凝冻天气,道路、导线等将出现结冰和覆冰现象,对交通有一定影响,请注意防范。\n低温凝冻橙色=预计未来24小时[地区]将出现低温凝冻天气,道路、导线等将出现较重结冰和覆冰现象,对交通有较大影响,请注意防范。\n低温凝冻红色=预计未来24小时[地区]将出现低温凝冻天气,道路、导线等将出现严重结冰和覆冰现象,对交通有很大影响,请注意防范。\n\n暴雪蓝色=预计未来12小时[地区]降雪量将达4毫米以上且降雪持续,对交通和农业有一定影响,请注意防范。\n暴雪黄色=预计未来12小时[地区]降雪量将达6毫米以上且降雪持续,对交通和农业有一定影响,请注意防范。\n暴雪橙色=预计未来6小时[地区]降雪量将达10毫米以上且降雪持续,对交通和农业有较大影响,请注意防范。\n暴雪红色=预计未来6小时[地区]降雪量将达15毫米以上且降雪持续,对交通和农业有很大影响,请注意防范。\n\n干旱橙色=预计未来一周[地区]综合气象干旱指数达到重旱(气象干旱为25~50年一遇),有40%以上的农作物受旱,请注意防范。\n干旱红色=预计未来一周[地区]综合气象干旱指数达到特旱(气象干旱为50年以上一遇),有60%以上的农作物受旱,请注意防范。\n\n高温黄色=无此预警。\n高温橙色=预计未来24小时[地区]等河谷一带乡镇最高气温将升至37℃以上,有关部门和单位按照职责落实防暑降温保障措施;尽量避免在高温时段进行户外活动,高温条件下作业的人员应当缩短连续工作时间;同时,对老、弱、病、幼人群提供防暑降温指导,并采取必要的防护措施;有关部门和单位应当注意防范因用电量过高,以及电线、变压器等电力负载过大而引发的火灾。\n高温红色=预计未来24小时[地区]等河谷一带乡镇最高气温将升至40℃以上,有关部门和单位按照职责落实防暑降温保障措施;尽量避免在高温时段进行户外活动,高温条件下作业的人员应当缩短连续工作时间;同时,对老、弱、病、幼人群提供防暑降温指导,并采取必要的防护措施;有关部门和单位应当注意防范因用电量过高,以及电线、变压器等电力负载过大而引发的火灾。\n\n寒潮蓝色=预计未来24小时[地区]最低气温将要下降8℃且降至4℃以下,请注意防范对农业、交通等行业的不利影响。\n寒潮黄色=预计未来24小时[地区]最低气温将要下降10℃且降至4℃以下,请注意防范对农业、交通等行业的不利影响。\n寒潮橙色=预计未来24小时[地区]最低气温将要下降12℃且降至0℃以下,请注意防范对农业、交通等行业的不利影响。\n寒潮红色=预计未来24小时[地区]最低气温将要下降16℃且降至0℃以下,请注意防范对农业、交通等行业的不利影响。\n\n雷电黄色=预计未来3小时[地区]将出现雷雨天气,雷雨中可能伴有短时强降水、冰雹、大风等强对流天气,建议停止高空作业和户外作业,请相关行业和个人注意防范。\n雷电橙色=预计未来3小时[地区]将出现雷雨天气,雷雨中可能伴有短时强降水、大风、冰雹等强对流天气,建议停止高空作业和户外作业,请相关行业和个人注意防范。\n雷电红色=无此预警。\n\n雷雨强风黄色=预计未来3小时[地区]将出现雷雨天气,并伴有8级以上阵风和强雷电,请注意防范。\n雷雨强风橙色=预计未来3小时[地区]将出现雷雨天气,并伴有10级以上阵风和强雷电,请注意防范。\n雷雨强风红色=预计未来3小时[地区]将出现雷雨天气,并伴有12级以上阵风和强雷电,请注意防范。\n\n霜冻蓝色=预计未来24小时城区、仙源、双龙、大坡等高海拔乡镇将有霜冻出现,积水路段可能会出现道路结冰,对农业和交通有不利影响,请注意防范。\n霜冻黄色=预计未来24小时城区、仙源、双龙、大坡等高海拔乡镇最低气温将降到零下3℃以下,有霜冻出现,积水路段可能会出现道路结冰,对农业和交通有不利影响,请注意防范。\n霜冻橙色=无此预警。\n\n台风蓝色=预计未来24小时[地区]将受热带气旋影响,平均风力达6-7级,阵风8-9级,并可能持续,请注意防范。\n台风黄色=预计未来24小时[地区]将受热带气旋影响,平均风力达8-9级,阵风10-11级,并可能持续,请注意防范。\n台风橙色=预计未来12小时[地区]将受热带气旋影响,平均风力达10-11级,阵风12-13级,并可能持续,请注意防范。\n台风红色=预计未来6小时[地区]将受热带气旋影响,平均风力达12-14级,阵风14-16级,并可能持续,请注意防范。\n\n地质灾害气象风险黄色=预计今天夜间到明天[地区]中部、西部乡镇有强降雨天气,地质灾害气象风险较高,请注意防范。\n地质灾害气象风险橙色=受强降雨天气影响,预计未来24小时[地区]地质灾害气象风险高,请注意防范。\n\n山洪灾害黄色=受强降雨天气影响,预计今天夜间到明天[地区]发生山洪灾害气象风险等级较高,请注意防范。\n山洪灾害橙色=受强降雨天气影响,预计未来24小时[地区]发生山洪灾害气象风险等级高,请注意防范。\n\n内涝黄色=受强降雨天气影响,预计未来24小时[地区]地势低洼路段城镇内涝风险较高,请注意防范。\n内涝橙色=受强降雨天气影响,预计未来24小时[地区]地势低洼路段城镇内涝风险高,请注意防范。\n\n森林火险气象黄色=预计未来3天[地区]以晴天为主,气温高,湿度低,林内可燃物易点燃,极易蔓延,危险较高。严禁携带火种进入林区,严禁一切野外用火。请各乡镇(街道)、相关部门做好防范措施和应急扑救准备。\n森林火险气象橙色=预计未来3天[地区]以晴天为主,气温高,湿度低,林内可燃物易点燃,极易蔓延,危险很高。严禁携带火种进入林区,严禁一切野外用火。请各乡镇(街道)、相关部门做好防范措施和应急扑救准备。\n森林(草原)火险黄色=预计未来3天[地区]以晴天为主,气温高,湿度低,林内可燃物易点燃,极易蔓延,危险较高。严禁携带火种进入林区,严禁一切野外用火。请各乡镇(街道)、相关部门做好防范措施和应急扑救准备。\n森林(草原)火险橙色=预计未来3天[地区]以晴天为主,气温高,湿度低,林内可燃物易点燃,极易蔓延,危险很高。严禁携带火种进入林区,严禁一切野外用火。请各乡镇(街道)、相关部门做好防范措施和应急扑救准备。\n";
       $("#textImport").val(AlarmTempla);
    });
    $("#closeImport").click(function () {
       $("#editpanel").css("display","none");
    });
    $("#myImport").change(function(){
        if (this.files.length) {            
            var file = this.files[0];
            var reader = new FileReader();
            reader.onload = function() {
                //console.log(this.result);                
               $("#textImport").val(this.result);
            }
            reader.readAsText(file,"utf-8");
            $("#myImport").val('');
        }
    });
    $("#saveImport").click(function () {
        window.localStorage.removeItem("AlarmTempla");
        var storage=window.localStorage;
        var content=$("#textImport").val();
        storage.setItem("AlarmTempla",content);
        myalert("保存成功");
    });
    $("#exportImport").click(function () {
        saveTextAsFile();
    });
    function myalert(str){
        alert(str);
    }
})();