Browse Source

销售退货

master
han\hanst 3 months ago
parent
commit
ec01c31aac
  1. 2
      src/api/production/production-inbound.js
  2. 17
      src/api/sales-return/sales-return.js
  3. 6
      src/views/main.vue
  4. 36
      src/views/modules/production-inbound/inboundRegister.vue
  5. 4
      src/views/modules/recv/recv.vue
  6. 4
      src/views/modules/sales-return/index.vue
  7. 1107
      src/views/modules/sales-return/sales-return-inbound.vue

2
src/api/production/production-inbound.js

@ -41,4 +41,4 @@ export const submitShopOrderInbound = data => createAPI(`/production/inbound/sub
// 验证物料是否已发料 // 验证物料是否已发料
export const validateMaterialIssued = data => createAPI(`/production/inbound/validateMaterialIssued`,'post',data) export const validateMaterialIssued = data => createAPI(`/production/inbound/validateMaterialIssued`,'post',data)
// 打印标签 // 打印标签
export const printLabel = data => createAPI('/label/setting/printLabel','post',data)
export const printLabelCommon = data => createAPI('/label/setting/printLabelCommon','post',data)

17
src/api/sales-return/sales-return.js

@ -1,9 +1,18 @@
import { createAPI } from "@/utils/httpRequest.js"; import { createAPI } from "@/utils/httpRequest.js";
/**
* 销售退货API接口
*/
// 获取采购单信息
export const processReturn = data => createAPI(`salesreturn/processReturn`,'post',data)
// 从IFS获取RMA列表
export const getRmaList = data => createAPI(`salesreturn/getRmaList`, 'post', data)
// 接收采购单信息
export const getRmaList = data => createAPI(`salesreturn/getRmaList`,'post',data)
// 处理销售退货(本地库存操作)
export const processReturn = data => createAPI(`salesreturn/processReturn`, 'post', data)
// 销售退货入库(调用IFS API)
export const processRmaInbound = data => createAPI(`salesreturn/processRmaInbound`, 'post', data)
// 打印标签(通用打印接口)
export const printLabelCommon = data => createAPI('/label/setting/printLabelCommon', 'post', data)

6
src/views/main.vue

@ -58,7 +58,7 @@
</div> </div>
<div class="menu-text">生产退料</div> <div class="menu-text">生产退料</div>
</div> </div>
<div class="menu-item disabled" @click="handleDisabledFeature('salereturn')">
<div class="menu-item" @click="navigateWithWarehouseCheck('salereturn')">
<div class="menu-icon sales-return"> <div class="menu-icon sales-return">
<van-icon name="revoke" size="24" /> <van-icon name="revoke" size="24" />
</div> </div>
@ -680,8 +680,8 @@ export default {
} }
.menu-icon { .menu-icon {
width: 40px;
height: 40px;
width: 38px;
height: 38px;
border-radius: 50%; border-radius: 50%;
display: flex; display: flex;
align-items: center; align-items: center;

36
src/views/modules/production-inbound/inboundRegister.vue

@ -14,10 +14,6 @@
<div v-if="processFlag === 1"> <div v-if="processFlag === 1">
<div class="scan-box" style="margin: 2px;"> <div class="scan-box" style="margin: 2px;">
<el-input clearable v-model="scanCode" placeholder="扫描或输入工单号" <el-input clearable v-model="scanCode" placeholder="扫描或输入工单号"
inputmode="none"
autocomplete="off"
autocorrect="off"
spellcheck="false"
@keyup.enter.native="searchShopOrder" ref="scanCodeRef" /> @keyup.enter.native="searchShopOrder" ref="scanCodeRef" />
</div> </div>
<div class="item-list" v-if="shopOrderList.length > 0" style="margin: 2px;"> <div class="item-list" v-if="shopOrderList.length > 0" style="margin: 2px;">
@ -182,7 +178,7 @@
</template> </template>
<script> <script>
import { getShopOrderFromIfs, getNextSequenceNo, submitShopOrderInbound, validateMaterialIssued, printLabel } from "@/api/production/production-inbound.js";
import { getShopOrderFromIfs, getNextSequenceNo, submitShopOrderInbound, validateMaterialIssued, printLabelCommon } from "@/api/production/production-inbound.js";
export default { export default {
data() { data() {
@ -352,7 +348,7 @@ export default {
unCompleteQty: parseFloat(row.lotSize) - parseFloat(row.qtyComplete), unCompleteQty: parseFloat(row.lotSize) - parseFloat(row.qtyComplete),
sequenceNoNew: nextSequence, sequenceNoNew: nextSequence,
batchNo: `${row.orderNo}-${row.releaseNo}-${row.sequenceNo}-${nextSequence}`, batchNo: `${row.orderNo}-${row.releaseNo}-${row.sequenceNo}-${nextSequence}`,
locationNo: '',
locationNo: 'AS',
serialNo: '*', serialNo: '*',
wdr: '*', wdr: '*',
engChgLevel: '1', engChgLevel: '1',
@ -543,7 +539,13 @@ export default {
if (data.code === 0) { if (data.code === 0) {
this.$message.success("入库成功"); this.$message.success("入库成功");
this.clearAllHandlingUnitCache(); this.clearAllHandlingUnitCache();
this.printViaServer(data.data);
// unitIds
const unitIds = data.unitIds || [];
if (unitIds.length > 0) {
this.printViaServer(unitIds);
}
this.processFlag = 1; this.processFlag = 1;
this.scanCode = ''; this.scanCode = '';
this.shopOrderList = []; this.shopOrderList = [];
@ -561,20 +563,30 @@ export default {
}, },
/** /**
* 通过服务器打印 * 通过服务器打印
* @param {Array} unitIds - HU unitId列表
*/ */
async printViaServer(transNo) {
async printViaServer(unitIds) {
if (!unitIds || unitIds.length === 0) {
console.warn('没有可打印的标签');
return;
}
this.$emit('print-start') this.$emit('print-start')
try { try {
const printRequest = { const printRequest = {
userId: localStorage.getItem('userName'), userId: localStorage.getItem('userName'),
username: localStorage.getItem('userName'), username: localStorage.getItem('userName'),
site: localStorage.getItem('site'), site: localStorage.getItem('site'),
transNo: transNo,
unitIds: unitIds,
labelType: "库存成品标签" labelType: "库存成品标签"
} }
const { data } = await printLabel(printRequest)
if (data.code === 200) {
this.$message.success(`打印任务已发送!`)
console.log('打印请求:', printRequest);
const { data } = await printLabelCommon(printRequest)
if (data.code === 200 || data.code === 0) {
this.$message.success(`打印任务已发送!共${unitIds.length}个标签`)
} else {
this.$message.error(data.msg || '打印失败')
} }
} catch (error) { } catch (error) {
console.error('服务器打印失败:', error) console.error('服务器打印失败:', error)

4
src/views/modules/recv/recv.vue

@ -14,10 +14,6 @@
<div v-if="processFlag === 1"> <div v-if="processFlag === 1">
<div class="scan-box" style="margin: 2px;"> <div class="scan-box" style="margin: 2px;">
<el-input clearable v-model="scanCode" placeholder="扫描PO条码或输入PO号" <el-input clearable v-model="scanCode" placeholder="扫描PO条码或输入PO号"
inputmode="none"
autocomplete="off"
autocorrect="off"
spellcheck="false"
@keyup.enter.native="searchPoList" ref="scanCodeRef" /> @keyup.enter.native="searchPoList" ref="scanCodeRef" />
</div> </div>
<div class="item-list" v-if="poList.length > 0" style="margin: 2px;"> <div class="item-list" v-if="poList.length > 0" style="margin: 2px;">

4
src/views/modules/sales-return/index.vue

@ -29,8 +29,8 @@ export default {
data() { data() {
return { return {
buttons: [ buttons: [
{ icon: 'shopping-cart-o', label: '入库', iconClass: 'purchase', to: 'salereturn-inbound' },
{ icon: 'orders-o', label: '报废', iconClass: 'inspection', to: 'salereturn-scrap' }
{ icon: 'shopping-cart-o', label: '退货入库', iconClass: 'purchase', to: 'salereturn-inbound' },
{ icon: 'orders-o', label: '报废', iconClass: 'scrap', to: 'salereturn-scrap' }
] ]
} }
} }

1107
src/views/modules/sales-return/sales-return-inbound.vue
File diff suppressed because it is too large
View File

Loading…
Cancel
Save