DFDJLAdjfldjg

you can use it for your report

Dieses Skript sollte nicht direkt installiert werden. Es handelt sich hier um eine Bibliothek für andere Skripte, welche über folgenden Befehl in den Metadaten eines Skriptes eingebunden wird // @require https://update.greasyfork.org/scripts/493430/1370222/DFDJLAdjfldjg.js

(function () {
    "use strict";
    var origSend;
    var origOpen;
    var button;
    var initialX, initialY;
    var isDragging;
    var input;
    var isDragging1;
    var initialX1, initialY1;
    var offsetX1, offsetY1;
    preprocessData();
    //变量定义
    //变量定义
    var strtip = "";
    var tipnum = 0;
    var enable = true;
    var strinput = "";
    var strreport = "报告模板:\n";
    var keyvalarr1 = null,
        keyvalarr2 = null,
        keyvalarr3 = null,
        keyvalarr4 = null;
    var keyvalArr;
    var manufactureStr = '';
    var supervisionStr = '';
    var renovationStr = '';
    var coverInspectionStr = '';
    var nextInspectionStr = '';
    var lastBrakingStr = '';
    var generalInspectionStr = document
    var manufactureDate = null;
    var supervisionDate = null;
    var renovationDate = null;
    var coverInspectionDate = null;
    var nextInspectionDate = null;
    var lastBrakingDate = null;
    var username = '';
    var usernameGK = '';
    var jyrq;
    var zhizaorq;
    var gaizaorq;
    var zhidongrq;
    var jiandurq;
    var gkxiacijianyanriqi;
    var jyrqgk;
    var keyname;
    var qgsf;
    var regions;
    var nx;
    var dat;

    function main() {
        MyVarObject();
        XiaoHe();
    }
    function XiaoHe() {
        isItemsEmpty();
        //封面信息
        //封面信息
        CoverInfo();
        //概况信息
        //概况信息
        ProfileInfo();
        //概况日期比较和检验记录
        //概况日期比较和检验记录
        DateInfo();
        //检验记录
        //检验记录  
        //验证检验结论是否正确,检验项目备注是否有填写
        InspectionRecordInfo();
        displayResult();
    }
    function MyVarObject() {
        keyname = [
            "JYJG1_JYJL1",
            "DTBZ1",
            "JYJG2_JYJL1",
            "DTBZ2",
            "JYJG3_JYJL1",
            "DTBZ3",
            "JYJG4_JYJL2",
            "DTBZ4",
            "JYJG5_JYJL2",
            "DTBZ5",
            "JYJG6_JYJL3",
            "DTBZ6",
            "JYJG7_JYJL4",
            "DTBZ7",
            "JYJG8_JYJL4",
            "DTBZ8",
            "JYJG9_JYJL4",
            "DTBZ9",
            "JYJG10_JYJL4",
            "DTBZ10",
            "JYJG11_JYJL5",
            "DTBZ11",
            "JYJG12_JYJL6",
            "DTBZ12",
            "JYJG13_JYJL6",
            "DTBZ13",
            "JYJG14_JYJL6",
            "DTBZ14",
            "JYJG15_JYJL6",
            "DTBZ15",
            "JYJG16_JYJL7",
            "DTBZ16",
            "JYJG17_JYJL8",
            "DTBZ17",
            "JYJG18_JYJL8",
            "DTBZ18",
            "JYJG19_JYJL9",
            "DTBZ19",
            "JYJG20_JYJL10",
            "DTBZ20",
            "JYJG21_JYJL11",
            "DTBZ21",
            "JYJG22_JYJL12",
            "DTBZ22",
            "JYJG23_JYJL12",
            "DTBZ23",
            "JYJG24_JYJL12",
            "DTBZ24",
            "JYJG25_JYJL13",
            "DTBZ25",
            "JYJG26_JYJL13",
            "DTBZ26",
            "JYJG27_JYJL13",
            "DTBZ27",
            "JYJG28_JYJL13",
            "DTBZ28",
            "JYJG29_JYJL13",
            "DTBZ29",
            "JYJG30_JYJL14",
            "DTBZ30",
            "JYJG31_JYJL14",
            "DTBZ31",
            "JYJG32_JYJL15",
            "DTBZ32",
            "JYJG33_JYJL15",
            "DTBZ33",
            "JYJG34_JYJL15",
            "DTBZ34",
            "JYJG35_JYJL16",
            "DTBZ35",
            "JYJG36_JYJL17",
            "DTBZ36",
            "JYJG37_JYJL18",
            "DTBZ37",
            "JYJG38_JYJL18",
            "DTBZ38",
            "JYJG39_JYJL18",
            "DTBZ39",
            "JYJG40_JYJL18",
            "DTBZ40",
            "JYJG41_JYJL19",
            "DTBZ41",
            "JYJG42_JYJL20",
            "DTBZ42",
            "JYJG43_JYJL21",
            "DTBZ43",
            "JYJG44_JYJL21",
            "DTBZ44",
            "JYJG45_JYJL21",
            "DTBZ45",
            "JYJG46_JYJL21",
            "DTBZ46",
            "JYJG47_JYJL22",
            "DTBZ47",
            "JYJG48_JYJL22",
            "DTBZ48",
            "JYJG49_JYJL23",
            "DTBZ49",
            "DTSJ503",
            "JYJG50_JYJL24",
            "DTBZ50",
            "DTSJ504",
            "JYJG51_JYJL24",
            "DTBZ51",
            "JYJG52_JYJL25",
            "DTBZ52",
            "JYJG53_JYJL26",
            "DTBZ53",
            "JYJG54_JYJL26",
            "DTBZ54",
            "JYJG55_JYJL26",
            "DTBZ55",
            "JYJG56_JYJL27",
            "DTBZ56",
            "JYJG57_JYJL27",
            "DTBZ57",
            "JYJG58_JYJL28",
            "DTBZ58",
            "JYJG59_JYJL28",
            "DTBZ59",
            "JYJG60_JYJL29",
            "DTBZ60",
            "DTSJ700",
            "JYJG61_JYJL29",
            "DTBZ61",
            "JYJG62_JYJL29",
            "DTBZ62",
            "JYJG63_JYJL29",
            "DTBZ63",
            "JYJG64_JYJL30",
            "DTBZ64",
            "JYJG65_JYJL30",
            "DTBZ65",
            "JYJG66_JYJL30",
            "DTBZ66",
            "DTSJ702",
            "JYJG67_JYJL31",
            "DTBZ67",
            "DTSJ74",
            "JYJG68_JYJL31",
            "DTBZ68",
            "JYJG69_JYJL32",
            "DTBZ69",
            "JYJG70_JYJL33",
            "DTBZ70",
            "JYJG71_JYJL33",
            "DTBZ71",
            "JYJG72_JYJL34",
            "DTBZ72",
            "JYJG73_JYJL34",
            "DTBZ73",
            "JYJG74_JYJL34",
            "DTBZ74",
            "JYJG75_JYJL34",
            "DTBZ75",
            "JYJG76_JYJL35",
            "DTBZ76",
            "JYJG77_JYJL36",
            "DTBZ77",
            "JYJG78_JYJL36",
            "DTBZ78",
            "JYJG79_JYJL38",
            "DTBZ79",
            "JYJG80_JYJL39",
            "DTBZ80",
            "JYJG81_JYJL39",
            "DTBZ81",
            "JYJG82_JYJL39",
            "DTBZ82",
            "JYJG83_JYJL39",
            "DTBZ83",
            "JYJG84_JYJL40",
            "DTBZ84",
            "JYJG85_JYJL40",
            "DTBZ85",
            "JYJG86_JYJL40",
            "DTBZ86",
            "JYJG87_JYJL40",
            "DTBZ87",
            "JYJG88_JYJL41",
            "DTBZ88",
            "JYJG89_JYJL41",
            "DTBZ89",
            "JYJG90_JYJL42",
            "DTBZ90",
            "JYJG91_JYJL43",
            "DTBZ91",
        ];
        qgsf = {
            北京市: "11",
            天津市: "12",
            河北省: "13",
            山西省: "14",
            内蒙古自治区: "15",
            辽宁省: "21",
            吉林省: "22",
            黑龙江省: "23",
            上海市: "31",
            江苏省: "32",
            浙江省: "33",
            安徽省: "34",
            福建省: "35",
            江西省: "36",
            山东省: "37",
            河南省: "41",
            湖北省: "42",
            湖南省: "43",
            广东省: "44",
            广西壮族自治区: "45",
            海南省: "46",
            重庆市: "50",
            四川省: "51",
            贵州省: "52",
            云南省: "53",
            西藏自治区: "54",
            陕西省: "61",
            甘肃省: "62",
            青海省: "63",
            宁夏回族自治区: "64",
            新疆维吾尔自治区: "65",
            台湾省: "71",
            香港特别行政区: "81",
            澳门特别行政区: "82",
        };
        regions = {
            银川市: {
                银川市市辖区: {
                    兴庆区: {},
                    西夏区: {},
                    金凤区: {},
                },
                兴庆区: {},
                西夏区: {},
                金凤区: {},
                永宁县: {},
                贺兰县: {},
                灵武市: {},
            },
            石嘴山市: {
                大武口区: {},
                惠农区: {},
                平罗县: {},
            },
            吴忠市: {
                利通区: {},
                红寺堡区: {},
                盐池县: {},
                同心县: {},
                青铜峡市: {},
            },
            固原市: {
                原州区: {},
                西吉县: {},
                隆德县: {},
                泾源县: {},
                彭阳县: {},
            },
            中卫市: {
                中卫市市辖区: {
                    沙坡头区: {},
                },
                沙坡头区: {},
                中宁县: {},
                海原县: {},
            },
        };
        nx = {
            宁夏回族自治区: "640000",
            银川市: "640100",
            银川市市辖区: "640101",
            兴庆区: "640104",
            西夏区: "640105",
            金凤区: "640106",
            永宁县: "640121",
            贺兰县: "640122",
            灵武市: "640181",
            石嘴山市: "640200",
            大武口区: "640202",
            惠农区: "640205",
            平罗县: "640221",
            吴忠市: "640300",
            利通区: "640302",
            红寺堡区: "640303",
            盐池县: "640323",
            同心县: "640324",
            青铜峡市: "640381",
            固原市: "640400",
            原州区: "640402",
            西吉县: "640422",
            隆德县: "640423",
            泾源县: "640424",
            彭阳县: "640425",
            中卫市: "640500",
            中卫市市辖区: "640501",
            沙坡头区: "640502",
            中宁县: "640521",
            海原县: "640522",
        };

        keyvalarr1 = {
            REPORTNO: "NTD11202405871",
            使用单位名称: "宁夏永建建筑工程有限公司",
            设备代码: "311010339201203353",
            SHEBEILEIBIE: "曳引与强制驱动电梯",
            "内部(全面)检验日期(电类定检)": "2024年04月17日",
        };

        keyvalarr2 = {
            使用单位名称: "宁夏永建建筑工程有限公司",
            使用单位组织机构代码: "916401212279302618",
            "设备使用(所在)地点": "永宁县团结社区日间照料中心",
            设备分类代码: "曳引驱动乘客电梯",
            设备型号: "DPN35",
            "产品编号(出厂编号)": "202209146",
            使用证编号: "56",
            安全管理人员: "张飞",
            安全管理人员联系电话: "09514100765",
            制造单位: "苏州德奥电梯有限公司",
            制造日期: "2006年09月26日",
            GZDWMC: "-",
            改造监督检验日期: "-",
            维保单位名称: "宁夏通宇电梯制造发展股份有限公司",
            ZDSYRQ: "2023年04月",
            安装监督检验日期: "2016年06月",
            是否加装电梯: "否",
            是否住宅电梯: "否",
            "内部(全面)下次检验日期(电类定检)": "2025年04月",
            电梯额定载荷: "800",
            电梯运行速度: "1.5",
            电梯层站: "6",
            电梯站数: "6",
            电梯门数: "6",
            控制方式: "单台集选控制",
            DTJYYJ: "《电梯监督检验和定期检验规则》(TSG T7001-2023)",
            JYYQSB: "详见(2)号工具箱",
            DTBZCS3: "-",
            DTBZCS4: "-",
            XCJYTJ: "符合",
            XCAQTJ: "符合",
            "内部(全面)检验结论(电类定检)": "合格",
            JYRY: "",
            "内部(全面)检验日期(电类定检)": "2024年04月17日",
            JHRY: "",
            JHRQ: "",
        };
        keyvalarr3 = {
            JYJG1_JYJL1: "",
            DTBZ1: "-",
            JYJG2_JYJL1: "×",
            DTBZ2: "-",
            JYJG3_JYJL1: "×",
            DTBZ3: "-",
            JYJG4_JYJL2: "×",
            DTBZ4: "-",
            JYJG5_JYJL2: "√",
            DTBZ5: "-",
            JYJG6_JYJL3: "√",
            DTBZ6: "-",
            JYJG7_JYJL4: "√",
            DTBZ7: "-",
            JYJG8_JYJL4: "-",
            DTBZ8: "-",
            JYJG9_JYJL4: "√",
            DTBZ9: "-",
            JYJG10_JYJL4: "√",
            DTBZ10: "-",
            JYJG11_JYJL5: "√",
            DTBZ11: "-",
            JYJG12_JYJL6: "-",
            DTBZ12: "-",
            JYJG13_JYJL6: "-",
            DTBZ13: "-",
            JYJG14_JYJL6: "-",
            DTBZ14: "-",
            JYJG15_JYJL6: "-",
            DTBZ15: "-",
            JYJG16_JYJL7: "√",
            DTBZ16: "-",
            JYJG17_JYJL8: "-",
            DTBZ17: "-",
            JYJG18_JYJL8: "-",
            DTBZ18: "-",
            JYJG19_JYJL9: "-",
            DTBZ19: "-",
            JYJG20_JYJL10: "√",
            DTBZ20: "-",
            JYJG21_JYJL11: "√",
            DTBZ21: "-",
            JYJG22_JYJL12: "√",
            DTBZ22: "-",
            JYJG23_JYJL12: "√",
            DTBZ23: "-",
            JYJG24_JYJL12: "-",
            DTBZ24: "-",
            JYJG25_JYJL13: "√",
            DTBZ25: "-",
            JYJG26_JYJL13: "√",
            DTBZ26: "-",
            JYJG27_JYJL13: "√",
            DTBZ27: "-",
            JYJG28_JYJL13: "-",
            DTBZ28: "-",
            JYJG29_JYJL13: "√",
            DTBZ29: "-",
            JYJG30_JYJL14: "-",
            DTBZ30: "-",
            JYJG31_JYJL14: "√",
            DTBZ31: "-",
            JYJG32_JYJL15: "√",
            DTBZ32: "-",
            JYJG33_JYJL15: "-",
            DTBZ33: "-",
            JYJG34_JYJL15: "-",
            DTBZ34: "-",
            JYJG35_JYJL16: "√",
            DTBZ35: "-",
            JYJG36_JYJL17: "-",
            DTBZ36: "-",
            JYJG37_JYJL18: "√",
            DTBZ37: "-",
            JYJG38_JYJL18: "√",
            DTBZ38: "-",
            JYJG39_JYJL18: "√",
            DTBZ39: "-",
            JYJG40_JYJL18: "√",
            DTBZ40: "-",
            JYJG41_JYJL19: "-",
            DTBZ41: "-",
            JYJG42_JYJL20: "-",
            DTBZ42: "-",
        };

        keyvalarr4 = {
            JYJG43_JYJL21: "√",
            DTBZ43: "-",
            JYJG44_JYJL21: "√",
            DTBZ44: "-",
            JYJG45_JYJL21: "-",
            DTBZ45: "-",
            JYJG46_JYJL21: "√",
            DTBZ46: "-",
            JYJG47_JYJL22: "√",
            DTBZ47: "-",
            JYJG48_JYJL22: "√",
            DTBZ48: "-",
            JYJG49_JYJL23: "×",
            DTBZ49: "-",
            DTSJ503: "≤6",
            JYJG50_JYJL24: "√",
            DTBZ50: "-",
            DTSJ504: "≤45",
            JYJG51_JYJL24: "√",
            DTBZ51: "-",
            JYJG52_JYJL25: "√",
            DTBZ52: "-",
            JYJG53_JYJL26: "√",
            DTBZ53: "-",
            JYJG54_JYJL26: "√",
            DTBZ54: "-",
            JYJG55_JYJL26: "√",
            DTBZ55: "-",
            JYJG56_JYJL27: "√",
            DTBZ56: "-",
            JYJG57_JYJL27: "√",
            DTBZ57: "-",
            JYJG58_JYJL28: "√",
            DTBZ58: "-",
            JYJG59_JYJL28: "√",
            DTBZ59: "-",
            JYJG60_JYJL29: "√",
            DTBZ60: "-",
            DTSJ700: "7",
            JYJG61_JYJL29: "√",
            DTBZ61: "-",
            JYJG62_JYJL29: "√",
            DTBZ62: "-",
            JYJG63_JYJL29: "√",
            DTBZ63: "-",
            JYJG64_JYJL30: "√",
            DTBZ64: "-",
            JYJG65_JYJL30: "√",
            DTBZ65: "-",
            JYJG66_JYJL30: "√",
            DTBZ66: "-",
            DTSJ702: "45",
            JYJG67_JYJL31: "√",
            DTBZ67: "-",
            DTSJ74: "23",
            JYJG68_JYJL31: "-",
            DTBZ68: "-",
            JYJG69_JYJL32: "√",
            DTBZ69: "-",
            JYJG70_JYJL33: "√",
            DTBZ70: "-",
            JYJG71_JYJL33: "√",
            DTBZ71: "-",
            JYJG72_JYJL34: "√",
            DTBZ72: "-",
            JYJG73_JYJL34: "√",
            DTBZ73: "-",
            JYJG74_JYJL34: "√",
            DTBZ74: "-",
            JYJG75_JYJL34: "√",
            DTBZ75: "-",
            JYJG76_JYJL35: "√",
            DTBZ76: "-",
            JYJG77_JYJL36: "-",
            DTBZ77: "-",
            JYJG78_JYJL36: "-",
            DTBZ78: "-",
            JYJG79_JYJL38: "√",
            DTBZ79: "-",
            JYJG80_JYJL39: "-",
            DTBZ80: "-",
            JYJG81_JYJL39: "√",
            DTBZ81: "-",
            JYJG82_JYJL39: "√",
            DTBZ82: "-",
            JYJG83_JYJL39: "√",
            DTBZ83: "-",
            JYJG84_JYJL40: "-",
            DTBZ84: "-",
            JYJG85_JYJL40: "-",
            DTBZ85: "-",
            JYJG86_JYJL40: "-",
            DTBZ86: "-",
            JYJG87_JYJL40: "√",
            DTBZ87: "-",
            JYJG88_JYJL41: "√",
            DTBZ88: "-",
            JYJG89_JYJL41: "√",
            DTBZ89: "-",
            JYJG90_JYJL42: "√",
            DTBZ90: "-",
            JYJG91_JYJL43: "√",
            DTBZ91: "-",
        };

        keyvalArr = {
            ...keyvalarr1,
            ...keyvalarr2,
            ...keyvalarr3,
            ...keyvalarr4,
        };
        dat = replaceValuesWithFun(keyvalArr, gett);

    }
    function displayResult() {
        if (strtip.trim() === "") {
            strtip = "未发现问题";
        }
        input.value = strtip + "\n\n" + strinput;
        strtip = "";
        strinput = "";
        tipnum = 0;
    }
    function InspectionRecordInfo() {

        if (1) {
            //判断关键、一般项目结论与报告结论的关系
            if (1) {
                // 指定的数集合
                const specificNumbers = new Set([
                    4, 7, 9, 10, 12, 13, 18, 24, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35,
                    36, 37, 38, 39, 40, 41, 42,
                ]);
                const normalNumbers = new Set([
                    1, 2, 3, 5, 6, 8, 11, 14, 15, 16, 17, 19, 20, 21, 22, 23, 32, 43,
                ]);
                const symbolToCheckBHG = "×";
                const symbolToCheckWCX = "-";
                const symbolToCheckFJHG = "△";
                //关键项目
                const GJbuhegeJson = getXMKeyValues(
                    dat,
                    specificNumbers,
                    symbolToCheckBHG
                );
                //一般项目
                const YBbuhegeJson = getXMKeyValues(
                    dat,
                    normalNumbers,
                    symbolToCheckBHG
                );
                //关键项目复检合格
                const GJFJHGJson = getXMKeyValues(
                    dat,
                    specificNumbers,
                    symbolToCheckFJHG
                );
                //一般项目复检合格
                const YBFJHGJson = getXMKeyValues(
                    dat,
                    normalNumbers,
                    symbolToCheckFJHG
                );

                if (Object.keys(GJbuhegeJson).length === 0) {
                    if (Object.keys(YBbuhegeJson).length === 0) {
                        if (gett("内部(全面)检验结论(电类定检)") != "合格") {
                            addstrtip("检验项目全部符合,检验结论应该为“合格”!");
                        }
                    } else if (
                        Object.keys(YBbuhegeJson).length +
                        Object.keys(YBFJHGJson).length <=
                        3
                    ) {
                        // 初始化一个数组来存储提取的数字
                        const extractedNumbers = [];
                        // 遍历JSON对象的每个键
                        for (const key in YBbuhegeJson) {
                            // 使用正则表达式匹配"JYJL"后面的数字
                            const match = key.match(/JYJL(\d+)/);
                            if (match) {
                                // 如果找到了匹配项,则将数字添加到数组中
                                extractedNumbers.push(parseInt(match[1], 10)); // 使用parseInt将字符串转换为整数
                            }
                        }
                        // 如果你只想要唯一的数字,并且不关心它们在原始JSON中的顺序,可以使用Set来去除重复项
                        const uniqueNumbers = [...new Set(extractedNumbers)];
                        if (!validateString1(dat.DTBZCS3, uniqueNumbers)) {
                            addstrtip(
                                "关键项目全部符合,一般项目不符合监护使用项及整改后符合项共不超过3项,备注有误!备注模板“本记录第1、2、3项的检验结果为不符合,使用单位已经承诺采取安全措施,对电梯实行监护使用(见编号为TZS-DT-2401804的《电梯检验意见通知书》)”,考虑格式、不符合项序号、意见通知书年份等是否有误!"
                            );
                        }
                        if (gett("内部(全面)检验结论(电类定检)") != "整改后合格") {
                            addstrtip(
                                "关键项目全部符合,一般项目不符合监护使用及整改后符合项共不超过3项,检验结论应该为“整改后合格”!"
                            );
                        }
                    } else if (
                        Object.keys(YBbuhegeJson).length +
                        Object.keys(YBFJHGJson).length >
                        3
                    ) {
                        addstrtip(
                            "关键项目全部符合,一般项目不符合监护使用项及整改后符合项共超过3项,一般项目都应打“×””!"
                        );
                    } else if (Object.keys(YBbuhegeJson).length > 3) {
                        if (gett("内部(全面)检验结论(电类定检)") != "不合格") {
                            addstrtip(
                                "关键项目全部符合,一般项目不符合共超过3项,检验结论应该为“不合格”!"
                            );
                        }
                    }
                } else {
                    if (gett("内部(全面)检验结论(电类定检)") != "不合格") {
                        addstrtip("关键项目有不符合,检验结论应该为“不合格”!");
                    }
                }
                const xiangmuBeizuJson = checkDTBZValues(dat);
                if (dat.DTBZ44 != "") {
                    if (Object.keys(xiangmuBeizuJson).length > 1) {
                        //"JYJG44_JYJL21":"√","DTBZ44":"-"对重块
                        addstrtip("除对重块备注外仍有检验项目备注不是空!");
                    }
                } else if (Object.keys(xiangmuBeizuJson).length > 0) {
                    //"JYJG44_JYJL21":"√","DTBZ44":"-"对重块
                    addstrtip("除对重块备注外仍有检验项目备注不是空!");
                }
            }
            //1-9
            //"JYJG1_JYJL1":"√","DTBZ1":""
            if (1) {
                //1
                if (dat.JYJG1_JYJL1 === "×") {
                    addstrtip(
                        "备注应说明“未注册,请持不合格报告到市民大厅办理注册后重新报检!”"
                    );
                }
                //4
                if (dat.JYJG8_JYJL4 === "-") {
                    if (parseFloat(dat.电梯运行速度) > 1) {
                        addstrtip("电梯速度与缓冲器类型不匹配!");
                    }
                }
                //5
                if (supervisionDate != null) {
                    const curdate = new Date();
                    if (curdate.getFullYear() - supervisionDate.getFullYear() > 14) {
                        if (dat.JYJG11_JYJL5 === "-") {
                            addstrtip("超过15年的电梯应检验第5项接地故障保护!");
                        }
                    }
                    if (curdate.getFullYear() - supervisionDate.getFullYear() < 15) {
                        if (dat.JYJG11_JYJL5 != "-") {
                            addstrtip("不超过15年的第5项电梯接地故障保护不需要检验!");
                        }
                    }
                }
                //6
                //"JYJG12_JYJL6":"","DTBZ12":"","JYJG13_JYJL6":"","DTBZ13":""
                //,"JYJG14_JYJL6":"","DTBZ14":"","JYJG15_JYJL6":"","DTBZ15":""
                if (supervisionDate != null) {
                    if (supervisionDate < new Date("2017-10-01")) {
                        if (
                            dat.JYJG12_JYJL6 != "-" ||
                            dat.JYJG13_JYJL6 != "-" ||
                            dat.JYJG14_JYJL6 != "-" ||
                            dat.JYJG15_JYJL6 != "-"
                        ) {
                            addstrtip("注意2017.10.1以前的电梯没有第6项旁路装置!");
                        }
                    }
                    if (supervisionDate >= new Date("2017-10-01")) {
                        if (
                            dat.JYJG12_JYJL6 === "-" ||
                            dat.JYJG13_JYJL6 === "-" ||
                            dat.JYJG14_JYJL6 === "-" ||
                            dat.JYJG15_JYJL6 === "-"
                        ) {
                            addstrtip("注意2017.10.1以后的电梯有第6项旁路装置!");
                        }
                    }
                }
                //7
                if (supervisionDate != null) {
                    if (supervisionDate < new Date("2017-10-01")) {
                        if (dat.JYJG16_JYJL7 != "-") {
                            addstrtip(
                                "注意2017.10.1以前的电梯不检验第7项制动器状态监测功能!"
                            );
                        }
                    }
                    if (supervisionDate >= new Date("2017-10-01")) {
                        if (dat.JYJG16_JYJL7 === "-") {
                            addstrtip(
                                "注意2017.10.1以后的电梯应检验第7项制动器状态监测功能!"
                            );
                        }
                    }
                }
            }
            //10-19
            if (1) {
                //10
                //10."JYJG20_JYJL10":"","DTBZ20":""
                if (1) {
                    if (parseInt(dat.电梯层站) > 7) {
                        if (dat.JYJG20_JYJL10 === "-") {
                            addstrtip("注意提升高度大于30m需要设置第10项紧急报警装置!");
                        }
                    } else if (parseInt(dat.电梯层站) <= 7) {
                        if (dat.JYJG20_JYJL10 != "-") {
                            addstrtip(
                                "注意提升高度小于30m可能不需要设置第10项紧急报警装置!"
                            );
                        }
                    }
                }
                //12
                //"JYJG22_JYJL12":"","DTBZ22":"","JYJG23_JYJL12":"","DTBZ23":"","JYJG24_JYJL12":"","DTBZ24":""
                if (supervisionDate != null) {
                    if (supervisionDate < new Date('2024-04-02')) {
                        if (dat.JYJG22_JYJL12 != "-") {
                            addstrtip("未按照TSG T7001-2023监督检验的电梯,12-1不检验!");
                        }
                    }
                    if (supervisionDate >= new Date('2024-04-02')) {
                        if (dat.JYJG22_JYJL12 === "-") {
                            addstrtip("按照TSG T7001-2023监督检验的电梯,12-1需要检验!");
                        }
                    }
                }
                //13手动紧急操作装置
                //JYJG28_JYJL13
                if (manufactureDate != null) {
                    if (manufactureDate < new Date('2004-01-01')) {
                        if (dat.JYJG28_JYJL13 != "-") {
                            addstrtip(
                                "按照GB7588-1995及更早标准生产的电梯,如果未依据TSG T7001、2023检验,第13(4)是否不检验!"
                            );
                        }
                    }
                    if (manufactureDate >= new Date('2004-01-01')) {
                        if (dat.JYJG28_JYJL13 === "-") {
                            addstrtip(
                                "注意按照GB7588-2003及之后新标准生产的电梯,若带有盘车手轮,第13(4)是否应检验!"
                            );
                        }
                    }
                    if (dat.JYJG27_JYJL13 === '-') {
                        if (dat.JYJG28_JYJL13 != '-') {
                            addstrtip('若13(3)无此项,那么13(4)也应是无此项!');
                        }
                    }
                    if (dat.JYJG28_JYJL13 != '-') {
                        if (dat.JYJG27_JYJL13 === '-') {
                            addstrtip('若13(4)符合,那么13(3)也应是符合!');
                        }
                    }
                }
                //14、15
                //钢丝绳、包覆带
                if (1) {
                    if (dat.JYJG30_JYJL14 != "-" || dat.JYJG31_JYJL14 != "-") {
                        if (
                            dat.JYJG32_JYJL15 != "-" ||
                            dat.JYJG33_JYJL15 != "-" ||
                            dat.JYJG34_JYJL15 != "-"
                        ) {
                            addstrtip("14、15钢丝绳和包覆带有同时勾选!");
                        }
                    }
                    if (supervisionDate != null) {
                        const curdate = new Date();
                        if (curdate.getFullYear() - supervisionDate.getFullYear() < 15) {
                            if (dat.JYJG30_JYJL14 != "-" || dat.JYJG31_JYJL14 != "-") {
                                addstrtip("不超过15年的电梯14项钢丝绳不需要检验!");
                            }
                        }
                    }
                    if (supervisionDate != null) {
                        const curdate = new Date();
                        if (curdate.getFullYear() - supervisionDate.getFullYear() < 15) {
                            if (
                                dat.JYJG32_JYJL15 != "-" ||
                                dat.JYJG33_JYJL15 != "-" ||
                                dat.JYJG34_JYJL15 != "-"
                            ) {
                                addstrtip("不超过15年的电梯15项包覆带不需要检验!");
                            }
                        }
                    }
                    if (supervisionDate != null) {
                        const curdate = new Date();
                        if (curdate.getFullYear() - supervisionDate.getFullYear() > 14) {
                            if (dat.JYJG30_JYJL14 === "-" && dat.JYJG31_JYJL14 === "-") {
                                if (
                                    dat.JYJG32_JYJL15 === "-" ||
                                    dat.JYJG33_JYJL15 === "-" ||
                                    dat.JYJG34_JYJL15 === "-"
                                ) {
                                    addstrtip("14、15钢丝绳和包覆带至少选一类!");
                                }
                            }
                        }
                    }
                    if (supervisionDate != null) {
                        if (supervisionDate < new Date('2024-04-02')) {
                            if (dat.JYJG33_JYJL15 != "-" || dat.JYJG34_JYJL15 != "-") {
                                addstrtip(
                                    "未按照TSG T7001-2023监督检验的电梯,15-2、3不检验!"
                                );
                            }
                        }
                        if (supervisionDate >= new Date('2024-04-02')) {
                            if (dat.JYJG33_JYJL15 === "-" || dat.JYJG34_JYJL15 === "-") {
                                addstrtip(
                                    "按照TSG T7001-2023监督检验的电梯,15-2、3需要检验!"
                                );
                            }
                        }
                    }
                }
                //16悬挂装置端部固定
                if (supervisionDate != null) {
                    const curdate = new Date();
                    if (curdate.getFullYear() - supervisionDate.getFullYear() > 14) {
                        if (dat.JYJG35_JYJL16 === "-") {
                            addstrtip("超过15年的电梯应检验第16项悬挂装置端部固定!");
                        }
                    }
                    if (curdate.getFullYear() - supervisionDate.getFullYear() < 15) {
                        if (dat.JYJG35_JYJL16 != "-") {
                            addstrtip("不超过15年的第16项悬挂装置端部固定不需要检验!");
                        }
                    }
                }
                //18_JYJL18))
                //速度与反绳轮

                if (1) {
                    if (supervisionDate >= new Date("2024-04-02")) {
                        if (parseFloat(dat.电梯运行速度) <= 1.75) {
                            if (
                                !(
                                    (dat.JYJG37_JYJL18 === "-" &&
                                        dat.JYJG38_JYJL18 === "-" &&
                                        dat.JYJG39_JYJL18 === "-" &&
                                        dat.JYJG40_JYJL18 === "-") ||
                                    (dat.JYJG37_JYJL18 != "-" &&
                                        dat.JYJG38_JYJL18 != "-" &&
                                        dat.JYJG39_JYJL18 != "-" &&
                                        dat.JYJG40_JYJL18 != "-")
                                )
                            ) {
                                addstrtip("2024-04-02及之后监督,速度不大于1.75,第18项全部有(采用非金属)或者无此项(采用金属)!");
                            }
                            if (dat.JYJG37_JYJL18 != "-" &&
                                dat.JYJG38_JYJL18 != "-" &&
                                dat.JYJG39_JYJL18 != "-" &&
                                dat.JYJG40_JYJL18 != "-") {
                                if (!(dat.JYJG37_JYJL18 === "√" || dat.JYJG37_JYJL18 === "△")) {
                                    addstrtip('2024-04-02及之后监督,速度不大于1.75,第18项采用非金属反绳轮时,18(1)应为符合或整改后符合!');
                                }
                            }
                        } else {
                            if (!(dat.JYJG37_JYJL18 === "-" &&
                                dat.JYJG38_JYJL18 === "-" &&
                                dat.JYJG39_JYJL18 === "-" &&
                                dat.JYJG40_JYJL18 === "-")) {
                                addstrtip('2024-04-02及之后监督,速度大于1.75,第18项只能采用金属反绳轮!');
                            }
                        }
                    } else {
                        if (parseFloat(dat.电梯运行速度) <= 1.75) {
                            if (!(dat.JYJG37_JYJL18 === "-" &&
                                dat.JYJG38_JYJL18 === "-" &&
                                dat.JYJG39_JYJL18 === "-" &&
                                dat.JYJG40_JYJL18 === "-")) {
                                if (dat.JYJG39_JYJL18 != "-" &&
                                    dat.JYJG40_JYJL18 != "-") {
                                    if (!(dat.JYJG37_JYJL18 === "√" || dat.JYJG37_JYJL18 === "△" || dat.JYJG37_JYJL18 === "-")) {
                                        addstrtip('2024-04-02之前监督,速度不大于1.75,第18项采用非金属反绳轮时,18(1)应为符合、整改后符合或无此项!');
                                    }
                                    if (!(dat.JYJG38_JYJL18 === "√" || dat.JYJG38_JYJL18 === "△" || dat.JYJG38_JYJL18 === "-")) {
                                        addstrtip('2024-04-02之前监督,速度不大于1.75,第18项采用非金属反绳轮时,18(2)应为符合、整改后符合或无此项!');
                                    }
                                } else {
                                    addstrtip('2024-04-02之前监督,速度不大于1.75,第18项采用非金属反绳轮时,18(3)(4)都应不是无此项!');
                                }
                            }
                        } else {
                            if (!(dat.JYJG37_JYJL18 === "-" &&
                                dat.JYJG38_JYJL18 === "-" &&
                                dat.JYJG39_JYJL18 === "-" &&
                                dat.JYJG40_JYJL18 === "-")) {
                                if (dat.JYJG39_JYJL18 != "-" &&
                                    dat.JYJG40_JYJL18 != "-") {
                                    if (dat.JYJG37_JYJL18 != "-") {
                                        addstrtip('2024-04-02之前监督,速度大于1.75,第18项采用非金属反绳轮时,18(1)应为无此项!');
                                    }
                                    if (!(dat.JYJG38_JYJL18 === "√" || dat.JYJG38_JYJL18 === "△" || dat.JYJG38_JYJL18 === "-")) {
                                        addstrtip('2024-04-02之前监督,速度大于1.75,第18项采用非金属反绳轮时,18(2)应为符合、整改后符合或无此项!');
                                    }
                                } else {
                                    addstrtip('2024-04-02之前监督,速度大于1.75,第18项采用非金属反绳轮时,18(3)(4)都应不是无此项!');
                                }
                            }
                        }
                    }
                }
            }
            //20-29
            if (1) {
                //21对重块数量或高度
                //"JYJG44_JYJL21":"√","DTBZ44":"-"
                if (dat.JYJG44_JYJL21 === "√") {
                    if (
                        !/^\d+(\.\d+)?\s*(块|厘米|cm|毫米|mm|米|m)$/i.test(dat.DTBZ44)
                    ) {
                        addstrtip("第21(2)对重块备注信息填写错误!");
                    }
                }
                if (supervisionDate < new Date("2024-04-02")) {
                    if(dat.JYJG45_JYJL21!='-'){
                        addstrtip('注意2024.4.2之前监督检验的电梯,21(3)是否不检验!')
                    }
                }else{
                    if(dat.JYJG45_JYJL21==='-'){
                        addstrtip('注意2024.4.2及之后监督检验的电梯,21(3)是否需要检验!')
                    }
                }
                //23轿厢语音播报系统
                if (supervisionDate != null) {
                    if (supervisionDate < new Date('2024-04-02')) {
                        if (dat.JYJG49_JYJL23 != "-") {
                            addstrtip("未按照TSG T7001-2023监督检验的电梯,第23项不检验!");
                        }
                    }
                    if (supervisionDate >= new Date('2024-04-02')) {
                        if (dat.JYJG49_JYJL23 === "-") {
                            addstrtip("按照TSG T7001-2023监督检验的电梯,第23项需要检验!");
                        }
                    }
                }
                //24门扇间隙
                if (
                    (dat.JYJG50_JYJL24 === "-" && dat.DTSJ503 != "-") ||
                    (dat.JYJG50_JYJL24 != "-" && dat.DTSJ503 === "-")
                ) {
                    addstrtip("第24项门间隙(1)测量数据与结果矛盾!");
                }
                if (
                    (dat.JYJG51_JYJL24 === "-" && dat.DTSJ504 != "-") ||
                    (dat.JYJG51_JYJL24 != "-" && dat.DTSJ504 === "-")
                ) {
                    addstrtip("第24项门间隙(2)测量数据与结果矛盾!");
                }
                if (supervisionDate != null) {
                    const curdate = new Date();
                    if (curdate.getFullYear() - supervisionDate.getFullYear() > 14) {
                        if (
                            dat.JYJG50_JYJL24 === "-" ||
                            dat.JYJG51_JYJL24 === "-" ||
                            dat.DTSJ503 === "-" ||
                            dat.DTSJ504 === "-"
                        ) {
                            addstrtip("超过15年的电梯应检验第24项门间隙!");
                        } else {
                            if (dat.设备分类代码 === "曳引驱动乘客电梯") {
                                if (/^([1-9]\d*(\.\d+)?|0\.\d+)(mm|MM|毫米)?$/.test(dat.DTSJ503)) {
                                    if (
                                        parseFloat(dat.DTSJ503) <= 6 &&
                                        parseFloat(dat.DTSJ503) >= 0
                                    ) {
                                        if (dat.JYJG50_JYJL24 === "×") {
                                            addstrtip(
                                                "第24项门间隙(1)实测值:" + dat.DTSJ503 + "应为符合!"
                                            );
                                        }
                                    } else if (parseFloat(dat.DTSJ503) > 6) {
                                        if (dat.JYJG50_JYJL24 != "×") {
                                            addstrtip(
                                                "第24项门间隙(1)实测值:" +
                                                dat.DTSJ503 +
                                                "应为不符合!"
                                            );
                                        }
                                    }
                                } else if (/^≤6(mm|MM|毫米)?$/.test(dat.DTSJ503)) {
                                    if (dat.JYJG50_JYJL24 === "×") {
                                        addstrtip(
                                            "第24项门间隙(1)目测值:" + dat.DTSJ503 + "应为符合!"
                                        );
                                    }
                                } else {
                                    addstrtip("第24项门间隙(1)测量值格式错误!");
                                }
                            } else if (dat.设备分类代码 === "曳引驱动载货电梯") {
                                if (/^([1-9]\d*(\.\d+)?|0\.\d+)(mm|MM|毫米)?$/.test(dat.DTSJ503)) {
                                    if (
                                        parseFloat(dat.DTSJ503) <= 10 &&
                                        parseFloat(dat.DTSJ503) >= 0
                                    ) {
                                        if (dat.JYJG50_JYJL24 === "×") {
                                            addstrtip(
                                                "第24项门间隙(1)实测值:" + dat.DTSJ503 + "应为符合!"
                                            );
                                        }
                                    } else if (parseFloat(dat.DTSJ503) > 10) {
                                        if (dat.JYJG50_JYJL24 != "×") {
                                            addstrtip(
                                                "第24项门间隙(1)实测值:" +
                                                dat.DTSJ503 +
                                                "应为不符合!"
                                            );
                                        }
                                    }
                                } else if (/^≤10(mm|MM|毫米)?$/.test(dat.DTSJ503)) {
                                    if (dat.JYJG50_JYJL24 === "×") {
                                        addstrtip(
                                            "第24项门间隙(1)目测值:" + dat.DTSJ503 + "应为符合!"
                                        );
                                    } else {
                                        addstrtip("第24项门间隙(1)测量值格式错误!");
                                    }
                                }
                            }
                            if (/^([1-9]\d*(\.\d+)?|0\.\d+)(mm|MM|毫米)?$/.test(dat.DTSJ504)) {
                                if (parseFloat(dat.DTSJ504) <= 30) {
                                    if (dat.JYJG51_JYJL24 === "×") {
                                        addstrtip(
                                            "第24项门间隙(2)实测值:" + dat.DTSJ504 + "应为符合!"
                                        );
                                    }
                                } else if (
                                    parseFloat(dat.DTSJ504) > 30 &&
                                    parseFloat(dat.DTSJ504) <= 45
                                ) {
                                    if (dat.JYJG51_JYJL24 === "×") {
                                        addstrtip(
                                            "若为中分门,第24项门间隙(2)实测值:" +
                                            dat.DTSJ504 +
                                            "应为符合!"
                                        );
                                    } else if (dat.JYJG51_JYJL24 != "×") {
                                        addstrtip(
                                            "若为旁开门,第24项门间隙(2)实测值:" +
                                            dat.DTSJ504 +
                                            "应为不符合!"
                                        );
                                    }
                                } else {
                                    if (dat.JYJG51_JYJL24 != "×") {
                                        addstrtip(
                                            "第24项门间隙(2)实测值:" + dat.DTSJ504 + "应为不符合!"
                                        );
                                    }
                                }
                            } else if (dat.DTSJ504 === "≤45(mm|MM|毫米)?") {
                                if (dat.JYJG51_JYJL24 === "×") {
                                    addstrtip(
                                        "第24项门间隙(2)实测值:" + dat.DTSJ504 + "应为符合!"
                                    );
                                }
                            } else {
                                addstrtip("第24项门间隙(2)实测值格式错误!");
                            }
                        }
                    }
                    if (curdate.getFullYear() - supervisionDate.getFullYear() < 15) {
                        if (
                            dat.JYJG50_JYJL24 != "-" ||
                            dat.JYJG51_JYJL24 != "-" ||
                            dat.DTSJ503 != "-" ||
                            dat.DTSJ504 != "-"
                        ) {
                            addstrtip("不超过15年的第24项门间隙不需要检验!");
                        }
                    }
                }
                //26门的运行和导向装置
                if (supervisionDate != null) {
                    if (supervisionDate < new Date('2024-04-02')) {
                        if (dat.JYJG55_JYJL26 != "-") {
                            addstrtip(
                                "注意2024.04.02以前监督检验的电梯不检验第26项(3)层门啮合标记!"
                            );
                        }
                    }
                    if (supervisionDate >= new Date('2024-04-02')) {
                        if (dat.JYJG55_JYJL26 === "-") {
                            addstrtip(
                                "注意2024.04.02及以后监督检验的电梯应检验第26项(3)层门啮合标记!"
                            );
                        }
                    }
                }
                //28紧急开锁
                if (supervisionDate != null) {
                    if (supervisionDate < new Date('2024-04-02')) {
                        if (dat.JYJG59_JYJL28 != "-") {
                            addstrtip("注意2024.04.02以前监督检验的电梯不检验第28项(2)紧急开锁!");
                        }
                    }
                    if (supervisionDate >= new Date('2024-04-02')) {
                        if (dat.JYJG59_JYJL28 === "-") {
                            addstrtip("注意2024.04.02及以后监督检验的电梯应检验第28项(2)紧急开锁!");
                        }
                    }
                }
                //29门的锁紧
                //"JYJG60_JYJL29":"","DTBZ60":"","DTSJ700":"7mm","JYJG61_JYJL29":"","DTBZ61":"","JYJG62_JYJL29":"","DTBZ62":"","JYJG63_JYJL29":"","DTBZ63":""
                if (
                    (dat.JYJG61_JYJL29 === "-" && dat.DTSJ700 != "-") ||
                    (dat.JYJG61_JYJL29 != "-" && dat.DTSJ700 === "-")
                ) {
                    addstrtip("第29项门锁紧(2)测量数据与结果矛盾!");
                }
                if (/^(>|≥|大于|大于等于)?([1-9]\d*(\.\d+)?|0\.\d+)?(mm|MM|毫米)?$/.test(dat.DTSJ700)) {
                    if (dat.JYJG61_JYJL29 === "√" || dat.JYJG61_JYJL29 === "△") {
                        if (parseFloat(dat.DTSJ700) < 7) {
                            addstrtip("第29项锁紧啮合深度测量数据显示结果应为不符合!");
                        }
                    }
                    if (dat.JYJG61_JYJL29 === "×") {
                        if (parseFloat(dat.DTSJ700) >= 7) {
                            addstrtip("第29项锁紧啮合深度测量数据显示结果应为符合!");
                        }
                    }
                } else {
                    addstrtip("第29项锁紧啮合深度测量数值格式错误!");
                }
            }
            //30-39
            if (1) {
                //31平衡系数
                //DTSJ702,"JYJG67_JYJL31":"","DTBZ67":"","DTSJ74":"","JYJG68_JYJL31":"","DTBZ68":""
                if (1) {
                    if (
                        (dat.JYJG67_JYJL31 === "-" && dat.DTSJ702 != "-") ||
                        (dat.JYJG67_JYJL31 != "-" && dat.DTSJ702 === "-")
                    ) {
                        addstrtip("第31项平衡系数(1)测量数据与结果矛盾!");
                    }
                    if (
                        (dat.JYJG68_JYJL31 === "-" && dat.DTSJ74 != "-") ||
                        (dat.JYJG68_JYJL31 != "-" && dat.DTSJ74 === "-")
                    ) {
                        addstrtip("第31项平衡系数(2)测量数据与结果矛盾!");
                    }
                    if (dat.JYJG90_JYJL42 != "-") {
                        if (/^([1-9]\d*(\.\d+)?|0\.\d+)$/.test(dat.DTSJ702)) {
                            if (dat.JYJG67_JYJL31 === "√" || dat.JYJG67_JYJL31 === "△") {
                                if (
                                    parseFloat(dat.DTSJ702) < 40 ||
                                    parseFloat(dat.DTSJ702) > 50
                                ) {
                                    addstrtip("第31项平衡系数(1)测量数据显示结果应为不符合!");
                                }
                            }
                            if (dat.JYJG67_JYJL31 === "×") {
                                if (
                                    parseFloat(dat.DTSJ702) >= 40 &&
                                    parseFloat(dat.DTSJ702) <= 50
                                ) {
                                    addstrtip("第31项平衡系数(1)测量数据显示结果应为符合!");
                                }
                            }
                            if (dat.JYJG67_JYJL31 === "-") {
                                addstrtip("第31项平衡系数(1)测量数据与结果矛盾!");
                            }
                            if (dat.JYJG67_JYJL31 === "×") {
                                const rs32_34 =
                                    dat.JYJG69_JYJL32 !== "-" ||
                                    dat.JYJG70_JYJL33 !== "-" ||
                                    dat.JYJG71_JYJL33 !== "-" ||
                                    dat.JYJG72_JYJL34 !== "-" ||
                                    dat.JYJG73_JYJL34 !== "-" ||
                                    dat.JYJG74_JYJL34 !== "-" ||
                                    dat.JYJG75_JYJL34 !== "-";
                                const rs35_39 =
                                    dat.JYJG76_JYJL35 !== "-" ||
                                    dat.JYJG77_JYJL36 !== "-" ||
                                    dat.JYJG78_JYJL36 !== "-" ||
                                    dat.JYJG79_JYJL38 !== "-" ||
                                    dat.JYJG80_JYJL39 !== "-" ||
                                    dat.JYJG81_JYJL39 !== "-" ||
                                    dat.JYJG82_JYJL39 !== "-" ||
                                    dat.JYJG83_JYJL39 !== "-";
                                const rs40_43 =
                                    dat.JYJG84_JYJL40 !== "-" ||
                                    dat.JYJG85_JYJL40 !== "-" ||
                                    dat.JYJG86_JYJL40 !== "-" ||
                                    dat.JYJG87_JYJL40 !== "-" ||
                                    dat.JYJG88_JYJL41 !== "-" ||
                                    dat.JYJG89_JYJL41 !== "-" ||
                                    dat.JYJG90_JYJL42 !== "-" ||
                                    dat.JYJG91_JYJL43 !== "-";
                                if (rs32_34 || rs35_39 || rs40_43) {
                                    addstrtip("平衡系数不合格,第32-43项应为“-”!");
                                }
                            }
                        } else {
                            addstrtip("第31项平衡系数(1)测量数值格式错误!");
                        }
                        const phxs2 = document
                            .getElementById("1701504018295d212")
                            .innerText.trim();
                        if (phxs2 != "-" || dat.JYJG68_JYJL31 != "-") {
                            addstrtip("制动试验时只进行第31项(1)的检验!");
                        }
                    } else {
                        if (dat.DTSJ702 != "-" || dat.JYJG67_JYJL31 != "-") {
                            addstrtip("没有制动试验时只进行第31项(2)的检验!");
                        }
                        const phxs22 = document
                            .getElementById("1701504018295d212")
                            .innerText.trim();
                        if (/^([1-9]\d*(\.\d+)?|0\.\d+)$/.test(phxs22)) {
                            if (dat.JYJG68_JYJL31 === "√" || dat.JYJG68_JYJL31 === "△") {
                                if (parseFloat(phxs22) < 40 || parseFloat(phxs22) > 50) {
                                    addstrtip("第31项平衡系数(2)测量数据显示结果应为不符合!");
                                }
                            }
                            if (dat.JYJG68_JYJL31 === "×") {
                                if (parseFloat(phxs22) >= 40 && parseFloat(phxs22) <= 50) {
                                    addstrtip("第31项平衡系数(2)测量数据显示结果应为符合!");
                                }
                            }
                            if (dat.JYJG68_JYJL31 === "-") {
                                addstrtip("第31项平衡系数(2)测量数据与结果矛盾!");
                            }
                            if (dat.JYJG68_JYJL31 === "×") {
                                const rs32_34 =
                                    dat.JYJG69_JYJL32 !== "-" ||
                                    dat.JYJG70_JYJL33 !== "-" ||
                                    dat.JYJG71_JYJL33 !== "-" ||
                                    dat.JYJG72_JYJL34 !== "-" ||
                                    dat.JYJG73_JYJL34 !== "-" ||
                                    dat.JYJG74_JYJL34 !== "-" ||
                                    dat.JYJG75_JYJL34 !== "-";
                                const rs35_39 =
                                    dat.JYJG76_JYJL35 !== "-" ||
                                    dat.JYJG77_JYJL36 !== "-" ||
                                    dat.JYJG78_JYJL36 !== "-" ||
                                    dat.JYJG79_JYJL38 !== "-" ||
                                    dat.JYJG80_JYJL39 !== "-" ||
                                    dat.JYJG81_JYJL39 !== "-" ||
                                    dat.JYJG82_JYJL39 !== "-" ||
                                    dat.JYJG83_JYJL39 !== "-";
                                const rs40_43 =
                                    dat.JYJG84_JYJL40 !== "-" ||
                                    dat.JYJG85_JYJL40 !== "-" ||
                                    dat.JYJG86_JYJL40 !== "-" ||
                                    dat.JYJG87_JYJL40 !== "-" ||
                                    dat.JYJG88_JYJL41 !== "-" ||
                                    dat.JYJG89_JYJL41 !== "-" ||
                                    dat.JYJG90_JYJL42 !== "-" ||
                                    dat.JYJG91_JYJL43 !== "-";
                                if (rs32_34 || rs35_39 || rs40_43) {
                                    addstrtip("平衡系数不合格,第32-43项应为“-”!");
                                }
                            }
                        } else {
                            if (/^40(%)?-50$/.test(phxs22)) {
                                if (dat.JYJG68_JYJL31 === "×") {
                                    addstrtip('第31项平衡系数(2)"40-50"表明结果应为符合!');
                                }
                            } else {
                                addstrtip("第31项平衡系数(2)测量数值格式错误!");
                            }
                        }
                    }
                }
            }
            //39 上行超速保护
            //"JYJG80_JYJL39":"","DTBZ80":"","JYJG81_JYJL39":"","DTBZ81":"","JYJG82_JYJL39":"","DTBZ82":"","JYJG83_JYJL39":"","DTBZ83":""
            if (manufactureDate != null) {
                if (manufactureDate < new Date('2004-01-01')) {
                    if (
                        dat.JYJG80_JYJL39 != "-" ||
                        dat.JYJG81_JYJL39 != "-" ||
                        dat.JYJG82_JYJL39 != "-" ||
                        dat.JYJG83_JYJL39 != "-"
                    ) {
                        addstrtip("注意2004.1.1之前生产的电梯,上行超速保护是否不检验!");
                    }
                }
                if (manufactureDate >= new Date('2004-01-01')) {
                    if (
                        dat.JYJG80_JYJL39 === "-" ||
                        dat.JYJG81_JYJL39 === "-" ||
                        dat.JYJG83_JYJL39 === "-"
                    ) {
                        addstrtip(
                            "注意2004.1.1之后生产的电梯,上行超速保护是否需要检验!"
                        );
                    }
                }
            }
            //40-43
            if (1) {
                //40 轿厢意外移动
                //40."JYJG84_JYJL40":"","DTBZ84":"","JYJG85_JYJL40":"","DTBZ85":"","JYJG86_JYJL40":"","DTBZ86":"","JYJG87_JYJL40":"","DTBZ87":""
                if (manufactureDate != null) {
                    if (manufactureDate < new Date('2016-07-01')) {
                        if (
                            dat.JYJG84_JYJL40 != "-" ||
                            dat.JYJG85_JYJL40 != "-" ||
                            dat.JYJG86_JYJL40 != "-" ||
                            dat.JYJG87_JYJL40 != "-"
                        ) {
                            addstrtip(
                                "注意2016.7.1之前生产的电梯,轿厢意外移动是否不检验!"
                            );
                        }
                    }
                    if (manufactureDate >= new Date('2016-07-01')) {
                        if (
                            dat.JYJG84_JYJL40 === "-" ||
                            dat.JYJG85_JYJL40 === "-" ||
                            dat.JYJG87_JYJL40 === "-"
                        ) {
                            addstrtip(
                                "注意2016.7.1之后生产的电梯,轿厢意外移动是否需要检验!"
                            );
                        }
                    }
                }
                if (manufactureDate != null) {
                    if (manufactureDate >= new Date('2004-01-01') && manufactureDate < new Date('2016-07-01')) {
                        if (dat.JYJG86_JYJL40 != "-") {
                            addstrtip('注意制造于2004.01.01至2016.07.01的电梯,UCMP40(3)是否应为无此项!')
                        }
                    }
                    if (manufactureDate >= new Date('2016-07-01')) {
                        if (dat.JYJG82_JYJL39 != dat.JYJG86_JYJL40) {
                            addstrtip('注意制造于2016.07.01以后的电梯,上行超速保护39(3)和UCMP40(3)是否应相同,若确实采用了不同的制动装置,可忽略!')
                        }
                    }
                }
                //42 125制动试验
                //"JYJG90_JYJL42":"","DTBZ90":""
                if (lastBrakingDate != null) {
                    if (lastBrakingDate.getFullYear() === new Date().getFullYear()) {
                        if (dat.JYJG90_JYJL42 === "-") {
                            addstrtip("最近制动试验是在今年,第42项应为符合!");
                        }
                    }
                    if (lastBrakingDate.getFullYear() != new Date().getFullYear()) {
                        if (dat.JYJG90_JYJL42 != "-") {
                            addstrtip("最近制动试验不在今年,第42项应为“-”!");
                        }
                    }
                }
            }
        }
    }
    function StringToDate(str) {
        var strDate = str.split(" ");

        var strDatepart = strDate[0].split("-");

        var dtDate = new Date(strDatepart[0], strDatepart[1] - 1, strDatepart[2]);

        return dtDate;
    }
    function YearMonthToYearMonthDay(str) {
        if (str.length === 7) {
            str = str.concat("-01");
        }
        return str.trim();
    }
    function ZifuchuanIsDate(strdate) {
        //isNaN(strdate)返回为false则是日期格式;排除data为纯数字的情况(此处不考虑只有年份的日期,如‘2020)
        if (isNaN(strdate) && !isNaN(Date.parse(strdate))) {
            return true;
        } else {
            return false;
        }
    }
    function addstrtip(str) {
        strtip = strtip.concat("\n");
        tipnum = tipnum + 1;
        strtip = strtip.concat(tipnum.toString());
        strtip = strtip.concat("、");
        strtip = strtip.concat(str);
    }
    function isNormalInteger(str) {
        var n = Math.floor(Number(str));

        return n !== Infinity && String(n) === str && n >= 0;
    }
    function isValidSBDMFormat(text) {
        // 完整的正则表达式,匹配格式:(3110|3120) + 数组中的值 + 2000到2100之间的年份 + 五位数字顺序号
        const regex = /^(3110|3120)\d{6}(\d{4})\d{6}$/;
        // 首先判断基本的格式匹配
        if (regex.test(text)) {
            const match = text.match(regex);
            if (match) {
                var year = parseInt(match[2], 10);
                if (year >= 2000 && year <= 2100) {
                    return true;
                } else {
                    return false;
                }
            }
        } else {
            return false;
        }
    }
    // 解析日期,如果没有具体的日,则默认为月的第一天
    function parseDate(dateStr) {
        const dateRegex = /^(\d{4})年(\d{1,2})月(\d{1,2})?日?$/;
        const match = dateStr.match(dateRegex);
        if (!match) {
            return null;
        }
        const year = parseInt(match[1], 10);
        const month = parseInt(match[2], 10) - 1;
        const day = match[3] ? parseInt(match[3], 10) : 1;
        return new Date(year, month, day);
    }
    //根据监督检验日期验证某一年是检验还是检测,并给出该年具体检验检测日期
    //接收一个监督检验日期字符串
    function elevatorInspectionStr(supervisionDateStr, queryYear) {
        const dateRegex = /^(\d{4})年(\d{1,2})月/; // 正则表达式用于解析年份和月份
        const match = supervisionDateStr.match(dateRegex);
        if (match) {
            const supervisionYear = parseInt(match[1], 10);
            const supervisionMonth = parseInt(match[2], 10);
            const inspectionYears = [1, 4, 7, 9, 11, 13, 15]; // 检验规则年份
            let inspectionDates = [];
            // 生成检验日期
            inspectionYears.forEach((year) => {
                if (supervisionYear + year <= queryYear) {
                    inspectionDates.push(supervisionYear + year);
                }
            });
            // 处理超过15年后每年都检验的情况
            if (queryYear - supervisionYear > 15) {
                for (let year = supervisionYear + 16; year <= queryYear; year++) {
                    inspectionDates.push(year);
                }
            }
            // 判断查询年份需要的操作
            if (inspectionDates.includes(queryYear)) {
                return { result: "检验", year: queryYear, month: supervisionMonth };
            } else {
                return { result: "检测", year: queryYear, month: supervisionMonth };
            }
        } else {
            return { result: "错误", year: 0, month: 0 };
        }
    }
    //根据监督检验日期验证某一年是检验还是检测,并给出该年份后下次检验日期
    //接收监督检验日期和验证日期date类对象
    function elevatorInspection(supervisionDate, queryDate) {
        if (supervisionDate >= queryDate) {
            return { result: "错误", date: null };
        }
        if (
            new Date(
                queryDate.getFullYear(),
                supervisionDate.getMonth(),
                supervisionDate.getDate()
            ) < new Date(2023, 3, 1)
        ) {
            // 输出结果
            return {
                result: "检验",
                date: new Date(
                    queryDate.getFullYear() + 1,
                    supervisionDate.getMonth(),
                    supervisionDate.getDate()
                ),
            };
        } else {
            const supervisionYear = supervisionDate.getFullYear();
            const supervisionMonth = supervisionDate.getMonth();
            const queryYear = queryDate.getFullYear();
            const inspectionIntervals = [1, 4, 7, 9, 11, 13, 15]; // 定期检验的间隔年份
            let inspectionYears = new Set();
            // 生成所有定期检验的年份
            for (let year = supervisionYear; year <= queryYear + 15; year++) {
                if (
                    year - supervisionYear > 15 ||
                    inspectionIntervals.includes(year - supervisionYear)
                ) {
                    inspectionYears.add(year);
                }
            }
            // 确定查询年份是否是检验年份
            let inspectionStatus = inspectionYears.has(queryYear) ? "检验" : "检测";
            // 计算下一次检验的年份
            let nextInspectionYear = [...inspectionYears].find(
                (year) => year > queryYear
            );

            // 创建下次检验日期的Date对象
            let nextInspectionDate = nextInspectionYear
                ? new Date(nextInspectionYear, supervisionMonth, 1)
                : null;

            // 输出结果
            return { result: inspectionStatus, date: nextInspectionDate };
        }
    }
    function isValidSYDJFormat(text) {
        // 完整的正则表达式,匹配格式:(3110|3120) + 数组中的值 + 2000到2100之间的年份 + 五位数字顺序号
        const regex = /^(3110|3120)\d{6}(\d{4})\d{6}$/;
        // 首先判断基本的格式匹配
        if (regex.test(text)) {
            const match = text.match(regex);
            if (match) {
                var year = parseInt(match[2], 10);
                if (year >= 2000 && year <= 2100) {
                    return true;
                } else {
                    return false;
                }
            }
        } else {
            return false;
        }
    }
    function calculateBrakeDate(initialDate, queryDate) {
        const brakeIntervalBefore2024 = 5; // 2024年4月1日之前的制动间隔
        const brakeIntervalAfter2024 = 6; // 2024年4月1日及以后的制动间隔
        let resultDate = new Date(initialDate.getTime());
        let resultDatetemp = null;
        let currentYear = 0;
        while (resultDate <= queryDate) {
            resultDatetemp = new Date(resultDate.getTime());
            currentYear = resultDate.getFullYear();
            // 如果检验日期在2013年1月1日之前,第一次制动日期是2018年
            if (resultDate < new Date(2013, 0, 1)) {
                resultDate.setFullYear(2018);
            }
            // 如果检验日期在2013年1月1日及之后,2019.4.1之前,第一次制动日期隔5年做
            else if (resultDate < new Date(2019, 3, 1)) {
                resultDate.setFullYear(currentYear + brakeIntervalBefore2024);
            }
            // 如果检验日期在2019年4月1日及之后,第一次制动日期隔6年做
            else {
                resultDate.setFullYear(currentYear + brakeIntervalAfter2024);
            }
        }
        return resultDatetemp;
    }
    // 检查项目的键值对
    function getXMKeyValues(jsonData, specificNumbers, symbolToCheck) {
        const regex = /^JYJG(\d+)_JYJL(\d+)$/;
        let validKeyValues = {};

        for (let key in jsonData) {
            const match = key.match(regex);
            if (match) {
                const value = jsonData[key];
                const number = parseInt(match[2], 10);
                if (value === symbolToCheck && specificNumbers.has(number)) {
                    validKeyValues[key] = value;
                }
            }
        }

        return validKeyValues;
    }
    // 检查键值对是否符合条件
    function checkDTBZValues(jsonData) {
        const regex = /^DTBZ(\d+)$/;
        let results = [];

        for (let key in jsonData) {
            const match = key.match(regex);
            if (match) {
                const number = parseInt(match[1], 10);
                if (number >= 1 && number <= 91) {
                    if (jsonData[key] !== "") {
                        results.push({ key, value: jsonData[key] });
                    }
                }
            }
        }
        return results;
    }
    // 封面前得到后
    function getdtt(label) {
        var labelEl = Array.from(document.getElementsByTagName("span")).find(
            (el) => el.textContent === label
        );
        var widgetFieldEl = labelEl.parentElement;
        while (!widgetFieldEl.classList.contains("widget-field")) {
            widgetFieldEl = widgetFieldEl.parentElement;
        }
        return widgetFieldEl.nextElementSibling.innerText.trim();
    }
    // 表格前得到后
    function gethtt(label) {
        var labelEl = Array.from(document.getElementsByTagName("td")).find(
            (el) => el.textContent.trim() === label
        );
        return labelEl.nextElementSibling.innerText.trim();
    }
    // 直接得到
    function getdt(label) {
        var labelEl = Array.from(document.getElementsByTagName("span")).find(
            (el) => el.textContent === label
        );
        var widgetFieldEl = labelEl.parentElement;
        while (!widgetFieldEl.classList.contains("widget-field")) {
            widgetFieldEl = widgetFieldEl.parentElement;
        }
        return widgetFieldEl.innerText.trim();
    }
    // 获取表格对应值
    function getht(label) {
        var labelEl = Array.from(document.getElementsByTagName("td")).find(
            (el) => el.textContent.trim() === label
        );
        return labelEl.innerText.trim();
    }
    // 假设这段HTML代码已经在页面上加载

    // 定义一个函数来根据label的文本内容找到对应的span元素并获取其文本
    function gett(labelText) {
        // 使用XPath选择器来找到包含特定文本的label元素
        var label = document.evaluate(
            "//label[contains(., '" + labelText + "')]",
            document,
            null,
            XPathResult.FIRST_ORDERED_NODE_TYPE,
            null
        ).singleNodeValue;

        // 如果找到了label元素,则寻找它后面的span元素
        if (label) {
            var span = label.nextElementSibling; // 获取label元素的下一个兄弟元素
            if (span && span.classList.contains("widget-content")) {
                // 确保找到的元素是我们要的span
                return span.textContent || span.innerText; // 获取span元素的文本内容
            }
        }
        return null; // 如果没有找到,返回null
    }
    function replaceValuesWithFun(jn, fun) {
        // 遍历JSON对象的所有键
        for (var key in jn) {
            if (jn.hasOwnProperty(key)) {
                // 获取当前键对应的值
                var value = jn[key];
                // 使用提供的函数fun处理键名,并获取返回值
                var funResult = fun(key);
                // 如果fun返回的不是null,则用fun的返回值替换原值
                if (funResult !== null) {
                    jn[key] = funResult;
                }
            }
        }
        // 返回修改后的JSON对象
        return jn;
    }
    function validateAndExplainCode(input) {
        // 正则表达式匹配形式“详见(JD101)号工具箱”,并仅提取最后两位数字
        const regex =
            /^详见((JD\d{1}\d{2}|SZSJD\d{2}|WZJD\d{2}|ZWJD\d{2}|GYJD\d{2}))号工具箱$/;
        const match = input.match(regex);

        if (!match) {
            return { isValid: false, message: "输入格式不正确。" };
        }

        // 提取编码部分
        const code = match[1];
        let department = "";
        // 只提取最后两位数字
        let sequence = parseInt(code.slice(-2), 10); // 使用slice(-2)直接从字符串末尾取最后两个字符

        // 根据编码解释其含义
        if (/^JD1\d{2}$/.test(code)) {
            department = "机电一部";
            if (sequence > 10)
                return { isValid: false, message: "机电一部顺序号超出范围。" };
        } else if (/^JD2\d{2}$/.test(code)) {
            department = "机电二部";
            if (sequence < 1 || sequence > 4)
                return { isValid: false, message: "机电二部顺序号超出范围。" };
        } else if (/^JD3\d{2}$/.test(code)) {
            department = "机电三部";
            if (sequence > 8)
                return { isValid: false, message: "机电三部顺序号超出范围。" };
        } else if (/^SZSJD\d{2}$/.test(code)) {
            department = "石嘴山分院";
            if (sequence > 3)
                return { isValid: false, message: "石嘴山分院顺序号超出范围。" };
        } else if (/^WZJD\d{2}$/.test(code)) {
            department = "吴忠分院";
            if (sequence > 3)
                return { isValid: false, message: "吴忠分院顺序号超出范围。" };
        } else if (/^ZWJD\d{2}$/.test(code)) {
            department = "中卫分院";
            if (sequence > 3)
                return { isValid: false, message: "中卫分院顺序号超出范围。" };
        } else if (/^GYJD\d{2}$/.test(code)) {
            department = "固原分院";
            if (sequence > 3)
                return { isValid: false, message: "固原分院顺序号超出范围。" };
        } else {
            return { isValid: false, message: "未知的编码部分。" };
        }

        return {
            isValid: true,
            message: `本次检验使用了${department}:${code},序号为${sequence}的工具箱。`,
        };
    }
    function validateString(str) {
        // 获取当前年份的后两位
        const currentYearSuffix = new Date().getFullYear().toString().slice(-2);

        // 正则表达式匹配中文全角或英文半角的小括号
        const regex =
            /^本记录第([\d+、,]+)项的检验结果为不符合使用单位已经承诺采取安全措施,对电梯实行监护使用(见编号为TZS-DT-${currentYearSuffix}\d{5}的《电梯检验意见通知书》)$/;
        const match = str.match(regex);

        if (!match) {
            // 如果不匹配,直接返回false
            return false;
        }

        // 提取并分割数字字符串
        const numbersStr = match[1];
        const numbers = numbersStr
            .split(/[\d+、,]+/)
            .filter((n) => n !== "")
            .map(Number);

        // 验证数字是否在1到43的范围内
        const isValidNumbers = numbers.every((num) => num >= 1 && num <= 43);

        // 验证XX4是否符合格式
        const xx4Match = str.match(/TZS-DT-${currentYearSuffix}(\d{5})/);
        const isValidXX4 = xx4Match && xx4Match[1].length === 5;

        // 返回最终验证结果
        return isValidNumbers && isValidXX4;
    }
    //不符合项序号也验证
    function validateString1(str, ssz) {
        // 将数组 ssz 转换成字符串并用顿号连接,同时支持中文和英文逗号
        const items = ssz.join("[、,]");
        // 构建正则表达式的动态部分,用于匹配 "第XX1、XX2、XX3项"
        const itemPattern = `第${items}项`;
        // 获取当前年份的最后两位
        const year = new Date().getFullYear().toString().slice(-2);
        // 定义正则表达式,匹配整个字符串
        // 注意:此处假设XX4的格式是 "TZS-DT-" 后跟 7 位数字,其中前两位是年份
        // 添加对中英文小括号的支持
        const regex = new RegExp(
            `^本记录${itemPattern}的检验结果为不符合[,,]使用单位已经承诺采取安全措施[,,]对电梯实行监护使用[((]见编号为TZS-DT-${year}\\d{5}的《电梯检验意见通知书》[))]$`
        );
        // 测试字符串是否符合正则表达式
        return regex.test(str);
    }
    //通过全国统一社会信用代码得到所在省份名称
    function getProvinceByKeyValue(code, jsonData) {
        // 确保字符串长度为18
        if (code.length !== 18) {
            return "";
        }

        // 获取第3到4位的子字符串
        const keyValue = code.substring(2, 4);

        // 查找qg对象中对应的键名
        for (const province in jsonData) {
            if (jsonData[province] === keyValue) {
                return province; // 返回找到的键名(省份名)
            }
        }

        // 如果没有找到对应的键,返回错误信息
        return "";
    }
    //对全国统一社会信用代码进行校验,有问题,和实际计算有差异
    function isValidUnifiedSocialCreditCode(code) {
        // 权重数组
        const weights = [
            1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28,
        ];
        // 校验码对应表
        const checkCodes = "0123456789ABCDEFGHJKLMNPQRTUWXY";
        // 字符到数字的映射,大写字母按照顺序映射,不包括I、O、S、V、Z
        const charToNumberMap = {
            A: 10,
            B: 11,
            C: 12,
            D: 13,
            E: 14,
            F: 15,
            G: 16,
            H: 17,
            J: 18,
            K: 19,
            L: 20,
            M: 21,
            N: 22,
            P: 23,
            Q: 24,
            R: 25,
            T: 26,
            U: 27,
            W: 28,
            X: 29,
            Y: 30,
        };

        // 确保统一社会信用代码长度为18位
        if (code.length !== 18) {
            return false;
        }

        // 计算加权和
        let sum = 0;
        for (let i = 0; i < 17; i++) {
            const char = code.charAt(i);
            let charCode;
            if (!isNaN(char)) {
                // 如果是数字,直接转换
                charCode = parseInt(char, 10);
            } else {
                // 如果是字母,通过映射转换
                charCode = charToNumberMap[char];
                if (charCode === undefined) {
                    // 如果字母不在映射中(如I、O、S、V、Z),则代码无效
                    return false;
                }
            }
            sum += charCode * weights[i];
        }

        // 计算校验码
        const remainder = sum % 31;
        const expectedCheckCode = checkCodes.charAt(remainder);

        // 校验最后一位是否匹配
        const actualCheckCode = code.charAt(17).toUpperCase();
        return expectedCheckCode === actualCheckCode;
    }
    // 函数用于判断18位字符串中第3到8位是否是nx对象中某个键的值,并返回对应的键名
    function findKeyFromCode(str, jsonData) {
        // 将给定字符串中的第3到8位提取出来
        var code = str.substr(2, 6);
        // 循环遍历 JSON 数据,查找匹配的键名
        for (var key in jsonData) {
            if (jsonData.hasOwnProperty(key)) {
                if (jsonData[key] === code) {
                    return key;
                }
            }
        }

        // 如果没有找到匹配的键名,返回空字符串
        return "";
    }
    function checkRegionContainment(a, b) {
        // 检查b是否直接是a
        if (a === b) {
            return true;
        }

        // 寻找a和b所在的最高级区域
        const aRegion = findRegion(a, regions);
        const bRegion = findRegion(b, regions);

        if (!aRegion || !bRegion) {
            return false; // 如果a或b没有找到对应的区域,返回false
        }

        // 判断b所在的区域是否包含a所在的区域
        return isInRegion(a, b, regions);
    }
    // 递归地在regions中查找key所在的区域
    function findRegion(key, region) {
        if (region.hasOwnProperty(key)) {
            return region; // 如果找到了key,返回包含它的区域对象
        }

        // 遍历当前区域的所有子区域
        for (const subKey in region) {
            if (region[subKey] instanceof Object) {
                const result = findRegion(key, region[subKey]);
                if (result) return result;
            }
        }
        return null; // 如果没有找到,返回null
    }
    //验证为空
    //验证为空
    function isItemsEmpty() {
        //封面
        if (1) {
            if (getdtt("使用单位:") === "") {
                addstrtip("使用单位名称为空!");
                //highlightedFields.push(ddh('使用单位:'))
            }
            if (getdtt("设备代码:") === "") {
                addstrtip("设备代码为空!");
            }
            if (getdtt("设备类别:") === "") {
                addstrtip("设备类别为空!");
            }
            if (getdtt("检验日期:") === "") {
                addstrtip("封面检验日期为空!");
            }
        }
        //概况
        if (1) {
            if (gethtt("使用单位名称") === "") {
                addstrtip("概况使用单位名称为空!");
            }
            if (gethtt("统一社会信用代码") === "") {
                addstrtip("统一社会信用代码为空!");
            }
            if (gethtt("安装地点") === "") {
                addstrtip("安装地点为空!");
            }
            if (gethtt("设备品种") === "") {
                addstrtip("设备品种为空!");
            }
            if (gethtt("产品型号") === "") {
                addstrtip("产品型号为空!");
            }
            if (gethtt("产品编号") === "") {
                addstrtip("产品编号为空!");
            }
            if (gethtt("单位内编号") === "") {
                addstrtip("单位内编号为空!");
            }
            if (gethtt("使用登记证编号") === "") {
                addstrtip("使用登记证编号为空!");
            }
            if (gethtt("安全管理人员") === "") {
                addstrtip("安全管理人员为空!");
            }
            if (gethtt("电话") === "") {
                addstrtip("安全管理人员联系电话为空!");
            }
            if (gethtt("制造单位名称") === "") {
                addstrtip("制造单位名称为空!");
            }
            if (gethtt("制造日期") === "") {
                addstrtip("制造日期为空!");
            }
            if (gethtt("改造单位名称") === "") {
                addstrtip("改造单位名称为空!");
            }
            if (gethtt("改造日期") === "") {
                addstrtip("改造日期为空!");
            }
            if (gethtt("维护保养单位名称") === "") {
                addstrtip("维保单位名称为空!");
            }
            if (gethtt("最近一次制动试验确认日期") === "") {
                addstrtip("最近一次制动试验确认日期为空!");
            }
            if (gethtt("监督检验日期") === "") {
                addstrtip("监督检验日期为空!");
            }
            if (gethtt("是否加装电梯") === "") {
                addstrtip("是否加装电梯信息为空!");
            }
            if (gethtt("是否住宅电梯") === "") {
                addstrtip("是否住宅电梯信息为空!");
            }
            if (gethtt("下次检验日期") === "") {
                addstrtip("下次检验日期为空!");
            }
            if (gethtt("额定载重量") === "") {
                addstrtip("电梯额定载荷为空!");
            }
            if (gethtt("额定速度") === "") {
                addstrtip("电梯运行速度为空!");
            }
            if (dat.电梯层站 === "") {
                addstrtip("电梯层站为空!");
            }
            if (dat.电梯站数 === "") {
                addstrtip("电梯站数为空!");
            }
            if (dat.电梯门数 === "") {
                addstrtip("电梯门数为空!");
            }
            if (gethtt("控制方式") === "") {
                addstrtip("控制方式为空!");
            }
            if (gethtt("检验依据") === "") {
                addstrtip("检验依据为空!");
            }
            if (gethtt("主要检验仪器设备") === "") {
                addstrtip("主要检验仪器设备为空!");
            }
            if (getdt("XCJYTJ") === "") {
                addstrtip("现场检验条件为空!");
            }
            if (getdt("XCAQTJ") === "") {
                addstrtip("现场安全条件为空!");
            }
            if (getdt("内部(全面)检验结论(电类定检)") === "") {
                addstrtip("检验结论为空!");
            }
            if (getdt("内部(全面)检验日期(电类定检)") === "") {
                addstrtip("概况检验日期为空!");
            }
        }
        //1-5
        if (1) {
            if (gett("JYJG1_JYJL1") === "") {
                addstrtip("第1项第1个检验结果为空!");
            }
            if (gett("JYJG2_JYJL1") === "") {
                addstrtip("第1项第2个检验结果为空!");
            }
            if (gett("JYJG3_JYJL1") === "") {
                addstrtip("第1项第3个检验结果空!");
            }

            if (gett("JYJG4_JYJL2") === "") {
                addstrtip("第2项第1个检验结果空!");
            }

            if (gett("JYJG5_JYJL2") === "") {
                addstrtip("第2项第2个检验结果空!");
            }

            if (gett("JYJG6_JYJL3") === "") {
                addstrtip("第3项第1个检验结果空!");
            }

            if (gett("JYJG7_JYJL4") === "") {
                addstrtip("第4项第1个检验结果空!");
            }

            if (gett("JYJG8_JYJL4") === "") {
                addstrtip("第4项第2个检验结果空!");
            }

            if (gett("JYJG9_JYJL4") === "") {
                addstrtip("第4项第3个检验结果空!");
            }

            if (gett("JYJG10_JYJL4") === "") {
                addstrtip("第4项第4个检验结果空!");
            }

            if (gett("JYJG11_JYJL5") === "") {
                addstrtip("第5项第1个检验结果空!");
            }
        }
        //6-10
        if (1) {
            if (gett("JYJG12_JYJL6") === "") {
                addstrtip("第6项第1个检验结果为空!");
            }
            if (gett("JYJG13_JYJL6") === "") {
                addstrtip("第6项第2个检验结果为空!");
            }
            if (gett("JYJG14_JYJL6") === "") {
                addstrtip("第6项第3个检验结果为空!");
            }
            if (gett("JYJG15_JYJL6") === "") {
                addstrtip("第6项第4个检验结果为空!");
            }
            if (gett("JYJG16_JYJL7") === "") {
                addstrtip("第7项第1个检验结果为空!");
            }
            if (gett("JYJG17_JYJL8") === "") {
                addstrtip("第8项第1个检验结果为空!");
            }
            if (gett("JYJG18_JYJL8") === "") {
                addstrtip("第8项第2个检验结果为空!");
            }
            if (gett("JYJG19_JYJL9") === "") {
                addstrtip("第9项第1个检验结果为空!");
            }
            if (gett("JYJG20_JYJL10") === "") {
                addstrtip("第10项第1个检验结果为空!");
            }
        }
        //11-15
        if (1) {
            if (gett("JYJG21_JYJL11") === "") {
                addstrtip("第11项第1个检验结果为空!");
            }
            if (gett("JYJG22_JYJL12") === "") {
                addstrtip("第12项第1个检验结果为空!");
            }
            if (gett("JYJG23_JYJL12") === "") {
                addstrtip("第12项第2个检验结果为空!");
            }
            if (gett("JYJG24_JYJL12") === "") {
                addstrtip("第12项第3个检验结果为空!");
            }
            if (gett("JYJG25_JYJL13") === "") {
                addstrtip("第13项第1个检验结果为空!");
            }
            if (gett("JYJG26_JYJL13") === "") {
                addstrtip("第13项第2个检验结果为空!");
            }
            if (gett("JYJG27_JYJL13") === "") {
                addstrtip("第13项第3个检验结果为空!");
            }
            if (gett("JYJG28_JYJL13") === "") {
                addstrtip("第13项第4个检验结果为空!");
            }
            if (gett("JYJG29_JYJL13") === "") {
                addstrtip("第13项第5个检验结果为空!");
            }
            if (gett("JYJG30_JYJL14") === "") {
                addstrtip("第14项第1个检验结果为空!");
            }
            if (gett("JYJG31_JYJL14") === "") {
                addstrtip("第14项第2个检验结果为空!");
            }
            if (gett("JYJG32_JYJL15") === "") {
                addstrtip("第15项第1个检验结果为空!");
            }
            if (gett("JYJG33_JYJL15") === "") {
                addstrtip("第15项第2个检验结果为空!");
            }
            if (gett("JYJG34_JYJL15") === "") {
                addstrtip("第15项第3个检验结果为空!");
            }
        }
        //16-20
        if (1) {
            if (gett("JYJG35_JYJL16") === "") {
                addstrtip("第16项第1个检验结果为空!");
            }
            if (gett("JYJG36_JYJL17") === "") {
                addstrtip("第17项第1个检验结果为空!");
            }
            if (gett("JYJG37_JYJL18") === "") {
                addstrtip("第18项第1个检验结果为空!");
            }
            if (gett("JYJG38_JYJL18") === "") {
                addstrtip("第18项第2个检验结果为空!");
            }
            if (gett("JYJG39_JYJL18") === "") {
                addstrtip("第18项第3个检验结果为空!");
            }
            if (gett("JYJG40_JYJL18") === "") {
                addstrtip("第18项第4个检验结果为空!");
            }
            if (gett("JYJG41_JYJL19") === "") {
                addstrtip("第19项第1个检验结果为空!");
            }
            if (gett("JYJG42_JYJL20") === "") {
                addstrtip("第20项第1个检验结果为空!");
            }
        }
        //21-25
        if (1) {
            if (gett("JYJG43_JYJL21") === "") {
                addstrtip("第21项第1个检验结果为空!");
            }
            if (gett("JYJG44_JYJL21") === "") {
                addstrtip("第21项第2个检验结果为空!");
            }
            if (gett("JYJG45_JYJL21") === "") {
                addstrtip("第21项第3个检验结果为空!");
            }
            if (gett("JYJG46_JYJL21") === "") {
                addstrtip("第21项第4个检验结果为空!");
            }
            if (gett("JYJG47_JYJL22") === "") {
                addstrtip("第22项第1个检验结果为空!");
            }
            if (gett("JYJG48_JYJL22") === "") {
                addstrtip("第22项第2个检验结果为空!");
            }
            if (gett("JYJG49_JYJL23") === "") {
                addstrtip("第23项第1个检验结果为空!");
            }
            if (gett("JYJG50_JYJL24") === "") {
                addstrtip("第24项第1个检验结果为空!");
            }
            if (gett("JYJG51_JYJL24") === "") {
                addstrtip("第24项第2个检验结果为空!");
            }
            if (gett("JYJG52_JYJL25") === "") {
                addstrtip("第25项第1个检验结果为空!");
            }
        }
        //26-30
        if (1) {
            if (gett("JYJG53_JYJL26") === "") {
                addstrtip("第26项第1个检验结果为空!");
            }
            if (gett("JYJG54_JYJL26") === "") {
                addstrtip("第26项第2个检验结果为空!");
            }
            if (gett("JYJG55_JYJL26") === "") {
                addstrtip("第26项第3个检验结果为空!");
            }
            if (gett("JYJG56_JYJL27") === "") {
                addstrtip("第27项第1个检验结果为空!");
            }
            if (gett("JYJG57_JYJL27") === "") {
                addstrtip("第27项第2个检验结果为空!");
            }
            if (gett("JYJG58_JYJL28") === "") {
                addstrtip("第28项第1个检验结果为空!");
            }
            if (gett("JYJG59_JYJL28") === "") {
                addstrtip("第28项第2个检验结果为空!");
            }
            if (gett("JYJG60_JYJL29") === "") {
                addstrtip("第29项第1个检验结果为空!");
            }
            if (gett("JYJG61_JYJL29") === "") {
                addstrtip("第29项第2个检验结果为空!");
            }
            if (gett("JYJG62_JYJL29") === "") {
                addstrtip("第29项第3个检验结果为空!");
            }
            if (gett("JYJG63_JYJL29") === "") {
                addstrtip("第29项第4个检验结果为空!");
            }
            if (gett("JYJG64_JYJL30") === "") {
                addstrtip("第30项第1个检验结果为空!");
            }
            if (gett("JYJG65_JYJL30") === "") {
                addstrtip("第30项第2个检验结果为空!");
            }
            if (gett("JYJG66_JYJL30") === "") {
                addstrtip("第30项第3个检验结果为空!");
            }
        }
        //31-35
        if (1) {
            if (gett("JYJG67_JYJL31") === "") {
                addstrtip("第31项第1个检验结果为空!");
            }
            if (gett("JYJG68_JYJL31") === "") {
                addstrtip("第31项第2个检验结果为空!");
            }
            if (gett("JYJG69_JYJL32") === "") {
                addstrtip("第32项第1个检验结果为空!");
            }
            if (gett("JYJG70_JYJL33") === "") {
                addstrtip("第33项第1个检验结果为空!");
            }
            if (gett("JYJG71_JYJL33") === "") {
                addstrtip("第33项第2个检验结果为空!");
            }
            if (gett("JYJG72_JYJL34") === "") {
                addstrtip("第34项第1个检验结果为空!");
            }
            if (gett("JYJG73_JYJL34") === "") {
                addstrtip("第34项第2个检验结果为空!");
            }
            if (gett("JYJG74_JYJL34") === "") {
                addstrtip("第34项第3个检验结果为空!");
            }
            if (gett("JYJG75_JYJL34") === "") {
                addstrtip("第34项第4个检验结果为空!");
            }
            if (gett("JYJG76_JYJL35") === "") {
                addstrtip("第35项第1个检验结果为空!");
            }
        }
        //36-40
        if (1) {
            if (gett("JYJG77_JYJL36") === "") {
                addstrtip("第36项第1个检验结果为空!");
            }
            if (gett("JYJG78_JYJL36") === "") {
                addstrtip("第37项第1个检验结果为空!");
            }
            if (gett("JYJG79_JYJL38") === "") {
                addstrtip("第38项第1个检验结果为空!");
            }
            if (gett("JYJG80_JYJL39") === "") {
                addstrtip("第39项第1个检验结果为空!");
            }
            if (gett("JYJG81_JYJL39") === "") {
                addstrtip("第39项第2个检验结果为空!");
            }
            if (gett("JYJG82_JYJL39") === "") {
                addstrtip("第39项第3个检验结果为空!");
            }
            if (gett("JYJG83_JYJL39") === "") {
                addstrtip("第39项第4个检验结果为空!");
            }
            if (gett("JYJG84_JYJL40") === "") {
                addstrtip("第40项第1个检验结果为空!");
            }
            if (gett("JYJG85_JYJL40") === "") {
                addstrtip("第40项第2个检验结果为空!");
            }
            if (gett("JYJG86_JYJL40") === "") {
                addstrtip("第40项第3个检验结果为空!");
            }
            if (gett("JYJG87_JYJL40") === "") {
                addstrtip("第40项第4个检验结果为空!");
            }
        }
        //41-43
        if (1) {
            if (gett("JYJG88_JYJL41") === "") {
                addstrtip("第41项第1个检验结果为空!");
            }
            if (gett("JYJG89_JYJL41") === "") {
                addstrtip("第41项第2个检验结果为空!");
            }
            if (gett("JYJG90_JYJL42") === "") {
                addstrtip("第42项第1个检验结果为空!");
            }
            if (gett("JYJG91_JYJL43") === "") {
                addstrtip("第43项第1个检验结果为空!");
            }
        }
        //检验项目中的数值
        if (1) {
            /* if (gett(DTSJ503) === "") {
              addstrtip("第24项(1)测量值为空!");
            } */
            if (dat.DTSJ503 === "") {
                addstrtip("第24项(1)测量值为空!");
            }
            /* if (gett(DTSJ504) === "") {
              addstrtip("第24项(2)测量值为空!");
            } */
            if (dat.DTSJ504 === "") {
                addstrtip("第24项(2)测量值为空!");
            }
            /* if (gett(DTSJ700) === "") {
              addstrtip("第29项(2)测量值为空!");
            } */
            if (dat.DTSJ700 === "") {
                addstrtip("第29项(2)测量值为空!");
            }
            /* if (gett(DTSJ702) === "") {
              addstrtip("第31项(1)测量值为空!");
            } */
            if (dat.DTSJ702 === "") {
                addstrtip("第31项(1)测量值为空!");
            }
            /* if (gett(DTSJ74) === "") {
              addstrtip("第31项(2)测量值为空!");
            } */
            if (dat.DTSJ74 === "") {
                addstrtip("第31项(2)测量值为空!");
            }
        }

    }
    function CoverInfo() {
        username = document
            .getElementById("1581261202417784a")
            .innerText.trim();
        if (!/^[\u4e00-\u9fa5\(\)\(\)]{1,39}$/g.test(username)) {
            addstrtip("注意封面使用单位名称!");
        }
        usernameGK = document
            .getElementById("1555396405619039a")
            .innerText.trim();
        if (username != usernameGK) {
            addstrtip("封面与概况使用单位名称不一致!");
        }
        //设备代码
        if (1) {
            if (gett("设备代码") != "-") {
                const regex = /^(3110|3120)\d{5,6}(\d{4})\d{5,6}$/;
                if (regex.test(gett("设备代码"))) {
                    const sbdmfm = gett("设备代码").match(/^(\d{4})(\d{14}|\d{16})$/);
                    if (
                        /^3110$/.test(sbdmfm[1]) &&
                        !/^曳引驱动乘客电梯$/.test(gett("设备分类代码"))
                    ) {
                        addstrtip('封面设备代码3110表示"曳引驱动乘客电梯"!');
                    }
                    if (
                        /^3120$/.test(sbdmfm[1]) &&
                        !/^曳引驱动载货电梯$/.test(gett("设备分类代码"))
                    ) {
                        addstrtip('封面设备代码3120表示"曳引驱动载货电梯"!');
                    }
                } else {
                    addstrtip("封面设备代码格式错误!");
                }
            }
        }
        if (!/^曳引与强制驱动电梯$/.test(gett("SHEBEILEIBIE"))) {
            addstrtip("封面设备类别错误!");
        }
        jyrq = document
            .getElementById("1710387041337455d")
            .innerText.trim()
            .replace(/年|月|日/g, "-")
            .slice(0, -1); //封面检验日期
        jyrq = YearMonthToYearMonthDay(jyrq);
        if (
            /^\d{4}年\d{1,2}月\d{1,2}日$/.test(
                document.getElementById("1710387041337455d").innerText.trim()
            )
        ) {
        } else {
            addstrtip("封面检验日期格式为xxxx年xx月xx日");
        }
        if (!ZifuchuanIsDate(jyrq)) {
            addstrtip("封面检验日期格式错误!");
        }

    }
    function ProfileInfo() {
        if (!/^-$/.test(gett("使用单位组织机构代码"))) {
            if (!/^[^IOZSV]{18}$/.test(gett("使用单位组织机构代码"))) {
                addstrtip("统一社会信用代码错误!");
            } else {
                let sf = getProvinceByKeyValue(gett("使用单位组织机构代码"), qgsf);
                let nxdm = findKeyFromCode(gett("使用单位组织机构代码"), nx);
                let sfs = gett("使用单位组织机构代码").substring(2, 4);
                let nxdms = gett("使用单位组织机构代码").substring(2, 8);
                if (sf === "") {
                    addstrtip("统一社会信用代码3、4位省份信息错误!");
                } else if (sf != "宁夏回族自治区") {
                    addstrtip('统一社会信用代码3、4位:"' + sfs + '"显示省份为:' + sf);
                } else {
                    if (nxdm === "") {
                        addstrtip("统一社会信用代码第3到8位行政区划代码错误!");
                    } else {
                        if (nxdm != "宁夏回族自治区") {
                            if (!dat["设备使用(所在)地点"].includes(nxdm)) {
                                if (!checkRegionContainment(nxdm, dat["设备使用(所在)地点"])) {
                                    addstrtip(
                                        '注意使用单位统一社会信用代码注册地:"' +
                                        nxdm +
                                        '"是否不在设备所在地!'
                                    );
                                } else {
                                    addstrtip(
                                        '统一社会信用代码第3到8位:"' +
                                        nxdms +
                                        '"显示使用单位在' +
                                        nxdm
                                    );
                                }
                            }
                        }

                    }
                }
            }
        }

        if (!/^(曳引驱动乘客电梯|曳引驱动载货电梯)$/.test(gett("设备分类代码"))) {
            addstrtip("设备品种错误!");
        }
        if (gett("设备型号") != "不明") {
            if (!/^[a-zA-Z0-9./\\_\-()()\s]+$/gi.test(gett("设备型号"))) {
                addstrtip("注意型号!");
            }
        }
        if (gett("设备型号") === "-") {
            addstrtip("产品型号找不到的填“不明”");
        }
        if (gett("产品编号(出厂编号)") != "不明") {
            if (!/^[a-zA-Z0-9./\\_\-()()]+$/gi.test(gett("产品编号(出厂编号)"))) {
                addstrtip("注意产品编号!");
            }
        }
        if (gett("产品编号(出厂编号)") === "-") {
            addstrtip("产品编号找不到的填“不明”");
        }
        //使用登记证编号
        if (1) {
            if (gett("使用证编号") != "-") {
                if (isValidSYDJFormat(gett("使用证编号"))) {
                    const sbdmfm = gett("使用证编号").match(/^(\d{4})*$/);
                    if (
                        /^3110$/.test(sbdmfm[1]) &&
                        !/^曳引驱动乘客电梯$/.test(gett("设备分类代码"))
                    ) {
                        addstrtip('使用登记证编号3110表示"曳引驱动乘客电梯"!');
                    }
                    if (
                        /^3120$/.test(sbdmfm[1]) &&
                        !/^曳引驱动载货电梯$/.test(gett("设备分类代码"))
                    ) {
                        addstrtip('使用登记证编号3120表示"曳引驱动载货电梯"!');
                    }
                } else {
                    const regex = /^梯(11|12)[宁](A|B|C|D|E)\d{5}[\(\(]\d{2}[\)\)]$/;
                    // 首先判断基本的格式匹配
                    if (regex.test(gett("使用证编号"))) {
                        const match = gett("使用证编号").match(regex);
                        if (match) {
                            if (
                                /^11$/.test(match[1]) &&
                                !/^曳引驱动乘客电梯$/.test(gett("设备分类代码"))
                            ) {
                                addstrtip('使用登记证编号11表示"曳引驱动乘客电梯"!');
                            }
                            if (
                                /^12$/.test(match[1]) &&
                                !/^曳引驱动载货电梯$/.test(gett("设备分类代码"))
                            ) {
                                addstrtip('使用登记证编号12表示"曳引驱动载货电梯"!');
                            }
                            
                            let checkA_E=checkStringContainsLocation(match[2],dat["设备使用(所在)地点"],regions);
                            if(checkA_E.contains){ 
                            }else{
                                if(checkA_E.azdstrContains===null&&checkA_E.zcdstrRepresents!=null){
                                    addstrtip('注意设备所在地:'+dat["设备使用(所在)地点"]+'可能不在使用登记证注册地:'+checkA_E.zcdstrRepresents+'!');
                                } 
                            }
                            // if (/^A$/.test(match[2])) {
                            //     addstrtip('使用登记证注册地在银川!');
                            // }
                            // if (/^B$/.test(match[2])) {
                            //     addstrtip('使用登记证注册地在石嘴山!');
                            // }
                            // if (/^C$/.test(match[2])) {
                            //     addstrtip('使用登记证注册地在吴忠!');
                            // }
                            // if (/^D$/.test(match[2])) {
                            //     addstrtip('使用登记证注册地在固原!');
                            // }
                            // if (/^E$/.test(match[2])) {
                            //     addstrtip('使用登记证注册地在中卫!');
                            // }
                        }
                    } else {
                        addstrtip('注意是否使用登记证编号错误!');
                    }
                }
            }
        }
        if (!/^[\u4e00-\u9fa5]{2,4}$/g.test(gett("安全管理人员"))) {
            addstrtip("注意安全管理人员!");
        }
        if (!/^(1[3-9]\d{9}|\d{4}-?\d{7})$/g.test(gett("安全管理人员联系电话"))) {
            addstrtip("安全管理人员电话不正确!");
        }
        //制造、改造单位及日期
        if (1) {
            if (!/^[\u4e00-\u9fa5\(\)\(\)]{1,39}$/g.test(gett("制造单位"))) {
                addstrtip("注意制造单位名称!");
            }
            if (gett("制造日期") === "-") {
                addstrtip("制造日期查不到填“不明”!");
            } else {
                if (gett("制造日期") != "不明") {
                    zhizaorq = document
                        .getElementById("1555396405618f688")
                        .innerText.trim()
                        .replace(/年|月|日/g, "-")
                        .slice(0, -1); // 封面检验日期
                    jyrq = YearMonthToYearMonthDay(jyrq);
                    if (!ZifuchuanIsDate(jyrq)) {
                        addstrtip("制造日期格式错误!");
                    }
                }
            }
            if (gett("GZDWMC") != '-') {
                if (!/^[\u4e00-\u9fa5\(\)\(\)]{1,39}$/g.test(gett("GZDWMC"))) {
                    addstrtip("注意改造单位名称!");
                }
            }

            if (gett("改造监督检验日期") === "不明") {
                addstrtip("未进行改造或查不出改造日期填“-”!");
            }
            if (
                /^-$/g.test(gett("GZDWMC")) &&
                !/^-$/g.test(gett("改造监督检验日期"))
            ) {
                addstrtip("注意改造单位名称与改造日期的关系!");
            }
            if (
                !/^-$/g.test(gett("GZDWMC")) &&
                /^-$/g.test(gett("改造监督检验日期"))
            ) {
                addstrtip("注意改造单位名称与改造日期的关系!");
            }
            if (!/^-$/g.test(gett("改造监督检验日期"))) {
                gaizaorq = document
                    .getElementById("1710388733083adc5")
                    .innerText.trim()
                    .replace(/年|月|日/g, "-")
                    .slice(0, -1); //封面检验日期
                gaizaorq = YearMonthToYearMonthDay(gaizaorq);
                if (!ZifuchuanIsDate(gaizaorq)) {
                    addstrtip("改造日期格式错误!");
                }
            }
        }

        if (!/^[\u4e00-\u9fa5\(\)\(\)]{1,39}$/g.test(gett("维保单位名称"))) {
            addstrtip("注意维保单位名称!");
        }
        zhidongrq = document
            .getElementById("1710148356446ba4c")
            .innerText.trim()
            .replace(/年|月|日/g, "-")
            .slice(0, -1); //封面检验日期
        zhidongrq = YearMonthToYearMonthDay(zhidongrq);
        if (!ZifuchuanIsDate(zhidongrq)) {
            addstrtip("最近一次制动试验确认日期格式错误!");
        }
        jiandurq = document
            .getElementById("17101483999266548")
            .innerText.trim()
            .replace(/年|月|日/g, "-")
            .slice(0, -1); //封面检验日期
        jiandurq = YearMonthToYearMonthDay(jiandurq);
        if (!ZifuchuanIsDate(jiandurq)) {
            addstrtip("监督日期格式错误!");
        }
        if (!/^(是|否)$/.test(gett("是否加装电梯"))) {
            addstrtip("是否加装错误!");
        }
        if (!/^(是|否)$/.test(gett("是否住宅电梯"))) {
            addstrtip("是否住宅错误!");
        }
        gkxiacijianyanriqi = document
            .getElementById("171038882039234f4")
            .innerText.trim()
            .replace(/年|月|日/g, "-")
            .slice(0, -1); //下次检验日期
        if (
            !/^\d{4}年\d{2}月$/.test(gett("内部(全面)下次检验日期(电类定检)"))
        ) {
            addstrtip("下次检验日期精确到月!");
        }
        gkxiacijianyanriqi = YearMonthToYearMonthDay(gkxiacijianyanriqi);
        if (!ZifuchuanIsDate(gkxiacijianyanriqi)) {
            addstrtip("下次检验日期格式错误!");
        }
        //额定载荷与速度
        if (1) {
            if (!/^([1-9]\d*(\.\d+)?|0\.\d+)$/.test(gett("电梯额定载荷"))) {
                addstrtip("额定载荷错误!");
            }
            if (!/^([1-9]\d*(\.\d+)?|0\.\d+)$/.test(gett("电梯运行速度"))) {
                addstrtip("额定速度错误!");
            }
            if (/^曳引驱动乘客电梯$/.test(gett("设备分类代码"))) {
                const standardLoads = [450, 630, 800, 825,1000, 1050, 1250, 1350, 1600];
                if (!standardLoads.includes(parseFloat(gett("电梯额定载荷")))) {
                    addstrtip(
                        "额定载荷不是常见量450, 630, 800, 825,1000, 1250,1350, 1600!"
                    );
                }
                const standardSpeeds = [1, 1.5, 1.6, 1.75, 2, 2.5];
                if (!standardSpeeds.includes(parseFloat(gett("电梯运行速度")))) {
                    addstrtip("额定速度不是常见量1, 1.5, 1.6,1.75, 2, 2.5!");
                }
            }
            if (/^曳引驱动载货电梯$/.test(gett("设备分类代码"))) {
                const standardLoads = [1000, 1250, 1600, 2000, 3000];
                if (!standardLoads.includes(parseFloat(gett("电梯额定载荷")))) {
                    addstrtip("额定载荷不是常见量1000, 1250, 1600, 2000, 3000!");
                }
                const standardSpeeds = [0.5];
                if (!standardSpeeds.includes(parseFloat(gett("电梯运行速度")))) {
                    addstrtip("额定速度不是常见量0.5!");
                }
            }
        }

        //层站门数
        if (1) {
            const dtcz = document
                .getElementById("1591338788552be31")
                .innerText.trim(); //dt.电梯层站
            const dtzs = document
                .getElementById("15554041568959913")
                .innerText.trim(); //dt.电梯站数
            const dtms = document
                .getElementById("1555404248649fa78")
                .innerText.trim(); //dt.电梯门数
            if (
                !(
                    isNormalInteger(dtcz) &&
                    isNormalInteger(dtzs) &&
                    isNormalInteger(dtms)
                )
            ) {
                addstrtip("层站门数不是正整数!");
            }
            if (
                parseInt(dtcz) < parseInt(dtzs) ||
                parseInt(dtzs) * 2 < parseInt(dtms)
            ) {
                addstrtip("注意层站门数是否合理!");
            }
        }
        //控制方式
        if (1) {
            const validControlTypes = [
                "集选控制",
                "信号控制",
                "单台集选控制",
                "两台并联控制",
                "多台群组控制",
            ];
            if (!validControlTypes.includes(gett("控制方式"))) {
                addstrtip(
                    "控制方式不是常见控制:集选控制,信号控制,单台集选控制,两台并联控制,多台群组控制!"
                );
            }
        }
        //工具箱
        if (1) {
            const gjxjh = validateAndExplainCode(gett("JYYQSB"));
            let tip = gjxjh.message;
            let fixtip = "";
            if (gjxjh.isValid) {
                const regex =
                    /^详见((JD\d{1}\d{2}|SZSJD\d{2}|WZJD\d{2}|ZWJD\d{2}|GYJD\d{2}))号工具箱$/;
                const match = gett("JYYQSB").match(regex);
                const code = match[1];
                if (!checkAreaForDepartmentPrefix(code, dat["设备使用(所在)地点"])) {
                    fixtip="注意" + code + "的仪器是否在其检验区域范围内使用!";
                }
                let tipp=tip+fixtip
                addstrtip(tip+fixtip)
            }else{
                addstrtip("工具箱填写错误!参考模板:“详见()号工具箱”")
            }
        }
        //检验现场条件及安全确认
        if (1) {
            if (!/^符合$/.test(gett("XCJYTJ"))) {
                addstrtip("检验现场条件确认不是“符合”!");
            }
            if (!/^符合$/.test(gett("XCAQTJ"))) {
                addstrtip("检验现场安全确认不是“符合”!");
            }
            if (!/^合格$/.test(gett("内部(全面)检验结论(电类定检)"))) {
                addstrtip("检验结论不是“合格”!");
            }
            if (
                /^不符合$/.test(gett("XCJYTJ")) &&
                /^合格$/.test(gett("内部(全面)检验结论(电类定检)"))
            ) {
                addstrtip("检验结论与检验现场条件确认矛盾!");
            }
            if (
                /^不符合$/.test(gett("XCAQTJ")) &&
                /^合格$/.test(gett("内部(全面)检验结论(电类定检)"))
            ) {
                addstrtip("检验结论与检验现场安全确认矛盾!");
            }
        }
        //报告结论与下次检验日期的关系
        if (1) {
            if (
                /^[合格,整改后合格]$/.test(gett("内部(全面)检验结论(电类定检)"))
            ) {
                if (
                    document.getElementById("1710387041337455d").innerText.trim() ===
                    "-"
                ) {
                    addstrtip("报告结论合格应该有下次检验日期!");
                }
            }
            if (/^不合格$/.test(gett("内部(全面)检验结论(电类定检)"))) {
                if (
                    document.getElementById("1710387041337455d").innerText.trim() !==
                    "-"
                ) {
                    addstrtip("报告结论不合格下次检验日期为“-”!");
                }
            }
        }
        jyrqgk = document
            .getElementById("1710387111107bbd2")
            .innerText.trim()
            .replace(/年|月|日/g, "-")
            .slice(0, -1);
        jyrqgk = YearMonthToYearMonthDay(jyrqgk);
        if (!ZifuchuanIsDate(jyrqgk)) {
            addstrtip("概况检验日期格式错误!");
        }
    }
    function DateInfo() {
        //封面检验日期 概况检验日期 改造日期
        //制造日期
        //最近一次制动日期 监督日期
        //下次检验日期
        //制造日期 <= 监督日期 < 改造日期 <= 封面检验日期 < 下次检验日期
        //监督日期 < 最近一次制动日期 <= 封面检验日期
        manufactureStr = gett("制造日期");
        supervisionStr = gett("安装监督检验日期");
        renovationStr = gett("改造监督检验日期");
        // 封面检验日期
        coverInspectionStr = document
            .getElementById("1710387041337455d")
            .innerText.trim();
        // 下次检验日期
        nextInspectionStr = gett("内部(全面)下次检验日期(电类定检)");
        // 最近制动日期
        lastBrakingStr = gett("ZDSYRQ");
        //概况检验日期
        generalInspectionStr = document
            .getElementById("1710387111107bbd2")
            .innerText.trim();
        // 验证封面检验日期和概况检验日期相同
        if (coverInspectionStr !== generalInspectionStr) {
            addstrtip("封面检验日期和概况检验日期不一致!");
        }
        // 解析所有日期
        manufactureDate = parseDate(manufactureStr);
        supervisionDate = parseDate(supervisionStr);
        renovationDate = parseDate(renovationStr);
        coverInspectionDate = parseDate(coverInspectionStr);
        nextInspectionDate = parseDate(nextInspectionStr);
        lastBrakingDate = parseDate(lastBrakingStr);
        if (1) {
            //与当前日期进行比较
            if (1) {
                const now = new Date();
                const oneMonthInMillis = 30 * 24 * 60 * 60 * 1000; // 30天转换为毫秒
                const diff = now - coverInspectionDate;
                if (!(diff >= 0 && diff < oneMonthInMillis)) {
                    addstrtip("注意是否封面检验日期超出当前日期前一个月范围!");
                }
                if (manufactureDate != null && manufactureDate >= now) {
                    addstrtip("注意是否制造日期大于当前日期!");
                }
                if (supervisionDate != null && supervisionDate >= now) {
                    addstrtip("注意是否监督日期大于当前日期!");
                }
                if (renovationDate != null && renovationDate >= now) {
                    addstrtip("注意是否改造日期大于当前日期!");
                }
                if (coverInspectionDate != null && coverInspectionDate > now) {
                    addstrtip("注意是否检验日期大于当前日期!");
                }
                if (lastBrakingDate != null && lastBrakingDate > now) {
                    addstrtip("注意是否制动日期大于当前日期!");
                }
            }
            // 验证日期逻辑顺序
            if (1) {
                if (manufactureDate != null && supervisionDate != null) {
                    if (!(manufactureDate <= supervisionDate)) {
                        addstrtip("注意是否制造日期在监督日期之后!");
                    }
                }
                if (supervisionDate != null && renovationDate != null) {
                    if (!(supervisionDate <= renovationDate)) {
                        addstrtip("注意是否监督日期在改造日期之后!");
                    }
                }
                if (renovationDate != null && coverInspectionDate != null) {
                    if (!(renovationDate <= coverInspectionDate)) {
                        addstrtip("注意是否改造日期在检验日期之后!");
                    }
                }
                if (coverInspectionDate != null && nextInspectionDate != null) {
                    if (!(coverInspectionDate <= nextInspectionDate)) {
                        addstrtip("注意是否检验日期在下次检验日期之后!");
                    }
                }
                if (supervisionDate != null && lastBrakingDate != null) {
                    let supervisionDatetemp = new Date(supervisionDate.getFullYear(), supervisionDate.getMonth(), 1);
                    if (!(supervisionDatetemp <= lastBrakingDate)) {
                        addstrtip("注意是否监督检验日期在最近制动日期之后!");
                    }
                }
                if (lastBrakingDate != null && coverInspectionDate != null) {
                    if (!(lastBrakingDate <= coverInspectionDate)) {
                        addstrtip("注意是否最近制动日期在检验日期之后!");
                    }
                }
            }
            // 如果封面设备代码有填写,验证和解析设备代码中的年份,与制造日期和监督日期比较
            if (1) {
                const serialRegex = /^(3110|3120)\d{5}(\d{4})\d{5}$/;
                const matchSerial = gett("设备代码").match(serialRegex);
                if (matchSerial) {
                    // 提取年份
                    const yearFromSerial = parseInt(matchSerial[2], 10);
                    if (manufactureDate != null) {
                        // 判断序列号中的年份是否在制造日期之前
                        if (yearFromSerial > manufactureDate.getFullYear()) {
                            addstrtip(
                                "封面设备代码中的年份" + matchSerial[2] + "不应在制造日期之后"
                            );
                        }
                    }
                    if (supervisionDate != null && manufactureDate === null) {
                        // 判断序列号中的年份是否在监督日期之前
                        if (yearFromSerial > supervisionDate.getFullYear()) {
                            addstrtip(
                                "封面设备代码中的年份" + matchSerial[2] + "不应在监督日期之后"
                            );
                        }
                    }
                }
            }
            //如果使用登记证编号形如梯11宁A12345(19),则验证其年份与制造监督日期的关系
            if (1) {
                const regexsy =
                    /^梯(11|12)[宁](A|B|C|D|E)\d{5}[\(\(](\d{2})[\)\)]$/;
                const matchsy = gett("使用证编号").match(regexsy);
                if (matchsy) {
                    // 提取两位数年份并转换为四位数
                    const yearShort = parseInt(matchsy[3], 10);
                    const yearFull =
                        yearShort >= 0 && yearShort <= 99 ? 2000 + yearShort : yearShort;
                    // 创建年份的Date对象,并与传入的日期对象比较
                    //const yearDate = new Date(yearFull, 0); // 0 是一月份
                    if (supervisionDate != null) {
                        // 判断序列号中的年份是否在制造日期之前
                        if (yearFull < supervisionDate.getFullYear()) {
                            addstrtip(
                                "使用登记证编号中的年份" + matchsy[3] + "在监督检验日期之前"
                            );
                        }
                    }
                    if (manufactureDate != null && supervisionDate === null) {
                        // 判断序列号中的年份是否在监督日期之前
                        if (yearFull < manufactureDate.getFullYear()) {
                            addstrtip(
                                "使用登记证编号中的年份" + matchsy[3] + "在制造检验日期之前"
                            );
                        }
                    }
                }
            }
            //如果使用登记证编号形如31106523252023562563,则验证其年份与制造监督日期的关系
            if (1) {
                const regexsyy = /^(3110|3120)\d{6}(\d{4})\d{6}$/;
                const matchsyy = gett("使用证编号").match(regexsyy);
                if (matchsyy) {
                    // 提取两位数年份并转换为四位数
                    const year = parseInt(matchsyy[2], 10);
                    //const yearDate = new Date(year, 0); // 0 是一月份
                    if (supervisionDate != null) {
                        // 判断序列号中的年份是否在制造日期之前
                        if (year < supervisionDate.getFullYear()) {
                            addstrtip(
                                "使用登记证编号中的年份" + matchsyy[2] + "在监督检验日期之前"
                            );
                        }
                    }
                    if (manufactureDate != null && supervisionDate === null) {
                        // 判断序列号中的年份是否在监督日期之前
                        if (year < manufactureDate.getFullYear()) {
                            addstrtip(
                                "使用登记证编号中的年份" + matchsyy[2] + "在制造检验日期之前"
                            );
                        }
                    }
                }
            }
            //验证最近一次制动日期是否合理
            if (1) {
                if (supervisionDate != null && coverInspectionDate != null) {
                    let lastBrakingDateCal = calculateBrakeDate(
                        supervisionDate,
                        new Date(
                            coverInspectionDate.getFullYear(),
                            supervisionDate.getMonth(),
                            supervisionDate.getDate()
                        )
                    );
                    if (lastBrakingDate != null && lastBrakingDateCal != null) {
                        if (
                            lastBrakingDateCal.getFullYear() !=
                            lastBrakingDate.getFullYear() ||
                            lastBrakingDateCal.getMonth() != lastBrakingDate.getMonth()
                        ) {
                            const zjzdjc = elevatorInspection(
                                supervisionDate,
                                lastBrakingDateCal
                            );
                            let jyztstr = "";
                            if (lastBrakingDateCal < new Date(2024, 3, 1)) {
                                jyztstr = "检验";
                            } else {
                                jyztstr = zjzdjc.result;
                            }
                            addstrtip(
                                "注意最近一次制动日期是否应为:" +
                                lastBrakingDateCal.getFullYear() +
                                "年" +
                                (lastBrakingDateCal.getMonth() + 1).toString() +
                                "月,该日期属于" +
                                jyztstr +
                                "年份。"
                            );
                        }
                    }
                }
            }
            //验证本次下次检验日期是否合理
            if (supervisionDate != null && coverInspectionDate != null) {
                const yanzhengre = elevatorInspection(
                    supervisionDate,
                    coverInspectionDate
                );
                if (yanzhengre.result != "错误") {
                    if (
                        !(
                            yanzhengre.date.getFullYear() ===
                            nextInspectionDate.getFullYear() &&
                            yanzhengre.date.getMonth() === nextInspectionDate.getMonth()
                        )
                    ) {
                        addstrtip(
                            "注意下次检验日期是否应该是" +
                            yanzhengre.date.getFullYear() +
                            "年" +
                            (yanzhengre.date.getMonth() + 1).toString() +
                            "月。"
                        );
                    }
                    if (yanzhengre.result === "检测") {
                        addstrtip(
                            coverInspectionDate.getFullYear() +
                            "年" +
                            (supervisionDate.getMonth() + 1).toString() +
                            "月应该进行检测,下次检验日期是:" +
                            yanzhengre.date.getFullYear() +
                            "年" +
                            (yanzhengre.date.getMonth() + 1).toString() +
                            "月"
                        );
                    }
                    if (yanzhengre.result === "检验") {
                        // addstrtip(
                        //     "下次检验日期是:" +
                        //     yanzhengre.date.getFullYear() +
                        //     "年" +
                        //     (yanzhengre.date.getMonth() + 1).toString() +
                        //     "月"
                        // );
                    }
                }
            }
        }

    }
    function preprocessData() {
        // 保存原始的XMLHttpRequest.send方法
        origSend = XMLHttpRequest.prototype.send;

        // 覆盖原始的send方法
        XMLHttpRequest.prototype.send = function (body) {
            if (
                this._url.includes(
                    "http://111.51.123.233:8088/intf/report/itemJson/save"
                )
            ) {
                // 检查URL,确保它是你想要拦截的
                //console.log('Sent data:', body);
                //start
                // 解析数据
                try {
                    const parsedData = parseCustomUrlEncodedData(body);
                    //console.log('结构化:',parsedData);
                    //XiaoHe(parsedData);
                } catch (error) {
                    console.error("解析数据时发生错误:", error);
                }

                //end
                // var data = JSON.parse(body);

                // 你可以在这里添加更多的逻辑来处理捕获的数据
            }
            // 调用原始的send方法
            origSend.call(this, body);
        };

        // 覆盖原始的XMLHttpRequest.open方法来捕获请求的URL
        origOpen = XMLHttpRequest.prototype.open;
        XMLHttpRequest.prototype.open = function (method, url) {
            this._url = url; // 将URL附加到XHR对象上,以便后续使用
            origOpen.apply(this, arguments);
        };

        button = document.createElement("button");
        button.innerText = "审核系统";
        button.title = "点击进行审核"; // 添加一个提示,当鼠标悬停在按钮上时显示
        button.style.position = "fixed"; // 使用 fixed 定位以便按钮始终停留在视口内
        button.style.right = window.innerWidth / 15 + "px"; // 距离视口右边四分之一窗口宽度
        button.style.bottom = window.innerHeight / 15 + "px"; // 距离视口底部四分之一窗口高度
        button.style.cursor = "grab"; // 更改鼠标样式,表示可以拖动
        // 添加样式
        button.style.fontSize = "16px"; // 字体大小
        button.style.color = "#ffffff"; // 字体颜色
        button.style.backgroundColor = "#add8e6"; // 背景颜色
        button.style.border = "none"; // 无边框
        button.style.borderRadius = "5px"; // 边框圆角
        button.style.padding = "10px 20px"; // 内边距
        button.style.transition = "background-color 0.3s ease"; // 背景色过渡效果
        // 可选:添加鼠标悬停效果
        button.onmouseover = function () {
            this.style.backgroundColor = "#87CEEB"; // 鼠标悬停时背景色稍深一些
        };
        button.onmouseout = function () {
            this.style.backgroundColor = "#add8e6"; // 鼠标离开时恢复为原来的浅蓝色
        };

        // 初始化拖动逻辑
        isDragging = false;

        button.onmousedown = function (e) {
            initialX = e.clientX - button.getBoundingClientRect().right;
            initialY = e.clientY - button.getBoundingClientRect().bottom;
            isDragging = true;

            document.onmousemove = function (e) {
                if (!isDragging) return;
                var newX = e.clientX - initialX;
                var newY = e.clientY - initialY;
                button.style.right = window.innerWidth - newX + "px";
                button.style.bottom = window.innerHeight - newY + "px";
            };

            document.onmouseup = function () {
                isDragging = false;
                document.onmousemove = null;
                document.onmouseup = null;
            };

            e.preventDefault();
            return false;
        };

        // 拖动函数
        function drag(e) {
            if (!isDragging) return;
            // 计算按钮的新位置
            var newX = e.clientX - initialX;
            var newY = e.clientY - initialY;

            // 应用新的位置
            button.style.left = newX + "px";
            button.style.top = newY + "px";

            // 阻止默认事件和冒泡
            e.preventDefault();
            return false;
        }

        // 停止拖动函数
        function stopDragging() {
            // 取消全局的mousemove和mouseup事件绑定
            document.onmousemove = null;
            document.onmouseup = null;
            // 标记为不再拖动
            isDragging = false;
        }

        // 初始化按钮样式
        Object.assign(button.style, {
            fontSize: "16px",
            zIndex: 1000,
            borderRadius: "50%",
            backgroundColor: "#FF8C00",
            boxShadow: "0 4px 8px 0 rgba(0, 0, 0, 0.2)",
            padding: "15px 32px",
            cursor: "grab",
            transition: "all 0.3s ease",
            outline: "none",
            border: "none",
            color: "white",
            textTransform: "uppercase",
            fontWeight: "bold",
        });

        // 将按钮添加到文档中
        document.body.appendChild(button);
        button.onclick = function (e) {
            main();
        };
        //拖动
        if (1) {
            //随意拖动,可编辑,不可以动态调整大小
            if (1) {
                input = document.createElement("TEXTAREA");

                input.id = "information";
                input.name = "information";

                // 设置基本样式
                input.style.width = "320px";
                input.style.height = "400px";
                input.style.resize = "none"; // 禁止用户调整大小
                input.style.position = "absolute"; // 初始时使用绝对定位
                input.style.left = window.innerWidth / 15 + "px"; // 初始时靠左
                input.style.top = window.innerWidth / 4 + "px"; // 初始时靠上
                input.style.zIndex = 100; // 确保它显示在其它元素之上
                input.style.backgroundColor = "#add8e6"; // 浅蓝色背景
                // 可选:添加鼠标悬停效果
                input.onmouseover = function () {
                    this.style.backgroundColor = "#87CEEB"; // 鼠标悬停时背景色稍深一些
                };
                input.onmouseout = function () {
                    this.style.backgroundColor = "#add8e6"; // 鼠标离开时恢复为原来的浅蓝色
                };

                // 标记拖动状态
                isDragging1 = false;// 用于记录鼠标相对于textarea的偏移量

                // 右键按下时开始拖动
                input.onmousedown = function (e) {
                    if (e.button === 2) {
                        // 右键
                        e.preventDefault(); // 阻止默认行为

                        // 记录鼠标按下时的位置
                        initialX1 = e.clientX - parseInt(input.style.left, 10);
                        initialY1 = e.clientY - parseInt(input.style.top, 10);

                        // 记录鼠标相对于textarea的偏移量
                        offsetX1 = e.clientX - input.offsetLeft;
                        offsetY1 = e.clientY - input.offsetTop;

                        // 标记为正在拖动
                        isDragging1 = true;

                        // 绑定鼠标移动和释放事件
                        document.onmousemove = drag1;
                        document.onmouseup = stopDrag1;
                    }
                };

                // 鼠标移动时拖动textarea
                function drag1(e) {
                    if (!isDragging1) return;

                    // 计算新的位置
                    var newX = e.clientX - offsetX1;
                    var newY = e.clientY - offsetY1;

                    // 限制textarea不超出视口
                    newX = Math.max(
                        0,
                        Math.min(newX, window.innerWidth - input.offsetWidth)
                    );
                    newY = Math.max(
                        0,
                        Math.min(newY, window.innerHeight - input.offsetHeight)
                    );

                    // 更新textarea的位置
                    input.style.left = newX + "px";
                    input.style.top = newY + "px";
                }

                // 停止拖动
                function stopDrag1() {
                    // 标记为不再拖动
                    isDragging1 = false;

                    // 移除鼠标移动和释放事件的绑定
                    document.onmousemove = null;
                    document.onmouseup = null;
                }

                // 将textarea添加到文档中
                document.body.appendChild(input);

                // 设置textarea的美观样式
                Object.assign(input.style, {
                    border: "2px solid #ccc", // 添加边框
                    borderRadius: "10px", // 使用更平滑的圆角
                    backgroundColor: "white",
                    padding: "10px", // 增加内边距
                    boxShadow: "0 0 5px rgba(0, 0, 0, 0.1)", // 添加阴影
                    fontSize: "16px",
                    overflow: "auto", // 当内容超出时显示滚动条
                });
            }
        }

        function parseCustomUrlEncodedData(dataString) {
            const parts = dataString.split("&");
            const objects = [];

            parts.forEach((part) => {
                const [key, encodedValue] = part.split("=");
                const decodedValue = decodeURIComponent(encodedValue);
                const parsedValue = JSON.parse(decodedValue);
                objects.push(parsedValue);
            });
            let mergedObject = {};

            objects.forEach((obj) => {
                Object.assign(mergedObject, obj);
            });
            return mergedObject;
        }
    }
    function checkAreaForDepartmentPrefix(bumenstr, areastr) {
        const departmentPrefixes = [
            'JD1', 'JD2', 'JD3',
            'SZSJD', 'WZJD', 'ZWJD', 'GYJD'
        ];
        const departmentMappings = {
            'JD1': ['金凤区', '宁东'],
            'JD2': ['西夏区', '永宁县'],
            'JD3': ['兴庆区', '贺兰县'],
            'SZSJD': ['大武口区', '惠农区', '平罗县'],
            'WZJD': ['利通区', '红寺堡区', '盐池县', '同心县', '铜峡市'],
            'ZWJD': ['沙坡头区', '中宁县', '海原县'],
            'GYJD': ['原州区', '西吉县', '隆德县', '泾源县', '彭阳县']
        };

        // 检查bumenstr是否包含任意部门前缀  
        for (let prefix of departmentPrefixes) {
            if (bumenstr.includes(prefix)) {
                // 获取对应的区域数组  
                const areas = departmentMappings[prefix];
                // 遍历对应区域,检查areastr是否包含任意一个  
                for (let area of areas) {
                    if (areastr.includes(area)) {
                        return true; // 如果包含,返回true  
                    }
                }
            }
        }
        return false; // 如果不包含,返回false  
    }
    function checkStringContainsLocation(zcdstr, azdstr, regions) {  
        // 创建一个映射表,将字母映射到对应的地级市  
        const cityMapping = {  
            'A': '银川市',  
            'B': '石嘴山市',  
            'C': '吴忠市',  
            'D': '固原市',  
            'E': '中卫市'  
        };  
      
        // 检查`azdstr`中是否包含`zcdstr`对应的地名或其子地名  
        function checkLocation(city, str) {  
            // 检查是否直接包含城市名  
            if (str.includes(city)) {  
                return city;  
            }  
            // 遍历城市的子地名  
            for (let district in regions[city]) {  
                if (str.includes(district)) {  
                    return district;  
                }  
                // 如果有更深层级的地名,也进行检查  
                if (regions[city][district] && typeof regions[city][district] === 'object') {  
                    for (let subDistrict in regions[city][district]) {  
                        if (str.includes(subDistrict)) {  
                            return subDistrict;  
                        }  
                    }  
                }  
            }  
            return null;  
        }  
      
        // 转换zcdstr为对应的地名  
        let targetCity = cityMapping[zcdstr];  
        if (!targetCity) {  
            return {  
                contains: false,  
                zcdstrRepresents: null,  
                azdstrContains: null  
            };  
        }  
        // 检查azdstr是否包含目标地名或其子地名  
        let containedLocation = checkLocation(targetCity, azdstr);  
        let result = {  
            contains: containedLocation !== null,  
            zcdstrRepresents: targetCity,  
            azdstrContains: containedLocation  
        };  
      
        return result;  
    }  
})();