Browse Source

mr修改

master
shenzhouyu 1 month ago
parent
commit
e967e3b727
  1. 4
      src/api/mr/mr.js
  2. 5
      src/views/modules/mr-issue/index.vue
  3. 252
      src/views/modules/mr-issue/mrPickingDetail.vue

4
src/api/mr/mr.js

@ -22,4 +22,6 @@ export const scanMaterialLabelNotInStock = data => createAPI(`/pda/mr/scanMateri
export const getInventoryPart = data => createAPI(`/pda/mr/getInventoryPart`, 'post', data)
export const confirmMrUnIssue = data => createAPI(`/pda/mr/confirmMrUnIssue`, 'post', data)
export const confirmMrUnIssue = data => createAPI(`/pda/mr/confirmMrUnIssue`, 'post', data)
export const printLabelCommon = data => createAPI('/label/setting/printLabelCommon','post',data)

5
src/views/modules/mr-issue/index.vue

@ -38,13 +38,14 @@ export default {
to: "mrPicking",
disabled: false,
},
{
/* MR没有退料 */
/* {
icon: "records",
label: "MR退料",
iconClass: "qualified",
to: "mrPickingReturn",
disabled: false,
},
}, */
],
};
},

252
src/views/modules/mr-issue/mrPickingDetail.vue

@ -23,68 +23,74 @@
</div>
</div>
<!-- MR信息卡片 -->
<div class="work-order-list" v-if="mrInfo.orderNo">
<div class="material-card">
<div class="card-title">
<span class="title-label">MR号{{ mrInfo.orderNo }} &nbsp;&nbsp; 行号{{ mrInfo.lineNo }} &nbsp;&nbsp; lineItemNo:{{ mrInfo.lineItemNo }}</span>
</div>
<!-- 物料描述单独一行 -->
<div class="part-desc-row">
<span class="desc-text">{{ mrInfo.partNo }}</span>
</div>
<div class="part-desc-row">
<span class="desc-text">{{ mrInfo.partDesc }}</span>
</div>
<!-- 主体滚动区域 -->
<div class="scrollable-content">
<!-- MR信息卡片 -->
<div class="work-order-list" v-if="mrInfo.orderNo">
<div class="material-card">
<div class="card-title">
<span class="title-label">MR号{{ mrInfo.orderNo }} &nbsp;&nbsp; 行号{{ mrInfo.lineNo }} &nbsp;&nbsp;
lineItemNo:{{ mrInfo.lineItemNo }}</span>
</div>
<div class="card-details">
<div class="detail-item">
<div class="detail-label">已发数量</div>
<div class="detail-value">{{ mrInfo.qtyIssued }}</div>
<!-- 物料描述单独一行 -->
<div class="part-desc-row">
<span class="desc-text">{{ mrInfo.partNo }}</span>
</div>
<div class="detail-item">
<div class="detail-label">发料数量</div>
<div class="detail-value">{{ mrInfo.qtyDue || 0 }}</div>
<div class="part-desc-row">
<span class="desc-text">{{ mrInfo.partDesc }}</span>
</div>
<div class="detail-item">
<div class="detail-label">单位</div>
<div class="detail-value">{{ mrInfo.unitMeas }}</div>
<div class="card-details">
<div class="detail-item">
<div class="detail-label">已发数量</div>
<div class="detail-value">{{ mrInfo.qtyIssued }}</div>
</div>
<div class="detail-item">
<div class="detail-label">发料数量</div>
<div class="detail-value">{{ mrInfo.qtyDue || 0 }}</div>
</div>
<div class="detail-item">
<div class="detail-label">单位</div>
<div class="detail-value">{{ mrInfo.unitMeas }}</div>
</div>
</div>
</div>
</div>
</div>
<!-- 发料信息确认标题 -->
<div class="section-title">
<div class="title-left">
<i class="el-icon-circle-check"></i>
<span>发料信息确认</span>
</div>
</div>
<!-- 标签列表 -->
<div class="label-list">
<div class="list-header">
<div class="col-no">NO.</div>
<div class="col-label">标签条码</div>
<div class="col-batch">批次号</div>
<div class="col-qty">标签数量</div>
<!-- 发料信息确认标题 -->
<div class="section-title">
<div class="title-left">
<i class="el-icon-circle-check"></i>
<span>发料信息确认</span>
</div>
</div>
<div v-for="(label, index) in labelList" :key="label.id" class="list-item">
<div class="col-no">{{ labelList.length - index }}</div>
<div class="col-label">{{ label.labelCode }}</div>
<div class="col-batch">{{ label.batchNo }}</div>
<div class="col-qty" @click="openEditDialog(label, index)">
<span class="quantity-display">{{ label.quantity }}</span>
<i class="el-icon-edit edit-icon"></i>
<!-- 标签列表 -->
<div class="label-list">
<div class="list-header">
<div class="col-no">NO.</div>
<div class="col-label">标签条码</div>
<div class="col-batch">批次号</div>
<div class="col-qty">标签数量</div>
</div>
</div>
<!-- 空状态 -->
<div v-if="labelList.length === 0" class="empty-labels">
<p>暂无扫描标签</p>
<div class="list-body">
<div v-for="(label, index) in labelList" :key="label.id" class="list-item">
<div class="col-no">{{ index+1 }}</div>
<div class="col-label">{{ label.labelCode }}</div>
<div class="col-batch">{{ label.batchNo }}</div>
<div class="col-qty" @click="openEditDialog(label, index)">
<span class="quantity-display">{{ label.quantity }}</span>
<i class="el-icon-edit edit-icon"></i>
</div>
</div>
<!-- 空状态 -->
<div v-if="labelList.length === 0" class="empty-labels">
<p>暂无扫描标签</p>
</div>
</div>
</div>
</div>
@ -102,12 +108,12 @@
<!-- 底部操作按钮 -->
<div class="bottom-actions">
<button class="action-btn primary" @click="confirmIssue">
<el-button class="action-btn primary" @click="confirmIssue" :loading="issueloading">
确认发料
</button>
<button class="action-btn secondary" style="margin-left: 10px;" @click="cancelIssue">
</el-button>
<el-button class="action-btn secondary" style="margin-left: 10px;" @click="cancelIssue">
取消
</button>
</el-button>
</div>
<!-- 编辑标签弹框 -->
@ -121,40 +127,22 @@
<div class="modal-body">
<div class="form-group">
<label class="form-label">物料标签</label>
<el-input
v-model="editForm.labelCode"
disabled
class="form-input"
/>
<el-input v-model="editForm.labelCode" disabled class="form-input" />
</div>
<div class="form-group">
<label class="form-label">批次号</label>
<el-input
v-model="editForm.batchNo"
disabled
class="form-input"
/>
<el-input v-model="editForm.batchNo" disabled class="form-input" />
</div>
<div class="form-group">
<label class="form-label">库位 <span class="required">*</span></label>
<el-input
v-model="editForm.locationId"
placeholder="请输入库位"
class="form-input"
/>
<el-input v-model="editForm.locationId" placeholder="请输入库位" class="form-input" />
</div>
<div class="form-group">
<label class="form-label">发料数量 <span class="required">*</span></label>
<el-input
v-model="editForm.quantity"
type="number"
:min="0"
placeholder="请输入发料数量"
class="form-input"
/>
<el-input v-model="editForm.quantity" type="number" :min="0" placeholder="请输入发料数量" class="form-input" />
</div>
</div>
@ -168,7 +156,12 @@
</template>
<script>
import { scanMaterialLabel, confirmMrIssue } from '@/api/mr/mr'
import {
scanMaterialLabel,
confirmMrIssue,
printLabelCommon,
} from '@/api/mr/mr'
import { Loading } from 'element-ui'
import moment from 'moment'
export default {
@ -188,9 +181,10 @@ export default {
labelCode: '',
batchNo: '',
locationId: '',
quantity: 0
quantity: 0,
},
editIndex: -1, //
issueloading: false,
}
},
computed: {
@ -325,36 +319,67 @@ export default {
engChgLevel: label.engChgLevel || '1',
})),
}
this.$confirm(
`确认发料 ${this.totalIssueQty} ${this.mrInfo.unitMeas || 'pcs'}`,
'确认发料',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
)
.then(() => {
confirmMrIssue(params)
.then(({ data }) => {
if (data && data.code === 0) {
this.$message.success('发料成功')
sessionStorage.setItem('mrPicking_shouldRestore', 'true')
this.$router.back()
this.issueloading = true
confirmMrIssue(params)
.then(({ data }) => {
if (data && data.code === 0) {
if (data.unitIds && data.unitIds.length > 0) {
let printLabelType
if (this.mrInfo.partNo && this.mrInfo.partNo.startsWith('80')) {
printLabelType = '库存成品标签'
} else {
this.$message.error(data.msg || '发料失败')
printLabelType = 'BIL标签'
}
})
.catch((error) => {
console.error('发料确认失败:', error)
this.$message.error('发料失败')
})
this.printViaServer(data.unitIds, printLabelType)
}
this.$message.success('发料成功')
sessionStorage.setItem('mrPicking_shouldRestore', 'true')
this.$router.back()
} else {
this.$message.error(data.msg || '发料失败')
}
})
.catch(() => {
//
.catch((error) => {
console.error('发料确认失败:', error)
this.$message.error('发料失败')
})
.finally(() => {
this.issueloading = false
})
},
async printViaServer(unitIds, printLabelType) {
if (!unitIds || unitIds.length === 0) {
console.warn('没有可打印的标签')
return
}
this.printLoading = true
try {
const printRequest = {
userId: localStorage.getItem('userName'),
username: localStorage.getItem('userName'),
site: localStorage.getItem('site'),
unitIds: unitIds,
labelType: printLabelType,
}
console.log('打印请求:', printRequest)
const { data } = await printLabelCommon(printRequest)
if (data.code === 200 || data.code === 0) {
this.$message.success(`打印任务已发送!`)
this.clearData()
} else {
this.$message.error(data.msg || '打印失败')
}
} catch (error) {
console.error('服务器打印失败:', error)
this.$message.error(`打印失败: ${error.message || error}`)
} finally {
this.printLoading = false
}
},
//
cancelIssue() {
@ -401,7 +426,7 @@ export default {
labelCode: label.labelCode,
batchNo: label.batchNo,
locationId: label.locationId || '',
quantity: label.quantity || label.availableQty
quantity: label.quantity || label.availableQty,
}
this.editIndex = index
this.showEditDialog = true
@ -414,7 +439,7 @@ export default {
labelCode: '',
batchNo: '',
locationId: '',
quantity: 0
quantity: 0,
}
this.editIndex = -1
},
@ -601,9 +626,13 @@ export default {
/* 内容区域 */
.content-area {
padding: 12px 16px;
}
.scrollable-content {
flex: 1;
overflow-y: auto;
padding: 12px 16px;
min-height: 0;
}
/* 材料卡片 */
@ -747,6 +776,8 @@ export default {
margin: 0 16px 12px;
border-radius: 0 0 8px 8px;
overflow: hidden;
display: flex;
flex-direction: column;
}
.list-header {
@ -757,6 +788,12 @@ export default {
font-size: 12px;
color: #666;
font-weight: 500;
flex-shrink: 0;
}
.list-body {
flex: 1;
min-height: 0;
}
.list-item {
@ -841,7 +878,6 @@ export default {
/* 工单列表 */
.work-order-list {
overflow-y: auto;
padding: 12px 16px;
}
.work-order-list {

Loading…
Cancel
Save