Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
O
oaServer
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
node_server
oaServer
Commits
c9894dba
Commit
c9894dba
authored
Dec 29, 2025
by
chenjinjing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
no message
parent
0d5ce51e
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
118 additions
and
26 deletions
+118
-26
workingLog.ts
src/biz/workingLog.ts
+109
-17
askForLeave.ts
src/routers/askForLeave.ts
+1
-1
attendance.ts
src/routers/attendance.ts
+1
-1
member.ts
src/routers/member.ts
+1
-1
overtime.ts
src/routers/overtime.ts
+1
-1
project.ts
src/routers/project.ts
+1
-1
public.ts
src/routers/public.ts
+1
-1
stats.ts
src/routers/stats.ts
+1
-1
user.ts
src/routers/user.ts
+1
-1
workingLog.ts
src/routers/workingLog.ts
+1
-1
No files found.
src/biz/workingLog.ts
View file @
c9894dba
...
@@ -237,35 +237,90 @@ export async function adminWorkLogForProject(page:number, startMs:string, endMs:
...
@@ -237,35 +237,90 @@ export async function adminWorkLogForProject(page:number, startMs:string, endMs:
* @param endMs 结束时间
* @param endMs 结束时间
* @returns {dataList:工时管理列表, name:`【按时间分工时】.xlsx`}
* @returns {dataList:工时管理列表, name:`【按时间分工时】.xlsx`}
*/
*/
// export async function outPutAdminWorkingLogListForTime(startMs:string, endMs:string) {
// let selectParam:any = {};
// if (startMs && endMs) {
// selectParam.dateKey = {"%between%":[moment(startMs).format("YYYY-MM-DD") + ' 00:00:00', moment(endMs).format("YYYY-MM-DD") + ' 23:59:59']};
// }
// /**加班 */
// let overtimeList = await selectDataListByParam(TABLENAMEENUM.加班, selectParam, ["dateKey", "userId", "time" ]);
// let overtimeMap = {};
// overtimeList.forEach(info => {
// let {dateKey, userId, time} = info;
// let dateKeyStr = moment(dateKey).format("YYYY-MM-DD");
// if (!overtimeMap[dateKeyStr]) overtimeMap[dateKeyStr] = {};
// if (!overtimeMap[dateKeyStr][userId]) overtimeMap[dateKeyStr][userId] = time;
// });
// /**工时 */
// let includeConf = {};
// includeConf[TABLENAMEENUM.项目表] = ["name", "projectId"];
// includeConf[TABLENAMEENUM.用户表] = ["name", "userId", "departmentId"];
// let column = ["dateKey", "time", "isOutside", "workLog"];
// let dbList = await selectDataToTableAssociation(TABLENAMEENUM.工时表, includeConf, selectParam, column );
// let result = [
// ["日期年","日期月","日期日","部门","姓名","项目名称","项目编号","时长/小时","工作内容", "加班时长"]
// ];
// dbList.forEach(info => {
// let {dateKey, user, project } = info;
// let year = moment(dateKey).year();
// let month = moment(dateKey).month()+1;
// let day = moment(dateKey).date();
// let itemList = [
// year,
// month,
// day,
// changeEnumValue(DEPARTMENTENUM, user.departmentId),
// user.name,
// project.name,
// project.projectId,
// info.time,
// info.workLog
// ];
// let dateKeyStr = moment(dateKey).format("YYYY-MM-DD");
// if (overtimeMap[dateKeyStr] && overtimeMap[dateKeyStr][user.userId]) itemList.push(overtimeMap[dateKeyStr][user.userId]);
// result.push(itemList);
// });
// return {dataList:result, name:`【按时间分工时】.xlsx`};
// }
/**
* 导出按时间分的工时管理列表
* @param startMs 开始时间
* @param endMs 结束时间
* @returns {dataList:工时管理列表, name:`【按时间分工时】.xlsx`}
*/
export
async
function
outPutAdminWorkingLogListForTime
(
startMs
:
string
,
endMs
:
string
)
{
export
async
function
outPutAdminWorkingLogListForTime
(
startMs
:
string
,
endMs
:
string
)
{
let
selectParam
:
any
=
{};
let
selectParam
:
any
=
{};
if
(
startMs
&&
endMs
)
{
if
(
startMs
&&
endMs
)
{
selectParam
.
dateKey
=
{
"%between%"
:[
moment
(
startMs
).
format
(
"YYYY-MM-DD"
)
+
' 00:00:00'
,
moment
(
endMs
).
format
(
"YYYY-MM-DD"
)
+
' 23:59:59'
]};
selectParam
.
dateKey
=
{
"%between%"
:[
moment
(
startMs
).
format
(
"YYYY-MM-DD"
)
+
' 00:00:00'
,
moment
(
endMs
).
format
(
"YYYY-MM-DD"
)
+
' 23:59:59'
]};
}
}
/**加班 */
/**工时数据 */
let
overtimeList
=
await
selectDataListByParam
(
TABLENAMEENUM
.
加班
,
selectParam
,
[
"dateKey"
,
"userId"
,
"time"
]);
let
overtimeMap
=
{};
overtimeList
.
forEach
(
info
=>
{
let
{
dateKey
,
userId
,
time
}
=
info
;
let
dateKeyStr
=
moment
(
dateKey
).
format
(
"YYYY-MM-DD"
);
if
(
!
overtimeMap
[
dateKeyStr
])
overtimeMap
[
dateKeyStr
]
=
{};
if
(
!
overtimeMap
[
dateKeyStr
][
userId
])
overtimeMap
[
dateKeyStr
][
userId
]
=
time
;
});
/**工时 */
let
includeConf
=
{};
let
includeConf
=
{};
includeConf
[
TABLENAMEENUM
.
项目表
]
=
[
"name"
,
"projectId"
];
includeConf
[
TABLENAMEENUM
.
项目表
]
=
[
"name"
,
"projectId"
];
includeConf
[
TABLENAMEENUM
.
用户表
]
=
[
"name"
,
"userId"
,
"departmentId"
];
includeConf
[
TABLENAMEENUM
.
用户表
]
=
[
"name"
,
"userId"
,
"departmentId"
];
let
column
=
[
"dateKey"
,
"time"
,
"isOutside"
,
"workLog"
];
let
column
=
[
"dateKey"
,
"time"
,
"isOutside"
,
"workLog"
];
let
dbList
=
await
selectDataToTableAssociation
(
TABLENAMEENUM
.
工时表
,
includeConf
,
selectParam
,
column
);
let
dbList
=
await
selectDataToTableAssociation
(
TABLENAMEENUM
.
工时表
,
includeConf
,
selectParam
,
column
);
let
result
=
[
/**加班数据 */
let
includeJiabanConf
=
{};
includeJiabanConf
[
TABLENAMEENUM
.
项目表
]
=
[
"name"
,
"projectId"
];
includeJiabanConf
[
TABLENAMEENUM
.
用户表
]
=
[
"name"
,
"userId"
,
"departmentId"
];
let
overtimeList
=
await
selectDataToTableAssociation
(
TABLENAMEENUM
.
加班
,
includeJiabanConf
,
selectParam
,
[
"dateKey"
,
"userId"
,
"time"
,
"workLog"
]);
let
result
:
(
string
|
number
)[][]
=
[
[
"日期年"
,
"日期月"
,
"日期日"
,
"部门"
,
"姓名"
,
"项目名称"
,
"项目编号"
,
"时长/小时"
,
"工作内容"
,
"加班时长"
]
[
"日期年"
,
"日期月"
,
"日期日"
,
"部门"
,
"姓名"
,
"项目名称"
,
"项目编号"
,
"时长/小时"
,
"工作内容"
,
"加班时长"
]
];
];
// 处理工时数据
dbList
.
forEach
(
info
=>
{
dbList
.
forEach
(
info
=>
{
let
{
dateKey
,
user
,
project
}
=
info
;
let
{
dateKey
,
user
,
project
}
=
info
;
let
year
=
moment
(
dateKey
).
year
();
let
year
=
moment
(
dateKey
).
year
();
let
month
=
moment
(
dateKey
).
month
()
+
1
;
let
month
=
moment
(
dateKey
).
month
()
+
1
;
let
day
=
moment
(
dateKey
).
date
();
let
day
=
moment
(
dateKey
).
date
();
...
@@ -278,13 +333,50 @@ export async function outPutAdminWorkingLogListForTime(startMs:string, endMs:str
...
@@ -278,13 +333,50 @@ export async function outPutAdminWorkingLogListForTime(startMs:string, endMs:str
project
.
name
,
project
.
name
,
project
.
projectId
,
project
.
projectId
,
info
.
time
,
info
.
time
,
info
.
workLog
info
.
workLog
,
""
// 加班时长初始为0
];
result
.
push
(
itemList
);
});
// 处理加班数据
overtimeList
.
forEach
(
info
=>
{
let
{
dateKey
,
user
,
project
}
=
info
;
let
year
=
moment
(
dateKey
).
year
();
let
month
=
moment
(
dateKey
).
month
()
+
1
;
let
day
=
moment
(
dateKey
).
date
();
let
itemList
=
[
year
,
month
,
day
,
changeEnumValue
(
DEPARTMENTENUM
,
user
.
departmentId
),
user
.
name
,
project
.
name
,
project
.
projectId
,
""
,
// 正常工时时长为0
info
.
workLog
||
''
,
// 工作内容
info
.
time
// 加班时长
];
];
let
dateKeyStr
=
moment
(
dateKey
).
format
(
"YYYY-MM-DD"
);
if
(
overtimeMap
[
dateKeyStr
]
&&
overtimeMap
[
dateKeyStr
][
user
.
userId
])
itemList
.
push
(
overtimeMap
[
dateKeyStr
][
user
.
userId
]);
result
.
push
(
itemList
);
result
.
push
(
itemList
);
});
});
// 按日期排序,确保数据有序
// result.sort((a, b) => {
// // 跳过表头
// if (a[0] === "日期年" || b[0] === "日期年") return 0;
// const yearA = a[0] as number;
// const yearB = b[0] as number;
// const monthA = a[1] as number;
// const monthB = b[1] as number;
// const dayA = a[2] as number;
// const dayB = b[2] as number;
// if (yearA !== yearB) return yearA - yearB;
// if (monthA !== monthB) return monthA - monthB;
// return dayA - dayB;
// });
return
{
dataList
:
result
,
name
:
`【按时间分工时】.xlsx`
};
return
{
dataList
:
result
,
name
:
`【按时间分工时】.xlsx`
};
}
}
...
...
src/routers/askForLeave.ts
View file @
c9894dba
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* 请假
* 请假
*/
*/
import
*
as
asyncHandler
from
'express-async-handler'
;
import
asyncHandler
=
require
(
'express-async-handler'
)
;
import
*
as
askForLeaveBiz
from
'../biz/askForLeave'
;
import
*
as
askForLeaveBiz
from
'../biz/askForLeave'
;
import
{
checkFuHuaQiToken
}
from
'../middleware/user'
;
import
{
checkFuHuaQiToken
}
from
'../middleware/user'
;
import
{
eccReqParamater
}
from
'../tools/eccParam'
;
import
{
eccReqParamater
}
from
'../tools/eccParam'
;
...
...
src/routers/attendance.ts
View file @
c9894dba
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* 出勤路由
* 出勤路由
*/
*/
import
*
as
asyncHandler
from
'express-async-handler'
;
import
asyncHandler
=
require
(
'express-async-handler'
)
;
import
{
checkFuHuaQiToken
}
from
'../middleware/user'
;
import
{
checkFuHuaQiToken
}
from
'../middleware/user'
;
import
*
as
attendanceBiz
from
'../biz/attendance'
;
import
*
as
attendanceBiz
from
'../biz/attendance'
;
import
{
eccReqParamater
}
from
'../tools/eccParam'
;
import
{
eccReqParamater
}
from
'../tools/eccParam'
;
...
...
src/routers/member.ts
View file @
c9894dba
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* 成员
* 成员
*/
*/
import
*
as
asyncHandler
from
'express-async-handler'
;
import
asyncHandler
=
require
(
'express-async-handler'
)
;
import
{
checkFuHuaQiToken
}
from
'../middleware/user'
;
import
{
checkFuHuaQiToken
}
from
'../middleware/user'
;
import
*
as
memberBiz
from
'../biz/member'
;
import
*
as
memberBiz
from
'../biz/member'
;
import
{
eccReqParamater
}
from
'../tools/eccParam'
;
import
{
eccReqParamater
}
from
'../tools/eccParam'
;
...
...
src/routers/overtime.ts
View file @
c9894dba
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* 加班路由
* 加班路由
*/
*/
import
*
as
asyncHandler
from
'express-async-handler'
;
import
asyncHandler
=
require
(
'express-async-handler'
)
;
import
{
checkFuHuaQiToken
}
from
'../middleware/user'
;
import
{
checkFuHuaQiToken
}
from
'../middleware/user'
;
import
{
addOvertimeLog
,
approveOverTime
,
approveOverTimeList
,
deleteOvertimeLog
,
overtimeList
,
updateOvertimeLog
}
from
'../biz/overtime'
;
import
{
addOvertimeLog
,
approveOverTime
,
approveOverTimeList
,
deleteOvertimeLog
,
overtimeList
,
updateOvertimeLog
}
from
'../biz/overtime'
;
import
{
eccReqParamater
}
from
'../tools/eccParam'
;
import
{
eccReqParamater
}
from
'../tools/eccParam'
;
...
...
src/routers/project.ts
View file @
c9894dba
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* 项目路由
* 项目路由
*/
*/
import
*
as
asyncHandler
from
'express-async-handler'
;
import
asyncHandler
=
require
(
'express-async-handler'
)
;
import
{
checkFuHuaQiToken
}
from
'../middleware/user'
;
import
{
checkFuHuaQiToken
}
from
'../middleware/user'
;
import
*
as
projectBiz
from
'../biz/project'
;
import
*
as
projectBiz
from
'../biz/project'
;
import
{
eccReqParamater
}
from
'../tools/eccParam'
;
import
{
eccReqParamater
}
from
'../tools/eccParam'
;
...
...
src/routers/public.ts
View file @
c9894dba
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* 公共资源路由
* 公共资源路由
*/
*/
import
*
as
asyncHandler
from
'express-async-handler'
;
import
asyncHandler
=
require
(
'express-async-handler'
)
;
import
{
ASKFORLEAVETYPE
,
WORKLOGADMINTYPE
}
from
'../config/enum'
;
import
{
ASKFORLEAVETYPE
,
WORKLOGADMINTYPE
}
from
'../config/enum'
;
import
{
projectListForSelect
}
from
'../biz/project'
;
import
{
projectListForSelect
}
from
'../biz/project'
;
...
...
src/routers/stats.ts
View file @
c9894dba
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* 统计路由
* 统计路由
*/
*/
import
*
as
asyncHandler
from
'express-async-handler'
;
import
asyncHandler
=
require
(
'express-async-handler'
)
;
import
*
as
statsBiz
from
'../biz/stats'
;
import
*
as
statsBiz
from
'../biz/stats'
;
import
moment
=
require
(
'moment'
);
import
moment
=
require
(
'moment'
);
import
{
eccReqParamater
}
from
'../tools/eccParam'
;
import
{
eccReqParamater
}
from
'../tools/eccParam'
;
...
...
src/routers/user.ts
View file @
c9894dba
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* 用户路由
* 用户路由
*/
*/
import
*
as
asyncHandler
from
'express-async-handler'
;
import
asyncHandler
=
require
(
'express-async-handler'
)
;
import
*
as
userBiz
from
'../biz/user'
;
import
*
as
userBiz
from
'../biz/user'
;
import
{
checkFuHuaQiToken
}
from
'../middleware/user'
;
import
{
checkFuHuaQiToken
}
from
'../middleware/user'
;
import
{
eccReqParamater
}
from
'../tools/eccParam'
;
import
{
eccReqParamater
}
from
'../tools/eccParam'
;
...
...
src/routers/workingLog.ts
View file @
c9894dba
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* 工时路由
* 工时路由
*/
*/
import
*
as
asyncHandler
from
'express-async-handler'
;
import
asyncHandler
=
require
(
'express-async-handler'
)
;
import
*
as
workingLogBiz
from
'../biz/workingLog'
;
import
*
as
workingLogBiz
from
'../biz/workingLog'
;
import
{
checkFuHuaQiToken
}
from
'../middleware/user'
;
import
{
checkFuHuaQiToken
}
from
'../middleware/user'
;
import
{
eccEnumValue
,
eccReqParamater
}
from
'../tools/eccParam'
;
import
{
eccEnumValue
,
eccReqParamater
}
from
'../tools/eccParam'
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment