区分扫码枪和手动录入

This commit is contained in:
砂糖
2025-07-24 10:08:09 +08:00
parent b73c4223c7
commit 1cd943473f
5 changed files with 126 additions and 90 deletions

View File

@@ -13,7 +13,10 @@ export default {
components: { ThemePicker },
created() {
// 应用启动时全局初始化分类数据
this.$store.dispatch('category/getCategoryList');
if (this.$store.getters.token) {
this.$store.dispatch('category/getCategoryList');
}
console.log(this.$store)
},
metaInfo() {
return {

View File

@@ -141,6 +141,7 @@ export default {
Cookies.remove('rememberMe');
}
this.$store.dispatch("Login", this.loginForm).then(() => {
this.$store.dispatch('category/getCategoryList');
this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
}).catch(() => {
this.loading = false;

View File

@@ -443,7 +443,7 @@ export default {
const res = await listStockIoDetail({ stockIoId: row.stockIoId });
const details = res.data || res.rows || [];
// 拼接条码内容 stockIoId_warehouseId_materialId_quantity
const barcodes = details.map(item => {
const barcodes = details.filter(el => el.recordType == 0).map(item => {
return encodeURIComponent(`${row.stockIoId}_${item.warehouseId || ''}_${item.itemId || ''}_${item.quantity || ''}`);
});
this.drawerBarcodeData = {

View File

@@ -39,7 +39,11 @@
<el-form v-else label-width="80px" size="small" label-position="top">
<el-form-item label="条码明细">
<el-table :data="barcodeConfigs" size="mini" border style="width:100%;">
<el-table-column label="条码内容" prop="code" width="90" align="center" show-overflow-tooltip />
<el-table-column label="条码内容" prop="code" width="90" align="center" show-overflow-tooltip>
<template slot-scope="scope">
<el-input type="textarea" v-model="scope.row.code" size="mini" :autosize="{ minRows: 1, maxRows: 3 }" placeholder="请输入条码内容" />
</template>
</el-table-column>
<el-table-column label="数量" width="180" align="center">
<template slot-scope="scope">
<el-input-number v-model.number="scope.row.count" :min="1" :max="100" size="mini" />

View File

@@ -22,92 +22,107 @@
</el-descriptions>
<br />
<!-- 明细表格 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
:disabled="stockIo.status >= 2"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single || stockIo.status >= 2"
@click="handleUpdate"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple || stockIo.status >= 2"
@click="handleDelete"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="stockIoDetailList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="库区/库位" align="center" prop="warehouseName" />
<el-table-column
v-if="stockIo.ioType === 'transfer'"
label="源库区/库位"
align="center"
prop="fromWarehouseName"
/>
<el-table-column label="物品类型" align="center" prop="itemType">
<template slot-scope="scope">
<dict-tag :options="dict.type.stock_item_type" :value="scope.row.itemType" />
</template>
</el-table-column>
<el-table-column label="物品ID" align="center" prop="itemId" />
<el-table-column label="数量" align="center" prop="quantity" />
<el-table-column label="单位" align="center" prop="unit" />
<el-table-column label="批次号" align="center" prop="batchNo" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
:disabled="stockIo.status >= 2"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
:disabled="stockIo.status >= 2"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<el-tabs v-model="activeTab" style="margin-bottom: 10px;">
<el-tab-pane label="手动录入" name="manual">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
:disabled="stockIo.status >= 2"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single || stockIo.status >= 2"
@click="handleUpdate"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple || stockIo.status >= 2"
@click="handleDelete"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="manualList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="库区/库位" align="center" prop="warehouseName" />
<el-table-column
v-if="stockIo.ioType === 'transfer'"
label="源库区/库位"
align="center"
prop="fromWarehouseName"
/>
<el-table-column label="物品类型" align="center" prop="itemType">
<template slot-scope="scope">
<dict-tag :options="dict.type.stock_item_type" :value="scope.row.itemType" />
</template>
</el-table-column>
<el-table-column label="物品ID" align="center" prop="itemId" />
<el-table-column label="数量" align="center" prop="quantity" />
<el-table-column label="单位" align="center" prop="unit" />
<el-table-column label="批次号" align="center" prop="batchNo" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
:disabled="stockIo.status >= 2"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
:disabled="stockIo.status >= 2"
>删除</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="扫码枪" name="scanner">
<el-table :data="scannerList" :show-header="true" :border="true" style="width: 100%;" :default-sort="{}" :highlight-current-row="true">
<el-table-column type="index" width="55" align="center" label="#" />
<el-table-column label="库区/库位" align="center" prop="warehouseName" />
<el-table-column v-if="stockIo.ioType === 'transfer'" label="源库区/库位" align="center" prop="fromWarehouseName" />
<el-table-column label="物品类型" align="center" prop="itemType">
<template slot-scope="scope">
<dict-tag :options="dict.type.stock_item_type" :value="scope.row.itemType" />
</template>
</el-table-column>
<el-table-column label="物品ID" align="center" prop="itemId" />
<el-table-column label="数量" align="center" prop="quantity" />
<el-table-column label="单位" align="center" prop="unit" />
<el-table-column label="批次号" align="center" prop="batchNo" />
<el-table-column label="备注" align="center" prop="remark" />
</el-table>
</el-tab-pane>
</el-tabs>
<pagination
v-show="total>0"
:total="total"
@@ -267,7 +282,8 @@ export default {
multiple: true,
statusLoading: false, // 新增状态修改按钮加载状态
cancelLoading: false, // 撤回按钮加载状态
unitDisabled: false // 新增:单位输入框是否禁用
unitDisabled: false, // 新增:单位输入框是否禁用
activeTab: 'manual' // 新增:当前激活的标签页
};
},
watch: {
@@ -281,6 +297,16 @@ export default {
immediate: true
}
},
computed: {
// 手动录入的列表,使用recordType区分为0
manualList() {
return this.stockIoDetailList.filter(item => item.recordType === 0);
},
// 来自扫码枪的列表为1
scannerList() {
return this.stockIoDetailList.filter(item => item.recordType === 1);
}
},
mounted() {
if (this.stockIo && this.stockIo.stockIoId) {
this.queryParams.stockIoId = this.stockIo.stockIoId;
@@ -334,6 +360,7 @@ export default {
handleAdd() {
this.reset();
this.form.stockIoId = this.stockIo.stockIoId;
this.form.recordType = 0; // 新增时设为手动录入
this.open = true;
this.title = "添加出入库单明细";
},
@@ -344,6 +371,7 @@ export default {
getStockIoDetail(detailId).then(response => {
this.loading = false;
this.form = response.data;
this.form.recordType = 0; // 修改时强制设为手动录入
this.open = true;
this.title = "修改出入库单明细";
});