李士越 1 год назад
Родитель
Сommit
34fde1864f

+ 284 - 0
wwwroot/main/FirstRegistre/Tablet.html

@@ -0,0 +1,284 @@
+
+<!DOCTYPE html>
+<html lang="en"> 
+<head>
+    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
+    <meta http-equiv="Pragma" content="no-cache" />
+    <meta http-equiv="Expires" content="0" />
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <link rel="shortcut icon" href="/img/logo.png" />
+    <link rel="bookmark" href="/img/logo.png" />
+    <link rel="stylesheet" href="/plugins/bootstrap-4.3.1/css/bootstrap.min.css">
+    <link rel="stylesheet" href="/plugins/font-awesome-4.7.0/css/font-awesome.min.css">
+    <link href="/Plugins/bootstrap-select/css/bootstrap-select.min.css" rel="stylesheet" />
+    <link rel="stylesheet" href="../common/StyleSheet.css" />
+    <link href="/Plugins/bootstrap-4.3.1/css/bootstrap4-modal-fullscreen.css" rel="stylesheet" />
+    <script src="/Plugins/jquery-3.4.1/jquery-3.4.1.min.js"></script>
+    <script src="/Plugins/virtualkeyboard/xvirtualkeyboard.js"></script>
+    <style type="text/css">
+        * {
+            margin: 0;
+            padding: 0;
+        }
+        .button-container {
+            width: 400px;
+            display: flex;
+            /* 水平居中 */
+            justify-content: center; 
+            /* 垂直居中 */
+            align-items: center;
+        }
+        .button {
+            /* 按钮之间的间距 */
+            margin: 0 auto; 
+        } 
+    </style>
+    <title>东科软件</title>
+</head>
+<body>
+    <div>
+        <canvas id="myCanvas"></canvas>
+        <img id="myImage"/>
+        <div class="button-container">
+            <button type="button" class="btn btn-primary button" onclick="save()">确认</button>
+            <button type="button" class="btn btn-danger button" onclick="cancel()">取消</button>
+            <button id="delete" type="button" class="btn btn-danger button" onclick="showcanvas()">删除图片</button>
+        </div> 
+    </div>
+    <script>
+        /**加载前调用*/
+        $(document).ready(function () {
+            getQueryParam();
+            show();
+        });
+        /**获取父页面传来的id */
+        var id=0;
+        /**取父页面传来的总单id*/
+        var registerid = 0;
+        /**签字版以及图片宽 */
+        const width = 0.985;
+        /**签字版以及图片高 */
+        const height = 0.85;
+       /**配置内容*/
+        const config = {
+            /**宽度*/
+            width: window.innerWidth * width,
+            /**高度*/
+            height: window.innerHeight * height,
+            /**线宽 */
+            lineWidth: 10,
+            /**线条颜色*/
+            strokeStyle: 'black',
+            /**设置线条两端圆角*/
+            lineCap: 'round',
+            /**线条交汇处圆角*/
+            lineJoin: 'round', 
+        } 
+        /**获取canvas 实例 */
+        const canvas = document.querySelector('canvas')
+        /**设置宽高 */ 
+        canvas.width = config.width
+        canvas.height = config.height  
+        /**设置一个边框 */ 
+        canvas.style.border = '3px solid #000'
+        /**创建上下文 */ 
+        const ctx = canvas.getContext('2d')
+        /**设置填充背景色 */ 
+        ctx.fillStyle = 'transparent'
+        /**绘制填充矩形 */ 
+        ctx.fillRect( 
+            0, // x 轴起始绘制位置
+            0, // y 轴起始绘制位置
+            config.width, // 宽度
+            config.height // 高度
+            
+        ); 
+        /**保存上次绘制的 坐标及偏移量*/ 
+        const client = {
+            offsetX: 0, // 偏移量
+            offsetY: 0,
+            endX: 0, // 坐标
+            endY: 0
+        }
+        /**判断是否为移动端 */ 
+        const mobileStatus = (/Mobile|Android|iPhone/i.test(navigator.userAgent))
+        /** 初始化*/ 
+        const init = event => {
+            /**获取偏移量及坐标*/
+            const { offsetX, offsetY, pageX, pageY } = mobileStatus ? event.changedTouches[0] : event
+
+            // 修改上次的偏移量及坐标
+            client.offsetX = offsetX
+            client.offsetY = offsetY
+            client.endX = pageX
+            client.endY = pageY
+
+            // 清除以上一次 beginPath 之后的所有路径,进行绘制
+            ctx.beginPath()
+            // 根据配置文件设置相应配置
+            ctx.lineWidth = config.lineWidth
+            ctx.strokeStyle = config.strokeStyle
+            ctx.lineCap = config.lineCap
+            ctx.lineJoin = config.lineJoin
+            // 设置画线起始点位
+            ctx.moveTo(client.endX, client.endY)
+            // 监听 鼠标移动或手势移动
+            window.addEventListener(mobileStatus ? "touchmove" : "mousemove", draw)
+        }
+        /**绘制*/
+        const draw = event => {
+            // 获取当前坐标点位
+            const { pageX, pageY } = mobileStatus ? event.changedTouches[0] : event
+            // 修改最后一次绘制的坐标点
+            client.endX = pageX
+            client.endY = pageY
+
+            // 根据坐标点位移动添加线条
+            ctx.lineTo(pageX, pageY)
+
+            // 绘制
+            ctx.stroke()
+        }
+        /** 结束绘制*/ 
+        const cloaseDraw = () => {
+            // 结束绘制
+            ctx.closePath()
+            // 移除鼠标移动或手势移动监听器
+            window.removeEventListener("mousemove", draw)
+        }
+        /**创建鼠标/手势按下监听器*/ 
+        window.addEventListener(mobileStatus ? "touchstart" : "mousedown", init)
+        /**创建鼠标/手势 弹起/离开 监听器*/ 
+        window.addEventListener(mobileStatus ? "touchend" : "mouseup", cloaseDraw)
+        /**取消-清空画布 */ 
+        const cancel = () => {
+            // 清空当前画布上的所有绘制内容
+            ctx.clearRect(0, 0, config.width, config.height)
+        }
+        /**保存-将画布内容保存为图片 */ 
+        const save = () => { 
+            // 将canvas上的内容转成blob流
+            canvas.toBlob(blob => {
+                const formData = new FormData();
+                //formData.append('image', blob);
+                formData.append('image', blob, 'filename.bmp');
+                formData.append('REGISTERID', registerid);
+                formData.append('TYPE', id);
+                //调用保存接口
+                $.ajax({
+                    url: 'api/GetCheckBarcode.ashx?m=image',
+                    data: formData,
+                    dataType: "json",
+                    type: "post",
+                    processData: false,  
+                    contentType: false,
+                    success: function (date) {
+                        //返回值为1(成功)
+                        if (date === 1) {
+                            show();
+                        }
+                    },
+                }); 
+            }, 'image/bmp')
+        }
+        /**展示图片并隐藏按钮 */
+        const show =async() => {
+            const formData = new FormData();
+            formData.append('REGISTERID',await registerid);
+            formData.append('TYPE', await id); 
+            //查找图片
+           await $.ajax({
+                url: 'api/GetCheckBarcode.ashx?m=showimage',
+                data: formData,
+                dataType: "json",
+                type: "post",
+                processData: false,
+                contentType: false,
+                success: function (date) {
+                    //调用展示图片
+                    getimage(date);
+                },
+            });
+        }
+        /**
+         * 隐藏签字板按钮 展示图片
+         * @param date 图片二进制
+         */
+        const getimage = (date) => {
+            var canvas = document.getElementById('myCanvas');
+            var img = document.getElementById('myImage');
+            var deletebut = document.getElementById('delete');
+            const buttonContainers = document.querySelectorAll('.button');
+            // 如果canvas是可见的,隐藏它并显示图片  
+            /* if (canvas.style.display == 'block') {*/
+            if (date.code == 200) {
+                canvas.style.display = 'none';
+                img.style.display = 'block'; 
+                img.src = date.htmlString;
+                img.width = window.innerWidth * width;
+                img.height =window.innerHeight * height; 
+                // 遍历这些元素并设置它们的可见性为隐藏  
+                buttonContainers.forEach(container => { 
+                        container.style.visibility = 'hidden';
+                    if (container.id == 'delete') {
+                        container.style.visibility = 'visible';
+                    } 
+                }); 
+            }
+            // 如果canvas是不可见的(即图片是可见的),显示它并隐藏图片  
+            else {
+                canvas.style.display = 'block';
+                img.style.display = 'none';
+                // 遍历这些元素并设置它们的可见性为显示
+                buttonContainers.forEach(container => { 
+                        container.style.visibility = 'visible';
+                    if (container.id == 'delete') {
+                        container.style.visibility = 'hidden';
+                    }
+                });
+                deletebut.style.display = 'none'
+            }
+        }
+        /**显示签字板隐藏图片 */
+        const showcanvas = () => {
+            var canvas = document.getElementById('myCanvas');
+            var img = document.getElementById('myImage');
+            var deletebut = document.getElementById('delete');
+            const buttonContainers = document.querySelectorAll('.button'); 
+            canvas.style.display = 'block';
+            img.style.display = 'none'; 
+            // 遍历这些元素并设置它们的可见性为隐藏  
+            buttonContainers.forEach(container => {
+                container.style.visibility = 'visible';
+                if (container.id == 'delete') {
+                    container.style.visibility = 'hidden';
+                }
+            });
+            deletebut.style.display = 'block'
+        }
+        /**获取url内的id */
+        const getQueryParam = () => { 
+            // 获取URL的查询字符串部分  
+            var search = window.location.search.substring(1); 
+            // 将查询字符串分割成键值对数组  
+            var params = search.split("&");
+            for (var i = 0; i < params.length; i++) {
+                //全部赋值后退出
+                if (id != 0 && registerid != 0) {
+                    break;
+                }
+                var val = params[i].split("=");
+                // 如果找到了匹配的参数名,则返回其值  
+                if (val[0] == 'id') { 
+                    id = val[1]; 
+                }
+                if (val[0] == 'REGISTERID') {
+                    registerid = val[1];
+                } 
+            }
+            
+        };
+    </script>
+</body>
+</html> 

+ 491 - 0
wwwroot/main/FirstRegistre/api/GetCheckBarcode.ashx

@@ -0,0 +1,491 @@
+<%@ WebHandler Language="C#" Class="GetCheckBarcode" %>
+
+using System;
+using System.IO;
+using System.Collections.Generic;
+using System.Web;
+using System.Web.SessionState;
+using System.Configuration;
+using System.Data;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using Curtain.DataAccess;
+using Curtain.Log;
+using DK.XuWei.WebMes;
+using System.Linq;
+
+public class GetCheckBarcode : IHttpHandler
+{
+    public void ProcessRequest(HttpContext context)
+    {
+        context.Response.ContentType = "text/plain";
+        #region 获取切换栏
+        if (context.Request["m"].ToString() == "getli")
+        {
+            using (IDataAccess conn = DataAccess.Create())
+            {
+                string sqlStr = "SELECT ITEMSYTPE FROM TP_PM_FIRSTREGISTERITEMS GROUP BY ITEMSYTPE";
+                DataTable bt = conn.ExecuteDatatable(sqlStr);
+                List<string> result = new List<string>();
+                for (int i = 0; i < bt.Rows.Count; i++)
+                {
+                    result.Add(bt.Rows[i]["ITEMSYTPE"].ToString());
+                }
+                context.Response.Write(JsonConvert.SerializeObject(result, Formatting.Indented));
+            }
+        }
+        #endregion
+        #region
+        if (context.Request["m"].ToString() == "gettable")
+        {
+            using (IDataAccess conn = DataAccess.Create())
+            {//获取前端传递的表单
+                var formData = context.Request.Form;
+                string sqlStr = "SELECT ITEMSID, ITEMSNAME,ITEMSINFO FROM TP_PM_FIRSTREGISTERITEMS WHERE ITEMSYTPE='" + formData["ITEMSYTPE"].ToString() + "' ORDER BY ITEMSID";
+                DataTable bt = conn.ExecuteDatatable(sqlStr);
+                List<Dictionary<string, string>> result = new List<Dictionary<string, string>>();
+                for (int i = 0; i < bt.Rows.Count; i++)
+                {
+                    Dictionary<string, string> content = new Dictionary<string, string>();
+                    content.Add("ITEMSID", bt.Rows[i]["ITEMSID"].ToString());
+                    content.Add("ITEMSNAME", bt.Rows[i]["ITEMSNAME"].ToString());
+                    content.Add("ITEMSINFO", bt.Rows[i]["ITEMSINFO"].ToString());
+                    result.Add(content);
+                }
+                context.Response.Write(JsonConvert.SerializeObject(result, Formatting.Indented));
+            }
+        }
+        #endregion
+        #region 根据barcode获取产品ID产品名称
+        if (context.Request["m"].ToString() == "checkbarcode")
+        {
+            //获取前端传递的表单
+            var formData = context.Request.Form;
+            if (formData["BARCODE"].ToString() != null)
+            {
+                using (IDataAccess conn = DataAccess.Create())
+                {
+                    string sqlStr = @"SELECT GR.BARCODE,GO.GOODSID,GO.GOODSNAME,GR.LOGOID FROM TP_PM_GROUTINGDAILYDETAIL GR 
+                                  LEFT JOIN TP_MST_GOODS GO ON GR.GOODSID=GO.GOODSID 
+                                  WHERE GO.VALUEFLAG=1 AND GR.VALUEFLAG=1 
+                                  AND GR.BARCODE='" + formData["BARCODE"].ToString() + "'";
+
+                    DataTable dt = conn.ExecuteDatatable(sqlStr);
+                    context.Response.Write(JsonConvert.SerializeObject(dt, Formatting.Indented));
+                }
+            }
+        }
+        #endregion
+        //获取产品型号
+        if (context.Request["m"].ToString() == "getfirstregister")
+        { //获取前端传递的表单
+            var formData = context.Request.Form;
+            using (IDataAccess conn = DataAccess.Create())
+            {
+                if (formData["GOODSID"].ToString() != null && formData["GOODSNAME"].ToString() != null)
+                {
+                    string sqlStr = "SELECT F.*,D.DICTIONARYVALUE AS 产品类型 ,E.DICTIONARYVALUE AS 检验依据  " +
+                        "FROM TP_PM_FIRSTREGISTER F " +
+                        "LEFT JOIN TP_MST_DATADICTIONARY D ON F.FIRGOODSTYPE=D.DICTIONARYID " +
+                        "LEFT JOIN TP_MST_DATADICTIONARY E ON F.FIRBASIS=E.DICTIONARYID " +
+                        "WHERE F.GOODSID=" + formData["GOODSID"].ToString() + " AND F.LOGOID=" + formData["LOGOID"].ToString();
+                    DataTable bt = conn.ExecuteDatatable(sqlStr);
+
+                    List<Dictionary<string, string>> result = new List<Dictionary<string, string>>();
+                    for (int i = 0; i < bt.Rows.Count; i++)
+                    {
+                        Dictionary<string, string> content = new Dictionary<string, string>();
+                        //总单id
+                        content.Add("REGISTERID", bt.Rows[i]["REGISTERID"].ToString());
+                        //首件登记单号
+                        content.Add("REGISTERNO", bt.Rows[i]["REGISTERNO"].ToString());
+                        //LOGOID
+                        content.Add("LOGOID", formData["LOGOID"].ToString());
+                        //GOODSID
+                        content.Add("GOODSID", bt.Rows[i]["GOODSID"].ToString());
+                        //生产车间
+                        content.Add("WORKSHOP", bt.Rows[i]["WORKSHOP"].ToString());
+                        //产品名称
+                        content.Add("GOODSNAME", formData["GOODSNAME"].ToString());
+                        //产品型号
+                        content.Add("GOODSCODE", bt.Rows[i]["GOODSCODE"].ToString());
+                        //日期
+                        content.Add("DATA", DateTime.Parse(bt.Rows[i]["ACCOUNTDATE"].ToString()).ToString("yyyy-MM-dd"));
+                        //产品类型   
+                        content.Add("产品类型", bt.Rows[i]["产品类型"].ToString());
+                        //产品物料编码
+                        content.Add("MATERIALCODE", bt.Rows[i]["MATERIALCODE"].ToString());
+                        //首件数量
+                        content.Add("FIRQUANTITY", bt.Rows[i]["FIRQUANTITY"].ToString());
+                        //检验依据
+                        content.Add("检验依据", bt.Rows[i]["检验依据"].ToString());
+                        result.Add(content);
+                    }
+                    context.Response.Write(JsonConvert.SerializeObject(result, Formatting.Indented));
+                }
+            }
+        }
+        //上传图片
+        if (context.Request["m"].ToString() == "image")
+        {
+            if (context.Request.Files.Count > 0)
+            {
+                // 获取上传的文件  
+                HttpPostedFile file = context.Request.Files[0];
+
+                // 检查文件是否有效  
+                if (file != null && file.ContentLength > 0)
+                {
+                    // 读取文件内容(作为字节数组)  
+                    byte[] fileBytes = new byte[file.ContentLength];
+                    file.InputStream.Read(fileBytes, 0, file.ContentLength);
+                    // 获取其他表单字段  
+                    string registerId = context.Request.Form["REGISTERID"];
+                    string type = context.Request.Form["TYPE"];
+                    string field = "";
+                    if (type != null)
+                    {
+                        field = int.Parse(type) == 1 ? "PGSIGNATURE" : int.Parse(type) == 2 ? "CJSIGNATURE" : "SKSIGNATURE";
+                    }
+                    string sql = "UPDATE TP_PM_FIRSTREGISTER SET " + field + " =@fileBytes@ WHERE REGISTERID=" + registerId;
+                    CDAParameter parameter = new CDAParameter("fileBytes", fileBytes, DataType.Binary);
+                    int rsult = 0;
+                    using (IDataAccess conn = DataAccess.Create())
+                    {
+                        rsult = conn.ExecuteNonQuery(sql, parameter);
+                    }
+                    // 返回成功响应  
+                    context.Response.Write(rsult);
+                }
+            }
+        }
+        //查找图片
+        if (context.Request["m"].ToString() == "showimage")
+        {
+            // 获取其他表单字段  
+            string registerId = context.Request.Form["REGISTERID"];
+            string type = context.Request.Form["TYPE"];
+            string field = "";
+            if (type != null)
+            {
+                field = int.Parse(type) == 1 ? "PGSIGNATURE" : int.Parse(type) == 2 ? "CJSIGNATURE" : "SKSIGNATURE";
+            }
+            string sqlStr = "SELECT " + field + " FROM TP_PM_FIRSTREGISTER WHERE REGISTERID=" + registerId;
+            using (IDataAccess conn = DataAccess.Create())
+            {
+                try
+                {
+                    DataTable bt = conn.ExecuteDatatable(sqlStr);
+                    // 将图片转换为二进制                                       
+                    byte[] imageData = (byte[])bt.Rows[0][field];
+                    // 将图像数据转换为 base64 编码的字符串                     
+                    string base64String = Convert.ToBase64String(imageData);
+                    // 构建包含图像的 HTML 字符串                               
+                    string htmlString = "data:image/bmp;base64," + base64String;
+                    // 设置响应的内容类型和编码                                 
+                    context.Response.ContentType = "text/html; charset=utf-8";
+                    // 在响应中写入 HTML 字符串                                 
+                    context.Response.Write(JsonConvert.SerializeObject(new Dictionary<string, string>() { { "htmlString", htmlString }, { "code", "200" } }, Formatting.Indented));
+                }
+                catch
+                {
+                    context.Response.Write(JsonConvert.SerializeObject(new Dictionary<string, string>() { { "code", "500" } }, Formatting.Indented));
+                }
+            }
+        }
+        #region 根据barcode查找填写过数据
+        if (context.Request["m"].ToString() == "getregister")
+        {
+            var formData = context.Request.Form;
+            if (formData["BARCODE"].ToString() != null)
+            {
+                DataTable bt = new DataTable();
+                string sqlStr = "SELECT ITEMSYTPE,ITEMSID,ITEMSVALUE,ITEMSREMARKS  FROM TP_PM_FIRSTREGISTERDETAIL WHERE VALUEFLAG=1 AND BARCODE='" + formData["BARCODE"].ToString() + "'";
+                using (IDataAccess conn = DataAccess.Create())
+                {
+                    bt = conn.ExecuteDatatable(sqlStr);
+                }
+                List<Dictionary<string, string>> result = new List<Dictionary<string, string>>();
+                for (int i = 0; i < bt.Rows.Count; i++)
+                {
+                    Dictionary<string, string> content = new Dictionary<string, string>();
+                    content.Add("ITEMSYTPE", bt.Rows[i]["ITEMSYTPE"].ToString());
+                    content.Add("ITEMSID", bt.Rows[i]["ITEMSID"].ToString());
+                    content.Add("ITEMSVALUE", bt.Rows[i]["ITEMSVALUE"].ToString());
+                    content.Add("ITEMSREMARKS", bt.Rows[i]["ITEMSREMARKS"].ToString());
+                    result.Add(content);
+                }
+                context.Response.Write(JsonConvert.SerializeObject(new Dictionary<string, List<Dictionary<string, string>>>() { { "Result", result } }, Formatting.Indented)); ;
+            }
+        }
+        #endregion
+        //判断总单是否过量
+        if (context.Request["m"].ToString() == "checkcount")
+        {
+            var formData = context.Request.Form;
+            if (formData["REGISTERID"].ToString() != null && formData["BARCODE"].ToString() != null)
+            {
+                using (IDataAccess conn = DataAccess.Create())
+                {
+                    Boolean result = false;
+                    DataTable bt = conn.ExecuteDatatable(" SELECT  COUNT (REGISTERID) AS CHECKQUANTITY  FROM TP_PM_FIRSTREGISTERBAR WHERE REGISTERID=" + formData["REGISTERID"].ToString());
+                    DataTable lbt = conn.ExecuteDatatable("	SELECT FIRQUANTITY  FROM TP_PM_FIRSTREGISTER WHERE REGISTERID=" + formData["REGISTERID"].ToString());
+                    if (int.Parse(bt.Rows[0][0].ToString()) == int.Parse(lbt.Rows[0][0].ToString()))
+                    {
+                        DataTable dbt = conn.ExecuteDatatable(" SELECT * FROM TP_PM_FIRSTREGISTERBAR WHERE  BARCODE=" + formData["BARCODE"].ToString());
+                        result = dbt.Rows.Count == 0 ? true : false;
+                    }
+                    context.Response.Write(JsonConvert.SerializeObject(result));
+                }
+            }
+        }
+
+        //条码保存
+        if (context.Request["m"].ToString() == "check")
+        {
+            //获取json数据
+            using (var reader = new StreamReader(context.Request.InputStream))
+            {
+                string json = reader.ReadToEnd();
+                //json转对象
+                RootObject rootObject = JsonConvert.DeserializeObject<RootObject>(json);
+                if (rootObject.barcode != null)
+                {
+                    using (IDataAccess conn = DataAccess.Create())
+                    {
+                        try
+                        {
+                            //开启事务
+                            conn.BeginTransaction();
+                            //查询首件确定登记项目表
+                            DataTable btITEM = conn.ExecuteDatatable("SELECT * FROM TP_PM_FIRSTREGISTERITEMS");
+                            //查询首件确定登记总单
+                            DataTable bt = conn.ExecuteDatatable("SELECT * FROM TP_PM_FIRSTREGISTER WHERE VALUEFLAG=1 AND REGISTERID='" + rootObject.REGISTERID + "' ");
+                            //查询首件确定登记条码记录
+                            DataTable btBAR = conn.ExecuteDatatable("SELECT * FROM TP_PM_FIRSTREGISTERBAR");
+                            int i = 0;
+                            //当没有传来的条码
+                            if (btBAR.AsEnumerable().Where(ex => ex.Field<string>("BARCODE") == rootObject.barcode).FirstOrDefault() == null)
+                            {
+                                //创建记录
+                                DataTable dt = conn.ExecuteDatatable(@"SELECT SEQ_PM_FIRSTREGISTERBAR_ID.nextval  FROM dual");
+                                i = int.Parse(dt.Rows[0][0].ToString());
+                                conn.ExecuteNonQuery(@"INSERT INTO TP_PM_FIRSTREGISTERBAR (
+						        BARID,REGISTERID, BARCODE ) VALUES (@BARID@,@REGISTERID@, @BARCODE@ )",
+                                new CDAParameter("BARID", i),
+                                new CDAParameter("REGISTERID", bt.Rows[0]["REGISTERID"]),
+                                new CDAParameter("BARCODE", rootObject.barcode));
+                                //登记单状态为未登记
+                                if (int.Parse(bt.Rows[0]["STATUS"].ToString()) == 0)
+                                {
+                                    //更新已经登记单状态
+                                    conn.ExecuteNonQuery("UPDATE TP_PM_FIRSTREGISTER SET STATUS=STATUS+1 WHERE  REGISTERID=" + bt.Rows[0]["REGISTERID"]);
+                                }
+                            }
+                            //查询本条的条码ID
+                            DataTable dtAIL = conn.ExecuteDatatable(@"SELECT * FROM TP_PM_FIRSTREGISTERDETAIL WHERE BARCODE='" + rootObject.barcode + "' AND VALUEFLAG=1 ");
+                            //遍历数据
+                            foreach (var item in rootObject.data.Where(ex => ex.judgmentResult != null || ex.textInputValue != "").OrderBy(ex=>ex.ITEMSID))
+                            {
+                                //查找记录
+                                var jilu = dtAIL.AsEnumerable().Where(ex => ex.Field<decimal>("ITEMSID").ToString() == item.ITEMSID ).FirstOrDefault();
+                                //当有记录
+                                if (jilu != null)
+                                {
+                                    //记录和所填不一致
+                                    if (jilu["ITEMSVALUE"].ToString() != item.judgmentResult || jilu["ITEMSREMARKS"].ToString() != item.textInputValue)
+                                    {
+                                        //将记录更新
+                                        string sqlStr = "UPDATE TP_PM_FIRSTREGISTERDETAIL SET  ITEMSVALUE='" + item.judgmentResult + "'," +
+                                            " ITEMSREMARKS='" + item.textInputValue + "',UPDATEUSERID='" + rootObject.userId + "'" +
+                                            "  WHERE BARCODE='" + rootObject.barcode + "' " +
+                                        "AND ITEMSID=" + item.ITEMSID;
+                                        conn.ExecuteNonQuery(sqlStr);
+                                    }
+                                }
+                                //没有记录
+                                else
+                                {
+                                    //添加数据
+                                    conn.ExecuteNonQuery(@"INSERT INTO TP_PM_FIRSTREGISTERDETAIL (
+						        REGISTERID, BARID, BARCODE, ITEMSID,ITEMSYTPE,ITEMSNAME, ITEMSINFO,ITEMSVALUE,ITEMSREMARKS,
+                                ACCOUNTID,VALUEFLAG,CREATEUSERID,UPDATEUSERID ) VALUES (
+						        @REGISTERID@, @BARID@, @BARCODE@, @ITEMSID@,@ITEMSYTPE@,@ITEMSNAME@, @ITEMSINFO@, @ITEMSVALUE@, @ITEMSREMARKS@,
+                                @ACCOUNTID@, @VALUEFLAG@, @CREATEUSERID@,@UPDATEUSERID@)",
+                                    new CDAParameter("REGISTERID", bt.Rows[0]["REGISTERID"]),
+                                    new CDAParameter("BARID", i != 0 ? i : dtAIL.Rows[0]["BARID"]),
+                                    new CDAParameter("BARCODE", rootObject.barcode),
+                                    new CDAParameter("ITEMSID", item.ITEMSID),
+                                    new CDAParameter("ITEMSYTPE", btITEM.AsEnumerable().Where(ex => ex.Field<decimal>("ITEMSID") == decimal.Parse(item.ITEMSID)).FirstOrDefault().Field<string>("ITEMSYTPE")),
+                                    new CDAParameter("ITEMSNAME", btITEM.AsEnumerable().Where(ex => ex.Field<decimal>("ITEMSID") == decimal.Parse(item.ITEMSID)).FirstOrDefault().Field<string>("ITEMSNAME")),
+                                    new CDAParameter("ITEMSINFO", btITEM.AsEnumerable().Where(ex => ex.Field<decimal>("ITEMSID") == decimal.Parse(item.ITEMSID)).FirstOrDefault().Field<string>("ITEMSINFO")),
+                                    new CDAParameter("ITEMSVALUE", item.judgmentResult),
+                                    new CDAParameter("ITEMSREMARKS", item.textInputValue == "" ? null : item.textInputValue),
+                                    new CDAParameter("ACCOUNTID", rootObject.accountId),
+                                    new CDAParameter("VALUEFLAG", 1),
+                                    new CDAParameter("CREATEUSERID", rootObject.userId),
+                                    new CDAParameter("UPDATEUSERID", rootObject.userId));
+                                }
+                            }
+                            //查询该条码已经填写的判定
+                            DataTable btbarcodecount = conn.ExecuteDatatable("SELECT COUNT(*) FROM TP_PM_FIRSTREGISTERDETAIL WHERE VALUEFLAG=1 AND ITEMSVALUE IS NOT NULL   AND BARCODE=" + rootObject.barcode);
+                            //判断综合判定是否填写
+                            bool a = rootObject.data.Where(ex => ex.ITEMSID == btITEM.AsEnumerable().Where(x => x.Field<string>("ITEMSINFO") == null).FirstOrDefault().Field<decimal>("ITEMSID").ToString()).Select(ex => ex.textInputValue).FirstOrDefault() == null ? false : true;
+                            int b = btITEM.AsEnumerable().Where(ex => ex.Field<string>("ITEMSINFO") != null).Count();
+                            //查询首件确定登记条码记录
+                            DataTable btBARNew = conn.ExecuteDatatable("SELECT * FROM TP_PM_FIRSTREGISTERBAR");
+                            bool c = btBARNew.AsEnumerable().Where(ex => ex.Field<string>("BARCODE") == rootObject.barcode).FirstOrDefault() == null ? false : true;
+                            //填写的判定数量等于判定规定&&综合判定填写
+                            if (int.Parse(btbarcodecount.Rows[0][0].ToString()) == b && a && c)
+                            {
+                                //更新条码状态
+                                conn.ExecuteNonQuery("UPDATE TP_PM_FIRSTREGISTERBAR SET STATUS=1 WHERE  REGISTERID=" + bt.Rows[0]["REGISTERID"] + " AND BARCODE='" + rootObject.barcode + "'");
+                            }
+                            //更新已经检验数量
+                            conn.ExecuteNonQuery("UPDATE TP_PM_FIRSTREGISTER SET CHECKQUANTITY=(SELECT COUNT(*) FROM TP_PM_FIRSTREGISTERBAR WHERE STATUS=1 AND REGISTERID="+bt.Rows[0]["REGISTERID"]+")  WHERE  REGISTERID=" + bt.Rows[0]["REGISTERID"]);
+
+                            //查询总单已经检验数量和首件数量
+                            DataTable detailsbarcodecount = conn.ExecuteDatatable("SELECT FIRQUANTITY,CHECKQUANTITY FROM TP_PM_FIRSTREGISTER  WHERE  REGISTERID=" + bt.Rows[0]["REGISTERID"]);
+                            //当已经检验数量和首件数量相等
+                            if (int.Parse(detailsbarcodecount.Rows[0][0].ToString()) == int.Parse(detailsbarcodecount.Rows[0][1].ToString()))
+                            {
+                                //更新已经登记单状态
+                                conn.ExecuteNonQuery("UPDATE TP_PM_FIRSTREGISTER SET STATUS=2 WHERE  REGISTERID=" + bt.Rows[0]["REGISTERID"]);
+                            }
+                            //提交事务
+                            conn.Commit();
+                            context.Response.Write(JsonConvert.SerializeObject(new Dictionary<string, bool>() { { "result", true } }, Formatting.Indented));
+                        }
+                        catch (Exception e)
+                        {
+                            //回滚事务
+                            conn.Rollback();
+                            context.Response.Write(JsonConvert.SerializeObject(new Dictionary<string, bool>() { { "result", false } }, Formatting.Indented));
+                        }
+                    }
+                }
+            }
+        }
+        //获取总单号
+        if (context.Request["m"].ToString() == "assemble")
+        {
+            using (IDataAccess conn = DataAccess.Create())
+            {
+                DataTable dt = conn.ExecuteDatatable(@"SELECT REGISTERID,REGISTERNO  FROM TP_PM_FIRSTREGISTER  WHERE STATUS IN (2,3)");
+                context.Response.Write(JsonConvert.SerializeObject(dt, Formatting.Indented));
+            }
+        }
+        //获取总单信息
+        if (context.Request["m"].ToString() == "getoneassemble")
+        {
+            var formData = context.Request.Form;
+            using (IDataAccess conn = DataAccess.Create())
+            {
+                DataTable dt = conn.ExecuteDatatable(@"SELECT 	
+                                                       F.REGISTERID,
+	                                                   F.REGISTERNO,
+	                                                   F.LOGOID,
+	                                                   F.GOODSID, 
+	                                                   F.GOODSCODE,
+                                                       F.WORKSHOP,
+	                                                   TO_CHAR(F.ACCOUNTDATE, 'YYYY-MM-DD')AS DATA, 
+	                                                   F.MATERIALCODE,
+	                                                   F.FIRQUANTITY,
+                                                       F.ADVICE,
+                                                       F.ADVICEREMARKS,
+                                                       D.DICTIONARYVALUE AS 产品类型 ,
+	                                                   E.DICTIONARYVALUE AS 检验依据 ,
+	                                                   GO.GOODSNAME
+                                                       FROM TP_PM_FIRSTREGISTER F 
+                                                       LEFT JOIN TP_MST_DATADICTIONARY D ON F.FIRGOODSTYPE = D.DICTIONARYID 
+	                                                   LEFT JOIN TP_MST_DATADICTIONARY E ON F.FIRBASIS=E.DICTIONARYID 
+                                                       LEFT JOIN TP_MST_GOODS GO ON F.GOODSID=GO.GOODSID 
+                                                       WHERE F.REGISTERNO = " + formData["REGISTERNO"]);
+                context.Response.Write(JsonConvert.SerializeObject(dt, Formatting.Indented));
+            }
+        }
+        //根据总单获取产品条码
+        if (context.Request["m"].ToString() == "getabrcode")
+        {
+            var formData = context.Request.Form;
+            if (formData["REGISTERID"] != null)
+            {
+                using (IDataAccess conn = DataAccess.Create())
+                {
+                    DataTable dt = conn.ExecuteDatatable(@"SELECT BARCODE FROM TP_PM_FIRSTREGISTERBAR WHERE REGISTERID=" + formData["REGISTERID"]);
+                    context.Response.Write(JsonConvert.SerializeObject(dt, Formatting.Indented));
+                }
+            }
+        }
+        //总单保存
+        if (context.Request["m"].ToString() == "save")
+        {
+            var formData = context.Request.Form;
+            if (formData["ADVICE"] != null && formData["REGISTERID"] != null)
+            {
+                using (IDataAccess conn = DataAccess.Create())
+                {
+                    try
+                    {
+                        //开启事务
+                        conn.BeginTransaction();
+                        DataTable bt = conn.ExecuteDatatable("SELECT STATUS FROM TP_PM_FIRSTREGISTER WHERE REGISTERID=" + formData["REGISTERID"]);
+                        //更新总单 登记单状态 研发部意见+备注
+                        string strSQL = "UPDATE TP_PM_FIRSTREGISTER SET ADVICE= " + formData["ADVICE"];
+                        if (formData["ADVICEREMARKS"] != null)
+                        {
+                            strSQL += ",ADVICEREMARKS='" + formData["ADVICEREMARKS"] + "'";
+                        }
+                        if (int.Parse(bt.Rows[0]["STATUS"].ToString()) == 2)
+                        {
+                            strSQL += ",STATUS=STATUS+1";
+                        }
+                        strSQL += " WHERE REGISTERID=" + formData["REGISTERID"];
+                        conn.ExecuteNonQuery(strSQL);
+                        //查询签名
+                        DataTable dt = conn.ExecuteDatatable("SELECT PGSIGNATURE, CJSIGNATURE, SKSIGNATURE FROM TP_PM_FIRSTREGISTER  WHERE REGISTERID=" + formData["REGISTERID"]);
+                        //当签名不为空时
+                        if (dt.Rows[0]["PGSIGNATURE"].ToString() != string.Empty && dt.Rows[0]["CJSIGNATURE"].ToString() != string.Empty && dt.Rows[0]["SKSIGNATURE"].ToString() != string.Empty)
+                        {
+                            //更新登记单状态
+                            conn.ExecuteNonQuery("UPDATE TP_PM_FIRSTREGISTER SET STATUS=STATUS+1 WHERE  REGISTERID=" + formData["REGISTERID"]);
+                        }
+                        //提交事务
+                        conn.Commit();
+                        context.Response.Write(JsonConvert.SerializeObject(new Dictionary<string, bool>() { { "result", true } }, Formatting.Indented));
+                    }
+                    catch (Exception e)
+                    {
+                        //回滚事务
+                        conn.Rollback();
+                        context.Response.Write(JsonConvert.SerializeObject(new Dictionary<string, bool>() { { "result", false } }, Formatting.Indented));
+                    }
+                }
+            }
+        }
+    }
+
+    public bool IsReusable
+    {
+        get
+        {
+            return false;
+        }
+    }
+    public class ItemData
+    {
+        public string ITEMSID { get; set; }
+        public string judgmentResult { get; set; }
+        public string textInputValue { get; set; }
+    }
+
+    public class RootObject
+    {
+        public string REGISTERID { get; set; }
+        public string barcode { get; set; }
+        public string userId { get; set; }
+        public string accountId { get; set; }
+        public List<ItemData> data { get; set; }
+    }
+
+}

+ 35 - 0
wwwroot/main/FirstRegistre/api/LogInCheck_WCF.ashx

@@ -0,0 +1,35 @@
+<%@ WebHandler Language="C#" Class="LogInCheck_WCF" %>
+
+using System.Web;
+using System.Web.SessionState;
+using System.Web.Configuration;
+using Newtonsoft.Json.Linq;
+using Curtain.DataAccess;
+using Curtain.Log;
+using DK.XuWei.WebMes;
+
+/// <summary>
+/// 获取登录状态
+/// xuwei 2019-10-26
+/// </summary>
+public class LogInCheck_WCF : IHttpHandler, IReadOnlySessionState
+{
+    public void ProcessRequest(HttpContext context)
+    {
+        WCF wcf = new WCF();
+        JObject obj = wcf.GetSession();
+        if(obj.Count>0)
+            context.Response.Write(new JsonResult(obj).ToJson());
+        else
+            context.Response.Write(new JsonResult(JsonStatus.loginError).ToJson());
+    }
+
+    public bool IsReusable
+    {
+        get
+        {
+            return false;
+        }
+    }
+
+}

+ 735 - 0
wwwroot/main/FirstRegistre/index.html

@@ -0,0 +1,735 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
+    <meta http-equiv="Pragma" content="no-cache" />
+    <meta http-equiv="Expires" content="0" />
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <link rel="shortcut icon" href="/img/logo.png" />
+    <link rel="bookmark" href="/img/logo.png" />
+    <link rel="stylesheet" href="/plugins/bootstrap-4.3.1/css/bootstrap.min.css">
+    <link rel="stylesheet" href="/plugins/font-awesome-4.7.0/css/font-awesome.min.css">
+    <link href="/Plugins/bootstrap-select/css/bootstrap-select.min.css" rel="stylesheet" />
+    <link rel="stylesheet" href="../common/StyleSheet.css" />
+    <link href="/Plugins/bootstrap-4.3.1/css/bootstrap4-modal-fullscreen.css" rel="stylesheet" />
+    <script src="/Plugins/jquery-3.4.1/jquery-3.4.1.min.js"></script>
+    <script src="/Plugins/virtualkeyboard/xvirtualkeyboard.js"></script>
+    <style type="text/css">
+        .outlayer {
+            box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075);
+            border-radius: .25rem;
+            background-color: #fff;
+            box-sizing: border-box;
+            padding: 1rem 1.5rem .5rem 1.5rem;
+            margin: 1rem 1.5rem .5rem 1.5rem;
+        } 
+        .layer {
+            padding: 0;
+            margin-left: 0;
+            margin-right: 0;
+        } 
+        .formrow {
+            display: flex;
+            flex-wrap: wrap;
+            width: 100%; 
+        }
+       /* 切换栏*/
+        .tab {
+            width: 100%;
+            position: relative;
+            padding: 0;
+        } 
+        .tab_list {
+            width: 100%;
+        } 
+        .tab_list ul {
+            padding-left: 0;
+            margin: 0;
+        } 
+        .tab_list li {
+            width: 25%;
+            height: 45px;
+            list-style: none;
+            line-height: 45px;
+            text-align: center;
+            float: left;
+        } 
+        .tab_list .current {
+            background-color: #138496;
+            color: #fff;
+        }
+        .tab_con {
+            width: 100%;
+        }
+        /*展示区块*/
+        .item {
+            width: 100%; 
+            font-size: 20px; 
+            text-align: center; 
+            background: #efefef;
+            top: 50px;
+            position: absolute;
+        } 
+        table {
+            width: 100%;
+            border-collapse: collapse;
+        } 
+        th, td {
+            border: 1px solid #000; 
+            text-align: center;
+        } 
+        th {
+            background-color: #f2f2f2;
+        }
+        /*单选框*/
+        input[type="radio"] {
+            width: 20px;
+            height: 20px;  
+        }
+        /*表格输入框*/
+        .checkbox {
+            text-align: center;
+        } 
+        /*表格输入框*/
+        .hidden-style {
+            width: 100%;
+            /* 移除边框 */
+            border: none;
+            /* 设置背景透明 */
+            background: transparent;
+            /* 移除阴影 */
+            box-shadow: none;
+            /* 移除焦点时的轮廓线 */
+            outline: none;
+            /* 移除内边距 */
+            padding: 0;
+            /* 移除外边距 */
+            margin: 0;
+            /* 继承父元素的字体大小 */
+            font-size: inherit;
+        } 
+        /*签字版*/
+        .tablet {
+            flex: 1;
+            text-shadow: 0px 0px 0px #000000;
+            color: black
+        }
+        .frame {
+            width: 100%;
+            height: 370px;
+        }
+        .col-0 {
+            -ms-flex: 0 0 4.333333%;
+            flex: 0 0 4.333333%;
+            max-width: 4.333333%;
+        }
+    </style>
+    <title>东科软件</title>
+</head>
+<body class="bg-light">
+    <!--导航菜单-->
+    <script src="../common/navbar.js"></script>
+    <!--对话框-->
+    <!--<script src="../common/dialog.js"></script>-->
+    <!--顶部-->
+        <div class="outlayer">
+        <!--产品条码区块-->
+        <div class="formrow">
+            <div class="form-group col-4 mb-1">
+                <label for="产品条码">产品条码</label>
+                <input value="" onkeydown="if (event.keyCode == 13) loadProduct();" type="text" class="form-control" id="urltext" placeholder="请输入" required>
+            </div>
+            <div class="form-group col-8 align-self-end mb-1">
+                <button onclick="loadProduct()" type="button" class="btn btn-info btn-block">产品查询</button>
+            </div>
+        </div>
+        </div>
+        <div class="outlayer">
+        <div class="formrow">
+            <div class="form-group col-1 mb-1" style="max-width: 10%; flex: 10%; -ms-flex:10%">
+                <label>首件登记单号</label>
+                <input id="REGISTERNO" readonly type="text" class="form-control border-secondary">
+            </div>
+            <div class="form-group col-0 mb-1">
+                <label>生产车间</label>
+                <input id="WORKSHOP" readonly type="text" class="form-control border-secondary">
+            </div>
+            <div class="form-group col-2 mb-1">
+                <label>产品名称</label>
+                <input id="GOODSNAME" readonly type="text" class="form-control border-secondary">
+            </div>
+            <div class="form-group col-1 mb-1">
+                <label>产品型号</label>
+                <input id="GOODSCODE" readonly type="text" class="form-control border-secondary">
+            </div>
+            <div class="form-group col-1 mb-1">
+                <label>日期</label>
+                <input id="DATA" readonly type="text" class="form-control border-secondary">
+            </div>
+            <div class="form-group col-1 mb-1">
+                <label>产品类型</label>
+                <input id="产品类型" readonly type="text" class="form-control border-secondary">
+            </div>
+            <div class="form-group col-2 mb-1">
+                <label>物料编码</label>
+                <input id="MATERIALCODE" readonly type="text" class="form-control border-secondary">
+            </div>
+            <div class="form-group col-0 mb-1">
+                <label>首件数量</label>
+                <input id="FIRQUANTITY" readonly type="text" class="form-control border-secondary">
+            </div>
+            <div class="form-group col-2 mb-1">
+                <label>检验依据</label>
+                <input id="检验依据" readonly type="text" class="form-control border-secondary">
+            </div>
+        </div>
+    </div>
+        <!--下部-->
+        <!--左侧产品条码-->
+        <div class="outlayer" style="height: 500px">
+            <div class='tab'>
+                <div class='tab_list'>
+                    <ul id="myList">
+                        <li></li>
+                    </ul>
+                </div>
+                <div id="container" class='tab_con'>
+                </div>
+            </div>
+        </div>
+        <div class="outlayer">
+            <div class="form-group col-12 align-self-end mb-1">
+                <button onclick="submit()" type="button" class="btn btn-info btn-block">提交</button>
+            </div>
+        </div>
+        <script>   
+            /**总单id */
+            let REGISTERID;
+            /**产品条码 */
+            let barcode = '';
+            /**填写记录数据 */
+            let data = [];
+            /**tab栏数据 */
+            let li = [];
+            /**登录数据源 */
+            let jsonUser;
+            /**加载前调用*/
+            $(document).ready(function () {
+                loadData();
+            });
+            //加载 生产工号
+            function loadData() {
+                //检查登录状态
+                $.get('api/LogInCheck_WCF.ashx', function (data) {
+                    var json = JSON.parse(data);
+                    if (json["success"] == true) {
+                        //保存登录数据源
+                        jsonUser = json["rows"];
+                    }
+                    else {
+                        swal({
+                            title: '登录异常!',
+                            text: '请您先登录系统!',
+                            icon: 'error',
+                            button: '确定'
+                        }).then(function () {
+                            window.location = '/main/login/login.html';
+                        });
+                    }
+                });
+            }
+            /**获取切换栏 */
+            const getli = async () => {
+                //清空li
+                li.length = 0;
+                // 获取tab栏数据
+                const data = await $.ajax({
+                    url: 'api/GetCheckBarcode.ashx?m=getli',
+                    dataType: "json",
+                    type: "get"
+                });
+                // 处理数据
+                for (var i = 0; i < data.length; i++) {
+                    // 创建item和表格
+                    await createtable(data[i]);
+                    // 添加tab栏数据
+                    await li.push(data[i]);
+                }
+                // 调用函数来填充列表
+                await populateList(li); 
+            }
+            /**
+             * 创建表格
+             * @param tableid
+             */
+            const createtable = (tableid) => {
+                /**找到要创建的位置*/
+                const container = document.getElementById('container');
+                /**创建div结构 */
+                const div = document.createElement('div');
+                //赋值class
+                div.className = 'item';
+                /**创建表格 */
+                const table = document.createElement('table');
+                //设置属性
+                table.style.width = '100%';
+                table.id = tableid
+                /**创建表头 */
+                const thead = document.createElement('thead');
+                const headerRow = document.createElement('tr');
+                /**创建表头数据 */
+                headerRow.className = 'table-secondary';
+                ['检验项目', '要求', '判定结果', '异常情况'].forEach(headerText => {
+                    const th = document.createElement('th');
+                    th.scope = 'col';
+                    th.textContent = headerText;
+                    headerRow.appendChild(th);
+                });
+                thead.appendChild(headerRow);
+                /**创建表体 */
+                const tbody = document.createElement('tbody');
+                //依次填充结构
+                table.appendChild(thead);
+                table.appendChild(tbody);
+                div.appendChild(table);
+                container.appendChild(div);
+            }
+            /**
+             * 填充li
+             * @param items li集合
+             */
+            const populateList = async (items) => {
+                /**获取 ul*/
+                const ul = document.getElementById('myList');
+                // 清空现有的 <li> 元素
+                ul.innerHTML = '';
+                for (var i = 0; i < items.length; i++) {
+                    var item = items[i];
+                    /**获取当前li */
+                    const liElement = document.createElement('li');
+                    //第一个li
+                    if (i === 0) {
+                        //添加class(选中效果)
+                        liElement.classList.add('current');
+                    }
+                    //添加名称
+                    liElement.textContent = item;
+                    //将li放入ul中
+                    ul.appendChild(liElement);
+                    //生成该li对应的内容
+                  await  gettxt(item);
+                } 
+                //li初始化和点击事件
+                await lionclick();
+                await initializeRadioListeners();
+                await addinputvalue(barcode);
+            }
+            /**li与div联动(tabs) */
+            const lionclick = () => {
+                var lis = document.querySelectorAll('.tab_list li');
+                var items = document.querySelectorAll('.item');
+                // 设置所有 li 的 data-index 属性
+                lis.forEach(function (li, index) {
+                    li.setAttribute('data-index', index);
+                });
+
+                // 函数:根据 current li 显示对应的 item
+                function showCorrectItem() {
+                    var currentIndex = null;
+
+                    // 查找带有 class="current" 的 li 的索引
+                    lis.forEach(function (li, index) {
+                        if (li.classList.contains('current')) {
+                            currentIndex = index;
+                        }
+                    });
+                    // 隐藏所有 item
+                    items.forEach(function (item) {
+                        item.style.display = 'none';
+                    });
+                    // 显示对应的 item
+                    items[currentIndex].style.display = 'block';
+                }
+
+                // 页面加载完成后调用
+                showCorrectItem();
+
+                // 设置 li 的点击事件
+                lis.forEach(function (li) {
+                    li.addEventListener('click', function () {
+                        // 重置所有 li 的类名
+                        lis.forEach(function (otherLi) {
+                            otherLi.classList.remove('current');
+                        });
+
+                        // 设置当前 li 的类名为 'current'
+                        this.classList.add('current');
+                        // 显示对应的 item
+                        showCorrectItem(); // 调用函数来更新显示
+                    });
+                });
+
+            };
+            /**
+             * 获取表格内容
+             * @param ITEMSYTPE 类型
+             */
+            const gettxt = async (ITEMSYTPE) => {
+                //获取表格内容
+                const data = await $.ajax({
+                    url: 'api/GetCheckBarcode.ashx?m=gettable',
+                    data: { 'ITEMSYTPE': ITEMSYTPE },
+                    dataType: "json",
+                    type: "post"
+                });
+                // 处理数据
+                for (var i = 0; i < data.length; i++) {
+                    //填充表格数据
+                    await fillTable(data, ITEMSYTPE);
+                    await initializeRadioListeners();
+                }
+            }
+            /**
+             * 表格填充数据
+             * @param data 数据
+             * @param ITEMSYTPE 表格id
+             */
+            const fillTable = (data, tableid) => {
+                const tbodySelector = '#' + tableid + ' tbody';
+                const tbody = document.querySelector(tbodySelector);
+                // 清空容器
+                while (tbody.firstChild) {
+                    tbody.removeChild(tbody.firstChild);
+                }
+                // 遍历数据数组,并为每个项目创建一个新的表格行
+                /*   data.forEach(item => {*/
+                for (const item of data) {
+                    // 创建一个新的表格行
+                    const tr = document.createElement('tr');
+                    tr.id = item.ITEMSID;
+                    // 创建并填充第一个 <td> 元素(检验项目)
+                    const tdItemsName = document.createElement('td');
+                    tdItemsName.textContent = item.ITEMSNAME;
+                    tr.appendChild(tdItemsName);
+                    if (item.ITEMSID == 20) {
+                        const tdAbnormality = document.createElement('td');
+                        tdAbnormality.className = 'text';
+                        tdAbnormality.colSpan = 3;
+                        tdAbnormality.innerHTML = '<input type="text"  class="hidden-style">';
+                        tr.appendChild(tdAbnormality);
+                        tbody.appendChild(tr);
+                        continue;
+                    }
+                    // 创建并填充第二个 <td> 元素(要求)
+                    const tdItemsInfo = document.createElement('td');
+                    tdItemsInfo.textContent = item.ITEMSINFO;
+                    tr.appendChild(tdItemsInfo);
+
+                    //创建了空的 <td> 元素
+                    const tdResult = document.createElement('td');
+                    tdResult.className = 'radio';
+                    // 创建第一个单选按钮
+                    const radioOk = document.createElement('input');
+                    radioOk.type = 'radio';
+                    radioOk.name = item.ITEMSID;
+                    radioOk.value = '1';
+
+                    // 创建与单选按钮相邻的文本节点 "OK"
+                    const textOk = document.createTextNode('OK');
+
+                    // 创建第二个单选按钮
+                    const radioNg = document.createElement('input');
+                    radioNg.type = 'radio';
+                    radioNg.name = item.ITEMSID;
+                    radioNg.value = '0';
+                    // 创建与单选按钮相邻的文本节点 "NG"
+                    const textNg = document.createTextNode('NG');
+
+                    // 将元素添加到 tdResult 中
+                    tdResult.appendChild(radioOk);
+                    tdResult.appendChild(textOk);
+                    tdResult.appendChild(radioNg);
+                    tdResult.appendChild(textNg);
+                    // 添加 radio buttons
+                    tr.appendChild(tdResult);
+                    const tdAbnormality = document.createElement('td');
+                    tdAbnormality.className = 'text';
+                    tdAbnormality.innerHTML = '<input type="text" class="hidden-style">';
+                    tr.appendChild(tdAbnormality);
+                    // 将新的表格行添加到 tbody 中
+                    tbody.appendChild(tr);
+                };
+            }
+            /**定义一个函数来初始化所有单选按钮的事件监听器  */
+            const initializeRadioListeners = () => {
+                /**获取所有单选按钮*/
+                const radioButtons = document.querySelectorAll('input[type="radio"]');
+                /**获取所有输入框*/
+                const textButtons = document.querySelectorAll('input[type="text"]');
+                /**为每个单选按钮添加事件监听器*/
+                radioButtons.forEach(radio => {
+                    radio.addEventListener('change', handleRadioChange);
+                });
+                /**为每个输入框  添加事件监听器*/
+                textButtons.forEach(text => {
+                    text.addEventListener('change', handleRadioChange);
+                });
+            };
+            /**产品查询 */
+            const loadProduct = async () => {
+                barcode = '';
+                data.length = 0;
+                /**获取输入框的值  */
+                var productBarcode = document.getElementById('urltext').value;
+                 
+                //产品条码赋值
+                barcode = productBarcode;
+                /**总单信息数据 */
+                const checkdata = await check(barcode);
+                //未查到总单信息
+                if (checkdata[0] == null) {
+                    return swal({
+                        text: '产品条码无效!',
+                        button: true,
+                        icon: 'error',
+                        closeOnClickOutside: false
+                    }).then(document.getElementById('urltext').value = '');
+                }
+                //总单id赋值
+                REGISTERID = checkdata[0].REGISTERID;
+                /**判断总单是否过量 */
+                const result = await $.ajax({
+                    url: 'api/GetCheckBarcode.ashx?m=checkcount',
+                    data: { "REGISTERID": REGISTERID, "BARCODE": barcode },
+                    dataType: "json",
+                    type: "post"
+                });
+                if (result) {
+                    await swal({
+                        text: '首件数量已足够!',
+                        button: true,
+                        icon: 'error',
+                        closeOnClickOutside: false
+                    }).then(document.getElementById('urltext').value = '');
+                    return  window.location.reload();
+                }
+                //顶部信息展示区块赋值
+                $('#REGISTERNO').val(checkdata[0].REGISTERNO);
+                //生产车间
+                $('#WORKSHOP').val(checkdata[0].WORKSHOP);
+                $('#GOODSNAME').val(checkdata[0].GOODSNAME);
+                $('#GOODSCODE').val(checkdata[0].GOODSCODE);
+                $('#DATA').val(checkdata[0].DATA);
+                $('#产品类型').val(checkdata[0].产品类型);
+                $('#MATERIALCODE').val(checkdata[0].MATERIALCODE);
+                $('#FIRQUANTITY').val(checkdata[0].FIRQUANTITY);
+                $('#检验依据').val(checkdata[0].检验依据);
+                //装填tab栏(重新绘制页面)
+                await getli();
+                await addinputvalue(barcode);
+                // 清空输入框
+                //document.getElementById('urltext').value = '';
+            };
+            /**
+            * barcode校验
+            * @param barcode 产品条码
+            * @param index 输入的数量(输入第几个barcode)
+            */
+            const check = async (barcode) => {
+                /**获取总单信息对象*/
+                let GOODS = {
+                    GOODSID: '',
+                    GOODSNAME: '',
+                    LOGOID: ''
+                }
+                //调用顺序不可变
+                //根据barcode获取产品ID产品名称
+                await $.ajax({
+                    url: 'api/GetCheckBarcode.ashx?m=checkbarcode',
+                    data: { 'barcode': barcode },
+                    dataType: "json",
+                    type: "post",
+                    success: function (data) {
+                        GOODS.GOODSID = data[0].GOODSID;
+                        GOODS.GOODSNAME = data[0].GOODSNAME;
+                        GOODS.LOGOID = data[0].LOGOID;
+                    }
+                });
+                //添加总单信息
+                return $.ajax({
+                    url: 'api/GetCheckBarcode.ashx?m=getfirstregister',
+                    data: GOODS,
+                    dataType: "json",
+                    type: "post"
+                });
+            }
+            /**
+              * 监视各个tab栏内数据
+              * @param tableId 表格id
+              */
+            const getItem = (tableId) => {
+                /**根据id获取表格 */
+                const table = document.getElementById(tableId);
+                /**根据表格获取所有行 */
+                const rows = table.getElementsByTagName('tr');
+
+                /**跳过表头*/
+                for (let i = 1; i < rows.length; i++) {
+                    /**获取当前行 */
+                    const cells = rows[i].getElementsByTagName('td');
+                    /**查找包含单选按钮的单元格*/
+                    const radioCell = Array.from(cells).find(cell => cell.classList.contains('radio'));
+                    /**单选值 */
+                    let judgmentResult = null;
+                    //单选时
+                    if (radioCell) {
+                        /**获取单选集合 */
+                        const radioButtons = radioCell.getElementsByTagName('input');
+                        //遍历
+                        for (let j = 0; j < radioButtons.length; j++) {
+                            //被选中
+                            if (radioButtons[j].checked) {
+                                //赋值
+                                judgmentResult = radioButtons[j].value;
+                                break;
+                            }
+                        }
+                    }
+
+                    // 查找包含文本输入框的单元格
+                    const checkboxCell = Array.from(cells).find(cell => cell.classList.contains('text')); 
+                    /**输入框值 */
+                    let textInputValue = '';
+                    //赋值
+                    if (checkboxCell) {
+                        const textInput = checkboxCell.getElementsByTagName('input')[0];
+                        textInputValue = textInput.value.trim();
+                    }
+                    /**获取当前行的单选值以及输入框的值 */
+                    const item = {
+                        ITEMSID: rows[i].id,
+                        judgmentResult: judgmentResult,
+                        textInputValue: textInputValue,
+                    };
+                    // 检查 data 数组中是否已经存在具有相同 ITEMSID 的条目  
+                    let existingItem = data.find(itemInArray => itemInArray.ITEMSID === item.ITEMSID);
+
+                    if (existingItem) {
+                        // 如果存在,则更新该条目的值  
+                        existingItem.judgmentResult = judgmentResult;
+                        existingItem.textInputValue = textInputValue;
+                    } else {
+                        // 如果不存在,则添加新条目  
+                        data.push(item);
+                    } 
+                }
+            };
+            /**定义一个函数来处理单选按钮值和输入框的变化*/
+            const handleRadioChange = async (event) => {
+                /**获取触发事件*/
+                const trigger = event.target;
+                /**获取所在的行*/
+                const row = trigger.closest('tr');
+                if (row !== null) {
+                    const tableId = row.closest('table').id;
+                    /**调用getItem函数来获取当前表格的数据*/
+                    await getItem(tableId); 
+                }
+            };
+
+            /**提交 */
+            const submit = async () => {
+                /**获取输入框的值  */
+                var productBarcode = document.getElementById('urltext').value;
+                // 检查输入是否为空
+                if (productBarcode.trim() === '') {
+                    swal({
+                        text: '请输入产品条码!',
+                        button: true,
+                        icon: 'error',
+                        closeOnClickOutside: false
+                    });
+                    return;
+                }
+                const result= await $.ajax({
+                    url: 'api/GetCheckBarcode.ashx?m=check',
+                    dataType: "json",
+                    type: "post",
+                    contentType: "application/json; charset=utf-8",
+                    data: JSON.stringify({
+                      "REGISTERID" : REGISTERID, "barcode": barcode, "accountId": jsonUser.accountId, "userId": jsonUser.userId, "data": data
+                    }) 
+                })
+                console.log(result, 'result')
+                await swal({
+                    text: result.result   ? '保存成功!' : '保存失败',
+                    button: true,
+                    icon: result.result  ? 'success':'error',
+                    closeOnClickOutside: false
+                });
+                window.location.reload();
+            }
+            /**
+             * 根据barcode查找填写过数据
+             * @param barcode
+             */
+            const addinputvalue = async (barcode) => {
+                /**barcode查找填写过数据 */
+                const data = await $.ajax({
+                    url: 'api/GetCheckBarcode.ashx?m=getregister',
+                    dataType: "json",
+                    type: "post",
+                    data: { 'BARCODE': barcode }
+                })
+                // 处理数据
+                for (var i = 0; i < data.Result.length; i++) {
+                    //将数据回显
+                    await setval(data.Result[i]);
+                }
+            }
+            /**
+             * 将数据放置table中
+             * @param data 数据
+             */
+            const setval = async (data) => {
+                /**根据表格指定行 */ 
+                const specificRow =await document.getElementById(data.ITEMSID); 
+                /**获取当前行 */
+                const cells = await specificRow.getElementsByTagName('td');
+                if (data.ITEMSID == 20) {
+                    // 查找包含文本输入框的单元格
+                    const checkboxCell = Array.from(cells).find(cell => cell.classList.contains('text')).getElementsByTagName('input')[0];
+                    //赋值
+                    checkboxCell.value = data.ITEMSREMARKS.trim();
+                    //将表格数据放置在对象中
+                    await getItem(data.ITEMSYTPE);
+                    return;
+                }
+                /**查找包含单选按钮的单元格*/
+                const radioCell = Array.from(cells).find(cell => cell.classList.contains('radio'));
+                /**获取单选输入框 */
+                const radioInputs = radioCell.getElementsByTagName('input');
+                //赋值
+                if (data.ITEMSVALUE == '1') {
+                    radioInputs[0].checked = true;
+                } else if (data.ITEMSVALUE == '0') {
+                    radioInputs[1].checked = true;
+                }
+                // 查找包含文本输入框的单元格
+                const checkboxCell = Array.from(cells).find(cell => cell.classList.contains('text')).getElementsByTagName('input')[0];
+                //赋值
+                checkboxCell.value = data.ITEMSREMARKS.trim();
+                //将表格数据放置在对象中
+                await getItem(data.ITEMSYTPE);
+            }
+        </script>
+        <!--版权信息-->
+        <script src="../common/footer.js"></script>
+        <script src="/Plugins/bootstrap-4.3.1/js/bootstrap.bundle.min.js"></script>
+        <script src="/Plugins/bootstrap-select/js/bootstrap-select.min.js"></script>
+        <script src="/Plugins/sweetalert/sweetalert.min.js"></script>
+        <script src="/Plugins/xrequest/xrequest.min.js"></script>
+        <script src="../Common/xuwell.js"></script>
+</body> 
+</html>

+ 774 - 0
wwwroot/main/FirstRegistre/overallview.html

@@ -0,0 +1,774 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
+    <meta http-equiv="Pragma" content="no-cache" />
+    <meta http-equiv="Expires" content="0" />
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <link rel="shortcut icon" href="/img/logo.png" />
+    <link rel="bookmark" href="/img/logo.png" />
+    <link rel="stylesheet" href="/plugins/bootstrap-4.3.1/css/bootstrap.min.css">
+    <link rel="stylesheet" href="/plugins/font-awesome-4.7.0/css/font-awesome.min.css">
+    <link href="/Plugins/bootstrap-select/css/bootstrap-select.min.css" rel="stylesheet" />
+    <link rel="stylesheet" href="../common/StyleSheet.css" />
+    <link href="/Plugins/bootstrap-4.3.1/css/bootstrap4-modal-fullscreen.css" rel="stylesheet" />
+    <script src="/Plugins/jquery-3.4.1/jquery-3.4.1.min.js"></script>
+    <script src="/Plugins/virtualkeyboard/xvirtualkeyboard.js"></script>
+    <style type="text/css">
+        .outlayer {
+            box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075);
+            border-radius: .25rem;
+            background-color: #fff;
+            box-sizing: border-box;
+            padding: 1rem 1.5rem .5rem 1.5rem;
+            margin: 1rem 1.5rem .5rem 1.5rem;
+        }
+
+        .layer {
+            padding: 0;
+            margin-left: 0;
+            margin-right: 0;
+        }
+
+        .formrow {
+            display: flex;
+            flex-wrap: wrap;
+            width: 100%; 
+        }
+       /* 切换栏*/
+        .tab {
+            width: 100%;
+            position: relative;
+            padding: 0;
+        }
+
+        .tab_list {
+            width: 100%;
+        }
+
+            .tab_list ul {
+                padding-left: 0;
+                margin: 0;
+            }
+
+            .tab_list li {
+                width: 16.66%;
+                height: 45px;
+                list-style: none;
+                line-height: 45px;
+                text-align: center;
+                float: left;
+            }
+
+            .tab_list .current {
+                background-color: #138496;
+                color: #fff;
+            }
+        .tab_con {
+            width: 100%;
+        }
+        /*展示区块*/
+        .item {
+            width: 100%;
+            height: 450px;
+            font-size: 20px; 
+            text-align: center; 
+            background: #efefef;
+            top: 50px;
+            position: absolute;
+        } 
+        table {
+            width: 100%;
+            border-collapse: collapse;
+        }
+
+        th, td {
+            border: 1px solid #000; 
+            text-align: center;
+        }
+
+        th {
+            background-color: #f2f2f2;
+        }
+        /*单选框*/
+        input[type="radio"] {
+            width: 20px;
+            height: 20px;  
+        }
+        /*表格输入框*/
+        .checkbox {
+            text-align: center;
+        } 
+        /*表格输入框*/
+        .hidden-style {
+            width: 100%;
+            /* 移除边框 */
+            border: none;
+            /* 设置背景透明 */
+            background: transparent;
+            /* 移除阴影 */
+            box-shadow: none;
+            /* 移除焦点时的轮廓线 */
+            outline: none;
+            /* 移除内边距 */
+            padding: 0;
+            /* 移除外边距 */
+            margin: 0;
+            /* 继承父元素的字体大小 */
+            font-size: inherit;
+        } 
+        /*签字版*/
+        .tablet {
+            flex: 1;
+            text-shadow: 0px 0px 0px #000000;
+            color: black
+        }
+        .frame {
+            width: 100%;
+            height: 370px;
+        }
+        .flex {
+            display: flex;
+        }
+        .clickable-item {
+            cursor: pointer;
+        }
+    </style>
+    <title>东科软件</title>
+</head>
+<body class="bg-light">
+    <!--导航菜单-->
+    <script src="../common/navbar.js"></script> 
+    <div class="flex">
+        <!--左侧待签名-->
+        <div class="outlayer" style="width:250px;">
+            <ul id="REGISTERNOLIST" class="list-group">
+            </ul>
+        </div>
+        <!--内容-->
+        <div class="outlayer">
+            <div class="flex" style="width:100%">
+                <!--展示信息-->
+                <div class="form-group col-2 mb-1">
+                    <label>首件登记单号</label>
+                    <input id="REGISTERNO" readonly type="text" class="form-control border-secondary">
+                </div>
+                <div class="form-group col-2 mb-1">
+                    <label>生产车间</label>
+                    <input id="WORKSHOP" readonly type="text" class="form-control border-secondary">
+                </div>
+                <div class="form-group col-3 mb-1">
+                    <label>产品名称</label>
+                    <input id="GOODSNAME" readonly type="text" class="form-control border-secondary">
+                </div>
+                <div class="form-group col-3 mb-1">
+                    <label>产品型号</label>
+                    <input id="GOODSCODE" readonly type="text" class="form-control border-secondary">
+                </div>
+                <div class="form-group col-2  mb-1">
+                    <label>日期</label>
+                    <input id="DATA" readonly type="text" class="form-control border-secondary">
+                </div>
+            </div>
+            <div class="flex" style="width:100%">
+                <div class="form-group col-2 mb-1">
+                    <label>产品类型</label>
+                    <input id="产品类型" readonly type="text" class="form-control border-secondary">
+                </div>
+                <div class="form-group col-2 mb-1">
+                    <label>物料编码</label>
+                    <input id="MATERIALCODE" readonly type="text" class="form-control border-secondary">
+                </div>
+                <div class="form-group col-2 mb-1">
+                    <label>首件数量</label>
+                    <input id="FIRQUANTITY" readonly type="text" class="form-control border-secondary">
+                </div>
+                <div class="form-group col-3 mb-1">
+                    <label>检验依据</label>
+                    <input id="检验依据" readonly type="text" class="form-control border-secondary">
+                </div>
+            </div>
+            <div class="flex">
+                <div class="list-group-item" style="flex: 1; text-align: center">研发部意见</div>
+                <div class="list-group-item" style="flex: 5; text-align: center">
+                    <form>
+                        <div class="form-check form-check-inline">
+                            <input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio1" value="1">
+                            <label class="form-check-label" for="inlineRadio1">合格</label>
+                        </div>
+                        <div class="form-check form-check-inline">
+                            <input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio2" value="0">
+                            <label class="form-check-label" for="inlineRadio2">不合格</label>
+                        </div>
+                        <div class="input-group input-group-lg">
+                            <div class="input-group-prepend">
+                                <span class="input-group-text" id="inputGroup-sizing-lg">意见</span>
+                            </div>
+                            <input type="text" id="opinion" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-lg">
+                        </div>
+                    </form>
+                </div>
+            </div>
+            <div class="flex">
+                <div class="list-group-item" style="flex: 1; text-align: center">部门签名</div>
+                <div class="list-group-item" style="flex: 5; text-align: center; flex-direction: row; align-items: center; ">
+                    <button type="button" data-target="#tablet" data-toggle="modal" class="btn btn-primary btn-lg" style="margin:0 30px" onclick="openiframe(1)">品管签字</button>
+                    <button type="button" data-target="#tablet" data-toggle="modal" class="btn btn-primary btn-lg" style="margin:0 30px" onclick="openiframe(2)">成检签字</button>
+                    <button type="button" data-target="#tablet" data-toggle="modal" class="btn btn-primary btn-lg" style="margin:0 30px" onclick="openiframe(3)">生控签字</button>
+                </div>
+            </div>
+            <div class="flex">
+                <div class="form-group col-12 align-self-end mb-1" style="margin-top: 20px;">
+                    <button onclick="save()" type="button" class="btn btn-info btn-block">保存</button>
+                </div>
+            </div>
+        </div>
+        <!--右侧产品条码-->
+        <div class="outlayer" style="width:250px;">
+            <ul id="getbarcodelist" class="list-group">
+            </ul>
+        </div>
+        <!--产品条码弹窗-->
+        <div class="modal" id="barcode" role="dialog" aria-labelledby="myModalLabel">
+            <div class="modal-dialog modal-xl" role="document">
+                <div class="modal-content" style="outline: 0; height: 600px; width: 1500px;">
+                    <div class="modal-header">
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                            <span aria-hidden="true">×</span>
+                        </button>
+                    </div>
+                    <div class="modal-body">
+                        <div class='tab'>
+                            <div class='tab_list'>
+                                <ul id="myList">
+                                </ul>
+                            </div>
+                            <div id="container" class='tab_con'>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div> 
+        <!--签字板-->
+        <div class="modal" id="tablet" role="dialog" aria-labelledby="myModalLabel">
+            <div class="modal-dialog modal-xl" role="document">
+                <div class="modal-content">
+                    <div class="modal-header">
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                            <span aria-hidden="true">×</span>
+                        </button>
+                    </div>
+                    <div class="modal-body">
+                        <iframe id="myIframe" style="width:100%;height:370px;"></iframe>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <script>
+        /**首件数量(从总单获取)*/
+        let maxnum = 1;
+        /**产品id(记录第一次)*/
+        let GOODSID = 0;
+        /**总单id */
+        let REGISTERID = 0; 
+        /**加载前调用*/
+        $(document).ready(function () {
+            loadData();
+        });
+        //加载 生产工号
+        function loadData() {
+            //检查登录状态
+            $.get('api/LogInCheck_WCF.ashx', function (data) {
+                var json = JSON.parse(data);
+                if (json["success"] == true) {
+                    first();
+                }
+                else {
+                    swal({
+                        title: '登录异常!',
+                        text: '请您先登录系统!',
+                        icon: 'error',
+                        button: '确定'
+                    }).then(function () {
+                        window.location = '/main/login/login.html';
+                    });
+                }
+            });
+        }
+        /**获取总单数据 */
+        const first = async () => {
+            let REGISTERNO = ['待检验/待签名']
+            const data = await $.ajax({
+                url: 'api/GetCheckBarcode.ashx?m=assemble',
+                dataType: "json",
+                type: "GET" 
+            })
+            for (var i = 0; i < data.length; i++) {
+                REGISTERNO.push(data[i].REGISTERNO)
+            }
+            //调用函数来填充列表
+          await  populateList(REGISTERNO,'REGISTERNOLIST')
+        } 
+        /**
+        * barcode校验
+        * @param REGISTERNO 产品条码 
+        */
+        const check = async (REGISTERNO) => {
+            const data = await $.ajax({
+                url: 'api/GetCheckBarcode.ashx?m=getoneassemble',
+                data: { "REGISTERNO": REGISTERNO },
+                dataType: "json",
+                type: "post"
+            });
+            //顶部信息展示区块赋值
+            $('#REGISTERNO').val(data[0].REGISTERNO);
+            //生产车间
+            $('#WORKSHOP').val(data[0].WORKSHOP);
+            $('#GOODSNAME').val(data[0].GOODSNAME);
+            $('#GOODSCODE').val(data[0].GOODSCODE);
+            $('#DATA').val(data[0].DATA);
+            $('#产品类型').val(data[0].产品类型);
+            $('#MATERIALCODE').val(data[0].MATERIALCODE);
+            $('#FIRQUANTITY').val(data[0].FIRQUANTITY);
+            $('#检验依据').val(data[0].检验依据);
+            $('#opinion').val(data[0].ADVICEREMARKS);
+            const radios = document.getElementsByName('inlineRadioOptions');
+            radios[0].checked = false;
+            radios[1].checked = false;
+            if (data[0].ADVICE!=null) { 
+                data[0].ADVICE == 1 ? radios[0].checked = true : radios[1].checked = true
+            }
+            REGISTERID = data[0].REGISTERID
+;
+            let barcode = ['产品条码']
+            const data2 = await $.ajax({
+                url: 'api/GetCheckBarcode.ashx?m=getabrcode',
+                data: { "REGISTERID": data[0].REGISTERID },
+                dataType: "json",
+                type: "post"
+            });
+            for (var i = 0; i < data2.length; i++) {
+                //添加tab栏数据
+                barcode.push(data2[i].BARCODE)
+            }
+            // 调用函数来填充列表
+            await populateList(barcode, 'getbarcodelist');
+        } 
+        /**
+        * 监视各个tab栏内数据
+        * @param tableId 表格id
+        */
+        const getItem = (tableId) => {
+            /**根据id获取表格 */
+            const table = document.getElementById(tableId); 
+            /**根据表格获取所有行 */
+            const rows = table.getElementsByTagName('tr');
+            /**返回值集合 */
+            const data = [];
+            /**跳过表头*/
+            for (let i = 1; i < rows.length; i++) {
+                /**获取当前行 */
+                const cells = rows[i].getElementsByTagName('td');
+                /**查找包含单选按钮的单元格*/
+                const radioCell = Array.from(cells).find(cell => cell.classList.contains('radio'));
+                /**单选值 */
+                let judgmentResult = null;
+                //单选时
+                if (radioCell) {
+                    /**获取单选集合 */
+                    const radioButtons = radioCell.getElementsByTagName('input');
+                    //遍历
+                    for (let j = 0; j < radioButtons.length; j++) {
+                        //被选中
+                        if (radioButtons[j].checked) {
+                            //赋值
+                            judgmentResult = radioButtons[j].value;
+                            break;
+                        }
+                    }
+                } 
+                // 查找包含文本输入框的单元格
+                const checkboxCell = Array.from(cells).find(cell => cell.classList.contains('checkbox'));
+                /**输入框值 */
+                let textInputValue = '';
+                //赋值
+                if (checkboxCell) {
+                    const textInput = checkboxCell.getElementsByTagName('input')[0];
+                    textInputValue = textInput.value.trim();
+                }
+                /**获取当前行的单选值以及输入框的值 */
+                const item = {
+                    judgmentResult: judgmentResult,
+                    textInputValue: textInputValue,
+                };
+                //添加返回值
+                data.push(item);
+            }
+            //返回对象
+            return { tableData: data };
+        };  
+        /**
+        * 左侧待检验/待签名列表
+        * @param items 总单号
+        * @param divid 区块id
+        */
+        const populateList = async (items, divid) => { 
+            /**获取 ul*/
+            const ul = document.getElementById(divid);
+            // 清空现有的 <li> 元素
+            ul.innerHTML = '';
+            //遍历所有li 
+            await items.forEach((item, index) => {
+              
+                /**获取当前li */
+                const liElement = document.createElement('li');
+                //添加class
+                liElement.classList.add('list-group-item');
+                //添加名称
+                liElement.textContent = item; 
+                if (index != 0) {
+                    //添加鼠标互动
+                    liElement.classList.add('clickable-item');
+                       //添加点击事件
+                       liElement.addEventListener('click', function () {
+                           //展示区块为总单
+                           if (divid == 'REGISTERNOLIST')
+                           {
+                               //添加方法 查询总单信息 
+                               check(item);
+                           }
+                           //展示区块为产品条码
+                           else if (divid == 'getbarcodelist') {
+                               //添加方法 查找barcode的数据
+                               addinputvalue(item);
+                               //开启产品条码弹窗
+                               $('#barcode').modal('show');
+                           }
+                    });
+                }
+                //将li放入ul中
+                ul.appendChild(liElement);
+            });
+        }
+        /**
+        * 根据barcode查找填写过数据
+        * @param barcode 产品条码
+        */
+        const addinputvalue = async (barcode) => {
+            //绘制页面
+            await gettableli();
+            const data = await $.ajax({
+                url: 'api/GetCheckBarcode.ashx?m=getregister',
+                dataType: "json",
+                type: "post",
+                data: { 'BARCODE': barcode }
+            })
+            // 处理数据
+            for (var i = 0; i < data.Result.length; i++) {
+                //将数据回显
+                await setval(data.Result[i]);
+            }
+        }
+        /**
+        * 将数据放置table中
+        * @param data 数据
+        */
+        const setval = async (data) => {
+            /**根据表格指定行 */
+            const specificRow = await document.getElementById(data.ITEMSID); 
+            /**获取当前行 */
+            const cells = await specificRow.getElementsByTagName('td');
+            if (data.ITEMSID==20) {
+                // 查找包含文本输入框的单元格
+                const checkboxCell = Array.from(cells).find(cell => cell.classList.contains('text')).getElementsByTagName('input')[0];
+                //赋值
+                checkboxCell.value = data.ITEMSREMARKS.trim();
+                //将表格数据放置在对象中
+                await getItem(data.ITEMSYTPE);
+                return;
+            }
+            /**查找包含单选按钮的单元格*/
+            const radioCell = Array.from(cells).find(cell => cell.classList.contains('radio'));
+            /**获取单选输入框 */
+            const radioInputs = radioCell.getElementsByTagName('input');
+            //赋值
+            if (data.ITEMSVALUE == '1') {
+                radioInputs[0].checked = true;
+            } else if (data.ITEMSVALUE == '0') {
+                radioInputs[1].checked = true;
+            }
+            // 查找包含文本输入框的单元格
+            const checkboxCell = Array.from(cells).find(cell => cell.classList.contains('text')).getElementsByTagName('input')[0];
+            //赋值
+            checkboxCell.value = data.ITEMSREMARKS.trim();
+            //将表格数据放置在对象中
+            await getItem(data.ITEMSYTPE);
+        }
+        /**获取切换栏 */
+        const gettableli = async () => {
+            let li = [];
+            //获取tab栏数据
+            await $.ajax({
+                url: 'api/GetCheckBarcode.ashx?m=getli',
+                dataType: "json",
+                type: "get",
+                success: function (data) {
+                    for (var i = 0; i < data.length; i++) {
+                        //创建item和表格
+                        createtable(data[i]);
+                        //添加tab栏数据
+                        li.push(data[i])
+                    }
+                }
+            })
+            // 调用函数来填充列表
+            await gettablepopulateList(li);
+        }
+        /**
+        * 填充li
+        * @param items li集合
+        */
+        const gettablepopulateList = async (items) => {
+            /**获取 ul*/
+            const ul = document.getElementById('myList');
+            // 清空现有的 <li> 元素
+            ul.innerHTML = '';
+            //遍历所有li
+            for (var i = 0; i < items.length; i++) {
+                var item = items[i];
+                /**获取当前li */
+                const liElement = document.createElement('li');
+                //第一个li
+                if (i === 0) {
+                    //添加class
+                    liElement.classList.add('current');
+                }
+                //添加名称
+                liElement.textContent = item;
+                //将li放入ul中
+                ul.appendChild(liElement);
+                //生成该li对应的内容
+              await  gettxt(item);
+            } 
+            //li初始化和点击事件
+            lionclick(); 
+        }
+        /**li与div联动(tabs) */
+        const lionclick = () => {
+            var lis = document.querySelectorAll('.tab_list li');
+            var items = document.querySelectorAll('.item');
+            // 设置所有 li 的 data-index 属性
+            lis.forEach(function (li, index) {
+                li.setAttribute('data-index', index);
+            }); 
+            // 函数:根据 current li 显示对应的 item
+            function showCorrectItem() {
+                var currentIndex = null; 
+                // 查找带有 class="current" 的 li 的索引
+                lis.forEach(function (li, index) {
+                    if (li.classList.contains('current')) {
+                        currentIndex = index;
+                    }
+                });
+                // 隐藏所有 item
+                items.forEach(function (item) {
+                    item.style.display = 'none';
+                });
+                // 显示对应的 item
+                items[currentIndex].style.display = 'block';
+            } 
+            // 页面加载完成后调用
+            showCorrectItem(); 
+            // 设置 li 的点击事件
+            lis.forEach(function (li) {
+                li.addEventListener('click', function () {
+                    // 重置所有 li 的类名
+                    lis.forEach(function (otherLi) {
+                        otherLi.classList.remove('current');
+                    }); 
+                    // 设置当前 li 的类名为 'current'
+                    this.classList.add('current');
+                    // 显示对应的 item
+                    showCorrectItem(); // 调用函数来更新显示
+                });
+            });
+
+        };
+        /**
+        * 创建表格
+        * @param tableid 表格id
+        */
+        const createtable = (tableid) => {
+            /**找到要创建的位置*/
+            const container = document.getElementById('container');
+            /**创建div结构 */
+            const div = document.createElement('div');
+            //赋值class
+            div.className = 'item';
+            /**创建表格 */
+            const table = document.createElement('table');
+            //设置属性
+            table.style.width = '100%';
+            table.id = tableid
+            /**创建表头 */
+            const thead = document.createElement('thead');
+            const headerRow = document.createElement('tr');
+            /**创建表头数据 */
+            headerRow.className = 'table-secondary';
+            ['检验项目', '要求', '判定结果', '异常情况'].forEach(headerText => {
+                const th = document.createElement('th');
+                th.scope = 'col';
+                th.textContent = headerText;
+                headerRow.appendChild(th);
+            });
+            thead.appendChild(headerRow);
+            /**创建表体 */
+            const tbody = document.createElement('tbody');
+            //依次填充结构
+            table.appendChild(thead);
+            table.appendChild(tbody);
+            div.appendChild(table);
+            container.appendChild(div);
+        }
+        /**
+        * 获取表格内容
+        * @param ITEMSYTPE 类型
+        */
+        const gettxt = (ITEMSYTPE) => {
+            //获取表格内容
+            $.ajax({
+                url: 'api/GetCheckBarcode.ashx?m=gettable',
+                data: { 'ITEMSYTPE': ITEMSYTPE },
+                dataType: "json",
+                type: "post",
+                success: function (data) {
+                    //填充表格数据
+                    fillTable(data, ITEMSYTPE); 
+                }
+            })
+        }
+        /**
+        * 表格填充数据
+        * @param data 数据
+        * @param tableid 表格id
+        */
+        const fillTable = (data, tableid) => {
+            const tbodySelector = '#' + tableid + ' tbody';
+            const tbody = document.querySelector(tbodySelector);
+            // 清空容器
+            while (tbody.firstChild) {
+                tbody.removeChild(tbody.firstChild);
+            } 
+            // 遍历数据数组,并为每个项目创建一个新的表格行
+            for (const item of data) { 
+                // 创建一个新的表格行
+                const tr = document.createElement('tr');
+                tr.id = item.ITEMSID;
+                // 创建并填充第一个 <td> 元素(检验项目)
+                const tdItemsName = document.createElement('td');
+                tdItemsName.textContent = item.ITEMSNAME;
+                tr.appendChild(tdItemsName);
+                if (item.ITEMSID == 20) {
+                    const tdAbnormality = document.createElement('td');
+                    tdAbnormality.className = 'text';
+                    tdAbnormality.colSpan = 3;
+                    tdAbnormality.innerHTML = '<input type="text" readonly class="hidden-style">';
+                    tr.appendChild(tdAbnormality);
+                    tbody.appendChild(tr);
+                    continue;
+                }
+                // 创建并填充第二个 <td> 元素(要求)
+                const tdItemsInfo = document.createElement('td');
+                tdItemsInfo.textContent = item.ITEMSINFO;
+                tr.appendChild(tdItemsInfo); 
+                //创建了空的 <td> 元素
+                const tdResult = document.createElement('td');
+                tdResult.className = 'radio';
+                // 创建第一个单选按钮
+                const radioOk = document.createElement('input');
+                radioOk.type = 'radio';
+                radioOk.name = item.ITEMSID;
+                radioOk.value = '1';
+                radioOk.disabled  = true; 
+                // 创建与单选按钮相邻的文本节点 "OK"
+                const textOk = document.createTextNode('OK'); 
+                // 创建第二个单选按钮
+                const radioNg = document.createElement('input');
+                radioNg.type = 'radio';
+                radioNg.name = item.ITEMSID;
+                radioNg.value = '0';
+                radioNg.disabled  = true;
+                // 创建与单选按钮相邻的文本节点 "NG"
+                const textNg = document.createTextNode('NG'); 
+                // 将元素添加到 tdResult 中
+                tdResult.appendChild(radioOk);
+                tdResult.appendChild(textOk);
+                tdResult.appendChild(radioNg);
+                tdResult.appendChild(textNg);
+                // 添加 radio buttons
+                tr.appendChild(tdResult);
+                const tdAbnormality = document.createElement('td');
+                tdAbnormality.className = 'text';
+                tdAbnormality.innerHTML = '<input type="text" readonly class="hidden-style">';
+                tr.appendChild(tdAbnormality);
+                // 将新的表格行添加到 tbody 中
+                tbody.appendChild(tr);
+            };
+        }
+        /**
+        * 打开签字板
+        * @param index 判断签字版类型
+        */
+        const openiframe = (index) => {
+            document.getElementById('myIframe').src = 'Tablet.html?id=' + index + '&REGISTERID=' + REGISTERID;
+        }
+        /**保存按钮 */
+        const save = async() => {
+            // 获取选中的单选按钮的值  
+            const radios =await document.getElementsByName('inlineRadioOptions');
+            let ADVICE;
+            for (const radio of radios) {
+                if (radio.checked) {
+                    ADVICE = radio.value;
+                    break;
+                }
+            } 
+            // 获取文本输入字段的值  
+            const opinionInput = document.getElementById('opinion');
+            const ADVICEREMARKS = opinionInput.value;
+            if (!ADVICE || !ADVICEREMARKS) {
+                return swal({
+                    text: '请完善表单',
+                    button: true,
+                    icon: 'error',
+                    closeOnClickOutside: false
+                });
+            }
+            const data = await $.ajax({
+                url: 'api/GetCheckBarcode.ashx?m=save',
+                data: { 'ADVICE': ADVICE, "ADVICEREMARKS": ADVICEREMARKS, "REGISTERID": REGISTERID},
+                dataType: "json",
+                type: "post" 
+            })
+            await swal({
+                text: data.result ? '保存成功!' : '保存失败',
+                button: true,
+                icon: data.result ? 'success' : 'error',
+                closeOnClickOutside: false
+            }); 
+        }
+    </script>
+        <!--版权信息-->
+        <script src="../common/footer.js"></script>
+        <script src="/Plugins/bootstrap-4.3.1/js/bootstrap.bundle.min.js"></script>
+        <script src="/Plugins/bootstrap-select/js/bootstrap-select.min.js"></script>
+        <script src="/Plugins/sweetalert/sweetalert.min.js"></script>
+        <script src="/Plugins/xrequest/xrequest.min.js"></script>
+        <script src="../Common/xuwell.js"></script>
+</body> 
+
+</html>