style:盘点执行-详情弹框

main
黄伟杰 4 days ago
parent e6af1598f3
commit 25acaea861

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

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

@ -88,7 +88,18 @@
</template>
</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.area')" prop="areaName" min-width="100" />
<el-table-column :label="t('ErpStock.Item.barcode')" prop="productBarCode" min-width="150" />
@ -109,6 +120,32 @@
</template>
</el-table-column>
</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>
<el-form :model="formData" label-width="auto" :disabled="formDisabled" class="stock-check-bottom-form">
<el-row :gutter="20">
@ -122,18 +159,22 @@
</el-form>
<template #footer>
<el-button @click="dialogVisible = false">{{ t('common.cancel') }}</el-button>
<template v-if="isInventoryCheck">
<el-button type="primary" :disabled="formLoading" @click="submitForm(0)">
{{ t('ErpStock.Check.saveDraft') }}
</el-button>
<el-button type="warning" :disabled="formLoading || hasIncompleteActualCount" @click="submitForm(1)">
{{ t('ErpStock.Check.inventoryCheck') }}
<el-button @click="dialogVisible = false">
{{ isDetail ? t('common.close') : t('common.cancel') }}
</el-button>
<template v-if="!isDetail">
<template v-if="isInventoryCheck">
<el-button type="primary" :disabled="formLoading" @click="submitForm(0)">
{{ 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>
</template>
<el-button v-else type="primary" :disabled="formLoading" @click="submitForm()">
{{ t('common.save') }}
</el-button>
</template>
</Dialog>
@ -328,10 +369,12 @@ const dialogTitle = ref('')
const formLoading = ref(false)
const formType = ref('')
const formRef = ref()
const detailActiveTab = ref('items')
const isDetail = computed(() => formType.value === 'detail')
const isInventoryCheck = computed(() => formType.value === 'check')
const formDisabled = computed(() => formType.value === 'detail' || isInventoryCheck.value)
const selectionDisabled = computed(() => formType.value === 'detail')
const formDisabled = computed(() => isDetail.value || isInventoryCheck.value)
const selectionDisabled = computed(() => isDetail.value)
const formData = ref<FormData>({
id: undefined,
@ -442,7 +485,8 @@ const open = async (type: string, id?: number) => {
sourceType: Number(data?.sourceType ?? 1),
categoryType: data?.categoryType ?? getDefaultCategoryType(),
checkTime: data?.checkTime ? formatDate(data.checkTime as Date) : undefined,
items: data?.items || []
items: data?.items || [],
approveRecords: data?.approveRecords || []
}
if (type === 'detail') {
await enrichItemsForDisplay()
@ -858,8 +902,10 @@ const resetForm = () => {
sourceType: 1,
categoryType: getDefaultCategoryType(),
remark: undefined,
items: []
items: [],
approveRecords: []
}
detailActiveTab.value = 'items'
clearSelections()
}
</script>
@ -889,6 +935,10 @@ const resetForm = () => {
margin-bottom: 0;
}
.stock-check-detail-tabs {
margin-top: 12px;
}
.stock-check-dialog-pagination {
padding-top: 12px;
padding-bottom: 56px;

@ -97,70 +97,6 @@
@selection-change="handleSelectionChange"
>
<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.productNames')"
@ -236,7 +172,6 @@
link
type="primary"
@click="openForm('detail', scope.row.id)"
v-hasPermi="['erp:stock-check:query']"
>
{{ t('action.detail') }}
</el-button>
@ -473,13 +408,22 @@ const handleSubmit = async () => {
}
submitLoading.value = true
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 } = {
id: submitForm.id,
remark: submitForm.remark
}
if (!isAuditDisabled.value) {
data.auditUserId = submitForm.auditUserId
}
data.auditUserId = submitForm.auditUserId
await StockCheckApi.submitStockCheck(data)
message.success(t('ErpStock.Check.submitSuccess'))
submitDialogVisible.value = false
@ -535,25 +479,3 @@ onMounted(async () => {
await getList()
})
</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