This commit is contained in:
2025-09-02 19:14:34 +08:00
16 changed files with 243 additions and 152 deletions

View File

@ -75,3 +75,11 @@ export const inventoryList = (id: any) => {
method: 'get' method: 'get'
}); });
}; };
//获取材料表信息
export const getMaterialInfo = (id: any) => {
return request({
url: '/materials/materials/listByFormCode/' + id,
method: 'get'
});
};

View File

@ -26,11 +26,11 @@
<el-tooltip effect="dark" placement="bottom"> <el-tooltip effect="dark" placement="bottom">
<ProjectSelector /> <ProjectSelector />
</el-tooltip> </el-tooltip>
<!-- <el-tooltip content="搜索" effect="dark" placement="bottom"> <el-tooltip content="搜索" effect="dark" placement="bottom">
<div class="right-menu-item hover-effect" @click="openSearchMenu"> <div class="right-menu-item hover-effect" @click="openSearchMenu">
<svg-icon class-name="search-icon" icon-class="search" /> <svg-icon class-name="search-icon" icon-class="search" />
</div> </div>
</el-tooltip> --> </el-tooltip>
<!-- 消息 --> <!-- 消息 -->
<el-tooltip :content="proxy.$t('navbar.message')" effect="dark" placement="bottom"> <el-tooltip :content="proxy.$t('navbar.message')" effect="dark" placement="bottom">
<div> <div>

View File

@ -5,7 +5,7 @@
<el-form :model="queryForm" :inline="true"> <el-form :model="queryForm" :inline="true">
<el-form-item label="版本号" prop="versions"> <el-form-item label="版本号" prop="versions">
<el-select v-model="queryForm.versions" placeholder="选择版本号" @change="changeVersions"> <el-select v-model="queryForm.versions" placeholder="选择版本号" @change="changeVersions">
<el-option v-for="item in options" :key="item.id" :label="item.versions" :value="item.id" /> <el-option v-for="item in options" :key="item.id" :label="item.versions" :value="item.versions" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="表名" prop="sheet"> <el-form-item label="表名" prop="sheet">

View File

@ -138,9 +138,14 @@
<el-table-column prop="useQuantity" label="剩余量" align="center"> <el-table-column prop="useQuantity" label="剩余量" align="center">
<template #default="scope"> <template #default="scope">
{{ {{
(scope.row.quantity ? Number(scope.row.quantity) : 0) - (scope.row.useQuantity ? Number(scope.row.useQuantity) : 0) == 0 (scope.row.quantity ? Number(scope.row.quantity) : 0) -
(scope.row.useQuantity ? Number(scope.row.useQuantity) : 0) -
(scope.row.selectNum ? Number(scope.row.selectNum) : 0) ==
0
? '' ? ''
: (scope.row.quantity ? Number(scope.row.quantity) : 0) - (scope.row.useQuantity ? Number(scope.row.useQuantity) : 0) : (scope.row.quantity ? Number(scope.row.quantity) : 0) -
(scope.row.selectNum ? Number(scope.row.selectNum) : 0) -
(scope.row.useQuantity ? Number(scope.row.useQuantity) : 0)
}} }}
</template> </template>
</el-table-column> </el-table-column>
@ -149,12 +154,16 @@
<el-table-column prop="price" label="总价" align="center"> <el-table-column prop="price" label="总价" align="center">
<template #default="scope"> <template #default="scope">
{{ {{
((scope.row.quantity ? Number(scope.row.quantity) : 0) - (scope.row.useQuantity ? Number(scope.row.useQuantity) : 0)) * ((scope.row.quantity ? Number(scope.row.quantity) : 0) -
(scope.row.useQuantity ? Number(scope.row.useQuantity) : 0) -
(scope.row.selectNum ? Number(scope.row.selectNum) : 0)) *
Number(scope.row.unitPrice) == Number(scope.row.unitPrice) ==
0 0
? '' ? ''
: ( : (
((scope.row.quantity ? Number(scope.row.quantity) : 0) - (scope.row.useQuantity ? Number(scope.row.useQuantity) : 0)) * ((scope.row.quantity ? Number(scope.row.quantity) : 0) -
(scope.row.useQuantity ? Number(scope.row.useQuantity) : 0) -
(scope.row.selectNum ? Number(scope.row.selectNum) : 0)) *
Number(scope.row.unitPrice) Number(scope.row.unitPrice)
).toFixed(2) ).toFixed(2)
}} }}

View File

@ -124,7 +124,7 @@ const loading = ref(false);
const options = ref<any[]>([]); const options = ref<any[]>([]);
const sheets = ref<any[]>([]); const sheets = ref<any[]>([]);
const tableData = ref<any[]>([]); const tableData = ref<any[]>([]);
const isExpandAll = ref(false); const isExpandAll = ref(true);
const reviewStatus = ref(''); const reviewStatus = ref('');
const versionObj: any = ref({}); const versionObj: any = ref({});
const versionMap = new Map(); const versionMap = new Map();

View File

@ -65,7 +65,7 @@
> >
<el-row :gutter="8" class="items-top"> <el-row :gutter="8" class="items-top">
<!-- 1. 专业选择核心统一所有角色的专业来源 --> <!-- 1. 专业选择核心统一所有角色的专业来源 -->
<el-col :span="3" class="mb-4 sm:mb-0 pl-4" style="margin-top:8px;"> <el-col :span="3" class="mb-4 sm:mb-0 pl-4" style="margin-top: 8px">
<el-form-item <el-form-item
:prop="`designers.${configIndex}.userMajor`" :prop="`designers.${configIndex}.userMajor`"
:rules="[ :rules="[
@ -76,7 +76,8 @@
label-width="60px" label-width="60px"
label="专业" label="专业"
> >
<el-select filterable <el-select
filterable
v-model="form.designers[configIndex].userMajor" v-model="form.designers[configIndex].userMajor"
placeholder="请选择专业" placeholder="请选择专业"
class="w-full transition-all duration-300 border-gray-300" class="w-full transition-all duration-300 border-gray-300"
@ -109,7 +110,8 @@
label="设计" label="设计"
label-width="50px" label-width="50px"
> >
<el-select filterable <el-select
filterable
v-model="person.userId" v-model="person.userId"
placeholder="选择人员" placeholder="选择人员"
class="w-full transition-all duration-300 border-gray-300" class="w-full transition-all duration-300 border-gray-300"
@ -165,7 +167,8 @@
label="校审" label="校审"
label-width="50px" label-width="50px"
> >
<el-select filterable <el-select
filterable
v-model="person.userId" v-model="person.userId"
placeholder="选择人员" placeholder="选择人员"
class="w-full transition-all duration-300 border-gray-300" class="w-full transition-all duration-300 border-gray-300"
@ -221,7 +224,8 @@
label="审定" label="审定"
label-width="50px" label-width="50px"
> >
<el-select filterable <el-select
filterable
v-model="person.userId" v-model="person.userId"
placeholder="选择人员" placeholder="选择人员"
class="w-full transition-all duration-300 border-gray-300" class="w-full transition-all duration-300 border-gray-300"
@ -277,7 +281,8 @@
label="审核" label="审核"
label-width="50px" label-width="50px"
> >
<el-select filterable <el-select
filterable
v-model="person.userId" v-model="person.userId"
placeholder="选择人员" placeholder="选择人员"
class="w-full transition-all duration-300 border-gray-300" class="w-full transition-all duration-300 border-gray-300"
@ -318,7 +323,7 @@
</el-col> </el-col>
<!-- 操作列 --> <!-- 操作列 -->
<el-col :span="2" class="text-right pr-4"> <el-col :span="2" class="pr-4 mt-2 text-right">
<el-button <el-button
type="text" type="text"
class="text-red-500 hover:text-red-700 transition-colors" class="text-red-500 hover:text-red-700 transition-colors"

View File

@ -81,7 +81,7 @@
<el-table v-loading="loading" :data="formalitiesAreConsolidatedList" @selection-change="handleSelectionChange" row-key="id" default-expand-all> <el-table v-loading="loading" :data="formalitiesAreConsolidatedList" @selection-change="handleSelectionChange" row-key="id" default-expand-all>
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="手续办理清单模板父级" align="center" prop="formalitiesPname" /> --> <!-- <el-table-column label="手续办理清单模板父级" align="center" prop="formalitiesPname" /> -->
<el-table-column label="手续办理清单" align="center" prop="formalitiesName" /> <el-table-column label="手续办理清单" align="left" prop="formalitiesName" />
<el-table-column label="计划开始时间" align="center" prop="planTheStartTime" width="180"> <el-table-column label="计划开始时间" align="center" prop="planTheStartTime" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.planTheStartTime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.planTheStartTime, '{y}-{m}-{d}') }}</span>

View File

@ -1,13 +1,11 @@
<template> <template>
<div class="p-2"> <div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
:leave-active-class="proxy?.animate.searchAnimate.leave">
<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" label-width="auto"> <el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="auto">
<el-form-item label="材料名称" prop="materialsName"> <el-form-item label="材料名称" prop="materialsName">
<el-input v-model="queryParams.materialsName" placeholder="请输入材料名称" clearable <el-input v-model="queryParams.materialsName" placeholder="请输入材料名称" clearable @keyup.enter="handleQuery" />
@keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="材料提供商" prop="companyId"> <el-form-item label="材料提供商" prop="companyId">
<el-select v-model="queryParams.companyId" clearable placeholder="全部"> <el-select v-model="queryParams.companyId" clearable placeholder="全部">
@ -27,22 +25,20 @@
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['materials:materials:add']"> 新增 <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['materials:materials:add']"> 新增 </el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['materials:materials:edit']"
>修改
</el-button> </el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['materials:materials:remove']"
v-hasPermi="['materials:materials:edit']">修改 >删除
</el-button> </el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['materials:materials:export']">导出 </el-button>
v-hasPermi="['materials:materials:remove']">删除
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport"
v-hasPermi="['materials:materials:export']">导出 </el-button>
</el-col> </el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
@ -72,25 +68,28 @@
<el-table-column fixed="right" label="操作" align="center" class-name="small-padding fixed-width" width="320"> <el-table-column fixed="right" label="操作" align="center" class-name="small-padding fixed-width" width="320">
<template #default="scope"> <template #default="scope">
<el-space> <el-space>
<el-button link type="primary" icon="View" @click="handleShowDrawer(scope.row)" <el-button link type="primary" icon="View" @click="handleShowDrawer(scope.row)" v-hasPermi="['materials:materials:query']">
v-hasPermi="['materials:materials:query']">
详情 详情
</el-button> </el-button>
<el-button link type="success" icon="Edit" @click="handleUpdate(scope.row)" <el-button link type="success" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['materials:materials:edit']"> 修改 </el-button>
v-hasPermi="['materials:materials:edit']"> 修改 </el-button> <el-button link type="danger" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['materials:materials:remove']">
<el-button link type="danger" icon="Delete" @click="handleDelete(scope.row)"
v-hasPermi="['materials:materials:remove']">
删除 删除
</el-button> </el-button>
<el-button v-hasPermi="['materials:materialsInventory:edit']" link type="primary" icon="Plus" <el-button
@click="handleAddMaterialsInventory(scope.row)"> 出入库 </el-button> v-hasPermi="['materials:materialsInventory:edit']"
link
type="primary"
icon="Plus"
@click="handleAddMaterialsInventory(scope.row)"
>
出入库
</el-button>
</el-space> </el-space>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card> </el-card>
<!-- 添加或修改材料名称对话框 --> <!-- 添加或修改材料名称对话框 -->
<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>
@ -121,12 +120,17 @@
<el-form-item label="材料文件" prop="fileOssIdMap"> <el-form-item label="材料文件" prop="fileOssIdMap">
<div :key="item.value" v-for="item in materials_file_type"> <div :key="item.value" v-for="item in materials_file_type">
<h3>{{ item.label }}</h3> <h3>{{ item.label }}</h3>
<file-upload v-model="ossIdMap[item.value]" :limit="1" :file-size="50" :file-type="['pdf']" <file-upload
v-model="ossIdMap[item.value]"
:limit="1"
:file-size="50"
:file-type="['pdf']"
@update:model-value=" @update:model-value="
(args) => { (args) => {
handleOssUpdate(args, item.value); handleOssUpdate(args, item.value);
} }
" /> "
/>
</div> </div>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -137,8 +141,7 @@
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<materials-inventory-add-dialog :materials-id="currentMaterialsId" :project-id="currentProject.id" ref="dialogRef" <materials-inventory-add-dialog :materials-id="currentMaterialsId" :project-id="currentProject.id" ref="dialogRef" @submit="getList" />
@submit="getList" />
<el-dialog title="材料详情" v-model="showDetailDrawer" width="700px"> <el-dialog title="材料详情" v-model="showDetailDrawer" width="700px">
<materials-detail-drawer :materials-id="currentMaterialsId" /> <materials-detail-drawer :materials-id="currentMaterialsId" />
</el-dialog> </el-dialog>

View File

@ -73,7 +73,10 @@
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="表单编号" prop="formCode"> <el-form-item label="表单编号" prop="formCode">
<el-input v-model="form.formCode" placeholder="请输入表单编号" /> <!-- <el-input v-model="form.formCode" placeholder="请输入表单编号" /> -->
<el-select v-model="form.formCode" placeholder="请选择表单编号" @change="(value) => formCodeChange(value)">
<el-option v-for="item in options" :key="item.formCode" :label="item.formCode" :value="item.formCode" />
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -247,7 +250,8 @@ import {
addMaterialIssue, addMaterialIssue,
updateMaterialIssue, updateMaterialIssue,
inventoryList, inventoryList,
getMaterialName getMaterialName,
getMaterialInfo
} from '@/api/materials/materialIssue'; } from '@/api/materials/materialIssue';
import { MaterialIssueVO, MaterialIssueQuery, MaterialIssueForm } from '@/api/materials/materialIssue/types'; import { MaterialIssueVO, MaterialIssueQuery, MaterialIssueForm } from '@/api/materials/materialIssue/types';
@ -529,8 +533,27 @@ const handleAdd = () => {
dialog.title = '添加物料领料单'; dialog.title = '添加物料领料单';
// 新增时初始计算材料名称 // 新增时初始计算材料名称
computeMaterialName(); computeMaterialName();
getFormData();
}; };
const options = ref([]);
//新增获取表单数据
const getFormData = async () => {
const res = await getMaterialInfo(currentProject.value.id);
if (res.code == 200) {
options.value = res.data;
}
};
const formCodeChange = (value) => {
console.log(value);
const selected = options.value.find((opt) => opt.formCode === value);
if (selected) {
form.value.materialName = selected.materialName;
form.value.orderingUnit = selected.orderingUnit;
form.value.supplierUnit = selected.supplierUnit;
optionsName.value = selected.materials;
}
};
/** 修改按钮操作 */ /** 修改按钮操作 */
const handleUpdate = async (row?: MaterialIssueVO) => { const handleUpdate = async (row?: MaterialIssueVO) => {
reset(); reset();
@ -682,7 +705,7 @@ watch(
onMounted(() => { onMounted(() => {
getList(); getList();
getName(); // getName();
}); });
// 监听项目id刷新数据 // 监听项目id刷新数据
@ -692,7 +715,7 @@ const listeningProject = watch(
queryParams.value.projectId = nid; queryParams.value.projectId = nid;
form.value.projectId = nid; form.value.projectId = nid;
getList(); getList();
getName(); // getName();
} }
); );

View File

@ -30,6 +30,9 @@
>一键全部保存</el-button >一键全部保存</el-button
> >
</el-form-item> </el-form-item>
<el-form-item>
<el-button type="primary" @click="toggleExpandAll">{{ isExpandAll ? '一键收起' : '一键展开' }}</el-button>
</el-form-item>
</el-form> </el-form>
<right-toolbar @queryTable="getMasterDataList"></right-toolbar> <right-toolbar @queryTable="getMasterDataList"></right-toolbar>
</el-row> </el-row>
@ -38,6 +41,7 @@
<el-table <el-table
:data="state.tableData" :data="state.tableData"
v-loading="state.loading.list" v-loading="state.loading.list"
ref="tableRef"
stripe stripe
style="width: 100%; margin-bottom: 20px; height: calc(100vh - 230px)" style="width: 100%; margin-bottom: 20px; height: calc(100vh - 230px)"
row-key="id" row-key="id"
@ -264,6 +268,17 @@ const formRules = reactive({
], ],
compileDate: [{ required: true, message: '请选择编制日期', trigger: 'change' }] compileDate: [{ required: true, message: '请选择编制日期', trigger: 'change' }]
}); });
// 展开状态
const isExpandAll = ref(false);
const tableRef = ref(null);
// 切换展开状态
const toggleExpandAll = () => {
isExpandAll.value = !isExpandAll.value;
console.log(isExpandAll.value);
state.tableData.forEach((row) => {
tableRef.value.toggleRowExpansion(row, isExpandAll.value);
});
};
// 获取主表数据 // 获取主表数据
async function getMasterDataList() { async function getMasterDataList() {
try { try {

View File

@ -81,7 +81,7 @@
<el-form-item label="计划产值(元)" prop="planValue"> <el-form-item label="计划产值(元)" prop="planValue">
<el-input v-model="form.planValue" placeholder="请输入计划产值" type="number" /> <el-input v-model="form.planValue" placeholder="请输入计划产值" type="number" />
</el-form-item> </el-form-item>
<el-form-item label="计划月份(元)" prop="planMonth"> <el-form-item label="计划月份" prop="planMonth">
<el-date-picker v-model="form.planMonth" type="month" value-format="YYYY-MM" placeholder="请选择计划月份" /> <el-date-picker v-model="form.planMonth" type="month" value-format="YYYY-MM" placeholder="请选择计划月份" />
</el-form-item> </el-form-item>
<el-form-item label="产值类型" prop="valueType"> <el-form-item label="产值类型" prop="valueType">

View File

@ -431,6 +431,7 @@ const handleView = async (row: LandBlockVO) => {
formM.landId = row.id; formM.landId = row.id;
// 打开弹窗 // 打开弹窗
dialogMatrix.visible = true; dialogMatrix.visible = true;
dialogMatrix.title = `关联方阵(地块:${row.landName || row.landCode}`; dialogMatrix.title = `关联方阵(地块:${row.landName || row.landCode}`;
}; };

View File

@ -10,7 +10,7 @@
<el-option v-for="item in options" :key="item.versions" :label="item.versions" :value="item.versions" /> <el-option v-for="item in options" :key="item.versions" :label="item.versions" :value="item.versions" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="表名" prop="sheet"> <el-form-item label="表名" prop="sheet" v-if="activeTab != '3'">
<el-select v-model="queryForm.sheet" placeholder="选择表名" @change="changeSheet"> <el-select v-model="queryForm.sheet" placeholder="选择表名" @change="changeSheet">
<el-option v-for="item in sheets" :key="item" :label="item" :value="item" /> <el-option v-for="item in sheets" :key="item" :label="item" :value="item" />
</el-select> </el-select>

View File

@ -191,9 +191,14 @@
<el-table-column prop="useQuantity" label="剩余量" align="center"> <el-table-column prop="useQuantity" label="剩余量" align="center">
<template #default="scope"> <template #default="scope">
{{ {{
(scope.row.quantity ? Number(scope.row.quantity) : 0) - (scope.row.useQuantity ? Number(scope.row.useQuantity) : 0) == 0 (scope.row.quantity ? Number(scope.row.quantity) : 0) -
(scope.row.useQuantity ? Number(scope.row.useQuantity) : 0) -
(scope.row.selectNum ? Number(scope.row.selectNum) : 0) ==
0
? '' ? ''
: (scope.row.quantity ? Number(scope.row.quantity) : 0) - (scope.row.useQuantity ? Number(scope.row.useQuantity) : 0) : (scope.row.quantity ? Number(scope.row.quantity) : 0) -
(scope.row.selectNum ? Number(scope.row.selectNum) : 0) -
(scope.row.useQuantity ? Number(scope.row.useQuantity) : 0)
}} }}
</template> </template>
</el-table-column> </el-table-column>
@ -219,12 +224,16 @@
<el-table-column prop="price" label="总价" align="center"> <el-table-column prop="price" label="总价" align="center">
<template #default="scope"> <template #default="scope">
{{ {{
((scope.row.quantity ? Number(scope.row.quantity) : 0) - (scope.row.useQuantity ? Number(scope.row.useQuantity) : 0)) * ((scope.row.quantity ? Number(scope.row.quantity) : 0) -
(scope.row.useQuantity ? Number(scope.row.useQuantity) : 0) -
(scope.row.selectNum ? Number(scope.row.selectNum) : 0)) *
Number(scope.row.unitPrice) == Number(scope.row.unitPrice) ==
0 0
? '' ? ''
: ( : (
((scope.row.quantity ? Number(scope.row.quantity) : 0) - (scope.row.useQuantity ? Number(scope.row.useQuantity) : 0)) * ((scope.row.quantity ? Number(scope.row.quantity) : 0) -
(scope.row.useQuantity ? Number(scope.row.useQuantity) : 0) -
(scope.row.selectNum ? Number(scope.row.selectNum) : 0)) *
Number(scope.row.unitPrice) Number(scope.row.unitPrice)
).toFixed(2) ).toFixed(2)
}} }}

View File

@ -234,17 +234,17 @@
<!-- 第十一行注册人员数量仅劳务类型显示 --> <!-- 第十一行注册人员数量仅劳务类型显示 -->
<el-row :gutter="20" class="mb-4" v-if="form.supplierType === '劳务'"> <el-row :gutter="20" class="mb-4" v-if="form.supplierType === '劳务'">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="一建建造师" prop="build1"> <el-form-item label="一建建造师" prop="firstBuildingNumber">
<el-input v-model="form.build1" placeholder="请输入一建建造师数量" clearable /> <el-input v-model="form.firstBuildingNumber" placeholder="请输入一建建造师数量" clearable />
</el-form-item> </el-form-item>
<el-form-item label="二建建造师" prop="build2"> <el-form-item label="二建建造师" prop="secondBuildingNumber">
<el-input v-model="form.build2" placeholder="请输入二建建造师数量" clearable /> <el-input v-model="form.secondBuildingNumber" placeholder="请输入二建建造师数量" clearable />
</el-form-item> </el-form-item>
<el-form-item label="注册造价工程师" prop="build3"> <el-form-item label="注册造价工程师" prop="registeredEngineerNumber">
<el-input v-model="form.build3" placeholder="请输入注册造价工程师数量" clearable /> <el-input v-model="form.registeredEngineerNumber" placeholder="请输入注册造价工程师数量" clearable />
</el-form-item> </el-form-item>
<el-form-item label="其他(分别写)" prop="build4"> <el-form-item label="其他(分别写)" prop="otherBuildingNumber">
<el-input v-model="form.build4" placeholder="请输入其他人员数量" clearable /> <el-input v-model="form.otherBuildingNumber" placeholder="请输入其他人员数量" clearable />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -254,17 +254,17 @@
<!-- 第十二行职称人员数量仅劳务类型显示 --> <!-- 第十二行职称人员数量仅劳务类型显示 -->
<el-row :gutter="20" class="mb-4" v-if="form.supplierType === '劳务'"> <el-row :gutter="20" class="mb-4" v-if="form.supplierType === '劳务'">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="高级工程师人数" prop="personnelNumber1"> <el-form-item label="高级工程师人数" prop="seniorEngineerNumber">
<el-input v-model="form.personnelNumber1" placeholder="请输高级工程师数量" clearable /> <el-input v-model="form.seniorEngineerNumber" placeholder="请输高级工程师数量" clearable />
</el-form-item> </el-form-item>
<el-form-item label="工程师数量" prop="personnelNumber2"> <el-form-item label="工程师数量" prop="engineerNumber">
<el-input v-model="form.personnelNumber2" placeholder="请输入工程师数量" clearable /> <el-input v-model="form.engineerNumber" placeholder="请输入工程师数量" clearable />
</el-form-item> </el-form-item>
<el-form-item label="助理工程师数量" prop="personnelNumber3"> <el-form-item label="助理工程师数量" prop="assistantEngineerNumber">
<el-input v-model="form.personnelNumber3" placeholder="请输入助理工程师数量" clearable /> <el-input v-model="form.assistantEngineerNumber" placeholder="请输入助理工程师数量" clearable />
</el-form-item> </el-form-item>
<el-form-item label="其他人员数量" prop="personnelNumber4"> <el-form-item label="其他人员数量" prop="otherPersonnelNumber">
<el-input v-model="form.personnelNumber4" placeholder="请输入其他人员数量" clearable /> <el-input v-model="form.otherPersonnelNumber" placeholder="请输入其他人员数量" clearable />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -369,14 +369,14 @@ const initFormData: any = {
inputFile: undefined, inputFile: undefined,
// state: '0', // 新增默认待审核 // state: '0', // 新增默认待审核
// 新增:用于表单输入的单独字段 // 新增:用于表单输入的单独字段
build1: undefined, // 一建建造师 firstBuildingNumber: undefined, // 一建建造师
build2: undefined, // 二建建造师 secondBuildingNumber: undefined, // 二建建造师
build3: undefined, // 注册造价工程师 registeredEngineerNumber: undefined, // 注册造价工程师
build4: undefined, // 其他注册人员 otherBuildingNumber: undefined, // 其他注册人员
personnelNumber1: undefined, // 高级工程师 seniorEngineerNumber: undefined, // 高级工程师
personnelNumber2: undefined, // 工程师 engineerNumber: undefined, // 工程师
personnelNumber3: undefined, // 助理工程师 assistantEngineerNumber: undefined, // 助理工程师
personnelNumber4: undefined // 其他职称人员 otherPersonnelNumber: undefined // 其他职称人员
}; };
// 核心数据(表单+查询参数) // 核心数据(表单+查询参数)
const data = reactive<PageData<SupplierInputForm, SupplierInputQuery>>({ const data = reactive<PageData<SupplierInputForm, SupplierInputQuery>>({
@ -411,14 +411,14 @@ const rules = computed(() => {
{ pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号格式', trigger: 'blur' } { pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号格式', trigger: 'blur' }
], ],
id: [{ required: true, message: 'ID不能为空', trigger: 'blur' }], id: [{ required: true, message: 'ID不能为空', trigger: 'blur' }],
build1: [{ required: true, message: '请输入一建建造师数量', trigger: 'change' }], firstBuildingNumber: [{ required: true, message: '请输入一建建造师数量', trigger: 'change' }],
build2: [{ required: true, message: '请输入二建建造师数量', trigger: 'change' }], secondBuildingNumber: [{ required: true, message: '请输入二建建造师数量', trigger: 'change' }],
build3: [{ required: true, message: '请输入注册造价工程师数量', trigger: 'change' }], registeredEngineerNumber: [{ required: true, message: '请输入注册造价工程师数量', trigger: 'change' }],
build4: [{ required: true, message: '请输入其他数量', trigger: 'change' }], otherBuildingNumber: [{ required: true, message: '请输入其他数量', trigger: 'change' }],
personnelNumber1: [{ required: true, message: '请输入高级工程师数量', trigger: 'change' }], seniorEngineerNumber: [{ required: true, message: '请输入高级工程师数量', trigger: 'change' }],
personnelNumber2: [{ required: true, message: '请输入工程师数量', trigger: 'change' }], engineerNumber: [{ required: true, message: '请输入工程师数量', trigger: 'change' }],
personnelNumber3: [{ required: true, message: '请输入助理工程师数量', trigger: 'change' }], assistantEngineerNumber: [{ required: true, message: '请输入助理工程师数量', trigger: 'change' }],
personnelNumber4: [{ required: true, message: '请输入其他数量', trigger: 'change' }] otherPersonnelNumber: [{ required: true, message: '请输入其他数量', trigger: 'change' }]
}; };
// 仅当类型为"劳务"时,添加安全生产许可证+人员数量校验 // 仅当类型为"劳务"时,添加安全生产许可证+人员数量校验
@ -430,15 +430,15 @@ const rules = computed(() => {
safeCodeData: [{ required: true, message: '请选择安全生产许可证发证日期', trigger: 'change' }], safeCodeData: [{ required: true, message: '请选择安全生产许可证发证日期', trigger: 'change' }],
safeCertificateValidity: [{ required: true, message: '请选择安全生产许可证有效期', trigger: 'change' }], safeCertificateValidity: [{ required: true, message: '请选择安全生产许可证有效期', trigger: 'change' }],
// 注册人员数量校验 // 注册人员数量校验
build1: [{ required: true, message: '请输入一建建造师数量', trigger: 'blur' }], firstBuildingNumber: [{ required: true, message: '请输入一建建造师数量', trigger: 'blur' }],
build2: [{ required: true, message: '请输入二建建造师数量', trigger: 'blur' }], secondBuildingNumber: [{ required: true, message: '请输入二建建造师数量', trigger: 'blur' }],
build3: [{ required: true, message: '请输入注册造价工程师数量', trigger: 'blur' }], registeredEngineerNumber: [{ required: true, message: '请输入注册造价工程师数量', trigger: 'blur' }],
build4: [{ required: true, message: '请输入其他注册人员数量', trigger: 'blur' }], otherBuildingNumber: [{ required: true, message: '请输入其他注册人员数量', trigger: 'blur' }],
// 职称人员数量校验 // 职称人员数量校验
personnelNumber1: [{ required: true, message: '请输入高级工程师数量', trigger: 'blur' }], seniorEngineerNumber: [{ required: true, message: '请输入高级工程师数量', trigger: 'blur' }],
personnelNumber2: [{ required: true, message: '请输入工程师数量', trigger: 'blur' }], engineerNumber: [{ required: true, message: '请输入工程师数量', trigger: 'blur' }],
personnelNumber3: [{ required: true, message: '请输入助理工程师数量', trigger: 'blur' }], assistantEngineerNumber: [{ required: true, message: '请输入助理工程师数量', trigger: 'blur' }],
personnelNumber4: [{ required: true, message: '请输入其他职称人员数量', trigger: 'blur' }] otherPersonnelNumber: [{ required: true, message: '请输入其他职称人员数量', trigger: 'blur' }]
}; };
} }
@ -455,22 +455,26 @@ const handleTypeChange = () => {
form.value.registeredNumber = undefined; form.value.registeredNumber = undefined;
form.value.personnelNumber = undefined; form.value.personnelNumber = undefined;
// 清空表单单独字段 // 清空表单单独字段
form.value.build1 = form.value.build2 = form.value.build3 = form.value.build4 = undefined; form.value.firstBuildingNumber =
form.value.personnelNumber1 = form.value.personnelNumber2 = form.value.personnelNumber3 = form.value.personnelNumber4 = undefined; form.value.secondBuildingNumber =
form.value.registeredEngineerNumber =
form.value.otherBuildingNumber =
undefined;
form.value.seniorEngineerNumber = form.value.engineerNumber = form.value.assistantEngineerNumber = form.value.otherPersonnelNumber = undefined;
} }
// 重置隐藏字段的校验状态,避免错误提示残留 // 重置隐藏字段的校验状态,避免错误提示残留
supplierInputFormRef.value?.clearValidate([ supplierInputFormRef.value?.clearValidate([
'safeCode', 'safeCode',
'safeCodeData', 'safeCodeData',
'safeCertificateValidity', 'safeCertificateValidity',
'build1', 'firstBuildingNumber',
'build2', 'secondBuildingNumber',
'build3', 'registeredEngineerNumber',
'build4', 'otherBuildingNumber',
'personnelNumber1', 'seniorEngineerNumber',
'personnelNumber2', 'engineerNumber',
'personnelNumber3', 'assistantEngineerNumber',
'personnelNumber4' 'otherPersonnelNumber'
]); ]);
}; };
@ -517,18 +521,18 @@ const resetQuery = () => {
const splitBackEndStrToForm = (resData: any) => { const splitBackEndStrToForm = (resData: any) => {
if (resData.registeredNumber) { if (resData.registeredNumber) {
const registeredArr = resData.registeredNumber.split(','); const registeredArr = resData.registeredNumber.split(',');
form.value.build1 = registeredArr[0] || undefined; // 一建建造师 form.value.firstBuildingNumber = registeredArr[0] || undefined; // 一建建造师
form.value.build2 = registeredArr[1] || undefined; // 二建建造师 form.value.secondBuildingNumber = registeredArr[1] || undefined; // 二建建造师
form.value.build3 = registeredArr[2] || undefined; // 注册造价工程师 form.value.registeredEngineerNumber = registeredArr[2] || undefined; // 注册造价工程师
form.value.build4 = registeredArr[3] || undefined; // 其他注册人员 form.value.otherBuildingNumber = registeredArr[3] || undefined; // 其他注册人员
} }
if (resData.personnelNumber) { if (resData.personnelNumber) {
const personnelArr = resData.personnelNumber.split(','); const personnelArr = resData.personnelNumber.split(',');
form.value.personnelNumber1 = personnelArr[0] || undefined; // 高级工程师 form.value.seniorEngineerNumber = personnelArr[0] || undefined; // 高级工程师
form.value.personnelNumber2 = personnelArr[1] || undefined; // 工程师 form.value.engineerNumber = personnelArr[1] || undefined; // 工程师
form.value.personnelNumber3 = personnelArr[2] || undefined; // 助理工程师 form.value.assistantEngineerNumber = personnelArr[2] || undefined; // 助理工程师
form.value.personnelNumber4 = personnelArr[3] || undefined; // 其他职称人员 form.value.otherPersonnelNumber = personnelArr[3] || undefined; // 其他职称人员
} }
}; };
/** 审核过程按钮操作 */ /** 审核过程按钮操作 */
@ -599,19 +603,23 @@ const submitForm = () => {
supplierInputFormRef.value?.validate(async (valid: boolean) => { supplierInputFormRef.value?.validate(async (valid: boolean) => {
if (!valid) return; if (!valid) return;
if (form.value.supplierType === '劳务') { if (form.value.supplierType === '劳务') {
form.value.registeredNumber = [form.value.build1, form.value.build2, form.value.build3, form.value.build4].join(','); form.value.registeredNumber = [
form.value.firstBuildingNumber,
form.value.secondBuildingNumber,
form.value.registeredEngineerNumber,
form.value.otherBuildingNumber
].join(',');
form.value.personnelNumber = [ form.value.personnelNumber = [
form.value.personnelNumber1, form.value.seniorEngineerNumber,
form.value.personnelNumber2, form.value.engineerNumber,
form.value.personnelNumber3, form.value.assistantEngineerNumber,
form.value.personnelNumber4 form.value.otherPersonnelNumber
].join(','); ].join(',');
} }
buttonLoading.value = true; buttonLoading.value = true;
try { try {
if (fileUploadRef.value) { if (fileUploadRef.value) {
await fileUploadRef.value.submitUpload().then((res) => { await fileUploadRef.value.submitUpload().then((res) => {
console.log(res);
if (res == 'noFile') { if (res == 'noFile') {
proxy?.$modal.msgError('请上传文件'); proxy?.$modal.msgError('请上传文件');
return; return;

View File

@ -122,41 +122,41 @@
</el-row> </el-row>
<el-row class="mb-4" v-if="form.supplierType === '劳务'"> <el-row class="mb-4" v-if="form.supplierType === '劳务'">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="一建建造师" prop="build1"> <el-form-item label="一建建造师" prop="firstBuildingNumber">
<el-input v-model="form.build1" placeholder="请输入一建建造师数量" clearable /> <el-input v-model="form.firstBuildingNumber" placeholder="请输入一建建造师数量" clearable />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="二建建造师" prop="build2"> <el-form-item label="二建建造师" prop="secondBuildingNumber">
<el-input v-model="form.build2" placeholder="请输入二建建造师数量" clearable /> <el-input v-model="form.secondBuildingNumber" placeholder="请输入二建建造师数量" clearable />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="其他(分别写)" prop="build4"> <el-form-item label="其他(分别写)" prop="otherBuildingNumber">
<el-input v-model="form.build3" placeholder="请输入其他人员数量" clearable /> <el-input v-model="form.otherBuildingNumber" placeholder="请输入其他人员数量" clearable />
</el-form-item> </el-col </el-form-item> </el-col
><el-col :span="12"> ><el-col :span="12">
<el-form-item label="注册造价工程师" prop="build3"> <el-form-item label="注册造价工程师" prop="registeredEngineerNumber">
<el-input v-model="form.build4" placeholder="请输入注册造价工程师数量" clearable /> <el-input v-model="form.registeredEngineerNumber" placeholder="请输入注册造价工程师数量" clearable />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="24" class="mb-4" v-if="form.supplierType === '劳务'"> <el-row :gutter="24" class="mb-4" v-if="form.supplierType === '劳务'">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="高级工程师人数" prop="personnelNumber1"> <el-form-item label="高级工程师人数" prop="seniorEngineerNumber">
<el-input v-model="form.personnelNumber1" placeholder="请输高级工程师数量" clearable /> <el-input v-model="form.seniorEngineerNumber" placeholder="请输高级工程师数量" clearable />
</el-form-item> </el-col </el-form-item> </el-col
><el-col :span="12"> ><el-col :span="12">
<el-form-item label="工程师数量" prop="personnelNumber2"> <el-form-item label="工程师数量" prop="engineerNumber">
<el-input v-model="form.personnelNumber2" placeholder="请输入工程师数量" clearable /> <el-input v-model="form.engineerNumber" placeholder="请输入工程师数量" clearable />
</el-form-item> </el-col </el-form-item> </el-col
><el-col :span="12"> ><el-col :span="12">
<el-form-item label="助理工程师数量" prop="personnelNumber3"> <el-form-item label="助理工程师数量" prop="assistantEngineerNumber">
<el-input v-model="form.personnelNumber3" placeholder="请输入助理工程师数量" clearable /> <el-input v-model="form.assistantEngineerNumber" placeholder="请输入助理工程师数量" clearable />
</el-form-item> </el-col </el-form-item> </el-col
><el-col :span="12"> ><el-col :span="12">
<el-form-item label="其他人员数量" prop="personnelNumber4"> <el-form-item label="其他人员数量" prop="otherPersonnelNumber">
<el-input v-model="form.personnelNumber4" placeholder="请输入其他人员数量" clearable /> <el-input v-model="form.otherPersonnelNumber" placeholder="请输入其他人员数量" clearable />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -270,14 +270,14 @@ const initFormData = {
inputFile: undefined, inputFile: undefined,
state: '0', // 新增默认待审核 state: '0', // 新增默认待审核
// 新增:用于表单输入的单独字段 // 新增:用于表单输入的单独字段
build1: undefined, // 一建建造师 firstBuildingNumber: undefined, // 一建建造师
build2: undefined, // 二建建造师 secondBuildingNumber: undefined, // 二建建造师
build3: undefined, // 注册造价工程师 registeredEngineerNumber: undefined, // 注册造价工程师
build4: undefined, // 其他注册人员 otherBuildingNumber: undefined, // 其他注册人员
personnelNumber1: undefined, // 高级工程师 seniorEngineerNumber: undefined, // 高级工程师
personnelNumber2: undefined, // 工程师 engineerNumber: undefined, // 工程师
personnelNumber3: undefined, // 助理工程师 assistantEngineerNumber: undefined, // 助理工程师
personnelNumber4: undefined // 其他职称人员 otherPersonnelNumber: undefined
}; };
const data = reactive<PageData<LeaveForm, LeaveQuery>>({ const data = reactive<PageData<LeaveForm, LeaveQuery>>({
form: { ...initFormData }, form: { ...initFormData },
@ -332,17 +332,27 @@ const getInfo = () => {
buttonLoading.value = false; buttonLoading.value = false;
nextTick(async () => { nextTick(async () => {
const res = await getSupplierInput(routeParams.value.id); const res = await getSupplierInput(routeParams.value.id);
console.log(res, '------------------res');
Object.assign(form.value, res.data); Object.assign(form.value, res.data);
form.value.registeredNumber = form.value.registeredNumber?.split(','); // form.value.firstBuildingNumber=res.data.firstBuildingNumber, // 一建建造师
form.value.build1 = form.value.registeredNumber[0] || ''; // secondBuildingNumber: undefined, // 二建建造师
form.value.build2 = form.value.registeredNumber[1] || ''; // registeredEngineerNumber: undefined, // 注册造价工程师
form.value.build3 = form.value.registeredNumber[2] || ''; // otherBuildingNumber: undefined, // 其他注册人员
form.value.build4 = form.value.registeredNumber[3] || ''; // seniorEngineerNumber: undefined, // 高级工程师
form.value.personnelNumber = form.value.personnelNumber?.split(','); // engineerNumber: undefined, // 工程师
form.value.personnelNumber1 = form.value.personnelNumber[0] || ''; // assistantEngineerNumber: undefined, // 助理工程师
form.value.personnelNumber2 = form.value.personnelNumber[1] || ''; // otherPersonnelNumber: undefined
form.value.personnelNumber3 = form.value.personnelNumber[2] || ''; // form.value.registeredNumber = form.value.registeredNumber?.split(',');
form.value.personnelNumber4 = form.value.personnelNumber[3] || ''; // form.value.build1 = form.value.registeredNumber[0] || '';
// form.value.build2 = form.value.registeredNumber[1] || '';
// form.value.build3 = form.value.registeredNumber[2] || '';
// form.value.build4 = form.value.registeredNumber[3] || '';
// form.value.personnelNumber = form.value.personnelNumber?.split(',');
// form.value.personnelNumber1 = form.value.personnelNumber[0] || '';
// form.value.personnelNumber2 = form.value.personnelNumber[1] || '';
// form.value.personnelNumber3 = form.value.personnelNumber[2] || '';
// form.value.personnelNumber4 = form.value.personnelNumber[3] || '';
loading.value = false; loading.value = false;
buttonLoading.value = false; buttonLoading.value = false;