Bläddra i källkod

页面截图测试

ajun 5 år sedan
förälder
incheckning
6137376681

+ 24 - 1
package-lock.json

@@ -2910,6 +2910,21 @@
                 "timsort": "^0.3.0"
             }
         },
+        "css-line-break": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npm.taobao.org/css-line-break/download/css-line-break-1.1.1.tgz",
+            "integrity": "sha1-1em90peEAJnrBQPHMQ/TSSegJu8=",
+            "requires": {
+                "base64-arraybuffer": "^0.2.0"
+            },
+            "dependencies": {
+                "base64-arraybuffer": {
+                    "version": "0.2.0",
+                    "resolved": "https://registry.npm.taobao.org/base64-arraybuffer/download/base64-arraybuffer-0.2.0.tgz",
+                    "integrity": "sha1-S5RPrAGRqlkHr+LYyZnMxXzoD0U="
+                }
+            }
+        },
         "css-loader": {
             "version": "1.0.1",
             "resolved": "https://registry.npm.taobao.org/css-loader/download/css-loader-1.0.1.tgz",
@@ -4774,6 +4789,14 @@
                 "uglify-js": "3.4.x"
             }
         },
+        "html2canvas": {
+            "version": "1.0.0-rc.7",
+            "resolved": "https://registry.npm.taobao.org/html2canvas/download/html2canvas-1.0.0-rc.7.tgz",
+            "integrity": "sha1-cMFZzg5jlUqRFpUxiU0IrVYnrJg=",
+            "requires": {
+                "css-line-break": "1.1.1"
+            }
+        },
         "http-deceiver": {
             "version": "1.2.7",
             "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
@@ -8845,7 +8868,7 @@
         },
         "socket.io-client": {
             "version": "2.3.0",
-            "resolved": "https://registry.npm.taobao.org/socket.io-client/download/socket.io-client-2.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocket.io-client%2Fdownload%2Fsocket.io-client-2.3.0.tgz",
+            "resolved": "https://registry.npm.taobao.org/socket.io-client/download/socket.io-client-2.3.0.tgz",
             "integrity": "sha1-FNW6LgC5vNFFrkQ6uWs/hsvMG7Q=",
             "requires": {
                 "backo2": "1.0.2",

+ 1 - 0
package.json

@@ -28,6 +28,7 @@
     "bootstrap-select": "^1.13.18",
     "echarts": "^4.9.0",
     "element-ui": "^2.14.1",
+    "html2canvas": "^1.0.0-rc.7",
     "jquery.cookie": "^1.4.1",
     "js-cookie": "^2.2.1",
     "jsbarcode": "^3.11.3",

+ 13 - 0
resources/js/utilities/html2canvas.js

@@ -0,0 +1,13 @@
+import html2canvas from'html2canvas'
+
+window.canvasImg = function(dom,imageDiv,scale=1){
+    let img = new Image();
+    html2canvas($(dom)[0],{
+        _backgroundColor:null,
+        useCORS:true,
+        scale:scale
+    }).then(canvas=>{
+        img.src = canvas.toDataURL("image/jpeg");
+    });
+    return img;
+}

+ 38 - 7
resources/views/maintenance/expressPrinting/print/index.blade.php

@@ -8,19 +8,34 @@
         @component('maintenance.expressPrinting.print.menu')@endcomponent
     </span>
     <div class="container" id="print">
-        <div  class="position-relative border-1 row p-0 m-0 bg-white border" v-for="(item,i) in items" :style="getBgStyle(template)">
-            <div class="position-absolute" v-for="(part,index) in parts" :style="getStyle(part)">
-                <svg v-if="isSvg(part)" :style="getSvgStyle(part)" :id="'svg'+i"  class="StripeCode">
-                    @{{ getContent(part,item) }}
-                </svg>
-                <span v-else>@{{ getContent(part,item) }}</span>
+        <div class="row">
+            <div class="container">
+                <div class="input-group">
+                    <label for="scale" class="col-form-label-sm">缩放比例</label>
+                    <input id="scale" type="number" v-model="scale" class="form-control-sm">
+                    <button class="btn btn-success" @click="printImage">打印</button>
+                </div>
             </div>
         </div>
+        <div class="row p-0 m-0" id="img-div">
+        </div>
+        <div class="container m-0 p-0" id="print-div" :style="getByWidth(template)">
+            <div class="position-relative border-1 row p-0 m-0 bg-white border" v-for="(item,i) in items" :style="getBgStyle(template)">
+                <div class="position-absolute" v-for="(part,index) in parts" :style="getStyle(part)">
+                    <svg v-if="isSvg(part)" :style="getSvgStyle(part)" :id="'svg'+i"  class="StripeCode">
+                        @{{ getContent(part,item) }}
+                    </svg>
+                    <span v-else>@{{ getContent(part,item) }}</span>
+                </div>
+            </div>
+        </div>
+
     </div>
 @endsection
 
 @section("lastScript")
     <script type="text/javascript" src="{{mix('js/utilities/barcode.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/utilities/html2canvas.js')}}"></script>
     <script>
         let vue = new Vue({
             el:"#print",
@@ -29,6 +44,7 @@
                 items:{!! $items !!},
                 parts:[],
                 index:0,
+                scale:1,
             },
             created() {
                 this.parts = JSON.parse(this.template.value);
@@ -62,6 +78,18 @@
                     });
                     return style;
                 },
+                getByWidth(){
+                    if (this.parts === []) this.parts = JSON.parse(template.value);
+                    let style  = {};
+                    this.parts.forEach((item)=>{
+                        if(item.type==="bg"){
+                            style =  {
+                                width:item.width+'px',
+                            }
+                        }
+                    });
+                    return style;
+                },
                 getSvgStyle(item){
                     return {
                         width:item.width+'px',
@@ -85,7 +113,6 @@
                     return style;
                 },
                 getContent(part,item){  // 组件内容
-                    console.log(part.text);
                     return part.text;
                     if(part.text.indexOf("$")===-1)return part.text;
                     if(part.text.indexOf("+$")!==-1){
@@ -97,6 +124,10 @@
                         return arr[0]+item[arr[1]];
                     }
                 },
+                printImage(){
+                    let img = window.canvasImg("#print-div","#img-div",this.scale);
+                    $("#img-div").append(img);
+                }
             }
         })
     </script>

+ 1 - 0
webpack.mix.js

@@ -24,6 +24,7 @@ mix.copy('resources/js/queryForm/queryForm.js','public/js/queryForm/queryForm.js
 mix.copy('resources/js/queryForm/export.js','public/js/queryForm/export.js');
 mix.js('resources/js/queryForm/header.js','public/js/queryForm/header.js');
 mix.js('resources/js/utilities/barcode.js','public/js/utilities/barcode.js');
+mix.js('resources/js/utilities/html2canvas.js','public/js/utilities/html2canvas.js');
 
 mix.copy('resources/sound/','public/sound');
 mix.js('resources/js/elementUi.js','public/js/element-ui.js')