From 38c634f8de9da077ff85b50b211774d4f189e2f5 Mon Sep 17 00:00:00 2001 From: lzm <2316711944@qq.com> Date: Sat, 25 Apr 2026 18:10:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=9F=BA=E7=A1=80=E8=A1=A8?= =?UTF-8?q?=E7=BB=B4=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/tjt/employee/index.ts | 65 ++ src/api/tjt/employeeYearCostBudget/index.ts | 40 ++ src/api/tjt/office/index.ts | 45 ++ src/api/tjt/outputSplit/index.ts | 10 +- src/api/tjt/planning/index.ts | 3 +- src/api/tjt/profit/index.ts | 4 +- src/api/tjt/project/index.ts | 26 +- src/api/tjt/report/index.ts | 48 ++ src/api/tjt/specialtyRoleSplit/index.ts | 3 +- src/api/tjt/yearKValue/index.ts | 49 ++ .../tjt/employee-year-cost-budget/index.vue | 354 +++++++++++ src/views/tjt/employee/index.vue | 459 ++++++++++++++ src/views/tjt/office/index.vue | 236 +++++++ src/views/tjt/output-split/index.vue | 282 +++------ src/views/tjt/output/PlanningOutputForm.vue | 243 ++++++-- .../tjt/output/QuarterDistributionForm.vue | 25 +- src/views/tjt/output/index.vue | 62 +- src/views/tjt/profit/index.vue | 121 ++-- src/views/tjt/project/PlanningForm.vue | 89 ++- src/views/tjt/project/ProjectForm.vue | 383 +++++++++++- src/views/tjt/project/index.vue | 201 ++++-- src/views/tjt/report-budget/index.vue | 332 ++++++++++ .../tjt/report-project-quarter/index.vue | 588 ++++++++++++++++++ .../tjt/report-specialty-person/index.vue | 439 +++++++++++++ src/views/tjt/report-summary/index.vue | 284 +++++++++ src/views/tjt/shared/planning.ts | 274 ++++++-- src/views/tjt/shared/report.ts | 15 + src/views/tjt/staff-assignment/index.vue | 417 ++++++++----- src/views/tjt/year-k-value/index.vue | 299 +++++++++ 29 files changed, 4710 insertions(+), 686 deletions(-) create mode 100644 src/api/tjt/employee/index.ts create mode 100644 src/api/tjt/employeeYearCostBudget/index.ts create mode 100644 src/api/tjt/office/index.ts create mode 100644 src/api/tjt/report/index.ts create mode 100644 src/api/tjt/yearKValue/index.ts create mode 100644 src/views/tjt/employee-year-cost-budget/index.vue create mode 100644 src/views/tjt/employee/index.vue create mode 100644 src/views/tjt/office/index.vue create mode 100644 src/views/tjt/report-budget/index.vue create mode 100644 src/views/tjt/report-project-quarter/index.vue create mode 100644 src/views/tjt/report-specialty-person/index.vue create mode 100644 src/views/tjt/report-summary/index.vue create mode 100644 src/views/tjt/shared/report.ts create mode 100644 src/views/tjt/year-k-value/index.vue diff --git a/src/api/tjt/employee/index.ts b/src/api/tjt/employee/index.ts new file mode 100644 index 0000000..91fe0a5 --- /dev/null +++ b/src/api/tjt/employee/index.ts @@ -0,0 +1,65 @@ +import request from '@/config/axios' + +export interface EmployeeVO { + id?: number + employeeName: string + gender: string + officeId: number + officeName?: string + registrationType?: string + jobTitle?: string + registrationSealNo?: string + entryDate?: string + leaveDate?: string + employeeStatus: string + remark?: string + sortNo?: number + enabledFlag?: boolean + createTime?: string +} + +export interface EmployeePageReqVO extends PageParam { + employeeName?: string + officeId?: number + employeeStatus?: string + enabledFlag?: boolean +} + +export interface EmployeeSimpleVO { + id: number + employeeName: string + officeId?: number + officeName?: string + employeeStatus?: string + registrationType?: string + jobTitle?: string +} + +export const getEmployeePage = (params: EmployeePageReqVO) => { + return request.get({ url: '/tjt/employee/page', params }) +} + +export const getEmployee = (id: number) => { + return request.get({ url: '/tjt/employee/get', params: { id } }) +} + +export const createEmployee = (data: EmployeeVO) => { + return request.post({ url: '/tjt/employee/create', data }) +} + +export const updateEmployee = (data: EmployeeVO) => { + return request.put({ url: '/tjt/employee/update', data }) +} + +export const deleteEmployee = (id: number) => { + return request.delete({ url: '/tjt/employee/delete', params: { id } }) +} + +export const getEmployeeSimpleList = (params: { + keyword?: string + officeId?: number + status?: string + enabledFlag?: boolean +}) => { + return request.get({ url: '/tjt/employee/simple-list', params }) +} diff --git a/src/api/tjt/employeeYearCostBudget/index.ts b/src/api/tjt/employeeYearCostBudget/index.ts new file mode 100644 index 0000000..1e82a3d --- /dev/null +++ b/src/api/tjt/employeeYearCostBudget/index.ts @@ -0,0 +1,40 @@ +import request from '@/config/axios' + +export interface EmployeeYearCostBudgetVO { + id?: number + employeeId: number + employeeName?: string + budgetYear: number + expectedCostAmount: number + remark?: string + sortNo?: number + enabledFlag?: boolean + createTime?: string +} + +export interface EmployeeYearCostBudgetPageReqVO extends PageParam { + employeeId?: number + employeeName?: string + budgetYear?: number + enabledFlag?: boolean +} + +export const getEmployeeYearCostBudgetPage = (params: EmployeeYearCostBudgetPageReqVO) => { + return request.get({ url: '/tjt/employee-year-cost-budget/page', params }) +} + +export const getEmployeeYearCostBudget = (id: number) => { + return request.get({ url: '/tjt/employee-year-cost-budget/get', params: { id } }) +} + +export const createEmployeeYearCostBudget = (data: EmployeeYearCostBudgetVO) => { + return request.post({ url: '/tjt/employee-year-cost-budget/create', data }) +} + +export const updateEmployeeYearCostBudget = (data: EmployeeYearCostBudgetVO) => { + return request.put({ url: '/tjt/employee-year-cost-budget/update', data }) +} + +export const deleteEmployeeYearCostBudget = (id: number) => { + return request.delete({ url: '/tjt/employee-year-cost-budget/delete', params: { id } }) +} diff --git a/src/api/tjt/office/index.ts b/src/api/tjt/office/index.ts new file mode 100644 index 0000000..4a2b26e --- /dev/null +++ b/src/api/tjt/office/index.ts @@ -0,0 +1,45 @@ +import request from '@/config/axios' + +export interface OfficeVO { + id?: number + officeName: string + officeCode?: string + sortNo?: number + enabledFlag?: boolean + remark?: string + createTime?: string +} + +export interface OfficePageReqVO extends PageParam { + officeName?: string + enabledFlag?: boolean +} + +export interface OfficeSimpleVO { + id: number + officeName: string +} + +export const getOfficePage = (params: OfficePageReqVO) => { + return request.get({ url: '/tjt/office/page', params }) +} + +export const getOffice = (id: number) => { + return request.get({ url: '/tjt/office/get', params: { id } }) +} + +export const createOffice = (data: OfficeVO) => { + return request.post({ url: '/tjt/office/create', data }) +} + +export const updateOffice = (data: OfficeVO) => { + return request.put({ url: '/tjt/office/update', data }) +} + +export const deleteOffice = (id: number) => { + return request.delete({ url: '/tjt/office/delete', params: { id } }) +} + +export const getOfficeSimpleList = () => { + return request.get({ url: '/tjt/office/simple-list' }) +} diff --git a/src/api/tjt/outputSplit/index.ts b/src/api/tjt/outputSplit/index.ts index 3e4dec6..45829b9 100644 --- a/src/api/tjt/outputSplit/index.ts +++ b/src/api/tjt/outputSplit/index.ts @@ -9,11 +9,10 @@ export interface ProjectOutputSplitVO { year?: number assessmentOutputValue?: number projectManagerName?: string - projectManagerRatio: number - projectManagerAmount?: number engineeringLeaderName?: string - engineeringLeaderRatio: number - engineeringLeaderAmount?: number + projectLeadName?: string + projectLeadRatio: number + projectLeadAmount?: number officeRatio: number officeAmount?: number archRatio: number @@ -35,8 +34,7 @@ export interface ProjectOutputSplitVO { export type ProjectOutputSplitSaveVO = Pick< ProjectOutputSplitVO, | 'planningId' - | 'projectManagerRatio' - | 'engineeringLeaderRatio' + | 'projectLeadRatio' | 'officeRatio' | 'archRatio' | 'decorRatio' diff --git a/src/api/tjt/planning/index.ts b/src/api/tjt/planning/index.ts index 03bcf8a..3d2acd6 100644 --- a/src/api/tjt/planning/index.ts +++ b/src/api/tjt/planning/index.ts @@ -4,6 +4,8 @@ export interface ProjectPlanningVO { id?: number projectId: number ownershipType: string + designPart?: string + buildingType?: string calculationMethod: string planningContent: string planningAmount?: number @@ -31,7 +33,6 @@ export interface ProjectPlanningVO { workingDayUnitPrice?: number guidanceUnitPrice?: number guidanceTotalPrice?: number - virtualTotalPrice?: number calculationRatio?: number contractUnitPrice?: number totalAdjustmentFactor?: number diff --git a/src/api/tjt/profit/index.ts b/src/api/tjt/profit/index.ts index df9493f..529be50 100644 --- a/src/api/tjt/profit/index.ts +++ b/src/api/tjt/profit/index.ts @@ -9,8 +9,10 @@ export interface ProjectProfitVO { comprehensivePlanningAmount?: number subcontractPlanningAmount?: number majorOutputValue?: number - expectedKValue?: number majorExpectedPerformance?: number + innovationOutputRate?: number + innovationOutputValue?: number + otherCost?: number profitLossValue?: number profitLossRate?: number projectStartYear?: number diff --git a/src/api/tjt/project/index.ts b/src/api/tjt/project/index.ts index a50e8e3..1468c96 100644 --- a/src/api/tjt/project/index.ts +++ b/src/api/tjt/project/index.ts @@ -1,5 +1,15 @@ import request from '@/config/axios' +export interface ProjectRolePersonVO { + id?: number + projectId?: number + roleCode: 'project_manager' | 'engineering_principal' + roleName?: string + employeeId?: number + employeeName?: string + sortNo?: number +} + export interface ProjectVO { id?: number projectName: string @@ -13,18 +23,30 @@ export interface ProjectVO { projectManagerName?: string engineeringPrincipalName?: string projectType?: string + projectCategory?: string projectStartYear?: number + projectStatus?: string + archiveFlag?: boolean + archiveTime?: string + pauseReason?: string + terminateReason?: string finalSettlementAmount?: number - expectedKValue?: number + innovationOutputRate?: number + otherCost?: number + rolePersons?: ProjectRolePersonVO[] createTime?: string } -export type ProjectSaveVO = Omit +export type ProjectSaveVO = Omit< + ProjectVO, + 'createTime' | 'archiveTime' | 'projectManagerName' | 'engineeringPrincipalName' +> export interface ProjectPageReqVO extends PageParam { projectName?: string contractSignedFlag?: boolean projectStartYear?: number + projectStatus?: string createTime?: string[] } diff --git a/src/api/tjt/report/index.ts b/src/api/tjt/report/index.ts new file mode 100644 index 0000000..ea2ee08 --- /dev/null +++ b/src/api/tjt/report/index.ts @@ -0,0 +1,48 @@ +import request from '@/config/axios' + +export interface ProjectOverviewExportReqVO { + year?: number + specialtyCode?: string + sortType?: string +} + +export interface EmployeeOutputSummaryExportReqVO { + year?: number + officeId?: number + employeeId?: number + employeeStatus?: string + sortType?: string +} + +export const exportProjectBudget = (projectId: number) => { + return request.download({ url: '/tjt/report/project-budget/export-excel', params: { projectId } }) +} + +export const exportProjectQuarterOutput = (planningId: number) => { + return request.download({ + url: '/tjt/report/project-quarter-output/export-excel', + params: { planningId } + }) +} + +export const exportProjectLeadQuarterOutput = (planningId: number) => { + return request.download({ + url: '/tjt/report/project-lead-quarter-output/export-excel', + params: { planningId } + }) +} + +export const exportSpecialtyPersonOutput = (params: { + planningId: number + specialtyCode: string +}) => { + return request.download({ url: '/tjt/report/specialty-person-output/export-excel', params }) +} + +export const exportProjectOverview = (params: ProjectOverviewExportReqVO) => { + return request.download({ url: '/tjt/report/project-overview/export-excel', params }) +} + +export const exportEmployeeOutputSummary = (params: EmployeeOutputSummaryExportReqVO) => { + return request.download({ url: '/tjt/report/employee-output-summary/export-excel', params }) +} diff --git a/src/api/tjt/specialtyRoleSplit/index.ts b/src/api/tjt/specialtyRoleSplit/index.ts index fe38735..6356e0d 100644 --- a/src/api/tjt/specialtyRoleSplit/index.ts +++ b/src/api/tjt/specialtyRoleSplit/index.ts @@ -1,7 +1,8 @@ import request from '@/config/axios' export interface SpecialtyRolePersonVO { - personName?: string + employeeId?: number + employeeName?: string personRatio?: number personAmount?: number } diff --git a/src/api/tjt/yearKValue/index.ts b/src/api/tjt/yearKValue/index.ts new file mode 100644 index 0000000..849a095 --- /dev/null +++ b/src/api/tjt/yearKValue/index.ts @@ -0,0 +1,49 @@ +import request from '@/config/axios' + +export interface YearKValueVO { + id?: number + kYear?: number + kValue?: number + remark?: string + enabledFlag?: boolean + createTime?: string +} + +export interface YearKValuePageReqVO extends PageParam { + kYear?: number + enabledFlag?: boolean +} + +const normalizeYearKValue = (data: any): YearKValueVO => ({ + id: data?.id, + kYear: data?.kYear ?? data?.kyear, + kValue: data?.kValue ?? data?.kvalue, + remark: data?.remark, + enabledFlag: data?.enabledFlag ?? data?.enabledflag, + createTime: data?.createTime ?? data?.createtime +}) + +export const getYearKValuePage = async (params: YearKValuePageReqVO) => { + const data = await request.get({ url: '/tjt/year-k-value/page', params }) + return { + ...data, + list: Array.isArray(data?.list) ? data.list.map(normalizeYearKValue) : [] + } +} + +export const getYearKValue = async (id: number) => { + const data = await request.get({ url: '/tjt/year-k-value/get', params: { id } }) + return normalizeYearKValue(data) +} + +export const createYearKValue = (data: YearKValueVO) => { + return request.post({ url: '/tjt/year-k-value/create', data }) +} + +export const updateYearKValue = (data: YearKValueVO) => { + return request.put({ url: '/tjt/year-k-value/update', data }) +} + +export const deleteYearKValue = (id: number) => { + return request.delete({ url: '/tjt/year-k-value/delete', params: { id } }) +} diff --git a/src/views/tjt/employee-year-cost-budget/index.vue b/src/views/tjt/employee-year-cost-budget/index.vue new file mode 100644 index 0000000..366cb43 --- /dev/null +++ b/src/views/tjt/employee-year-cost-budget/index.vue @@ -0,0 +1,354 @@ + + + diff --git a/src/views/tjt/employee/index.vue b/src/views/tjt/employee/index.vue new file mode 100644 index 0000000..c3df498 --- /dev/null +++ b/src/views/tjt/employee/index.vue @@ -0,0 +1,459 @@ + + + diff --git a/src/views/tjt/office/index.vue b/src/views/tjt/office/index.vue new file mode 100644 index 0000000..38c16cb --- /dev/null +++ b/src/views/tjt/office/index.vue @@ -0,0 +1,236 @@ + + + diff --git a/src/views/tjt/output-split/index.vue b/src/views/tjt/output-split/index.vue index 10fc5aa..e11de6e 100644 --- a/src/views/tjt/output-split/index.vue +++ b/src/views/tjt/output-split/index.vue @@ -47,16 +47,14 @@ highlight-current-row @current-change="handleCurrentProjectChange" > - + - - - + + + + -
-
- {{ currentProject?.projectName || '专业所规划列表' }} -
- 刷新 +
+ {{ currentProject?.projectName || '专业所规划列表' }}
编辑比例 - - - 刷新结果 -
{{ formData.projectName || '-' }} {{ formData.planningContent || '-' }} - {{ formData.projectManagerName || '-' }} - {{ formData.engineeringLeaderName || '-' }} + + {{ getProjectLeadText(formData.projectManagerName, formData.engineeringLeaderName) }} + 项目层结果 - +