style:盘点执行-详情弹框

besure_bit
黄伟杰 7 days ago
parent e6af1598f3
commit 25acaea861

@ -563,8 +563,17 @@
relatedOrder: 'Related Order', relatedOrder: 'Related Order',
relatedRepairOrder: 'Related Repair Order', relatedRepairOrder: 'Related Repair Order',
relatedMaintainRecord: 'Related Maintenance Record', relatedMaintainRecord: 'Related Maintenance Record',
relatedTask: 'Related Task',
taskOrder: 'Task Order',
palletCode: 'Pallet Code',
productInfo: 'Product Info',
productName: 'Product Name',
packagingScheme: 'Packaging Scheme',
packageItemCount: 'Package Item Count',
selectRelatedRepairOrder: 'Select Repair Order', selectRelatedRepairOrder: 'Select Repair Order',
selectRelatedMaintainRecord: 'Select Maintenance Record', selectRelatedMaintainRecord: 'Select Maintenance Record',
selectTaskOrder: 'Select Task Order',
selectPalletCode: 'Select Pallet Code',
inputUnitType: 'Unit Input Type', inputUnitType: 'Unit Input Type',
inputCount: 'Purchase Unit Quantity', inputCount: 'Purchase Unit Quantity',
count: 'Quantity', count: 'Quantity',
@ -572,6 +581,8 @@
totalPrice: 'Total Price', totalPrice: 'Total Price',
remark: 'Remark', remark: 'Remark',
action: 'Action', action: 'Action',
selector: 'Select',
selectProduct: 'Select Product',
selectCode: 'Select Code', selectCode: 'Select Code',
code: 'Code', code: 'Code',
name: 'Name', name: 'Name',
@ -584,12 +595,16 @@
placeholderOutboundPurpose: 'Please select outbound purpose', placeholderOutboundPurpose: 'Please select outbound purpose',
placeholderRelatedRepairOrder: 'Please select related repair order', placeholderRelatedRepairOrder: 'Please select related repair order',
placeholderRelatedMaintainRecord: 'Please select related maintenance record', placeholderRelatedMaintainRecord: 'Please select related maintenance record',
placeholderTaskOrder: 'Please select task order',
placeholderPalletCode: 'Please select pallet code',
placeholderInputUnitType: 'Please select', placeholderInputUnitType: 'Please select',
placeholderCode: 'Please enter code', placeholderCode: 'Please enter code',
placeholderName: 'Please enter name', placeholderName: 'Please enter name',
validatorWarehouseRequired: 'Warehouse is required', validatorWarehouseRequired: 'Warehouse is required',
validatorAreaRequired: 'Please select area', validatorAreaRequired: 'Please select area',
validatorProductRequired: 'Product is required', validatorProductRequired: 'Product is required',
validatorTaskRequired: 'Task order is required',
validatorPalletRequired: 'Pallet code is required',
validatorCountRequired: 'Quantity is required', validatorCountRequired: 'Quantity is required',
stockCountExceededWarning: 'Quantity cannot exceed stock. It has been adjusted to stock quantity.' stockCountExceededWarning: 'Quantity cannot exceed stock. It has been adjusted to stock quantity.'
}, },

@ -563,8 +563,17 @@
relatedOrder: '关联单据', relatedOrder: '关联单据',
relatedRepairOrder: '关联维修单', relatedRepairOrder: '关联维修单',
relatedMaintainRecord: '关联保养记录', relatedMaintainRecord: '关联保养记录',
relatedTask: '关联任务单',
taskOrder: '任务单',
palletCode: '托盘码',
productInfo: '产品信息',
productName: '产品名称',
packagingScheme: '包装方案',
packageItemCount: '每包个数',
selectRelatedRepairOrder: '选择维修单', selectRelatedRepairOrder: '选择维修单',
selectRelatedMaintainRecord: '选择保养记录', selectRelatedMaintainRecord: '选择保养记录',
selectTaskOrder: '选择任务单',
selectPalletCode: '选择托盘码',
inputUnitType: '单位输入方式', inputUnitType: '单位输入方式',
inputCount: '采购单位数量', inputCount: '采购单位数量',
count: '数量', count: '数量',
@ -572,6 +581,8 @@
totalPrice: '合计金额', totalPrice: '合计金额',
remark: '备注', remark: '备注',
action: '操作', action: '操作',
selector: '选择',
selectProduct: '选择产品',
selectCode: '选择编码', selectCode: '选择编码',
code: '编码', code: '编码',
name: '名称', name: '名称',
@ -584,12 +595,16 @@
placeholderOutboundPurpose: '请选择出库用途', placeholderOutboundPurpose: '请选择出库用途',
placeholderRelatedRepairOrder: '请选择关联维修单', placeholderRelatedRepairOrder: '请选择关联维修单',
placeholderRelatedMaintainRecord: '请选择关联保养记录', placeholderRelatedMaintainRecord: '请选择关联保养记录',
placeholderTaskOrder: '请选择任务单',
placeholderPalletCode: '请选择托盘码',
placeholderInputUnitType: '请选择', placeholderInputUnitType: '请选择',
placeholderCode: '请输入编码', placeholderCode: '请输入编码',
placeholderName: '请输入名称', placeholderName: '请输入名称',
validatorWarehouseRequired: '仓库不能为空', validatorWarehouseRequired: '仓库不能为空',
validatorAreaRequired: '请选择库区', validatorAreaRequired: '请选择库区',
validatorProductRequired: '产品不能为空', validatorProductRequired: '产品不能为空',
validatorTaskRequired: '任务单不能为空',
validatorPalletRequired: '托盘码不能为空',
validatorCountRequired: '产品数量不能为空', validatorCountRequired: '产品数量不能为空',
stockCountExceededWarning: '数量不能超出库存,已自动调整为库存数量' stockCountExceededWarning: '数量不能超出库存,已自动调整为库存数量'
}, },

@ -88,7 +88,18 @@
</template> </template>
</el-form> </el-form>
<el-table :data="formData.items || []" border size="small" class="mt-12px"> <el-tabs v-if="isDetail" v-model="detailActiveTab" class="stock-check-detail-tabs">
<el-tab-pane :label="t('ErpStock.Check.list')" name="items" />
<el-tab-pane label="审核记录" name="approveRecords" />
</el-tabs>
<el-table
v-if="!isDetail || detailActiveTab === 'items'"
:data="formData.items || []"
border
size="small"
class="mt-12px"
>
<el-table-column :label="t('ErpStock.Item.warehouse')" prop="warehouseName" min-width="120" /> <el-table-column :label="t('ErpStock.Item.warehouse')" prop="warehouseName" min-width="120" />
<el-table-column :label="t('ErpStock.Item.area')" prop="areaName" min-width="100" /> <el-table-column :label="t('ErpStock.Item.area')" prop="areaName" min-width="100" />
<el-table-column :label="t('ErpStock.Item.barcode')" prop="productBarCode" min-width="150" /> <el-table-column :label="t('ErpStock.Item.barcode')" prop="productBarCode" min-width="150" />
@ -109,6 +120,32 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-table v-else :data="formData.approveRecords || []" border size="small" class="mt-12px">
<el-table-column label="变更前状态" prop="fromStatus" align="center" min-width="110">
<template #default="scope">
<dict-tag :type="DICT_TYPE.ERP_AUDIT_STATUS" :value="scope.row.fromStatus" />
</template>
</el-table-column>
<el-table-column label="变更后状态" prop="toStatus" align="center" min-width="110">
<template #default="scope">
<dict-tag :type="DICT_TYPE.ERP_AUDIT_STATUS" :value="scope.row.toStatus" />
</template>
</el-table-column>
<el-table-column label="目标审核人" prop="targetUserName" min-width="120" />
<el-table-column label="操作人" prop="creatorName" min-width="120" />
<el-table-column
label="操作时间"
prop="createTime"
:formatter="dateFormatter"
min-width="170"
/>
<el-table-column
:label="t('ErpStock.Check.remark')"
prop="remark"
min-width="160"
show-overflow-tooltip
/>
</el-table>
</ContentWrap> </ContentWrap>
<el-form :model="formData" label-width="auto" :disabled="formDisabled" class="stock-check-bottom-form"> <el-form :model="formData" label-width="auto" :disabled="formDisabled" class="stock-check-bottom-form">
<el-row :gutter="20"> <el-row :gutter="20">
@ -122,18 +159,22 @@
</el-form> </el-form>
<template #footer> <template #footer>
<el-button @click="dialogVisible = false">{{ t('common.cancel') }}</el-button> <el-button @click="dialogVisible = false">
<template v-if="isInventoryCheck"> {{ isDetail ? t('common.close') : t('common.cancel') }}
<el-button type="primary" :disabled="formLoading" @click="submitForm(0)"> </el-button>
{{ t('ErpStock.Check.saveDraft') }} <template v-if="!isDetail">
</el-button> <template v-if="isInventoryCheck">
<el-button type="warning" :disabled="formLoading || hasIncompleteActualCount" @click="submitForm(1)"> <el-button type="primary" :disabled="formLoading" @click="submitForm(0)">
{{ t('ErpStock.Check.inventoryCheck') }} {{ t('ErpStock.Check.saveDraft') }}
</el-button>
<el-button type="warning" :disabled="formLoading || hasIncompleteActualCount" @click="submitForm(1)">
{{ t('ErpStock.Check.inventoryCheck') }}
</el-button>
</template>
<el-button v-else type="primary" :disabled="formLoading" @click="submitForm()">
{{ t('common.save') }}
</el-button> </el-button>
</template> </template>
<el-button v-else type="primary" :disabled="formLoading" @click="submitForm()">
{{ t('common.save') }}
</el-button>
</template> </template>
</Dialog> </Dialog>
@ -328,10 +369,12 @@ const dialogTitle = ref('')
const formLoading = ref(false) const formLoading = ref(false)
const formType = ref('') const formType = ref('')
const formRef = ref() const formRef = ref()
const detailActiveTab = ref('items')
const isDetail = computed(() => formType.value === 'detail')
const isInventoryCheck = computed(() => formType.value === 'check') const isInventoryCheck = computed(() => formType.value === 'check')
const formDisabled = computed(() => formType.value === 'detail' || isInventoryCheck.value) const formDisabled = computed(() => isDetail.value || isInventoryCheck.value)
const selectionDisabled = computed(() => formType.value === 'detail') const selectionDisabled = computed(() => isDetail.value)
const formData = ref<FormData>({ const formData = ref<FormData>({
id: undefined, id: undefined,
@ -442,7 +485,8 @@ const open = async (type: string, id?: number) => {
sourceType: Number(data?.sourceType ?? 1), sourceType: Number(data?.sourceType ?? 1),
categoryType: data?.categoryType ?? getDefaultCategoryType(), categoryType: data?.categoryType ?? getDefaultCategoryType(),
checkTime: data?.checkTime ? formatDate(data.checkTime as Date) : undefined, checkTime: data?.checkTime ? formatDate(data.checkTime as Date) : undefined,
items: data?.items || [] items: data?.items || [],
approveRecords: data?.approveRecords || []
} }
if (type === 'detail') { if (type === 'detail') {
await enrichItemsForDisplay() await enrichItemsForDisplay()
@ -858,8 +902,10 @@ const resetForm = () => {
sourceType: 1, sourceType: 1,
categoryType: getDefaultCategoryType(), categoryType: getDefaultCategoryType(),
remark: undefined, remark: undefined,
items: [] items: [],
approveRecords: []
} }
detailActiveTab.value = 'items'
clearSelections() clearSelections()
} }
</script> </script>
@ -889,6 +935,10 @@ const resetForm = () => {
margin-bottom: 0; margin-bottom: 0;
} }
.stock-check-detail-tabs {
margin-top: 12px;
}
.stock-check-dialog-pagination { .stock-check-dialog-pagination {
padding-top: 12px; padding-top: 12px;
padding-bottom: 56px; padding-bottom: 56px;

@ -97,70 +97,6 @@
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
> >
<el-table-column type="selection" width="45" /> <el-table-column type="selection" width="45" />
<el-table-column type="expand">
<template #default="{ row }">
<div class="stock-check-execution-expand">
<div class="stock-check-execution-expand__section">
<div class="stock-check-execution-expand__title">{{ t('ErpStock.Check.list') }}</div>
<el-table :data="row.items || []" size="small" border>
<el-table-column
:label="t('ErpStock.Item.warehouse')"
prop="warehouseName"
min-width="120"
/>
<el-table-column :label="t('ErpStock.Item.area')" prop="areaName" min-width="100" />
<el-table-column
:label="t('ErpStock.Item.barcode')"
prop="productBarCode"
min-width="150"
/>
<el-table-column
:label="t('ErpStock.Item.product')"
prop="productName"
min-width="160"
/>
<el-table-column
:label="t('ErpStock.Check.stockCount')"
prop="stockCount"
align="right"
min-width="100"
/>
</el-table>
</div>
<div class="stock-check-execution-expand__section">
<div class="stock-check-execution-expand__title">审核记录</div>
<el-table :data="row.approveRecords || []" size="small" border>
<el-table-column label="操作类型" prop="actionType" min-width="110" />
<el-table-column label="变更前状态" prop="fromStatus" align="center" min-width="110">
<template #default="scope">
<dict-tag :type="DICT_TYPE.ERP_AUDIT_STATUS" :value="scope.row.fromStatus" />
</template>
</el-table-column>
<el-table-column label="变更后状态" prop="toStatus" align="center" min-width="110">
<template #default="scope">
<dict-tag :type="DICT_TYPE.ERP_AUDIT_STATUS" :value="scope.row.toStatus" />
</template>
</el-table-column>
<el-table-column label="目标审核人" prop="targetUserName" min-width="120" />
<el-table-column label="操作人" prop="creatorName" min-width="120" />
<el-table-column
label="操作时间"
prop="createTime"
:formatter="dateFormatter"
min-width="170"
/>
<el-table-column
:label="t('ErpStock.Check.remark')"
prop="remark"
min-width="160"
show-overflow-tooltip
/>
</el-table>
</div>
</div>
</template>
</el-table-column>
<el-table-column :label="t('ErpStock.Check.no')" prop="no" align="center" min-width="150" /> <el-table-column :label="t('ErpStock.Check.no')" prop="no" align="center" min-width="150" />
<el-table-column <el-table-column
:label="t('ErpStock.Check.productNames')" :label="t('ErpStock.Check.productNames')"
@ -236,7 +172,6 @@
link link
type="primary" type="primary"
@click="openForm('detail', scope.row.id)" @click="openForm('detail', scope.row.id)"
v-hasPermi="['erp:stock-check:query']"
> >
{{ t('action.detail') }} {{ t('action.detail') }}
</el-button> </el-button>
@ -473,13 +408,22 @@ const handleSubmit = async () => {
} }
submitLoading.value = true submitLoading.value = true
try { try {
if (isAuditDisabled.value) {
await StockCheckApi.auditStockCheck({
id: submitForm.id,
status: 20,
remark: submitForm.remark
})
message.success(t('ErpStock.Check.auditApproveSuccess'))
submitDialogVisible.value = false
await getList()
return
}
const data: { id: number; auditUserId?: number; remark?: string } = { const data: { id: number; auditUserId?: number; remark?: string } = {
id: submitForm.id, id: submitForm.id,
remark: submitForm.remark remark: submitForm.remark
} }
if (!isAuditDisabled.value) { data.auditUserId = submitForm.auditUserId
data.auditUserId = submitForm.auditUserId
}
await StockCheckApi.submitStockCheck(data) await StockCheckApi.submitStockCheck(data)
message.success(t('ErpStock.Check.submitSuccess')) message.success(t('ErpStock.Check.submitSuccess'))
submitDialogVisible.value = false submitDialogVisible.value = false
@ -535,25 +479,3 @@ onMounted(async () => {
await getList() await getList()
}) })
</script> </script>
<style scoped>
.stock-check-execution-expand {
display: grid;
gap: 14px;
padding: 12px 24px 16px;
background: var(--el-fill-color-lighter);
}
.stock-check-execution-expand__section {
padding: 12px;
border: 1px solid var(--el-border-color-lighter);
border-radius: 6px;
background: #fff;
}
.stock-check-execution-expand__title {
margin-bottom: 10px;
font-weight: 600;
color: var(--el-text-color-primary);
}
</style>

Loading…
Cancel
Save