材料管理 变更清单

This commit is contained in:
Teo
2025-08-08 20:03:00 +08:00
parent f37ca487f6
commit 93a3ea764e
28 changed files with 1973 additions and 432 deletions

View File

@ -30,40 +30,42 @@
<el-card shadow="never">
<el-table v-loading="loading" :data="cailiaoshebeiList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="供货商ID" align="center" prop="supplierId" /> -->
<el-table-column label="供货商" align="center" prop="supplier" />
<el-table-column label="设备材料名称" align="center" prop="name" />
<el-table-column label="供货来源" align="center" prop="supply">
<template #default="scope">
<dict-tag :options="supply" :value="scope.row.supply" />
</template>
</el-table-column>
<el-table-column label="设备材料名称" align="center" prop="name" width="110" />
<el-table-column label="规格型号" align="center" prop="specification" />
<el-table-column label="特征描述" align="center" prop="signalment" />
<el-table-column label="需求数量" align="center" prop="demandQuantity" />
<el-table-column label="物料编码" align="center" prop="materialCode" width="200" />
<el-table-column label="计量单位" align="center" prop="unit" />
<el-table-column label="计划数量" align="center" prop="plan" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<el-table-column label="计划到场时间" align="center" prop="arrivalTime" width="110" />
<el-table-column label="订货数量" align="center" prop="orderQuantity" />
<el-table-column label="预计到货时间" align="center" prop="expectedArrival" width="110" />
<el-table-column label="预计生产完成时间" align="center" prop="productionTime" width="130" />
<el-table-column label="验收数量" align="center" prop="acceptanceQuantity" />
<el-table-column label="实际到货时间" align="center" prop="actualArrival" width="110" />
<el-table-column label="需求提交时间" align="center" prop="requiredTime" width="110" />
<el-table-column label="订货时间" align="center" prop="orderTime" width="110" />
<el-table-column label="验收时间" align="center" prop="receptionTime" width="110" />
<el-table-column label="物资执行状态" align="center" prop="materialStatus" width="110">
<template #default="scope">
<el-tooltip content="修改" placement="top">
<el-button
link
type="primary"
icon="Edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['cailiaoshebei:cailiaoshebei:edit']"
></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button
link
type="primary"
icon="Delete"
@click="handleDelete(scope.row)"
v-hasPermi="['cailiaoshebei:cailiaoshebei:remove']"
></el-button>
</el-tooltip>
<dict-tag :options="material_status" :value="scope.row.materialStatus" />
</template>
</el-table-column>
<el-table-column label="物资逾期类型" align="center" prop="overdueType" width="110">
<template #default="scope">
<dict-tag :options="overdue_type" :value="scope.row.overdueType" />
</template>
</el-table-column>
<el-table-column label="逾期原因" align="center" prop="cause" />
<el-table-column label="签收单据" align="center" prop="signature" />
<el-table-column label="退货单据" align="center" prop="returnedSalesReport" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" width="150" fixed="right">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['cailiaoshebei:cailiaoshebei:edit']"
>修改</el-button
>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['cailiaoshebei:cailiaoshebei:remove']"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
@ -73,56 +75,72 @@
<!-- 添加或修改物资-材料设备对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="cailiaoshebeiFormRef" :model="form" :rules="rules" label-width="110px">
<el-form-item label="批次号" prop="batchNumber">
<el-input v-model="form.batchNumber" placeholder="请输入批次ID" disabled />
</el-form-item>
<!-- <el-form-item label="供货商ID" prop="supplierId">
<el-input v-model="form.supplierId" placeholder="请输入供货商ID" />
</el-form-item> -->
<el-form-item label="供货商" prop="supplier">
<el-select v-model="selectValue" value-key="id" multiple placeholder="请选择供货商" clearable filterable>
<el-option v-for="item in supplierOptions" :key="item.id" :label="item.name" :value="item.id"> </el-option>
<el-form ref="cailiaoshebeiFormRef" :model="form" :rules="rules" label-width="130px">
<el-form-item label="物资执行状态" prop="materialStatus">
<el-select v-model="form.bo.materialStatus" placeholder="请选择物资执行状态" clearable filterable @change="handleChange">
<el-option v-for="item in material_status" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="设备材料名称" prop="name">
<el-input v-model="form.name" placeholder="请输入设备材料名称" />
</el-form-item>
<el-form-item label="供货来源" prop="supply">
<el-select v-model="form.supply" value-key="value" placeholder="请选择供货来源" clearable filterable @change="">
<el-option v-for="item in supply" :key="item.value" :label="item.label" :value="item.value"> </el-option>
<el-form-item label="物资逾期类型" prop="overdueType" v-if="form.bo.materialStatus == 3">
<el-select v-model="form.bo.overdueType" placeholder="请选择物资逾期类型" clearable filterable>
<el-option v-for="item in overdue_type" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="规格型号" prop="specification">
<el-input v-model="form.specification" placeholder="请输入规格型号" />
<el-form-item label="逾期原因" prop="cause" v-if="form.bo.materialStatus == 3">
<el-input v-model="form.bo.cause" placeholder="请输入逾期原因" />
</el-form-item>
<el-form-item label="特征描述" prop="signalment">
<el-input v-model="form.signalment" placeholder="请输入特征描述" />
<el-form-item label="实际到货时间" prop="actualArrival" v-if="form.bo.materialStatus < 4">
<el-date-picker clearable v-model="form.bo.actualArrival" type="date" value-format="YYYY-MM-DD" placeholder="请选择实际到货时间" />
</el-form-item>
<el-form-item label="物料编码" prop="materialCode">
<el-input v-model="form.materialCode" placeholder="请输入物料编码" />
<el-form-item label="验收时间" prop="receptionTime" v-if="form.bo.materialStatus < 4">
<el-date-picker clearable v-model="form.bo.receptionTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择验收时间" />
</el-form-item>
<!-- <el-form-item label="计划到场时间" prop="arrivalTime">
<el-date-picker clearable v-model="form.arrivalTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择计划到场时间">
</el-date-picker>
<el-form-item label="验收数量" prop="acceptanceQuantity" v-if="form.bo.materialStatus < 4">
<el-input v-model="form.bo.acceptanceQuantity" type="number" placeholder="请输入验收数量" />
</el-form-item>
<el-form-item label="计划完成时间" prop="finishTime">
<el-date-picker clearable v-model="form.finishTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择计划完成时间">
</el-date-picker>
</el-form-item> -->
<el-form-item label="计量单位" prop="unit">
<el-input v-model="form.unit" placeholder="请输入计量单位" />
<el-form-item label="需求提交时间" prop="requiredTime">
<el-date-picker clearable v-model="form.bo.requiredTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择需求提交时间" />
</el-form-item>
<el-form-item label="计划数量" prop="plan">
<el-input v-model="form.plan" placeholder="请输入计划数量" type="number" />
<el-form-item label="订货时间" prop="orderTime">
<el-date-picker clearable v-model="form.bo.orderTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择订货时间" />
</el-form-item>
<el-form-item label="操作状态" prop="operationStatus" v-if="form.bo.materialStatus <= 4 || form.bo.materialStatus == 10">
<el-select v-model="form.bo.operationStatus" placeholder="请选择物资执行状态" clearable filterable @change="handleChange">
<el-option v-for="item in operation_s" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="单据类型" prop="billType" v-if="form.bo.materialStatus < 4 || form.bo.materialStatus == 10">
<el-select v-model="form.bo.billType" placeholder="请选择单据类型" clearable filterable>
<el-option label="签收单" value="1" />
<el-option label="退货单" value="2" />
</el-select>
</el-form-item>
<el-form-item label="上传文件" prop="file" v-if="form.bo.materialStatus < 4 || form.bo.materialStatus == 10">
<file-upload
v-model="form.file"
:fileType="['doc', 'docx']"
:autoUpload="false"
ref="fileUploadRef"
:data="{ ...form.bo }"
uploadUrl="/cailiaoshebei/materialsorder/changeTheStatusOfTheMaterials"
:onUploadError="
(err, file, fileList) => {
buttonLoading = false;
}
"
:limit="1"
:onUploadSuccess="handleUploadSuccess"
showFileList
/>
</el-form-item>
<!-- <el-form-item label="实际数量" prop="realQuantity">
<el-input v-model="form.realQuantity" placeholder="请输入实际数量" />
</el-form-item> -->
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
<el-input v-model="form.remark" type="textarea" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
@ -149,7 +167,9 @@ import { listContractor } from '@/api/project/contractor';
import { useUserStoreHook } from '@/store/modules/user';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { supply } = toRefs<any>(proxy?.useDict('supply'));
const { supply, overdue_type, material_status, operation_status } = toRefs<any>(
proxy?.useDict('supply', 'material_status', 'overdue_type', 'operation_status')
);
// 获取用户 store
const userStore = useUserStoreHook();
// 从 store 中获取项目列表和当前选中的项目
@ -164,6 +184,7 @@ const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const batchOptions = ref<any[]>([]);
const fileUploadRef = ref();
const queryFormRef = ref<ElFormInstance>();
const cailiaoshebeiFormRef = ref<ElFormInstance>();
@ -188,7 +209,18 @@ const initFormData: CailiaoshebeiForm = {
unit: undefined,
plan: undefined,
realQuantity: undefined,
file: undefined,
projectId: currentProject.value.id,
bo: {
requiredTime: undefined,
orderTime: undefined,
receptionTime: undefined,
materialStatus: undefined,
overdueType: undefined,
cause: undefined,
billType: undefined,
remark: undefined
},
remark: undefined
};
const data = reactive<PageData<CailiaoshebeiForm, CailiaoshebeiQuery>>({
@ -295,12 +327,13 @@ const handleAdd = () => {
};
/** 修改按钮操作 */
const operation_s = ref([]);
const handleUpdate = async (row?: CailiaoshebeiVO) => {
reset();
const _id = row?.id || ids.value[0];
const res = await getCailiaoshebei(_id);
Object.assign(form.value, res.data);
selectValue.value = (form.value.supplierId as string).split(',');
operation_s.value = operation_status.value.slice(0, 2);
Object.assign(form.value.bo, row);
console.log('🚀 ~ handleUpdate ~ form.value:', form.value);
// selectValue.value = (form.value.supplierId as string).split(',');
dialog.visible = true;
dialog.title = '修改物资-材料设备';
};
@ -311,14 +344,7 @@ const submitForm = () => {
cailiaoshebeiFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.id) {
await updateCailiaoshebei(form.value).finally(() => (buttonLoading.value = false));
} else {
await addCailiaoshebei(form.value).finally(() => (buttonLoading.value = false));
}
proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false;
await getList();
fileUploadRef.value!.submitUpload();
}
});
};
@ -353,15 +379,21 @@ const handleDelete = async (row?: CailiaoshebeiVO) => {
await getList();
};
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download(
'cailiaoshebei/cailiaoshebei/export',
{
...queryParams.value
},
`cailiaoshebei_${new Date().getTime()}.xlsx`
);
const handleUploadSuccess = () => {
proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false;
buttonLoading.value = false;
getList();
};
const handleChange = (value: number) => {
if (!(value < 4 || value == 10)) {
form.value.bo.billType = '';
form.value.file = '';
} else if (value == 3) {
form.value.bo.overdueType = '';
form.value.bo.cause = '';
}
};
/** 查询供货商列表 */