Pārlūkot izejas kodu

首件=>签字模块=>新增查看型式检验

李士越 1 gadu atpakaļ
vecāks
revīzija
b7521d9eba

+ 20 - 2
wwwroot/main/FirstRegistre/api/GetCheckBarcode.ashx

@@ -88,7 +88,7 @@ public class GetCheckBarcode : IHttpHandler
                         "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();
+                        "WHERE F.STATUS IN(0,1) AND  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>>();
@@ -465,7 +465,7 @@ public class GetCheckBarcode : IHttpHandler
         }
         ///型式检验查询
         if (context.Request["m"].ToString() == "showtest")
-        {  
+        {
             var formData = context.Request.Form;
             if (!string.IsNullOrEmpty(formData["BARCODE"].ToString()))
             {
@@ -522,6 +522,24 @@ public class GetCheckBarcode : IHttpHandler
                 context.Response.Write(JsonConvert.SerializeObject(dt, Formatting.Indented));
             }
         }
+
+        if (context.Request["m"].ToString() == "checkexist")
+        {
+            var formData = context.Request.Form;
+            if (  formData["BARCODE"].ToString() != null)
+            {
+                using (IDataAccess conn = DataAccess.Create())
+                {
+                    Boolean result = false;
+                    DataTable bt = conn.ExecuteDatatable("SELECT count(*) FROM TP_PM_FIRSTREGISTER S INNER JOIN TP_PM_FIRSTREGISTERBAR B ON S.REGISTERID=B.REGISTERID WHERE S.STATUS=4 AND B.BARCODE=" + formData["BARCODE"].ToString());
+                    if (int.Parse(bt.Rows[0][0].ToString()) !=0)
+                    {
+                        result = true;
+                    }
+                    context.Response.Write(JsonConvert.SerializeObject(result));
+                }
+            }
+        }
     }
 
     public bool IsReusable

+ 1 - 1
wwwroot/main/FirstRegistre/index.html

@@ -232,7 +232,7 @@
     </div>
     <!--型式检验弹窗-->
     <div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
-        <div class="modal-dialog" style="max-width:1280px;">
+        <div class="modal-dialog" style="max-width:90%;">
             <div class="modal-content"  >
                 <div class="modal-header" style=" display: block;" >
                 <h5 style="text-align: center; font-weight: bold;">检验报告</h5> 

+ 227 - 75
wwwroot/main/FirstRegistre/overallview.html

@@ -77,17 +77,15 @@
             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;
         }
@@ -134,12 +132,45 @@
         .clickable-item {
             cursor: pointer;
         }
+         .barcode-list-item {
+            display: flex;
+            align-items: center; 
+            border-bottom: 1px solid #ddd; 
+        } 
+        .barcode-text {
+            flex: 1; 
+            margin-right: 10px; 
+        }
+        .table-container {
+            position: relative;
+            max-height: 720px;
+            /* 允许垂直滚动 */
+            overflow-y: auto;
+            /* 为容器添加边框 */
+            border: 1px solid #ddd;
+        }
+        /* 通用的表头和表体单元格样式 */
+        .table-cell {
+            padding: 8px;
+            border: 1px solid #ddd;
+        }
+
+        /* 固定表头的样式 */
+        .sticky-table-header th {
+            position: sticky;
+            top: 0;
+            background-color: #d6d8db;
+            /* 确保表头位于其他内容之上 */
+            z-index: 2;
+            /* 为表头添加底部边框以区分 */
+            border-bottom: 2px solid #ddd;
+        } 
     </style>
     <title>东科软件</title>
 </head>
 <body class="bg-light">
     <!--导航菜单-->
-    <script src="../common/navbar.js"></script> 
+    <script src="../common/navbar.js"></script>
     <div class="flex">
         <!--左侧待签名-->
         <div class="outlayer" style="width:250px;">
@@ -250,7 +281,7 @@
                     </div>
                 </div>
             </div>
-        </div> 
+        </div>
         <!--签字板-->
         <div class="modal" id="tablet" role="dialog" aria-labelledby="myModalLabel">
             <div class="modal-dialog modal-xl" role="document">
@@ -266,18 +297,36 @@
                 </div>
             </div>
         </div>
+        <!--型式检验弹窗-->
+        <div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
+            <div class="modal-dialog" style="max-width:90%">
+                <div class="modal-content">
+                    <div class="modal-header" style=" display: block;">
+                        <h5 style="text-align: center; font-weight: bold;">检验报告</h5>
+                    </div>
+                    <div class="modal-body">
+                        <div class="table-container">
+                            <table id="showtestTable" class="table">
+                            </table>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
     </div>
-
+   
     <script>
         /**首件数量(从总单获取)*/
         let maxnum = 1;
         /**产品id(记录第一次)*/
         let GOODSID = 0;
         /**总单id */
-        let REGISTERID = 0; 
+        let REGISTERID = 0;
+        /**形式检验数据 */
+        let TestDataMap = {};
         /**加载前调用*/
         $(document).ready(function () {
-            loadData();
+             loadData(); 
         });
         //加载 生产工号
         function loadData() {
@@ -305,17 +354,17 @@
             const data = await $.ajax({
                 url: 'api/GetCheckBarcode.ashx?m=assemble',
                 dataType: "json",
-                type: "GET" 
+                type: "GET"
             })
             for (var i = 0; i < data.length; i++) {
                 REGISTERNO.push(data[i].REGISTERNO)
             }
             //调用函数来填充列表
-          await  populateList(REGISTERNO,'REGISTERNOLIST')
-        } 
+            await populateList(REGISTERNO, 'REGISTERNOLIST')
+        }
         /**
         * barcode校验
-        * @param REGISTERNO 产品条码 
+        * @param REGISTERNO 产品条码
         */
         const check = async (REGISTERNO) => {
             const data = await $.ajax({
@@ -339,12 +388,13 @@
             const radios = document.getElementsByName('inlineRadioOptions');
             radios[0].checked = false;
             radios[1].checked = false;
-            if (data[0].ADVICE!=null) { 
+            if (data[0].ADVICE != null) {
                 data[0].ADVICE == 1 ? radios[0].checked = true : radios[1].checked = true
             }
             REGISTERID = data[0].REGISTERID
-;
-            let barcode = ['产品条码']
+            /**右侧产品条码与型式检验 */
+            let barcodeList = [{ barcode: '产品条码', inspection: '型式检验' }];
+            /**获取产品条码 */
             const data2 = await $.ajax({
                 url: 'api/GetCheckBarcode.ashx?m=getabrcode',
                 data: { "REGISTERID": data[0].REGISTERID },
@@ -352,19 +402,35 @@
                 type: "post"
             });
             for (var i = 0; i < data2.length; i++) {
+                /**查询型式检验 */
+                const resultTest = await $.ajax({
+                    url: 'api/GetCheckBarcode.ashx?m=showtest',
+                    data: { "BARCODE": data2[i].BARCODE },
+                    dataType: "json",
+                    type: "post"
+                });
+                /**创建对象 */
+                let newBarcode = {
+                    barcode: data2[i].BARCODE,
+                    inspection: '查看'
+                };
+                
+                //添加型式检验数据
+                TestDataMap[data2[i].BARCODE] = resultTest;
                 //添加tab栏数据
-                barcode.push(data2[i].BARCODE)
+                barcodeList.push(newBarcode); 
             }
             // 调用函数来填充列表
-            await populateList(barcode, 'getbarcodelist');
-        } 
+            await RightpopulateList(barcodeList);
+            //await populateList(barcode, 'getbarcodelist');
+        }
         /**
         * 监视各个tab栏内数据
         * @param tableId 表格id
         */
         const getItem = (tableId) => {
             /**根据id获取表格 */
-            const table = document.getElementById(tableId); 
+            const table = document.getElementById(tableId);
             /**根据表格获取所有行 */
             const rows = table.getElementsByTagName('tr');
             /**返回值集合 */
@@ -390,7 +456,7 @@
                             break;
                         }
                     }
-                } 
+                }
                 // 查找包含文本输入框的单元格
                 const checkboxCell = Array.from(cells).find(cell => cell.classList.contains('checkbox'));
                 /**输入框值 */
@@ -410,44 +476,43 @@
             }
             //返回对象
             return { tableData: data };
-        };  
+        };
         /**
         * 左侧待检验/待签名列表
         * @param items 总单号
         * @param divid 区块id
         */
-        const populateList = async (items, divid) => { 
+        const populateList = async (items, divid) => {
             /**获取 ul*/
             const ul = document.getElementById(divid);
             // 清空现有的 <li> 元素
             ul.innerHTML = '';
-            //遍历所有li 
+            //遍历所有li
             await items.forEach((item, index) => {
-              
+
                 /**获取当前li */
                 const liElement = document.createElement('li');
                 //添加class
                 liElement.classList.add('list-group-item');
                 //添加名称
-                liElement.textContent = 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');
-                           }
+                    //添加点击事件
+                    liElement.addEventListener('click', function () {
+                        //展示区块为总单
+                        if (divid == 'REGISTERNOLIST') {
+                            //添加方法 查询总单信息
+                            check(item);
+                        }
+                        //展示区块为产品条码
+                        else if (divid == 'getbarcodelist') {
+                            //添加方法 查找barcode的数据
+                            addinputvalue(item);
+                            //开启产品条码弹窗
+                            $('#barcode').modal('show');
+                        }
                     });
                 }
                 //将li放入ul中
@@ -479,10 +544,10 @@
         */
         const setval = async (data) => {
             /**根据表格指定行 */
-            const specificRow = await document.getElementById(data.ITEMSID); 
+            const specificRow = await document.getElementById(data.ITEMSID);
             /**获取当前行 */
             const cells = await specificRow.getElementsByTagName('td');
-            if (data.ITEMSID==20) {
+            if (data.ITEMSID == 20) {
                 // 查找包含文本输入框的单元格
                 const checkboxCell = Array.from(cells).find(cell => cell.classList.contains('text')).getElementsByTagName('input')[0];
                 //赋值
@@ -552,10 +617,10 @@
                 //将li放入ul中
                 ul.appendChild(liElement);
                 //生成该li对应的内容
-              await  gettxt(item);
-            } 
+                await gettxt(item);
+            }
             //li初始化和点击事件
-            lionclick(); 
+            lionclick();
         }
         /**li与div联动(tabs) */
         const lionclick = () => {
@@ -564,10 +629,10 @@
             // 设置所有 li 的 data-index 属性
             lis.forEach(function (li, index) {
                 li.setAttribute('data-index', index);
-            }); 
+            });
             // 函数:根据 current li 显示对应的 item
             function showCorrectItem() {
-                var currentIndex = null; 
+                var currentIndex = null;
                 // 查找带有 class="current" 的 li 的索引
                 lis.forEach(function (li, index) {
                     if (li.classList.contains('current')) {
@@ -580,16 +645,16 @@
                 });
                 // 显示对应的 item
                 items[currentIndex].style.display = 'block';
-            } 
+            }
             // 页面加载完成后调用
-            showCorrectItem(); 
+            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
@@ -647,7 +712,7 @@
                 type: "post",
                 success: function (data) {
                     //填充表格数据
-                    fillTable(data, ITEMSYTPE); 
+                    fillTable(data, ITEMSYTPE);
                 }
             })
         }
@@ -662,9 +727,9 @@
             // 清空容器
             while (tbody.firstChild) {
                 tbody.removeChild(tbody.firstChild);
-            } 
+            }
             // 遍历数据数组,并为每个项目创建一个新的表格行
-            for (const item of data) { 
+            for (const item of data) {
                 // 创建一个新的表格行
                 const tr = document.createElement('tr');
                 tr.id = item.ITEMSID;
@@ -684,7 +749,7 @@
                 // 创建并填充第二个 <td> 元素(要求)
                 const tdItemsInfo = document.createElement('td');
                 tdItemsInfo.textContent = item.ITEMSINFO;
-                tr.appendChild(tdItemsInfo); 
+                tr.appendChild(tdItemsInfo);
                 //创建了空的 <td> 元素
                 const tdResult = document.createElement('td');
                 tdResult.className = 'radio';
@@ -693,17 +758,17 @@
                 radioOk.type = 'radio';
                 radioOk.name = item.ITEMSID;
                 radioOk.value = '1';
-                radioOk.disabled  = true; 
+                radioOk.disabled = true;
                 // 创建与单选按钮相邻的文本节点 "OK"
-                const textOk = document.createTextNode('OK'); 
+                const textOk = document.createTextNode('OK');
                 // 创建第二个单选按钮
                 const radioNg = document.createElement('input');
                 radioNg.type = 'radio';
                 radioNg.name = item.ITEMSID;
                 radioNg.value = '0';
-                radioNg.disabled  = true;
+                radioNg.disabled = true;
                 // 创建与单选按钮相邻的文本节点 "NG"
-                const textNg = document.createTextNode('NG'); 
+                const textNg = document.createTextNode('NG');
                 // 将元素添加到 tdResult 中
                 tdResult.appendChild(radioOk);
                 tdResult.appendChild(textOk);
@@ -727,17 +792,17 @@
             document.getElementById('myIframe').src = 'Tablet.html?id=' + index + '&REGISTERID=' + REGISTERID;
         }
         /**保存按钮 */
-        const save = async() => {
-            // 获取选中的单选按钮的值  
-            const radios =await document.getElementsByName('inlineRadioOptions');
+        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) {
@@ -750,25 +815,112 @@
             }
             const data = await $.ajax({
                 url: 'api/GetCheckBarcode.ashx?m=save',
-                data: { 'ADVICE': ADVICE, "ADVICEREMARKS": ADVICEREMARKS, "REGISTERID": REGISTERID},
+                data: { 'ADVICE': ADVICE, "ADVICEREMARKS": ADVICEREMARKS, "REGISTERID": REGISTERID },
                 dataType: "json",
-                type: "post" 
+                type: "post"
             })
             await swal({
                 text: data.result ? '保存成功!' : '保存失败',
                 button: true,
                 icon: data.result ? 'success' : 'error',
                 closeOnClickOutside: false
-            }); 
+            });
+        }
+        /**右侧产品条码区块*/
+        const RightpopulateList = async (items) => {
+            const ul = document.getElementById('getbarcodelist');
+            ul.innerHTML = '';
+
+            items.forEach((item, index) => {
+                const liElement = document.createElement('li');
+                liElement.classList.add('list-group-item', 'barcode-list-item', 'list-group-item');
+                // 创建产品条码文本元素
+                const barcodeElement = document.createElement('span');
+                barcodeElement.classList.add('barcode-text');
+                barcodeElement.textContent = item.barcode;
+
+                // 创建型式检验文本元素
+                const viewElement = document.createElement('span');
+                viewElement.classList.add('view-button');
+                viewElement.textContent = item.inspection;
+                if (index != 0) {
+                    //添加鼠标互动
+                    liElement.classList.add('clickable-item');
+                    //添加产品条码点击事件
+                    barcodeElement.addEventListener('click', function () {
+                        //添加方法 查找barcode的数据
+                        addinputvalue(item.barcode);
+                        //开启产品条码弹窗
+                        $('#barcode').modal('show');
+                    });
+                    //添加型式检验点击事件
+                    viewElement.addEventListener('click', function () {
+                        if (!TestDataMap[item.barcode]) {
+                            return swal({
+                                text: '未查询到型式检验数据!',
+                                button: true,
+                                icon: 'error',
+                                closeOnClickOutside: false
+                            })
+                        }
+                        showtest(TestDataMap[item.barcode]);
+                    });
+                }
+                // 将条码和“查看”元素添加到li中
+                liElement.appendChild(barcodeElement);
+                liElement.appendChild(viewElement);
+
+                // 将li添加到ul中
+                ul.appendChild(liElement);
+            });
+        };
+        /**查看型式检验按钮 */
+        const showtest = async (showtestData) => {
+            const table = document.getElementById('showtestTable');
+            // 清空表格内容
+            while (table.firstChild) {
+                table.removeChild(table.firstChild);
+            }
+            /**创建表头 */
+            const thead = document.createElement('thead');
+            thead.className = 'sticky-table-header';
+            const headerRow = document.createElement('tr');
+            /**创建表头数据 */
+            headerRow.className = 'table-secondary';
+            ['序号', '产品型号', '产品名称', '检验时间', '检验项目', '检验标准', '单位', '数值', '结果'].forEach(headerText => {
+                const th = document.createElement('th');
+                th.scope = 'col';
+                th.textContent = headerText;
+                th.className = 'table-cell';
+                headerRow.appendChild(th);
+            });
+            thead.appendChild(headerRow);
+            /**创建表体 */
+            const tbody = document.createElement('tbody');
+            for (var i = 0; i < showtestData.length; i++) {
+                const tr = document.createElement('tr');
+                var keys = Object.keys(showtestData[i]);
+                for (var k = 0; k < keys.length; k++) {
+                    const td = document.createElement('td');
+                    td.textContent = showtestData[i][keys[k]];
+                    td.className = 'table-cell';
+                    tr.appendChild(td);
+                }
+                tbody.appendChild(tr);
+            }
+            //依次填充结构
+            table.appendChild(thead);
+            table.appendChild(tbody);
+            $('#exampleModal').modal('show')
         }
     </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>
+    <!--版权信息-->
+    <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>