分项工程单价添加数量字段,完善物资-物料设备

This commit is contained in:
Teo
2025-08-05 18:35:54 +08:00
parent 973bff351d
commit 0223d9d86e
6 changed files with 88 additions and 28 deletions

View File

@ -5,7 +5,7 @@ VITE_APP_TITLE = 新能源项目管理平台
VITE_APP_ENV = 'development' VITE_APP_ENV = 'development'
# 开发环境 # 开发环境
VITE_APP_BASE_API = 'http://192.168.110.180:8899' VITE_APP_BASE_API = 'http://192.168.110.159:8898'
# 无人机接口地址 # 无人机接口地址

View File

@ -57,7 +57,7 @@ export const updateCailiaoshebei = (data: CailiaoshebeiForm) => {
*/ */
export const delCailiaoshebei = (id: string | number | Array<string | number>) => { export const delCailiaoshebei = (id: string | number | Array<string | number>) => {
return request({ return request({
url: '/cailiaoshebei/cailiaoshebei/' + id, url: '/cailiaoshebei/cailiaoshebei/remove/' + id,
method: 'delete' method: 'delete'
}); });
}; };

View File

@ -81,6 +81,8 @@ export interface CailiaoshebeiForm extends BaseEntity {
*/ */
id?: string | number; id?: string | number;
projectId?: string | number; projectId?: string | number;
batchNumber?: string | number;
/** /**
* 批次ID * 批次ID
*/ */

View File

@ -4,8 +4,8 @@
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="批次号" prop="batchId"> <el-form-item label="批次号" prop="batchNumber">
<el-input v-model="queryParams.batchId" placeholder="请输入批次ID" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.batchNumber" placeholder="请输入批次ID" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="供货商ID" prop="supplierId"> <el-form-item label="供货商ID" prop="supplierId">
<el-input v-model="queryParams.supplierId" placeholder="请输入供货商ID" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.supplierId" placeholder="请输入供货商ID" clearable @keyup.enter="handleQuery" />
@ -68,7 +68,7 @@
<el-tree <el-tree
ref="batchTreeRef" ref="batchTreeRef"
class="mt-2" class="mt-2"
node-key="id" node-key="batchNumber"
:data="batchOptions" :data="batchOptions"
:props="{ label: 'batchNumber', children: 'children' }" :props="{ label: 'batchNumber', children: 'children' }"
:expand-on-click-node="false" :expand-on-click-node="false"
@ -148,7 +148,6 @@
</el-table-column> --> </el-table-column> -->
<el-table-column label="计量单位" align="center" prop="unit" /> <el-table-column label="计量单位" align="center" prop="unit" />
<el-table-column label="计划数量" align="center" prop="plan" /> <el-table-column label="计划数量" align="center" prop="plan" />
<el-table-column label="实际数量" align="center" prop="realQuantity" />
<el-table-column label="备注" align="center" prop="remark" /> <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" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
@ -180,14 +179,16 @@
<!-- 添加或修改物资-材料设备对话框 --> <!-- 添加或修改物资-材料设备对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <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 ref="cailiaoshebeiFormRef" :model="form" :rules="rules" label-width="110px">
<el-form-item label="批次ID" prop="batchId"> <el-form-item label="批次" prop="batchNumber">
<el-input v-model="form.batchId" placeholder="请输入批次ID" disabled /> <el-input v-model="form.batchNumber" placeholder="请输入批次ID" disabled />
</el-form-item> </el-form-item>
<el-form-item label="供货商ID" prop="supplierId"> <!-- <el-form-item label="供货商ID" prop="supplierId">
<el-input v-model="form.supplierId" placeholder="请输入供货商ID" /> <el-input v-model="form.supplierId" placeholder="请输入供货商ID" />
</el-form-item> </el-form-item> -->
<el-form-item label="供货商" prop="supplier"> <el-form-item label="供货商" prop="supplier">
<el-input v-model="form.supplier" placeholder="请输入供货商" /> <el-select v-model="form.supplierId" value-key="id" placeholder="请选择供货商" clearable filterable @change="handleChange">
<el-option v-for="item in supplierOptions" :key="item.id" :label="item.name" :value="item.id"> </el-option>
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="设备材料名称" prop="name"> <el-form-item label="设备材料名称" prop="name">
<el-input v-model="form.name" placeholder="请输入设备材料名称" /> <el-input v-model="form.name" placeholder="请输入设备材料名称" />
@ -218,7 +219,7 @@
<el-input v-model="form.unit" placeholder="请输入计量单位" /> <el-input v-model="form.unit" placeholder="请输入计量单位" />
</el-form-item> </el-form-item>
<el-form-item label="计划数量" prop="plan"> <el-form-item label="计划数量" prop="plan">
<el-input v-model="form.plan" placeholder="请输入计划数量" /> <el-input v-model="form.plan" placeholder="请输入计划数量" type="number" />
</el-form-item> </el-form-item>
<!-- <el-form-item label="实际数量" prop="realQuantity"> <!-- <el-form-item label="实际数量" prop="realQuantity">
<el-input v-model="form.realQuantity" placeholder="请输入实际数量" /> <el-input v-model="form.realQuantity" placeholder="请输入实际数量" />
@ -248,6 +249,7 @@ import {
getBatch getBatch
} from '@/api/materials/cailiaoshebei'; } from '@/api/materials/cailiaoshebei';
import { CailiaoshebeiVO, CailiaoshebeiQuery, CailiaoshebeiForm } from '@/api/materials/cailiaoshebei/types'; import { CailiaoshebeiVO, CailiaoshebeiQuery, CailiaoshebeiForm } from '@/api/materials/cailiaoshebei/types';
import { listContractor } from '@/api/project/contractor';
import { useUserStoreHook } from '@/store/modules/user'; import { useUserStoreHook } from '@/store/modules/user';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@ -256,7 +258,7 @@ const { supply } = toRefs<any>(proxy?.useDict('supply'));
const userStore = useUserStoreHook(); const userStore = useUserStoreHook();
// 从 store 中获取项目列表和当前选中的项目 // 从 store 中获取项目列表和当前选中的项目
const currentProject = computed(() => userStore.selectedProject); const currentProject = computed(() => userStore.selectedProject);
const batchTreeRef = ref<any>(null);
const cailiaoshebeiList = ref<CailiaoshebeiVO[]>([]); const cailiaoshebeiList = ref<CailiaoshebeiVO[]>([]);
const buttonLoading = ref(false); const buttonLoading = ref(false);
const loading = ref(true); const loading = ref(true);
@ -277,7 +279,7 @@ const dialog = reactive<DialogOption>({
const initFormData: CailiaoshebeiForm = { const initFormData: CailiaoshebeiForm = {
id: undefined, id: undefined,
batchId: undefined, batchNumber: undefined,
supplierId: undefined, supplierId: undefined,
supplier: undefined, supplier: undefined,
name: undefined, name: undefined,
@ -298,12 +300,11 @@ const data = reactive<PageData<CailiaoshebeiForm, CailiaoshebeiQuery>>({
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
batchId: undefined, batchNumber: undefined,
supplierId: undefined, supplierId: undefined,
supplier: undefined, supplier: undefined,
name: undefined, name: undefined,
projectId: currentProject.value.id, projectId: currentProject.value.id,
batchNumber: undefined,
supply: undefined, supply: undefined,
specification: undefined, specification: undefined,
signalment: undefined, signalment: undefined,
@ -337,22 +338,22 @@ const getBatchList = async () => {
batchOptions.value = res.rows; batchOptions.value = res.rows;
total.value = res.total; total.value = res.total;
try { try {
queryParams.value.batchId = res.rows[0].id; batchTreeRef.value.setCurrentKey(res.rows[0].batchNumber);
form.value.batchId = res.rows[0].id; form.value.batchNumber = res.rows[0].batchNumber;
} catch (error) { } catch (error) {
queryParams.value.batchId = ''; form.value.batchNumber = '';
form.value.batchId = '';
} }
getList(); getList();
}; };
/** 节点单击事件 */ /** 节点单击事件 */
const handleNodeClick = (data: any) => { const handleNodeClick = (data: any) => {
queryParams.value.batchId = data.id; queryParams.value.batchNumber = data.batchNumber;
form.value.batchId = data.id; form.value.batchNumber = data.batchNumber;
console.log('🚀 ~ handleNodeClick ~ form.value:', form.value); console.log('🚀 ~ handleNodeClick ~ form.value:', form.value);
if (data.id === '0') { if (data.batchNumber === '0') {
queryParams.value.batchId = ''; queryParams.value.batchNumber = '';
} }
getList(); getList();
}; };
@ -365,8 +366,8 @@ const cancel = () => {
/** 表单重置 */ /** 表单重置 */
const reset = () => { const reset = () => {
const preservedBatchId = form.value.batchId; // 先保存当前的 batchId const preservedBatchId = form.value.batchNumber; // 先保存当前的 batchNumber
form.value = { ...initFormData, batchId: preservedBatchId }; // 重置但保留 form.value = { ...initFormData, batchNumber: preservedBatchId }; // 重置但保留
cailiaoshebeiFormRef.value?.resetFields(); cailiaoshebeiFormRef.value?.resetFields();
}; };
@ -455,7 +456,25 @@ const handleExport = () => {
); );
}; };
/** 查询供货商列表 */
const supplierOptions = ref([]);
const getSupplierList = async () => {
const res = await listContractor({
projectId: currentProject.value.id,
pageNum: 1,
pageSize: 10000
});
supplierOptions.value = res.rows;
};
/** 供货商选择器改变事件 */
const handleChange = (value: string) => {
const selectedOption = supplierOptions.value.find((item) => item.id === value);
form.value.supplier = selectedOption?.name || '';
};
onMounted(() => { onMounted(() => {
getBatchList(); getBatchList();
getSupplierList();
}); });
</script> </script>

View File

@ -91,6 +91,9 @@
<el-form-item label="计量单位" prop="unit"> <el-form-item label="计量单位" prop="unit">
<el-input v-model="form.unit" placeholder="请输入计量单位" /> <el-input v-model="form.unit" placeholder="请输入计量单位" />
</el-form-item> </el-form-item>
<el-form-item label="数量" prop="total" v-if="isDisabled">
<el-input v-model="form.total" placeholder="请输入数量" />
</el-form-item>
<el-form-item label="综合单价" prop="unitPrice"> <el-form-item label="综合单价" prop="unitPrice">
<el-input v-model="form.unitPrice" placeholder="请输入综合单价" /> <el-input v-model="form.unitPrice" placeholder="请输入综合单价" />
</el-form-item> </el-form-item>
@ -257,6 +260,7 @@ const cancel = () => {
// 表单重置 // 表单重置
const reset = () => { const reset = () => {
form.value = { ...initFormData }; form.value = { ...initFormData };
isDisabled.value = false;
progressCategoryFormRef.value?.resetFields(); progressCategoryFormRef.value?.resetFields();
}; };
/** 级联选择器改变事件 */ /** 级联选择器改变事件 */
@ -305,8 +309,12 @@ const toggleExpandAll = (data: ProgressCategoryVO[], status: boolean) => {
}; };
/** 修改按钮操作 */ /** 修改按钮操作 */
const isDisabled = ref<boolean>(false);
const handleUpdate = async (row: ProgressCategoryVO) => { const handleUpdate = async (row: ProgressCategoryVO) => {
reset(); reset();
if (row.unitType == '2') {
isDisabled.value = true;
}
await getTreeselect(); await getTreeselect();
if (row != null) { if (row != null) {
form.value.parentId = row.parentId; form.value.parentId = row.parentId;

View File

@ -280,11 +280,42 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24" :offset="0"> <el-col :span="12" :offset="0">
<el-form-item label="打卡类型" prop="playCardStart" label-width="110px">
<!-- <el-time-picker value-format="HH:mm" v-model="form.playCardStart" placeholder="请输入打卡开始时间" /> -->
<el-time-select
v-model="form.playCardStart"
style="width: 100%"
class="mr-4"
placeholder="请输入打卡开始时间"
value-format="HH:mm"
start="00:00"
step="00:15"
end="23:59"
/>
</el-form-item>
</el-col>
<el-col :span="12" :offset="0">
<el-form-item label="工作日" prop="playCardEnd" label-width="110px">
<!-- <el-time-picker value-format="HH:mm" v-model="form.playCardEnd" placeholder="请输入打卡结束时间" /> -->
<el-time-select
v-model="form.playCardEnd"
style="width: 100%"
:min-time="form.playCardStart"
class="mr-4"
placeholder="请输入打卡结束时间"
value-format="HH:mm"
start="00:00"
step="00:15"
end="23:59"
/>
</el-form-item>
</el-col>
<!-- <el-col :span="24" :offset="0">
<el-form-item label="安全协议书" prop="securityAgreement"> <el-form-item label="安全协议书" prop="securityAgreement">
<file-upload v-model="form.securityAgreement" :limit="1" :file-type="['pdf']" :file-size="50" /> <file-upload v-model="form.securityAgreement" :limit="1" :file-type="['pdf']" :file-size="50" />
</el-form-item> </el-form-item>
</el-col> </el-col> -->
</el-row> </el-row>
</div> </div>
</el-form> </el-form>