Forráskód Böngészése

添加库日志的展示列表和excel导出

lvhao 2 napja
szülő
commit
2dbd0adc48
2 módosított fájl, 382 hozzáadás és 0 törlés
  1. 155 0
      core/CoreApp/controllers/Retreatlog.php
  2. 227 0
      template/erp/retreatlog.html

+ 155 - 0
core/CoreApp/controllers/Retreatlog.php

@@ -0,0 +1,155 @@
+<?php 
+defined('BASEPATH') OR exit('No direct script access allowed');
+class Retreatlog extends Start_Controller {
+	public function __construct(){
+        parent::__construct();
+        $this->load->library('session');
+        $this->load->model('Model_Retreatlogs','retreatlogs');
+    }
+    //定义方法的调用规则 获取URI第二段值
+    public function _remap($arg,$arg_array)
+    {
+        if($arg == 'exceljs')//添加
+        {
+             $this->_exceljs();
+        }
+		else{
+            $this->_index();
+        }
+    }
+
+    private function _index(){
+        
+        if($this->input->method() == 'post'){
+
+            $page = $this->input->post('page',true);
+		    $perpage = $this->input->post('perpage',true);
+            $number = $this->input->post('number',true);
+            $timetk = $this->input->post('timetk',true);
+			$timetj = $this->input->post('timetj',true);
+            $timetk = strtotime($timetk);
+			$timetj = strtotime($timetj);
+            $where = " tk_time >= {$timetk} and tk_time <= {$timetj} ";
+            if($number){
+                $where .= " and number = '{$number}' ";
+            }
+            //数据排序
+            $order_str = "id desc";
+            if(empty($page))
+		    {
+                $start = 0;
+		    	$perpage = 1;
+            }
+		    else
+		    {
+                $start = ($page - 1)*$perpage;
+            }
+
+         
+            $info_list = $this->retreatlogs->find_all($where,'id,number,ck_time,tk_time,cz_time,ck_goods',$order_str,$start,$perpage);
+            foreach($info_list as $k => $v){
+                $json_arr = json_decode($v['ck_goods'],true);
+                $fpadata_arr =  explode(";", $json_arr['fpdata']);
+                $tmp_str = '';
+                foreach($fpadata_arr as $key => $value){
+                    $tmp_arr = explode("|", $value);
+                    if(isset($tmp_arr[1])){
+                        $tmp_str.= $tmp_arr[1].' ';
+                        if(isset($tmp_arr[2])){
+                            $tmp_str.= " * ".$tmp_arr[2].'<br/>';
+                        }
+                    }
+                } 
+
+                $info_list[$k]['ck_time'] = date('Y-m-d H:i:s',$v['ck_time']);
+                $info_list[$k]['tk_time'] = date('Y-m-d H:i:s',$v['tk_time']);
+                $info_list[$k]['cz_time'] = date('Y-m-d H:i:s',$v['cz_time']);
+                $info_list[$k]['ck_goods'] = $tmp_str;
+            }
+			
+			$total = $this->retreatlogs->find_count($where);
+            $pagenum = ceil($total/$perpage);
+		    $over = $total-($start+$perpage);
+		    $rows = array('total'=>$total,'over'=>$over,'pagenum'=>$pagenum,'rows'=>($info_list));
+		    echo json_encode($rows);exit;
+        }else{
+            $this->_Template('retreatlog',$this->data);
+        }
+    }
+
+
+    private function _exceljs(){
+        $number = $this->input->get('number',true);
+        $timetk = $this->input->get('timetk',true);
+        $timetj = $this->input->get('timetj',true);
+        $timetk = strtotime($timetk);
+        $timetj = strtotime($timetj);
+        $where = "tk_time >= {$timetk} and tk_time <= {$timetj}";
+        if($number){
+            $where .= " and number = '{$number}' ";
+        }
+        $order_str = "id desc";
+        $info_list = $this->retreatlogs->find_all($where,'id,number,ck_time,tk_time,cz_time,ck_goods',$order_str);
+        foreach($info_list as $k => $v){
+            $json_arr = json_decode($v['ck_goods'],true);
+            $fpadata_arr =  explode(";", $json_arr['fpdata']);
+            $tmp_str = '';
+            foreach($fpadata_arr as $key => $value){
+                $tmp_arr = explode("|", $value);
+                if(isset($tmp_arr[1])){
+                    $tmp_str.= $tmp_arr[1].' ';
+                    if(isset($tmp_arr[2])){
+                        $tmp_str.= " * ".$tmp_arr[2].'<br/>';
+                    }
+                }
+            } 
+            $tmp_str = trim($tmp_str,'<br/>');
+            $info_list[$k]['ck_time'] =empty($v['ck_time'])? '' : date('Y-m-d H:i:s',$v['ck_time']);
+            $info_list[$k]['tk_time'] = empty($v['tk_time'])? '' : date('Y-m-d H:i:s',$v['tk_time']);
+            $info_list[$k]['cz_time'] = empty($v['cz_time'])? '' : date('Y-m-d H:i:s',$v['cz_time']);
+            $info_list[$k]['ck_goods'] = $tmp_str;
+        }
+
+           //生成excel
+           $filename = date("Y-m-d")."退库日志记录.xls";
+           $str = "<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">
+           <head>
+           <!--[if gte mso 9]><xml>
+           <x:ExcelWorkbook>
+           <x:ExcelWorksheets>
+           <x:ExcelWorksheet>
+           <x:Name>EXCEL</x:Name>
+           <x:WorksheetOptions>
+           <x:Print>
+           <x:ValidPrinterInfo />
+           </x:Print>
+           </x:WorksheetOptions>
+           </x:ExcelWorksheet>
+           </x:ExcelWorksheets>
+           </x:ExcelWorkbook>
+           </xml>
+           <![endif]-->
+           </head><body>";
+           $str .= "<table border=1 style='font-family: Microsoft Yahei;font-size: 13px;'>"; 
+           $str .= "<tr><td>订单编号</td><td>出库时间</td><td>退库时间</td><td>重置时间</td><td>货品信息</td></tr>";
+           foreach ($info_list as $key=>$value) 
+           { 
+               
+               $str .= "<tr>";
+               $str .= "<td>". $value['number']. "</td>";
+               $str .= "<td>". $value['ck_time']. "</td>";	
+               $str .= "<td>". $value['tk_time']. "</td>";	
+               $str .= "<td>". $value['cz_time']. "</td>";
+               $str .= "<td>". $value['ck_goods']. "</td>";
+               $str .= "</tr>";
+           }
+           $str .= "</table></body></html>"; 
+           header( "Content-Type: application/vnd.ms-excel; name='excel'" ); 
+           header( "Content-type: application/octet-stream" ); 
+           header( "Content-Disposition: attachment; filename=".$filename ); 
+           header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" ); 
+           header( "Pragma: no-cache" ); 
+           header( "Expires: 0" ); 
+           exit($str); 
+    }
+}

+ 227 - 0
template/erp/retreatlog.html

@@ -0,0 +1,227 @@
+{Template header}
+<body>
+<div class="warp">
+<div class="fixed">
+<ul class="search">
+
+<li>订单编号:<input value="" name="number" type="text" ></li>
+<li>退库时间:<input id="timetk"  value="{date('Y-m-d',time()-30*3*24*3600)} 0:00" name="timetk" type="text" onClick="laydate({istime: true,format:'YYYY-MM-DD hh:mm'})">
+至&nbsp;&nbsp;&nbsp;&nbsp; <input id="timetj" value="{date('Y-m-d',time()+24*3600)} 0:00" name="timetj" type="text" onClick="laydate({istime: true,format:'YYYY-MM-DD hh:mm'})"></li>
+<li><span>确 定</span></li>
+</ul>
+<div class="control">
+
+<a href="javascript:void(0);" class="returnsexcel">下 载</a>
+
+</div>
+<table class="datatitle data" border="0" style="border-collapse:collapse;">
+<tr>
+<td><label onClick="swapCheck()"><input name="checkbox" type="checkbox" class="regular-checkbox"></label></td>
+<td>订单编号</td>
+<td>出库时间</td>
+<td>退库时间</td>
+<td>重置时间</td>
+<td>货品信息</td>
+
+</tr>
+</table>
+</div>
+<table class="datatext data" border="0" style="border-collapse:collapse;">
+</table>
+<div class="bomf"></div>
+</div>
+<script>
+var dataurl = "/retreatlog";
+var excel = "/retreatlog/";
+var editurl = "/retreatlog/edit/";
+// var editdj = 1;
+var editt = "退货 - 修改";
+
+var customon = 1;
+function custom(){
+    $(".data tr").each(function() {
+        $(this).find('td:eq(0)').css("width","1%");
+        $(this).find('td:eq(1)').css("width","8%");
+        $(this).find('td:eq(2)').css("width","8%");
+        $(this).find('td:eq(3)').css("width","8%");
+        $(this).find('td:eq(4)').css("width","8%");
+        $(this).find('td:eq(5)').css("width","44%");
+      
+    });
+}
+
+$(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('提示',a.msg,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 = "";
+	
+    $("input:text").each(function() {
+        f = f + $(this).attr("name") + "=" + $(this).val() + "&";
+    });
+	
+	window.location.href = "/retreatlog/exceljs?excel=1&"+f;
+});
+$(".datatext").on('click',".thqr",function() {
+	var thid = $(this).data("id");
+    $.ajax({
+        url: dataurl+"/qr",
+        data: 'id='+thid,
+        type: "POST",
+        dataType: "json",
+        success: function(a) {
+            if (a && a.success) {
+                $(".datatext #"+a.id).find("td:eq(9)").html(a.t);
+				$(".ts p").html(a.msg);
+		 $(".ts").show();
+                setTimeout('$(".ts").fadeOut()', 1000);
+            } else {
+              $(".ts p").html(a.msg);
+		 $(".ts").show();
+                setTimeout('$(".ts").fadeOut()', 1000);
+            }
+        }
+    });
+});
+</script>
+<script type="text/javascript" src="{$theme}js/laydate.js"></script>
+<script type="text/javascript" src="{$theme}js/excel/xlxs.js" ></script>
+{Template footer}