材料管理 变更清单

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

@ -16,58 +16,29 @@
<!-- 表单区域 -->
<el-card class="rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md overflow-hidden">
<div class="p-4 bg-gradient-to-r from-blue-50 to-indigo-50 border-b border-gray-100">
<h3 class="text-lg font-semibold text-gray-800">施工产值</h3>
<h3 class="text-lg font-semibold text-gray-800">物资设备批次需求计划</h3>
</div>
<div class="p-6">
<el-form
ref="leaveFormRef"
v-loading="loading"
:disabled="routeParams.type === 'view'"
:model="form"
:rules="rules"
label-width="120px"
class="space-y-4"
>
<el-row :gutter="20" justify="center">
<el-col :span="12" :offset="0">
<el-form-item label="计划到场时间" prop="arrivalTime">
<el-date-picker
clearable
v-model="form.arrivalTime"
disabled
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择计划到场时间"
>
</el-date-picker>
</el-form-item>
<el-form-item label="计划完成时间" prop="finishTime">
<el-date-picker clearable v-model="form.finishTime" disabled type="date" value-format="YYYY-MM-DD" placeholder="请选择计划完成时间">
</el-date-picker>
</el-form-item>
<div v-for="(item, index) in selectValue" :key="index">
<el-divider content-position="center"
><el-text tag="b">{{ item }}</el-text></el-divider
>
<el-form-item label="单价" prop="unitPrice">
<el-input v-model="form.listOfMaterialInventory[index].unitPrice" type="number" disabled placeholder="请输入单价" />
</el-form-item>
<el-form-item label="数量" prop="num">
<el-input v-model="form.listOfMaterialInventory[index].num" type="number" disabled placeholder="请输入数量" />
</el-form-item>
<el-form-item label="合同号" prop="contractNum">
<el-input v-model="form.listOfMaterialInventory[index].contractNum" disabled placeholder="请输入合同号" />
</el-form-item>
<el-form-item label="预估供应周期" prop="estimatedCycle">
<el-input v-model="form.listOfMaterialInventory[index].estimatedCycle" disabled type="number" placeholder="请输入预估供应周期" />
</el-form-item>
<el-form-item label="供货公司" prop="supplierCompany">
<el-input v-model="form.listOfMaterialInventory[index].supplierCompany" disabled placeholder="请输入供货公司" />
</el-form-item>
<el-table v-loading="loading" :data="cailiaoshebeiList">
<el-table-column label="供货商" align="center" prop="supplierCompany" />
<el-table-column label="设备材料名称" align="center" prop="name" />
<el-table-column label="规格型号" align="center" prop="specification" />
<el-table-column label="物料编码" align="center" prop="materialCode" width="200" />
<el-table-column label="计量单位" align="center" prop="unit" width="80" />
<el-table-column label="供应周期(天)" align="center" prop="estimatedCycle" />
<el-table-column label="需求数量" align="center" prop="demandQuantity">
<template #default="scope">
<el-input v-model="scope.row.demandQuantity" type="number" />
</template>
</el-table-column>
<el-table-column label="计划到场时间" align="center" prop="arrivalTime" width="250">
<template #default="scope">
<div class="flex justify-center w100%">
<el-date-picker v-model="scope.row.arrivalTime" type="date" value-format="YYYY-MM-DD" />
</div>
</el-col>
</el-row>
</el-form>
</template>
</el-table-column>
</el-table>
</div>
</el-card>
<!-- 提交组件 -->
@ -117,6 +88,8 @@ import { getKnowledgeDocument } from '@/api/design/technicalStandard';
import { getConstructionValue } from '@/api/out/constructionValue';
import { workScheduleListDetail } from '@/api/progress/plan';
import { getCailiaoshebei } from '@/api/materials/suppliesprice';
import { getPcDetail, listCailiaoshebei } from '@/api/materials/batchPlan';
import { CailiaoshebeiVO } from '@/api/materials/batchPlan/types';
// 获取用户 store
const userStore = useUserStoreHook();
// 从 store 中获取项目列表和当前选中的项目
@ -156,25 +129,11 @@ const submitFormData = ref<StartProcessBo>({
});
const taskVariables = ref<Record<string, any>>({});
const selectValue = ref<string[]>([]);
const cailiaoshebeiList = ref<CailiaoshebeiVO[]>([]);
const initFormData = {
id: undefined,
batchNumber: undefined,
supplierId: undefined,
supplier: undefined,
name: undefined,
supply: undefined,
specification: undefined,
signalment: undefined,
materialCode: undefined,
arrivalTime: undefined,
finishTime: undefined,
unit: undefined,
plan: undefined,
realQuantity: undefined,
projectId: currentProject.value.id,
listOfMaterialInventory: [],
remark: undefined
approvalProject: undefined
};
const data = reactive({
form: { ...initFormData },
@ -199,20 +158,19 @@ const getInfo = () => {
loading.value = true;
buttonLoading.value = false;
nextTick(async () => {
const res = JSON.parse(routeParams.value.data);
Object.assign(form.value, res.data);
selectValue.value = (form.value.supplier as string).split(',');
if (!form.value.listOfMaterialInventory.length) {
form.value.listOfMaterialInventory = selectValue.value.map((item) => {
return {
supplierCompany: item,
estimatedCycle: '',
contractNum: '',
num: '',
unitPrice: ''
};
});
const id = routeParams.value.id.split('_')[0];
const res = await listCailiaoshebei({ pageNum: 1, pageSize: 10, batchNumber: id });
cailiaoshebeiList.value = res.rows;
if (!form.value.approvalProject) {
const res = await getPcDetail(id);
form.value.approvalProject = res.data.approvalProject;
} else {
form.value.approvalProject = routeParams.value.approvalProject;
}
console.log('🚀 ~ getInfo ~ form.value.approvalProject:', form.value.approvalProject);
form.value.id = routeParams.value.id;
loading.value = false;
buttonLoading.value = false;
});