Files
hht-hdyy-uni/pages/hdyy/zpgl/mater-zudai.vue
2026-01-14 14:30:15 +08:00

426 lines
14 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="zd_container">
<!-- 物料组袋 -->
<nav-bar :title="title"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
<view class="zd-row border-bottom">
<view class="zd-col-6">
<span class="filter_label">袋号</span>
</view>
<view class="zd-col-10">
<!-- <search-box v-model="val1"/> -->
<input type="text" class="filter_input" v-model="val1" disabled>
</view>
<button class="mini-btn" type="primary" @tap="_byBagCodeInfo">获取袋码</button>
</view>
<view class="zd-row border-bottom">
<view class="zd-col-6">
<span class="filter_label">物料编码</span>
</view>
<view class="zd-col-13">
<search-box v-model="materialData.material_code"/>
</view>
<button class="mini-btn" type="primary" @tap="toJump('material?title=物料维护')">查询</button>
</view>
<view class="zd-row border-bottom">
<view class="zd-col-6">
<span class="filter_label filter_input_disabled">物料名称</span>
</view>
<view class="zd-col-18">
<input type="text" class="filter_input filter_input_disabled" v-model="materialData.material_name" disabled>
</view>
</view>
<view class="zd-row border-bottom">
<view class="zd-col-6">
<span class="filter_label filter_input_disabled">物料类别</span>
</view>
<view class="zd-col-18">
<input type="text" v-model="materialData.class_name" class="filter_input filter_input_disabled" disabled>
</view>
</view>
<view class="zd-row border-bottom">
<view class="zd-col-6">
<span class="filter_label">供应商编码</span>
</view>
<view class="zd-col-13">
<search-box v-model="suppData.supp_code"/>
</view>
<button class="mini-btn" type="primary" @tap="toJump2('supplier?title=供应商维护')">查询</button>
</view>
<view class="zd-row border-bottom">
<view class="zd-col-6">
<span class="filter_label filter_input_disabled">供应商名称</span>
</view>
<view class="zd-col-18">
<input type="text" v-model="suppData.supp_name" class="filter_input filter_input_disabled" disabled>
</view>
</view>
<view class="zd-row border-bottom">
<view class="zd-col-6">
<span class="filter_label">批号</span>
</view>
<view class="zd-col-18">
<input type="text" v-model="pcsn" class="filter_input">
</view>
</view>
<view class="zd-row border-bottom">
<view class="zd-col-6">
<span class="filter_label">数量</span>
</view>
<view class="zd-col-18">
<input type="number" v-model="num" class="filter_input">
</view>
</view>
<view class="zd-row border-bottom">
<view class="zd-col-6">
<span class="filter_label">计量单位</span>
</view>
<view class="zd-col-18">
<input type="text" class="filter_input" v-model="unit">
</view>
</view>
</view>
</view>
<view class="zd-row submit-bar">
<!-- <button class="zd-col-5 button-default" @tap="toEmpty">清空</button> -->
<button class="zd-col-7 button-primary" :class="{'button-info': !val1 || !pcsn || !num || JSON.stringify(materialData) === '{}' || JSON.stringify(suppData) === '{}'}" :disabled="disabled" @tap="toZdPrint">组袋并打印</button>
<button class="zd-col-7 button-primary" :class="{'button-info': !val1 || !pcsn || !num || JSON.stringify(materialData) === '{}' || JSON.stringify(suppData) === '{}'}" :disabled="disabled" @tap="_confirmBagAssembly">确认组袋</button>
<button class="zd-col-7 button-primary" :class="{'button-info': !val1 || !pcsn || !num || JSON.stringify(materialData) === '{}' || JSON.stringify(suppData) === '{}'}" :disabled="disabled1" @tap="labelPrint">标签打印</button>
</view>
</view>
</template>
<script>
import {getCLodop} from '@/utils/CLodopfuncs.js'
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import {getDate} from '@/utils/utils.js'
const currentDate = getDate({format: true})
import {queryRecordNo, byBagCodeInfo, confirmBagAssembly} from '@/utils/getData3.js'
export default {
components: {
NavBar,
SearchBox
},
data() {
return {
title: '',
val1: '',
recordNo: '',
date: currentDate,
materialData: {},
suppData: {},
num: '',
unit: 'KG',
disabled: false,
disabled1: false,
pcsn: ''
};
},
onLoad (options) {
this.title = options.title
this._queryRecordNo()
},
onShow () {
if (this.$store.getters.publicObj !== '') {
this.materialData = this.$store.getters.publicObj
this.$store.dispatch('setPublicObj', '')
}
if (this.$store.getters.formData !== '') {
this.suppData = this.$store.getters.formData
this.$store.dispatch('setFormData', '')
}
},
methods: {
async _queryRecordNo () {
try {
let res = await queryRecordNo()
if (res) {
this.recordNo = res.data.recordNo
}
} catch (e) {
}
},
async _byBagCodeInfo () {
try {
let res = await byBagCodeInfo(this.materialData.material_id)
if (res) {
this.val1 = res.data.bag_code
}
} catch (e) {
}
},
handlePrintConfirm() {
// 处理打印逻辑
let data = Object.assign({}, this.materialData, this.suppData, {pcsn: this.pcsn, produce_time: this.date, bake_num: this.num})
this.showCustomDialog = false
this.toPrint(data)
},
toJump (name) {
uni.navigateTo({
url: `/pages/hdyy/wbc/${name}`
})
},
toJump2 (name) {
uni.navigateTo({
url: `/pages/hdyy/tygn/${name}`
})
},
toEmpty () {
this.val1 = ''
this.index1 = ''
this.materialData = {}
this.suppData = {}
this.pcsn = ''
this.num = ''
this.unit = 'KG'
this.disabled = false
this.disabled1 = false
},
toZdPrint () {
this._confirmBagAssembly()
this.labelPrint()
},
async _confirmBagAssembly () {
this.disabled = true
if (!this.val1 || !this.num || !this.pcsn || JSON.stringify(this.materialData) === '{}' || JSON.stringify(this.suppData) === '{}') {
this.disabled = false
return
}
try {
let res = await confirmBagAssembly(this.val1, this.materialData.material_id, this.suppData.supp_code, this.num, this.pcsn)
if (res) {
uni.showToast({
title: res.message,
icon: 'none'
})
}
this.toEmpty()
this.disabled = false
} catch (e) {
this.disabled = false
}
},
// async _printDelete (data) {
// try {
// let res = await printDelete(data)
// if (res) {
// // console.log('success')
// }
// } catch (e) {
// // console.log('error')
// }
// },
labelPrint () {
this.disabled1 = true
if (!this.val1 || JSON.stringify(this.materialData) === '{}' || JSON.stringify(this.suppData) === '{}') {
this.disabled1 = false
return
}
// this.showCustomDialog = true
let data = Object.assign({}, this.materialData, this.suppData, {pcsn: this.pcsn, create_time: this.date, qty: this.num, bag_code: this.val1})
this.toPrint(data)
},
toPrint (row) {
let iparr = this.$store.getters.printUrl.split(":")
let printUrl = iparr[1].slice(2)
let LODOP = getCLodop();
if (!(LODOP.webskt && LODOP.webskt.readyState === 1)) {
uni.showToast({
title: '当前配置ip' + printUrl + '网络不通,请检查',
icon: 'none',
duration: 5000
})
this.disabled1 = false
return
}
LODOP.SET_SHOW_MODE('HIDE_DISBUTTIN_SETUP', 1)// 隐藏那些无效按钮
// 打印纸张大小设置https://www.it610.com/article/2094844.html
LODOP.PRINT_INIT('')
LODOP.SET_PRINT_PAGESIZE(1, '94mm', '119mm', '')
LODOP.ADD_PRINT_RECT('1mm', '3mm', '92mm', '117mm', 0, 1)
LODOP.ADD_PRINT_RECT('1.01mm', '2.99mm', '92mm', '117mm', 0, 1)
LODOP.ADD_PRINT_RECT('1.01mm', '2.99mm', '92mm', '117mm', 0, 1)
LODOP.ADD_PRINT_RECT('1.01mm', '2.99mm', '92mm', '117mm', 0, 1)
LODOP.ADD_PRINT_RECT('1.01mm', '2.99mm', '92mm', '117mm', 0, 1)
LODOP.ADD_PRINT_TEXT('2.88mm', '35.4mm', '32.65mm', '5.95mm', '中 美 华 东 制 药')
LODOP.ADD_PRINT_TEXT('6.56mm', '22.33mm', '62.02mm', '5.69mm', 'Zhongmei Huadong Pharmaceutical')
LODOP.ADD_PRINT_TEXT('10.45mm', '26.83mm', '56.73mm', '7.01mm', '物 料 卡 Material Card')
LODOP.SET_PRINT_STYLEA(0, 'FontSize', 11)
LODOP.ADD_PRINT_TEXT('15.48mm', '5.13mm', '93.24mm', '5.69mm', '依据《状态标识牌的有关规定》QA-SMP-B005制定此记录')
LODOP.SET_PRINT_STYLEA(0, 'FontSize', 8)
LODOP.ADD_PRINT_TEXT('19.45mm', '5.13mm', '128.69mm', '7.01mm', 'Establish this record according to “SMP for status signboard”')
LODOP.SET_PRINT_STYLEA(0, 'FontSize', 8)
LODOP.ADD_PRINT_TEXT('22.89mm', '5.13mm', '27.62mm', '4.37mm', '(QA-SMP-B005)')
LODOP.SET_PRINT_STYLEA(0, 'FontSize', 8)
LODOP.ADD_PRINT_TEXT('26.86mm', '5.13mm', '66.78mm', '4.37mm', '记录编号 Record No.: ' + this.recordNo + '')
LODOP.SET_PRINT_STYLEA(0, 'FontSize', 8)
LODOP.ADD_PRINT_TEXT('31.64mm', '4.87mm', '87.95mm', '5.69mm', '物 料 名 称 Material Name: ' + row.material_name + '')
LODOP.ADD_PRINT_TEXT('37.17mm', '4.74mm', '42.44mm', '5.69mm', '物 料 批 号 及 代 码')
LODOP.ADD_PRINT_TEXT('40.9mm', '4.74mm', '86.1mm', '5.69mm', 'Material Batch No. and Code: ' + row.pcsn + '')
LODOP.ADD_PRINT_TEXT('46.78mm', '4.47mm', '27.09mm', '5.69mm', '有 效 期 至 口')
LODOP.ADD_PRINT_TEXT('46.78mm', '47.33mm', '27.62mm', '5.69mm', '复 验 期 至 口')
LODOP.ADD_PRINT_TEXT('51.01mm', '47.33mm', '21.54mm', '5.69mm', 'Expory Date')
LODOP.ADD_PRINT_TEXT('51.01mm', '4.47mm', '27.09mm', '5.69mm', 'Retest Date')
LODOP.ADD_PRINT_TEXT('56.83mm', '4.47mm', '86.62mm', '7.01mm', '经 销 商 Distributor:')
LODOP.ADD_PRINT_TEXT('62.92mm', '4.47mm', '85.3mm', '7.01mm', '生 产 商 Manufacturer:')
LODOP.ADD_PRINT_TEXT('69.74mm', '9.5mm', '11.22mm', '5.69mm', '日 期')
LODOP.SET_PRINT_STYLEA(0, 'FontSize', 10)
LODOP.ADD_PRINT_TEXT('73.42mm', '10.82mm', '9.63mm', '5.69mm', 'Date')
LODOP.ADD_PRINT_TEXT('69.61mm', '28.55mm', '20.48mm', '5.69mm', '重量(数量)')
LODOP.SET_PRINT_STYLEA(0, 'FontSize', 10)
LODOP.ADD_PRINT_TEXT('73.53mm', '31.46mm', '13.6mm', '4.37mm', 'Weight')
LODOP.ADD_PRINT_TEXT('69.69mm', '54.48mm', '14.92mm', '5.69mm', '经手人')
LODOP.SET_PRINT_STYLEA(0, 'FontSize', 10)
LODOP.ADD_PRINT_TEXT('73.03mm', '53.95mm', '15.72mm', '4.37mm', 'Operator')
LODOP.ADD_PRINT_TEXT('69.72mm', '75.38mm', '14.13mm', '5.69mm', '复核人')
LODOP.SET_PRINT_STYLEA(0, 'FontSize', 10)
LODOP.ADD_PRINT_TEXT('72.79mm', '74.59mm', '16.25mm', '4.37mm', 'Reviewer')
LODOP.ADD_PRINT_TEXT('79.27mm', '5mm', '19.16mm', '5.69mm', row.create_time.slice(0, 10) + '')
LODOP.SET_PRINT_STYLEA(0, 'Alignment', 2)
LODOP.ADD_PRINT_TEXT('79.27mm', '31.46mm', '15mm', '5.69mm', row.qty + '')
LODOP.SET_PRINT_STYLEA(0, 'Alignment', 2)
LODOP.ADD_PRINT_TEXT('86.47mm', '5.27mm', '35.03mm', '5.69mm', '合 格 Qualified 口')
LODOP.ADD_PRINT_TEXT('86.47mm', '45.22mm', '40.06mm', '5.69mm', '不 合 格 Unqualified 口')
LODOP.ADD_PRINT_TEXT('91.49mm', '5.27mm', '27.09mm', '5.69mm', '储 存 条 件:')
LODOP.ADD_PRINT_TEXT('95.73mm', '5.27mm', '36.35mm', '5.69mm', 'Stroage conditions')
LODOP.ADD_PRINT_TEXT('101.28mm', '5.27mm', '27.09mm', '5.69mm', '备 注 Remarks:')
LODOP.ADD_PRINT_LINE(114, 11, 114, 360, 0, 0)
LODOP.ADD_PRINT_LINE(136, 11, 136, 360, 0, 0)
LODOP.ADD_PRINT_LINE(171, 11, 171, 360, 0, 0)
LODOP.ADD_PRINT_LINE(209, 11, 209, 360, 0, 0)
LODOP.ADD_PRINT_LINE(231, 11, 231, 360, 0, 0)
LODOP.ADD_PRINT_LINE(254, 11, 254, 360, 0, 0)
LODOP.ADD_PRINT_LINE(291, 11, 291, 360, 0, 0)
LODOP.ADD_PRINT_LINE(320, 11, 320, 360, 0, 0)
LODOP.ADD_PRINT_LINE(378, 11, 378, 360, 0, 0)
LODOP.ADD_PRINT_LINE(401, 11, 401, 360, 0, 0)
LODOP.ADD_PRINT_LINE(320, 96, 254, 96, 0, 1)
LODOP.ADD_PRINT_LINE(320, 182, 254, 182, 0, 1)
LODOP.ADD_PRINT_LINE(320, 265, 254, 265, 0, 1)
LODOP.ADD_PRINT_BARCODE('107.13mm', '22.99mm', '57.1mm', '10.74mm', '128A', row.bag_code + '')
LODOP.PRINT()// 打印
// LODOP.PREVIEW()// 预览
// LODOP.PRINT_DESIGN()
uni.showToast({
title: '操作成功',
icon: 'none'
})
this.disabled1 = false
}
}
}
</script>
<style lang="stylus">
.input-container {
background-color: #fff;
border-radius: 16rpx;
padding: 30rpx;
box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.05);
margin-bottom: 40rpx;
}
.input-wrapper {
position: relative;
display: flex;
align-items: center;
// border: 2rpx solid #e0e0e0;
border-radius: 12rpx;
overflow: hidden;
transition: border-color 0.3s;
}
.input-wrapper:focus-within {
border-color: #007AFF;
}
.input-field {
flex: 1;
height: 80rpx;
// padding: 0 24rpx;
font-size: 28rpx;
color: #333;
}
.placeholder {
color: #999;
font-size: 28rpx;
}
.picker {
width: 80rpx;
height: 80rpx;
display: flex;
align-items: center;
justify-content: center;
background-color: #f8f8f8;
border-left: 2rpx solid #e0e0e0;
}
.picker-trigger {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.picker-text {
font-size: 24rpx;
color: #666;
}
.custom-dialog-mask {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
display: flex;
align-items: center;
justify-content: center;
z-index: 999;
}
.custom-dialog {
width: 600rpx;
background: #fff;
border-radius: 16rpx;
overflow: hidden;
}
.dialog-title {
padding: 30rpx;
font-size: 32rpx;
text-align: center;
border-bottom: 1rpx solid #eee;
}
.dialog-body {
padding: 40rpx;
}
.dialog-input {
width: 100%;
height: 80rpx;
border: 1rpx solid #ddd;
border-radius: 8rpx;
padding: 0 20rpx;
text-align: center;
}
.dialog-footer {
display: flex;
border-top: 1rpx solid #eee;
}
.dialog-footer button {
flex: 1;
border-radius: 0;
margin: 0;
}
</style>