|
@@ -1,6 +1,6 @@
|
|
|
<template>
|
|
|
<div class="page">
|
|
|
- <template-page v-show="!formDialog" ref="pageRef" :get-list="getList" :table-attributes="tableAttributes" :table-events="tableEvents" :operationColumnWidth="110"
|
|
|
+ <template-page v-show="!formDialog" ref="pageRef" :get-list="getList" :table-attributes="tableAttributes" :table-events="tableEvents" :operationColumnWidth="140"
|
|
|
:options-evens-group="optionsEvensGroup" :moreParameters="moreParameters" :column-parsing="columnParsing"
|
|
|
:operation="operation" :exportList="exportList">
|
|
|
|
|
@@ -19,6 +19,7 @@
|
|
|
<div class="detail" v-if="formDialog">
|
|
|
<auxiliarySalesOrderDetail :id="id" @back="backList" :formType="formDialogType" :title="'辅材销售订单' + formDialogTitles[formDialogType]"></auxiliarySalesOrderDetail>
|
|
|
</div>
|
|
|
+ <print-preview ref="preView" @initPrint="handleInitPrint" @refreshList="handleRefreshList" />
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
@@ -30,8 +31,13 @@ import ImageUpload from '@/components/file-upload'
|
|
|
import { downloadFiles } from '@/utils/util'
|
|
|
import { required, mobileRequired, mobile, httpUrl, email } from '@/components/template/rules_verify.js'
|
|
|
import { listPageV2,pageExport, getDetail, add, edit, submit } from "@/api/auxiliaryFittings/auxiliarySalesOrder";
|
|
|
+import { getWebsit } from "@/api/customerManagement";
|
|
|
+import printPreview from '../components/preview.vue'
|
|
|
+import { disAutoConnect, hiprint } from 'vue-plugin-hiprint'
|
|
|
+
|
|
|
+disAutoConnect()
|
|
|
export default {
|
|
|
- components: { TemplatePage, ImageUpload, auxiliarySalesOrderDetail },
|
|
|
+ components: { TemplatePage, ImageUpload, auxiliarySalesOrderDetail, printPreview },
|
|
|
mixins: [import_mixin],
|
|
|
data() {
|
|
|
return {
|
|
@@ -62,8 +68,9 @@ export default {
|
|
|
formDialogTitles: ["新增","编辑", "详情"],
|
|
|
formDialog: false,
|
|
|
id: '',
|
|
|
- flag: ''
|
|
|
- }
|
|
|
+ flag: '',
|
|
|
+ websitList:[]
|
|
|
+ }
|
|
|
},
|
|
|
computed: {
|
|
|
// 更多参数
|
|
@@ -126,6 +133,9 @@ export default {
|
|
|
this.formDialogType = row.flag == 'SAVE'?1:2
|
|
|
this.openForm()
|
|
|
}}>确认提货</el-button>:null}
|
|
|
+ <el-button type="text" onClick={() => this.toPrint(row, 2)}>
|
|
|
+ 打印
|
|
|
+ </el-button>
|
|
|
</div>
|
|
|
)
|
|
|
},
|
|
@@ -136,9 +146,173 @@ export default {
|
|
|
openForm() {
|
|
|
this.formDialog = true;
|
|
|
},
|
|
|
+ getWebsit(){
|
|
|
+ getWebsit({type: 'C'}).then(res => {
|
|
|
+ this.websitList = res.data
|
|
|
+ })
|
|
|
+ },
|
|
|
+ // 点击打印
|
|
|
+ async toPrint(row, type) {
|
|
|
+ this.getWebsit()
|
|
|
+ // 初始化模板,否则生成的模板叠加
|
|
|
+ hiprint.init()
|
|
|
+ this.hiprintTemplate = new hiprint.PrintTemplate()
|
|
|
+ // 兼容批量打印
|
|
|
+ let params = !type ? this.recordSelected : [row.salesId]
|
|
|
+ let len = params.length
|
|
|
+ let loadingLen = len
|
|
|
+ // 使用 i-- 提升for效率
|
|
|
+ this.$startLoading()
|
|
|
+ for (let i = len; i > 0; i--) {
|
|
|
+ try {
|
|
|
+ const { data } = await getDetail({
|
|
|
+ salesId: params[i - 1].salesId || params[i - 1]
|
|
|
+ })
|
|
|
+ let websitHtml = ''
|
|
|
+ let html = ''
|
|
|
+ let num = 0
|
|
|
+ let totalAmount = 0
|
|
|
+ data.items.forEach(item=>{
|
|
|
+ totalAmount = (Number(item.saleAmount)*100 + totalAmount*100)/100
|
|
|
+ num += Number(item.salesQty)
|
|
|
+ html += `
|
|
|
+ <tr align="center">
|
|
|
+ <td>${item.goodsName}</td>
|
|
|
+ <td>${item.goodsSpecification}</td>
|
|
|
+ <td>${item.goodsSalesUnit}</td>
|
|
|
+ <td>${item.salesQty}</td>
|
|
|
+ <td>${item.price}</td>
|
|
|
+ <td>${item.saleAmount}</td>
|
|
|
+ <td></td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ `
|
|
|
+ })
|
|
|
+ this.websitList.forEach(item=>{
|
|
|
+ websitHtml += `
|
|
|
+ <div style="display: flex;font-size: 16px;margin: 10px;">
|
|
|
+ <div style="margin-right: 10px;">${item.name}</div>
|
|
|
+ <div style="margin-right: 10px;">${item.websitPhone}</div>
|
|
|
+ <div>地址: ${item.address}</div>
|
|
|
+ </div>
|
|
|
+ `
|
|
|
+ })
|
|
|
+ // 模板基础配置
|
|
|
+ this.panel = this.hiprintTemplate.addPrintPanel({
|
|
|
+ height: 140,
|
|
|
+ width: 241,
|
|
|
+ fontFamily: '黑体',
|
|
|
+ fontSize: 13,
|
|
|
+ paperFooter: 340,
|
|
|
+ paperHeader: 10,
|
|
|
+ paperNumberDisabled: true
|
|
|
+ })
|
|
|
+
|
|
|
+ // 获取收款单模板和基础配置
|
|
|
+ this.panel.addPrintHtml({
|
|
|
+ options: {
|
|
|
+ width: 633,
|
|
|
+ top: 30,
|
|
|
+ left: 20,
|
|
|
+ fontFamily: '黑体',
|
|
|
+ fontSize: 13,
|
|
|
+ content: this.setTableDom(data,html,websitHtml,totalAmount,num)
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ loadingLen--
|
|
|
+ } catch (error) {
|
|
|
+ console.log(999)
|
|
|
+ this.$endLoading()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (loadingLen === 0) {
|
|
|
+ this.$endLoading()
|
|
|
+ }
|
|
|
+ console.log(333)
|
|
|
+ // 预览打印内容
|
|
|
+ this.$refs.preView.show(this.hiprintTemplate, this.panel)
|
|
|
+ },
|
|
|
+ // 打印模板
|
|
|
+ setTableDom(data,html,websitHtml,totalAmount,num) {
|
|
|
+ console.log(html)
|
|
|
+ return `
|
|
|
+ <div style="font-family:'黑体';font-size: 16px;">
|
|
|
+ <h1 style="text-align:center;margin: 10px 0;">${data.websitName}销售单</h1>
|
|
|
+ <div style="display: flex;justify-content: space-between;">
|
|
|
+ <div style="width: 28%;"></div>
|
|
|
+ <div>单据日期: ${data.createTime}</div>
|
|
|
+ <div>单据编号: ${data.salesId}</div>
|
|
|
+ </div>
|
|
|
+ <div style="display: flex;justify-content: space-between;font-size: 16px;margin: 10px 0;">
|
|
|
+ <div>客户: ${data.workerName}</div>
|
|
|
+ <div>摘要: ${data.payType == 'CASH'?'现金':'微信'}</div>
|
|
|
+ </div>
|
|
|
+ <div style="display: flex;justify-content: space-between;font-size: 16px;margin-bottom: 10px;">
|
|
|
+ <div>联系电话: ${data.workerMobile}</div>
|
|
|
+ <div>收货地址: </div>
|
|
|
+ <div style="width: 28%;"></div>
|
|
|
+ </div>
|
|
|
+ <div >
|
|
|
+ <table border=".5" cellspacing="0" width="856"
|
|
|
+ style="border-color: rgb(0,0,0);
|
|
|
+ border-collapse: collapse;
|
|
|
+ border-style: none;
|
|
|
+ border: 1px solid rgb(0,0,0);
|
|
|
+ font-weight: normal;
|
|
|
+
|
|
|
+ text-decoration: none;
|
|
|
+ vertical-align: middle;
|
|
|
+ box-sizing: border-box;
|
|
|
+ word-wrap: break-word;
|
|
|
+ word-break: break-all;">
|
|
|
+ <tr align="center">
|
|
|
+ <td>商品名称</td>
|
|
|
+ <td>规格</td>
|
|
|
+ <td>单位</td>
|
|
|
+ <td>数量</td>
|
|
|
+ <td>单价</td>
|
|
|
+ <td>金额</td>
|
|
|
+ <td>仓库</td>
|
|
|
+ <td>备注</td>
|
|
|
+ </tr>
|
|
|
+ ${html}
|
|
|
+ <tr align="center" align="center">
|
|
|
+ <td>小计: </td>
|
|
|
+ <td colspan="2"></td>
|
|
|
+ <td>${num}</td>
|
|
|
+ <td></td>
|
|
|
+ <td>${totalAmount}</td>
|
|
|
+ <td colspan="2">金额总计: ${totalAmount}</td>
|
|
|
+ </tr>
|
|
|
+ </table>
|
|
|
+ </div>
|
|
|
+ <div style="display: flex;justify-content: space-between;font-size: 16px;margin: 10px;">
|
|
|
+ <div>制单人: ${data.createBy}</div>
|
|
|
+ <div>审核人: ${data.confirmBy}</div>
|
|
|
+ <div>业务员: </div>
|
|
|
+ <div>签收人: </div>
|
|
|
+ </div>
|
|
|
+ ${websitHtml}
|
|
|
+ <div style="margin:100px 0 0 0">
|
|
|
+ <div></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ `
|
|
|
+ },
|
|
|
+ handleRefreshList() {
|
|
|
+ this.recordSelected = []
|
|
|
+ this.$refs.pageRef.refreshList()
|
|
|
+ },
|
|
|
+ handleInitPrint() {
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.initPrint()
|
|
|
+ })
|
|
|
+ },
|
|
|
// 下载导入模版
|
|
|
handleDownload() {
|
|
|
- // downloadFiles('charging/standard/download');
|
|
|
+ // downloadFiles('charging/standard/download');
|
|
|
},
|
|
|
}
|
|
|
}
|