Commit 49bd2403 authored by 沈翠玲's avatar 沈翠玲

生产工单->打印工单

parent 46752d79
......@@ -65,6 +65,7 @@
"vue-ls": "4.0.0",
"vue-meta": "2.4.0",
"vue-plugin-hiprint": "^0.0.56",
"vue-print-nb": "^1.7.5",
"vue-router": "3.4.9",
"vuedraggable": "2.24.3",
"vuex": "3.6.0"
......
......@@ -109,3 +109,11 @@ export function doCheckToolNum(workorderId){
method: 'get'
})
}
// 获取打印工单数据
export function printInfo(workorderId) {
return request({
url: '/mes/pro/workorder/printInfo?workorderIds=' + workorderId,
method: 'get'
})
}
......@@ -155,6 +155,15 @@
v-hasPermi="['mes:pro:workorder:dofinish']">生产打样下达
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain size="mini" v-print="printContent" id="printbtn" style="display: none"
>打印工单
</el-button>
<el-button type="warning" plain size="mini" ref="printbtn" @click="handlePrint"
>打印工单
</el-button>
</el-col>
<!-- <right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
......@@ -524,12 +533,23 @@
<ArrangeInfo :group-code="groupCode" :addBtn="false"></ArrangeInfo>
</el-dialog>
<WorkorderRecordSelect ref="WorkorderRecordSelectRef" :data="currentData" />
<div style="overflow: hidden;width: 0;height: 0;">
<div id="productOrderDetail">
<div v-for="(item, index) in productionSolutionTable" :key="'productionSolutionTable' + index">
<productOrderSpecification :productionSolutionTable="item" style="page-break-after:always"></productOrderSpecification>
<productOrderDetail :workOrderTable="workOrderTable[index]" style="page-break-after:always"></productOrderDetail>
</div>
</div>
</div>
</div>
</template>
<script>
import RoutesProcessSelect from "@/components/routesProcessSelect/index.vue";
import WorkorderRecordSelect from "@/components/workorderRecordSelect/index.vue";
import productOrderDetail from "./print/productOrderDetail.vue";
import productOrderSpecification from "./print/productOrderSpecification.vue";
import {
listWorkorder,
......@@ -538,6 +558,7 @@ import {
addWorkorder,
updateWorkorder,
dofinish,
printInfo,
doCheckToolNum
} from "@/api/mes/pro/workorder";
......@@ -558,7 +579,9 @@ import { batchAddArrange } from "@/api/mes/pro/arrange";
import ArrangeInfo from "@/views/mes/pro/arrange/info.vue";
import CommandList from "./commandList.vue";
import dayjs from 'dayjs';
import print from 'vue-print-nb';
export default {
directives: { print },
name: "Workorder",
dicts: [
"mes_workorder_status",
......@@ -566,6 +589,8 @@ export default {
"mes_workorder_type",
],
components: {
productOrderDetail,
productOrderSpecification,
ArrangeInfo,
CombinationInfos,
Treeselect,
......@@ -588,8 +613,30 @@ export default {
autoGenFlag: false,
optType: undefined,
combOpen: false,
printContent: {
id: 'productOrderDetail',
// preview: true, // 预览工具是否启用
// previewTitle: '储能服务费结算单', // 预览页面的标题
popTitle: '', // 打印页面的页眉
extraHead: '<meta http-equiv="Content-Language"content="zh-cn"/>',
previewBeforeOpenCallback() {
console.log('previewBeforeOpenCallback')
},
previewOpenCallback() {},
beforeOpenCallback(vue) {
// vue.printLoading = true;
},
openCallback(vue) {
// vue.printLoading = false;
},
closeCallback() {},
clickMounted(vue) {
console.log('clickMounted')
},
},
combinationCodes: [],
arrangeOpen: false,
enablePrint: false,
arrangeOpen2: false,
arrangeCode: [],
groupCode: "",
......@@ -687,6 +734,8 @@ export default {
{ required: true, message: "需求日期不能为空", trigger: "blur" },
],
},
productionSolutionTable: [],
workOrderTable: []
};
},
activated() {
......@@ -702,8 +751,20 @@ export default {
this.daterangePurchaseDate = [dayjs().format('YYYY-MM-DD'), dayjs().add(7, 'day').format('YYYY-MM-DD')]
},
handlePrint(){
printInfo(this.ids).then(res=>{
if(!res.data || res.data.length === 0) {
return this.$message.warning('没有数据')
}
if(res.code === 200 && res.data) {
this.productionSolutionTable = res.data.map(v=>v.productionSolutionTable)
this.workOrderTable = res.data.map(v=>v.workOrderTable)
this.$nextTick(() => {
document.getElementById('printbtn').click()
})
}
})
},
handleCommandClick() {
this.currentData = this.selectedRows[0]
if (this.selectedRows[0].workorderType == 'prototype' && this.selectedRows[0].status === "PUBLISHED") {
......@@ -1220,3 +1281,9 @@ export default {
},
};
</script>
<style>
@page {
size: auto;
margin: 0mm;
}
</style>
......@@ -2,25 +2,29 @@
<div class="productOrderBox">
<div class="pageTop">
<div class="titles">生产单</div>
<div class="titles GOM">GOM</div>
<div v-if="pageHeader.arrangeCode" class="barcode">
<div v-if="pageHeader.arrangeCode" class="barcode">
<vue-barcode
:value="pageHeader.arrangeCode"
margin-right="5"
display-value="432141243"
:display-value="pageHeader.arrangeCode"
font="bold"
margin-left="5"
text-margin="10"
text-margin="5"
text-position="bottom"
style="width:200px;"
width="1"
style="width:250px;"
width="2"
ean128="ean128"
:text="'规格书编号:'+ pageHeader.arrangeCode"
:text="pageHeader.arrangeCode"
height="30"
margin-top="10"
margin="10"
margin-bottom="20"
text-align="center"
font-size="12">不支持vue-barcode</vue-barcode>
margin="20"
margin-bottom="10"
text-align="right"
font-size="13"
font-weight="600">不支持vue-barcode</vue-barcode>
</div>
</div>
<div>
产品类别:{{ pageHeader.itemTypeName }}
......@@ -42,9 +46,13 @@
<div class="materialLength">
<div>材料总长度:{{ pageHeader.materialLength }}</div>
<div>完工日期:{{ pageHeader.finishTime }}</div>
<div>打印时间:{{ date }}</div>
</div>
<div class="materialLength">
<div>生产制程:{{ pageHeader.materialLength }}</div>
</div>
</div>
<table border class="form-header font-size-16" style="table-layout: fixed;width: 100%;border:1px solid #000000;font-size:14px;">
<table border class="form-header font-size-16" style="table-layout: fixed;width: 100%;border:1px solid #000000;font-size:14px;line-height:25px;">
<!-- -->
<tr height="20" class="color000">
<td colspan="4" align="center">产品编码</td>
......@@ -54,7 +62,7 @@
<td colspan="2" align="center">Loss数</td>
<td colspan="2" align="center">参考数</td>
<td colspan="2" align="center">派工数</td>
<td colspan="2" align="center">材料总重</td>
<td colspan="2" align="center">材料总重(KG)</td>
<td colspan="3" align="center">单层厚(丝)</td>
</tr>
<tr height="20" class="color000">
......@@ -69,19 +77,21 @@
<td colspan="3" align="center">{{ workOrderInfo.singleLayerThick }}</td>
</tr>
<!-- -->
<tr height="5" class="color000">
</tr>
<tr height="20" class="color000">
<td colspan="2" align="center">形体配色</td>
<td colspan="2" align="center">指令</td>
<td colspan="2" align="center">数量</td>
<td colspan="2" align="center">Loss数</td>
<td colspan="2" align="center">Loss数</td>
<td colspan="2" align="center">形体配色</td>
<td colspan="2" align="center">指令</td>
<td colspan="2" align="center">数量</td>
<td colspan="2" align="center">Loss数</td>
<td colspan="2" align="center">Loss数</td>
<td colspan="2" align="center">形体配色</td>
<td colspan="2" align="center">指令</td>
<td colspan="2" align="center">数量</td>
<td colspan="2" align="center">Loss数</td>
<td colspan="2" align="center">Loss数</td>
</tr>
<tr v-for="(item,index) in soSizeList" :key="index" height="20" class="color000">
<td colspan="2" align="center">{{ item[0]&&item[0].colorNo }}</td>
......@@ -97,6 +107,12 @@
<td colspan="2" align="center">{{ item[2]&&item[2].quantity }}</td>
<td colspan="2" align="center">{{ item[2]&&item[2].lossNum }}</td>
</tr>
<tr height="5" class="color000">
</tr>
<tr height="20" class="color000">
<td colspan="7" align="center" style="text-align: left;">客户货单编码:</td>
<td colspan="17" align="center" style="text-align: left">客户货品名称:</td>
</tr>
<!-- -->
<tbody v-for="(soDirective, index) in soDirectives" :key="index" >
<tr height="20" class="color000">
......@@ -171,22 +187,26 @@
</tr>
<tr height="20" class="color000">
<td colspan="2" align="center">物料类别</td>
<td colspan="4" align="center">物料编码</td>
<td colspan="8" align="center">物料名称</td>
<td colspan="2" align="center">物料编码</td>
<td colspan="6" align="center">物料名称</td>
<td colspan="2" align="center">标准用量</td>
<td colspan="2" align="center">订单用量</td>
<td colspan="2" align="center">单位</td>
<td colspan="2" align="center">应用工序</td>
<td colspan="2" align="center">仓库</td>
<td colspan="2" align="center">库位</td>
<td colspan="2" align="center">备注</td>
</tr>
<tr v-for="(item,index) in processItemList" :key="index" height="20" class="color000">
<td colspan="2" align="center">{{ item.itemType }}</td>
<td colspan="4" align="center" style="word-wrap:break-word;word-break:break-all">{{ item.itemCode }}</td>
<td colspan="8" align="center" style="word-wrap:break-word;word-break:break-all">{{ item.itemName }}</td>
<td colspan="2" align="center" style="word-wrap:break-word;word-break:break-all">{{ item.itemCode }}</td>
<td colspan="6" align="center" style="word-wrap:break-word;word-break:break-all">{{ item.itemName }}</td>
<td colspan="2" align="center">{{ item.standardDosage }}</td>
<td colspan="2" align="center">{{ item.quantity }}</td>
<td colspan="2" align="center">{{ item.unit }}</td>
<td colspan="2" align="center">{{ item.processName }}</td>
<td colspan="2" align="center"></td>
<td colspan="2" align="center"></td>
<td colspan="2" align="center">{{ item.remark }}</td>
</tr>
</table>
......@@ -198,6 +218,11 @@
<div>输单员/审核员:{{ pageFooter.auditors }}</div>
<div>跟单员:{{ pageFooter.merchandiser }}</div>
</div>
<div class="productionManagement">
<div>第一联:生产部(白)</div>
<div>第二联:仓库(黄)</div>
<div>第三联:存根(红)</div>
</div>
<div text-center>
第1页,共1页
</div>
......@@ -206,143 +231,177 @@
</template>
<script>
import dayjs from 'dayjs'
import VueBarcode from 'vue-barcode'
export default {
components: { VueBarcode },
props: ['workOrderTable'],
data() {
return {
workOrderInfo: {
"productCode": "IF2022042440", // 产品编号
"productName": "*QT03800 李宁鞋类不干胶防伪防窜(升级版)鞋舌贴标3.4*2.8cm ", // 产品名称
"unit": "ST", // 单位
"quantity": 10092.0, // 生产量
"lossNum": 0, // loss数
"dispatchQuantity": 10092.0, // 参考数
"referenceQuantity": 10092.0, // 派工数
"materialWeight": 0.0, // 总重
"singleLayerThick": 0.0 // 单层厚
date: dayjs().format('YYYY-MM-DD'),
// workOrderInfo: {
// "productCode": "IF2022042440", // 产品编号
// "productName": "*QT03800 李宁鞋类不干胶防伪防窜(升级版)鞋舌贴标3.4*2.8cm ", // 产品名称
// "unit": "ST", // 单位
// "quantity": 10092.0, // 生产量
// "lossNum": 0, // loss数
// "dispatchQuantity": 10092.0, // 参考数
// "referenceQuantity": 10092.0, // 派工数
// "materialWeight": 0.0, // 总重
// "singleLayerThick": 0.0 // 单层厚
// },
// soSizeList: [
// [ {
// "colorNo": "", // 形体配色
// "clientCmd": "XC24030018", // 指令
// "quantity": 1009.0, // 数量
// "lossNum": 0.000 // loss数量
// },
// {
// "colorNo": "",
// "clientCmd": "XC24030018",
// "quantity": 303.0,
// "lossNum": 0.000
// },
// {
// "colorNo": "",
// "clientCmd": "XC24030018",
// "quantity": 303.0,
// "lossNum": 0.000
// }],
// [{
// "colorNo": "",
// "clientCmd": "XC24030018",
// "quantity": 1615.0,
// "lossNum": 0.000
// },
// {
// "colorNo": "",
// "clientCmd": "XC24030018",
// "quantity": 706.0,
// "lossNum": 0.000
// }]
// ],
// soDirectives: [
// {
// "productSpec": null, // 产品材质
// "remark": null, // 备注
// "frontColorName": "紫红,深红,朱红", // 印刷正面颜色
// "oppositeColorName": "紫红,深红,朱红", // 印刷背面颜色
// "segment": "UNISEX", // 段别
// "salePath": "中国", // 销线
// "wholeSize": null, // 整/半码
// "quarter": "24Q2", // 季度
// "poNo": null, // PO号
// "wipNo": null, // WIPNo号
// "skNo": null, // sk编号
// "patentNo": null, // 专利号
// "materialDesc": null, // 材质描述
// "shipToId": null, // SHIP TO ID
// "cycle": null,// 周期
// "packingNum": null // 装箱数
// }
// ],
// processList: [ // 生产制程
// {
// "processName": "高端排版", // 生产制程
// "remark": "", // 备注
// "desc": "", // 描述
// "signature": "", // 审核/签字
// "quantity": 10092.000 // 数量
// },
// {
// "processName": "数码印刷",
// "remark": "",
// "desc": "",
// "quantity": 10092.000
// },
// {
// "processName": "模切",
// "remark": "",
// "desc": "",
// "quantity": 10092.000
// }
// ],
// img: {
// "frontImg": "http://192.168.3.91:9000/mes/2024/03/20/1111_20240320192902A005.png", // 产品正面
// "backImg": "http://192.168.3.91:9000/mes/2024/03/20/2222_20240320192903A006.png" // 产品背面
// },
// processItemList: [ // 物料
// {
// "itemCode": "IF2024041609", // 物料编码
// "itemType": "铜版纸不干胶", // 物料类别
// "itemName": "白格背印AW4200A*/31cm*1000m", // 物料名称
// "unit": "MIN", // 单位
// "standardDosage": 0, // 标准用量
// "quantity": 11.586, // 订单用量
// "processName": "数码印刷", // 应用工序
// "remark": null // 备注
// }
// ],
// pageHeader: {
// "itemTypeName": "",
// "arrangeCode": "BP24704001",
// "clientName": null,
// "tableTypeName": "直接出货单-正常单",
// "productionSolutionCode": "60000000",
// "finishTime": null,
// "routeDesc": "高端排版-数码印刷-QC&包装-模",
// "rowNum": "",
// "dispatchMultiple": 2.00,
// "printingDirection": "06",
// "materialLength": 0.0,
// "packMode": "按size包装"
// },
// pageFooter: {
// "printUsername": "admin",
// "auditors": "", // 输单员/审核员
// "merchandiser": "", // 跟单员
// "productionManagement": "", // 生管
// "entryTime": "2024-05-08"
// },
}
},
soSizeList: [
[ {
"colorNo": "", // 形体配色
"clientCmd": "XC24030018", // 指令
"quantity": 1009.0, // 数量
"lossNum": 0.000 // loss数量
computed: {
workOrderInfo (){
return this.workOrderTable.body.workOrderInfo
},
{
"colorNo": "",
"clientCmd": "XC24030018",
"quantity": 303.0,
"lossNum": 0.000
soSizeList (){
let result = [];
for(let i=0; i<this.workOrderTable.body.soSizeList.length; i+=3 ){
result.push(this.workOrderTable.body.soSizeList.slice(i,i+3));
}
return result
},
{
"colorNo": "",
"clientCmd": "XC24030018",
"quantity": 303.0,
"lossNum": 0.000
}],
[{
"colorNo": "",
"clientCmd": "XC24030018",
"quantity": 1615.0,
"lossNum": 0.000
soDirectives (){
return this.workOrderTable.body.soDirectives
},
{
"colorNo": "",
"clientCmd": "XC24030018",
"quantity": 706.0,
"lossNum": 0.000
}]
],
soDirectives: [
{
"productSpec": null, // 产品材质
"remark": null, // 备注
"frontColorName": "紫红,深红,朱红", // 印刷正面颜色
"oppositeColorName": "紫红,深红,朱红", // 印刷背面颜色
"segment": "UNISEX", // 段别
"salePath": "中国", // 销线
"wholeSize": null, // 整/半码
"quarter": "24Q2", // 季度
"poNo": null, // PO号
"wipNo": null, // WIPNo号
"skNo": null, // sk编号
"patentNo": null, // 专利号
"materialDesc": null, // 材质描述
"shipToId": null, // SHIP TO ID
"cycle": null,// 周期
"packingNum": null // 装箱数
}
],
processList: [ // 生产制程
{
"processName": "高端排版", // 生产制程
"remark": "", // 备注
"desc": "", // 描述
"signature": "", // 审核/签字
"quantity": 10092.000 // 数量
processList (){
return this.workOrderTable.body.processList
},
{
"processName": "数码印刷",
"remark": "",
"desc": "",
"quantity": 10092.000
processItemList (){
return this.workOrderTable.body.processItemList
},
{
"processName": "模切",
"remark": "",
"desc": "",
"quantity": 10092.000
}
],
img: {
"frontImg": "http://192.168.3.91:9000/mes/2024/03/20/1111_20240320192902A005.png", // 产品正面
"backImg": "http://192.168.3.91:9000/mes/2024/03/20/2222_20240320192903A006.png" // 产品背面
img (){
return this.workOrderTable.body.img
},
processItemList: [ // 物料
{
"itemCode": "IF2024041609", // 物料编码
"itemType": "铜版纸不干胶", // 物料类别
"itemName": "白格背印AW4200A*/31cm*1000m", // 物料名称
"unit": "MIN", // 单位
"standardDosage": 0, // 标准用量
"quantity": 11.586, // 订单用量
"processName": "数码印刷", // 应用工序
"remark": null // 备注
}
],
pageHeader: {
"itemTypeName": "",
"arrangeCode": null,
"clientName": null,
"tableTypeName": "直接出货单-正常单",
"productionSolutionCode": "60000000",
"finishTime": null,
"routeDesc": "高端排版-数码印刷-QC&包装-模",
"rowNum": "",
"dispatchMultiple": 2.00,
"printingDirection": "06",
"materialLength": 0.0,
"packMode": "按size包装"
pageHeader (){
return this.workOrderTable.pageHeader
},
pageFooter: {
"printUsername": "admin",
"auditors": "", // 输单员/审核员
"merchandiser": "", // 跟单员
"productionManagement": "", // 生管
"entryTime": "2024-05-08"
pageFooter (){
return this.workOrderTable.pageFooter
},
}
},
}
</script>
<style scoped lang="scss">
.productOrderBox{
position: relative;
padding-top:20px;
width: 780px;
width: 920px;
height: 1100px;
padding: 0 49px;
padding-top:20px;
padding-bottom:80px;
box-sizing: border-box;
}
......@@ -352,28 +411,37 @@ export default {
position: relative;
.titles{
text-align: center;
font-size:22px;
font-size:25px;
}
.GOM {
color: #1d1d1d;
color: #ccc3c3;
position: absolute;
left: 50%;
transform: translateX(-50%)
}
.barcode{
position: absolute;
top:-10px;
right:0px;
width: 200px;
height:80px;
top: 0;
right: -10px;
width: 300px;
height: 80px;
display: flex;
overflow: hidden;
justify-content: flex-end;
}
.titleType{
display: flex;
div{
padding-right:20px;
padding-right:72px;
min-width: 100px;
}
}
.packType{
display: flex;
div{
padding-right:30px;
padding-right:50px;
min-width: 100px;
}
}
......@@ -386,11 +454,11 @@ export default {
}
}
.pageBottom{
width: 780px;
width: 850px;
position: absolute;
left: 0;
bottom: 0;
padding: 0px 10px;
padding: 0px 49px;
color: #000;
.productionManagement{
display: flex;
......@@ -405,5 +473,9 @@ export default {
}
.color000{
color: #000;
td {
word-wrap:break-word;
word-break:break-all
}
}
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment