소스 검색

打印模板-web打印

zhangxiaomu 2 년 전
부모
커밋
bfda574299
4개의 변경된 파일55개의 추가작업 그리고 93개의 파일을 삭제
  1. 3 1
      src/api/pages/common/common.js
  2. 33 73
      src/components/business/print/modal.vue
  3. 3 19
      src/utils/printUtil.js
  4. 16 0
      src/view/sale/order/index.vue

+ 3 - 1
src/api/pages/common/common.js

@@ -131,5 +131,7 @@ export const routeUrl = {
   // 启用
   enable: {key: 'enable', method: 'enable'},
   // 操作日志
-  log: {key: 'log', method: 'log'}
+  log: {key: 'log', method: 'log'},
+  //打印
+  print:{key: 'print', method: 'print'},
 }

+ 33 - 73
src/components/business/print/modal.vue

@@ -3,20 +3,13 @@
   <div>
     <DkModal
       v-model="showChooseTemplate"
-      :title="$t('W_136')"
+      title="选择打印模板"
       @modalOk="printBtn"
       @modalCancel="showChooseTemplate = false"
       @on-cancel="showChooseTemplate = false"
     >
       <DkForm :col-count="1">
-        <DkFormItem :label="$t('printerId')" required>
-          <SelectPop v-model="currentPrinter" :multiple="false"
-                     :options="printerList"
-                     labelKey="printerName"
-                     valueKey="printerCode">
-          </SelectPop>
-        </DkFormItem>
-        <DkFormItem :label="$t('printLayoutId')" required>
+        <DkFormItem label="打印模板" required>
           <SelectPop v-model="currentTemplate" :multiple="false"
                      :options="templateList"
                      labelKey="layoutName"
@@ -29,25 +22,22 @@
 </template>
 
 <script>
-
-  import { hiprint } from 'vue-plugin-hiprint'
+import {formMixin} from '@/mixins/form'
+import { hiprint } from 'vue-plugin-hiprint'
 
   export default {
+    mixins: [formMixin],
     name: 'print_modal',
     components: {},
     props: {
-      orderType: {
-        type: String,
-        default: ''
-      },
-      labelKind: {
+      docName: {
         type: String
       },
       service: {
         type: Object
       },
       id: {
-        type: Number
+        type: String
       },
     },
     data() {
@@ -66,48 +56,41 @@
           this.$Message.warning('请先选择一个模板再打印')
           return
         }
-        if (!this.currentPrinter) {
-          this.$Message.warning('请先选择一个打印机再打印')
-          return
-        }
         if (!this.id) {
           this.$Message.warning('请先选择一条数据再打印')
           return
         }
 
-
-        // console.log('currentTemplate', this.currentTemplate)
-        // console.log('currentPrinter', this.currentPrinter)
         let template = this.templateList.find(it => it.layoutId == this.currentTemplate)?.layoutData
-        // console.log('template', template)
-
-
-        // 打印机code,保存到缓存
-        let data = localStorage.getItem('currentPrinter')
-        if (data) {
-          data = JSON.parse(localStorage.getItem('currentPrinter'))
-        } else {
-          data = {}
-        }
-        data[this.$store.state.user.ftyId] = this.currentPrinter
-        localStorage.setItem('currentPrinter', JSON.stringify(data))
-        //获取打印数据
-        this.excuteNoParams(this.$service.printDataService, this.$service.printDataService.getPrintData, [this.id]).then(res => {
-          if (res.code === 200 && res.data) {
-            let printData = res.data
-
-            this.$printUtil.print(template,printData,this.currentPrinter)
 
-          } else {
-            this.$Message.warning(res.message)
-          }
-        })
+        console.log('this.service',this.service)
+        let header=this.excuteNoParam(this.service, this.service.selectById,[this.id])
+        //   .then(res => {
+        //   if (res.code === this.$config.SUCCESS_CODE) {
+        //     console.log(res.data)
+        //   } else {
+        //     this.$Message.warning(res.message)
+        //   }
+        // })
+        let detail=this.excuteNoParam(this.$service.orderService, this.$service.orderService.selectOrderInfoById, [this.id])
+        Promise.all([header, detail])
+          .then((results) => {
+            // 在这里执行接下来的操作
+            if(results?.[0]?.code === this.$config.SUCCESS_CODE && results?.[1]?.code === this.$config.SUCCESS_CODE){
+              let header =results?.[0]?.data
+              let detail =results?.[1]?.data
+              this.$set(header, 'table', detail['orderItem'])
+              let printData = {...header}
+              this.$printUtil.print(template,printData)
+            }else {
+              this.$Message.warning(this.$t('W_006'))
+            }
+          })
       },
       getTemplateList() {
-        this.excute(this.$service.labelPrintLayoutService, this.$service.labelPrintLayoutService.selectByCond, {
+        this.excute(this.$service.printLayoutService, this.$service.printLayoutService.selectByCond, {
           flgValid: true,
-          labelKind: this.labelKind,
-          ftyId: this.$store.state.user.ftyId
+          docName: this.docName,
         }).then(res => {
           if (res.code === 200) {
             this.templateList = res.data.list
@@ -116,33 +99,10 @@
           }
         })
       },
-      /**
-       * @desc   : 查询打印机
-       * @author : 洪旭东
-       * @date   : 2023-04-10 13:04
-       */
-      getPrinter() {
-        this.excute(this.$service.labelPrinterService, this.$service.labelPrinterService.selectByCond, { flgValid: true,ftyId: this.$store.state.user.ftyId
-      }).then(res => {
-          if (res.code === this.$config.SUCCESS_CODE) {
-            this.printerList = res.data.list
-            //从缓存中取出打印机code
-            if (localStorage.getItem('currentPrinter')) {
-              let localPrinterCode = JSON.parse(localStorage.getItem('currentPrinter'))[this.$store.state.user.ftyId]
-              let list = this.printerList.filter(it => it.printerCode == localPrinterCode)
-              if (localPrinterCode && list.length > 0) {
-                this.currentPrinter = localPrinterCode
-              }
-            }
-          } else {
-            this.$Message.warning(res.message)
-          }
-        })
-      }
+
     },
     created() {
       this.getTemplateList()
-      this.getPrinter()
     },
 
   }

+ 3 - 19
src/utils/printUtil.js

@@ -5,35 +5,19 @@ import TaskRunner from 'concurrent-tasks'
 /**
  * @desc   : 通用打印方法
  * @author : 张潇木
- * @remark : 如果是多台打印机同时打印,需要先自行创建连接
+ * @remark : 注意传入数据结构,明细信息key值固定为table
  * @date   : 2023/7/17 16:21
  * @param {*} template    打印模板json  (应为打印模板的[layoutData])
  * @param {*} printData   打印数据      (调用存储过程后得到的返回值)
- * @param {*} printer     打印机名称     (对应标签打印机[code],大小写敏感)
  * @param {*} copies      打印份数
  */
-let print = function (template, printData, printer, copies = 1) {
+let print = function (template, printData, copies = 1) {
   //创建模板
   let hiprintTemplate = new hiprint.PrintTemplate({
     template: template,
   })
 
-  //已连接直接调用打印
-  if(vueMain.$dkprint.hiwebSocket.opened){
-    console.log('opened')
-    //调用打印机打印
-    callPrint(hiprintTemplate,printData,printer,copies)
-  }else{
-      //1.获取[系统参数]-[标签打印服务地址]
-    getHost().then(host => {
-      //2.调用连接打印服务
-      return connectPrintServer(host)
-    }).then(res => {
-      //3.调用打印机打印
-      callPrint(hiprintTemplate,printData,printer,copies)
-    })
-  }
-
+  hiprintTemplate.print(printData, { title: '单据打印' })
 
 }
 

+ 16 - 0
src/view/sale/order/index.vue

@@ -8,6 +8,8 @@
         <BaseIndexButton ref="edit" name="edit"></BaseIndexButton>
         <BaseIndexButton ref="orderOut" name="orderOut"></BaseIndexButton>
         <BaseIndexButton ref="orderOutReturn" name="orderOutReturn"></BaseIndexButton>
+        <!--    打印    -->
+        <BaseIndexButton ref="print" name="print"></BaseIndexButton>
         <BaseIndexButton ref="invalid" name="invalid"></BaseIndexButton>
       </template>
       <template #right>
@@ -106,6 +108,10 @@
             <DkTableColumn field="path" :imageUrl="$config.imgUrl" type="image" :title="$t('yuLan')"/>
           </DkTable>
         </div>
+
+        <PrintModal ref="printModal" :doc-name="$config.docCode.order"
+                    :service="$service.orderService"
+                    :id="$refs?.['table-select']?.batchRows?.[0]?.orderId||null"/>
       </div>
     </DkSplit>
   </div>
@@ -114,10 +120,12 @@
 <script>
 
 import {indexMixin} from '@/mixins'
+import PrintModal from '_c/business/print/modal'
 
 export default {
   name: 'order',
   mixins: [indexMixin],
+  components: {PrintModal},
   data() {
     let self = this
     return {
@@ -363,6 +371,14 @@ export default {
     openFile(row) {
       window.open(this.$config.imgUrl + row.url)
     },
+    /**
+     * @desc   : 选择模板、打印机
+     * @author : 洪旭东
+     * @date   : 2023-04-10 13:45
+     */
+    print(){
+      this.$refs.printModal.showChooseTemplate = true
+    },
     /***************************设定参数函数************************************/
   },
   /**