From ad81d2028e674d08159203f5d1086f9ffa98032b Mon Sep 17 00:00:00 2001 From: Yangk Date: Wed, 10 Dec 2025 16:48:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(erp/timesheet):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=B7=A5=E6=97=B6=E5=A1=AB=E6=8A=A5=E7=AE=A1=E7=90=86=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/oa/erp/timesheetDept/index.ts | 76 +++ src/api/oa/erp/timesheetDept/types.ts | 116 +++++ src/api/oa/erp/timesheetInfo/index.ts | 88 ++++ src/api/oa/erp/timesheetInfo/types.ts | 186 ++++++++ src/api/oa/erp/timesheetProject/index.ts | 76 +++ src/api/oa/erp/timesheetProject/types.ts | 146 ++++++ src/enums/OAEnum.ts | 11 +- src/views/oa/erp/afterSales/edit.vue | 8 +- src/views/oa/erp/projectLedger/index.vue | 6 +- src/views/oa/erp/timesheetInfo/edit.vue | 577 +++++++++++++++++++++++ src/views/oa/erp/timesheetInfo/index.vue | 356 ++++++++++++++ 11 files changed, 1636 insertions(+), 10 deletions(-) create mode 100644 src/api/oa/erp/timesheetDept/index.ts create mode 100644 src/api/oa/erp/timesheetDept/types.ts create mode 100644 src/api/oa/erp/timesheetInfo/index.ts create mode 100644 src/api/oa/erp/timesheetInfo/types.ts create mode 100644 src/api/oa/erp/timesheetProject/index.ts create mode 100644 src/api/oa/erp/timesheetProject/types.ts create mode 100644 src/views/oa/erp/timesheetInfo/edit.vue create mode 100644 src/views/oa/erp/timesheetInfo/index.vue diff --git a/src/api/oa/erp/timesheetDept/index.ts b/src/api/oa/erp/timesheetDept/index.ts new file mode 100644 index 0000000..2fa0dd3 --- /dev/null +++ b/src/api/oa/erp/timesheetDept/index.ts @@ -0,0 +1,76 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { TimesheetDeptVO, TimesheetDeptForm, TimesheetDeptQuery } from '@/api/oa/erp/timesheetDept/types'; + +/** + * 查询部门工作明细列表 + * @param query + * @returns {*} + */ + +export const listTimesheetDept = (query?: TimesheetDeptQuery): AxiosPromise => { + return request({ + url: '/oa/erp/timesheetDept/list', + method: 'get', + params: query + }); +}; + +/** + * 查询部门工作明细详细 + * @param timesheetDeptId + */ +export const getTimesheetDept = (timesheetDeptId: string | number): AxiosPromise => { + return request({ + url: '/oa/erp/timesheetDept/' + timesheetDeptId, + method: 'get' + }); +}; + +/** + * 新增部门工作明细 + * @param data + */ +export const addTimesheetDept = (data: TimesheetDeptForm) => { + return request({ + url: '/oa/erp/timesheetDept', + method: 'post', + data: data + }); +}; + +/** + * 修改部门工作明细 + * @param data + */ +export const updateTimesheetDept = (data: TimesheetDeptForm) => { + return request({ + url: '/oa/erp/timesheetDept', + method: 'put', + data: data + }); +}; + +/** + * 删除部门工作明细 + * @param timesheetDeptId + */ +export const delTimesheetDept = (timesheetDeptId: string | number | Array) => { + return request({ + url: '/oa/erp/timesheetDept/' + timesheetDeptId, + method: 'delete' + }); +}; + +/** + * 下拉框查询部门工作明细列表 + * @param query + * @returns {*} + */ +export function getErpTimesheetDeptList (query) { + return request({ + url: '/oa/erp/timesheetDept/getErpTimesheetDeptList', + method: 'get', + params: query + }); +}; diff --git a/src/api/oa/erp/timesheetDept/types.ts b/src/api/oa/erp/timesheetDept/types.ts new file mode 100644 index 0000000..97d5549 --- /dev/null +++ b/src/api/oa/erp/timesheetDept/types.ts @@ -0,0 +1,116 @@ +export interface TimesheetDeptVO { + /** + * 部门工作ID + */ + timesheetDeptId: string | number; + + /** + * 工时填报ID + */ + timesheetId: string | number; + + /** + * 序号 + */ + sortOrder: number; + + /** + * 部门工作描述 + */ + workDescription: string; + + /** + * 部门ID + */ + deptId: string | number; + + /** + * 部门直线经理ID + */ + deptManagerId: string | number; + + /** + * 工时 + */ + hours: number; + +} + +export interface TimesheetDeptForm extends BaseEntity { + /** + * 部门工作ID + */ + timesheetDeptId?: string | number; + + /** + * 工时填报ID + */ + timesheetId?: string | number; + + /** + * 序号 + */ + sortOrder?: number; + + /** + * 部门工作描述 + */ + workDescription?: string; + + /** + * 部门ID + */ + deptId?: string | number; + + /** + * 部门直线经理ID + */ + deptManagerId?: string | number; + + /** + * 工时 + */ + hours?: number; + +} + +export interface TimesheetDeptQuery extends PageQuery { + + /** + * 工时填报ID + */ + timesheetId?: string | number; + + /** + * 序号 + */ + sortOrder?: number; + + /** + * 部门工作描述 + */ + workDescription?: string; + + /** + * 部门ID + */ + deptId?: string | number; + + /** + * 部门直线经理ID + */ + deptManagerId?: string | number; + + /** + * 工时 + */ + hours?: number; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/src/api/oa/erp/timesheetInfo/index.ts b/src/api/oa/erp/timesheetInfo/index.ts new file mode 100644 index 0000000..dda1ac0 --- /dev/null +++ b/src/api/oa/erp/timesheetInfo/index.ts @@ -0,0 +1,88 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { TimesheetInfoVO, TimesheetInfoForm, TimesheetInfoQuery } from '@/api/oa/erp/timesheetInfo/types'; + +/** + * 查询工时填报列表 + * @param query + * @returns {*} + */ + +export const listTimesheetInfo = (query?: TimesheetInfoQuery): AxiosPromise => { + return request({ + url: '/oa/erp/timesheetInfo/list', + method: 'get', + params: query + }); +}; + +/** + * 查询工时填报详细 + * @param timesheetId + */ +export const getTimesheetInfo = (timesheetId: string | number): AxiosPromise => { + return request({ + url: '/oa/erp/timesheetInfo/' + timesheetId, + method: 'get' + }); +}; + +/** + * 新增工时填报 + * @param data + */ +export const addTimesheetInfo = (data: TimesheetInfoForm) => { + return request({ + url: '/oa/erp/timesheetInfo', + method: 'post', + data: data + }); +}; + +/** + * 修改工时填报 + * @param data + */ +export const updateTimesheetInfo = (data: TimesheetInfoForm) => { + return request({ + url: '/oa/erp/timesheetInfo', + method: 'put', + data: data + }); +}; + +/** + * 删除工时填报 + * @param timesheetId + */ +export const delTimesheetInfo = (timesheetId: string | number | Array) => { + return request({ + url: '/oa/erp/timesheetInfo/' + timesheetId, + method: 'delete' + }); +}; + +/** + * 下拉框查询工时填报列表 + * @param query + * @returns {*} + */ +export function getErpTimesheetInfoList (query) { + return request({ + url: '/oa/erp/timesheetInfo/getErpTimesheetInfoList', + method: 'get', + params: query + }); +}; + +/** + * 工时填报提交并发起流程 + * @param data 表单数据 + */ +export const submitTimesheetAndFlowStart = (data: any) => { + return request({ + url: '/oa/erp/timesheet/submitAndFlowStart', + method: 'post', + data: data + }); +}; diff --git a/src/api/oa/erp/timesheetInfo/types.ts b/src/api/oa/erp/timesheetInfo/types.ts new file mode 100644 index 0000000..0933a9d --- /dev/null +++ b/src/api/oa/erp/timesheetInfo/types.ts @@ -0,0 +1,186 @@ +export interface TimesheetInfoVO { + /** + * 工时填报ID + */ + timesheetId: string | number; + + /** + * 工时填报编号 + */ + timesheetCode: string; + + /** + * 人员ID(填报人) + */ + userId: string | number; + + /** + * 部门ID + */ + deptId: string | number; + + /** + * 起始时间(自然周的周一) + */ + startTime: string; + + /** + * 结束时间(自然周的周日) + */ + endTime: string; + + /** + * 总工时(自动累计) + */ + totalHours: number; + + /** + * 部门工时(根据部门工作自动累计) + */ + deptHours: number; + + /** + * 项目工时(根据项目工作自动累计) + */ + projectHours: number; + + /** + * 工时填报状态(1暂存 2审批中 3已审批 4作废) + */ + timesheetStatus: string; + + /** + * 流程状态 + */ + flowStatus: string; + + /** + * 备注 + */ + remark: string; + +} + +export interface TimesheetInfoForm extends BaseEntity { + /** + * 工时填报ID + */ + timesheetId?: string | number; + + /** + * 工时填报编号 + */ + timesheetCode?: string; + + /** + * 人员ID(填报人) + */ + userId?: string | number; + + /** + * 部门ID + */ + deptId?: string | number; + + /** + * 起始时间(自然周的周一) + */ + startTime?: string; + + /** + * 结束时间(自然周的周日) + */ + endTime?: string; + + /** + * 总工时(自动累计) + */ + totalHours?: number; + + /** + * 部门工时(根据部门工作自动累计) + */ + deptHours?: number; + + /** + * 项目工时(根据项目工作自动累计) + */ + projectHours?: number; + + /** + * 工时填报状态(1暂存 2审批中 3已审批 4作废) + */ + timesheetStatus?: string; + + /** + * 流程状态 + */ + flowStatus?: string; + + /** + * 备注 + */ + remark?: string; + +} + +export interface TimesheetInfoQuery extends PageQuery { + + /** + * 工时填报编号 + */ + timesheetCode?: string; + + /** + * 人员ID(填报人) + */ + userId?: string | number; + + /** + * 部门ID + */ + deptId?: string | number; + + /** + * 起始时间(自然周的周一) + */ + startTime?: string; + + /** + * 结束时间(自然周的周日) + */ + endTime?: string; + + /** + * 总工时(自动累计) + */ + totalHours?: number; + + /** + * 部门工时(根据部门工作自动累计) + */ + deptHours?: number; + + /** + * 项目工时(根据项目工作自动累计) + */ + projectHours?: number; + + /** + * 工时填报状态(1暂存 2审批中 3已审批 4作废) + */ + timesheetStatus?: string; + + /** + * 流程状态 + */ + flowStatus?: string; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/src/api/oa/erp/timesheetProject/index.ts b/src/api/oa/erp/timesheetProject/index.ts new file mode 100644 index 0000000..10feb25 --- /dev/null +++ b/src/api/oa/erp/timesheetProject/index.ts @@ -0,0 +1,76 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { TimesheetProjectVO, TimesheetProjectForm, TimesheetProjectQuery } from '@/api/oa/erp/timesheetProject/types'; + +/** + * 查询项目工作明细列表 + * @param query + * @returns {*} + */ + +export const listTimesheetProject = (query?: TimesheetProjectQuery): AxiosPromise => { + return request({ + url: '/oa/erp/timesheetProject/list', + method: 'get', + params: query + }); +}; + +/** + * 查询项目工作明细详细 + * @param timesheetProjectId + */ +export const getTimesheetProject = (timesheetProjectId: string | number): AxiosPromise => { + return request({ + url: '/oa/erp/timesheetProject/' + timesheetProjectId, + method: 'get' + }); +}; + +/** + * 新增项目工作明细 + * @param data + */ +export const addTimesheetProject = (data: TimesheetProjectForm) => { + return request({ + url: '/oa/erp/timesheetProject', + method: 'post', + data: data + }); +}; + +/** + * 修改项目工作明细 + * @param data + */ +export const updateTimesheetProject = (data: TimesheetProjectForm) => { + return request({ + url: '/oa/erp/timesheetProject', + method: 'put', + data: data + }); +}; + +/** + * 删除项目工作明细 + * @param timesheetProjectId + */ +export const delTimesheetProject = (timesheetProjectId: string | number | Array) => { + return request({ + url: '/oa/erp/timesheetProject/' + timesheetProjectId, + method: 'delete' + }); +}; + +/** + * 下拉框查询项目工作明细列表 + * @param query + * @returns {*} + */ +export function getErpTimesheetProjectList (query) { + return request({ + url: '/oa/erp/timesheetProject/getErpTimesheetProjectList', + method: 'get', + params: query + }); +}; diff --git a/src/api/oa/erp/timesheetProject/types.ts b/src/api/oa/erp/timesheetProject/types.ts new file mode 100644 index 0000000..be0ea0b --- /dev/null +++ b/src/api/oa/erp/timesheetProject/types.ts @@ -0,0 +1,146 @@ +export interface TimesheetProjectVO { + /** + * 项目工作ID + */ + timesheetProjectId: string | number; + + /** + * 工时填报ID + */ + timesheetId: string | number; + + /** + * 序号 + */ + sortOrder: number; + + /** + * 项目ID + */ + projectId: string | number; + + /** + * 项目号 + */ + projectCode: string; + + /** + * 项目名称 + */ + projectName: string; + + /** + * 项目经理ID + */ + projectManagerId: string | number; + + /** + * 部门ID + */ + deptId: string | number; + + /** + * 工时 + */ + hours: number; + +} + +export interface TimesheetProjectForm extends BaseEntity { + /** + * 项目工作ID + */ + timesheetProjectId?: string | number; + + /** + * 工时填报ID + */ + timesheetId?: string | number; + + /** + * 序号 + */ + sortOrder?: number; + + /** + * 项目ID + */ + projectId?: string | number; + + /** + * 项目号 + */ + projectCode?: string; + + /** + * 项目名称 + */ + projectName?: string; + + /** + * 项目经理ID + */ + projectManagerId?: string | number; + + /** + * 部门ID + */ + deptId?: string | number; + + /** + * 工时 + */ + hours?: number; + +} + +export interface TimesheetProjectQuery extends PageQuery { + + /** + * 工时填报ID + */ + timesheetId?: string | number; + + /** + * 序号 + */ + sortOrder?: number; + + /** + * 项目ID + */ + projectId?: string | number; + + /** + * 项目号 + */ + projectCode?: string; + + /** + * 项目名称 + */ + projectName?: string; + + /** + * 项目经理ID + */ + projectManagerId?: string | number; + + /** + * 部门ID + */ + deptId?: string | number; + + /** + * 工时 + */ + hours?: number; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/src/enums/OAEnum.ts b/src/enums/OAEnum.ts index dc5512a..fad693f 100644 --- a/src/enums/OAEnum.ts +++ b/src/enums/OAEnum.ts @@ -22,6 +22,11 @@ export enum CodeRuleEnum { */ AFTER_SALES = '1012', + /** + * 工时填报编号规则 + */ + TIMESHEET = '1015', + PROJECT_REPORT = '1013' } @@ -104,5 +109,9 @@ export enum FlowCodeEnum { /** * 售后项目标识KEY */ - AFTER_SALES_KEY = 'OAAS' + AFTER_SALES_KEY = 'OAAS', + /** + * 工时填报标识KEY + */ + TIMESHEET_KEY = 'OATS' } diff --git a/src/views/oa/erp/afterSales/edit.vue b/src/views/oa/erp/afterSales/edit.vue index 0c7ee51..99cb726 100644 --- a/src/views/oa/erp/afterSales/edit.vue +++ b/src/views/oa/erp/afterSales/edit.vue @@ -17,7 +17,6 @@ @@ -190,7 +189,7 @@ - + - +