合并
This commit is contained in:
		
							
								
								
									
										55
									
								
								src/api/bidding/biddingLimit/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								src/api/bidding/biddingLimit/index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,55 @@ | |||||||
|  | import request from '@/utils/request'; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 导入成本-投标excel | ||||||
|  |  * @param query | ||||||
|  |  * @returns {*} | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | export const BiddingImportExcelFile = (params?, data?) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/biddingLimitList/importExcelFile', | ||||||
|  |     method: 'post', | ||||||
|  |     params, | ||||||
|  |     data | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  | //  导出成本-投标excel | ||||||
|  | export const biddingLimitListExport = (data?) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/biddingLimitList/export', | ||||||
|  |     method: 'post', | ||||||
|  |     data | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  | //  获取成本-投标详细信息 | ||||||
|  | export const biddingLimitList = (id?) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/biddingLimitList/' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  | //  查询成本-投标列表 | ||||||
|  | export const getTreeLimit = (params?) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/biddingLimitList/getTree', | ||||||
|  |     method: 'get', | ||||||
|  |     params: params | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  | //  修改成本-投标 | ||||||
|  | export const biddingLimitListUpdate = (data?) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/biddingLimitList', | ||||||
|  |     method: 'put', | ||||||
|  |     data | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  | //获取sheet | ||||||
|  | export const sheetList = (query) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/biddingLimitList/sheetList', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }); | ||||||
|  | }; | ||||||
| @ -74,7 +74,7 @@ export const delPlanning = (query: any): AxiosPromise<any> => { | |||||||
|     method: 'delete' |     method: 'delete' | ||||||
|   }); |   }); | ||||||
| }; | }; | ||||||
|  | //导出分标 | ||||||
| export const importExcelFile = (params: any, data: any): AxiosPromise => { | export const importExcelFile = (params: any, data: any): AxiosPromise => { | ||||||
|   return request({ |   return request({ | ||||||
|     url: '/tender/billofquantitiesLimitList/importExcelFile', |     url: '/tender/billofquantitiesLimitList/importExcelFile', | ||||||
| @ -83,3 +83,11 @@ export const importExcelFile = (params: any, data: any): AxiosPromise => { | |||||||
|     data |     data | ||||||
|   }); |   }); | ||||||
| }; | }; | ||||||
|  | //获取详情 | ||||||
|  | export const getDetailsList = (query: any): AxiosPromise<any> => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/tender/segmentedIndicatorPlanning/getMore', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| <template> | <template> | ||||||
|   <div class="p-6 bg-gray-50 main"> |   <div class="p-6 bg-gray-50 main"> | ||||||
|     <div class="appWidth1 mx-auto mt-38 bg-white rounded-xl shadow-sm overflow-hidden transition-all duration-300 hover:shadow-md"> |     <div class="appWidth2 mx-auto mt-38 bg-white rounded-xl shadow-sm overflow-hidden transition-all duration-300 hover:shadow-md"> | ||||||
|       <!-- 表单标题区域 --> |       <!-- 表单标题区域 --> | ||||||
|       <div class="bg-gradient-to-r from-blue-500 to-blue-600 text-white p-6"> |       <div class="bg-gradient-to-r from-blue-500 to-blue-600 text-white p-6"> | ||||||
|         <h2 class="text-2xl font-bold flex items-center"><i class="el-icon-user-circle mr-3"></i>人员配置</h2> |         <h2 class="text-2xl font-bold flex items-center"><i class="el-icon-user-circle mr-3"></i>人员配置</h2> | ||||||
| @ -114,7 +114,6 @@ const getBiddingUser = async () => { | |||||||
|       isDisabled.value = true; |       isDisabled.value = true; | ||||||
|     } |     } | ||||||
|   } catch (error) { |   } catch (error) { | ||||||
|     ElMessage.error('获取配置数据失败'); |  | ||||||
|     // 添加默认空项 |     // 添加默认空项 | ||||||
|   } finally { |   } finally { | ||||||
|     loading.close(); |     loading.close(); | ||||||
| @ -184,7 +183,7 @@ onUnmounted(() => { | |||||||
| .main { | .main { | ||||||
|   height: calc(100vh - 90px); |   height: calc(100vh - 90px); | ||||||
| } | } | ||||||
| .appWidth1 { | .appWidth2 { | ||||||
|   width: 50vw; |   width: 50vw; | ||||||
|   max-width: 1200px; |   max-width: 1200px; | ||||||
|   .el-select__wrapper { |   .el-select__wrapper { | ||||||
| @ -303,7 +302,7 @@ onUnmounted(() => { | |||||||
|  |  | ||||||
| // 适配小屏幕 | // 适配小屏幕 | ||||||
| @media (max-width: 768px) { | @media (max-width: 768px) { | ||||||
|   .appWidth1 { |   .appWidth2 { | ||||||
|     width: 95vw; |     width: 95vw; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  | |||||||
							
								
								
									
										239
									
								
								src/views/biddingManagemen/biddingLimit/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										239
									
								
								src/views/biddingManagemen/biddingLimit/index.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,239 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="p-2"> | ||||||
|  |     <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> | ||||||
|  |       <el-card shadow="always"> | ||||||
|  |         <el-form :model="queryForm" :inline="true"> | ||||||
|  |           <el-form-item label="表名" prop="sheet"> | ||||||
|  |             <el-select v-model="queryForm.sheet" placeholder="选择表名" @change="changeSheet"> | ||||||
|  |               <el-option v-for="item in sheets" :key="item" :label="item" :value="item" /> | ||||||
|  |             </el-select> | ||||||
|  |           </el-form-item> | ||||||
|  |           <el-form-item> | ||||||
|  |             <el-button type="primary" @click="toggleExpandAll">{{ isExpandAll ? '一键收起' : '一键展开' }}</el-button> | ||||||
|  |           </el-form-item> | ||||||
|  |           <el-form-item> | ||||||
|  |             <el-upload | ||||||
|  |               ref="uploadRef" | ||||||
|  |               class="upload-demo" | ||||||
|  |               :http-request="importExcel" | ||||||
|  |               :show-file-list="false" | ||||||
|  |               v-hasPermi="['bidding:biddingLimitList:importExcelFile']" | ||||||
|  |             > | ||||||
|  |               <template #trigger> | ||||||
|  |                 <el-button type="primary">导入excel</el-button> | ||||||
|  |               </template> | ||||||
|  |             </el-upload> | ||||||
|  |           </el-form-item> | ||||||
|  |           <el-form-item> | ||||||
|  |             <el-button type="primary" @click="handleExport()" v-hasPermi="['bidding:biddingLimitList:export']">导出excel</el-button> | ||||||
|  |           </el-form-item> | ||||||
|  |         </el-form> | ||||||
|  |       </el-card> | ||||||
|  |     </transition> | ||||||
|  |     <el-card shadow="never" class="mb8"> | ||||||
|  |       <el-table ref="tableRef" v-loading="loading" :data="tableData" row-key="id" border lazy default-expand-all> | ||||||
|  |         <el-table-column prop="num" label="编号" /> | ||||||
|  |         <el-table-column prop="name" label="工程或费用名称" /> | ||||||
|  |         <el-table-column prop="unit" label="单位" /> | ||||||
|  |         <el-table-column prop="quantity" label="数量" /> | ||||||
|  |         <el-table-column prop="remark" label="单价" align="center"> | ||||||
|  |           <template #default="scope"> | ||||||
|  |             <el-input-number | ||||||
|  |               :model-value="scope.row.unitPrice" | ||||||
|  |               @change="(val) => (scope.row.unitPrice = val)" | ||||||
|  |               :precision="2" | ||||||
|  |               :step="0.1" | ||||||
|  |               :controls="false" | ||||||
|  |               v-if="scope.row.quantity && scope.row.quantity != 0" | ||||||
|  |             /> | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|  |         <el-table-column prop="price" label="总价" align="center"> | ||||||
|  |           <template #default="scope"> | ||||||
|  |             {{ scope.row.price }} | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|  |         <el-table-column prop="price" label="操作" align="center"> | ||||||
|  |           <template #default="scope"> | ||||||
|  |             <el-button | ||||||
|  |               type="primary" | ||||||
|  |               size="small" | ||||||
|  |               @click="handleSave(scope.row)" | ||||||
|  |               v-if="scope.row.quantity && scope.row.quantity != 0" | ||||||
|  |               v-hasPermi="['bidding:biddingLimitList:edit']" | ||||||
|  |               >修改</el-button | ||||||
|  |             > | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|  |       </el-table> | ||||||
|  |     </el-card> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script setup lang="ts"> | ||||||
|  | import { useUserStoreHook } from '@/store/modules/user'; | ||||||
|  | import { obtainAllVersionNumbers } from '@/api/contract/index'; | ||||||
|  | import { BiddingImportExcelFile, getTreeLimit, biddingLimitListUpdate, sheetList } from '@/api/bidding/biddingLimit'; | ||||||
|  | const { proxy } = getCurrentInstance() as ComponentInternalInstance; | ||||||
|  |  | ||||||
|  | const userStore = useUserStoreHook(); | ||||||
|  | const currentProject = computed(() => userStore.selectedProject); | ||||||
|  | const queryForm = ref({ | ||||||
|  |   versions: '', | ||||||
|  |   sheet: '' | ||||||
|  | }); | ||||||
|  | const loading = ref(false); | ||||||
|  | const options = ref<any[]>([]); | ||||||
|  | const sheets = ref<any[]>([]); | ||||||
|  | const tableData = ref<any[]>([]); | ||||||
|  | const isExpandAll = ref(true); | ||||||
|  |  | ||||||
|  | //获取版本号 | ||||||
|  | const getVersionNums = async () => { | ||||||
|  |   try { | ||||||
|  |     const params = { | ||||||
|  |       projectId: currentProject.value?.id, | ||||||
|  |       pageSize: 1000, | ||||||
|  |       pageNum: 1 | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     const res = await obtainAllVersionNumbers(params); | ||||||
|  |     if (res.code == 200) { | ||||||
|  |       options.value = res.data; | ||||||
|  |       if (res.data.length > 0) { | ||||||
|  |         queryForm.value.versions = res.data[0]; | ||||||
|  |         getSheetName(); | ||||||
|  |       } else { | ||||||
|  |         queryForm.value.versions = ''; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } catch (error) { | ||||||
|  |     console.log(error); | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  | //选择版本号 | ||||||
|  | const changeVersions = () => { | ||||||
|  |   getSheetName(); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | //选择表名 | ||||||
|  | const changeSheet = () => { | ||||||
|  |   getTableData(); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | //获取表名 | ||||||
|  | const getSheetName = async () => { | ||||||
|  |   try { | ||||||
|  |     const params = { | ||||||
|  |       projectId: currentProject.value?.id | ||||||
|  |       // versions: queryForm.value.versions | ||||||
|  |     }; | ||||||
|  |     const res = await sheetList(params); | ||||||
|  |     if (res.code == 200) { | ||||||
|  |       sheets.value = res.data; | ||||||
|  |       if (res.data.length > 0) { | ||||||
|  |         queryForm.value.sheet = res.data[0]; | ||||||
|  |       } else { | ||||||
|  |         queryForm.value.sheet = ''; | ||||||
|  |       } | ||||||
|  |       getTableData(); | ||||||
|  |     } | ||||||
|  |   } catch (error) {} | ||||||
|  | }; | ||||||
|  | //获取表格 | ||||||
|  | const getTableData = async () => { | ||||||
|  |   loading.value = true; | ||||||
|  |   console.log(212121); | ||||||
|  |    | ||||||
|  |   const params = { | ||||||
|  |     projectId: currentProject.value?.id, | ||||||
|  |     sheet: queryForm.value.sheet | ||||||
|  |   }; | ||||||
|  |   const res = await getTreeLimit(params); | ||||||
|  |   loading.value = false; | ||||||
|  |   if (res.code == 200) { | ||||||
|  |     tableData.value = [res.data[0]]; | ||||||
|  |   } | ||||||
|  |   console.log(loading.value); | ||||||
|  | }; | ||||||
|  | //修改单价 | ||||||
|  | const handleSave = (row: any) => { | ||||||
|  |   try { | ||||||
|  |     if (!row.unitPrice) { | ||||||
|  |       ElMessage({ | ||||||
|  |         message: '请输入单价', | ||||||
|  |         type: 'warning' | ||||||
|  |       }); | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|  |     loading.value = true; | ||||||
|  |     biddingLimitListUpdate(row).then((res) => { | ||||||
|  |       if (res.code == 200) { | ||||||
|  |         ElMessage({ | ||||||
|  |           message: '修改成功', | ||||||
|  |           type: 'success' | ||||||
|  |         }); | ||||||
|  |         getTableData(); | ||||||
|  |       } | ||||||
|  |     }); | ||||||
|  |   } catch (error) { | ||||||
|  |     ElMessage({ | ||||||
|  |       message: '修改失败', | ||||||
|  |       type: 'error' | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  | const tableRef = ref<any>(); | ||||||
|  |  | ||||||
|  | const toggleExpandAll = () => { | ||||||
|  |   isExpandAll.value = !isExpandAll.value; | ||||||
|  |   console.log(isExpandAll.value); | ||||||
|  |  | ||||||
|  |   tableData.value.forEach((row) => { | ||||||
|  |     tableRef.value.toggleRowExpansion(row, isExpandAll.value); | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  | //导入 | ||||||
|  | const importExcel = (options: any): any => { | ||||||
|  |   let formData = new FormData(); | ||||||
|  |   formData.append('file', options.file); | ||||||
|  |   loading.value = true; | ||||||
|  |   BiddingImportExcelFile({ projectId: currentProject.value?.id }, formData) | ||||||
|  |     .then((res) => { | ||||||
|  |       const { code } = res; | ||||||
|  |       if (code == 200) { | ||||||
|  |         proxy.$modal.msgSuccess(res.msg || '导入成功'); | ||||||
|  |         getTableData(); | ||||||
|  |       } | ||||||
|  |     }) | ||||||
|  |     .catch((err) => {}) | ||||||
|  |     .finally(() => { | ||||||
|  |       loading.value = false; | ||||||
|  |     }); | ||||||
|  | }; | ||||||
|  | //监听项目id刷新数据 | ||||||
|  | const listeningProject = watch( | ||||||
|  |   () => currentProject.value?.id, | ||||||
|  |   (nid, oid) => { | ||||||
|  |     getVersionNums(); | ||||||
|  |   } | ||||||
|  | ); | ||||||
|  | const handleExport = () => { | ||||||
|  |   proxy?.download( | ||||||
|  |     '/bidding/biddingLimitList/export', | ||||||
|  |     { | ||||||
|  |       projectId: currentProject.value?.id, | ||||||
|  |       sheet: queryForm.value.sheet | ||||||
|  |     }, | ||||||
|  |     `限价一览表${queryForm.value.sheet}.xlsx` | ||||||
|  |   ); | ||||||
|  | }; | ||||||
|  | onUnmounted(() => { | ||||||
|  |   listeningProject(); | ||||||
|  | }); | ||||||
|  | onMounted(() => { | ||||||
|  |   getSheetName(); | ||||||
|  | }); | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped></style> | ||||||
| @ -41,22 +41,14 @@ | |||||||
|         <el-table-column label="币种" align="center" prop="currency" /> |         <el-table-column label="币种" align="center" prop="currency" /> | ||||||
|         <el-table-column label="所属主体" align="center" prop="subject" /> |         <el-table-column label="所属主体" align="center" prop="subject" /> | ||||||
|         <el-table-column label="中标价" align="center" prop="winningBid" /> |         <el-table-column label="中标价" align="center" prop="winningBid" /> | ||||||
|         <el-table-column label="中标日期" align="center" prop="bidWinningDate" width="180"> |         <el-table-column label="中标日期" align="center" prop="bidWinningDate" width="120"> </el-table-column> | ||||||
|           <template #default="scope"> |  | ||||||
|             <span>{{ parseTime(scope.row.bidWinningDate, '{y}-{m}-{d}') }}</span> |  | ||||||
|           </template> |  | ||||||
|         </el-table-column> |  | ||||||
|         <el-table-column label="投标保证金" align="center" prop="bidDeposit" width="120" /> |         <el-table-column label="投标保证金" align="center" prop="bidDeposit" width="120" /> | ||||||
|         <el-table-column label="是否退还" align="center" prop="whetherSendBack" /> |         <el-table-column label="是否退还" align="center" prop="whetherSendBack" /> | ||||||
|         <el-table-column label="建设单位" align="center" prop="construction" /> |         <el-table-column label="建设单位" align="center" prop="construction" /> | ||||||
|         <el-table-column label="总造价" align="center" prop="totalCost" /> |         <el-table-column label="总造价" align="center" prop="totalCost" /> | ||||||
|         <el-table-column label="立项申请人" align="center" prop="projectApplicant" width="120" /> |         <el-table-column label="立项申请人" align="center" prop="projectApplicant" width="120" /> | ||||||
|         <el-table-column label="立项部门" align="center" prop="projectApplicantDept" /> |         <el-table-column label="立项部门" align="center" prop="projectApplicantDept" /> | ||||||
|         <el-table-column label="立项申请日期" align="center" prop="projectApplicantTime" width="160"> |         <el-table-column label="立项申请日期" align="center" prop="projectApplicantTime" width="120"> </el-table-column> | ||||||
|           <template #default="scope"> |  | ||||||
|             <span>{{ parseTime(scope.row.projectApplicantTime, '{y}-{m}-{d}') }}</span> |  | ||||||
|           </template> |  | ||||||
|         </el-table-column> |  | ||||||
|         <el-table-column label="流程状态" align="center" prop="processStatus" /> |         <el-table-column label="流程状态" align="center" prop="processStatus" /> | ||||||
|         <el-table-column label="项目编号" align="center" prop="projectNumbering" /> |         <el-table-column label="项目编号" align="center" prop="projectNumbering" /> | ||||||
|         <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="200"> |         <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="200"> | ||||||
| @ -335,7 +327,17 @@ const handleExport = () => { | |||||||
|     `listOfWinningBids_${new Date().getTime()}.xlsx` |     `listOfWinningBids_${new Date().getTime()}.xlsx` | ||||||
|   ); |   ); | ||||||
| }; | }; | ||||||
|  | //监听项目id刷新数据 | ||||||
|  | const listeningProject = watch( | ||||||
|  |   () => currentProject.value?.id, | ||||||
|  |   (nid, oid) => { | ||||||
|  |     getList(); | ||||||
|  |   } | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | onUnmounted(() => { | ||||||
|  |   listeningProject(); | ||||||
|  | }); | ||||||
| onMounted(() => { | onMounted(() => { | ||||||
|   getList(); |   getList(); | ||||||
| }); | }); | ||||||
|  | |||||||
| @ -18,7 +18,11 @@ | |||||||
|           </el-form> |           </el-form> | ||||||
|         </el-card> |         </el-card> | ||||||
|         <el-table :data="tableData" row-key="id" border v-loading="loading"> |         <el-table :data="tableData" row-key="id" border v-loading="loading"> | ||||||
|           <el-table-column prop="id" label="编号" /> |           <el-table-column label="序号" width="80" align="center"> | ||||||
|  |             <template #default="scope"> | ||||||
|  |               {{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }} | ||||||
|  |             </template> | ||||||
|  |           </el-table-column> | ||||||
|           <el-table-column prop="name" label="名称" /> |           <el-table-column prop="name" label="名称" /> | ||||||
|           <el-table-column prop="content" label="内容" /> |           <el-table-column prop="content" label="内容" /> | ||||||
|           <el-table-column prop="plannedBiddingTime" label="计划招标时间" align="center"> |           <el-table-column prop="plannedBiddingTime" label="计划招标时间" align="center"> | ||||||
| @ -28,6 +32,9 @@ | |||||||
|           </el-table-column> |           </el-table-column> | ||||||
|           <el-table-column prop="price" label="操作" align="center"> |           <el-table-column prop="price" label="操作" align="center"> | ||||||
|             <template #default="scope"> |             <template #default="scope"> | ||||||
|  |               <el-button type="warning" size="small" @click="handleDetail(scope.row)" v-hasPermi="['tender:segmentedIndicatorPlanning:getMore']" | ||||||
|  |                 >详情</el-button | ||||||
|  |               > | ||||||
|               <el-button type="primary" size="small" @click="handleSave(scope.row)" v-hasPermi="['tender:segmentedIndicatorPlanning:edit']" |               <el-button type="primary" size="small" @click="handleSave(scope.row)" v-hasPermi="['tender:segmentedIndicatorPlanning:edit']" | ||||||
|                 >修改</el-button |                 >修改</el-button | ||||||
|               > |               > | ||||||
| @ -84,7 +91,7 @@ | |||||||
|             <el-table-column prop="num" label="编号" /> |             <el-table-column prop="num" label="编号" /> | ||||||
|             <el-table-column prop="name" label="工程或费用名称" /> |             <el-table-column prop="name" label="工程或费用名称" /> | ||||||
|             <el-table-column prop="unit" label="单位" /> |             <el-table-column prop="unit" label="单位" /> | ||||||
|             <el-table-column prop="quantity" label="数量" /> |             <!-- <el-table-column prop="quantity" label="数量" /> --> | ||||||
|             <el-table-column prop="selectNum" label="选择数量" align="center"> |             <el-table-column prop="selectNum" label="选择数量" align="center"> | ||||||
|               <template #default="scope"> |               <template #default="scope"> | ||||||
|                 <el-input-number |                 <el-input-number | ||||||
| @ -104,11 +111,11 @@ | |||||||
|               </template> |               </template> | ||||||
|             </el-table-column> |             </el-table-column> | ||||||
|             <el-table-column prop="unitPrice" label="单价" align="center" /> |             <el-table-column prop="unitPrice" label="单价" align="center" /> | ||||||
|             <el-table-column prop="price" label="总价" align="center"> |             <!-- <el-table-column prop="price" label="总价" align="center"> | ||||||
|               <template #default="scope"> |               <template #default="scope"> | ||||||
|                 {{ scope.row.price }} |                 {{ scope.row.price }} | ||||||
|               </template> |               </template> | ||||||
|             </el-table-column> |             </el-table-column> --> | ||||||
|           </el-table> |           </el-table> | ||||||
|         </el-col> |         </el-col> | ||||||
|       </el-row> |       </el-row> | ||||||
| @ -117,6 +124,20 @@ | |||||||
|         <el-button type="primary" @click="submitForm(formRef)">确定</el-button> |         <el-button type="primary" @click="submitForm(formRef)">确定</el-button> | ||||||
|       </template> |       </template> | ||||||
|     </el-dialog> |     </el-dialog> | ||||||
|  |     <el-dialog title="详情" v-model="detailDialog" width="75%" draggable> | ||||||
|  |       <el-table :data="detailData" v-loading="detailLoading" row-key="id" border lazy default-expand-all> | ||||||
|  |         <el-table-column prop="num" label="编号" /> | ||||||
|  |         <el-table-column prop="name" label="工程或费用名称" /> | ||||||
|  |         <el-table-column prop="unit" label="单位" /> | ||||||
|  |         <el-table-column prop="quantity" label="数量" /> | ||||||
|  |         <el-table-column prop="unitPrice" label="单价" align="center" /> | ||||||
|  |         <el-table-column prop="price" label="总价" align="center"> | ||||||
|  |           <template #default="scope"> | ||||||
|  |             {{ scope.row.price }} | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|  |       </el-table> | ||||||
|  |     </el-dialog> | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
| @ -125,7 +146,7 @@ import { useUserStoreHook } from '@/store/modules/user'; | |||||||
| import { getDicts } from '@/api/system/dict/data'; | import { getDicts } from '@/api/system/dict/data'; | ||||||
| import { Plus } from '@element-plus/icons-vue'; | import { Plus } from '@element-plus/icons-vue'; | ||||||
| import { FormInstance } from 'element-plus'; | import { FormInstance } from 'element-plus'; | ||||||
| import { treeList, sheetList, segmentedIndicatorPlanning, getPlanningList, updatePlanning, delPlanning } from '@/api/contract/index'; | import { treeList, sheetList, segmentedIndicatorPlanning, getPlanningList, updatePlanning, delPlanning, getDetailsList } from '@/api/contract/index'; | ||||||
|  |  | ||||||
| const userStore = useUserStoreHook(); | const userStore = useUserStoreHook(); | ||||||
| const currentProject = computed(() => userStore.selectedProject); | const currentProject = computed(() => userStore.selectedProject); | ||||||
| @ -148,6 +169,7 @@ const form = ref({ | |||||||
|   name: '', |   name: '', | ||||||
|   content: '' |   content: '' | ||||||
| }); | }); | ||||||
|  |  | ||||||
| const rules = ref({ | const rules = ref({ | ||||||
|   name: [{ required: true, message: '请输入名称', trigger: 'blur' }], |   name: [{ required: true, message: '请输入名称', trigger: 'blur' }], | ||||||
|   content: [{ required: true, message: '请输入内容', trigger: 'blur' }] |   content: [{ required: true, message: '请输入内容', trigger: 'blur' }] | ||||||
| @ -265,8 +287,13 @@ const handleSelection = (selection: any) => { | |||||||
| }; | }; | ||||||
| const handleNumberChange = (row: any) => { | const handleNumberChange = (row: any) => { | ||||||
|   const selectedIds = selectionData.value.map((item) => item.id); |   const selectedIds = selectionData.value.map((item) => item.id); | ||||||
|  |   nextTick(() => { | ||||||
|  |     treeTableRef.value.toggleRowSelection(row, true); | ||||||
|  |   }); | ||||||
|   restoreSelections(treeData.value, selectedIds); |   restoreSelections(treeData.value, selectedIds); | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | //寻找节点选择 | ||||||
| const restoreSelections = (data, selectedIds) => { | const restoreSelections = (data, selectedIds) => { | ||||||
|   const traverse = (nodes) => { |   const traverse = (nodes) => { | ||||||
|     nodes.forEach((node) => { |     nodes.forEach((node) => { | ||||||
| @ -338,12 +365,12 @@ const submitForm = async (formEl: FormInstance | undefined) => { | |||||||
|           }); |           }); | ||||||
|           return; |           return; | ||||||
|         } |         } | ||||||
|  |         const newSelectionData = selectionData.value.filter((item) => item.quantity != '' && item.quantity != null); | ||||||
|         if (selectionData.value.some((item) => item.selectNum == '' || item.selectNum == null)) { |         if (newSelectionData.some((item) => item.selectNum == '' || item.selectNum == null)) { | ||||||
|           ElMessage.error('存在未填写数量的工程或费用名称,请检查'); |           ElMessage.error('存在未填写数量的工程或费用名称,请检查'); | ||||||
|           return; |           return; | ||||||
|         } |         } | ||||||
|         const limitListBos = selectionData.value.map((item: any) => { |         const limitListBos = newSelectionData.map((item: any) => { | ||||||
|           return { |           return { | ||||||
|             limitListId: item.id, |             limitListId: item.id, | ||||||
|             num: item.selectNum |             num: item.selectNum | ||||||
| @ -366,10 +393,6 @@ const submitForm = async (formEl: FormInstance | undefined) => { | |||||||
|         } |         } | ||||||
|       } catch (error) { |       } catch (error) { | ||||||
|         console.log(error); |         console.log(error); | ||||||
|         ElMessage({ |  | ||||||
|           message: '新增失败', |  | ||||||
|           type: 'error' |  | ||||||
|         }); |  | ||||||
|       } |       } | ||||||
|     } else { |     } else { | ||||||
|       console.log('error submit!', fields); |       console.log('error submit!', fields); | ||||||
| @ -424,6 +447,22 @@ const delHandle = (row: any) => { | |||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
| }; | }; | ||||||
|  | const detailDialog = ref(); | ||||||
|  | const detailData = ref([]); | ||||||
|  | const detailLoading = ref(false); | ||||||
|  |  | ||||||
|  | //详情 | ||||||
|  | const handleDetail = (row: any) => { | ||||||
|  |   detailDialog.value = true; | ||||||
|  |   getDetails(row); | ||||||
|  | }; | ||||||
|  | const getDetails = (row: any) => { | ||||||
|  |   getDetailsList({ id: row.id }).then((res) => { | ||||||
|  |     if (res.code == 200) { | ||||||
|  |       detailData.value = res.data; | ||||||
|  |     } | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
| onMounted(() => { | onMounted(() => { | ||||||
|   getTabsList(); |   getTabsList(); | ||||||
|  | |||||||
| @ -69,7 +69,7 @@ | |||||||
|               @click="handleSave(scope.row)" |               @click="handleSave(scope.row)" | ||||||
|               v-if="scope.row.quantity && scope.row.quantity != 0" |               v-if="scope.row.quantity && scope.row.quantity != 0" | ||||||
|               v-hasPermi="['tender:billofquantitiesLimitList:edit']" |               v-hasPermi="['tender:billofquantitiesLimitList:edit']" | ||||||
|               >修改</el-button |               >确定</el-button | ||||||
|             > |             > | ||||||
|           </template> |           </template> | ||||||
|         </el-table-column> |         </el-table-column> | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user