Browse Source

Merge branch 'master' of http://47.100.37.243:10191/wutt/manHourHousekeeper

zhouyy 3 months ago
parent
commit
c90caeeb52
57 changed files with 689 additions and 330 deletions
  1. BIN
      fhKeeper/formulahousekeeper/customerBuler-crm/welcome_card.jpg
  2. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/DdBillInfoController.java
  3. 4 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/DepartmentController.java
  4. 37 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/DepartmentEnableController.java
  5. 169 169
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/FeishuInfoController.java
  6. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  7. 8 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserWithBeisenController.java
  8. 46 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/DdBillInfo.java
  9. 38 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/DepartmentEnable.java
  10. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/UserVO.java
  11. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/DdBillInfoMapper.java
  12. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/DepartmentEnableMapper.java
  13. 7 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectMapper.java
  14. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/DdBillInfoService.java
  15. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/DepartmentEnableService.java
  16. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/DepartmentService.java
  17. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DdBillInfoServiceImpl.java
  18. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentEnableServiceImpl.java
  19. 24 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java
  20. 82 7
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java
  21. 33 34
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  22. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  23. 13 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  24. 18 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/DdBillInfoMapper.xml
  25. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/DepartmentEnableMapper.xml
  26. BIN
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/upload/项目导入模板_5.xlsx
  27. BIN
      fhKeeper/formulahousekeeper/timesheet/card_img.png
  28. 1 0
      fhKeeper/formulahousekeeper/timesheet/src/i18n/en.json
  29. 1 0
      fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json
  30. 9 5
      fhKeeper/formulahousekeeper/timesheet/src/views/project/detail.vue
  31. 4 3
      fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue
  32. 4 4
      fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue
  33. 0 1
      fhKeeper/formulahousekeeper/timesheet/src/views/settings/timetype.vue
  34. 33 87
      fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue
  35. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue
  36. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/list.vue
  37. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/list_department.vue
  38. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/weeklyReportReview.vue
  39. 4 1
      fhKeeper/formulahousekeeper/timesheet_deploy/copyFiles.sh
  40. 1 1
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue
  41. 1 1
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/weekEdit.vue
  42. BIN
      fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/Customer_Steward_evaluate.jpg
  43. BIN
      fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/Customer_Steward_evaluate2.jpg
  44. BIN
      fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/Customer_Steward_evaluate3.jpg
  45. BIN
      fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg1.jpg
  46. BIN
      fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg10.jpg
  47. BIN
      fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg11.jpg
  48. BIN
      fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg2.jpg
  49. BIN
      fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg3.jpg
  50. BIN
      fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg4.jpg
  51. BIN
      fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg5.jpg
  52. BIN
      fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg6.jpg
  53. BIN
      fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg7.jpg
  54. BIN
      fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg8.jpg
  55. BIN
      fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg9.jpg
  56. BIN
      fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/followup/bannar.jpg
  57. BIN
      fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/workshop/bj.jpg

BIN
fhKeeper/formulahousekeeper/customerBuler-crm/welcome_card.jpg


+ 21 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/DdBillInfoController.java

@@ -0,0 +1,21 @@
+package com.management.platform.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-01-26
+ */
+@RestController
+@RequestMapping("/dd-bill-info")
+public class DdBillInfoController {
+
+}
+

+ 4 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/DepartmentController.java

@@ -77,8 +77,8 @@ public class DepartmentController {
      * parentId 父级部门id
      */
     @RequestMapping("/add")
-    public HttpRespMsg insertDepartment(@RequestParam String name, Integer parentId, String managerId, String reportAuditUserid,String otherManagerIds, HttpServletRequest request) {
-        return departmentService.insertDepartment(name, parentId, managerId, reportAuditUserid,otherManagerIds, request);
+    public HttpRespMsg insertDepartment(@RequestParam String name, Integer parentId, String managerId, String reportAuditUserid,String otherManagerIds, Integer isEnableMulti,HttpServletRequest request) {
+        return departmentService.insertDepartment(name, parentId, managerId, reportAuditUserid,otherManagerIds, isEnableMulti, request);
     }
 
     /**
@@ -87,8 +87,8 @@ public class DepartmentController {
      * name 部门名称
      */
     @RequestMapping("/edit")
-    public HttpRespMsg updateDepartment(@RequestParam Integer id, @RequestParam String name, String managerId, String reportAuditUserid,String otherManagerIds,Integer pushToSap, HttpServletRequest request) {
-        return departmentService.updateDepartment(id, name, managerId, reportAuditUserid,otherManagerIds,pushToSap, request);
+    public HttpRespMsg updateDepartment(@RequestParam Integer id, @RequestParam String name, String managerId, String reportAuditUserid,String otherManagerIds,Integer pushToSap, Integer isEnableMulti, HttpServletRequest request) {
+        return departmentService.updateDepartment(id, name, managerId, reportAuditUserid,otherManagerIds,pushToSap,isEnableMulti, request);
     }
 
     /**

+ 37 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/DepartmentEnableController.java

@@ -0,0 +1,37 @@
+package com.management.platform.controller;
+
+
+import com.management.platform.entity.DepartmentEnable;
+import com.management.platform.mapper.DepartmentEnableMapper;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-02-06
+ */
+@RestController
+@RequestMapping("/department-enable")
+public class DepartmentEnableController {
+
+    private final DepartmentEnableMapper departmentEnableMapper;
+
+    public DepartmentEnableController(DepartmentEnableMapper departmentEnableMapper) {
+        this.departmentEnableMapper = departmentEnableMapper;
+    }
+
+    @RequestMapping("/get")
+    public HttpRespMsg get(Integer departmentId) {
+        DepartmentEnable departmentEnable = departmentEnableMapper.selectById(departmentId);
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.data = departmentEnable;
+        return msg;
+    }
+}
+

+ 169 - 169
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/FeishuInfoController.java

@@ -436,7 +436,7 @@ public class FeishuInfoController {
             }
             userVO.setHasAuditDept(num>0);
             //获取当前角色的权限菜单
-            setUserRoleMenu(userVO);
+            userService.setUserRoleMenu(userVO);
             httpRespMsg.data = userVO;
             return httpRespMsg;
         }else httpRespMsg.setError("飞书用户未开通");
@@ -448,175 +448,175 @@ public class FeishuInfoController {
         return cnt>0;
     }
 
-    public void setUserRoleMenu(UserVO user) {
-        Integer roleId = user.getRoleId();
-        //获取公司的套餐
-        Company company = companyMapper.selectById(user.getCompanyId());
-        TimeType timeType = timeTypeMapper.selectById(company.getId());
-        //按照公司开通的模块进行匹配
-        QueryWrapper<SysModule> queryWrapper = new QueryWrapper<SysModule>().eq("package_time", 1);
-        if (company.getPackageProject() == 1) {
-            queryWrapper.or().eq("package_project", 1);
-        }
-        if (company.getPackageOa() == 1) {
-            queryWrapper.or().eq("package_oa", 1);
-        }
-        if (company.getPackageExpense() == 1) {
-            queryWrapper.or().eq("package_expense", 1);
-        }
-        if (company.getPackageCustomer() == 1) {
-            queryWrapper.or().eq("package_customer", 1);
-        }
-        if (company.getPackageEngineering() == 1) {
-            queryWrapper.or().eq("package_engineering", 1);
-        }
-        if (company.getPackageContract() == 1) {
-            queryWrapper.or().eq("package_contract", 1);
-        }
-        if (company.getPackageEtimecard()== 1) {
-            queryWrapper.or().eq("package_etimecard", 1);
-        }
-        if (company.getPackageFinance() == 1) {
-            queryWrapper.or().eq("package_finance", 1);
-        }
-        if (company.getPackageProvider() == 1) {
-            queryWrapper.or().eq("package_provider", 1);
-        }
-        if (company.getPackageProjectApproval() == 1) {
-            queryWrapper.or().eq("package_project_approval", 1);
-        }
-        if (timeType.getReportWorkflow() == 1) {
-            queryWrapper.or().eq("report_workflow", 1);
-        }
-        if (timeType.getNeedDeptAudit() == 1) {
-            queryWrapper.or().eq("need_dept_audit", 1);
-        }
-        if (company.getPackageDevice() == 1) {
-            queryWrapper.or().eq("package_device", 1);
-        }
-
-        queryWrapper.orderByAsc("orderitem");
-
-        //返回菜单
-        List<SysRoleModule> rModules = sysRoleModuleMapper.selectList(new QueryWrapper<SysRoleModule>().eq("role_id", roleId));
-        List<Integer> ids = rModules.stream().map(SysRoleModule::getModuleId).collect(Collectors.toList());
-        //项目报告审核模块,如果参与日报的审核,需要自动加上, 或者担任任务分组负责人
-        if (user.isLeader() || user.isHasAuditDept() || (company.getPackageProject() == 1 && taskGroupMapper.selectCount(new QueryWrapper<TaskGroup>().eq("incharger_id", user.getId())) > 0)) {
-            SysModule projectAuditModule = sysModuleMapper.selectOne(new QueryWrapper<SysModule>().eq("name", "项目报告审核"));
-            if (!ids.contains(projectAuditModule.getId())) {
-                ids.add(projectAuditModule.getId());
-            }
-        }
-
-        List<SysModule> moduleList = sysModuleMapper.selectList(queryWrapper);
-
-        //过滤一下,这个角色选中的模块
-        moduleList = moduleList.stream().filter(m->ids.contains(m.getId())).collect(Collectors.toList());
-        if (company.getPackageEngineering() == 1) {
-            //生成虚拟的两个审核放进去
-            SysModule proModule = new SysModule();
-            proModule.setName("专业审核");
-            proModule.setPath("/reviewProfession");
-            proModule.setId(0);
-            moduleList.add(1,proModule);
-            SysModule deptModule = new SysModule();
-            deptModule.setName("部门审核");
-            deptModule.setPath("/reviewDepartment");
-            deptModule.setId(0);
-            moduleList.add(2,deptModule);
-        }
-        //开启了自定义日报列表的情况下,需要菜单上有
-        if (timeType.getCustomDegreeActive() == 1 && moduleList.stream().anyMatch(mod->mod.getName().equals("系统基础设置"))) {
-            SysModule centerManageModule = new SysModule();
-            //centerManageModule.setName(timeType.getCustomDegreeName()+"管理");
-            centerManageModule.setName(timeType.getCustomDegreeName()+MessageUtils.message("project.manage"));
-            centerManageModule.setPath("/centerManage");
-            centerManageModule.setId(0);
-            //加到组织架构前面
-            int findIndex = 0;
-            for (int i=0;i<moduleList.size(); i++) {
-                if (moduleList.get(i).getName().equals("组织架构") || moduleList.get(i).getName().equals("基础数据管理")) {
-                    findIndex = i;
-                    break;
-                }
-            }
-            moduleList.add(findIndex,centerManageModule);
-        }
-        //组装层级关系,默认只有两级
-        List<SysModule> menuList = new ArrayList<>();
-        for (SysModule module : moduleList) {
-            if (module.getParentId() == null) {
-                menuList.add(module);
-            }
-        }
-        for (SysModule mainMenu : menuList) {
-            List<SysModule> list = moduleList.stream().filter(mod -> mainMenu.getId().equals(mod.getParentId())).collect(Collectors.toList());
-            mainMenu.setChildren(list);
-        }
-
-        user.setModuleList(menuList);
-        //此处返回权限集合
-        List<Integer> functionIdList = new ArrayList<>();
-        //获取角色所有的功能id
-        List<SysRoleFunction> funList = sysRoleFunctionMapper.selectList(new QueryWrapper<SysRoleFunction>()
-                .eq("role_id", roleId));
-        for (SysRoleFunction sysRoleFunction : funList) {
-            functionIdList.add(sysRoleFunction.getFunctionId());
-        }
-        //获取当前公司开启了得报表
-        List<CompanyReport> companyReportList = companyReportMapper.selectList(new QueryWrapper<CompanyReport>().eq("company_id", company.getId()));
-        List<Integer> formIds = companyReportList.stream().map(CompanyReport::getReportFormId).collect(Collectors.toList());
-        if (functionIdList.size() > 0) {
-            //根据功能id获取可用的操作代码
-            if (formIds.size() == 0) {
-                formIds.add(-1);
-            }
-            QueryWrapper<SysFunction> functionQueryWrapper = new QueryWrapper<SysFunction>().and(wrapper1->wrapper1.isNull("report_form_id").or().in("report_form_id",formIds)).and(wrapper->{
-                wrapper.eq("package_time", 1);
-                if (company.getPackageProject() == 1) {
-                    wrapper.or().eq("package_project", 1);
-                }
-                if (company.getPackageOa() == 1) {
-                    wrapper.or().eq("package_oa", 1);
-                }
-                if (company.getPackageExpense() == 1) {
-                    wrapper.or().eq("package_expense", 1);
-                }
-                if (company.getPackageCustomer() == 1) {
-                    wrapper.or().eq("package_customer", 1);
-                }
-                if (company.getPackageEngineering() == 1) {
-                    wrapper.or().eq("package_engineering", 1);
-                }
-                if (company.getPackageContract() == 1) {
-                    wrapper.or().eq("package_contract", 1);
-                }
-                if (company.getPackageEtimecard()== 1) {
-                    wrapper.or().eq("package_etimecard", 1);
-                }
-                if (company.getPackageFinance() == 1) {
-                    wrapper.or().eq("package_finance", 1);
-                }
-//            if (company.getPackageProvider() == 1) {
-//                wrapper.or().eq("package_provider", 1);
+//    public void setUserRoleMenu(UserVO user) {
+//        Integer roleId = user.getRoleId();
+//        //获取公司的套餐
+//        Company company = companyMapper.selectById(user.getCompanyId());
+//        TimeType timeType = timeTypeMapper.selectById(company.getId());
+//        //按照公司开通的模块进行匹配
+//        QueryWrapper<SysModule> queryWrapper = new QueryWrapper<SysModule>().eq("package_time", 1);
+//        if (company.getPackageProject() == 1) {
+//            queryWrapper.or().eq("package_project", 1);
+//        }
+//        if (company.getPackageOa() == 1) {
+//            queryWrapper.or().eq("package_oa", 1);
+//        }
+//        if (company.getPackageExpense() == 1) {
+//            queryWrapper.or().eq("package_expense", 1);
+//        }
+//        if (company.getPackageCustomer() == 1) {
+//            queryWrapper.or().eq("package_customer", 1);
+//        }
+//        if (company.getPackageEngineering() == 1) {
+//            queryWrapper.or().eq("package_engineering", 1);
+//        }
+//        if (company.getPackageContract() == 1) {
+//            queryWrapper.or().eq("package_contract", 1);
+//        }
+//        if (company.getPackageEtimecard()== 1) {
+//            queryWrapper.or().eq("package_etimecard", 1);
+//        }
+//        if (company.getPackageFinance() == 1) {
+//            queryWrapper.or().eq("package_finance", 1);
+//        }
+//        if (company.getPackageProvider() == 1) {
+//            queryWrapper.or().eq("package_provider", 1);
+//        }
+//        if (company.getPackageProjectApproval() == 1) {
+//            queryWrapper.or().eq("package_project_approval", 1);
+//        }
+//        if (timeType.getReportWorkflow() == 1) {
+//            queryWrapper.or().eq("report_workflow", 1);
+//        }
+//        if (timeType.getNeedDeptAudit() == 1) {
+//            queryWrapper.or().eq("need_dept_audit", 1);
+//        }
+//        if (company.getPackageDevice() == 1) {
+//            queryWrapper.or().eq("package_device", 1);
+//        }
+//
+//        queryWrapper.orderByAsc("orderitem");
+//
+//        //返回菜单
+//        List<SysRoleModule> rModules = sysRoleModuleMapper.selectList(new QueryWrapper<SysRoleModule>().eq("role_id", roleId));
+//        List<Integer> ids = rModules.stream().map(SysRoleModule::getModuleId).collect(Collectors.toList());
+//        //项目报告审核模块,如果参与日报的审核,需要自动加上, 或者担任任务分组负责人
+//        if (user.isLeader() || user.isHasAuditDept() || (company.getPackageProject() == 1 && taskGroupMapper.selectCount(new QueryWrapper<TaskGroup>().eq("incharger_id", user.getId())) > 0)) {
+//            SysModule projectAuditModule = sysModuleMapper.selectOne(new QueryWrapper<SysModule>().eq("name", "项目报告审核"));
+//            if (!ids.contains(projectAuditModule.getId())) {
+//                ids.add(projectAuditModule.getId());
 //            }
-                if (timeType.getSyncCorpwxTime() == 1) {
-                    wrapper.or().eq("sync_corpwx_time", 1);
-                }
-                //开通财务审核功能的
-                if (timeType.getFinanceAudit() == 1) {
-                    wrapper.or().eq("finance_audit", 1);
-                }
-                return wrapper;
-            });
-            functionQueryWrapper.orderByAsc("seq");
-            List<SysFunction> functionList = sysFunctionMapper.selectList(functionQueryWrapper);
-            functionList = functionList.stream().filter(f->functionIdList.contains(f.getId())).collect(Collectors.toList());
-            user.setFunctionList(functionList);
-        } else {
-            user.setFunctionList(new ArrayList<>());
-        }
-    }
+//        }
+//
+//        List<SysModule> moduleList = sysModuleMapper.selectList(queryWrapper);
+//
+//        //过滤一下,这个角色选中的模块
+//        moduleList = moduleList.stream().filter(m->ids.contains(m.getId())).collect(Collectors.toList());
+//        if (company.getPackageEngineering() == 1) {
+//            //生成虚拟的两个审核放进去
+//            SysModule proModule = new SysModule();
+//            proModule.setName("专业审核");
+//            proModule.setPath("/reviewProfession");
+//            proModule.setId(0);
+//            moduleList.add(1,proModule);
+//            SysModule deptModule = new SysModule();
+//            deptModule.setName("部门审核");
+//            deptModule.setPath("/reviewDepartment");
+//            deptModule.setId(0);
+//            moduleList.add(2,deptModule);
+//        }
+//        //开启了自定义日报列表的情况下,需要菜单上有
+//        if (timeType.getCustomDegreeActive() == 1 && moduleList.stream().anyMatch(mod->mod.getName().equals("系统基础设置"))) {
+//            SysModule centerManageModule = new SysModule();
+//            //centerManageModule.setName(timeType.getCustomDegreeName()+"管理");
+//            centerManageModule.setName(timeType.getCustomDegreeName()+MessageUtils.message("project.manage"));
+//            centerManageModule.setPath("/centerManage");
+//            centerManageModule.setId(0);
+//            //加到组织架构前面
+//            int findIndex = 0;
+//            for (int i=0;i<moduleList.size(); i++) {
+//                if (moduleList.get(i).getName().equals("组织架构") || moduleList.get(i).getName().equals("基础数据管理")) {
+//                    findIndex = i;
+//                    break;
+//                }
+//            }
+//            moduleList.add(findIndex,centerManageModule);
+//        }
+//        //组装层级关系,默认只有两级
+//        List<SysModule> menuList = new ArrayList<>();
+//        for (SysModule module : moduleList) {
+//            if (module.getParentId() == null) {
+//                menuList.add(module);
+//            }
+//        }
+//        for (SysModule mainMenu : menuList) {
+//            List<SysModule> list = moduleList.stream().filter(mod -> mainMenu.getId().equals(mod.getParentId())).collect(Collectors.toList());
+//            mainMenu.setChildren(list);
+//        }
+//
+//        user.setModuleList(menuList);
+//        //此处返回权限集合
+//        List<Integer> functionIdList = new ArrayList<>();
+//        //获取角色所有的功能id
+//        List<SysRoleFunction> funList = sysRoleFunctionMapper.selectList(new QueryWrapper<SysRoleFunction>()
+//                .eq("role_id", roleId));
+//        for (SysRoleFunction sysRoleFunction : funList) {
+//            functionIdList.add(sysRoleFunction.getFunctionId());
+//        }
+//        //获取当前公司开启了得报表
+//        List<CompanyReport> companyReportList = companyReportMapper.selectList(new QueryWrapper<CompanyReport>().eq("company_id", company.getId()));
+//        List<Integer> formIds = companyReportList.stream().map(CompanyReport::getReportFormId).collect(Collectors.toList());
+//        if (functionIdList.size() > 0) {
+//            //根据功能id获取可用的操作代码
+//            if (formIds.size() == 0) {
+//                formIds.add(-1);
+//            }
+//            QueryWrapper<SysFunction> functionQueryWrapper = new QueryWrapper<SysFunction>().and(wrapper1->wrapper1.isNull("report_form_id").or().in("report_form_id",formIds)).and(wrapper->{
+//                wrapper.eq("package_time", 1);
+//                if (company.getPackageProject() == 1) {
+//                    wrapper.or().eq("package_project", 1);
+//                }
+//                if (company.getPackageOa() == 1) {
+//                    wrapper.or().eq("package_oa", 1);
+//                }
+//                if (company.getPackageExpense() == 1) {
+//                    wrapper.or().eq("package_expense", 1);
+//                }
+//                if (company.getPackageCustomer() == 1) {
+//                    wrapper.or().eq("package_customer", 1);
+//                }
+//                if (company.getPackageEngineering() == 1) {
+//                    wrapper.or().eq("package_engineering", 1);
+//                }
+//                if (company.getPackageContract() == 1) {
+//                    wrapper.or().eq("package_contract", 1);
+//                }
+//                if (company.getPackageEtimecard()== 1) {
+//                    wrapper.or().eq("package_etimecard", 1);
+//                }
+//                if (company.getPackageFinance() == 1) {
+//                    wrapper.or().eq("package_finance", 1);
+//                }
+////            if (company.getPackageProvider() == 1) {
+////                wrapper.or().eq("package_provider", 1);
+////            }
+//                if (timeType.getSyncCorpwxTime() == 1) {
+//                    wrapper.or().eq("sync_corpwx_time", 1);
+//                }
+//                //开通财务审核功能的
+//                if (timeType.getFinanceAudit() == 1) {
+//                    wrapper.or().eq("finance_audit", 1);
+//                }
+//                return wrapper;
+//            });
+//            functionQueryWrapper.orderByAsc("seq");
+//            List<SysFunction> functionList = sysFunctionMapper.selectList(functionQueryWrapper);
+//            functionList = functionList.stream().filter(f->functionIdList.contains(f.getId())).collect(Collectors.toList());
+//            user.setFunctionList(functionList);
+//        } else {
+//            user.setFunctionList(new ArrayList<>());
+//        }
+//    }
 
 
     @RequestMapping("/initSuperManager")

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -1617,6 +1617,7 @@ public class ReportController {
                     report.setProjectAuditState(0);
                     if (report.getCreatorId().equals(auditor.getId())) {
                         report.setState(1);
+                        report.setProjectAuditState(1);
                     }
                 } else {
                     Optional<Department> first = departmentList.stream().filter(dl -> dl.getDepartmentId().equals(report.getDeptId())).findFirst();
@@ -1633,6 +1634,7 @@ public class ReportController {
                         report.setIsDeptAudit(1);
                         if(report.getCreatorId().equals(first.get().getManagerId())){
                             report.setState(1);
+                            report.setProjectAuditState(1);
                         }
                     }
                 }

+ 8 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserWithBeisenController.java

@@ -179,14 +179,15 @@ public class UserWithBeisenController {
             msg.setError("当前员工在北森系统中不存在,请完成录入员工信息");
             return msg;
         }
-        //todo 获取指定日期的日报数据
+//        todo 获取指定日期的日报数据
         JSONArray dailyReportList = BeiSenUtils.getDailyReportList(createDate, beisenConfig.getAppKey(), beisenConfig.getAppSecret(), 1, 100);
-        //todo 获取到指定日期的考勤数据
+//        todo 获取到指定日期的考勤数据
         JSONObject item = BeiSenUtils.getAttendanceStatisticWithUser(createDate,withBeisen.get().getUserId(), beisenConfig.getAppKey(), beisenConfig.getAppSecret());
         //todo 获取到指定日期的加班数据
         JSONArray allOverTimeList = BeiSenUtils.getOverTimeList(createDate,beisenConfig.getAppKey(),beisenConfig.getAppSecret(),1,100);
         //todo 获取到指定日期的休假数据
         JSONArray vacationList = BeiSenUtils.getVacationList(createDate, beisenConfig.getAppKey(), beisenConfig.getAppSecret(),1,100);
+
         //同步休假数据到工时管家
         List<LeaveSheet> leaveSheetList=new ArrayList<>();
         for (int i = 0; i < vacationList.size(); i++) {
@@ -356,6 +357,7 @@ public class UserWithBeisenController {
                 //根据日报处理休假时长
                Stream<JSONObject> dailyReportStream = dailyReportList.stream().map(elment -> (JSONObject) elment);
                List<JSONObject> list = dailyReportStream.filter(d -> d.getString("StaffId").equals(beisen.get().getUserId())).collect(Collectors.toList());
+
                if(list.size()>0){
                    //年假
                    double annualLeaveHour = list.stream().mapToDouble(l -> l.getDoubleValue("AnnualLeaveHour")).sum();
@@ -367,7 +369,10 @@ public class UserWithBeisenController {
                    double marriageLeaveHour = list.stream().mapToDouble(l -> l.getDoubleValue("MarriageLeaveHour")).sum();
                    //产假
                    double maternityLeaveHour = list.stream().mapToDouble(l -> l.getDoubleValue("MaternityLeaveHour")).sum();
-                   workTime=workTime-annualLeaveHour-casualLeaveHour-sickLeaveHour-marriageLeaveHour-maternityLeaveHour;
+                   //福利年假
+                   double CustomItemHour1 = list.stream().mapToDouble(l -> l.getDoubleValue("CustomItemHour1")).sum();
+                   //打印数据
+                   workTime=workTime-annualLeaveHour-casualLeaveHour-sickLeaveHour-marriageLeaveHour-maternityLeaveHour-CustomItemHour1;
                }
             }
             UserFvTime userFvTime=new UserFvTime();

+ 46 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/DdBillInfo.java

@@ -0,0 +1,46 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-01-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class DdBillInfo extends Model<DdBillInfo> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("biz_type")
+    private Integer bizType;
+
+    @TableField("biz_data")
+    private String bizData;
+
+    @TableField("indate")
+    private LocalDateTime indate;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 38 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/DepartmentEnable.java

@@ -0,0 +1,38 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-02-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class DepartmentEnable extends Model<DepartmentEnable> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId("department_id")
+    private Integer departmentId;
+
+    @TableField("is_enbaled")
+    private Integer isEnbaled;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.departmentId;
+    }
+
+}

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/UserVO.java

@@ -29,4 +29,6 @@ public class UserVO extends User {
 
     private JSONArray userWorkbench;
 
+    private Integer canFillMoreOption = 0;
+
 }

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/DdBillInfoMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.DdBillInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-01-26
+ */
+public interface DdBillInfoMapper extends BaseMapper<DdBillInfo> {
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/DepartmentEnableMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.DepartmentEnable;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-02-06
+ */
+public interface DepartmentEnableMapper extends BaseMapper<DepartmentEnable> {
+
+}

+ 7 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectMapper.java

@@ -228,4 +228,11 @@ public interface ProjectMapper extends BaseMapper<Project> {
     List<Map<String, Object>> selectGroupEestimatedWorkTimeList(@Param("map") Map<String, Object> map);
 
     Integer selectGroupEestimatedWorkTimeCount(@Param("map")Map<String, Object> map);
+
+    @Update("update project set plan_start_date=null where id=#{id}")
+    void updateProjectStartDateToNull(@Param("id") Integer id);
+
+    @Update("update project set plan_end_date=null where id=#{id}")
+    void updateProjectEndDateToNull(@Param("id") Integer id);
+
 }

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/DdBillInfoService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.DdBillInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-01-26
+ */
+public interface DdBillInfoService extends IService<DdBillInfo> {
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/DepartmentEnableService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.DepartmentEnable;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-02-06
+ */
+public interface DepartmentEnableService extends IService<DepartmentEnable> {
+
+}

+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/DepartmentService.java

@@ -18,9 +18,9 @@ import java.util.List;
  * @since 2020-02-11
  */
 public interface DepartmentService extends IService<Department> {
-    HttpRespMsg insertDepartment(String departmentName, Integer superiorId, String managerId, String reportAuditUserid,String otherManagerIds, HttpServletRequest request);
+    HttpRespMsg insertDepartment(String departmentName, Integer superiorId, String managerId, String reportAuditUserid,String otherManagerIds,Integer isEnableMulti, HttpServletRequest request);
 
-    HttpRespMsg updateDepartment(Integer departmentId, String departmentName, String managerId, String reportAuditUserid,String otherManagerIds,Integer pushToSap, HttpServletRequest request);
+    HttpRespMsg updateDepartment(Integer departmentId, String departmentName, String managerId, String reportAuditUserid,String otherManagerIds,Integer pushToSap, Integer isEnableMulti, HttpServletRequest request);
 
     HttpRespMsg deleteDepartment(Integer departmentId, HttpServletRequest request);
 

+ 20 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DdBillInfoServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.DdBillInfo;
+import com.management.platform.mapper.DdBillInfoMapper;
+import com.management.platform.service.DdBillInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-01-26
+ */
+@Service
+public class DdBillInfoServiceImpl extends ServiceImpl<DdBillInfoMapper, DdBillInfo> implements DdBillInfoService {
+
+}

+ 20 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentEnableServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.DepartmentEnable;
+import com.management.platform.mapper.DepartmentEnableMapper;
+import com.management.platform.service.DepartmentEnableService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-02-06
+ */
+@Service
+public class DepartmentEnableServiceImpl extends ServiceImpl<DepartmentEnableMapper, DepartmentEnable> implements DepartmentEnableService {
+
+}

+ 24 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java

@@ -82,10 +82,12 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
     private String providerSecret;
     @Autowired
     private TaskFilesMapper taskFilesMapper;
+    @Autowired
+    private DepartmentEnableMapper departmentEnableMapper;
 
     //新增部门
     @Override
-    public HttpRespMsg insertDepartment(String departmentName, Integer superiorId, String managerId, String reportAuditUserid,String otherManagerIds,  HttpServletRequest request) {
+    public HttpRespMsg insertDepartment(String departmentName, Integer superiorId, String managerId, String reportAuditUserid,String otherManagerIds, Integer isEnableMulti, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
             Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
@@ -122,6 +124,13 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
                             departmentOtherManagerMapper.insert(departmentOtherManager);
                         }
                     }
+                    //是否是启用了部门可填报多个属性
+                    if (isEnableMulti != null && isEnableMulti == 1) {
+                        DepartmentEnable m = new DepartmentEnable();
+                        m.setDepartmentId(department.getDepartmentId());
+                        m.setIsEnbaled(1);
+                        departmentEnableMapper.insert(m);
+                    }
                 }
             } else {
                 //httpRespMsg.setError("无所选父级部门");
@@ -137,7 +146,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
 
     //更新部门
     @Override
-    public HttpRespMsg updateDepartment(Integer departmentId, String departmentName,String managerId, String reportAuditUserid,String otherManagerIds,Integer pushToSap, HttpServletRequest request) {
+    public HttpRespMsg updateDepartment(Integer departmentId, String departmentName,String managerId, String reportAuditUserid,String otherManagerIds,Integer pushToSap, Integer isEnableMulti, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
             Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
@@ -253,6 +262,19 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
                             .in(TaskFiles::getId,taskFileIds)
                     );
                 }
+
+                //是否是启用了部门可填报多个属性
+                if (isEnableMulti != null && isEnableMulti == 1) {
+                    DepartmentEnable d = departmentEnableMapper.selectById(departmentId);
+                    if (d == null) {
+                        DepartmentEnable m = new DepartmentEnable();
+                        m.setDepartmentId(department.getDepartmentId());
+                        m.setIsEnbaled(1);
+                        departmentEnableMapper.insert(m);
+                    }
+                } else {
+                    departmentEnableMapper.delete(new QueryWrapper<DepartmentEnable>().eq("department_id", department.getDepartmentId()));
+                }
             }
         } catch (NullPointerException e) {
             e.printStackTrace();

File diff suppressed because it is too large
+ 82 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java


+ 33 - 34
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -2006,9 +2006,15 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 }
                 if (!StringUtils.isEmpty(planStartDate)) {
                     p.setPlanStartDate(LocalDate.parse(planStartDate));
+                } else if (oldProject.getPlanStartDate() != null){
+                    //置空项目开始日期
+                    projectMapper.updateProjectStartDateToNull(id);
                 }
                 if (!StringUtils.isEmpty(planEndDate)) {
                     p.setPlanEndDate(LocalDate.parse(planEndDate));
+                } else if (oldProject.getPlanEndDate() != null){
+                    //置空项目结束日期
+                    projectMapper.updateProjectEndDateToNull(id);
                 }
                 if (customerId != null && customerId != 0) {
                     p.setCustomerName(customerInfoMapper.selectById(customerId).getCustomerName());
@@ -2453,23 +2459,20 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     deptRelatedProjectIds = projectList.stream().map(Project::getId).collect(Collectors.toList());
                 }
 
-                if(functionDpartList.size()>0){
-                    if(functionTimeList.size()>0||functionCostList.size()>0){
-                        deptIds.addAll(allMyManagedDeptIds);
-                    }
-                    if (containDeptMembInchargeProjects && deptIds.size() > 1) {
-                        inchargeUserIds = userMapper.selectList(new QueryWrapper<User>().select("id").in("department_id", deptIds)).stream().map(User::getId).collect(Collectors.toList());
-                    }
+                //有限匹配项目经理的数据视角
+                List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().select("id").eq("incharger_id", targetUser.getId()));
+                if (projectList.size() > 0) {
+                    projectIds = projectList.stream().map(Project::getId).collect(Collectors.toList());
+                    deptIds = null;
                 } else {
-                    //担任项目经理的项目
-                    List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().select("id").eq("incharger_id", targetUser.getId()));
-                    if (projectList.size() > 0) {
-                        projectIds = projectList.stream().map(Project::getId).collect(Collectors.toList());
-                    } else {
-                        projectIds = new ArrayList<>();
-                        projectIds.add(-1);
+                    if(functionDpartList.size()>0){
+                        if(functionTimeList.size()>0||functionCostList.size()>0){
+                            deptIds.addAll(allMyManagedDeptIds);
+                        }
+                        if (containDeptMembInchargeProjects && deptIds.size() > 1) {
+                            inchargeUserIds = userMapper.selectList(new QueryWrapper<User>().select("id").in("department_id", deptIds)).stream().map(User::getId).collect(Collectors.toList());
+                        }
                     }
-                    deptIds = null;
                 }
             }
             List<String> userIdList=new ArrayList<>();
@@ -8930,29 +8933,25 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             if(functionAllList.size()==0){
                 deptIds=new ArrayList<>();
                 deptIds.add(-1);
-                if(functionDpartList.size()>0){
-                    if(functionTimeList.size()>0||functionCostList.size()>0){
-                        List<Integer> collect = departmentList.stream().map(dm -> dm.getDepartmentId()).distinct().collect(Collectors.toList());
-                        List<Integer> otherCollect = departmentOtherManagerList.stream().map(dom -> dom.getDepartmentId()).distinct().collect(Collectors.toList());
-                        collect.addAll(otherCollect);
-                        for (Integer integer : collect) {
-                            List<Integer> branchDepartment = getBranchDepartment(integer, allDepartmentList);
-                            deptIds.addAll(branchDepartment);
-                        }
-                    }
+                //担任项目经理的项目
+                List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().select("id").eq("incharger_id", targetUser.getId()));
+                if (projectList.size() > 0) {
+                    projectIds = projectList.stream().map(Project::getId).collect(Collectors.toList());
+                    deptIds = null;
                 } else {
-                    //担任项目经理的项目
-                    List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().select("id").eq("incharger_id", targetUser.getId()));
-                    if (projectList.size() > 0) {
-                        projectIds = projectList.stream().map(Project::getId).collect(Collectors.toList());
-                    } else {
-                        projectIds = new ArrayList<>();
-                        projectIds.add(-1);
+                    if(functionDpartList.size()>0){
+                        if(functionTimeList.size()>0||functionCostList.size()>0){
+                            List<Integer> collect = departmentList.stream().map(dm -> dm.getDepartmentId()).distinct().collect(Collectors.toList());
+                            List<Integer> otherCollect = departmentOtherManagerList.stream().map(dom -> dom.getDepartmentId()).distinct().collect(Collectors.toList());
+                            collect.addAll(otherCollect);
+                            for (Integer integer : collect) {
+                                List<Integer> branchDepartment = getBranchDepartment(integer, allDepartmentList);
+                                deptIds.addAll(branchDepartment);
+                            }
+                        }
                     }
-                    deptIds = null;
                 }
             }
-            TimeType timeType = timeTypeMapper.selectById(companyId);
             List<String> userIdList=new ArrayList<>();
             if(userIds!=null&&userIds.length()>0){
                 String[] split = userIds.split(",");

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -4674,7 +4674,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         }
         //直接进行项目经理审核驳回
 
-        reportMapper.update(new Report().setState(2),
+        reportMapper.update(new Report().setState(2).setRejectReason(reason).setRejectUserid(user.getId()).setRejectUsername(user.getName()),
                 new QueryWrapper<Report>().in("id", ListUtil.convertIdsArrayToList(reportIds)));
 
         //TODO: 处理消息通知

+ 13 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -220,9 +220,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 
     @Resource
     private LdapTemplate ldapTemplate;
-
+    @Resource
+    private DepartmentEnableMapper departmentEnableMapper;
     public static String provider_access_token = null;
     public static long providerTokenExpireTime = 0L;
+
+
     //登录网页端
     @Override
     public HttpRespMsg loginAdmin(String username, String password){
@@ -731,6 +734,15 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 
         //设置用户的工作台模块
         user.setUserWorkbench(userWorkbenchService.getMyWorkbench(user.getId()));
+        //设置是否可填日报额外选项
+        if (timeType.getType() == 2 && timeType.getMultiWorktime() == 1) {
+            if (user.getDepartmentId() != null) {
+                DepartmentEnable departmentEnable = departmentEnableMapper.selectById(user.getDepartmentId());
+                if (departmentEnable != null) {
+                    user.setCanFillMoreOption(1);
+                }
+            }
+        }
     }
 
     private boolean judgeIsLeader(String userId) {

+ 18 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/DdBillInfoMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.DdBillInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.DdBillInfo">
+        <id column="id" property="id" />
+        <result column="biz_type" property="bizType" />
+        <result column="biz_data" property="bizData" />
+        <result column="indate" property="indate" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, biz_type, biz_data, indate
+    </sql>
+
+</mapper>

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/DepartmentEnableMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.DepartmentEnableMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.DepartmentEnable">
+        <id column="department_id" property="departmentId" />
+        <result column="is_enbaled" property="isEnbaled" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        department_id, is_enbaled
+    </sql>
+
+</mapper>

BIN
fhKeeper/formulahousekeeper/management-platform/src/main/resources/upload/项目导入模板_5.xlsx


BIN
fhKeeper/formulahousekeeper/timesheet/card_img.png


+ 1 - 0
fhKeeper/formulahousekeeper/timesheet/src/i18n/en.json

@@ -2008,6 +2008,7 @@
   "tongBuRiZhi": "Synchronize logs",
   "tongBuZhong": "Synchronizing",
   "tuiSongZhiSap": "Push to SAP",
+  "enableMulti": "Report with extra options",
   "weiSheZhiShiYouSuoShuBuMenFuZeRenShenHe": "When not set, it shall be reviewed by the department head",
   "xiuZhengGongShi": "Correction of working hours",
   "xiuZhengGongShiSuoShuBuMen": "Revise the department to which the working hours belong",

+ 1 - 0
fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json

@@ -1993,6 +1993,7 @@
   "quanBuGongShi": "全部工时",
   "buFenGongShi": "部分工时",
   "tuiSongZhiSap": "推送至SAP",
+  "enableMulti": "日报可选额外选项",
   "keTianBaoBuMen": "可填报部门",
   "shenHeCengJi": "审核层级",
   "liangCengShenHe": "两层审核",

+ 9 - 5
fhKeeper/formulahousekeeper/timesheet/src/views/project/detail.vue

@@ -42,7 +42,7 @@
                 detailName: this.$route.params.name,
                 radio:this.$t('ren-yuan'),
                 user: JSON.parse(sessionStorage.getItem("user")),
-
+                permissions: JSON.parse(sessionStorage.getItem("permissions")),
                 cost: 0,
 
                 tableHeight: 0,
@@ -194,11 +194,15 @@
                         formatter: function (params,ticket,callback) {
                             var res
                             if(_this.user.userNameNeedTranslate == 1 && _this.radio == _this.$t('ren-yuan')) {
-                                res = '' + "<br/>"+_this.$t('workcost')+" : " + params[0].data.money 
-                                + _this.$t('yuan')+"<br/>"+_this.$t('screening.workTime')+" : " + params[0].data.cost + _this.$t('time.hour');
+                                // res = '' + "<br/>"+_this.$t('workcost')+" : " + params[0].data.money 
+                                // + _this.$t('yuan')+"<br/>"+_this.$t('screening.workTime')+" : " + params[0].data.cost + _this.$t('time.hour');
+                                res = ((_this.permissions.countCost) ? _this.$t('workcost') + ":" + params[0].data.money + _this.$t('yuan') + "</br>" : '') + 
+                                ((_this.permissions.countHours) ? _this.$t('screening.workTime') + ":" + params[0].data.cost + _this.$t('time.hour') + "</br>" : '')
                             } else {
-                                res = params[0].name + "<br/>"+_this.$t('workcost')+" : " + params[0].data.money 
-                                + _this.$t('yuan')+"<br/>"+_this.$t('screening.workTime')+" : " + params[0].data.cost + _this.$t('time.hour');
+                                // res = params[0].name + "<br/>"+_this.$t('workcost')+" : " + params[0].data.money 
+                                // + _this.$t('yuan')+"<br/>"+_this.$t('screening.workTime')+" : " + params[0].data.cost + _this.$t('time.hour');
+                                res = ((_this.permissions.countCost) ? _this.$t('workcost') + ":" + params[0].data.money + _this.$t('yuan') + "</br>" : '') + 
+                                ((_this.permissions.countHours) ? _this.$t('screening.workTime') + ":" + params[0].data.cost + _this.$t('time.hour') + "</br>" : '')
                             }
                             
                             return res;

+ 4 - 3
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -57,7 +57,8 @@
                             </el-dropdown-item>
                             <el-dropdown-item v-if="permissions.projectImport">
                                 <el-link type="primary" :underline="false" @click="downloadmb" v-if="user.company.packageCustomer == 1 || user.company.packageProvider == 1 || user.timeType.mainProjectState == 1 || user.companyId == '936' || user.timeType.reportCc == 1">{{ $t('Downloadthetemplate') }}</el-link>
-                                <el-link type="primary" :underline="false" href="./upload/项目导入模板.xlsx" :download="$t('importtemplateproject') + '.xlsx'" v-else-if="user.timeType.projectWithDept==0">{{ $t('Downloadthetemplate') }}</el-link>
+                                <el-link type="primary" :underline="false" href="./upload/项目导入模板.xlsx" :download="$t('importtemplateproject') + '.xlsx'" v-else-if="user.timeType.projectWithDept==0 && (user.timeType.reportAuditType==0||user.timeType.reportAuditType==4||user.timeType.reportAuditType==6)">{{ $t('Downloadthetemplate') }}</el-link>
+                                <el-link type="primary" :underline="false" href="./upload/项目导入模板_5.xlsx" :download="$t('importtemplateproject') + '.xlsx'" v-else-if="user.timeType.projectWithDept==0 && !(user.timeType.reportAuditType==0||user.timeType.reportAuditType==4||user.timeType.reportAuditType==6)">{{ $t('Downloadthetemplate') }}</el-link>
                                 <!--项目带所属部门的-->
                                 <el-link type="primary" :underline="false" href="./upload/项目导入模板_部门.xlsx" download="项目导入模板+部门.xlsx" v-else>{{ $t('Downloadthetemplate') }}</el-link>
                                 
@@ -600,7 +601,7 @@
                         :editable="false" style="width:32%;" 
                         format="yyyy-MM-dd" 
                         value-format="yyyy-MM-dd"
-                        :clearable="false" type="date" 
+                        :clearable="false" type="date" clearable
                         :placeholder="$t('optiondate')"></el-date-picker>
 
                         <span style="margin-left:63px;margin-right:10px;" >{{ $t('ji-hua-jie-shu-ri-qi') }}</span>
@@ -608,7 +609,7 @@
                         :editable="false" :disabled="canOnlyModParticipator"
                         format="yyyy-MM-dd" 
                         value-format="yyyy-MM-dd"
-                        :clearable="false" type="date" 
+                        :clearable="false" type="date" clearable
                         :placeholder="$t('optiondate')"></el-date-picker>
                     </el-form-item>
 

+ 4 - 4
fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue

@@ -625,7 +625,7 @@
                             </template>
 
                             <!-- 子任务/关联任务 -->
-                            <p ><i class="iconfont firerock-icontree themeFontColor" style=";margin-left:10px;">{{timelabel && !isRelationItem ? $t('guanlian') : $t('zirwu')}}</i>
+                            <p ><i class="iconfont firerock-icontree themeFontColor" style="margin-left:10px;">{{timelabel && !isRelationItem ? $t('guanlian') : $t('zirwu')}}</i>
                                 <el-link style="float:right;" @click="addRelation" v-if="timelabel && !isRelationItem">{{ $t('associatedTask') }}</el-link>
                                 <el-link style="float:right;" @click="addSubTask" v-else>{{ $t('addingsubtask') }}</el-link>
                             </p>
@@ -4455,7 +4455,7 @@ overflow: auto;
 .ql-snow .ql-picker.ql-size .ql-picker-item::before {
   content: "14px" !important;
   position: relative;
-  top: -8px;
+  top: 0px;
 }
 .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="small"]::before,
 .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="small"]::before {
@@ -4474,7 +4474,7 @@ overflow: auto;
 .ql-snow .ql-picker.ql-header .ql-picker-item::before {
   content: "文本" !important;
   position: relative;
-  top: -8px;
+  top: 0px;
 }
 .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
 .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
@@ -4520,7 +4520,7 @@ overflow: auto;
 } */
 .ql-picker-label svg {
     position: relative;
-    top: -6px;
+    top: 0px;
 }
 
 /* 任务进展 */

+ 0 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/settings/timetype.vue

@@ -360,7 +360,6 @@
         </div>
         <div class="yanjiu" v-if="timeType.type == 2 && timeType.multiWorktime == 1">
             <p style="margin-left:10px;color:#666;">自定义日报多时间段可选数据<el-button style="margin-left:40px;" type="primary" size="small" @click="showMultiTimeOption()">配置数据</el-button></p>
-           
         </div>
         <el-row v-if="timeType.customDegreeActive" :gutter="20" style="padding-top:10px;width:100%;margin:0 auto;padding-left:10px;padding-right:10px;">
             <el-col :span="24" >

+ 33 - 87
fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

@@ -368,7 +368,7 @@
 
         <!-- 新增部门 -->
         <el-dialog :title="depTitle" :visible.sync="departmentVisible" width="500px" >
-            <el-form ref="depForm" :model="depForm" :rules="depRules" label-width="100px">
+            <el-form ref="depForm" :model="depForm" :rules="depRules" label-width="130px">
                 <el-form-item :label="$t('departmentname')" prop="name">
                     <el-input v-model="depForm.name" :placeholder="$t('peaseenterthe')" clearable style="width: 100%" v-if="user.userNameNeedTranslate != '1'"></el-input>
                     <div v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='departmentName' :openid='depForm.name'></TranslationOpenDataText></div>
@@ -409,6 +409,13 @@
                       <el-radio :label="0">{{ $t('state.no') }}</el-radio>
                    </el-radio-group>
                 </el-form-item>
+                <!-- 填写日报是否可选额外选项 -->
+                <el-form-item :label="$t('enableMulti')" prop="isEnableMulti" v-if="user.timeType.type==2 && user.timeType.multiWorktime == 1">
+                   <el-radio-group v-model="depForm.isEnableMulti">
+                      <el-radio :label="1">{{ $t('state.yes') }}</el-radio>
+                      <el-radio :label="0">{{ $t('state.no') }}</el-radio>
+                   </el-radio-group>
+                </el-form-item>
             </el-form>
             <span slot="footer" class="dialog-footer">
                 <el-button @click="departmentVisible = false">{{ $t('btn.cancel') }}</el-button>
@@ -3254,7 +3261,6 @@ export default {
     },
     // 新增、修改部门
     createDepartment(i) {
-      console.log(i, '看看')
       setTimeout(() => {
         var that = this;
         if (i == -2) {
@@ -3264,6 +3270,7 @@ export default {
             name: null,
             parentId: null,
             managerId: null,
+            isEnableMulti: 0
           };
           if (that.depData.id != -1 && that.depData.id != 0) {
             that.depForm.parentId = that.depData.id;
@@ -3276,6 +3283,7 @@ export default {
             name: null,
             parentId: null,
             managerId: null,
+            isEnableMulti: 0
           };
           that.depTitle = this.$t('addsubdepartment');
         } else {
@@ -3292,7 +3300,8 @@ export default {
             parentId: that.depData.parentId,
             managerId: that.depData.managerId,
             reportAuditUserid: that.depData.reportAuditUserid,
-            pushToSap:that.depData.pushToSap
+            pushToSap:that.depData.pushToSap,
+            isEnableMulti: 0
           }
           if(that.depData.otherManagerIds) {
             if(Array.isArray(that.depData.otherManagerIds)) {
@@ -3303,54 +3312,28 @@ export default {
           } else {
             this.$set(that.depForm, 'otherManagerIds', [])
           }
-          // console.log('点击编辑的时候', that.depData)
-          // if(that.depData.reportAuditUserid != null && that.depData.reportAuditUserid != "null" && that.depData.reportAuditUserid.length > 0) {
-          //     that.depForm.reportAuditUserid = that.depData.reportAuditUserid
-          // }
-          console.log(that.depForm, '<===== 最后的值')
           that.depTitle = this.$t('editorialdepartment');
+          //获取部门的配置
+          if (that.user.timeType.type == 2 && that.user.timeType.multiWorktime == 1) {
+            that.http.post('/department-enable/get',{
+                departmentId: that.depData.id,
+              },
+              (res) => {
+                if (res.data != null) {
+                  that.$set(that.depForm, 'isEnableMulti', 1)
+                } 
+              },
+              (error) => {
+                that.$message({
+                  message: error,
+                  type: "error",
+                });
+              }
+            );
+          }
         }
         that.departmentVisible = true;
       });
-      // if(i == -2) {//创建子部门
-      //     this.depForm = {
-      //         id: null,
-      //         name: null,
-      //         parentId: null,
-      //         managerId: null,
-      //     }
-      //     if(this.depData.id != -1 && this.depData.id != 0) {
-      //         this.depForm.parentId = this.depData.id;
-      //     }
-      //     this.depTitle = "新增子部门";
-      // } else if(i == -1) {//创建一级部门
-      //     this.depForm = {
-      //         id: null,
-      //         name: null,
-      //         parentId: null,
-      //         managerId: null,
-      //     }
-      //     this.depTitle = "新增部门";
-      // } else {
-      //     if(this.depData.managerId == "null") {
-      //         this.depData.managerId = ''
-      //     }
-      //     if(this.depData.reportAuditUserid == "null") {
-      //         this.depData.reportAuditUserid = ''
-      //     }
-      //     this.depForm = {
-      //         id: this.depData.id,
-      //         name: this.depData.label,
-      //         parentId: this.depData.parentId,
-      //         managerId: this.depData.managerId,
-      //         reportAuditUserid: this.depData.reportAuditUserid
-      //     }
-      //     // if(this.depData.reportAuditUserid != null && this.depData.reportAuditUserid != "null" && this.depData.reportAuditUserid.length > 0) {
-      //     //     this.depForm.reportAuditUserid = this.depData.reportAuditUserid
-      //     // }
-      //     this.depTitle = "编辑部门";
-      // }
-      // this.departmentVisible = true;
     },
 
     submitDepartment() {
@@ -3379,6 +3362,9 @@ export default {
           if(this.depForm.otherManagerIds) {
             form.otherManagerIds = this.depForm.otherManagerIds.toString();
           }
+          if (this.user.timeType.type == 2 && this.user.timeType.multiWorktime == 1) {
+            form.isEnableMulti = this.depForm.isEnableMulti;
+          }
           this.http.post(
             this.depForm.id == null
               ? this.port.manage.add
@@ -3465,49 +3451,10 @@ export default {
           })
           .catch(() => {});
       }, 100);
-      // this.$confirm( "确定要删除部门" + this.depData.label + "吗?", "删除部门", {
-      //     confirmButtonText: "确定",
-      //     cancelButtonText: "取消",
-      //     type: "warning"
-      // })
-      // .then(() => {
-      //     this.listLoading = true;
-      //     this.http.post( this.port.manage.del, { id: this.depData.id },
-      //     res => {
-      //         this.listLoading = false;
-      //         if (res.code == "ok") {
-      //             this.$message({
-      //                 message: "删除成功",
-      //                 type: "success"
-      //             });
-      //             this.depData = {
-      //                 id: -1,
-      //                 label: '全部人员',
-      //             }
-      //             this.getDepartment();
-      //             this.getUser();
-      //         } else {
-      //             this.$message({
-      //                 message: res.msg,
-      //                 type: "error"
-      //             });
-      //         }
-      //     },
-      //     error => {
-      //         this.listLoading = false;
-      //         this.$message({
-      //             message: error,
-      //             type: "error"
-      //         });
-      //     });
-      // })
-      // .catch(() => {});
     },
 
     // 关键搜索
     searchList() {
-      // console.log(this.keyword)
-      console.log(this.nextCursor, '游标')
       this.listLoading = true;
       this.http.post(
         this.port.manage.list,
@@ -3546,7 +3493,6 @@ export default {
     },
     // 获取角色
     acquireRole() {
-      // this.http.post('/permission/getFrontRoleList', {
       this.http.post(
         "/permission/getFrontRoleList",
         {

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -912,7 +912,7 @@
                                 </el-time-picker>
                                 </span>
                                 <!--工作细项-->
-                                <el-select v-model="timeItem.detail" :placeholder="$t('defaultText.pleaseChoose')" style="width:200px;margin-left:10px;" filterable="true" v-if="multiOptionData.length>0"
+                                <el-select v-model="timeItem.detail" :placeholder="$t('defaultText.pleaseChoose')" style="width:200px;margin-left:10px;" filterable="true" v-if="multiOptionData.length>0 && user.canFillMoreOption"
                                     :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)">
                                     <el-option v-for="item in multiOptionData" :key="item.value" :label="item.value" :value="item.value"></el-option>
                                 </el-select>

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/list.vue

@@ -3,7 +3,7 @@
     <template v-if="user.timeType.weeklyChargeFilter != 1">
         <dailyReportReview />
     </template>
-    <template>
+    <template v-else>
         <weeklyReportReview />
     </template>
   </div>

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/list_department.vue

@@ -44,7 +44,7 @@
                                         <i  class="iconfont firerock-iconshenhetongguo" style="color:#32CD32;"></i>
                                         </el-tooltip>
                                         <el-tooltip v-if="progressItem.auditState == 2" content="不通过" effect="light" placement="top">
-                                        <i  class="iconfont firerock-iconshenhebohui" style="color:#red;"></i>
+                                        <i  class="iconfont firerock-iconshenhebohui" style="color:red;"></i>
                                         </el-tooltip>
                                         </span>
                                 </p>

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/weeklyReportReview.vue

@@ -70,7 +70,7 @@
       
       <!--列表-->
       <div class="reviewTable" ref="reviewTable">
-        <el-table :data="list" style="width: 100%" @selection-change="weeklyReportRowSelect">
+        <el-table :data="list" style="width: 100%" height="80vh" @selection-change="weeklyReportRowSelect">
           <el-table-column type="selection" width="55"></el-table-column>
           <el-table-column type="expand">
             <template slot-scope="props">

+ 4 - 1
fhKeeper/formulahousekeeper/timesheet_deploy/copyFiles.sh

@@ -1,2 +1,5 @@
-\cp timesheet-3.4.0.jar /www/webapps/worktime/;\cp -rf static_pc/dist/* /www/staticproject/timesheet/;\cp -rf static_h5/dist/* /www/staticproject/timesheet_h5/;
+#!/bin/bash
+cp timesheet-3.4.0.jar /www/webapps/worktime/
+cp -rf static_pc/dist/* /www/staticproject/timesheet/
+cp -rf static_h5/dist/* /www/staticproject/timesheet_h5/
 echo 'all files are copied successful, if there is db script, you should run sh import_sql.sh; then you can cd /www/webapps/worktime/ and restart server with command: sh restart.sh'

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

@@ -396,7 +396,7 @@
                                 :value="timeItem.endTime" label="结束时间" placeholder="点击选择时间"
                                 :rules="[{ required: true, message: '必填项' }]"
                                 @click="item.canEdit ? showEndDialog(timeItem) : ''" />
-                            <van-field v-if="multiOptionData.length>0" readonly :clickable="canEdit" name="multiTimePicker"
+                            <van-field v-if="multiOptionData.length>0 && user.canFillMoreOption" readonly :clickable="canEdit" name="multiTimePicker"
                                 :value="timeItem.detail" label="细项" placeholder="点击选择"
                                 :rules="[{ required: true, message: '必填项' }]"
                                 @click="item.canEdit ? showChooseDetail(timeItem) : ''" />

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/weekEdit.vue

@@ -317,7 +317,7 @@
                                 :value="timeItem.endTime" label="结束时间" placeholder="点击选择时间" 
                                 :rules="[{ required: true, message: '必填项' }]" :disabled="item.state<=1"
                                     @click="showEndDialog(timeItem)"  />
-                                <van-field v-if="multiOptionData.length>0" readonly :clickable="true" name="multiTimePicker"
+                                <van-field v-if="multiOptionData.length>0 && user.canFillMoreOption" readonly :clickable="true" name="multiTimePicker"
                                     :value="timeItem.detail" label="细项" placeholder="点击选择"
                                     :rules="[{ required: true, message: '必填项' }]"
                                     @click="item.state>1 ? showChooseDetail(timeItem) : ''" />

BIN
fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/Customer_Steward_evaluate.jpg


BIN
fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/Customer_Steward_evaluate2.jpg


BIN
fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/Customer_Steward_evaluate3.jpg


BIN
fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg1.jpg


BIN
fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg10.jpg


BIN
fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg11.jpg


BIN
fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg2.jpg


BIN
fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg3.jpg


BIN
fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg4.jpg


BIN
fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg5.jpg


BIN
fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg6.jpg


BIN
fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg7.jpg


BIN
fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg8.jpg


BIN
fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/customerNew/exhibitionListImg9.jpg


BIN
fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/followup/bannar.jpg


BIN
fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/image/workshop/bj.jpg