Merge remote-tracking branch 'origin/0.8.X' into 0.8.X

This commit is contained in:
2025-07-21 13:25:58 +08:00
5 changed files with 67 additions and 12 deletions

View File

@@ -4,6 +4,7 @@
:placeholder="placeholder" :placeholder="placeholder"
:disabled="disabled" :disabled="disabled"
filterable filterable
clearable
@change="onChange" @change="onChange"
style="width: 100%" style="width: 100%"
:value-key="'productId'" :value-key="'productId'"

View File

@@ -4,6 +4,9 @@
:placeholder="placeholder" :placeholder="placeholder"
filterable filterable
clearable clearable
remote
:remote-method="debouncedRemoteMethod"
:loading="loading"
@change="onChange" @change="onChange"
style="width: 100%" style="width: 100%"
:value-key="'rawMaterialId'" :value-key="'rawMaterialId'"
@@ -25,6 +28,16 @@
<script> <script>
import { listRawMaterial } from "@/api/wms/rawMaterial"; import { listRawMaterial } from "@/api/wms/rawMaterial";
function debounce(fn, delay) {
let timer = null;
return function (...args) {
if (timer) clearTimeout(timer);
timer = setTimeout(() => {
fn.apply(this, args);
}, delay);
};
}
export default { export default {
name: "RawMaterialSelect", name: "RawMaterialSelect",
props: { props: {
@@ -37,7 +50,8 @@ export default {
data() { data() {
return { return {
options: [], options: [],
selected: this.value selected: this.value,
loading: false
}; };
}, },
watch: { watch: {
@@ -50,14 +64,24 @@ export default {
} }
}, },
mounted() { mounted() {
this.fetchOptions(); this.fetchOptions("");
}, },
methods: { methods: {
fetchOptions() { fetchOptions(keyword) {
listRawMaterial({ pageNum: 1, pageSize: 1000 }).then(res => { this.loading = true;
listRawMaterial({ pageNum: 1, pageSize: 10, rawMaterialName: keyword }).then(res => {
this.options = res.rows || []; this.options = res.rows || [];
this.loading = false;
}).catch(() => {
this.loading = false;
}); });
}, },
remoteMethod(keyword) {
this.fetchOptions(keyword);
},
debouncedRemoteMethod: debounce(function(keyword) {
this.remoteMethod(keyword);
}, 400),
onChange(val) { onChange(val) {
this.$emit("input", val); this.$emit("input", val);
this.$emit("change", val); this.$emit("change", val);

View File

@@ -22,3 +22,9 @@ export const EPurchaseDetailStatus = {
REVIEW: 3, REVIEW: 3,
FINISH: 4 FINISH: 4
} }
// 物品类型枚举
export const ITEM_TYPE = {
RAW_MATERIAL: 'raw_material', // 原材料
PRODUCT: 'product' // 产品
};

View File

@@ -43,9 +43,13 @@
<el-table v-loading="loading" :data="orderDetailList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="orderDetailList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="明细ID" align="center" prop="detailId" v-if="false"/> <!-- <el-table-column label="明细ID" align="center" prop="detailId" v-if="false"/>
<el-table-column label="订单ID" align="center" prop="orderId" /> <el-table-column label="订单ID" align="center" prop="orderId" /> -->
<el-table-column label="产品ID" align="center" prop="productId" /> <el-table-column label="原材料" align="center">
<template slot-scope="scope">
{{ scope.row.productName }}<span v-if="scope.row.productCode">({{ scope.row.productCode }})</span>
</template>
</el-table-column>
<el-table-column label="产品数量" align="center" prop="quantity" /> <el-table-column label="产品数量" align="center" prop="quantity" />
<el-table-column label="单位" align="center" prop="unit" /> <el-table-column label="单位" align="center" prop="unit" />
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />

View File

@@ -156,12 +156,26 @@
</el-form-item> </el-form-item>
<el-form-item label="物品类型" prop="itemType"> <el-form-item label="物品类型" prop="itemType">
<el-select v-model="form.itemType" placeholder="请选择物品类型" style="width: 100%"> <el-select v-model="form.itemType" placeholder="请选择物品类型" style="width: 100%">
<el-option label="原材料" value="raw_material"></el-option> <el-option label="原材料" :value="ITEM_TYPE.RAW_MATERIAL"></el-option>
<el-option label="产品" value="product"></el-option> <el-option label="产品" :value="ITEM_TYPE.PRODUCT"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="物品ID" prop="itemId"> <el-form-item label="物品ID" prop="itemId">
<el-input v-model="form.itemId" placeholder="请输入物品ID" /> <RawMaterialSelect
v-if="form.itemType === ITEM_TYPE.RAW_MATERIAL"
v-model="form.itemId"
placeholder="请选择原材料"
/>
<ProductSelect
v-else-if="form.itemType === ITEM_TYPE.PRODUCT"
v-model="form.itemId"
placeholder="请选择产品"
/>
<el-input
v-else
v-model="form.itemId"
placeholder="请输入物品ID"
/>
</el-form-item> </el-form-item>
<el-form-item label="数量" prop="quantity"> <el-form-item label="数量" prop="quantity">
<el-input v-model="form.quantity" placeholder="请输入数量" /> <el-input v-model="form.quantity" placeholder="请输入数量" />
@@ -192,11 +206,16 @@
import { listStockIoDetail, getStockIoDetail, delStockIoDetail, addStockIoDetail, updateStockIoDetail } from "@/api/wms/stockIoDetail"; import { listStockIoDetail, getStockIoDetail, delStockIoDetail, addStockIoDetail, updateStockIoDetail } from "@/api/wms/stockIoDetail";
import { auditStockIo, updateStockIoStatus, cancelStockIo, getStockIo } from "@/api/wms/stockIo"; import { auditStockIo, updateStockIoStatus, cancelStockIo, getStockIo } from "@/api/wms/stockIo";
import WarehouseSelect from '@/components/WarehouseSelect'; import WarehouseSelect from '@/components/WarehouseSelect';
import RawMaterialSelect from '@/components/KLPService/RawMaterialSelect';
import ProductSelect from '@/components/KLPService/ProductSelect';
import { ITEM_TYPE } from '@/utils/enums';
export default { export default {
name: "StockIoDetailPanel", name: "StockIoDetailPanel",
components: { components: {
WarehouseSelect WarehouseSelect,
RawMaterialSelect,
ProductSelect
}, },
props: { props: {
stockIo: { stockIo: {
@@ -206,6 +225,7 @@ export default {
}, },
data() { data() {
return { return {
ITEM_TYPE,
loading: true, loading: true,
stockIoDetailList: [], stockIoDetailList: [],
total: 0, total: 0,