lvhao 2 дней назад
Родитель
Сommit
a76893cc33

Разница между файлами не показана из-за своего большого размера
+ 103 - 2
core/CoreApp/controllers/Returns.php


+ 145 - 0
template/erp/returns.html

@@ -62,6 +62,8 @@
 <a href="javascript:void(0);" class="window" data-h="/returns/add/" data-t="退货 - 添加">添 加</a>
 {if $power == '1'}<a href="javascript:void(0);" class="check">删 除</a> {/if}
 <a href="javascript:void(0);" class="returnsexcel">下 载</a>
+<a href="javascript:void(0);" id="uploadLink">导入数据</a>
+<input type="file" id="fileInput" accept=".xlsx, .xls, .csv" style="display: none;">
 </div>
 <table class="datatitle data" border="0" style="border-collapse:collapse;">
 <tr>
@@ -88,6 +90,148 @@ var excel = "/returns/";
 var editurl = "/returns/edit/";
 var editdj = 1;
 var editt = "退货 - 修改";
+
+$(function(){
+        // 获取元素
+        const uploadLink = document.getElementById('uploadLink');
+        const fileInput = document.getElementById('fileInput');
+      
+        // 点击 a 标签触发隐藏的 file input
+        uploadLink.addEventListener('click', (e) => {
+            e.preventDefault();      // 阻止 a 标签跳转
+            fileInput.click();       // 打开文件选择对话框
+        });
+
+        // 监听文件选择
+        fileInput.addEventListener('change', (e) => {
+            const file = e.target.files[0];
+            if (!file) return;
+
+            // 可选的:检查文件类型
+            const validTypes = ['application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'text/csv'];
+            if (!validTypes.includes(file.type)) {
+                alert('请选择有效的 Excel 文件(.xlsx, .xls, .csv)');
+                fileInput.value = ''; // 清空选择
+                return;
+            }
+
+            // 使用 FileReader 读取文件内容
+            const reader = new FileReader();
+            reader.onload = (loadEvent) => {
+                try {
+                    // 读取结果为 ArrayBuffer
+                    const arrayBuffer = loadEvent.target.result;
+                    // 使用 SheetJS 解析 Excel(type 指定为 'array')
+                    const workbook = XLSX.read(arrayBuffer, { type: 'array' });
+
+                    // 获取第一个工作表
+                    const firstSheetName = workbook.SheetNames[0];
+
+                    // 将工作表转换为 HTML 表格(简单展示)
+                   
+                    const worksheet  = workbook.Sheets[firstSheetName];
+                    // const jsonData = XLSX.utils.sheet_to_json(worksheet, {header: 1,
+                    //     defval: '' // 为空单元格设置默认值
+                    // });
+                    // console.log(jsonData)
+                    //resultDiv.innerHTML = `<h3>解析结果(第一个工作表)</h3>${htmlTable}`;
+
+                    // 同时你也可以获得 JSON 数据:
+                    const jsonData = XLSX.utils.sheet_to_json(worksheet);
+                    //console.log(jsonData); // 在控制台查看 JSON
+                    doSendExcel(jsonData);
+                } catch (error) {
+                    console.error('解析失败', error);
+                    alert('文件解析失败,请确保文件格式正确');
+                }
+            };
+
+            reader.readAsArrayBuffer(file); // 以 ArrayBuffer 形式读取
+        });
+})
+// 重置文件输入框的函数
+function resetFileInput() {
+    $("#fileInput").val(''); // 核心:清空选择
+}
+function  doSendExcel(jsonData){
+    if(jsonData.length == 0 ){
+        return  layx.confirm('提示',"解析excel数据不存在",null,{
+                    buttons:[
+                        {
+                            label:'确定',
+                            callback:function(id, button, event){
+                                 
+                                layx.destroy(id);
+                            }
+                        }
+                    ],dialogIcon:'error',shadable:0.6
+                });
+    }
+    layx.load('loadId','数据加载中');
+    resetFileInput();
+    $.ajax({
+        url: dataurl+"/excellr",
+        data: {data:JSON.stringify(jsonData)},
+        type: "POST",
+        dataType: "json",
+        success: function(a) {
+            layx.destroy('loadId');
+            if (a && a.success) {
+                if(a.data.length >  0){
+                    layx.confirm('提示','是否下载不符合条件的数据',null,{
+                        buttons:[
+                            {
+                                label:'确定',
+                                callback:function(id, button, event){
+                                    layx.destroy(id);
+                                    download_excel(a.data)
+                                }
+                            },
+                            {
+                                label:'取消',
+                                callback:function(id, button, event){
+                                    layx.destroy(id);
+                                }
+                            }
+                        ]
+                    });
+
+                }else{
+                    $(".ts p").html(a.msg);
+                    $(".ts").show();
+                    setTimeout('$(".ts").fadeOut()', 1000);
+                }
+            } else {
+                $(".ts p").html(a.msg);
+		        $(".ts").show();
+                setTimeout('$(".ts").fadeOut()', 1000);
+            }
+        }
+    })
+}
+
+
+function download_excel(data){
+    let  sheet = XLSX.utils.json_to_sheet(data)
+
+    
+    sheet['!cols'] = [  
+        //订单号
+        {
+             wch:40,
+        },
+        //订单编码
+        {
+             wch:100,
+        },
+    ];
+
+
+    let workbook = XLSX.utils.book_new();
+
+    XLSX.utils.book_append_sheet(workbook, sheet, "Sheet1");
+    XLSX.writeFile(workbook, "错误数据.xlsx");
+}
 $(".returnsexcel").click(function() { 
     var f = "";
 	var a = "";
@@ -131,4 +275,5 @@ $(".datatext").on('click',".thqr",function() {
 });
 </script>
 <script type="text/javascript" src="{$theme}js/laydate.js"></script>
+<script type="text/javascript" src="{$theme}js/excel/xlxs.js" ></script>
 {Template footer}

Разница между файлами не показана из-за своего большого размера
+ 5 - 1
template/erp/returns_add.html


Разница между файлами не показана из-за своего большого размера
+ 12 - 5
template/erp/returns_edit.html