feat: 完成成品入库单。

This commit is contained in:
c
2026-03-10 18:07:30 +08:00
parent 55bfbaeb38
commit d9d0f272b0
4 changed files with 450 additions and 86 deletions

View File

@@ -180,6 +180,21 @@ export default {
formName: "Form Name",
formMark: "Form Mark",
storeName: "Store",
storeId: "Store",
storeNo: "Store No",
formStatus: "Status",
productType: "Model",
productSn: "SN",
macAddress: "MAC Address",
serialNumber: "Serial Number",
softwareVersion: "Software Version",
algorithmVersion: "Algorithm Version",
algorithmFlag: "Algorithm Flag",
activationStatus: "Activation Status",
productionDate: "Production Date",
remark: "Remark",
createDate: "Create Date",
keyAccountId: "Customer",
},
},
purchase: {
@@ -318,6 +333,7 @@ export default {
viewLossRate: "View Loss Rate",
shortageFilterButton: "Shortage Data",
unfilterButton: "All Data",
outstock: "Outstock",
approve: "Approve",
reject: "Reject",
productionReturn: "Return",
@@ -449,7 +465,29 @@ export default {
},
production_return: {},
finishedproductreceipt: {
select_storeId: "Please select store",
input_formName: "Please enter form name",
input_formMark: "Please enter form remark",
input_formCode: "Please enter form code",
input_productType: "Please enter model",
input_productSn: "Please enter SN",
input_macAddress: "Please enter MAC address",
input_serialNumber: "Please enter serial number",
input_softwareVersion: "Please enter software version",
input_algorithmVersion: "Please enter algorithm version",
input_algorithmFlag: "Please enter algorithm flag",
input_activationStatus: "Please select activation status",
input_productionDate: "Please enter production date",
input_remark: "Please enter remark",
delete_message: "Delete Receipt",
only_pending_outstocking_can_outstock: "Only pending outstock and outstocking receipts can be shipped",
get_outstock_data_failed: "Failed to get outstock data",
select_key_account: "Please select customer",
select_devices: "Please select devices to ship",
outstock_confirm: "Confirm to ship?",
outstock_success: "Outstock success",
outstock_fail: "Outstock failed",
input_outstock_mark: "Please enter outstock remark",
},
},
purchase: {
@@ -556,6 +594,10 @@ export default {
finishedproductreceipt: {
add: "Add Receipt",
edit: "Edit Receipt",
showItem: "Product Details",
baseTitle: "Receipt Basic Info",
tableTitle: "Product Details",
outstockDialog: "Product Outstock",
},
finishedproductshipment: {
add: "Add Shipment",
@@ -854,5 +896,14 @@ export default {
approving: "Approving",
returned: "Returned",
},
finished_product_receipt_status: {
pending_outstock: "Pending Outstock",
outstocking: "Outstocking",
completed: "Completed",
},
activation_status: {
activated: "Activated",
not_activated: "Not Activated",
},
},
};

View File

@@ -204,18 +204,20 @@ export default {
formMark: "单据备注",
storeName: "仓库",
storeId: "仓库",
storeNo: "仓库编号",
formStatus: "单据状态",
productType: "型号",
productSn: "SN号",
mac: "MAC地址",
serialNum: "序列号",
softVersion: "软件版本",
alVersion: "算法版本",
alNum: "算法标志",
alTxt: "激活状态",
manufacturingDate: "时间",
mark: "备注",
macAddress: "MAC地址",
serialNumber: "序列号",
softwareVersion: "软件版本",
algorithmVersion: "算法版本",
algorithmFlag: "算法标志",
activationStatus: "激活状态",
productionDate: "生产日期",
remark: "备注",
createDate: "创建时间",
keyAccountId: "客户",
},
},
purchase: {
@@ -400,6 +402,7 @@ export default {
viewLossRate: "查看损耗率",
shortageFilterButton: "缺料数据",
unfilterButton: "全部数据",
outstock: "出货",
approve: "审核",
reject: "反审",
productionReturn: "退料",
@@ -598,14 +601,14 @@ export default {
input_formCode: "请输入单据编号",
input_productType: "请输入型号",
input_productSn: "请输入SN号",
input_mac: "请输入MAC地址",
input_serialNum: "请输入序列号",
input_softVersion: "请输入软件版本",
input_alVersion: "请输入算法版本",
input_alNum: "请输入算法标志",
input_alTxt: "请输入激活状态",
input_manufacturingDate: "请输入时间",
input_mark: "请输入备注",
input_macAddress: "请输入MAC地址",
input_serialNumber: "请输入序列号",
input_softwareVersion: "请输入软件版本",
input_algorithmVersion: "请输入算法版本",
input_algorithmFlag: "请输入算法标志",
input_activationStatus: "请选择激活状态",
input_productionDate: "请输入生产日期",
input_remark: "请输入备注",
approve_confirm: "是否审核通过",
approve_success: "审核成功",
approve_fail: "审核失败",
@@ -622,6 +625,14 @@ export default {
import_success: "导入成功",
import_fail: "导入失败",
delete_message: "删除成品入库单",
only_pending_outstocking_can_outstock: "只有待出货和出货中状态的入库单才能出货",
get_outstock_data_failed: "获取出货数据失败",
select_key_account: "请选择客户",
select_devices: "请选择要出货的设备",
outstock_confirm: "确认出货吗?",
outstock_success: "出货成功",
outstock_fail: "出货失败",
input_outstock_mark: "请输入出货备注",
},
finishedproductshipment: {
select_storeId: "请选择仓库",
@@ -849,6 +860,7 @@ export default {
showItem: "成品明细",
baseTitle: "成品入库单基本信息",
tableTitle: "成品明细",
outstockDialog: "成品出货",
},
finishedproductshipment: {
add: "添加成品出货单",
@@ -1167,6 +1179,15 @@ export default {
approving: "审批中",
returned: "已退料",
},
finished_product_receipt_status: {
pending_outstock: "待出货",
outstocking: "出货中",
completed: "已完成",
},
activation_status: {
activated: "已激活",
not_activated: "未激活",
},
},
_status: {
in_progress: "入库中",

View File

@@ -39,6 +39,36 @@ export const useStatus = () => {
8: "_base_info.form_status.returned",
};
const finishedProductReceiptStatusKeyMap: Record<number, string> = {
1: "_base_info.finished_product_receipt_status.pending_outstock",
3: "_base_info.finished_product_receipt_status.outstocking",
4: "_base_info.finished_product_receipt_status.completed",
};
const getFinishedProductReceiptStatusLabel = (code: number | null): string => {
if (code === null || code === undefined) return "";
const key = finishedProductReceiptStatusKeyMap[code];
return key ? t(key) : t(unknown);
};
const activationStatusKeyMap: Record<boolean, string> = {
true: "_base_info.activation_status.activated",
false: "_base_info.activation_status.not_activated",
};
const getActivationStatusLabel = (status: boolean | null): string => {
if (status === null || status === undefined) return "";
const key = activationStatusKeyMap[status];
return key ? t(key) : t(unknown);
};
const getActivationStatusTxtLabel = (status: string | null): string => {
if (status === null || status === undefined) return "";
if (status === "已激活" || status === "Activated") return t("_base_info.activation_status.activated");
if (status === "未激活" || status === "Not Activated") return t("_base_info.activation_status.not_activated");
return status;
};
const getFormStatusLabel = (code: number | null): string => {
if (code === null || code === undefined) return "";
const key = formStatusKeyMap[code];
@@ -76,6 +106,11 @@ export const useStatus = () => {
getProductionPlanStatusLabel,
formStatusKeyMap,
getFormStatusLabel,
finishedProductReceiptStatusKeyMap,
getFinishedProductReceiptStatusLabel,
activationStatusKeyMap,
getActivationStatusLabel,
getActivationStatusTxtLabel,
purchasePlanItemStatusKeyMap,
getPurchasePlanItemStatusLabel,
purchasePlanStatusKeyMap,

View File

@@ -1,18 +1,20 @@
<script lang="ts" setup>
import BasePageableTable from "@/components/base/base-pageable-table/BasePageableTable.vue";
import ExpandablePageableTable from "@/components/base/expandable-pageable-table/ExpandablePageableTable.vue";
import DefaultToolButton from "@/components/base/default-tool-button/DefaultToolButton.vue";
import DefaultOperateButtonColumn from "@/components/base/default-column/DefaultOperateButtonColumn.vue";
import DefaultStatusSwitchColumn from "@/components/base/default-column/DefaultStatusSwitchColumn.vue";
import { usePage } from "@/composables/use-page";
import BaseFormWithTable from "@/components/base/base-form-with-table/BaseFormWithTable.vue";
import { $t } from "@/common/languages";
import BaseFormWithTable from "@/components/base/base-form-with-table/BaseFormWithTable.vue";
import { ElMessage, ElMessageBox, type FormInstance, type FormRules } from "element-plus";
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 BaseTableForm from "@/components/base/base-table-form/BaseTableForm.vue";
import { generateDucumentNo } from "@/common/utils/document-no-generator/document-no-generator";
import { get, post } from "@/common/http/request";
import { useStatus } from "@/common/languages/mapping/base-info-mapping";
import { type FieldMappingConfig } from "@/components/base/base-form-with-table/type";
/**
* 必须要的变量
@@ -22,11 +24,12 @@ const getPageUrl = "/production/finishedproductreceipt/getFinishedProductReceipt
const addUrl = "/production/finishedproductreceipt/addFinishedProductReceipt";
const editUrl = "/production/finishedproductreceipt/updateFinishedProductReceipt";
const removeUrl = "/production/finishedproductreceipt/deleteFinishedProductReceipt";
const approveUrl = "/production/finishedproductreceipt/approveFinishedProductReceipt";
const unapproveUrl = "/production/finishedproductreceipt/unapproveFinishedProductReceipt";
const getDetailUrl = "/production/finishedproductreceipt/getFinishedProductReceiptDetail";
const importItemsUrl = "/production/finishedproductreceipt/importFinishedProductReceiptItems";
const itemUrl = "/production/finishedproductreceipt/getFinishedProductReceiptDetail";
const getWarehouseSelectListUrl = "/warehouse/warehouse/getWarehouseSelectList";
const getOutstockDataUrl = "/production/finishedproductreceipt/getOutstockData";
const saveOutstockUrl = "/production/finishedproductreceipt/saveOutstock";
const getKeyAccountSelectListUrl = "/sys/keyaccount/getKeyAccountSelectList";
const itemArrayName = "deviceItems";
const searchers = [
{ name: "searchCode", type: "text" as const, placeholder: $t("_prop.production.finishedproductreceipt.formCode") },
@@ -58,12 +61,98 @@ const rules = reactive<FormRules>({
/**
* 基本不变通用变量
*/
const tableRef = ref<InstanceType<typeof BasePageableTable> | null>(null);
const tableRef = ref<InstanceType<typeof ExpandablePageableTable> | null>(null);
const { useAdd, useEdit, useRemove, useGeneralPageRef } = usePage(tableRef);
const { title, visible, formType, form, itemVisible, itemParentId } = useGeneralPageRef();
const baseFormWithTableRef = ref<InstanceType<typeof BaseFormWithTable>>();
const warehouseSelectRef = ref<InstanceType<typeof BaseSelect>>();
const { getFormStatusLabel } = useStatus();
const outstockDialogRef = ref<InstanceType<typeof BaseTableForm>>();
const keyAccountSelectRef = ref<InstanceType<typeof BaseSelect>>();
const { getFinishedProductReceiptStatusLabel, getActivationStatusLabel, getActivationStatusTxtLabel } = useStatus();
// 出货相关变量
const outstockVisible = ref(false);
const outstockTableData = ref([]);
const currentOutstockId = ref();
const currentOutstockRow = ref<any>({});
const outstockForm = ref({
keyAccountId: "",
formMark: "",
});
const selectedOutstockDevices = ref<any[]>([]);
const handleOutstockSelectionChange = (selection: any[]) => {
selectedOutstockDevices.value = selection;
};
// Excel导入映射配置
const mappingConfig: FieldMappingConfig = {
// productType <- "型号" (默认空字符串)
productType: {
sourceKey: "型号",
defaultValue: "",
},
// productSn <- "SN号" (默认空字符串)
productSn: {
sourceKey: "SN号",
defaultValue: "",
},
// mac <- "MAC地址" (默认空字符串)
mac: {
sourceKey: "MAC地址",
defaultValue: "",
},
// serialNum <- "序列号" (默认空字符串)
serialNum: {
sourceKey: "序列号",
defaultValue: "",
},
// softVersion <- "软件版本" (默认空字符串)
softVersion: {
sourceKey: "软件版本",
defaultValue: "",
},
// alVersion <- "算法版本" (默认空字符串)
alVersion: {
sourceKey: "算法版本",
defaultValue: "",
},
// alNum <- "算法标志" (默认空字符串)
alNum: {
sourceKey: "算法标志",
defaultValue: "",
},
// alTxt <- "激活状态" (默认"未激活")
alTxt: {
sourceKey: "激活状态",
defaultValue: "未激活",
transform: (val: any) => {
if (val === "已激活" || val === "Activated" || val === true || val === "1") return "已激活";
if (val === "未激活" || val === "Not Activated" || val === false || val === "0") return "未激活";
return "未激活";
},
},
// createDate <- "生产日期" (默认空字符串)
createDate: {
sourceKey: "生产日期",
defaultValue: "",
},
// mark <- "备注" (默认空字符串)
mark: {
sourceKey: "备注",
defaultValue: "",
},
};
/**
* 可以自定义的变量
*/
@@ -75,6 +164,7 @@ const add = () => {
visible.value = true;
formType.value = false;
};
const edit = (row: any) => {
title.value = "_title.production.finishedproductreceipt.edit";
form.value = { ...row };
@@ -84,33 +174,73 @@ const edit = (row: any) => {
const remove = (row: any) => {
useRemove(removeUrl, row.id, "_message.production.finishedproductreceipt.delete_message");
};
const approve = (row: any) => {
ElMessageBox.confirm($t("_message.production.finishedproductreceipt.approve_confirm"), $t("_level.warning"), {
confirmButtonText: $t("_button.confirm"),
cancelButtonText: $t("_button.cancel"),
type: "warning",
}).then(async () => {
try {
await post(approveUrl, { id: row.id });
ElMessage.success($t("_message.production.finishedproductreceipt.approve_success"));
tableRef.value?.reload();
} catch (err: any) {
ElMessage.error($t("_message.production.finishedproductreceipt.approve_fail") + err);
}
});
const outstock = async (row: any) => {
// 检查单据状态,只有待出货和出货中状态才能出货
if (row.formStatus !== 1 && row.formStatus !== 3) {
ElMessage.warning($t("_message.production.finishedproductreceipt.only_pending_outstocking_can_outstock"));
return;
}
currentOutstockId.value = row.id;
currentOutstockRow.value = row;
try {
const outstockData = await get(getOutstockDataUrl, { id: row.id }).then(res => res.data);
outstockTableData.value = outstockData.map((item: any) => ({
...item,
selected: false,
}));
// 重置出货表单
outstockForm.value = {
keyAccountId: "",
formMark: "",
};
outstockVisible.value = true;
} catch (error) {
ElMessage.error($t("_message.production.finishedproductreceipt.get_outstock_data_failed"));
console.error("获取出货数据失败:", error);
}
};
const unapprove = (row: any) => {
ElMessageBox.confirm($t("_message.production.finishedproductreceipt.reject_confirm"), $t("_level.warning"), {
const saveOutstock = async () => {
if (!outstockForm.value.keyAccountId) {
ElMessage.warning($t("_message.production.finishedproductreceipt.select_key_account"));
return;
}
if (selectedOutstockDevices.value.length === 0) {
ElMessage.warning($t("_message.production.finishedproductreceipt.select_devices"));
return;
}
ElMessageBox.confirm($t("_message.production.finishedproductreceipt.outstock_confirm"), $t("_level.warning"), {
confirmButtonText: $t("_button.confirm"),
cancelButtonText: $t("_button.cancel"),
type: "warning",
}).then(async () => {
try {
await post(unapproveUrl, { id: row.id });
ElMessage.success($t("_message.production.finishedproductreceipt.reject_success"));
tableRef.value?.reload();
} catch (err: any) {
ElMessage.error($t("_message.production.finishedproductreceipt.reject_fail") + err);
const requestData = {
id: currentOutstockId.value,
keyAccountId: parseInt(outstockForm.value.keyAccountId),
outstockList: selectedOutstockDevices.value.map((item: any) => ({
productSn: item.productSn,
})),
};
const res = await post(saveOutstockUrl, requestData);
if (res.code === 0) {
ElMessage.success($t("_message.production.finishedproductreceipt.outstock_success"));
outstockVisible.value = false;
tableRef.value?.reload();
} else {
ElMessage.error($t("_message.production.finishedproductreceipt.outstock_fail") + res.msg);
}
} catch (error) {
ElMessage.error($t("_message.production.finishedproductreceipt.outstock_fail") + error);
console.error("出货失败:", error);
}
});
};
@@ -144,17 +274,22 @@ const operateButtonClick = (eventName: string, row: any) => {
case "remove":
remove(row);
break;
case "approve":
approve(row);
break;
case "unapprove":
unapprove(row);
break;
case "showItem":
showItem(row);
break;
case "outstock":
outstock(row);
break;
}
};
const authShowFunc = (row: any, button: globalThis.ButtonProp) => {
// 只有已完成的入库单不能出货formStatus === 4
if (row.formStatus === 4 && button.eventName === "outstock") return false;
// 其他按钮根据业务需求显示
return true;
};
const setName = () => {
form.value["storeName"] = warehouseSelectRef.value?.getLabel();
};
@@ -163,7 +298,15 @@ const handleReset = () => {
};
</script>
<template>
<BasePageableTable :url="getPageUrl" :searchers="searchers" ref="tableRef">
<ExpandablePageableTable
:url="getPageUrl"
:searchers="searchers"
ref="tableRef"
:item-url="itemUrl"
item-id-key="id"
item-id-name="id"
item-field-name="deviceItems"
>
<template #tool-button>
<DefaultToolButton @top-button-click="topButtonClick" />
</template>
@@ -174,10 +317,31 @@ const handleReset = () => {
<el-table-column :label="$t('_prop.production.finishedproductreceipt.formMark')" prop="formMark" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.totalValue')" prop="totalValue" />
<el-table-column :label="$t('_prop.common.createDate')" prop="createDate" :formatter="formatDate" />
<DefaultStatusSwitchColumn status-param-name="formStatus" :status-label-mapping="getFormStatusLabel" />
<DefaultOperateButtonColumn @operate-button-click="operateButtonClick" />
<DefaultStatusSwitchColumn
status-param-name="formStatus"
:status-label-mapping="getFinishedProductReceiptStatusLabel"
/>
<DefaultOperateButtonColumn @operate-button-click="operateButtonClick" :auth-show-func="authShowFunc" />
</template>
</BasePageableTable>
<template #item-content="{ itemData }">
<el-table :data="itemData" size="small" border stripe>
<el-table-column :label="$t('_prop.production.finishedproductreceipt.productType')" prop="productType" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.productSn')" prop="productSn" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.macAddress')" prop="mac" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.serialNumber')" prop="serialNum" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.softwareVersion')" prop="softVersion" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.algorithmVersion')" prop="alVersion" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.algorithmFlag')" prop="alNum" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.activationStatus')" prop="alStatus">
<template #default="{ row }">
{{ getActivationStatusLabel(row.alStatus) }}
</template>
</el-table-column>
<el-table-column :label="$t('_prop.production.finishedproductreceipt.productionDate')" prop="createDate" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.remark')" prop="mark" />
</el-table>
</template>
</ExpandablePageableTable>
<BaseFormWithTable
ref="baseFormWithTableRef"
v-model:visible="visible"
@@ -189,7 +353,7 @@ const handleReset = () => {
:table-title="$t('_title.production.finishedproductreceipt.tableTitle')"
:item-array-name="itemArrayName"
upload-desc="设备信息"
:import-url="importItemsUrl"
:mapping-config="mappingConfig"
@reset="handleReset"
>
<template #form-items>
@@ -256,85 +420,82 @@ const handleReset = () => {
</template>
</el-table-column>
<el-table-column :label="$t('_prop.production.finishedproductreceipt.mac')" width="150">
<el-table-column :label="$t('_prop.production.finishedproductreceipt.macAddress')" width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${itemArrayName}.${$index}.mac`">
<el-input
v-model="row.mac"
size="small"
:placeholder="$t('_message.production.finishedproductreceipt.input_mac')"
:placeholder="$t('_message.production.finishedproductreceipt.input_macAddress')"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('_prop.production.finishedproductreceipt.serialNum')" width="150">
<el-table-column :label="$t('_prop.production.finishedproductreceipt.serialNumber')" 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.finishedproductreceipt.input_serialNum')"
:placeholder="$t('_message.production.finishedproductreceipt.input_serialNumber')"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('_prop.production.finishedproductreceipt.softVersion')" width="150">
<el-table-column :label="$t('_prop.production.finishedproductreceipt.softwareVersion')" 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.finishedproductreceipt.input_softVersion')"
:placeholder="$t('_message.production.finishedproductreceipt.input_softwareVersion')"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('_prop.production.finishedproductreceipt.alVersion')" width="150">
<el-table-column :label="$t('_prop.production.finishedproductreceipt.algorithmVersion')" 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.finishedproductreceipt.input_alVersion')"
:placeholder="$t('_message.production.finishedproductreceipt.input_algorithmVersion')"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('_prop.production.finishedproductreceipt.alNum')" width="150">
<el-table-column :label="$t('_prop.production.finishedproductreceipt.algorithmFlag')" 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.finishedproductreceipt.input_alNum')"
:placeholder="$t('_message.production.finishedproductreceipt.input_algorithmFlag')"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('_prop.production.finishedproductreceipt.alTxt')" width="150">
<el-table-column :label="$t('_prop.production.finishedproductreceipt.activationStatus')" width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${itemArrayName}.${$index}.alTxt`">
<el-input
<el-select
v-model="row.alTxt"
size="small"
:placeholder="$t('_message.production.finishedproductreceipt.input_alTxt')"
/>
:placeholder="$t('_message.production.finishedproductreceipt.input_activationStatus')"
>
<el-option :label="$t('_base_info.activation_status.activated')" value="已激活" />
<el-option :label="$t('_base_info.activation_status.not_activated')" value="未激活" />
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('_prop.production.finishedproductreceipt.mark')" width="150">
<el-table-column :label="$t('_prop.production.finishedproductreceipt.remark')" 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.finishedproductreceipt.input_mark')"
:placeholder="$t('_message.production.finishedproductreceipt.input_remark')"
/>
</el-form-item>
</template>
@@ -347,17 +508,113 @@ const handleReset = () => {
:url="getDetailUrl"
parent-param-name="id"
v-model:parent-param-value="itemParentId"
width="80%"
>
<template #columns>
<el-table-column :label="$t('_prop.production.finishedproductreceipt.productType')" prop="productType" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.productSn')" prop="productSn" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.mac')" prop="mac" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.serialNum')" prop="serialNum" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.softVersion')" prop="softVersion" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.alVersion')" prop="alVersion" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.alNum')" prop="alNum" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.alTxt')" prop="alTxt" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.mark')" prop="mark" />
<el-table-column
:label="$t('_prop.production.finishedproductreceipt.productType')"
prop="productType"
width="120"
/>
<el-table-column :label="$t('_prop.production.finishedproductreceipt.productSn')" prop="productSn" width="150" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.macAddress')" prop="mac" width="150" />
<el-table-column
:label="$t('_prop.production.finishedproductreceipt.serialNumber')"
prop="serialNum"
width="150"
/>
<el-table-column
:label="$t('_prop.production.finishedproductreceipt.softwareVersion')"
prop="softVersion"
width="120"
/>
<el-table-column
:label="$t('_prop.production.finishedproductreceipt.algorithmVersion')"
prop="alVersion"
width="120"
/>
<el-table-column :label="$t('_prop.production.finishedproductreceipt.algorithmFlag')" prop="alNum" width="120" />
<el-table-column
:label="$t('_prop.production.finishedproductreceipt.activationStatus')"
prop="alStatus"
width="120"
>
<template #default="{ row }">
{{ getActivationStatusLabel(row.alStatus) }}
</template>
</el-table-column>
<el-table-column
:label="$t('_prop.production.finishedproductreceipt.productionDate')"
prop="createDate"
width="150"
/>
<el-table-column :label="$t('_prop.production.finishedproductreceipt.remark')" prop="mark" width="150" />
</template>
</BaseItemDialog>
<!-- 出货对话框 -->
<BaseTableForm
ref="outstockDialogRef"
v-model:visible="outstockVisible"
:title="$t('_title.production.finishedproductreceipt.outstockDialog')"
:tableData="outstockTableData"
:selectable="true"
:useAuth="false"
@selection-change="handleOutstockSelectionChange"
>
<template #filter>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item :label="$t('_prop.production.finishedproductreceipt.formCode')">
<el-input v-model="currentOutstockRow.formCode" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="$t('_prop.production.finishedproductreceipt.keyAccountId')">
<BaseSelect
v-model="outstockForm.keyAccountId"
:url="getKeyAccountSelectListUrl"
ref="keyAccountSelectRef"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="$t('_prop.production.finishedproductreceipt.formMark')">
<el-input
v-model="outstockForm.formMark"
:placeholder="$t('_message.production.finishedproductreceipt.input_outstock_mark')"
type="textarea"
autosize
/>
</el-form-item>
</el-col>
</el-row>
</template>
<template #table-columns>
<el-table-column :label="$t('_prop.production.finishedproductreceipt.productType')" prop="productType" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.productSn')" prop="productSn" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.macAddress')" prop="mac" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.serialNumber')" prop="serialNum" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.softwareVersion')" prop="softVersion" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.algorithmVersion')" prop="alVersion" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.algorithmFlag')" prop="alNum" />
<el-table-column :label="$t('_prop.production.finishedproductreceipt.activationStatus')" prop="alStatus">
<template #default="{ row }">
{{ getActivationStatusLabel(row.alStatus) }}
</template>
</el-table-column>
<el-table-column
:label="$t('_prop.production.finishedproductreceipt.createDate')"
prop="createDate"
:formatter="formatDate"
/>
</template>
<template #attachment>
<el-button type="primary" @click="saveOutstock">
{{ $t("_button.submit") }}
</el-button>
</template>
</BaseTableForm>
</template>