Browse Source

打印物料码优化221226

liuhairui 3 years ago
parent
commit
b7bf76be87
2 changed files with 205 additions and 55 deletions
  1. 19 0
      application/admin/controller/Printt.php
  2. 186 55
      application/admin/view/printt/index.html

+ 19 - 0
application/admin/controller/Printt.php

@@ -4,12 +4,31 @@ namespace app\admin\controller;
 
 
 use app\common\controller\Backend;
+use think\Db;
 
 
 class Printt extends Backend
 {
+    protected $noNeedLogin = ['get_printt'];
+
     public function index(){
+        $date = substr(date("Ymd",time()),2);
+        $this->assign('date',$date);
         return $this->view->fetch();
+    }
 
+    public function get_printt(){
+        //接到内容进行数据库查询 保证打印数据与数据库保持一致,如果没有返回空,自定义打印
+        $barcode = input('barcode');
+        $barcode_array = explode("\n",$barcode);
+        foreach ($barcode_array  as $k=>$v){
+            $formula_material[$k] = Db::name('formula_material')->field('m_name,name')->where('m_name',$v)->find();
+        }
+        if($formula_material == null){
+            return '';
+        }else{
+            return $formula_material;
+        }
     }
+
 }

+ 186 - 55
application/admin/view/printt/index.html

@@ -16,15 +16,17 @@
 <div style="width: 60%; height: 510px;margin: 0 auto;">
     <div class="form-group">
         <div class="col-xs-12 col-sm-8"><br>
-            <!--<h4 style="color: red">提示:如果生成多个不同物料请换行输入</h4><br>-->
             <span>纸张选择&nbsp;</span>
             <select id="selectList" style="width: 180px;height: 25px;border-radius: 5px 5px 5px 5px">
-                <!--<option value="10*6">不选择默认10*6&nbsp;&nbsp;</option>-->
-                <!--<option value="10*5">10*5</option>-->
+                <option value="10*15">不选择默认10*15&nbsp;&nbsp;</option>
                 <option value="10*6">10*6</option>
-                <!--<option value="10*8">10*8</option>-->
+                <option value="10*15">10*15</option>
             </select>
-            <br><br>
+        </div>
+    </div>
+
+    <div class="form-group">
+        <div class="col-xs-12 col-sm-8"><br>
             <span>打印数量&nbsp;</span>
             <input type="number" id="number" placeholder="不填默认打印两份"  min="0" oninput="value=value.replace('-', '');" >
             <br><br>
@@ -34,7 +36,7 @@
     <div class="form-group">
         <div class="col-xs-12 col-sm-8">
             <span>日期&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
-            <input type="text" id="time" placeholder="请输入日期">
+            <input type="text" id="time" placeholder="请输入日期" value="{$date}">
             <br><br>
         </div>
     </div>
@@ -44,7 +46,7 @@
             <span style="color: red">提示:如果生成多个不同物料请换行输入</span>
         </label>
         <div class="col-xs-12 col-sm-8">
-            <textarea name="textarea" name="textarea" id="textarea" cols="58" rows="10" onchange="zhuan()"></textarea>
+            <textarea name="textarea" style="resize:none;" placeholder="请 输 入 打 印 内 容"  name="textarea" id="textarea" cols="76" rows="10"></textarea>
             <textarea readonly id="output" style="display: none" name="textarea" cols="70" rows="10"></textarea>
         </div>
     </div>
@@ -59,20 +61,6 @@
 
 </body>
 <script type="text/javascript">
-    //获取时间日期 slice(2)截取前两位字符 获取年月日
-    function time(){
-        var time = new Date();
-        var h = time.getFullYear();//获取年
-        var m = time.getMonth() + 1;//获取月
-        var d = time.getDate();//获取日
-        // var H = time.getHours();//获取时
-        // var M = time.getMinutes();//获取分
-        // var S = time.getSeconds();//获取秒
-        // return h+""+m+""+d+""+H+""+M+""+S;
-        return h+""+m+""+d; //返回 年月日时分秒
-    }
-    document.getElementById("time").value = time().slice(2);
-
     // 打印
     function small_v2_print() {
         var textareas = $("#textarea").val();// 获取 textarea 文字的所有文本值
@@ -82,8 +70,8 @@
         let selectList =document.getElementById("selectList").value;// 获取 selectList 下拉选项纸张大小
         let number =document.getElementById("number").value; // 获取 number 打印数量
         let time =document.getElementById("time").value;//获取六位数时间
-        //因为生成二维码中文逗号与英文逗号会出现乱码
-        if(textarea.indexOf(",") != -1){
+        //因为生成二维码"中文逗号与英文逗号"会出现乱码,所以判断不能包含逗号
+        if(textarea.indexOf(",") != -1 || textarea.indexOf(",") != -1){
             layer.confirm("不能包含逗号", {
                 title: ['信息'],
                 btn: ['确认'],
@@ -97,8 +85,8 @@
                 area: ['30%', '30%'],
             });
         }else{
-            if(textarea.indexOf(",") != -1){
-                layer.confirm("不能包含逗号", {
+            if($('#textarea').val() == ''){
+                layer.confirm("打印区域不能为空", {
                     title: ['信息'],
                     btn: ['确认'],
                     icon: 0,
@@ -111,41 +99,55 @@
                     area: ['30%', '30%'],
                 });
             }else{
-
-                var arr = textarea.split("\n");// 按换行拆分出所有中文文本每一行
-                var arrs = output.split("\n");//  按换行拆分出所有英文文本每一行
-                for (var i=0;i<arr.length;i++) {
-                    var pairs = arr[i].split(/[,\t]/);
-                    for (var j=0;j<pairs.length;j++) {
-                        var barcode = pairs[0];// 取出具体的每个键值
-                    }
-                    var pairss = arrs[i].split(/[,\t]/);
-                    for (var b=0;b<pairss.length;b++) {
-                        var barcode_Engish = pairss[0];// 取出具体的每个键值
+                $.ajax({
+                    method: "POST",
+                    url: "printt/get_printt",
+                    data: {
+                        barcode: textarea,
+                    },
+                    success(result){
+                        // console.log(result);
+                        if(result[0] == null){
+                            // alert(1)
+                            var arr = textarea.split("\n");// 按换行拆分出所有中文文本每一行
+                            var arrs = output.split("\n");//  按换行拆分出所有英文文本每一行
+                            for (var i=0;i<arr.length;i++) {
+                                var pairs = arr[i].split(/[,\t]/);
+                                for (var j=0;j<pairs.length;j++) {
+                                    var barcode = pairs[0];// 取出具体的每个键值
+                                }
+                                var pairss = arrs[i].split(/[,\t]/);
+                                for (var b=0;b<pairss.length;b++) {
+                                    var barcode_Engish = pairss[0];// 取出具体的每个键值
+                                }
+                                CreateOneFormPage(barcode,selectList,number,time,barcode_Engish);
+                            }
+                        }else{
+                            // alert(2)
+                            for(var i=0; i<result.length;i++){
+                                var name = result[i];
+                                // var barcode_Engish = result[i];
+                                // console.log(name.m_name);
+                                // console.log(name.name);
+                                CreateOneFormPage(name.m_name,selectList,number,time,name.name);
+                            }
+                        }
                     }
-                    CreateOneFormPage(barcode,selectList,number,time,barcode_Engish);
-                }
-
+                });
             }
-
         }
     };
 
     var LODOP; //声明为全局变量
     function CreateOneFormPage(barcode,selectList,number,time,barcode_Engish){
         LODOP=getLodop();
-        var strBodyStyle = "<style>body{font-size: 38px;text-align: center;}</style>";
-        // var barcodenumber = barcode.substring(0,11)+"</br>"+barcode.substring(11,22)+"</br>"+barcode.substring(22,33)+"</br>"+barcode.substring(33,44)+"</br>"+barcode.substring(44,55);
-        var barcodenumber = barcode.substring(0,6)+"</br>"+barcode.substring(6,12)+"</br>"+barcode.substring(12,18)+"</br>"+barcode.substring(18,24)+"</br>"+barcode.substring(24,32);
         LODOP.PRINT_INIT("");
         //判断用户打印份数
-        if(number){
-            LODOP.SET_PRINT_COPIES(number);
-        }else{
-            LODOP.SET_PRINT_COPIES(2);
-        }
-        //判断用户选择的纸张大小规格
+        if(number){LODOP.SET_PRINT_COPIES(number);}else{LODOP.SET_PRINT_COPIES(1);}
+        // 判断用户选择的纸张大小规格
         if(selectList == "10*6"){
+            var strBodyStyle = "<style>body{font-size: 42px;text-align: center;}</style>";
+            var barcodenumber = barcode.substring(0,6)+"</br>"+barcode.substring(6,12)+"</br>"+barcode.substring(12,18)+"</br>"+barcode.substring(18,24)+"</br>"+barcode.substring(24,30);
             LODOP.SET_PRINT_PAGESIZE(2,"1100","600","");
             LODOP.SET_PRINT_MODE("RESELECT_ORIENT",true);
             LODOP.SET_PRINT_MODE("PRINT_NOCOLLATE",1);
@@ -154,17 +156,146 @@
             LODOP.SET_PRINT_STYLEA(0,"FontSize",15);
             LODOP.SET_PRINT_STYLEA(0,"Alignment",2);
             LODOP.SET_PRINT_STYLEA(0,"Bold",1);
-            LODOP.ADD_PRINT_BARCODE(245,45,"108.9mm","49mm","QRCode",barcode_Engish);
+            LODOP.ADD_PRINT_BARCODE(245,45,"108.9mm","49mm","QRCode",barcode_Engish+"_"+time);
+            LODOP.SET_PRINT_STYLEA(0,"QRCodeVersion",7);
+        }
+        if(selectList == "10*15"){
+            LODOP.SET_PRINT_PAGESIZE(2,1100,1500,"");
+            LODOP.SET_PRINT_MODE("RESELECT_ORIENT",true);
+            LODOP.SET_PRINT_MODE("PRINT_NOCOLLATE",1);
+            var barcode_length  = barcode.length;
+            //"英文字符"占1个字符 与 "中文字符"占2个字符 占用空间大小不同 所以判断 "barcode" 是否包含中文
+            if(escape(barcode).indexOf("%u") < 0) {
+                alert("纯英文字符 字符:"+barcode_length);
+                if(barcode_length <= 4){
+                    alert(barcode_length+"字符4位以内");
+                    var strBodyStyle_Engish = "<style>body{font-size: 200px;text-align: center}</style>";
+                    var barcodenumber_Engish = barcode.substring(0,4);
+                    LODOP.ADD_PRINT_HTM(2,66,517,380,strBodyStyle_Engish+barcodenumber_Engish);
+                }else if(barcode_length <= 5){
+                    alert("5位 M-501");
+                    LODOP.ADD_PRINT_TEXT(20,21,581,210,barcode);
+                    LODOP.SET_PRINT_STYLEA(0,"FontSize",160);
+                }else if(barcode_length <= 6){
+                    alert("6位 M-501B M019A");
+                    LODOP.ADD_PRINT_TEXT(20,21,549,399,barcode);
+                    LODOP.SET_PRINT_STYLEA(0,"FontSize",130);
+                }else if(barcode_length <= 7){
+                    alert("7位 GY-122A");
+                    LODOP.ADD_PRINT_TEXT(20,4,575,399,barcode);
+                    LODOP.SET_PRINT_STYLEA(0,"FontSize",120);
+                }else if(barcode_length <= 8){
+                    alert("8位 M-424-10  M-685A/B");
+                    LODOP.ADD_PRINT_TEXT(20,12,563,399,barcode);
+                    LODOP.SET_PRINT_STYLEA(0,"FontSize",101);
+                }else if(barcode_length <= 9){
+                    alert("9位 M-091-30%");
+                    LODOP.ADD_PRINT_TEXT(20,9,573,399,barcode);
+                    LODOP.SET_PRINT_STYLEA(0,"FontSize",91);
+                }else if(barcode_length <= 18){
+                    alert("18位以内");
+                    var strBodyStyle_Engish = "<style>body{font-size: 70px;text-align: center}</style>";
+                    var barcodenumber_Engish = barcode.substring(0,9);
+                    var barcodenumber_Engish2 = barcode.substring(9,18);
+                    LODOP.ADD_PRINT_HTM(7,4,576,348,strBodyStyle_Engish+barcodenumber_Engish);
+                    LODOP.ADD_PRINT_HTM(90,1,576,97,strBodyStyle_Engish+barcodenumber_Engish2);
+                }else{
+                    alert("20位以内");
+                    var strBodyStyle_Engish = "<style>body{font-size: 65px;text-align: center}</style>";
+                    var barcodenumber_Engish = barcode.substring(0,10);
+                    var barcodenumber_Engish2 = barcode.substring(10,20);
+                    LODOP.ADD_PRINT_HTM(7,4,576,348,strBodyStyle_Engish+barcodenumber_Engish);
+                    LODOP.ADD_PRINT_HTM(90,1,576,97,strBodyStyle_Engish+barcodenumber_Engish2);
+                }
+            }else{
+                // alert("包含中文字符");
+                var re = /[A-Za-z]+/;
+                var res = barcode.search(re);
+                //判断字符串中是 中英文混合 还是 纯文字
+                if(res >= 0) {
+                    alert("中英文混合 字符:"+barcode_length);
+                    if(barcode_length <= 4){
+                        alert("1-4位");
+                        var strBodyStyle = "<style>body{font-size: 140px;text-align: center}</style>";
+                        var barcodenumber = barcode.substring(0,4);
+                        LODOP.ADD_PRINT_HTM(7,15,576,348,strBodyStyle+barcodenumber);
+                    }else if(barcode_length <= 5){
+                        alert("5位 PS柠檬黄");
+                        var strBodyStyle = "<style>body{font-size: 125px;text-align: center}</style>";
+                        LODOP.ADD_PRINT_HTM(7,1,576,348,strBodyStyle+barcode);
+                    }else if(barcode_length <= 6){
+                        alert("6位 M-511新");
+                        var strBodyStyle = "<style>body{font-size: 100px;text-align: center}</style>";
+                        LODOP.ADD_PRINT_HTM(7,1,576,348,strBodyStyle+barcode);
+                    }else if(barcode_length <= 7){
+                        alert("7位 M-763光油");
+                        var strBodyStyle = "<style>body{font-size: 80px;text-align: center}</style>";
+                        LODOP.ADD_PRINT_HTM(7,1,576,348,strBodyStyle+barcode);
+                    }else if(barcode_length <= 8){
+                        alert("8位 UV柔印金红色浆");
+                        var strBodyStyle = "<style>body{font-size: 70px;text-align: center}</style>";
+                        LODOP.ADD_PRINT_HTM(7,1,576,348,strBodyStyle+barcode);
+                    }else if(barcode_length <= 9){
+                        alert("9位 MS-5014黑色");
+                        var strBodyStyle = "<style>body{font-size: 65px;text-align: center}</style>";
+                        LODOP.ADD_PRINT_HTM(7,1,576,67,strBodyStyle+barcode);
+                    }else if(barcode_length <= 30){
+                        alert("10-27位");
+                        var strBodyStyle = "<style>body{font-size: 63px;text-align: center}</style>";
+                        var barcodenumber = barcode.substring(0,9);
+                        var barcodenumber2 = barcode.substring(9,18);
+                        var barcodenumber3 = barcode.substring(18,27);
+                        LODOP.ADD_PRINT_HTM(7,2,576,67,strBodyStyle+barcodenumber);
+                        LODOP.ADD_PRINT_HTM(90,4,576,67,strBodyStyle+barcodenumber2);
+                        LODOP.ADD_PRINT_HTM(169,-1,576,67,strBodyStyle+barcodenumber3);
+                    }else if(barcode_length <= 37){
+                        alert('30-37位');
+                        LODOP.ADD_PRINT_TEXT(7,15,566,410,barcode);
+                        LODOP.SET_PRINT_STYLEA(0,"FontSize",40);
+                    }else if(barcode_length <= 42){
+                        alert('42位');
+                        LODOP.ADD_PRINT_TEXT(7,15,561,410,barcode);
+                        LODOP.SET_PRINT_STYLEA(0,"FontSize",37);
+                    }else{
+                        layer.confirm("文字过长不可打印,限制最多42位以内", {
+                            title: ['信息'],
+                            btn: ['确认'],
+                            icon: 0,
+                            closeBtn: 2,
+                            shade: [0.3, '#000'],
+                            shadeClose: true,
+                            id: "one",
+                            anim: 2,
+                            isOutAnim: false,
+                            area: ['30%', '30%'],
+                        });
+                        return false;
+                    }
+                }else{
+                    alert(barcode_length+"纯文字 溶剂上光油");
+                    var strBodyStyle_Chinese = "<style>body{font-size: 90px;text-align: center}</style>";
+                    var strBodyStyle_Chinese2 = "<style>body{font-size: 90px;}</style>";
+                    var barcodenumber_Chinese = barcode.substring(0,6);
+                    var barcodenumber_Chinese2 = barcode.substring(6,12);
+                    var barcodenumber_Chinese3 = barcode.substring(12,15);
+                    LODOP.ADD_PRINT_HTM(7,-17,604,334,strBodyStyle_Chinese+barcodenumber_Chinese);
+                    LODOP.ADD_PRINT_HTM(114,-18,604,334,strBodyStyle_Chinese+barcodenumber_Chinese2);
+                    LODOP.ADD_PRINT_HTM(232,15,517,380,strBodyStyle_Chinese2+barcodenumber_Chinese3);
+                }
+            }
+            LODOP.ADD_PRINT_TEXT(285,393,238,37,time);
+            LODOP.SET_PRINT_STYLEA(0,"FontSize",20);
+            LODOP.SET_PRINT_STYLEA(0,"Alignment",2);
+            LODOP.SET_PRINT_STYLEA(0,"Bold",1);
+            LODOP.ADD_PRINT_BARCODE(235,328,"108.9mm","49mm","QRCode",barcode_Engish+"_"+time);
             LODOP.SET_PRINT_STYLEA(0,"QRCodeVersion",7);
         }
-        LODOP.PRINT();//打印
+        // LODOP.PRINT();//打印
         // LODOP.PREVIEW();//打印预览
         // LODOP.PRINTA();//选择打印机进行打印
-        // LODOP.PRINT_SETUP();//打印维护设置大小
+        LODOP.PRINT_SETUP();//打印维护设置大小
     };
 
-
-
     //将中文括号转换成英文括号
     function change(srt){
         var reg = /[\(]/g,reg2 = /[\)]/g;
@@ -186,7 +317,7 @@
         };
         //获取字符串首字母
         /**
-         * arrInitialChart数组将unicode 19968-40869 编码分为26个元素,每个元素的首字母都相同,按英文字符排序
+         * arrInitialChart数组将unicode 19968-40869 编码分为26个元素,每个元素的首字母都相同,按英文字符排序
          * arrNumLetter数组为每个arrInitialChart数组的元素id所对应的英文字母
          * arrPolyphone数组为377个声母不同的多音字的首字母字符串
          */