|
@@ -37,7 +37,7 @@
|
|
|
<zj-form-module title="" label-width="100px" :form-data="formData" :form-items="formItems2">
|
|
|
<el-tabs slot="header" v-model="activeName">
|
|
|
<el-tab-pane label="商品信息" name="goodsInfo"></el-tab-pane>
|
|
|
- <el-tab-pane v-if="formDialogType > 0 && joinCode" label="条码信息" name="codeInfo"></el-tab-pane>
|
|
|
+ <el-tab-pane v-if="formDialogType > 0 && joinCode" label="条码信息" name="codeInfo"></el-tab-pane>
|
|
|
</el-tabs>
|
|
|
</zj-form-module>
|
|
|
<zj-form-module
|
|
@@ -61,9 +61,13 @@
|
|
|
>
|
|
|
</div>
|
|
|
</zj-page-container>
|
|
|
- </el-dialog>
|
|
|
+ </el-dialog>
|
|
|
</div>
|
|
|
-
|
|
|
+ <print-preview
|
|
|
+ ref="preView"
|
|
|
+ @initPrint="handleInitPrint"
|
|
|
+ @refreshList="handleRefreshList"
|
|
|
+ />
|
|
|
<el-dialog title="计划单明细" :visible.sync="dialogVisible" width="1000px" :before-close="handleCloseTes">
|
|
|
<div style="width: 960px; height: 680px">
|
|
|
<template-page
|
|
@@ -111,8 +115,10 @@ import jihuamingxi from '../mixins/jihuamingxi'
|
|
|
import { delayPerform, firstPerform, intervalPerform, passivePerform, queuePerform } from 'js-perform-lock'
|
|
|
import { required, diyRequired } from '@/components/template/rules_verify.js'
|
|
|
import Collapse from '@/components/Common/collapse.vue'
|
|
|
+import printPreview from '../components/preview.vue'
|
|
|
+import { disAutoConnect, hiprint } from 'vue-plugin-hiprint'
|
|
|
export default {
|
|
|
- components: { TemplatePage },
|
|
|
+ components: { TemplatePage, printPreview },
|
|
|
mixins: [import_mixin, operation_mixin, form_ty, storage_table, storage_goods, storage_codes, common, jihuamingxi],
|
|
|
data() {
|
|
|
return {
|
|
@@ -145,6 +151,7 @@ export default {
|
|
|
formDialog: false,
|
|
|
appraise_status: '',
|
|
|
formData: {
|
|
|
+ id: '',
|
|
|
companyWechatId: '',
|
|
|
companyWechatName: '',
|
|
|
examineBy: '',
|
|
@@ -173,7 +180,8 @@ export default {
|
|
|
joinCode: false,
|
|
|
joinCodeText: JSON.parse(localStorage.getItem('greemall_user')).joinCode,
|
|
|
logs: [],
|
|
|
- tesXuanXiang: []
|
|
|
+ tesXuanXiang: [],
|
|
|
+ printOrderId: ''
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
@@ -294,7 +302,20 @@ export default {
|
|
|
} else if (this.pageType == 'codeder') {
|
|
|
return []
|
|
|
}
|
|
|
- }
|
|
|
+ },
|
|
|
+ filterArr() {
|
|
|
+ return function (arr, size) {
|
|
|
+ //判断如果不是数组(就没有length),或者size没有传值,size小于1,就返回空数组
|
|
|
+ if (!arr.length || !size || size < 1) return []
|
|
|
+ let [start, end, result] = [null, null, []]
|
|
|
+ for (let i = 0; i < Math.ceil(arr.length / size); i++) {
|
|
|
+ start = i * size
|
|
|
+ end = start + size
|
|
|
+ result.push(arr.slice(start, end))
|
|
|
+ }
|
|
|
+ return result
|
|
|
+ }
|
|
|
+ }
|
|
|
},
|
|
|
watch: {
|
|
|
pageType() {
|
|
@@ -502,6 +523,14 @@ export default {
|
|
|
click: ({ row, index, column }) => {
|
|
|
this.openDetailForm(row, 3)
|
|
|
}
|
|
|
+ },
|
|
|
+ print: {
|
|
|
+ conditions: ({ row, index, column }) => {
|
|
|
+ return row.status == 'OK'
|
|
|
+ },
|
|
|
+ click: ({ row, index, column }) => {
|
|
|
+ this.toPrint(row)
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
} else if (this.pageType == 'goodsder') {
|
|
@@ -636,7 +665,136 @@ export default {
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
- }
|
|
|
+ },
|
|
|
+ handleRefreshList() {
|
|
|
+ this.recordSelected = []
|
|
|
+ this.$refs.pageRef.refreshList()
|
|
|
+ },
|
|
|
+ handleInitPrint() {
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.initPrint()
|
|
|
+ })
|
|
|
+ },
|
|
|
+ // 点击打印
|
|
|
+ async toPrint(row) {
|
|
|
+ let pagingData = []
|
|
|
+ const { data } = await goodsPurchaseDetail({
|
|
|
+ id: row.id
|
|
|
+ })
|
|
|
+ pagingData = this.filterArr(data.items, 30)
|
|
|
+ console.log(pagingData);
|
|
|
+ // 初始化模板,否则生成的模板叠加
|
|
|
+ hiprint.init()
|
|
|
+ this.hiprintTemplate = new hiprint.PrintTemplate()
|
|
|
+ // 兼容批量打印
|
|
|
+ let len = pagingData.length
|
|
|
+ let loadingLen = len
|
|
|
+ // 使用 i-- 提升for效率
|
|
|
+ this.$startLoading()
|
|
|
+ for (let i = 0; i < len; i++) {
|
|
|
+ try {
|
|
|
+ let html = ''
|
|
|
+ let num = 0
|
|
|
+ let totalAmount = 0
|
|
|
+ pagingData[i].forEach(item => {
|
|
|
+ const amount = (Number(item.price || 0) * 100 * item.qty || 0 * 100) / 100
|
|
|
+ totalAmount = (Number(item.amount) * 100 + totalAmount * 100) / 100
|
|
|
+ num += Number(item.qty || 0)
|
|
|
+ html += `
|
|
|
+ <tr align="center">
|
|
|
+ <td>${item.specsName || ''}</td>
|
|
|
+ <td>${item.goodsMaterialName || ''}</td>
|
|
|
+ <td>${amount}</td>
|
|
|
+ <td>${item.price || ''}</td>
|
|
|
+ <td>${item.qty || ''}</td>
|
|
|
+ <td>${data.id}</td>
|
|
|
+ <td>${data.venderName}</td>
|
|
|
+ <td>${data.createBy.split(')').length > 0 ? data.createBy.split(')')[1] : data.createBy}</td>
|
|
|
+ <td>${data.examineBy}</td>
|
|
|
+ <td>${data.examineTime.split(' ')[0]}<br>${data.examineTime.split(' ')[1].split('.')[0]}</td>
|
|
|
+ </tr>
|
|
|
+ `
|
|
|
+ })
|
|
|
+ console.log(num)
|
|
|
+ // 模板基础配置
|
|
|
+ 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, totalAmount, num, len, i)
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ loadingLen--
|
|
|
+ } catch (error) {
|
|
|
+ console.log(999, error)
|
|
|
+ this.$endLoading()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (loadingLen === 0) {
|
|
|
+ this.$endLoading()
|
|
|
+ }
|
|
|
+ // 预览打印内容
|
|
|
+ this.$refs.preView.show(this.hiprintTemplate, this.panel)
|
|
|
+ },
|
|
|
+ // 打印模板
|
|
|
+ setTableDom(data, html, totalAmount, num, length, page) {
|
|
|
+ return `
|
|
|
+ <div class="print-container">
|
|
|
+ <div class="print-table">
|
|
|
+ <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>
|
|
|
+ <td style="width: 120px;">型号</td>
|
|
|
+ <td style="width: 200px;">商品名称</td>
|
|
|
+ <td>金额</td>
|
|
|
+ <td>单价</td>
|
|
|
+ <td>数量</td>
|
|
|
+ <td>单据单号</td>
|
|
|
+ <td>供应商</td>
|
|
|
+ <td>仓库制单人</td>
|
|
|
+ <td>审核人</td>
|
|
|
+ <td style="width: 80px;">审核时间</td>
|
|
|
+ </tr>
|
|
|
+ ${html}
|
|
|
+ <tr>
|
|
|
+ <td>小计: </td>
|
|
|
+ <td></td>
|
|
|
+ <td>${totalAmount}</td>
|
|
|
+ <td></td>
|
|
|
+ <td>${num}</td>
|
|
|
+ <td colspan="5">金额总计: ${totalAmount}</td>
|
|
|
+ </tr>
|
|
|
+ </table>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ `
|
|
|
+ },
|
|
|
}
|
|
|
}
|
|
|
</script>
|