华远:PNL布局信息维护,增加按钮跳转到页面,上传工程文件sn层features文件解析为维护信息并导入
1个文件已修改
1个文件已添加
504 ■■■■■ 已修改文件
WebTM/views/基础资料/公用基础资料/Gy_PNLInfoEdit_importByReadTxtFile.html 485 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebTM/views/基础资料/公用基础资料/Gy_PNLInfoList.html 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebTM/views/»ù´¡×ÊÁÏ/¹«Óûù´¡×ÊÁÏ/Gy_PNLInfoEdit_importByReadTxtFile.html
New file
@@ -0,0 +1,485 @@
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>PNL布局信息导入_读取工程features文件</title>
    <link rel="stylesheet" href="../../../layuiadmin/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../../layuiadmin/style/admin.css" media="all">
    <script src="../../../layuiadmin/zgqCustom/zgqCustom.js"></script>
    <script src="../../../layuiadmin/layui/layui.js"></script>
    <script src="../../../layuiadmin/Scripts/json2.js"></script>
    <script src="../../../layuiadmin/Scripts/jquery-1.4.1.js"></script>
    <script src="../../../layuiadmin/Scripts/webConfig.js"></script>
    <script src="../../../layuiadmin/PubCustom.js"></script>
</head>
<body>
    <div class="layui-fluid" style="padding: 0;">
        <div class="layui-card" style="padding: 2px;background-color: #efefef;">
            <div class="layui-card-body" style="padding: 1px;">
                <form class="layui-form" action="" lay-filter="formData" style="background-color:white;">
                    <div style="padding: 10px; ">
                    </div>
                    <div class="layui-tab" lay-filter="tab-POStockInBill">
                        <div class="layui-tab-content">
                            <!--基本信息-->
                            <div class="layui-tab-item layui-show">
                                <div class="layui-form-item" style="padding-top: 10px;">
                                    <div class="layui-row">
                                        <div class="layui-inline">
                                            <label class="layui-form-label">PNL布局名称(物料料号)</label>
                                            <div class="layui-input-inline">
                                                <input class="layui-input" name="HPNLName" id="HPNLName" autocomplete="off" value="">
                                            </div>
                                        </div>
                                        <div class="layui-inline">
                                            <label class="layui-form-label">分类</label>
                                            <div class="layui-input-inline">
                                                <select name="HPNLInfoTypeID" id="HPNLInfoTypeID" lay-filter="HPNLInfoTypeID" style="width: 180px; ">
                                                </select>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="layui-row">
                                        <div class="layui-inline">
                                            <input type="file" name="file" lay-verify="file" id="txtFileInput" class="layui-upload-file">
                                            <button type="button" class="layui-btn" onclick="document.getElementById('txtFileInput').click()">选择文件</button>
                                        </div>
                                        <div class="layui-inline">
                                            <button class="layui-btn layui-btn-normal" style="margin-left: 0px" type="button" lay-submit="" lay-filter="ImportByReadTxtFile" id="ImportByReadTxtFile">读取工程features文件</button>
                                            <button class="layui-btn layui-btn-normal" style="margin-left: 0px" type="button" lay-submit="" lay-filter="btnSave" id="btnSave">导入数据</button>
                                            <button class="layui-btn layui-btn-normal" style="margin-left: 0px" type="button" lay-submit="" lay-filter="Cancel" id="Cancel">退出</button>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                    <table class="" id="mainTable" lay-filter="mainTable"></table>
                    <script type="text/html" id="toolbarDemo">
                        <div class="layui-btn-container">
                        </div>
                    </script>
                </form>
            </div>
        </div>
    </div>
</body>
</html>
<script type="text/html" id="barDemo">
    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>
<script>
    layui.config({
        base: '../../../layuiadmin/' //静态资源所在路径
    }).extend({
        index: 'lib/index' //主入口模块
    }).use(['tree', 'index', 'form', 'table', 'element', 'laypage', 'laydate', 'util', 'upload'], function () {
        //#region layui变量
        var $ = layui.$
            , admin = layui.admin
            , layer = layui.layer
            , table = layui.table
            , form = layui.form
            , element = layui.element
            , laypage = layui.laypage
            , laydate = layui.laydate
            , util = layui.util
            , tree = layui.tree
            , util = layui.util
            , upload = layui.upload
        //#endregion
        //#region å…¬å…±å˜é‡
        var option = [];                                                    //子表渲染参数
        //#endregion
        //#region è¿›å…¥é¡µé¢å³åŠ è½½
        set_ClearBill();                                                    //初始化界面
        //#endregion
        //#region è§¦å‘事件
        //#region è¯»å–工程features文件 æŒ‰é’®ç›‘听
        form.on('submit(ImportByReadTxtFile)', function (data) {
            readFile();
        })
        //#endregion
        //#region ä¿å­˜
        form.on('submit(btnSave)', function (data) {
            if (table.cache["mainTable"] != null) {
                if (!AllowLoadData(option.data)) {
                    set_AddNew(data);
                }
            }
            else {
                layer.msg("无数据,请先读取工程features文件!");
            }
        })
        //#endregion
        //#region é€€å‡º
        form.on('submit(Cancel)', function () {
            Pub_Close(1);
        })
        //#endregion
        //#region è¡Œå†…事件
        table.on('tool(mainTable)', function (obj) {
            set_GridDelete(obj);   //行内删除
        });
        //#endregion
        //#region PNL布局名称(物料料号) å¤±ç„¦äº‹ä»¶ç›‘听
        $('#HPNLName').on('blur', function () {
            var HPNLName = $("#HPNLName").val();
            if (option.data.length && option.data.length > 0) {
                if (option.data[0]["料号"] != HPNLName) {
                    for (var i = 0; i < option.data.length; i++) {
                        option.data[i]["料号"] = HPNLName;
                    }
                    table.render(option);
                }
            }
        });
        //#endregion
        //#region åˆ†ç±»ä¸‹æ‹‰åˆ—表值更新监听
        form.on('select(HPNLInfoTypeID)', function (data) {
            var HPNLInfoTypeID = data.value;
            if (option.data.length && option.data.length > 0) {
                if (option.data[0]["HPNLInfoTypeID"] != HPNLInfoTypeID) {
                    for (var i = 0; i < option.data.length; i++) {
                        var selectElement = document.getElementById("HPNLInfoTypeID");                                                      //获取PNL分类下拉列表元素
                        var selectedIndex = selectElement.selectedIndex;                                                                    //获取PNL分类下拉列表元素当前选中数据的索引
                        var selectedText = selectElement.options[selectedIndex].text;                                                       //获取PNL分类下拉列表元素当前选中数据的显示的值--PNL分类名称
                        var HPNLInfoTypeName = selectedText;                                                                                //PNL分类的名称
                        option.data[i]["HPNLInfoTypeID"] = HPNLInfoTypeID;
                        option.data[i]["分类"] = HPNLInfoTypeName;
                    }
                    table.render(option);
                }
            }
        });
        //#endregion
        //#endregion
        //#region æ­¤é¡µé¢æ‰€æœ‰çš„æ–¹æ³•
        //#region åˆ†ç±»ä¸‹æ‹‰åˆ—表数据始化
        function setInit_PNLInfoType() {
            var ModRightNameCheck = "";
            var sql = "select HInterID,HName from Gy_PNLInfoType where HUSEORGID = " + sessionStorage["OrganizationID"];
            $.ajax({
                url: GetWEBURL() + '/CommonModel/searchMethod',
                type: "GET",
                async: false,
                data: { "sql": sql, "user": sessionStorage["HUserName"], "ModRightNameCheck": ModRightNameCheck },
                success: function (data1) {
                    if (data1.count == 1) {
                        var data = data1.data;                         //PNL分类数据
                        var Organization = '';
                        for (var i = 0; i < data.length; i++) {
                            Organization += '<option  style="color:blue;" value="' + data[i].HInterID + '">' + data[i].HName + '</option>';
                        }
                        $("#HPNLInfoTypeID").append(Organization);
                        form.render('select');
                    } else {
                        layer.alert(data1.code + data1.Message, { icon: 5 });
                    }
                }, error: function () {
                    layer.alert("接口请求失败!", { icon: 5 });
                }
            });
        }
        //#endregion
        //#region åˆå§‹åŒ–界面
        function set_ClearBill() {
            setInit_PNLInfoType();                                          //分类下拉列表数据始化
            set_InitGrid();                                                 //初始化表格
        }
        //#endregion
        //#region åˆå§‹åŒ–表格
        function set_InitGrid() {
            option = {
                elem: '#mainTable'
                , toolbar: '#toolbarDemo'
                , height: 'full-120'
                , page: true
                , cellMinWidth: 90
                , limit: 50
                , limits: [50, 500, 5000, 20000]
                , loading: false
                , data: []
                , cols: [[
                    { type: 'checkbox', fixed: 'left' }
                    , { type: 'numbers', title: '序号', width: 100, style: 'background-color:#efefef4d;' }
                    , { field: '料号', title: '料号', width: 120 }
                    , { field: 'HPNLInfoTypeID', title: 'HPNLInfoTypeID', width: 120 }
                    , { field: '分类', title: '分类', width: 120 }
                    , { field: 'Set号', title: 'Set号' }
                    , { field: 'PCS号', title: 'PCS号' }
                    , { field: '行索引', title: '行索引' }
                    , { field: '列索引', title: '列索引' }
                    , { fixed: 'right', title: '操作', toolbar: '#barDemo' }
                ]]
            };
            //渲染页面
            table.render(option);
            //DisPlay_HideColumn();
        }
        //#endregion
        //#region è¡Œå†…删除
        function set_GridDelete(obj) {
            var data = obj.data;
            var rowIndex = $(obj.tr).attr("data-index");
            if (obj.event === 'del') {
                layer.confirm('真的删除行吗?', function (index) {
                    console.log("索引为:" + rowIndex);
                    var oldData = option.data;
                    oldData.splice(obj.tr.data('index'), 1)
                    option.data = oldData;//将数据绑定到data上
                    table.render(option);
                    layer.close(index);
                });
            }
        }
        //#endregion
        //#region èŽ·å–å¯¼å…¥æ–‡ä»¶çš„æ•°æ®å¹¶å¤„ç†ä¸º Set号、PCS号、行索引、列索引
        function readFile() {
            var HPNLName = $("#HPNLName").val();                                //料号
            if (!HPNLName || HPNLName == "") {
                layer.msg("PNL布局名称(物料料号)不能为空!!");
                return false;
            }
            var HPNLInfoTypeID = $("#HPNLInfoTypeID").val();                    //PNL分类的ID
            if (!HPNLInfoTypeID || HPNLInfoTypeID == "0") {
                layer.msg("分类不能为空!!");
                return false;
            }
            var input = document.getElementById('txtFileInput');                                                                            //获取选择的文件
            if (input.files && input.files[0]) {
                var file = input.files[0];
                var reader = new FileReader();
                reader.onload = function (e) {
                    var content = e.target.result;                                                                                          //获取选择文件的数据
                    var strBeginIndex = content.lastIndexOf("#") + 1;                                                                         //获取选择文件中数据的最后一个#的位置索引。后面的数据为PCS记录
                    var strEndIndex = content.length;                                                                                       //获取选择文件中数据的最后位置索引
                    var fileStr = content.substring(strBeginIndex, strEndIndex).replaceAll("\n", "").replaceAll(" ", "");                    //处理选择文件中PCS记录数据
                    var fileStrList = fileStr.split("T");                                                                                   //将选择文件中的字符串以PCS记录为单位处理成一个数组
                    //获取PCS对象列表
                    var PCSList = [];
                    for (var i = 1; i < fileStrList.length; i++) {
                        var PCSBeginIndex = fileStrList[i].length - 10;                                                                     //PCS记录中PCS号的起始位置索引
                        var PCSEndIndex = fileStrList[i].length - 4;                                                                        //PCS记录中PCS号的结束后一位的位置索引
                        var PCSNo = fileStrList[i].substring(PCSBeginIndex, PCSEndIndex);                                                   //获取PCS号
                        var SetNo = PCSNo.substring(0, 2);                                                                                  //获取set号
                        var PCSRowIndex = PCSNo.substring(2, 4);                                                                            //获取行索引
                        var PCSColIndex = PCSNo.substring(4, 6);                                                                            //获取列索引
                        var HPNLName = $("#HPNLName").val();                                                                                //PNL布局名称(料号)
                        var selectElement = document.getElementById("HPNLInfoTypeID");                                                      //获取PNL分类下拉列表元素
                        var selectedIndex = selectElement.selectedIndex;                                                                    //获取PNL分类下拉列表元素当前选中数据的索引
                        var selectedText = selectElement.options[selectedIndex].text;                                                       //获取PNL分类下拉列表元素当前选中数据的显示的值--PNL分类名称
                        var HPNLInfoTypeID = $("#HPNLInfoTypeID").val();                                                                    //PNL分类的ID
                        var HPNLInfoTypeName = selectedText;                                                                                //PNL分类的名称
                        PCSList.push(
                            {
                                "料号": HPNLName
                                , "HPNLInfoTypeID": HPNLInfoTypeID
                                , "分类": HPNLInfoTypeName
                                , "Set号": SetNo
                                , "PCS号": PCSNo
                                , "行索引": PCSRowIndex
                                , "列索引": PCSColIndex
                            }
                        )
                    }
                    option.data = PCSList;
                    if (AllowLoadData(option.data)) {
                        table.render(option);
                    }
                };
                reader.readAsText(file); // ä»¥æ–‡æœ¬æ ¼å¼è¯»å–文件
            } else {
                alert("请选择一个文件");
            }
        }
        //#endregion
        //#region ä¿å­˜
        function set_AddNew(data) {
            var num = [];
            for (var i = 0; i < option.data.length; i++) {
                if (option.data[i] != "") {
                    num.push(option.data[i])
                }
            }
            //data.field.HOrgID = sessionStorage["OrganizationID"];//组织
            //var sMainStr = JSON.stringify(data.field);
            var sSubStr = JSON.stringify(num);
            var sMainSub = sSubStr + '&和' + sessionStorage["HUserName"];
            var index = layer.load();
            $.ajax({
                type: "POST",
                url: GetWEBURL() + "/Gy_PNLInfo/Gy_PNLInfo_btnSave",
                async: true,
                data: { "sMainSub": sMainSub },
                dataType: "json",
                success: function (data) {
                    if (data.count == 1) {
                        layer.close(index);
                        layer.msg(data.Message);
                        option.data = null;
                        table.cache["mainTable"] = null;
                        table.render(option);
                    }
                    else {
                        layer.close(index);
                        layer.msg(data.Message, { icon: 5, btn: ['确认'], time: 100000, offset: 't', skin: 'layui-layer-lan', title: "温馨提示" });
                    }
                },
                error: function (err) {
                    layer.close(index);
                    layer.msg("错误:" + err, { icon: 5, btn: ['确认'], time: 100000, offset: 't', skin: 'layui-layer-lan', title: "温馨提示" });
                }
            });
        }
        //#endregion
        //#region æ•°æ®æ ¡éªŒ
        function AllowLoadData(data) {
            var HPNLName = $("#HPNLName").val();                                //料号
            if (!HPNLName || HPNLName == "") {
                layer.msg("PNL布局名称(物料料号)不能为空!!");
                return false;
            }
            var HPNLInfoTypeID = $("#HPNLInfoTypeID").val();                    //PNL分类的ID
            if (!HPNLInfoTypeID || HPNLInfoTypeID == "0") {
                layer.msg("分类不能为空!!");
                return false;
            }
            var temp = "";
            for (var i = 0; i < data.length; i++) {
                temp = data[i]["料号"];
                if (!temp || temp == "") {
                    layer.msg("第" + (i+1) + "行料号不能为空!!");
                    return false;
                }
                temp = data[i]["HPNLInfoTypeID"];
                if (!temp || temp == "0") {
                    layer.msg("第" + (i + 1) + "行分类不能为空!!");
                    return false;
                }
            }
            var HColCountForFirstRow = 0;                                       //获取第一行的列数
            var HRowIndex_temp = "";                                            //用于获取第一行的行索引,遍历去得到第一行的列数
            for (var i = 0; i < data.length; i++) {
                if (HRowIndex_temp == "") {
                    HRowIndex_temp = data[i]["行索引"];
                }
                if (HRowIndex_temp == data[i]["行索引"]) {
                    if (HColCountForFirstRow <= data[i]["列索引"] * 1) {
                        HColCountForFirstRow = data[i]["列索引"] * 1
                    }
                } else {
                    break;
                }
            }
            //校验PCS号排序是否存在问题
            var HSet_temp = "";
            var HRow_temp = "";
            var HCol_temp = "";
            for (var i = 0; i < data.length; i++) {
                if (data[i]["列索引"] * 1 > HColCountForFirstRow) {            //以第一行的列数为根据,校验所有行的列数是否超出
                    layer.msg("【PCS号:" + data[i]["PCS号"] + "】附近数据维护有误,请检查!!");
                    return false;
                }
                if ((HSet_temp != "" && HRow_temp != "" && HCol_temp != "") && ((HSet_temp != data[i]["Set号"]) || (HSet_temp == data[i]["Set号"] && HRow_temp != data[i]["行索引"]))) { //如果当前PCS与上一个PCS不在同一Set或在同一个Set但不在同一行,则判定上一个PCS的列索引是否与第一行的列数一致
                    if (HCol_temp * 1 != HColCountForFirstRow) {
                        layer.msg("【PCS号:" + HSet_temp + HRow_temp + HCol_temp + "】附近数据维护有误,请检查!!");
                        return false;
                    }
                }
                if (i == data.length - 1) {                                     //最后一个PCS,如果列索引不为第一行的列数
                    if (data[i]["列索引"] * 1 != HColCountForFirstRow) {
                        layer.msg("【PCS号:" + data[i]["PCS号"] + "】附近数据维护有误,请检查!!");
                        return false;
                    }
                }
                if (HSet_temp != data[i]["Set号"]) {
                    if (data[i]["Set号"] * 1 == (HSet_temp * 1) + 1 || (data[i]["Set号"] == "90" || data[i]["Set号"] == "91")) {
                        if (data[i]["行索引"] == "01" && data[i]["列索引"] == "01") {
                            HSet_temp = data[i]["Set号"];
                            HRow_temp = data[i]["行索引"];
                            HCol_temp = data[i]["列索引"];
                        }
                        else {
                            layer.msg("【PCS号:" + data[i]["PCS号"] + "】附近数据维护有误,请检查!!");
                            return false;
                        }
                    }
                    else {
                        layer.msg("【PCS号:" + data[i]["PCS号"] + "】附近数据维护有误,请检查!!");
                        return false;
                    }
                }
                else if (HSet_temp == data[i]["Set号"] && HRow_temp != data[i]["行索引"]) {
                    if (data[i]["行索引"] * 1 == (HRow_temp * 1) + 1) {
                        if (data[i]["列索引"] == "01") {
                            HRow_temp = data[i]["行索引"];
                            HCol_temp = data[i]["列索引"];
                        }
                        else {
                            layer.msg("【PCS号:" + data[i]["PCS号"] + "】附近数据维护有误,请检查!!");
                            return false;
                        }
                    }
                    else {
                        layer.msg("【PCS号:" + data[i]["PCS号"] + "】附近数据维护有误,请检查!!");
                        return false;
                    }
                }
                else if (HSet_temp == data[i]["Set号"] && HRow_temp == data[i]["行索引"] && HCol_temp != data[i]["列索引"]) {
                    if (data[i]["列索引"] * 1 == (HCol_temp * 1) + 1) {
                        HCol_temp = data[i]["列索引"];
                    }
                    else {
                        layer.msg("【PCS号:" + data[i]["PCS号"] + "】附近数据维护有误,请检查!!");
                        return false;
                    }
                }
            }
            return true;
        }
        //#endregion
        //#endregion
    });
</script>
WebTM/views/»ù´¡×ÊÁÏ/¹«Óûù´¡×ÊÁÏ/Gy_PNLInfoList.html
@@ -192,6 +192,7 @@
                        <script type="text/html" id="toolbarDemo">
                            <div class="layui-btn-container" id="toolbarDemo_ButtonSet">
                                <button type="button" class="layui-btn layui-btn-sm" style="display:none;" id="set_ImportExcel" lay-event="set_ImportExcel"><i class="layui-icon layui-icon-form"></i>Excel导入</button>
                                <button type="button" class="layui-btn layui-btn-sm" style="display:none;" id="set_ImportByReadTxtFile" lay-event="set_ImportByReadTxtFile"><i class="layui-icon layui-icon-form"></i>读取工程features文件导入</button>
                                <button type="button" class="layui-btn layui-btn-sm" style="display:none;" id="set_AddNew" lay-event="set_AddNew"><i class="layui-icon layui-icon-form"></i>新增</button>
                                <button type="button" class="layui-btn layui-btn-sm" style="display:none;" id="set_ShowBill" lay-event="set_ShowBill"><i class="layui-icon layui-icon-form"></i>编辑</button>
                                <!--<button type="button" class="layui-btn layui-btn-sm" style="display:none;" lay-event="btn-Copy" id="btn-Copy"><i class="layui-icon layui-icon-transfer"></i>复制</button>-->
@@ -286,6 +287,10 @@
                //Excel导入
                case 'set_ImportExcel':
                    set_ImportExcel();
                    break;
                //读取工程features文件导入
                case 'set_ImportByReadTxtFile':
                    set_ImportByReadTxtFile();
                    break;
                //新增
                case 'set_AddNew':
@@ -1166,6 +1171,20 @@
            })
        }
        //读取工程features文件导入
        function set_ImportByReadTxtFile(){
            layer.open({
                type: 2
                , skin: "layui-layer-rim" //加上边框
                , title: "PNL布局信息_读取工程features文件导入"  //标题
                , closeBtn: 1  //窗体右上角关闭 çš„ æ ·å¼
                , shift: 2 //弹出动画
                , area: ["100%", "100%"] //窗体大小
                , maxmin: true //设置最大最小按钮是否显示
                , content: ['./Gy_PNLInfoEdit_ImportByReadTxtFile.html', "yes"]
            })
        }
        //读取方案
        function set_ReadScheme() {
            var HIsClose_Manual = false;