feat: 完成成品出货单。

This commit is contained in:
c
2026-03-11 16:52:36 +08:00
parent d9d0f272b0
commit d22857b890
3 changed files with 247 additions and 142 deletions

View File

@@ -58,6 +58,12 @@ export default {
sysrecord: "Record", sysrecord: "Record",
sysrole: "Role", sysrole: "Role",
}, },
_enum: {
outStockType: {
material: "Material",
finishedProduct: "Finished Product",
},
},
_prop: { _prop: {
common: { common: {
tel: "Tel", tel: "Tel",
@@ -240,6 +246,15 @@ export default {
formName: "Form Name", formName: "Form Name",
formMark: "Mark", formMark: "Mark",
storeName: "Store", storeName: "Store",
storeId: "Store",
storeNo: "Store No",
formStatus: "Status",
outStockType: "Out Stock Type",
partNumber: "Part Number",
productSpecs: "Product Specs",
productCount: "Count",
productMark: "Remark",
createDate: "Create Date",
}, },
}, },
sale: { sale: {
@@ -508,6 +523,28 @@ export default {
delete_message: "Delete Order", delete_message: "Delete Order",
}, },
finishedproductshipment: { finishedproductshipment: {
select_storeId: "Please select store",
select_outStockType: "Please select out stock type",
input_formName: "Please enter form name",
input_formMark: "Please enter form mark",
input_formCode: "Please enter form code",
input_partNumber: "Please enter part number",
input_productCount: "Please enter count",
input_productMark: "Please enter remark",
approve_confirm: "Confirm to approve?",
approve_success: "Approve success",
approve_fail: "Approve failed",
reject_confirm: "Confirm to reject?",
reject_success: "Reject success",
reject_fail: "Reject failed",
already_approved: "Already approved",
not_approved: "Not approved",
no_shipment_items: "No shipment items",
duplicate_part_number_in_request: "Duplicate part number in request",
part_number_not_found: "Part number not found",
insufficient_stock: "Insufficient stock",
import_success: "Import success",
import_fail: "Import failed",
delete_message: "Delete Shipment", delete_message: "Delete Shipment",
}, },
}, },
@@ -602,6 +639,9 @@ export default {
finishedproductshipment: { finishedproductshipment: {
add: "Add Shipment", add: "Add Shipment",
edit: "Edit Shipment", edit: "Edit Shipment",
showItem: "Shipment Details",
baseTitle: "Shipment Basic Info",
tableTitle: "Shipment Details",
}, },
}, },
purchase: { purchase: {

View File

@@ -58,6 +58,12 @@ export default {
sysrecord: "日志列表", sysrecord: "日志列表",
sysrole: "角色管理", sysrole: "角色管理",
}, },
_enum: {
outStockType: {
material: "物料",
finishedProduct: "成品",
},
},
_prop: { _prop: {
common: { common: {
tel: "电话", tel: "电话",
@@ -197,6 +203,21 @@ export default {
storeName: "仓库", storeName: "仓库",
returnQty: "退料数量", returnQty: "退料数量",
}, },
finishedproductshipment: {
formCode: "单据编号",
formName: "单据名称",
formMark: "单据备注",
storeName: "仓库",
storeId: "仓库",
storeNo: "仓库编号",
formStatus: "单据状态",
outStockType: "出库类型",
partNumber: "物料编号",
productSpecs: "物料型号",
productCount: "数量",
productMark: "备注",
createDate: "创建时间",
},
finishedproductreceipt: { finishedproductreceipt: {
totalValue: "入库数量", totalValue: "入库数量",
formCode: "单据编号", formCode: "单据编号",
@@ -279,17 +300,13 @@ export default {
formMark: "单据备注", formMark: "单据备注",
storeName: "仓库", storeName: "仓库",
storeId: "仓库", storeId: "仓库",
storeNo: "仓库编号",
formStatus: "单据状态", formStatus: "单据状态",
productType: "型", outStockType: "出库类型",
productSn: "SN号", partNumber: "物料编号",
mac: "MAC地址", productSpecs: "物料型号",
serialNum: "序列号", productCount: "数量",
softVersion: "软件版本", productMark: "备注",
alVersion: "算法版本",
alNum: "算法标志",
alTxt: "激活状态",
manufacturingDate: "时间",
mark: "备注",
createDate: "创建时间", createDate: "创建时间",
}, },
}, },
@@ -636,19 +653,13 @@ export default {
}, },
finishedproductshipment: { finishedproductshipment: {
select_storeId: "请选择仓库", select_storeId: "请选择仓库",
select_outStockType: "请选择出库类型",
input_formName: "请输入单据名称", input_formName: "请输入单据名称",
input_formMark: "请输入单据备注", input_formMark: "请输入单据备注",
input_formCode: "请输入单据编号", input_formCode: "请输入单据编号",
input_productType: "请输入号", input_partNumber: "请输入物料编号",
input_productSn: "请输入SN号", input_productCount: "请输入数量",
input_mac: "请输入MAC地址", input_productMark: "请输入备注",
input_serialNum: "请输入序列号",
input_softVersion: "请输入软件版本",
input_alVersion: "请输入算法版本",
input_alNum: "请输入算法标志",
input_alTxt: "请输入激活状态",
input_manufacturingDate: "请输入时间",
input_mark: "请输入备注",
approve_confirm: "是否审核通过", approve_confirm: "是否审核通过",
approve_success: "审核成功", approve_success: "审核成功",
approve_fail: "审核失败", approve_fail: "审核失败",
@@ -657,10 +668,10 @@ export default {
reject_fail: "反审失败", reject_fail: "反审失败",
already_approved: "成品出库单已经审核", already_approved: "成品出库单已经审核",
not_approved: "成品出库单不是已审核状态,不能反审", not_approved: "成品出库单不是已审核状态,不能反审",
no_module_sn_items: "成品出库单没有明细", no_shipment_items: "成品出库单没有明细",
duplicate_sn_in_request: "导入数据中存在重复SN号", duplicate_part_number_in_request: "导入数据中存在重复物料编号",
sn_not_found: "系统中不存在的SN号", part_number_not_found: "系统中不存在的物料编号",
sn_already_shipped: "已经出货的SN号", insufficient_stock: "库存不足",
import_success: "导入成功", import_success: "导入成功",
import_fail: "导入失败", import_fail: "导入失败",
delete_message: "删除成品出货单", delete_message: "删除成品出货单",

View File

@@ -1,18 +1,20 @@
<script lang="ts" setup> <script lang="ts" setup>
import BasePageableTable from "@/components/base/base-pageable-table/BasePageableTable.vue";
import DefaultToolButton from "@/components/base/default-tool-button/DefaultToolButton.vue"; import DefaultToolButton from "@/components/base/default-tool-button/DefaultToolButton.vue";
import DefaultOperateButtonColumn from "@/components/base/default-column/DefaultOperateButtonColumn.vue"; import DefaultOperateButtonColumn from "@/components/base/default-column/DefaultOperateButtonColumn.vue";
import DefaultStatusSwitchColumn from "@/components/base/default-column/DefaultStatusSwitchColumn.vue"; import DefaultStatusSwitchColumn from "@/components/base/default-column/DefaultStatusSwitchColumn.vue";
import { usePage } from "@/composables/use-page"; import { usePage } from "@/composables/use-page";
import BaseFormWithTable from "@/components/base/base-form-with-table/BaseFormWithTable.vue"; import BaseFormWithTable from "@/components/base/base-form-with-table/BaseFormWithTable.vue";
import BaseItemDialog from "@/components/base/base-item-dialog/BaseItemDialog.vue";
import { $t } from "@/common/languages"; import { $t } from "@/common/languages";
import { ElMessage, ElMessageBox, type FormInstance, type FormRules } from "element-plus"; import { ElMessage, ElMessageBox, type FormInstance, type FormRules } from "element-plus";
import { formatDate } from "@/common/utils/format-utils"; import { formatDate } from "@/common/utils/format-utils";
import BaseItemDialog from "@/components/base/base-item-dialog/BaseItemDialog.vue";
import BaseSelect from "@/components/base/base-select/BaseSelect.vue"; import BaseSelect from "@/components/base/base-select/BaseSelect.vue";
import { generateDucumentNo } from "@/common/utils/document-no-generator/document-no-generator"; import { generateDucumentNo } from "@/common/utils/document-no-generator/document-no-generator";
import { get, post } from "@/common/http/request"; import { get, post } from "@/common/http/request";
import { useStatus } from "@/common/languages/mapping/base-info-mapping"; import { useStatus } from "@/common/languages/mapping/base-info-mapping";
import ExpandablePageableTable from "@/components/base/expandable-pageable-table/ExpandablePageableTable.vue";
import { type FieldMappingConfig } from "@/components/base/base-form-with-table/type";
import { watch } from "vue";
/** /**
* 必须要的变量 * 必须要的变量
@@ -23,11 +25,10 @@ const addUrl = "/production/finishedproductshipment/addFinishedProductShipment";
const editUrl = "/production/finishedproductshipment/updateFinishedProductShipment"; const editUrl = "/production/finishedproductshipment/updateFinishedProductShipment";
const removeUrl = "/production/finishedproductshipment/deleteFinishedProductShipment"; const removeUrl = "/production/finishedproductshipment/deleteFinishedProductShipment";
const approveUrl = "/production/finishedproductshipment/approveFinishedProductShipment"; const approveUrl = "/production/finishedproductshipment/approveFinishedProductShipment";
const unapproveUrl = "/production/finishedproductshipment/unapproveFinishedProductShipment"; const rejectUrl = "/production/finishedproductshipment/rejectFinishedProductShipment";
const getDetailUrl = "/production/finishedproductshipment/getFinishedProductShipmentDetail"; const getDetailUrl = "/production/finishedproductshipment/getFinishedProductShipmentDetail";
const importItemsUrl = "/production/finishedproductshipment/importFinishedProductShipmentItems";
const getWarehouseSelectListUrl = "/warehouse/warehouse/getWarehouseSelectList"; const getWarehouseSelectListUrl = "/warehouse/warehouse/getWarehouseSelectList";
const itemArrayName = "deviceItems"; const itemArrayName = "shipmentItems";
const searchers = [ const searchers = [
{ name: "searchCode", type: "text" as const, placeholder: $t("_prop.production.finishedproductshipment.formCode") }, { name: "searchCode", type: "text" as const, placeholder: $t("_prop.production.finishedproductshipment.formCode") },
{ name: "formName", type: "text" as const, placeholder: $t("_prop.production.finishedproductshipment.formName") }, { name: "formName", type: "text" as const, placeholder: $t("_prop.production.finishedproductshipment.formName") },
@@ -42,12 +43,15 @@ const rules = reactive<FormRules>({
storeNo: [ storeNo: [
{ required: true, message: $t("_message.production.finishedproductshipment.select_storeId"), trigger: "blur" }, { required: true, message: $t("_message.production.finishedproductshipment.select_storeId"), trigger: "blur" },
], ],
deviceItems: [ outStockType: [
{ required: true, message: $t("_message.production.finishedproductshipment.select_outStockType"), trigger: "blur" },
],
shipmentItems: [
{ {
required: true, required: true,
validator: (rule, value, callback) => { validator: (rule, value, callback) => {
if (value === undefined || value.length === 0) { if (value === undefined || value.length === 0) {
callback($t("_message.production.finishedproductshipment.no_module_sn_items")); callback($t("_message.production.finishedproductshipment.no_shipment_items"));
} }
callback(); callback();
}, },
@@ -55,15 +59,55 @@ const rules = reactive<FormRules>({
}, },
], ],
}); });
const outStockTypeOptions = [
{ label: $t("_enum.outStockType.material"), value: 1 },
{ label: $t("_enum.outStockType.finishedProduct"), value: 2 },
];
const mappingConfig: FieldMappingConfig = {
partNumber: {
sourceKey: "物料编号",
defaultValue: "",
},
productCount: {
sourceKey: "数量",
defaultValue: 0,
transform: (val: any) => {
const num = Number(val);
return isNaN(num) ? 0 : num;
},
},
productMark: {
sourceKey: "备注",
defaultValue: "",
},
};
/** /**
* 基本不变通用变量 * 基本不变通用变量
*/ */
const tableRef = ref<InstanceType<typeof BasePageableTable> | null>(null); const tableRef = ref<InstanceType<typeof ExpandablePageableTable> | null>(null);
const { useAdd, useEdit, useRemove, useGeneralPageRef } = usePage(tableRef); const { useAdd, useEdit, useRemove, useGeneralPageRef } = usePage(tableRef);
const { title, visible, formType, form, itemVisible, itemParentId } = useGeneralPageRef(); const { title, visible, formType, form, itemVisible, itemParentId } = useGeneralPageRef();
const baseFormWithTableRef = ref<InstanceType<typeof BaseFormWithTable>>();
const warehouseSelectRef = ref<InstanceType<typeof BaseSelect>>(); const warehouseSelectRef = ref<InstanceType<typeof BaseSelect>>();
const { getFormStatusLabel } = useStatus(); const { getFormStatusLabel } = useStatus();
/**
* 根据 formType 获取出库类型标签
* formType = 4 (WAREHOUSE_ISSUE) -> 物料出库
* formType = 7 (FINISHED_PRODUCT_SHIPMENT) -> 成品出库
*/
const getOutStockTypeLabelByFormType = (formTypeValue: number) => {
if (formTypeValue === 4) {
return outStockTypeOptions.find(opt => opt.value === 1)?.label || "";
}
if (formTypeValue === 7) {
return outStockTypeOptions.find(opt => opt.value === 2)?.label || "";
}
return "";
};
/** /**
* 可以自定义的变量 * 可以自定义的变量
*/ */
@@ -71,19 +115,37 @@ const { getFormStatusLabel } = useStatus();
const add = () => { const add = () => {
form.value = {}; form.value = {};
title.value = "_title.production.finishedproductshipment.add"; title.value = "_title.production.finishedproductshipment.add";
form.value["formCode"] = generateDucumentNo("CPCK");
visible.value = true; visible.value = true;
formType.value = false; formType.value = false;
// 默认生成成品出库单号
form.value["formCode"] = generateDucumentNo("CPCK");
}; };
// 监听出库类型变化,动态生成单号
watch(
() => form.value?.outStockType,
newVal => {
if (newVal === 1) {
// 物料出库 - 使用 WarehouseIssue (4) 的单号前缀
form.value["formCode"] = generateDucumentNo("CK");
} else if (newVal === 2) {
// 成品出库 - 使用 FinishedProductShipment (7) 的单号前缀
form.value["formCode"] = generateDucumentNo("CPCK");
}
}
);
const edit = (row: any) => { const edit = (row: any) => {
title.value = "_title.production.finishedproductshipment.edit"; title.value = "_title.production.finishedproductshipment.edit";
form.value = { ...row }; form.value = { ...row };
visible.value = true; visible.value = true;
formType.value = true; formType.value = true;
}; };
const remove = (row: any) => { const remove = (row: any) => {
useRemove(removeUrl, row.id, "_message.production.finishedproductshipment.delete_message"); useRemove(removeUrl, row.id, "_message.production.finishedproductshipment.delete_message");
}; };
const approve = (row: any) => { const approve = (row: any) => {
ElMessageBox.confirm($t("_message.production.finishedproductshipment.approve_confirm"), $t("_level.warning"), { ElMessageBox.confirm($t("_message.production.finishedproductshipment.approve_confirm"), $t("_level.warning"), {
confirmButtonText: $t("_button.confirm"), confirmButtonText: $t("_button.confirm"),
@@ -99,14 +161,15 @@ const approve = (row: any) => {
} }
}); });
}; };
const unapprove = (row: any) => {
const reject = (row: any) => {
ElMessageBox.confirm($t("_message.production.finishedproductshipment.reject_confirm"), $t("_level.warning"), { ElMessageBox.confirm($t("_message.production.finishedproductshipment.reject_confirm"), $t("_level.warning"), {
confirmButtonText: $t("_button.confirm"), confirmButtonText: $t("_button.confirm"),
cancelButtonText: $t("_button.cancel"), cancelButtonText: $t("_button.cancel"),
type: "warning", type: "warning",
}).then(async () => { }).then(async () => {
try { try {
await post(unapproveUrl, { id: row.id }); await post(rejectUrl, { id: row.id });
ElMessage.success($t("_message.production.finishedproductshipment.reject_success")); ElMessage.success($t("_message.production.finishedproductshipment.reject_success"));
tableRef.value?.reload(); tableRef.value?.reload();
} catch (err: any) { } catch (err: any) {
@@ -114,10 +177,12 @@ const unapprove = (row: any) => {
} }
}); });
}; };
const showItem = (row: any) => { const showItem = (row: any) => {
itemParentId.value = row.id; itemParentId.value = row.id;
itemVisible.value = true; itemVisible.value = true;
}; };
const submit = (form: any, formRef: FormInstance | undefined) => { const submit = (form: any, formRef: FormInstance | undefined) => {
setName(); setName();
if (formRef !== undefined) { if (formRef !== undefined) {
@@ -129,6 +194,7 @@ const submit = (form: any, formRef: FormInstance | undefined) => {
}); });
} }
}; };
const topButtonClick = (eventName: string) => { const topButtonClick = (eventName: string) => {
switch (eventName) { switch (eventName) {
case "add": case "add":
@@ -136,6 +202,7 @@ const topButtonClick = (eventName: string) => {
break; break;
} }
}; };
const operateButtonClick = (eventName: string, row: any) => { const operateButtonClick = (eventName: string, row: any) => {
switch (eventName) { switch (eventName) {
case "edit": case "edit":
@@ -147,39 +214,78 @@ const operateButtonClick = (eventName: string, row: any) => {
case "approve": case "approve":
approve(row); approve(row);
break; break;
case "unapprove": case "reject":
unapprove(row); reject(row);
break; break;
case "showItem": case "showItem":
showItem(row); showItem(row);
break; break;
} }
}; };
const authShowFunc = (row: any, button: globalThis.ButtonProp) => {
// 已审核(formStatus=1)时不显示审核按钮,显示反审按钮
// 未审核(formStatus=0)时显示审核按钮,不显示反审按钮
if (row.formStatus === 0 && button.eventName === "reject") return false;
if (row.formStatus === 1 && button.eventName === "approve") return false;
// 已审核后不能编辑和删除
if (row.formStatus === 1 && (button.eventName === "edit" || button.eventName === "remove")) return false;
return true;
};
const setName = () => { const setName = () => {
form.value["storeName"] = warehouseSelectRef.value?.getLabel(); form.value["storeName"] = warehouseSelectRef.value?.getLabel();
}; };
const handleReset = () => { const handleReset = () => {
form.value["formCode"] = generateDucumentNo("CPCK"); form.value["formCode"] = generateDucumentNo("CPCK");
}; };
</script> </script>
<template> <template>
<BasePageableTable :url="getPageUrl" :searchers="searchers" ref="tableRef"> <ExpandablePageableTable
:url="getPageUrl"
:searchers="searchers"
ref="tableRef"
:item-url="getDetailUrl"
item-id-key="id"
item-id-name="id"
itemFieldName="shipmentItems"
>
<template #tool-button> <template #tool-button>
<DefaultToolButton @top-button-click="topButtonClick" /> <DefaultToolButton @top-button-click="topButtonClick" />
</template> </template>
<template #columns> <template #columns>
<el-table-column :label="$t('_prop.production.finishedproductshipment.formCode')" prop="formCode" /> <el-table-column :label="$t('_prop.production.finishedproductshipment.formCode')" prop="formCode" />
<el-table-column :label="$t('_prop.production.finishedproductshipment.formName')" prop="formName" />
<el-table-column :label="$t('_prop.production.finishedproductshipment.storeName')" prop="storeName" /> <el-table-column :label="$t('_prop.production.finishedproductshipment.storeName')" prop="storeName" />
<el-table-column :label="$t('_prop.production.finishedproductshipment.formName')" prop="formName" />
<el-table-column :label="$t('_prop.production.finishedproductshipment.outStockType')" prop="formType">
<template #default="{ row }">
{{ getOutStockTypeLabelByFormType(row.formType) }}
</template>
</el-table-column>
<el-table-column :label="$t('_prop.production.finishedproductshipment.formMark')" prop="formMark" /> <el-table-column :label="$t('_prop.production.finishedproductshipment.formMark')" prop="formMark" />
<el-table-column :label="$t('_prop.production.finishedproductshipment.totalValue')" prop="totalValue" />
<el-table-column :label="$t('_prop.common.createDate')" prop="createDate" :formatter="formatDate" /> <el-table-column :label="$t('_prop.common.createDate')" prop="createDate" :formatter="formatDate" />
<DefaultStatusSwitchColumn status-param-name="formStatus" :status-label-mapping="getFormStatusLabel" /> <DefaultStatusSwitchColumn status-param-name="formStatus" :status-label-mapping="getFormStatusLabel" />
<DefaultOperateButtonColumn @operate-button-click="operateButtonClick" /> <DefaultOperateButtonColumn @operate-button-click="operateButtonClick" :auth-show-func="authShowFunc" />
</template> </template>
</BasePageableTable> <template #item-content="{ itemData }">
<el-table :data="itemData" size="small" border stripe>
<el-table-column
:label="$t('_prop.production.finishedproductshipment.partNumber')"
prop="partNumber"
width="150"
/>
<el-table-column
:label="$t('_prop.production.finishedproductshipment.productSpecs')"
prop="productSpecs"
width="200"
/>
<el-table-column :label="$t('_prop.production.finishedproductshipment.productCount')" prop="productCount" />
<el-table-column :label="$t('_prop.production.finishedproductshipment.productMark')" prop="productMark" />
</el-table>
</template>
</ExpandablePageableTable>
<BaseFormWithTable <BaseFormWithTable
ref="baseFormWithTableRef"
v-model:visible="visible" v-model:visible="visible"
@submit="submit" @submit="submit"
v-model:form="form" v-model:form="form"
@@ -188,8 +294,8 @@ const handleReset = () => {
:base-title="$t('_title.production.finishedproductshipment.baseTitle')" :base-title="$t('_title.production.finishedproductshipment.baseTitle')"
:table-title="$t('_title.production.finishedproductshipment.tableTitle')" :table-title="$t('_title.production.finishedproductshipment.tableTitle')"
:item-array-name="itemArrayName" :item-array-name="itemArrayName"
upload-desc="设备信息" upload-desc="物料信息"
:import-url="importItemsUrl" :mapping-config="mappingConfig"
@reset="handleReset" @reset="handleReset"
> >
<template #form-items> <template #form-items>
@@ -221,6 +327,21 @@ const handleReset = () => {
<BaseSelect v-model="form.storeNo" :url="getWarehouseSelectListUrl" ref="warehouseSelectRef" /> <BaseSelect v-model="form.storeNo" :url="getWarehouseSelectListUrl" ref="warehouseSelectRef" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-form-item :label="$t('_prop.production.finishedproductshipment.outStockType')" prop="outStockType">
<el-select
v-model="form.outStockType"
:placeholder="$t('_message.production.finishedproductshipment.select_outStockType')"
>
<el-option
v-for="item in outStockTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row> </el-row>
<el-form-item :label="$t('_prop.production.finishedproductshipment.formMark')" prop="formMark"> <el-form-item :label="$t('_prop.production.finishedproductshipment.formMark')" prop="formMark">
<el-input <el-input
@@ -232,109 +353,39 @@ const handleReset = () => {
</el-form-item> </el-form-item>
</template> </template>
<template #form-table-columns> <template #form-table-columns>
<el-table-column :label="$t('_prop.production.finishedproductshipment.productType')" width="150"> <el-table-column :label="$t('_prop.production.finishedproductshipment.partNumber')" width="150">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-form-item :prop="`${itemArrayName}.${$index}.productType`"> <el-form-item :prop="`${itemArrayName}.${$index}.partNumber`">
<el-input <el-input
v-model="row.productType" v-model="row.partNumber"
size="small" size="small"
:placeholder="$t('_message.production.finishedproductshipment.input_productType')" :placeholder="$t('_message.production.finishedproductshipment.input_partNumber')"
/> />
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('_prop.production.finishedproductshipment.productSn')" width="150"> <el-table-column :label="$t('_prop.production.finishedproductshipment.productSpecs')" width="200">
<template #default="{ row }">
<span>{{ row.productSpecs }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('_prop.production.finishedproductshipment.productCount')" width="150">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-form-item :prop="`${itemArrayName}.${$index}.productSn`"> <el-form-item :prop="`${itemArrayName}.${$index}.productCount`">
<el-input <el-input-number v-model="row.productCount" size="small" :min="1" />
v-model="row.productSn"
size="small"
:placeholder="$t('_message.production.finishedproductshipment.input_productSn')"
/>
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('_prop.production.finishedproductshipment.mac')" width="150"> <el-table-column :label="$t('_prop.production.finishedproductshipment.productMark')" width="200">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-form-item :prop="`${itemArrayName}.${$index}.mac`"> <el-form-item :prop="`${itemArrayName}.${$index}.productMark`">
<el-input <el-input
v-model="row.mac" v-model="row.productMark"
size="small" size="small"
:placeholder="$t('_message.production.finishedproductshipment.input_mac')" :placeholder="$t('_message.production.finishedproductshipment.input_productMark')"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('_prop.production.finishedproductshipment.serialNum')" width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${itemArrayName}.${$index}.serialNum`">
<el-input
v-model="row.serialNum"
size="small"
:placeholder="$t('_message.production.finishedproductshipment.input_serialNum')"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('_prop.production.finishedproductshipment.softVersion')" width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${itemArrayName}.${$index}.softVersion`">
<el-input
v-model="row.softVersion"
size="small"
:placeholder="$t('_message.production.finishedproductshipment.input_softVersion')"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('_prop.production.finishedproductshipment.alVersion')" width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${itemArrayName}.${$index}.alVersion`">
<el-input
v-model="row.alVersion"
size="small"
:placeholder="$t('_message.production.finishedproductshipment.input_alVersion')"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('_prop.production.finishedproductshipment.alNum')" width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${itemArrayName}.${$index}.alNum`">
<el-input
v-model="row.alNum"
size="small"
:placeholder="$t('_message.production.finishedproductshipment.input_alNum')"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('_prop.production.finishedproductshipment.alTxt')" width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${itemArrayName}.${$index}.alTxt`">
<el-input
v-model="row.alTxt"
size="small"
:placeholder="$t('_message.production.finishedproductshipment.input_alTxt')"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('_prop.production.finishedproductshipment.mark')" width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${itemArrayName}.${$index}.mark`">
<el-input
v-model="row.mark"
size="small"
:placeholder="$t('_message.production.finishedproductshipment.input_mark')"
/> />
</el-form-item> </el-form-item>
</template> </template>
@@ -349,15 +400,18 @@ const handleReset = () => {
v-model:parent-param-value="itemParentId" v-model:parent-param-value="itemParentId"
> >
<template #columns> <template #columns>
<el-table-column :label="$t('_prop.production.finishedproductshipment.productType')" prop="productType" /> <el-table-column
<el-table-column :label="$t('_prop.production.finishedproductshipment.productSn')" prop="productSn" /> :label="$t('_prop.production.finishedproductshipment.partNumber')"
<el-table-column :label="$t('_prop.production.finishedproductshipment.mac')" prop="mac" /> prop="partNumber"
<el-table-column :label="$t('_prop.production.finishedproductshipment.serialNum')" prop="serialNum" /> width="150"
<el-table-column :label="$t('_prop.production.finishedproductshipment.softVersion')" prop="softVersion" /> />
<el-table-column :label="$t('_prop.production.finishedproductshipment.alVersion')" prop="alVersion" /> <el-table-column
<el-table-column :label="$t('_prop.production.finishedproductshipment.alNum')" prop="alNum" /> :label="$t('_prop.production.finishedproductshipment.productSpecs')"
<el-table-column :label="$t('_prop.production.finishedproductshipment.alTxt')" prop="alTxt" /> prop="productSpecs"
<el-table-column :label="$t('_prop.production.finishedproductshipment.mark')" prop="mark" /> width="200"
/>
<el-table-column :label="$t('_prop.production.finishedproductshipment.productCount')" prop="productCount" />
<el-table-column :label="$t('_prop.production.finishedproductshipment.productMark')" prop="productMark" />
</template> </template>
</BaseItemDialog> </BaseItemDialog>
</template> </template>