优化
This commit is contained in:
		| @ -7,3 +7,19 @@ export function listOutTable(query: any) { | ||||
|     params: query | ||||
|   }); | ||||
| } | ||||
| // 对甲产值和对乙产值 | ||||
| export function comparisonOfOutputValue(query: any) { | ||||
|   return request({ | ||||
|     url: '/out/table/outCompare', | ||||
|     method: 'get', | ||||
|     params: query | ||||
|   }); | ||||
| } | ||||
| // 对甲结算和对乙结算 | ||||
| export function comparisonOfSettlementValue(query: any) { | ||||
|   return request({ | ||||
|     url: '/out/table/comparisonOfOwnerAndSub', | ||||
|     method: 'get', | ||||
|     params: query | ||||
|   }); | ||||
| } | ||||
|  | ||||
| @ -70,7 +70,7 @@ import ApprovalButton from '@/components/Process/approvalButton.vue'; | ||||
| import { StartProcessBo } from '@/api/workflow/workflowCommon/types'; | ||||
| const { proxy } = getCurrentInstance() as ComponentInternalInstance; | ||||
| import { useUserStoreHook } from '@/store/modules/user'; | ||||
| import { getVersionDetail } from '@/api/bidding/biddingLimit'; | ||||
| import { getVersionDetail, sheetList } from '@/api/bidding/biddingLimit'; | ||||
|  | ||||
| // 获取用户 store | ||||
| const userStore = useUserStoreHook(); | ||||
| @ -82,8 +82,8 @@ const loading = ref(true); | ||||
| const routeParams = ref<Record<string, any>>({}); | ||||
| const flowCodeOptions = [ | ||||
|   { | ||||
|     value: currentProject.value?.id + '_costAccounting', | ||||
|     label: '成本核算清单审批' | ||||
|     value: currentProject.value?.id + '_biddingLimitList', | ||||
|     label: '投标一览审核' | ||||
|   } | ||||
| ]; | ||||
|  | ||||
| @ -151,11 +151,25 @@ const getInfo = () => { | ||||
|   nextTick(async () => { | ||||
|     const res = await getVersionDetail(routeParams.value.id); | ||||
|     Object.assign(form.value, res.data); | ||||
|     getSheetName(res.data.versions); | ||||
|     loading.value = false; | ||||
|     buttonLoading.value = false; | ||||
|   }); | ||||
| }; | ||||
|  | ||||
| //获取表名 | ||||
| const getSheetName = async (versions) => { | ||||
|   const params = { | ||||
|     projectId: currentProject.value?.id, | ||||
|     versions | ||||
|   }; | ||||
|   const res = await sheetList(params); | ||||
|   if (res.code == 200) { | ||||
|     sheets.value = res.data; | ||||
|     if (res.data.length > 0) { | ||||
|       sheets.value = res.data; | ||||
|     } | ||||
|   } | ||||
| }; | ||||
| /** 提交按钮 */ | ||||
| const submitForm = (status1: string) => { | ||||
|   status.value = status1; | ||||
| @ -171,7 +185,7 @@ const submitFlow = async () => { | ||||
| const handleStartWorkFlow = async (data: LeaveForm) => { | ||||
|   try { | ||||
|     submitFormData.value.flowCode = flowCode.value; | ||||
|     submitFormData.value.businessId = data.id; | ||||
|     submitFormData.value.businessId = data.versions + '_abc'; | ||||
|     //流程变量 | ||||
|     taskVariables.value = { | ||||
|       // leave4/5 使用的流程变量 | ||||
| @ -189,7 +203,7 @@ const handleStartWorkFlow = async (data: LeaveForm) => { | ||||
| }; | ||||
| //审批记录 | ||||
| const handleApprovalRecord = () => { | ||||
|   approvalRecordRef.value.init(form.value.id); | ||||
|   approvalRecordRef.value.init(form.value.versions + '_abc'); | ||||
| }; | ||||
| //提交回调 | ||||
| const submitCallback = async () => { | ||||
| @ -227,13 +241,10 @@ onMounted(() => { | ||||
|   nextTick(async () => { | ||||
|     reset(); | ||||
|     routeParams.value = proxy.$route.query; | ||||
|     sheets.value = routeParams.value.sheets; | ||||
|     versions.value = routeParams.value.versions; | ||||
|     Object.assign(form.value, versions.value); | ||||
|     loading.value = false; | ||||
|     if (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval') { | ||||
|       getInfo(); | ||||
|     } | ||||
|     // if (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval') { | ||||
|     getInfo(); | ||||
|     // } | ||||
|   }); | ||||
| }); | ||||
| </script> | ||||
|  | ||||
							
								
								
									
										301
									
								
								src/views/contract/bidCost/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										301
									
								
								src/views/contract/bidCost/index.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,301 @@ | ||||
| <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="versions"> | ||||
|             <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-select> | ||||
|           </el-form-item> | ||||
|           <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-item> | ||||
|             <el-button | ||||
|               type="primary" | ||||
|               v-if="versionObj.status == 'draft'" | ||||
|               icon="Edit" | ||||
|               @click="handleAudit" | ||||
|               v-hasPermi="['desibiddinggn:biddingLimitList:query']" | ||||
|               >审核</el-button | ||||
|             > | ||||
|           </el-form-item> | ||||
|           <el-form-item> | ||||
|             <el-button | ||||
|               type="primary" | ||||
|               icon="view" | ||||
|               @click="handleViewInfo" | ||||
|               v-hasPermi="['desibiddinggn:biddingLimitList:query']" | ||||
|               v-if="versionObj.status != 'draft'" | ||||
|               >查看流程</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 | ||||
|               :disabled="versionObj.status != 'draft'" | ||||
|               :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" | ||||
|               :disabled="versionObj.status != 'draft'" | ||||
|               @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 { BiddingImportExcelFile, getTreeLimit, biddingLimitListUpdate, sheetList, obtainAllVersionNumbers } from '@/api/bidding/biddingLimit'; | ||||
| const { proxy } = getCurrentInstance() as any; | ||||
|  | ||||
| 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 versionObj: any = ref({}); | ||||
| const versionMap = new Map(); | ||||
| //获取版本号 | ||||
| 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) { | ||||
|         res.data.forEach((item: any) => { | ||||
|           versionMap.set(item.versions, item); | ||||
|         }); | ||||
|         queryForm.value.versions = res.data[0].versions; | ||||
|         versionObj.value = res.data[0]; | ||||
|         getSheetName(); | ||||
|       } else { | ||||
|         queryForm.value.versions = ''; | ||||
|         versionObj.value = {}; | ||||
|       } | ||||
|     } | ||||
|   } catch (error) { | ||||
|     console.log(error); | ||||
|   } | ||||
| }; | ||||
| //选择版本号 | ||||
| const changeVersions = (val) => { | ||||
|   getSheetName(); | ||||
| }; | ||||
|  | ||||
| //选择表名 | ||||
| const changeSheet = () => { | ||||
|   getTableData(); | ||||
| }; | ||||
|  | ||||
| //获取表名 | ||||
| const getSheetName = async () => { | ||||
|   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(); | ||||
|   } | ||||
| }; | ||||
| //获取表格 | ||||
| const getTableData = async () => { | ||||
|   loading.value = true; | ||||
|   const params = { | ||||
|     projectId: currentProject.value?.id, | ||||
|     sheet: queryForm.value.sheet | ||||
|   }; | ||||
|   const res = await getTreeLimit(params); | ||||
|   loading.value = false; | ||||
|   if (res.code == 200) { | ||||
|     if (res.data && res.data.length > 0) { | ||||
|       tableData.value = [res.data[0]]; | ||||
|     } else { | ||||
|       tableData.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(); | ||||
|     // getSheetName(); | ||||
|   } | ||||
| ); | ||||
| const handleExport = () => { | ||||
|   proxy?.download( | ||||
|     '/bidding/biddingLimitList/export', | ||||
|     { | ||||
|       projectId: currentProject.value?.id, | ||||
|       sheet: queryForm.value.sheet | ||||
|     }, | ||||
|     `限价一览表${queryForm.value.sheet}.xlsx` | ||||
|   ); | ||||
| }; | ||||
| // 审核 | ||||
| const handleAudit = () => { | ||||
|   proxy.$tab.closePage(proxy.$route); | ||||
|   let id = versionMap.get(queryForm.value.versions).id; | ||||
|   proxy.$router.push({ | ||||
|     path: `/approval/biddingLimit/indexEdit`, | ||||
|     query: { | ||||
|       id, | ||||
|       type: 'add', | ||||
|       sheets: sheets.value, | ||||
|       versions: versionObj.value | ||||
|     } | ||||
|   }); | ||||
| }; | ||||
| // 查看审核 | ||||
| const handleViewInfo = () => { | ||||
|   proxy.$tab.closePage(proxy.$route); | ||||
|   let id = versionMap.get(queryForm.value.versions).id; | ||||
|   console.log(versionObj.value); | ||||
|  | ||||
|   proxy.$router.push({ | ||||
|     path: `/approval/biddingLimit/indexEdit`, | ||||
|     query: { | ||||
|       id, | ||||
|       type: 'view', | ||||
|       sheets: sheets.value, | ||||
|       versions: versionObj.value | ||||
|     } | ||||
|   }); | ||||
| }; | ||||
| onUnmounted(() => { | ||||
|   listeningProject(); | ||||
| }); | ||||
| onMounted(() => { | ||||
|   getVersionNums(); | ||||
|   // getSheetName(); | ||||
| }); | ||||
| </script> | ||||
|  | ||||
| <style scoped></style> | ||||
							
								
								
									
										343
									
								
								src/views/contract/bidCost/indexEdit.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										343
									
								
								src/views/contract/bidCost/indexEdit.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,343 @@ | ||||
| <template> | ||||
|   <div class="p-4 bg-gray-50"> | ||||
|     <div class="max-w-4xl mx-auto"> | ||||
|       <!-- 顶部按钮区域 --> | ||||
|       <el-card class="mb-4 rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md"> | ||||
|         <approvalButton | ||||
|           @submitForm="submitForm" | ||||
|           @approvalVerifyOpen="approvalVerifyOpen" | ||||
|           @handleApprovalRecord="handleApprovalRecord" | ||||
|           :buttonLoading="buttonLoading" | ||||
|           :id="form.id" | ||||
|           :status="form.status" | ||||
|           :pageType="routeParams.type" | ||||
|         /> | ||||
|       </el-card> | ||||
|       <!-- 表单区域 --> | ||||
|       <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> | ||||
|         </div> | ||||
|         <div class="p-6"> | ||||
|           <el-form ref="leaveFormRef" disabled :model="form" :rules="rules" label-width="100px" class="space-y-4"> | ||||
|             <div class="grid grid-cols-1 md:grid-cols-2 gap-4" v-for="item in sheets" :key="item"> | ||||
|               <el-form-item label="表格文件"> | ||||
|                 <span style="color: #8d8d8d">{{ item }}</span> | ||||
|               </el-form-item> | ||||
|             </div> | ||||
|           </el-form> | ||||
|         </div> | ||||
|       </el-card> | ||||
|       <!-- 提交组件 --> | ||||
|       <submitVerify ref="submitVerifyRef" :task-variables="taskVariables" @submit-callback="submitCallback" /> | ||||
|       <approvalRecord ref="approvalRecordRef"></approvalRecord> | ||||
|       <!-- 流程选择对话框 --> | ||||
|       <el-dialog | ||||
|         draggable | ||||
|         v-model="dialogVisible.visible" | ||||
|         :title="dialogVisible.title" | ||||
|         :before-close="handleClose" | ||||
|         width="500" | ||||
|         class="rounded-lg shadow-lg" | ||||
|       > | ||||
|         <div class="p-4"> | ||||
|           <p class="text-gray-600 mb-4">请选择要启动的流程:</p> | ||||
|           <el-select v-model="flowCode" placeholder="请选择流程" style="width: 100%"> | ||||
|             <el-option v-for="item in flowCodeOptions" :key="item.value" :label="item.label" :value="item.value" /> | ||||
|           </el-select> | ||||
|         </div> | ||||
|         <template #footer> | ||||
|           <div class="dialog-footer p-4 border-t border-gray-100 flex justify-end space-x-3"> | ||||
|             <el-button @click="handleClose" class="px-4 py-2 border border-gray-300 rounded-md text-gray-700 hover:bg-gray-50 transition-colors" | ||||
|               >取消</el-button | ||||
|             > | ||||
|             <el-button type="primary" @click="submitFlow()" class="px-4 py-2 bg-primary text-white rounded-md hover:bg-primary/90 transition-colors" | ||||
|               >确认</el-button | ||||
|             > | ||||
|           </div> | ||||
|         </template> | ||||
|       </el-dialog> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script setup name="Leave" lang="ts"> | ||||
| import { LeaveForm } from '@/api/workflow/leave/types'; | ||||
| import { startWorkFlow } from '@/api/workflow/task'; | ||||
| import SubmitVerify from '@/components/Process/submitVerify.vue'; | ||||
| import ApprovalRecord from '@/components/Process/approvalRecord.vue'; | ||||
| import ApprovalButton from '@/components/Process/approvalButton.vue'; | ||||
| import { StartProcessBo } from '@/api/workflow/workflowCommon/types'; | ||||
| const { proxy } = getCurrentInstance() as any; | ||||
| import { useUserStoreHook } from '@/store/modules/user'; | ||||
| import { getVersionDetail } from '@/api/bidding/biddingLimit'; | ||||
|  | ||||
| // 获取用户 store | ||||
| const userStore = useUserStoreHook(); | ||||
| // 从 store 中获取项目列表和当前选中的项目 | ||||
| const currentProject = computed(() => userStore.selectedProject); | ||||
| const buttonLoading = ref(false); | ||||
| const loading = ref(true); | ||||
| //路由参数 | ||||
| const routeParams = ref<Record<string, any>>({}); | ||||
| const flowCodeOptions = [ | ||||
|   { | ||||
|     value: currentProject.value?.id + '_biddingLimitList', | ||||
|     label: '成本核算清单审批' | ||||
|   } | ||||
| ]; | ||||
|  | ||||
| const flowCode = ref<string>(''); | ||||
| const status = ref<string>(''); | ||||
| const dialogVisible = reactive<DialogOption>({ | ||||
|   visible: false, | ||||
|   title: '流程定义' | ||||
| }); | ||||
| //提交组件 | ||||
| const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>(); | ||||
| //审批记录组件 | ||||
| const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>(); | ||||
| //按钮组件 | ||||
| const approvalButtonRef = ref<InstanceType<typeof ApprovalButton>>(); | ||||
| const sheets = ref([]); | ||||
| const versions = ref({}); | ||||
| const leaveFormRef = ref<ElFormInstance>(); | ||||
| const dialog = reactive({ | ||||
|   visible: false, | ||||
|   title: '', | ||||
|   isEdit: false | ||||
| }); | ||||
| const submitFormData = ref<StartProcessBo>({ | ||||
|   businessId: '', | ||||
|   flowCode: '', | ||||
|   variables: {} | ||||
| }); | ||||
| const taskVariables = ref<Record<string, any>>({}); | ||||
|  | ||||
| const initFormData = { | ||||
|   id: undefined, | ||||
|   projectId: currentProject.value?.id, | ||||
|   versionNumber: undefined, | ||||
|   fileName: undefined, | ||||
|   fileUrl: undefined, | ||||
|   fileType: undefined, | ||||
|   fileSuffix: undefined, | ||||
|   originalName: undefined, | ||||
|   remark: undefined, | ||||
|   fileId: undefined | ||||
| }; | ||||
| const data = reactive({ | ||||
|   form: { ...initFormData }, | ||||
|   rules: {} | ||||
| }); | ||||
|  | ||||
| const handleClose = () => { | ||||
|   dialogVisible.visible = false; | ||||
|   flowCode.value = ''; | ||||
|   buttonLoading.value = false; | ||||
| }; | ||||
| const { form, rules } = toRefs(data); | ||||
|  | ||||
| /** 表单重置 */ | ||||
| const reset = () => { | ||||
|   form.value = { ...initFormData }; | ||||
|   leaveFormRef.value?.resetFields(); | ||||
| }; | ||||
|  | ||||
| /** 获取详情 */ | ||||
| const getInfo = () => { | ||||
|   loading.value = true; | ||||
|   buttonLoading.value = false; | ||||
|   nextTick(async () => { | ||||
|     const res = await getVersionDetail(routeParams.value.id); | ||||
|     Object.assign(form.value, res.data); | ||||
|     loading.value = false; | ||||
|     buttonLoading.value = false; | ||||
|   }); | ||||
| }; | ||||
|  | ||||
| /** 提交按钮 */ | ||||
| const submitForm = (status1: string) => { | ||||
|   status.value = status1; | ||||
|   buttonLoading.value = true; | ||||
|   submit(status.value, form.value); | ||||
| }; | ||||
|  | ||||
| const submitFlow = async () => { | ||||
|   handleStartWorkFlow(form.value); | ||||
|   dialogVisible.visible = false; | ||||
| }; | ||||
| //提交申请 | ||||
| const handleStartWorkFlow = async (data: LeaveForm) => { | ||||
|   try { | ||||
|     submitFormData.value.flowCode = flowCode.value; | ||||
|     submitFormData.value.businessId = data.id; | ||||
|     //流程变量 | ||||
|     taskVariables.value = { | ||||
|       // leave4/5 使用的流程变量 | ||||
|       userList: ['1', '3', '4'] | ||||
|     }; | ||||
|     submitFormData.value.variables = taskVariables.value; | ||||
|     const resp = await startWorkFlow(submitFormData.value); | ||||
|     if (submitVerifyRef.value) { | ||||
|       buttonLoading.value = false; | ||||
|       submitVerifyRef.value.openDialog(resp.data.taskId); | ||||
|     } | ||||
|   } finally { | ||||
|     buttonLoading.value = false; | ||||
|   } | ||||
| }; | ||||
| //审批记录 | ||||
| const handleApprovalRecord = () => { | ||||
|   approvalRecordRef.value.init(form.value.id); | ||||
| }; | ||||
| //提交回调 | ||||
| const submitCallback = async () => { | ||||
|   await proxy.$tab.closePage(proxy.$route); | ||||
|   proxy.$router.go(-1); | ||||
| }; | ||||
| //审批 | ||||
| const approvalVerifyOpen = async () => { | ||||
|   submitVerifyRef.value.openDialog(routeParams.value.taskId); | ||||
| }; | ||||
| // 图纸上传成功之后 开始提交 | ||||
| const submit = async (status, data) => { | ||||
|   form.value = data; | ||||
|   if (status === 'draft') { | ||||
|     buttonLoading.value = false; | ||||
|     proxy?.$modal.msgSuccess('暂存成功'); | ||||
|     proxy.$tab.closePage(proxy.$route); | ||||
|     proxy.$router.go(-1); | ||||
|   } else { | ||||
|     if ((form.value.status === 'draft' && (flowCode.value === '' || flowCode.value === null)) || routeParams.value.type === 'add') { | ||||
|       flowCode.value = flowCodeOptions[0].value; | ||||
|       dialogVisible.visible = true; | ||||
|       return; | ||||
|     } | ||||
|     //说明启动过先随意穿个参数 | ||||
|     if (flowCode.value === '' || flowCode.value === null) { | ||||
|       flowCode.value = 'xx'; | ||||
|     } | ||||
|     console.log(data); | ||||
|     await handleStartWorkFlow(data); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| onMounted(() => { | ||||
|   nextTick(async () => { | ||||
|     reset(); | ||||
|     routeParams.value = proxy.$route.query; | ||||
|     sheets.value = routeParams.value.sheets; | ||||
|     versions.value = routeParams.value.versions; | ||||
|     Object.assign(form.value, versions.value); | ||||
|     loading.value = false; | ||||
|     if (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval') { | ||||
|       getInfo(); | ||||
|     } | ||||
|   }); | ||||
| }); | ||||
| </script> | ||||
| <style scoped lang="scss"> | ||||
| /* 全局样式 */ | ||||
| :root { | ||||
|   --primary: #409eff; | ||||
|   --primary-light: #66b1ff; | ||||
|   --primary-dark: #3a8ee6; | ||||
|   --success: #67c23a; | ||||
|   --warning: #e6a23c; | ||||
|   --danger: #f56c6c; | ||||
|   --info: #909399; | ||||
| } | ||||
|  | ||||
| /* 表单样式优化 */ | ||||
| .el-form-item { | ||||
|   .el-form-item__label { | ||||
|     color: #606266; | ||||
|     font-weight: 500; | ||||
|   } | ||||
|  | ||||
|   .el-input__inner, | ||||
|   .el-select .el-input__inner { | ||||
|     border-radius: 4px; | ||||
|     transition: | ||||
|       border-color 0.2s, | ||||
|       box-shadow 0.2s; | ||||
|  | ||||
|     &:focus { | ||||
|       border-color: var(--primary-light); | ||||
|       box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.1); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .el-textarea__inner { | ||||
|     border-radius: 4px; | ||||
|     transition: | ||||
|       border-color 0.2s, | ||||
|       box-shadow 0.2s; | ||||
|  | ||||
|     &:focus { | ||||
|       border-color: var(--primary-light); | ||||
|       box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.1); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| /* 按钮样式优化 */ | ||||
| .el-button { | ||||
|   border-radius: 4px; | ||||
|   transition: all 0.2s; | ||||
|  | ||||
|   &.is-primary { | ||||
|     background-color: var(--primary); | ||||
|     border-color: var(--primary); | ||||
|  | ||||
|     &:hover { | ||||
|       background-color: var(--primary-light); | ||||
|       border-color: var(--primary-light); | ||||
|     } | ||||
|  | ||||
|     &:active { | ||||
|       background-color: var(--primary-dark); | ||||
|       border-color: var(--primary-dark); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   &.is-text { | ||||
|     color: var(--primary); | ||||
|  | ||||
|     &:hover { | ||||
|       color: var(--primary-light); | ||||
|       background-color: rgba(64, 158, 255, 0.05); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| /* 卡片样式优化 */ | ||||
| .el-card { | ||||
|   transition: all 0.3s ease; | ||||
|  | ||||
|   &:hover { | ||||
|     /* transform: translateY(-2px); */ | ||||
|   } | ||||
| } | ||||
|  | ||||
| /* 对话框样式优化 */ | ||||
| .el-dialog { | ||||
|   .el-dialog__header { | ||||
|     background-color: #f5f7fa; | ||||
|     border-bottom: 1px solid #ebeef5; | ||||
|     padding: 15px 20px; | ||||
|   } | ||||
|  | ||||
|   .el-dialog__title { | ||||
|     font-size: 16px; | ||||
|     font-weight: 600; | ||||
|     color: #303133; | ||||
|   } | ||||
|  | ||||
|   .el-dialog__footer { | ||||
|     padding: 15px 20px; | ||||
|     border-top: 1px solid #ebeef5; | ||||
|   } | ||||
| } | ||||
| </style> | ||||
| @ -53,6 +53,7 @@ | ||||
|         <el-table-column prop="unitPrice" label="单价" align="center"> | ||||
|           <template #default="scope"> | ||||
|             <el-input-number | ||||
|               :disabled="reviewStatus != 'draft'" | ||||
|               :model-value="scope.row.unitPrice" | ||||
|               @change="(val) => (scope.row.unitPrice = val)" | ||||
|               :precision="2" | ||||
| @ -72,6 +73,7 @@ | ||||
|             <el-button | ||||
|               type="primary" | ||||
|               size="small" | ||||
|               :disabled="reviewStatus != 'draft'" | ||||
|               @click="handleSave(scope.row)" | ||||
|               v-if="scope.row.quantity && scope.row.quantity != 0" | ||||
|               v-hasPermi="['tender:billofquantitiesLimitList:edit']" | ||||
|  | ||||
| @ -1,44 +1,54 @@ | ||||
| <template> | ||||
|   <div class="p-2"> | ||||
|     <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> | ||||
|       <div v-show="showSearch" class="mb-[10px]"> | ||||
|         <el-card shadow="hover"> | ||||
|           <el-form ref="queryFormRef" :model="queryParams" :inline="true"> | ||||
|             <el-form-item label="计划月份" prop="month"> | ||||
|               <el-date-picker v-model="queryParams.month" type="month" value-format="YYYY-MM" placeholder="请选择计划月份" /> | ||||
|             </el-form-item> | ||||
|             <el-form-item label="产值类型" prop="valueType"> | ||||
|               <el-select v-model="queryParams.valueType" placeholder="请选择产值类型"> | ||||
|                 <el-option label="设计" value="1" /> | ||||
|                 <el-option label="采购" value="2" /> | ||||
|               </el-select> | ||||
|             </el-form-item> | ||||
|             <el-form-item> | ||||
|               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> | ||||
|               <el-button icon="Refresh" @click="resetQuery">重置</el-button> | ||||
|             </el-form-item> | ||||
|           </el-form> | ||||
|         </el-card> | ||||
|       </div> | ||||
|     </transition> | ||||
|     <el-card shadow="never"> | ||||
|       <template #header> | ||||
|         <el-row :gutter="10" class="mb8"> | ||||
|           <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> | ||||
|         </el-row> | ||||
|       </template> | ||||
|     <el-tabs type="border-card" @tab-change="handleTabChange" v-model="activeTab"> | ||||
|       <el-tab-pane v-for="(item, index) in tabList" :key="index" :label="item.label" :name="item.value"> | ||||
|         <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> | ||||
|           <div v-show="showSearch" class="mb-[10px]"> | ||||
|             <el-card shadow="hover"> | ||||
|               <el-form ref="queryFormRef" :model="queryParams" :inline="true"> | ||||
|                 <el-form-item label="计划月份" prop="month"> | ||||
|                   <el-date-picker v-model="queryParams.month" type="month" value-format="YYYY-MM" placeholder="请选择计划月份" /> | ||||
|                 </el-form-item> | ||||
|                 <el-form-item label="产值类型" prop="valueType"> | ||||
|                   <el-select v-model="queryParams.valueType" placeholder="请选择产值类型"> | ||||
|                     <el-option label="设计" value="1" /> | ||||
|                     <el-option label="采购" value="2" /> | ||||
|                   </el-select> | ||||
|                 </el-form-item> | ||||
|                 <el-form-item> | ||||
|                   <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> | ||||
|                   <el-button icon="Refresh" @click="resetQuery">重置</el-button> | ||||
|                 </el-form-item> | ||||
|               </el-form> | ||||
|             </el-card> | ||||
|           </div> | ||||
|         </transition> | ||||
|         <el-card shadow="never"> | ||||
|           <template #header> | ||||
|             <el-row :gutter="10" class="mb8"> | ||||
|               <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> | ||||
|             </el-row> | ||||
|           </template> | ||||
|  | ||||
|       <el-table v-loading="loading" :data="valueAllocationList"> | ||||
|         <el-table-column label="项目" align="center" prop="projectName" /> | ||||
|         <el-table-column label="月预计产值" align="center" prop="monthEstimatedValue" /> | ||||
|         <el-table-column label="完成产值月合计" align="center" prop="monthCompletionValue" /> | ||||
|         <el-table-column label="产值差额" align="center" prop="valueDifference" /> | ||||
|         <el-table-column label="项目总产值" align="center" prop="totalValue" /> | ||||
|         <el-table-column label="累计完成产值" align="center" prop="accumulatedCompletionValue" /> | ||||
|         <el-table-column label="项目完成率" align="center" prop="projectCompletionRate" /> | ||||
|       </el-table> | ||||
|       <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> | ||||
|     </el-card> | ||||
|           <el-table v-loading="loading" :data="valueAllocationList"> | ||||
|             <el-table-column label="项目" align="center" prop="projectName" /> | ||||
|             <el-table-column label="月预计产值" align="center" prop="monthEstimatedValue" /> | ||||
|             <el-table-column label="完成产值月合计" align="center" prop="monthCompletionValue" /> | ||||
|             <el-table-column label="产值差额" align="center" prop="valueDifference" /> | ||||
|             <el-table-column label="项目总产值" align="center" prop="totalValue" /> | ||||
|             <el-table-column label="累计完成产值" align="center" prop="accumulatedCompletionValue" /> | ||||
|             <el-table-column label="项目完成率" align="center" prop="projectCompletionRate" /> | ||||
|           </el-table> | ||||
|           <pagination | ||||
|             v-show="total > 0" | ||||
|             :total="total" | ||||
|             v-model:page="queryParams.pageNum" | ||||
|             v-model:limit="queryParams.pageSize" | ||||
|             @pagination="getList" | ||||
|           /> | ||||
|         </el-card> | ||||
|       </el-tab-pane> | ||||
|     </el-tabs> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| @ -66,8 +76,23 @@ const data = reactive({ | ||||
|     month: undefined | ||||
|   } | ||||
| }); | ||||
|  | ||||
| const activeTab = ref('1'); | ||||
| const { queryParams } = toRefs(data); | ||||
| const tabList = [ | ||||
|   { | ||||
|     value: '1', | ||||
|     label: '对甲采购设计报表' | ||||
|   }, | ||||
|   { | ||||
|     value: '2', | ||||
|     label: '对乙采购设计报表' | ||||
|   } | ||||
| ]; | ||||
| const handleTabChange = (tab) => { | ||||
|   activeTab.value = tab; | ||||
|   data.queryParams.valueType = '1'; | ||||
|   // data.queryParams.month = ''; | ||||
| }; | ||||
|  | ||||
| /** 查询项目总产值分配列表 */ | ||||
| const getList = async () => { | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| <template> | ||||
|   <div class="p-2"> | ||||
|     <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> | ||||
|       <div v-show="showSearch" class="mb-[10px]"> | ||||
|     <el-tabs type="border-card" @tab-change="handleTabChange" v-model="activeTab"> | ||||
|       <el-tab-pane v-for="(item, index) in tabList" :key="index" :label="item.label" :name="item.value"> | ||||
|         <el-card shadow="hover"> | ||||
|           <el-form ref="queryFormRef" :model="queryParams" :inline="true"> | ||||
|             <el-form-item label="计划月份" prop="month"> | ||||
| @ -9,7 +9,8 @@ | ||||
|             </el-form-item> | ||||
|             <el-form-item label="产值类型" prop="valueType"> | ||||
|               <el-select v-model="queryParams.valueType" placeholder="请选择产值类型"> | ||||
|                 <el-option v-for="item in out_value_type" :key="item.value" :label="item.label" :value="item.value" /> | ||||
|                 <el-option label="设计" value="1" /> | ||||
|                 <el-option label="采购" value="2" /> | ||||
|               </el-select> | ||||
|             </el-form-item> | ||||
|             <el-form-item> | ||||
| @ -18,68 +19,100 @@ | ||||
|             </el-form-item> | ||||
|           </el-form> | ||||
|         </el-card> | ||||
|       </div> | ||||
|     </transition> | ||||
|     <el-card shadow="never"> | ||||
|       <template #header> | ||||
|         <el-row :gutter="10" class="mb8"> | ||||
|           <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> | ||||
|         </el-row> | ||||
|       </template> | ||||
|  | ||||
|       <el-table v-loading="loading" :data="valueAllocationList"> | ||||
|         <el-table-column label="项目" align="center" prop="projectName" /> | ||||
|         <el-table-column label="累计完工产值" align="center" prop="totalCompletionOutputValue" /> | ||||
|         <el-table-column label="累计结算产值" align="center" prop="totalSettlementOutputValue" /> | ||||
|         <el-table-column label="完工未结算额" align="center" prop="completionUnsettledAmount" /> | ||||
|         <el-table-column label="完工未结算比例" align="center" prop="completionUnsettledRatio" /> | ||||
|         <el-table-column label="操作" align="center"> | ||||
|           <template #default="scope"> | ||||
|             <el-button type="primary" @click="handleEdit(scope.row)" link icon="Position">联查分包结算</el-button> | ||||
|           </template> | ||||
|         </el-table-column> | ||||
|       </el-table> | ||||
|       <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> | ||||
|     </el-card> | ||||
|         <el-card shadow="never"> | ||||
|           <el-table v-loading="loading" :data="tableData" v-if="activeTab == '1' || activeTab == '2'"> | ||||
|             <el-table-column label="项目" align="center" prop="projectName" /> | ||||
|             <el-table-column label="累计完工产值" align="center" prop="totalCompletionOutputValue" /> | ||||
|             <el-table-column label="累计结算产值" align="center" prop="totalSettlementOutputValue" /> | ||||
|             <el-table-column label="完工未结算额" align="center" prop="completionUnsettledAmount" /> | ||||
|             <el-table-column label="完工未结算比例" align="center" prop="completionUnsettledRatio" /> | ||||
|             <!-- <el-table-column label="操作" align="center"> | ||||
|               <template #default="scope"> | ||||
|                 <el-button type="primary" @click="handleEdit(scope.row)" link icon="Position">联查分包结算</el-button> | ||||
|               </template> | ||||
|             </el-table-column> --> | ||||
|           </el-table> | ||||
|           <el-table v-loading="loading" :data="tableData" v-if="activeTab == '3'"> | ||||
|             <el-table-column label="项目" align="center" prop="projectName" /> | ||||
|             <el-table-column label="累计完工产值" align="center" prop="totalCompletionOutputValue" /> | ||||
|             <el-table-column label="分包累计结算产值" align="center" prop="subTotalSettlementOutputValue" /> | ||||
|             <el-table-column label="业主累计结算产值" align="center" prop="ownerTotalSettlementOutputValue" /> | ||||
|             <el-table-column label="差额" align="center" prop="differenceValue" /> | ||||
|             <!-- <el-table-column label="操作" align="center"> | ||||
|               <template #default="scope"> | ||||
|                 <el-button type="primary" @click="handleEdit(scope.row)" link icon="Position">联查分包结算</el-button> | ||||
|               </template> | ||||
|             </el-table-column> --> | ||||
|           </el-table> | ||||
|           <el-table v-loading="loading" :data="tableData" v-if="activeTab == '4'"> | ||||
|             <el-table-column label="项目" align="center" prop="projectName" /> | ||||
|             <el-table-column label="对甲计划总产值" align="center" prop="ownerTotal" /> | ||||
|             <el-table-column label="对乙计划总产值" align="center" prop="subTotal" /> | ||||
|             <el-table-column label="对甲月计划产值" align="center" prop="ownerPlanTotal" /> | ||||
|             <el-table-column label="对乙月计划产值" align="center" prop="subPlanTotal" /> | ||||
|             <el-table-column label="对甲月实际产值" align="center" prop="ownerActualTotal" /> | ||||
|             <el-table-column label="对乙月实际产值" align="center" prop="subActualTotal" /> | ||||
|             <!-- <el-table-column label="操作" align="center"> | ||||
|               <template #default="scope"> | ||||
|                 <el-button type="primary" @click="handleEdit(scope.row)" link icon="Position">联查分包结算</el-button> | ||||
|               </template> | ||||
|             </el-table-column> --> | ||||
|           </el-table> | ||||
|           <pagination | ||||
|             v-show="total > 0" | ||||
|             :total="total" | ||||
|             v-model:page="queryParams.pageNum" | ||||
|             v-model:limit="queryParams.pageSize" | ||||
|             @pagination="getList" | ||||
|           /> | ||||
|         </el-card> | ||||
|       </el-tab-pane> | ||||
|     </el-tabs> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script setup name="ValueAllocation" lang="ts"> | ||||
| import { listOutTable } from '@/api/out/outDesignTableVS'; | ||||
| const { proxy } = getCurrentInstance() as ComponentInternalInstance; | ||||
| <script setup lang="ts"> | ||||
| import { useUserStoreHook } from '@/store/modules/user'; | ||||
| import { listOutTable, comparisonOfOutputValue, comparisonOfSettlementValue } from '@/api/out/outDesignTableVS/index'; | ||||
|  | ||||
| import { dayjs } from 'element-plus'; | ||||
| // 获取用户 store | ||||
| const userStore = useUserStoreHook(); | ||||
| // 从 store 中获取项目列表和当前选中的项目 | ||||
| const currentProject = computed(() => userStore.selectedProject); | ||||
| const valueAllocationList = ref([]); | ||||
| const loading = ref(true); | ||||
| const showSearch = ref(true); | ||||
| const total = ref(0); | ||||
| const { out_value_type } = toRefs<any>(proxy?.useDict('out_value_type')); | ||||
|  | ||||
| const queryFormRef = ref<ElFormInstance>(); | ||||
| const data = reactive({ | ||||
|   queryParams: { | ||||
|     pageNum: 1, | ||||
|     pageSize: 10, | ||||
|     valueType: '1', | ||||
|     projectId: currentProject.value?.id, | ||||
|     month: undefined | ||||
|   } | ||||
| const activeTab = ref('1'); | ||||
| const queryParams = ref({ | ||||
|   month: '', | ||||
|   valueType: '2', | ||||
|   pageNum: 1, | ||||
|   pageSize: 10 | ||||
| }); | ||||
| const total = ref(0); | ||||
| const tableData = ref([]); | ||||
| const loading = ref(false); | ||||
|  | ||||
| const { queryParams } = toRefs(data); | ||||
| const tabList = [ | ||||
|   { | ||||
|     value: '2', | ||||
|     label: '对乙产值和对乙结算' | ||||
|   }, | ||||
|   { | ||||
|     value: '3', | ||||
|     label: '对甲结算和对乙结算' | ||||
|   }, | ||||
|   { | ||||
|     value: '1', | ||||
|     label: '对甲产值和对甲结算' | ||||
|   }, | ||||
|   { | ||||
|     value: '4', | ||||
|     label: '对甲产值和对乙产值' | ||||
|   } | ||||
| ]; | ||||
|  | ||||
| /** 查询项目总产值分配列表 */ | ||||
| const getList = async () => { | ||||
|   loading.value = true; | ||||
| //切换表单 | ||||
| const handleTabChange = (tab) => { | ||||
|   activeTab.value = tab; | ||||
|  | ||||
|   const res = await listOutTable(queryParams.value); | ||||
|   valueAllocationList.value = res.rows; | ||||
|   total.value = res.total; | ||||
|   loading.value = false; | ||||
|   handleQuery(); | ||||
| }; | ||||
|  | ||||
| /** 搜索按钮操作 */ | ||||
| @ -88,45 +121,47 @@ const handleQuery = () => { | ||||
|   getList(); | ||||
| }; | ||||
|  | ||||
| /** 联查分包结算 */ | ||||
| const handleEdit = (row: any) => { | ||||
|   proxy?.$tab.openPage('/out/settlementValueSubcontract'); | ||||
| }; | ||||
|  | ||||
| /** 重置按钮操作 */ | ||||
| const resetQuery = () => { | ||||
|   queryFormRef.value?.resetFields(); | ||||
|   queryParams.value.month = ''; | ||||
|   queryParams.value.valueType = ''; | ||||
|   handleQuery(); | ||||
| }; | ||||
|  | ||||
| /** 导出按钮操作 */ | ||||
| const handleExport = () => { | ||||
|   proxy?.download( | ||||
|     'out/valueAllocation/export', | ||||
|     { | ||||
|       ...queryParams.value | ||||
|     }, | ||||
|     `valueAllocation_${new Date().getTime()}.xlsx` | ||||
|   ); | ||||
| // 获取列表 | ||||
| const getList = async () => { | ||||
|   const params = { | ||||
|     ...queryParams.value, | ||||
|     projectId: currentProject.value?.id, | ||||
|     type: activeTab.value | ||||
|   }; | ||||
|   if (activeTab.value == '4') { | ||||
|     comparisonOfOutputValue(params).then((res) => { | ||||
|       if (res.code == 200) { | ||||
|         tableData.value = res.rows; | ||||
|         total.value = res.total; | ||||
|       } | ||||
|     }); | ||||
|   } else if (activeTab.value == '3') { | ||||
|     comparisonOfSettlementValue(params).then((res) => { | ||||
|       if (res.code == 200) { | ||||
|         tableData.value = res.rows; | ||||
|         total.value = res.total; | ||||
|       } | ||||
|     }); | ||||
|   } else { | ||||
|     const res = await listOutTable(params); | ||||
|     if (res.code == 200) { | ||||
|       tableData.value = res.rows; | ||||
|       total.value = res.total; | ||||
|     } | ||||
|   } | ||||
| }; | ||||
|  | ||||
| const handleEdit = (row: any) => {}; | ||||
| onMounted(() => { | ||||
|   // 也可以使用字符串格式(例如 YYYY-MM) | ||||
|   const currentMonthString = ref(dayjs().format('YYYY-MM')); | ||||
|   queryParams.value.month = currentMonthString.value; | ||||
|   getList(); | ||||
| }); | ||||
|  | ||||
| //监听项目id刷新数据 | ||||
| const listeningProject = watch( | ||||
|   () => currentProject.value?.id, | ||||
|   (nid, oid) => { | ||||
|     queryParams.value.projectId = nid; | ||||
|     getList(); | ||||
|   } | ||||
| ); | ||||
|  | ||||
| onUnmounted(() => { | ||||
|   listeningProject(); | ||||
| }); | ||||
| </script> | ||||
|  | ||||
| <style scoped lang="scss"></style> | ||||
|  | ||||
| @ -45,6 +45,8 @@ | ||||
|  | ||||
| <script setup lang="ts"> | ||||
| import { useUserStoreHook } from '@/store/modules/user'; | ||||
| import { listOutTable } from '@/api/out/outTable'; | ||||
|  | ||||
| const userStore = useUserStoreHook(); | ||||
| const currentProject = computed(() => userStore.selectedProject); | ||||
| const activeTab = ref('1'); | ||||
| @ -71,7 +73,7 @@ const tabList = [ | ||||
| //切换表单 | ||||
| const handleTabChange = (tab) => { | ||||
|   activeTab.value = tab; | ||||
|   queryParams.value.month = ''; | ||||
|   // queryParams.value.month = ''; | ||||
|   handleQuery(); | ||||
| }; | ||||
|  | ||||
| @ -91,10 +93,26 @@ const getList = async () => { | ||||
|   const params = { | ||||
|     ...queryParams.value, | ||||
|     projectId: currentProject.value?.id, | ||||
|     activeTab: activeTab.value | ||||
|     type: activeTab.value | ||||
|   }; | ||||
|   console.log(params); | ||||
|   const res = await listOutTable(params); | ||||
|   if (res.code == 200) { | ||||
|     tableData.value = res.rows; | ||||
|     total.value = res.total; | ||||
|   } | ||||
| }; | ||||
| onMounted(() => { | ||||
|   const currentDate = new Date(); | ||||
|   const year = currentDate.getFullYear(); | ||||
|   const month = currentDate.getMonth() + 1; // 月份从0开始,所以需要加1 | ||||
|  | ||||
|   // 形成"YYYY-M"格式 | ||||
|   const formattedDate = `${year}-${String(month).padStart(2, '0')}`; | ||||
|   queryParams.value.month = formattedDate; | ||||
|  | ||||
|   getList(); | ||||
| }); | ||||
| </script> | ||||
|  | ||||
| <style scoped lang="scss"></style> | ||||
|  | ||||
		Reference in New Issue
	
	Block a user