", level)
1351 |
1352 | s := fmt.Sprintf("ID:%s OPEN_ID:%s 名称:%s", dept.DepartmentID, dept.OpenDepartmentID, dept.Name)
1353 | if dept.EnUsName != "" {
1354 | s += fmt.Sprintf(" 英文名称:%s", dept.EnUsName)
1355 | }
1356 | if dept.JaJpName != "" {
1357 | s += fmt.Sprintf(" 日文名称:%s", dept.JaJpName)
1358 | }
1359 | if dept.LeaderUserName != "" {
1360 | s += fmt.Sprintf(" 领导:%s(ID:%s)\n", dept.LeaderUserName, dept.LeaderUserID)
1361 | } else if dept.LeaderUserID != "" {
1362 | s += fmt.Sprintf(" 领导:ID:%s\n", dept.LeaderUserID)
1363 | }
1364 | if len(dept.DepartmentHrbps) > 0 {
1365 | var tmp []string
1366 | for _, hrbp := range dept.DepartmentHrbps {
1367 | tmp = append(tmp, *hrbp)
1368 | }
1369 | s += fmt.Sprintf(" Hrbp:%s\n", strings.Join(tmp, "、"))
1370 | }
1371 |
1372 | // 添加折叠/展开按钮
1373 | if len(dept.Children) > 0 {
1374 | html += fmt.Sprintf("
-")
1375 | } else {
1376 | html += "
"
1377 | }
1378 | html += fmt.Sprintf("
%s", s)
1379 |
1380 | // 添加部门名称和用户列表的父级容器
1381 | html += fmt.Sprintf("
")
1382 | a := ""
1383 | for i := 0; i < len(dept.User); i++ {
1384 | user := dept.User[i]
1385 | var gender string
1386 | if user.Gender == 0 {
1387 | gender = "保密"
1388 | } else if user.Gender == 1 {
1389 | gender = "男"
1390 | } else if user.Gender == 2 {
1391 | gender = "女"
1392 | }
1393 | var hrbps []string
1394 | for _, hrbp := range dept.DepartmentHrbps {
1395 | hrbps = append(hrbps, *hrbp)
1396 | }
1397 | var userStat []string
1398 | if user.Status.IsUnjoin {
1399 | userStat = append(userStat, "未加入")
1400 | }
1401 | if user.Status.IsResigned {
1402 | userStat = append(userStat, "已离职")
1403 | }
1404 | if user.Status.IsActivated {
1405 | userStat = append(userStat, "已激活")
1406 | }
1407 | if user.Status.IsExited {
1408 | userStat = append(userStat, "已退出")
1409 | }
1410 | if user.Status.IsFrozen {
1411 | userStat = append(userStat, "已冻结")
1412 | }
1413 | var workLocation string
1414 | if user.Country != "" {
1415 | workLocation += user.Country
1416 | }
1417 | if user.City != "" {
1418 | workLocation += user.City
1419 | }
1420 | var isAdmin string
1421 | if user.IsTenantManager {
1422 | isAdmin = "是"
1423 | }
1424 | if !user.IsTenantManager {
1425 | isAdmin = "否"
1426 | }
1427 | m := fmt.Sprintf("ID:%s OPEN_ID:%s 姓名:%s 性别:%s 电话号码:%s 邮箱:%s 企业邮箱:%s 状态:%s 工号:%s 是否企业管理员:%s", user.UserId, user.OpenId, user.Name, gender, user.Mobile, user.Email, user.EnterpriseEmail, userStat, user.EmployeeNo, isAdmin)
1428 | a += fmt.Sprintf("
%s", m)
1429 | }
1430 | html += fmt.Sprintf("
", a)
1431 |
1432 | // 递归生成子部门树
1433 | if len(dept.Children) > 0 {
1434 | html += cli.generateDepartmentTreeWithUsersHTML(dept.Children, level+1)
1435 | }
1436 |
1437 | html += "
"
1438 | }
1439 | return html
1440 | }
1441 |
1442 | // saveDepartmentTreeWithUsersToHTML 生成包含部门信息和用户信息的部门树并将其输出为HTML文档
1443 | func (cli *feiShuCli) saveDepartmentTreeWithUsersToHTML(nodes []*FeiShuDepartmentNode, filename string) (string, error) {
1444 | index := strings.LastIndex(filename, ".html")
1445 | if index == -1 {
1446 | filename = filename + ".html"
1447 | }
1448 | tmp := filename
1449 | // 判断文件是否存在
1450 | if utils.IsFileExists(filename) {
1451 | newFilename := generateNewFilename(filename)
1452 | filename = newFilename
1453 | }
1454 | file, err := os.Create(filename)
1455 | if err != nil {
1456 | return "", errors.New("创建HTML文件失败: " + err.Error())
1457 | }
1458 | defer file.Close()
1459 | departmentTreeHTML := cli.generateDepartmentTreeWithUsersHTML(nodes, 0)
1460 | htmlDocument := cli.generateTreeHTMLDocument(departmentTreeHTML)
1461 | _, err = file.WriteString(htmlDocument)
1462 | if err != nil {
1463 | return "", errors.New("无法写入HTML内容到文件: " + err.Error())
1464 | }
1465 | if filename == tmp {
1466 | return fmt.Sprintf("文件已保存至 %s", filename), nil
1467 | }
1468 | return fmt.Sprintf("%s 已存在,已另存为 %s", tmp, filename), nil
1469 | }
1470 |
1471 | // generateTreeHTMLDocument 生成添加折叠功能的完整的HTML文档
1472 | func (cli *feiShuCli) generateTreeHTMLDocument(content string) string {
1473 | html := `
1474 |
1475 |
1476 |
1477 |
1496 |
1532 |
1533 |
1534 |