Browse Source

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

Min 1 năm trước cách đây
mục cha
commit
bcf1f018b0
100 tập tin đã thay đổi với 17478 bổ sung480 xóa
  1. 3 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/constant/Constant.java
  2. 2 2
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/ExpenseSheetController.java
  3. 6 6
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/FeishuInfoController.java
  4. 2 2
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/UserController.java
  5. 170 339
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/WeiXinCorpController.java
  6. 10 7
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/WxCorpInfo.java
  7. 20 20
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/InformationServiceImpl.java
  8. 7 7
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  9. 1 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  10. 16 73
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/SysRoleServiceImpl.java
  11. 5 3
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/TaskServiceImpl.java
  12. 15 15
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  13. 2 2
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/task/TimingTask.java
  14. 3 2
      fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/WxCorpInfoMapper.xml
  15. 2 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/.env.development
  16. 3 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/.env.production
  17. 22 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/.gitignore
  18. 49 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/README.bak.md
  19. 140 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/README.md
  20. 16 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/babel.config.js
  21. 1 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/build.bat
  22. 13193 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/package-lock.json
  23. 63 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/package.json
  24. 2 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/public/axios.min.js
  25. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/public/favicon.ico
  26. 84 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/public/index.html
  27. 156 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/App.vue
  28. 33 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/app.js
  29. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/icon/kefu.png
  30. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/MovieDetails/1.jpg
  31. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/MovieDetails/jz1.jpg
  32. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/MovieDetails/jz2.jpg
  33. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/MovieDetails/jz3.jpg
  34. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/MovieDetails/jz4.jpg
  35. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/MovieDetails/r1.jpg
  36. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/MovieDetails/r2.jpg
  37. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/MovieDetails/r3.jpg
  38. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/MovieDetails/r4.jpg
  39. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/MovieDetails/r5.jpg
  40. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/alt.jpg
  41. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/chong.png
  42. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/cover/1.jpg
  43. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/cover/2.jpg
  44. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/cover/3.jpg
  45. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/cover/4.jpg
  46. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/cover/5.jpg
  47. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/group/hb1.jpg
  48. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/group/hb2.jpg
  49. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/group/tx1.jpg
  50. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/group/tx2.jpg
  51. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/group/tx3.jpg
  52. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/group/tx4.jpg
  53. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/home/banner_1.png
  54. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/home/banner_2.png
  55. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/home/banner_3.png
  56. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/home/check.png
  57. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/home/edit.png
  58. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/home/more.png
  59. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/home/my.png
  60. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/home/wait.png
  61. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/index/banner4.jpeg
  62. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/index/banner_1.png
  63. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/index/banner_2.png
  64. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/index/banner_3.png
  65. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/kf.jpg
  66. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/login_logo.png
  67. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/logo.png
  68. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/not.jpeg
  69. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/null.png
  70. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/orderList1.jpg
  71. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/orderList2.jpg
  72. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/beij.png
  73. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/cl.png
  74. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/dt.png
  75. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/hb.png
  76. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/head_back.jpg
  77. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/p.png
  78. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/qb.png
  79. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/tg.png
  80. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/tx.jpg
  81. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/userHead.png
  82. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/yhk.png
  83. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/poster/1.jpg
  84. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/poster/2.jpg
  85. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/poster/3.jpg
  86. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/poster/4.jpg
  87. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/qwcode.png
  88. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/qx.png
  89. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/qxbj.png
  90. 1 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/shju.json
  91. 363 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/style/common.less
  92. 539 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/style/font/demo.css
  93. 1706 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/style/font/demo_index.html
  94. 279 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/style/font/iconfont.css
  95. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/style/font/iconfont.eot
  96. 1 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/style/font/iconfont.js
  97. 471 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/style/font/iconfont.json
  98. 92 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/style/font/iconfont.svg
  99. BIN
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/style/font/iconfont.ttf
  100. 0 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/style/font/iconfont.woff

+ 3 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/constant/Constant.java

@@ -27,7 +27,7 @@ public class Constant {
 //    public static final String ACCESS_KEY = "280d6f0e4a774117905ba789a9f0b978";//百度图像识别accessKey
 //    public static final String SECRET_KEY = "43b460e124eb474c8cdb7441dc30d66d";//百度图像识别secretKey
     //角色定义
-    public static final String[] ROLE_NAMES = {"普通员工","超级管理员", "系统管理员", "无","财务管理员","项目管理员","公司领导","项目经理"};
+    public static final String[] ROLE_NAMES = {"超级管理员", "系统管理员", "生产部经理","组员","高管"};
 
     public static final String ROLE_SUPER_MANAGER = "超级管理员";
 
@@ -58,4 +58,6 @@ public class Constant {
     public static final String[] LEAVE_WAIT_CHECK= {"请假人","请假类型","请假时间","备注"};
     //请假审核通知
     public static final String[] LEAVE_CHECK= {"审核结果","审核人","请假时间","备注"};
+
+    public static final String[] DEFAULT_PROD_CATEGORY = {"铝铆焊件", "钢铆焊件", "非铆焊件"};
 }

+ 2 - 2
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/ExpenseSheetController.java

@@ -62,7 +62,7 @@ public class ExpenseSheetController {
         User user = userMapper.selectById(token);
         List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部报销单");
         if (functionList.size() == 0) {
-            //普通员工只能看自己的
+            //组员只能看自己的
             sheet.setOwnerId(user.getId());
         }
         sheet.setCompanyId(user.getCompanyId());
@@ -99,7 +99,7 @@ public class ExpenseSheetController {
         User user = userMapper.selectById(token);
         List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部报销单");
         if (functionList.size() == 0) {
-            //普通员工只能看自己的
+            //组员只能看自己的
             sheet.setOwnerId(user.getId());
         }
         sheet.setCompanyId(user.getCompanyId());

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

@@ -181,7 +181,7 @@ public class FeishuInfoController {
                     departmentFeishuMapper.insert(departmentFeishu);
                 }
             }
-            SysRole role = sysRoleMapper.selectOne(new QueryWrapper<SysRole>().eq("company_id", company.getId()).eq("rolename","普通员工"));
+            SysRole role = sysRoleMapper.selectOne(new QueryWrapper<SysRole>().eq("company_id", company.getId()).eq("rolename","组员"));
             List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", company.getId()));
             List<DepartmentFeishu> departmentFeishuList = departmentFeishuMapper.selectList(new QueryWrapper<DepartmentFeishu>().eq("corpid", corpId));
             List<User> userList=new ArrayList<>();
@@ -213,7 +213,7 @@ public class FeishuInfoController {
                     User user = new User();
                     //在当前部门下的员工
                     user.setId(SnowFlake.nextId()+"")
-                            .setRoleId(role.getId())//默认普通员工
+                            .setRoleId(role.getId())//默认组员
                             .setRoleName(role.getRolename())
                             .setCompanyId(company.getId())
                             .setName(userJson.getString("name"))
@@ -249,7 +249,7 @@ public class FeishuInfoController {
                 //在当前部门下的员工
                 String max = departments.get(0);
                 user.setId(SnowFlake.nextId()+"")
-                        .setRoleId(role.getId())//默认普通员工
+                        .setRoleId(role.getId())//默认组员
                         .setRoleName(role.getRolename())
                         .setCompanyId(company.getId())
                         .setName(userInfo.getString("name"))
@@ -619,7 +619,7 @@ public class FeishuInfoController {
         if(feishuInfoList.size()>0){
             FeishuInfo feishuInfo = feishuInfoList.get(0);
             List<User> allUserList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", feishuInfo.getCompanyId()));
-            SysRole role = sysRoleMapper.selectOne(new QueryWrapper<SysRole>().eq("company_id",feishuInfo.getCompanyId()).eq("rolename","普通员工"));
+            SysRole role = sysRoleMapper.selectOne(new QueryWrapper<SysRole>().eq("company_id",feishuInfo.getCompanyId()).eq("rolename","组员"));
             //通讯录权限范围变更
             //todo:新增的
             if(eventOb!=null&&eventOb.getJSONObject("added").size()>0){
@@ -723,7 +723,7 @@ public class FeishuInfoController {
                             User user = new User();
                             //在当前部门下的员工
                             user.setId(SnowFlake.nextId()+"")
-                                    .setRoleId(role.getId())//默认普通员工
+                                    .setRoleId(role.getId())//默认组员
                                     .setRoleName(role.getRolename())
                                     .setCompanyId(feishuInfo.getCompanyId())
                                     .setName(userJson.getString("name"))
@@ -759,7 +759,7 @@ public class FeishuInfoController {
                             //不存在的人员, 进行插入
                             User user = new User();
                             user.setId(SnowFlake.nextId()+"")
-                                    .setRoleId(role.getId())//默认普通员工
+                                    .setRoleId(role.getId())//默认组员
                                     .setRoleName(role.getRolename())
                                     .setCompanyId(feishuInfo.getCompanyId())
                                     .setName(userOb.getString("name"))

+ 2 - 2
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/UserController.java

@@ -192,7 +192,7 @@ public class UserController {
      * id 要修改的用户id 修改时传
      * name 用户名
      * phone 电话号码
-     * role 角色 0-普通员工 2-管理员
+     * role 角色 0-组员 2-管理员
      * cost 成本
      * departmentId 部门id 不传或0-其他部门 其他部门id-相应部门
      * departmentCascade 部门层叠关系字符串 默认"0"
@@ -218,7 +218,7 @@ public class UserController {
     }
 
     /**
-     * 切换权限 负责人可以将本公司的管理员切换至普通员工或者反之
+     * 切换权限 负责人可以将本公司的管理员切换至组员或者反之
      * id 目标id
      */
     @RequestMapping("/switchPermission")

+ 170 - 339
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/WeiXinCorpController.java

@@ -123,6 +123,8 @@ public class WeiXinCorpController {
     @Resource
     private SysRoleMapper sysRoleMapper;
     @Resource
+    private ProdCategoryMapper prodCategoryMapper;
+    @Resource
     private ParticipationMapper participationMapper;
     @Resource
     private TaskGroupMapper taskGroupMapper;
@@ -518,7 +520,7 @@ public class WeiXinCorpController {
                     System.out.println("成员关注应用事件!");
                     String corpWxUserId = jsonObject.getString("FromUserName");
                     WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectById(corpId);
-                    if (wxCorpInfo != null && wxCorpInfo.getSaasSyncContact() == 1) {
+                    if (wxCorpInfo != null) {
                         //企业存在,生成对应的用户
                         Integer companyId = wxCorpInfo.getCompanyId();
                         User find = userMapper.selectOne(new QueryWrapper<User>().eq("company_id", companyId).eq("corpwx_userid", corpWxUserId));
@@ -655,37 +657,35 @@ public class WeiXinCorpController {
                         WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectById(corpId);
                         if (wxCorpInfo != null && wxCorpInfo.getAuthMode() == 1) {//成员授权模式下,自动激活需要创建用户
                             Integer companyId = wxCorpInfo.getCompanyId();
-                            if (wxCorpInfo.getSaasSyncContact() == 1) {
-                                //先插入表,不然前端用户立马点击进入应用会找不到人,
-                                User user = wxCorpInfoService.generateUserInfo(companyId, authUserId);
-                                //查询详情进行更新
-                                JSONObject userObj = getUserInfo(getCorpAccessToken(wxCorpInfo), authUserId);
-                                System.out.println("userObj=="+userObj);
-                                //成功获取到通讯录的个人详情
-                                String userId = userObj.getString("userid");
-                                String openUserId = userObj.getString("open_userid");
-                                User userUpdate = new User();
-                                userUpdate.setId(user.getId());
-                                userUpdate.setName(userObj.getString("name"))
-                                        .setPhone(userObj.getString("mobile"))
-                                        .setCorpwxUserid(openUserId)
-                                        .setCorpwxRealUserid(userId)
-                                        .setJobNumber(openUserId.equals(userId)?null:userId);
+                            //先插入表,不然前端用户立马点击进入应用会找不到人,
+                            User user = wxCorpInfoService.generateUserInfo(companyId, authUserId);
+                            //查询详情进行更新
+                            JSONObject userObj = getUserInfo(getCorpAccessToken(wxCorpInfo), authUserId);
+                            System.out.println("userObj=="+userObj);
+                            //成功获取到通讯录的个人详情
+                            String userId = userObj.getString("userid");
+                            String openUserId = userObj.getString("open_userid");
+                            User userUpdate = new User();
+                            userUpdate.setId(user.getId());
+                            userUpdate.setName(userObj.getString("name"))
+                                    .setPhone(userObj.getString("mobile"))
+                                    .setCorpwxUserid(openUserId)
+                                    .setCorpwxRealUserid(userId)
+                                    .setJobNumber(openUserId.equals(userId)?null:userId);
 
-                                //通过getUserInfo接口获取到的json key是小写的
-                                JSONArray department = userObj.getJSONArray("department");
-                                Integer curUserWXDeptid = getMaxDeptIdFromArray(department);
-                                Department sysDept = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", curUserWXDeptid));
+                            //通过getUserInfo接口获取到的json key是小写的
+                            JSONArray department = userObj.getJSONArray("department");
+                            Integer curUserWXDeptid = getMaxDeptIdFromArray(department);
+                            Department sysDept = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", curUserWXDeptid));
 
-                                if (sysDept != null) {
-                                    userUpdate.setDepartmentId(sysDept.getDepartmentId());
-                                    List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
-                                    userUpdate.setDepartmentCascade(convertDepartmentIdToCascade(userUpdate.getDepartmentId(), allDeptList));
-                                }
-                                userMapper.updateById(userUpdate);
-                                System.out.println("======更新人员======");
-                                sendCardMsg(authUserId);
+                            if (sysDept != null) {
+                                userUpdate.setDepartmentId(sysDept.getDepartmentId());
+                                List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
+                                userUpdate.setDepartmentCascade(convertDepartmentIdToCascade(userUpdate.getDepartmentId(), allDeptList));
                             }
+                            userMapper.updateById(userUpdate);
+                            System.out.println("======更新人员======");
+                            sendCardMsg(authUserId);
                         }
                     } else {
                         System.err.println("该用户已存在,不需要创建:"+authUserId);
@@ -882,300 +882,118 @@ public class WeiXinCorpController {
                     SysRole defaultRole = sysRoleMapper.selectOne(new QueryWrapper<SysRole>().eq("company_id", companyId).eq("is_default", 1));
                     String corpWxUserId = jsonObject.getString("UserID");
                     String openUserId = jsonObject.getString("OpenUserID");
-                    if (wxCorpInfo.getSaasSyncContact() == 1) {
-                        //直接通过企业微信通讯录同步
-                        JSONObject userObj = getUserInfo(getCorpAccessToken(wxCorpInfo), corpWxUserId);
-                        //成功获取到通讯录的个人详情
-                        Long id = SnowFlake.nextId();
-                        //通过getUserInfo接口获取到的json key是小写的
-                        JSONArray department = userObj.getJSONArray("department");
-                        Integer curUserWXDeptid = getMaxDeptIdFromArray(department);
-                        Department sysDept = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", curUserWXDeptid));
-                        String userId = userObj.getString("userid");
-                        User user = new User()
-                                .setId(id.toString())
-                                .setRoleId(defaultRole.getId())
-                                .setRoleName(defaultRole.getRolename())
-                                .setName(userObj.getString("name"))
-                                .setPhone(userObj.getString("mobile"))
-                                .setPassword(MD5Util.getPassword("000000"))
-                                .setCorpwxUserid(openUserId)
-                                .setCorpwxRealUserid(corpWxUserId)
-                                .setJobNumber(openUserId.equals(userId)?null:userId)
-                                .setColor(ColorUtil.randomColor())
-                                .setCompanyId(companyId);
-                        if (sysDept != null) {
-                            user.setDepartmentId(sysDept.getDepartmentId());
-                            List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
-                            user.setDepartmentCascade(convertDepartmentIdToCascade(user.getDepartmentId(), allDeptList));
-                        }
-                        Integer employeeCnt = userMapper.selectCount(new QueryWrapper<User>().eq("company_id", companyId).eq("is_active",1));
-                        Company company = companyMapper.selectOne(new QueryWrapper<Company>().eq("id", companyId));
-                        ContactSyncLog contactSyncLog = new ContactSyncLog();
-                        contactSyncLog.setCompanyId(companyId);
-                        System.err.println("企业微信自动同步新增人员日志记录===============================");
-                        if (employeeCnt + 1 > company.getStaffCountMax()){
-                            contactSyncLog.setResult(0);
-                            //contactSyncLog.setMsg("公司人员已达上限,请联系客服提高人数上限。");
-                            contactSyncLog.setMsg(MessageUtils.message("wx.employeeFull"));
-                            System.err.println("日志信息:"+ contactSyncLog.toString());
-                            contactSyncLogMapper.insert(contactSyncLog);
-                        }else {
-                            userMapper.insert(user);
-                            contactSyncLog.setResult(1);
-                            //contactSyncLog.setMsg("同步成功");
-                            contactSyncLog.setMsg(MessageUtils.message("wx.synSuccess"));
-                            System.err.println("日志信息:"+ contactSyncLog.toString());
-                            contactSyncLogMapper.insert(contactSyncLog);
-                        }
-                    } else if (!StringUtils.isEmpty(wxCorpInfo.getContactSecret()) && !StringUtils.isEmpty(wxCorpInfo.getContactServer())) {
-                        //通过通讯录secret获取到员工姓名;这是从内部通讯录的
-                        String remoteCorpConcactAccessToken = getRemoteCorpConcactAccessToken(wxCorpInfo);
-                        String curCorpAccessToken = getCorpAccessToken(wxCorpInfo);
-                        Integer curUserWXDeptid = 1;
-                        if (jsonObject.has("Department")) {
-                            if (jsonObject.get("Department") instanceof String) {
-                                String jsonObject1 = jsonObject.getString("Department");
-                                curUserWXDeptid = Integer.parseInt(jsonObject1);
-                            } else if (jsonObject.get("Department") instanceof org.json.JSONArray) {
-                                org.json.JSONArray departmentArray = jsonObject.getJSONArray("Department");
-                                curUserWXDeptid = getMaxDeptIdFromArray(departmentArray);
-                            }
-                        }
-
-                        JSONObject userObj = remoteGetUserDetail(wxCorpInfo, remoteCorpConcactAccessToken, corpWxUserId, curUserWXDeptid, curCorpAccessToken);
-                        if (userObj != null) {
-                            //成功获取到通讯录的个人详情
-                            Long id = SnowFlake.nextId();
-                            JSONArray department = userObj.getJSONArray("department");
-                            curUserWXDeptid = getMaxDeptIdFromArray(department);
-                            Department sysDept = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", curUserWXDeptid));
-                            String userId = userObj.getString("userid");
-                            User user = new User()
-                                    .setId(id.toString())
-                                    .setRoleId(defaultRole.getId())
-                                    .setRoleName(defaultRole.getRolename())
-                                    .setName(userObj.getString("name"))
-                                    .setPhone(userObj.getString("mobile"))
-                                    .setPassword(MD5Util.getPassword("000000"))
-                                    .setCorpwxUserid(openUserId)
-                                    .setCorpwxRealUserid(corpWxUserId)
-                                    .setJobNumber(openUserId.equals(userId)?null:userId)
-                                    .setColor(ColorUtil.randomColor())
-                                    .setCorpwxDeptid(curUserWXDeptid)
-                                    .setCompanyId(companyId);
-                            if (sysDept != null) {
-                                user.setDepartmentId(sysDept.getDepartmentId());
-                                List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
-                                user.setDepartmentCascade(convertDepartmentIdToCascade(user.getDepartmentId(), allDeptList));
-                            }
-                            Integer employeeCnt = userMapper.selectCount(new QueryWrapper<User>().eq("company_id", companyId).eq("is_active",1));
-                            Company company = companyMapper.selectOne(new QueryWrapper<Company>().eq("id", companyId));
-                            ContactSyncLog contactSyncLog = new ContactSyncLog();
-                            contactSyncLog.setCompanyId(companyId);
-                            System.err.println("企业微信自动同步新增人员日志记录===============================");
-                            if (employeeCnt + 1 > company.getStaffCountMax()){
-                                contactSyncLog.setResult(0);
-                                //contactSyncLog.setMsg("公司人员已达上限,请联系客服提高人数上限。");
-                                contactSyncLog.setMsg(MessageUtils.message("wx.employeeFull"));
-                                System.err.println("日志信息:"+ contactSyncLog.toString());
-                                contactSyncLogMapper.insert(contactSyncLog);
-                            }else {
-                                userMapper.insert(user);
-                                contactSyncLog.setResult(1);
-                                //contactSyncLog.setMsg("同步成功");
-                                contactSyncLog.setMsg(MessageUtils.message("wx.synSuccess"));
-                                System.err.println("日志信息:"+ contactSyncLog.toString());
-                                contactSyncLogMapper.insert(contactSyncLog);
-                            }
-                        }
+                    //直接通过企业微信通讯录同步
+                    JSONObject userObj = getUserInfo(getCorpAccessToken(wxCorpInfo), corpWxUserId);
+                    //成功获取到通讯录的个人详情
+                    Long id = SnowFlake.nextId();
+                    //通过getUserInfo接口获取到的json key是小写的
+                    JSONArray department = userObj.getJSONArray("department");
+                    Integer curUserWXDeptid = getMaxDeptIdFromArray(department);
+                    Department sysDept = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", curUserWXDeptid));
+                    String userId = userObj.getString("userid");
+                    User user = new User()
+                            .setId(id.toString())
+                            .setRoleId(defaultRole.getId())
+                            .setRoleName(defaultRole.getRolename())
+                            .setName(userObj.getString("name"))
+                            .setPhone(userObj.getString("mobile"))
+                            .setPassword(MD5Util.getPassword("000000"))
+                            .setCorpwxUserid(openUserId)
+                            .setCorpwxRealUserid(corpWxUserId)
+                            .setJobNumber(openUserId.equals(userId)?null:userId)
+                            .setColor(ColorUtil.randomColor())
+                            .setCompanyId(companyId);
+                    if (sysDept != null) {
+                        user.setDepartmentId(sysDept.getDepartmentId());
+                        List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
+                        user.setDepartmentCascade(convertDepartmentIdToCascade(user.getDepartmentId(), allDeptList));
+                    }
+                    Integer employeeCnt = userMapper.selectCount(new QueryWrapper<User>().eq("company_id", companyId).eq("is_active",1));
+                    Company company = companyMapper.selectOne(new QueryWrapper<Company>().eq("id", companyId));
+                    ContactSyncLog contactSyncLog = new ContactSyncLog();
+                    contactSyncLog.setCompanyId(companyId);
+                    System.err.println("企业微信自动同步新增人员日志记录===============================");
+                    if (employeeCnt + 1 > company.getStaffCountMax()){
+                        contactSyncLog.setResult(0);
+                        //contactSyncLog.setMsg("公司人员已达上限,请联系客服提高人数上限。");
+                        contactSyncLog.setMsg(MessageUtils.message("wx.employeeFull"));
+                        System.err.println("日志信息:"+ contactSyncLog.toString());
+                        contactSyncLogMapper.insert(contactSyncLog);
+                    }else {
+                        userMapper.insert(user);
+                        contactSyncLog.setResult(1);
+                        //contactSyncLog.setMsg("同步成功");
+                        contactSyncLog.setMsg(MessageUtils.message("wx.synSuccess"));
+                        System.err.println("日志信息:"+ contactSyncLog.toString());
+                        contactSyncLogMapper.insert(contactSyncLog);
                     }
                 } else if ("update_user".equals(changeType)) {
                     String corpWxUserId = jsonObject.getString("UserID");
                     String openUserId = jsonObject.getString("OpenUserID");
-                    if (wxCorpInfo.getSaasSyncContact() == 1) {
-                        Integer curUserWXDeptid = 0;
-                        if (jsonObject.has("Department")) {
-                            String department = jsonObject.getString("Department");
-                            if (department.contains(",")) {
-                                String[] split = department.split(",");
-                                curUserWXDeptid = getMaxDeptIdFromArray(split);
-                            } else {
-                                curUserWXDeptid = Integer.valueOf(department);
-                            }
-                        } else if (jsonObject.has("MainDepartment")) {
-                            //取主部门
-                            curUserWXDeptid = jsonObject.getInt("MainDepartment");
+                    Integer curUserWXDeptid = 0;
+                    if (jsonObject.has("Department")) {
+                        String department = jsonObject.getString("Department");
+                        if (department.contains(",")) {
+                            String[] split = department.split(",");
+                            curUserWXDeptid = getMaxDeptIdFromArray(split);
                         } else {
-                            System.out.println("部门未变更,不处理");
-                        }
-                        if (curUserWXDeptid != 0) {
-                            User user = userMapper.selectOne(new QueryWrapper<User>().eq("company_id", companyId).eq("corpwx_userid", openUserId));
-                            if (user != null) {
-                                User changeUser = new User();
-                                changeUser.setId(user.getId());
-                                if (!curUserWXDeptid.equals(user.getCorpwxDeptid())) {
-                                    changeUser.setCorpwxDeptid(curUserWXDeptid);
-                                    Department department = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", curUserWXDeptid));
-                                    if (department != null) {
-                                        changeUser.setDepartmentId(department.getDepartmentId());
-                                        List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
-                                        changeUser.setDepartmentCascade(convertDepartmentIdToCascade(changeUser.getDepartmentId(), allDeptList));
-                                        userMapper.updateById(changeUser);
-                                    }
-                                }
-                            }
+                            curUserWXDeptid = Integer.valueOf(department);
                         }
+                    } else if (jsonObject.has("MainDepartment")) {
+                        //取主部门
+                        curUserWXDeptid = jsonObject.getInt("MainDepartment");
+                    } else {
+                        System.out.println("部门未变更,不处理");
                     }
-                    //只有授权通讯录同步的,才有机会更新部门或者上级
-                    else if (!StringUtils.isEmpty(wxCorpInfo.getContactSecret()) && !StringUtils.isEmpty(wxCorpInfo.getContactServer())) {
-                        String remoteCorpConcactAccessToken = getRemoteCorpConcactAccessToken(wxCorpInfo);
-                        String curCorpAccessToken = getCorpAccessToken(wxCorpInfo);
-                        Integer curUserWXDeptid = 0;
-                        if (jsonObject.has("Department")) {
-                            String department = jsonObject.getString("Department");
-                            if (department.contains(",")) {
-                                String[] split = department.split(",");
-                                curUserWXDeptid = getMaxDeptIdFromArray(split);
-                            } else {
-                                curUserWXDeptid = Integer.valueOf(department);
-                            }
-                        } else if (jsonObject.has("MainDepartment")) {
-                            //取主部门
-                            curUserWXDeptid = jsonObject.getInt("MainDepartment");
-                        } else {
-                            System.out.println("部门未变更,不处理");
-                        }
-                        if (curUserWXDeptid != 0) {
-                            JSONObject userObj = remoteGetUserDetail(wxCorpInfo, remoteCorpConcactAccessToken, corpWxUserId, curUserWXDeptid, curCorpAccessToken);
-                            if (userObj != null) {
-                                //成功获取到通讯录的个人详情
-                                JSONArray department = userObj.getJSONArray("department");
-                                curUserWXDeptid = getMaxDeptIdFromArray(department);
-                                List<Department> departments = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", curUserWXDeptid));
-                                Department sysDept = null;
-                                if (departments.size() > 0) {
-                                    sysDept = departments.get(0);
-                                }
-
-                                User user = userMapper.selectOne(new QueryWrapper<User>().eq("company_id", companyId).eq("corpwx_userid", openUserId));
-                                if (user != null) {
-                                    User changeUser = new User();
-                                    changeUser.setId(user.getId());
-
-                                    boolean change = false;
-                                    //姓名变化
-                                    if (!user.getName().equals(userObj.getString("name"))) {
-                                        changeUser.setName(userObj.getString("name"));
-                                        change = true;
-                                    }
-                                    if (sysDept != null && !user.getDepartmentId().equals(sysDept.getDepartmentId())) {
-                                        changeUser.setDepartmentId(sysDept.getDepartmentId());
-                                        change = true;
-                                    }
-                                    //暂不处理直属领导
-//                                if (userObj.containsKey("direct_leader") && userObj.getJSONArray("direct_leader").size() > 0) {
-//                                    String directLeader = userObj.getJSONArray("direct_leader").getString(0);
-//                                    User leader = userMapper.selectOne(new QueryWrapper<User>().eq("company_id", companyId).eq("corpwx_userid", directLeader));
-//                                    if (leader != null && !leader.equals(user.getSuperiorId())) {
-//                                        changeUser.setSuperiorId(leader.getId());
-//                                        change = true;
-//                                    }
-//                                }
-                                    if (change) {
-                                        userMapper.updateById(changeUser);
-                                    }
+                    if (curUserWXDeptid != 0) {
+                        User user = userMapper.selectOne(new QueryWrapper<User>().eq("company_id", companyId).eq("corpwx_userid", openUserId));
+                        if (user != null) {
+                            User changeUser = new User();
+                            changeUser.setId(user.getId());
+                            if (!curUserWXDeptid.equals(user.getCorpwxDeptid())) {
+                                changeUser.setCorpwxDeptid(curUserWXDeptid);
+                                Department department = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", curUserWXDeptid));
+                                if (department != null) {
+                                    changeUser.setDepartmentId(department.getDepartmentId());
+                                    List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
+                                    changeUser.setDepartmentCascade(convertDepartmentIdToCascade(changeUser.getDepartmentId(), allDeptList));
+                                    userMapper.updateById(changeUser);
                                 }
                             }
                         }
                     }
+
                 } else if ("create_party".equals(changeType)) {
                     Integer deptId = jsonObject.getInt("Id");
                     Integer parentDeptId = jsonObject.getInt("ParentId");
-                    if (wxCorpInfo.getSaasSyncContact() == 1) {
-                        Department department = new Department();
-                        department.setCompanyId(companyId);
-                        department.setCorpwxDeptid(deptId);
-                        department.setCorpwxDeptpid(parentDeptId);
-                        department.setDepartmentName(jsonObject.getString("Name"));
-                        if (parentDeptId != 1) {
-                            Department parentDept = department.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", parentDeptId));
-                            if (parentDept != null) {
-                                department.setSuperiorId(parentDept.getDepartmentId());
-                            }
-                        }
-                        departmentMapper.insert(department);
-                    } else if (wxCorpInfo != null && !StringUtils.isEmpty(wxCorpInfo.getContactSecret()) && !StringUtils.isEmpty(wxCorpInfo.getContactSecret())) {
-                        //创建部门,调用中转服务接口获取部门详情
-                        String remoteCorpConcactAccessToken = getRemoteCorpConcactAccessToken(wxCorpInfo);
-                        Department department = new Department();
-                        department.setCompanyId(companyId);
-                        department.setCorpwxDeptid(deptId);
-                        department.setCorpwxDeptpid(parentDeptId);
-                        JSONObject deptJson = remoteGetDeptDetail(wxCorpInfo, remoteCorpConcactAccessToken, deptId);
-                        if (deptJson != null) {
-                            //成功获取到了
-                            String name = deptJson.getString("name");
-                            department.setDepartmentName(name);
-                            Department parentDept = department.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", parentDeptId));
-                            if (parentDept != null) {
-                                department.setSuperiorId(parentDept.getDepartmentId());
-                            }
-                            departmentMapper.insert(department);
+                    Department department = new Department();
+                    department.setCompanyId(companyId);
+                    department.setCorpwxDeptid(deptId);
+                    department.setCorpwxDeptpid(parentDeptId);
+                    department.setDepartmentName(jsonObject.getString("Name"));
+                    if (parentDeptId != 1) {
+                        Department parentDept = department.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", parentDeptId));
+                        if (parentDept != null) {
+                            department.setSuperiorId(parentDept.getDepartmentId());
                         }
                     }
+                    departmentMapper.insert(department);
                 } else if ("update_party".equals(changeType)) {
                     //变更部门,可能是名称变化或者父部门变化
                     Integer deptId = jsonObject.getInt("Id");
-                    if (wxCorpInfo.getSaasSyncContact() == 1) {
-                        //同步的情况,只处理父部门变化
-                        if (jsonObject.has("ParentId")) {
-                            Integer parentDeptId = jsonObject.getInt("ParentId");
-                            //发生父部门的结构变化了
-                            Department department = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", wxCorpInfo.getCompanyId()).eq("corpwx_deptid", deptId));
-                            if (department != null) {
-                                Department parentDept = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", wxCorpInfo.getCompanyId()).eq("corpwx_deptid", parentDeptId));
-                                if (parentDept != null) {
-                                    department.setSuperiorId(parentDept.getDepartmentId());
-                                    departmentMapper.updateById(department);
-                                } else {
-                                    //父部门不存在,自己变成一级部门
-                                    departmentMapper.updateNullSuperior(department.getDepartmentId());
-                                }
-                            }
-                        }
-                    } else if (wxCorpInfo != null && !StringUtils.isEmpty(wxCorpInfo.getContactSecret()) && !StringUtils.isEmpty(wxCorpInfo.getContactServer())) {
-                        if (jsonObject.has("ParentId")) {
-                            Integer parentDeptId = jsonObject.getInt("ParentId");
-                            //发生父部门的结构变化了
-                            Department department = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", wxCorpInfo.getCompanyId()).eq("corpwx_deptid", deptId));
-                            if (department != null) {
-                                if (parentDeptId == 1) {//是一级部门
-                                    departmentMapper.updateNullSuperior(department.getDepartmentId());
-                                } else {
-                                    Department parentDept = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", wxCorpInfo.getCompanyId()).eq("corpwx_deptid", parentDeptId));
-                                    if (parentDept != null) {
-                                        department.setSuperiorId(parentDept.getDepartmentId());
-                                        departmentMapper.updateById(department);
-                                    }
-                                }
-                            }
-                        }
-                        if (jsonObject.has("Name")) {
-                            //发生了部门名称变化
-                            String remoteCorpConcactAccessToken = getRemoteCorpConcactAccessToken(wxCorpInfo);
-                            String url = TRANSMIT_SERVER_GET_DEPTDETAIL.replace(TRANSMIT_SERVER_STR, wxCorpInfo.getContactServer()).replace("ACCESS_TOKEN", remoteCorpConcactAccessToken).replace("DEPTID", ""+deptId);
-                            String result = restTemplate.getForObject(url, String.class);
-//                            System.out.println("部门返回数据:"+result);
-                            JSONObject resultObj = JSONObject.parseObject(JSONObject.parseObject(result).getString("data"));
-                            if (resultObj.getInteger("errcode") == 0) {
-                                JSONObject serverDept = resultObj.getJSONObject("department");
-                                String name = serverDept.getString("name");
-                                Department department = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", wxCorpInfo.getCompanyId()).eq("corpwx_deptid", deptId));
-                                department.setDepartmentName(name);
+                    //同步的情况,只处理父部门变化
+                    if (jsonObject.has("ParentId")) {
+                        Integer parentDeptId = jsonObject.getInt("ParentId");
+                        //发生父部门的结构变化了
+                        Department department = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", wxCorpInfo.getCompanyId()).eq("corpwx_deptid", deptId));
+                        if (department != null) {
+                            Department parentDept = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", wxCorpInfo.getCompanyId()).eq("corpwx_deptid", parentDeptId));
+                            if (parentDept != null) {
+                                department.setSuperiorId(parentDept.getDepartmentId());
                                 departmentMapper.updateById(department);
                             } else {
-                                System.err.println("同步获取部门详情报错:"+resultObj.toString());
+                                //父部门不存在,自己变成一级部门
+                                departmentMapper.updateNullSuperior(department.getDepartmentId());
                             }
                         }
                     }
@@ -1420,9 +1238,8 @@ public class WeiXinCorpController {
                         managerRole = sysRoleService.generateDefaultRoles(company.getId());
                     }
                     data.setCompanyId(company.getId());
-                    data.setSaasSyncContact(1);
                     wxCorpInfoMapper.insert(data);
-                    //默认普通员工的角色
+                    //默认组员的角色
                     //检查授权人是否存在
                     int cnt = userMapper.selectCount(new QueryWrapper<User>().eq("corpwx_userid", userId));
                     if (cnt == 0) {
@@ -1863,7 +1680,7 @@ public class WeiXinCorpController {
 //            }
             Company company = companyMapper.selectOne(new QueryWrapper<Company>().eq("id", curUser.getCompanyId()));
             WxCorpInfo info = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", curUser.getCompanyId()));
-            curUser.setUserNameNeedTranslate(info.getSaasSyncContact());
+//            curUser.setUserNameNeedTranslate(info.getSaasSyncContact());
             //检测密码正确时
             UserVO userVO = new UserVO().setCompanyName(company.getCompanyName());
             userVO.setCompany(company);
@@ -2133,7 +1950,7 @@ public class WeiXinCorpController {
                 System.out.println("userid="+curUserid+", name=" + userJson.getString("name")+", mobile="+userJson.getString("mobile"));
                 //不存在的人员, 进行插入
                 user.setId(SnowFlake.nextId()+"")
-                        .setRoleId(defaultRole.getId())//默认普通员工
+                        .setRoleId(defaultRole.getId())//默认组员
                         .setRoleName(defaultRole.getRolename())
                         .setCompanyId(companyId)
                         .setName(userJson.getString("name"))
@@ -2163,7 +1980,7 @@ public class WeiXinCorpController {
                     User user = new User();
 
                     user.setId(SnowFlake.nextId()+"")
-                            .setRoleId(defaultRole.getId())//默认普通员工
+                            .setRoleId(defaultRole.getId())//默认组员
                             .setRoleName(defaultRole.getRolename())
                             .setCompanyId(companyId)
                             .setDepartmentId(0)
@@ -2270,7 +2087,7 @@ public class WeiXinCorpController {
                     if (curId > maxDeptId) maxDeptId = curId;
                 }
                 user.setId(SnowFlake.nextId()+"")
-                        .setRoleId(defaultRole.getId())//默认普通员工
+                        .setRoleId(defaultRole.getId())//默认组员
                         .setRoleName(defaultRole.getRolename())
                         .setCompanyId(companyId)
                         .setName(userJson.getString("name"))
@@ -2335,7 +2152,7 @@ public class WeiXinCorpController {
                         } else {
                             //在当前部门下的员工
                             user.setId(SnowFlake.nextId()+"")
-                                    .setRoleId(defaultRole.getId())//默认普通员工
+                                    .setRoleId(defaultRole.getId())//默认组员
                                     .setRoleName(defaultRole.getRolename())
                                     .setCompanyId(companyId)
                                     .setName(userJson.getString("name"))
@@ -2594,7 +2411,7 @@ public class WeiXinCorpController {
                     if (curId > maxDeptId) maxDeptId = curId;
                 }
                 user.setId(SnowFlake.nextId()+"")
-                        .setRoleId(defaultRole.getId())//默认普通员工
+                        .setRoleId(defaultRole.getId())//默认组员
                         .setRoleName(defaultRole.getRolename())
                         .setCompanyId(companyId)
                         .setName(userJson.getString("name"))
@@ -2897,7 +2714,7 @@ public class WeiXinCorpController {
             User user = new User();
 
             user.setId(SnowFlake.nextId()+"")
-                    .setRoleId(defaultRole.getId())//默认普通员工
+                    .setRoleId(defaultRole.getId())//默认组员
                     .setRoleName(defaultRole.getRolename())
                     .setCompanyId(companyId)
                     .setName(userJson.getString("name"))
@@ -3170,6 +2987,30 @@ public class WeiXinCorpController {
         return msg;
     }
 
+    /**
+     * 获取应用的AccessToken
+     * @param corpInfo
+     * @return
+     * @throws Exception
+     */
+    private String getAppConcactAccessToken(WxCorpInfo corpInfo) throws Exception {
+        String url = GET_CORP_TOKEN.replace("ID", corpInfo.getCorpid()).replace("SECRET", corpInfo.getAgentSecret());
+        ResponseEntity<String> responseEntity = this.restTemplate.exchange(url,
+                HttpMethod.GET, null, String.class);
+        if (responseEntity.getStatusCode() == HttpStatus.OK) {
+            String resp = responseEntity.getBody();
+            JSONObject json = JSONObject.parseObject(resp);
+            if (json.getIntValue("errcode") == 0) {
+                String access_token = json.getString("access_token");
+                System.out.println("获取到access_token=="+access_token);
+                corpInfo.setAccessToken(access_token);
+            } else {
+                throw new Exception(json.toJSONString());
+            }
+        }
+        return corpInfo.getAccessToken();
+    }
+
     //获取企业通讯录的accessToken,在私有化部署的企业内部服务器上跑
     private String getCorpConcactAccessToken(WxCorpInfo corpInfo) throws Exception {
         String url = GET_CORP_TOKEN.replace("ID", corpInfo.getCorpid()).replace("SECRET", corpInfo.getContactSecret());
@@ -3180,6 +3021,7 @@ public class WeiXinCorpController {
             JSONObject json = JSONObject.parseObject(resp);
             if (json.getIntValue("errcode") == 0) {
                 String access_token = json.getString("access_token");
+                System.out.println("获取到access_token=="+access_token);
                 corpInfo.setAccessToken(access_token);
             } else {
                 throw new Exception(json.toJSONString());
@@ -3504,37 +3346,24 @@ public class WeiXinCorpController {
                 } else {
                     Company company = new Company().setCompanyName(wxCorpInfo.getCorpName())
                             .setExpirationDate(LocalDateTime.now().plusDays(15));
-                    company.setPackageWorktime(1);
                     //设置来源
                     company.setRegFrom("企业微信");
                     companyMapper.insert(company);
                     wxCorpInfo.setCompanyId(company.getId());
                     wxCorpInfoMapper.updateById(wxCorpInfo);
-                    //生成工作时长
-                    TimeType timeType = new TimeType();
-                    timeType.setCompanyId(company.getId());
-                    timeTypeMapper.insert(timeType);
-                    SysRole smanager = sysRoleService.generateDefaultRoles(company.getId());
-                    //生成项目的成本基线默认条目
-                    String[] array = Constant.DEFAULT_BASE_COST_ITEMS;
-                    for (String baseItem : array) {
-                        ProjectBasecostSetting setting = new ProjectBasecostSetting();
-                        setting.setName(baseItem);
-                        setting.setCompanyId(company.getId());
-                        projectBasecostSettingMapper.insert(setting);
+                    //生成默认的产品分类
+                    for (String prodCate : Constant.DEFAULT_PROD_CATEGORY) {
+                        ProdCategory category = new ProdCategory();
+                        category.setCompanyId(company.getId());
+                        category.setName(prodCate);
+                        prodCategoryMapper.insert(category);
                     }
-                    //todo: 生成项目报表服务默认条目
-                    Integer[] arrayInteger=new Integer[]{1,2,3,4,7};
-                    for (Integer integerItem : arrayInteger) {
-                        CompanyReport companyReport=new CompanyReport();
-                        companyReport.setCompanyId(company.getId());
-                        companyReport.setReportFormId(integerItem);
-                        companyReportMapper.insert(companyReport);
-                    }
-                    String accessToken = getCorpConcactAccessToken(wxCorpInfo);
+
+                    SysRole smanager = sysRoleService.generateDefaultRoles(company.getId());
+//                    String accessToken = getCorpConcactAccessToken(wxCorpInfo);
+                    String accessToken = getAppConcactAccessToken(wxCorpInfo);
                     //获取组织架构 同步部门
                     String departmentInfoResp=wxCorpInfoService.getDepartmentInfoWithApplication(accessToken);
-                    System.out.println(departmentInfoResp);
                     JSONObject departmentInfoOb = JSONObject.parseObject(departmentInfoResp);
                     JSONArray departmentInfoArrays = departmentInfoOb.getJSONArray("department");
                     for (int i = 0; i < departmentInfoArrays.size(); i++) {
@@ -3560,7 +3389,7 @@ public class WeiXinCorpController {
                             departmentWxMapper.insert(departmentWx);
                         }
                     }
-                    SysRole role = sysRoleMapper.selectOne(new QueryWrapper<SysRole>().eq("company_id", company.getId()).eq("rolename","普通员工"));
+                    SysRole role = sysRoleMapper.selectOne(new QueryWrapper<SysRole>().eq("company_id", company.getId()).eq("rolename","组员"));
                     List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", company.getId()));
                     List<DepartmentWx> departmentWxList = departmentWxMapper.selectList(new QueryWrapper<DepartmentWx>().eq("corpid", corpid));
                     List<User> userList=new ArrayList<>();
@@ -3596,7 +3425,7 @@ public class WeiXinCorpController {
                             User user = new User();
                             //在当前部门下的员工
                             user.setId(SnowFlake.nextId()+"")
-                                    .setRoleId(role.getId())//默认普通员工
+                                    .setRoleId(role.getId())//默认组员
                                     .setRoleName(role.getRolename())
                                     .setCompanyId(company.getId())
                                     .setName(userJson.getString("name"))
@@ -3610,9 +3439,11 @@ public class WeiXinCorpController {
                             Optional<DepartmentWx> dpWx = departmentWxList.stream().filter(dl -> dl.getWxDeptid().equals(max)).findFirst();
                             if(dpWx.isPresent()){
                                 Optional<Department> dp = departmentList.stream().filter(dl -> dl.getDepartmentId().equals(dpWx.get().getSysDeptid())).findFirst();
-                                user.setDepartmentName(dp.get().getDepartmentName());
-                                user.setDepartmentId(dp.get().getDepartmentId());
-                                user.setDepartmentCascade(convertDepartmentIdToCascade(dp.get().getDepartmentId(),departmentList));
+                                if (dp.isPresent()) {
+                                    user.setDepartmentName(dp.get().getDepartmentName());
+                                    user.setDepartmentId(dp.get().getDepartmentId());
+                                    user.setDepartmentCascade(convertDepartmentIdToCascade(dp.get().getDepartmentId(),departmentList));
+                                }
                             }
                             boolean b = userList.stream().anyMatch(ul ->ul.getCorpwxUserid()!=null&&ul.getCorpwxUserid().equals(user.getCorpwxUserid()));
                             if(!b){

+ 10 - 7
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/WxCorpInfo.java

@@ -15,7 +15,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2022-11-07
+ * @since 2023-07-27
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -81,6 +81,12 @@ public class WxCorpInfo extends Model<WxCorpInfo> {
     @TableField("agentid")
     private Integer agentid;
 
+    /**
+     * 授权企业内应用的secret
+     */
+    @TableField("agent_secret")
+    private String agentSecret;
+
     /**
      * 通讯录ApiSecret
      */
@@ -93,18 +99,15 @@ public class WxCorpInfo extends Model<WxCorpInfo> {
     @TableField("contact_server")
     private String contactServer;
 
-    /**
-     * 作为第三方平台,是否自动同步企业微信通讯录。对老数据关闭,新企业默认开启
-     */
-    @TableField("saas_sync_contact")
-    private Integer saasSyncContact;
-
     /**
      * 开通应用时的授权方式:0-管理员,1-成员授权
      */
     @TableField("auth_mode")
     private Integer authMode;
 
+    @TableField("saas_sync_contact")
+    private Integer saasSyncContact;
+
 
     @Override
     protected Serializable pkVal() {

+ 20 - 20
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/InformationServiceImpl.java

@@ -49,26 +49,26 @@ public class InformationServiceImpl extends ServiceImpl<InformationMapper, Infor
             List<Information> information = informationMapper.selectList(new QueryWrapper<Information>()
                     .eq("user_id", user.getId()).orderByDesc("time").last("LIMIT 20"));
             WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id",user.getCompanyId()));
-            if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
-                List<User> users = userMapper.selectList(new QueryWrapper<User>().eq("company_id",user.getCompanyId()));
-                for (Information info : information) {
-                    if (info.getMsg() == null){
-                        continue;
-                    } else if (info.getMsg().contains("更新任务进展为")){
-                        String name = info.getMsg().substring(0, info.getMsg().indexOf("更新任务进展为"));
-                        String userWxId = "";
-                        for (User item : users) {
-                            if (name.equals(item.getName())){
-                                userWxId = item.getCorpwxRealUserid();
-                                break;
-                            }
-                        }
-                        String msg = info.getMsg();
-                        String newMsg = msg.replace(name, "$userName=" + userWxId + "$");
-                        info.setMsg(newMsg);
-                    }
-                }
-            }
+//            if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+//                List<User> users = userMapper.selectList(new QueryWrapper<User>().eq("company_id",user.getCompanyId()));
+//                for (Information info : information) {
+//                    if (info.getMsg() == null){
+//                        continue;
+//                    } else if (info.getMsg().contains("更新任务进展为")){
+//                        String name = info.getMsg().substring(0, info.getMsg().indexOf("更新任务进展为"));
+//                        String userWxId = "";
+//                        for (User item : users) {
+//                            if (name.equals(item.getName())){
+//                                userWxId = item.getCorpwxRealUserid();
+//                                break;
+//                            }
+//                        }
+//                        String msg = info.getMsg();
+//                        String newMsg = msg.replace(name, "$userName=" + userWxId + "$");
+//                        info.setMsg(newMsg);
+//                    }
+//                }
+//            }
             httpRespMsg.data = information;
         } catch (NullPointerException e) {
             //httpRespMsg.setError("验证失败");

+ 7 - 7
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -255,7 +255,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             User user = userMapper.selectById(request.getHeader("Token"));
             Integer companyId = user.getCompanyId();
             List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部项目");
-            //判断用户的角色,如果是管理员和负责人,查看全部的。如果是普通员工,只能是看到参与的项目
+            //判断用户的角色,如果是管理员和负责人,查看全部的。如果是组员,只能是看到参与的项目
             QueryWrapper<Project> queryWrapper = null;
             List<Department> allDepartmentList=departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id",companyId));
             List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", user.getId()).eq("company_id", companyId));
@@ -271,7 +271,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             //本人所在部门
             deptIds.add(user.getDepartmentId());
             if (functionList.size() == 0) {
-                //普通员工
+                //组员
                 List<Participation> pList = participationMapper.selectList(new QueryWrapper<Participation>().eq("user_id", user.getId()));
                 List<Integer> projectIds = new ArrayList<>();
                 if (pList.size() > 0) {
@@ -2133,7 +2133,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         User user = userMapper.selectById(request.getHeader("Token"));
         Integer companyId = user.getCompanyId();
         WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
-        //判断用户的角色,如果是管理员和负责人,查看全部的。如果是普通员工,只能是看到参与的项目
+        //判断用户的角色,如果是管理员和负责人,查看全部的。如果是组员,只能是看到参与的项目
         QueryWrapper<Project> queryWrapper = new QueryWrapper<Project>().eq("company_id", companyId);
         DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         List<Project> projectList = projectMapper.selectList(queryWrapper);
@@ -2746,7 +2746,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 //            projectIds.add(targetProjectId);
 //        } else {
 //            if (functionList.size() == 0) {
-//                //普通员工只看自己相关的
+//                //组员只看自己相关的
 //                List<Participation> participationList
 //                        = participationMapper.selectList(new QueryWrapper<Participation>().in("user_id", userIds));
 //                projectIds = participationList.stream().map(Participation::getProjectId).collect(Collectors.toList());
@@ -6396,10 +6396,10 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         User user = userMapper.selectById(request.getHeader("Token"));
         Integer companyId = user.getCompanyId();
         List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部项目");
-        //判断用户的角色,如果是管理员和负责人,查看全部的。如果是普通员工,只能是看到参与的项目
+        //判断用户的角色,如果是管理员和负责人,查看全部的。如果是组员,只能是看到参与的项目
         QueryWrapper<Project> queryWrapper = null;
         if (functionList.size() == 0) {
-            //普通员工
+            //组员
             List<Participation> pList = participationMapper.selectList(new QueryWrapper<Participation>().eq("user_id", user.getId()));
             List<Integer> projectIds = new ArrayList<>();
             if (pList.size() > 0) {
@@ -8706,7 +8706,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 //            projectIds.add(targetProjectId);
 //        } else {
 //            if (functionList.size() == 0) {
-//                //普通员工只看自己相关的
+//                //组员只看自己相关的
 //                List<Participation> participationList
 //                        = participationMapper.selectList(new QueryWrapper<Participation>().in("user_id", userIds));
 //                projectIds = participationList.stream().map(Participation::getProjectId).collect(Collectors.toList());

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

@@ -2663,7 +2663,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         reportsFromProjects = reportMapper.getProjectMembReportByDate(startDate, null, user.getId(), endDate, projectId,stateKey,branchDepartment, auditorPids);
                     }
                 } else {
-                    //普通员工只能看自己的
+                    //组员只能看自己的
                     if (timeType.getShowFillauditTime() == 1) {
                         reportsFromProjects = reportMapper.getAllReportByDateWithReportLog(startDate, null, user.getId(), endDate, projectId,stateKey,branchDepartment);
                     } else {

+ 16 - 73
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/SysRoleServiceImpl.java

@@ -38,7 +38,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
 
     public static final HashMap<String, String[]> moduleMaps = new HashMap();
     static {
-        moduleMaps.put("普通员工", employeeModules);
+        moduleMaps.put("组员", employeeModules);
         moduleMaps.put("项目经理", pmModules);
         moduleMaps.put("财务管理员", financeModules);
         moduleMaps.put("项目管理员", pmoModules);
@@ -55,7 +55,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
             "项目阶段工时表", "加班情况统计表"};
     public static final HashMap<String, String[]> functionMaps = new HashMap();
     static {
-        functionMaps.put("普通员工", employeeFunctions);
+        functionMaps.put("组员", employeeFunctions);
         functionMaps.put("项目经理", pmFunctions);
         functionMaps.put("财务管理员", financeFunctions);
         functionMaps.put("项目管理员", pmoFunctions);
@@ -95,37 +95,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
         SysRole sManager = null;
 
         //按照公司开通的模块进行匹配
-        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 (timeType.getReportWorkflow() == 1) {
-            queryWrapper.or().eq("report_workflow", 1);
-        }
-        if (timeType.getNeedDeptAudit() == 1) {
-            queryWrapper.or().eq("need_dept_audit", 1);
-        }
+        QueryWrapper<SysModule> queryWrapper = new QueryWrapper<SysModule>();
         queryWrapper.orderByAsc("orderitem");
 
         List<SysModule> modules = sysModuleMapper.selectList(queryWrapper);
@@ -133,39 +103,8 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
             System.err.println("请先初始化sys_module和sys_function表");
             return null;
         }
-        QueryWrapper<SysFunction> functionQueryWrapper = new QueryWrapper<SysFunction>().eq("package_time", 1);
-        if (company.getPackageProject() == 1) {
-            functionQueryWrapper.or().eq("package_project", 1);
-        }
-        if (company.getPackageOa() == 1) {
-            functionQueryWrapper.or().eq("package_oa", 1);
-        }
-        if (company.getPackageExpense() == 1) {
-            functionQueryWrapper.or().eq("package_expense", 1);
-        }
-        if (company.getPackageCustomer() == 1) {
-            functionQueryWrapper.or().eq("package_customer", 1);
-        }
-        if (company.getPackageEngineering() == 1) {
-            functionQueryWrapper.or().eq("package_engineering", 1);
-        }
-        if (company.getPackageContract() == 1) {
-            functionQueryWrapper.or().eq("package_contract", 1);
-        }
-        if (company.getPackageEtimecard()== 1) {
-            functionQueryWrapper.or().eq("package_etimecard", 1);
-        }
-        if (company.getPackageFinance() == 1) {
-            functionQueryWrapper.or().eq("package_finance", 1);
-        }
-        //企业微信考勤查看全部的权限
-        if (timeType.getSyncCorpwxTime() == 1) {
-            functionQueryWrapper.or().eq("sync_corpwx_time", 1);
-        }
-        //开通财务审核功能的
-        if (timeType.getFinanceAudit() == 1) {
-            functionQueryWrapper.or().eq("finance_audit", 1);
-        }
+        QueryWrapper<SysFunction> functionQueryWrapper = new QueryWrapper<SysFunction>();
+
         functionQueryWrapper.orderByAsc("seq");
 
         List<SysFunction> functions = sysFunctionMapper.selectList(functionQueryWrapper);
@@ -184,12 +123,16 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
                 generateRole(str, company, modules, functions);
             } else {
                 //其他角色按照过滤的来生成
-                List<SysModule> filteredModules = modules.stream().filter(
-                        m->Arrays.stream(moduleMaps.get(str)).anyMatch(curModule->curModule.equals(m.getName()))
-                ).collect(Collectors.toList());
-                List<SysFunction> filteredFunctions = functions.stream().filter(
-                        m->Arrays.stream(functionMaps.get(str)).anyMatch(curModule->curModule.equals(m.getName()))
-                ).collect(Collectors.toList());
+                List<SysModule> filteredModules = new ArrayList<>();
+                List<SysFunction> filteredFunctions = new ArrayList<>();
+                if (moduleMaps.get(str) != null) {
+                    filteredModules = modules.stream().filter(
+                            m->Arrays.stream(moduleMaps.get(str)).anyMatch(curModule->curModule.equals(m.getName()))
+                    ).collect(Collectors.toList());
+                    filteredFunctions = functions.stream().filter(
+                            m->Arrays.stream(functionMaps.get(str)).anyMatch(curModule->curModule.equals(m.getName()))
+                    ).collect(Collectors.toList());
+                }
 
                 generateRole(str, company, filteredModules, filteredFunctions);
             }
@@ -255,7 +198,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
         role.setCompanyId(company.getId());
         role.setRolename(roleName);
         role.setRoleDescribe(roleName);
-        if ("普通员工".equals(roleName)) {
+        if ("组员".equals(roleName)) {
             role.setIsDefault(1);
         }
         sysRoleMapper.insert(role);

+ 5 - 3
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/TaskServiceImpl.java

@@ -45,6 +45,8 @@ import java.util.stream.Collectors;
 @Service
 @Transactional
 public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements TaskService {
+    @Value("${configEnv.isPrivateDeploy}")
+    private boolean isPrivateDeploy;//企业内部应用,私有化部署的情况
 
     //用于控制线程锁
     public static HashMap<String, CorpwxJobResult> corpwxJobCenter = new HashMap();
@@ -298,7 +300,7 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
                 HSSFRow row = sheet.createRow(rowNum);
                 row.createCell(0).setCellValue(task.getName());
                 row.createCell(1).setCellValue(project.getProjectName());
-                if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                if(wxCorpInfo!=null&& !isPrivateDeploy){
                     Optional<User> first = userList.stream().filter(ul -> ul.getId().equals(task.getExecutorId())).findFirst();
                     if(first.isPresent()){
                         row.createCell(2).setCellValue("$userName="+(first.get().getCorpwxUserid()==null?"":first.get().getCorpwxUserid())+"$");
@@ -328,7 +330,7 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
             workbook.write(fos);
             fos.flush();
             fos.close();
-            if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+            if(wxCorpInfo!=null&&!isPrivateDeploy){
                 String mediaId = wxCorpInfoService.getTranslationMediaId(fileUrlSuffix);
                 String jobId = wxCorpInfoService.syncTranslation(wxCorpInfo.getCorpid(),mediaId,fileUrlSuffix, null);
             /*if(jobId!=null&&!jobId.equals("")){
@@ -461,7 +463,7 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
             }
             System.out.println("参与搜素的人员列表"+userNameList + userNameList.size());
             HttpRespMsg respMsg=new HttpRespMsg();
-            if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1&&userNameList.size()>0){
+            if(wxCorpInfo!=null&&!isPrivateDeploy&&userNameList.size()>0){
                 respMsg = wxCorpInfoService.getBatchSearchUserInfo(wxCorpInfo, userNameList,null);
                 if(respMsg.code.equals("0")){
                     httpRespMsg.setError("姓名为["+String.valueOf(respMsg.data)+"]的人员存在重复,请使用工号!");

+ 15 - 15
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -259,7 +259,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 userVO.setCompany(company);
                 WxCorpInfo info = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", company.getId()));
                 if (info != null) {
-                    userList.get(0).setUserNameNeedTranslate(info.getSaasSyncContact());
+//                    userList.get(0).setUserNameNeedTranslate(info.getSaasSyncContact());
                 }
                 BeanUtils.copyProperties(userList.get(0), userVO);
                 if (userVO.getRoleId() == null || userVO.getRoleId() == 0) {
@@ -385,7 +385,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 if (first == null || !first.isPresent()) {
                     //按照姓名匹配
                     WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
-                    if (wxCorpInfo != null && wxCorpInfo.getSaasSyncContact() == 1) {
+                    if (wxCorpInfo != null && !isPrivateDeploy) {
                         //需要转译的情况;TODO: 验收通过后抽取出去,改成批量一次性搜索全部姓名
                         List<String> userNameList = new ArrayList<>();
                         userNameList.add(name);
@@ -750,7 +750,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         HashMap<String, Object> data = new HashMap<>();
         httpRespMsg.data=data;
         //当企业开启了微信通讯录的情况下
-        if (org.apache.commons.lang3.StringUtils.isNotBlank(keyword) && wxCorpInfo!=null && wxCorpInfo.getSaasSyncContact()==1 && departmentId == -1){
+        if (org.apache.commons.lang3.StringUtils.isNotBlank(keyword) && wxCorpInfo!=null && !isPrivateDeploy && departmentId == -1){
             System.out.println("====================开始查询通讯录名单======================");
             HashMap<String, List> result = wxCorpInfoService.getOpenId(wxCorpInfo.getCorpid(), keyword, cursor,1,200);
             List users = result.get("user");
@@ -848,7 +848,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                         user.put("createTime", dtf.format(time));
                     }
                 }
-                if (wxCorpInfo!=null && wxCorpInfo.getSaasSyncContact()==1 && flag){
+                if (wxCorpInfo!=null && !isPrivateDeploy && flag){
                     List<Map<String, Object>> active = new ArrayList<>();
                     List<Map<String, String>> activeInfoByUser = wxCorpInfoService.getActiveInfoByUser(request);
                     for (Map<String, Object> map : list) {
@@ -1948,14 +1948,14 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 }
                 HSSFRow row = sheet.createRow(rowNum);
                 row.createCell(0).setCellValue(rowNum);
-                if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                if(wxCorpInfo!=null&&!isPrivateDeploy){
                     row.createCell(1).setCellValue("$userName="+(item.getCorpwxUserid()==null?" ":item.getCorpwxUserid())+"$");
                 }else {
                     row.createCell(1).setCellValue(item.getName());
                 }
                 row.createCell(2).setCellValue(item.getRoleName());
                 row.createCell(3).setCellValue(item.getPhone());
-                if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                if(wxCorpInfo!=null&&!isPrivateDeploy){
                     row.createCell(4).setCellValue("$departmentName="+(item.getCorpwxDeptid()==null?" ":item.getCorpwxDeptid())+"$");
                 }else {
                     row.createCell(4).setCellValue(item.getDepartmentName());
@@ -2002,7 +2002,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             workbook.write(fos);
             fos.flush();
             fos.close();
-            if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+            if(wxCorpInfo!=null&&!isPrivateDeploy){
                 String mediaId = wxCorpInfoService.getTranslationMediaId(fileUrlSuffix);
                 String jobId = wxCorpInfoService.syncTranslation(wxCorpInfo.getCorpid(),mediaId,fileUrlSuffix, null);
             /*if(jobId!=null&&!jobId.equals("")){
@@ -2203,7 +2203,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             for (User item : userList) {
                 HSSFRow row = sheet.createRow(rowNum);
                 row.createCell(0).setCellValue(rowNum);
-                if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                if(wxCorpInfo!=null&&!isPrivateDeploy){
                     row.createCell(1).setCellValue("$userName="+(item.getCorpwxUserid()==null?"":item.getCorpwxUserid())+"$");
                     row.createCell(2).setCellValue("$departmentName="+(item.getCorpwxDeptid()==null?"":item.getCorpwxDeptid())+"$");
                 }else {
@@ -2219,7 +2219,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             workbook.write(fos);
             fos.flush();
             fos.close();
-            if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+            if(wxCorpInfo!=null&&!isPrivateDeploy){
                 String mediaId = wxCorpInfoService.getTranslationMediaId(fileUrlSuffix);
                 String jobId = wxCorpInfoService.syncTranslation(wxCorpInfo.getCorpid(),mediaId,fileUrlSuffix, null);
             /*if(jobId!=null&&!jobId.equals("")){
@@ -2433,7 +2433,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 
         WxCorpInfo info = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", company.getId()));
         if (info != null) {
-            user.setUserNameNeedTranslate(info.getSaasSyncContact());
+//            user.setUserNameNeedTranslate(info.getSaasSyncContact());
         }
 
         UserVO userVO = new UserVO().setCompanyName(company.getCompanyName());
@@ -2523,7 +2523,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         Integer WXCompanyId = user.getCompanyId();
         WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", WXCompanyId));
         //当企业开启了微信通讯录的情况下
-        if (org.apache.commons.lang3.StringUtils.isNotBlank(keyword) && wxCorpInfo!=null && wxCorpInfo.getSaasSyncContact()==1){
+        if (org.apache.commons.lang3.StringUtils.isNotBlank(keyword) && wxCorpInfo!=null && !isPrivateDeploy){
             HashMap<String, List> result = wxCorpInfoService.getOpenId(wxCorpInfo.getCorpid(), keyword, cursor,1,200);
             HashMap<String, Object> msgResult = new HashMap<>();
             nextCursor = result.get("nextCursor").get(0).toString();
@@ -3118,7 +3118,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         executor.setExecutorColor(manager.getColor());
         executor.setExecutorName(manager.getName());
         taskExecutorMapper.insert(executor);
-        SysRole role = sysRoleMapper.selectOne(new QueryWrapper<SysRole>().eq("company_id", company.getId()).eq("rolename","普通员工"));
+        SysRole role = sysRoleMapper.selectOne(new QueryWrapper<SysRole>().eq("company_id", company.getId()).eq("rolename","组员"));
         List<JSONObject> deptArrays = ldapGetOU();
         for (JSONObject dept : deptArrays) {
             Department department=new Department();
@@ -3154,7 +3154,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                     .setName(user.getString("name"))
                     .setPhone(user.getString("userPrincipalName"))
                     .setId(SnowFlake.nextId()+"")
-                    .setRoleId(role.getId())//默认普通员工
+                    .setRoleId(role.getId())//默认组员
                     .setRoleName(role.getRolename())
                     .setCompanyId(company.getId())
                     .setColor(ColorUtil.randomColor())
@@ -3178,7 +3178,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     @Override
     public HttpRespMsg syncDeptWithAD(HttpServletRequest request) throws Exception {
         Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
-        SysRole role = sysRoleMapper.selectOne(new QueryWrapper<SysRole>().eq("company_id",companyId).eq("rolename","普通员工"));
+        SysRole role = sysRoleMapper.selectOne(new QueryWrapper<SysRole>().eq("company_id",companyId).eq("rolename","组员"));
         List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id",companyId));
         List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
         List<JSONObject> deptArrays = ldapGetOU();
@@ -3227,7 +3227,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                     .setName(user.getString("name"))
                     .setPhone(user.getString("userPrincipalName"))
                     .setId(SnowFlake.nextId()+"")
-                    .setRoleId(role.getId())//默认普通员工
+                    .setRoleId(role.getId())//默认组员
                     .setRoleName(role.getRolename())
                     .setCompanyId(companyId)
                     .setColor(ColorUtil.randomColor())

+ 2 - 2
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/task/TimingTask.java

@@ -648,7 +648,7 @@
 //            return;
 //        }
 //        for (Integer compId : compIds) {
-//            SysRole role = sysRoleMapper.selectOne(new QueryWrapper<SysRole>().eq("company_id",compId).eq("rolename","普通员工"));
+//            SysRole role = sysRoleMapper.selectOne(new QueryWrapper<SysRole>().eq("company_id",compId).eq("rolename","组员"));
 //            List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", compId));
 //            List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", compId));
 //            List<JSONObject> deptArrays = userService.ldapGetOU();
@@ -699,7 +699,7 @@
 //                        .setName(user.getString("name"))
 //                        .setPhone(user.getString("userPrincipalName"))
 //                        .setId(SnowFlake.nextId()+"")
-//                        .setRoleId(role.getId())//默认普通员工
+//                        .setRoleId(role.getId())//默认组员
 //                        .setRoleName(role.getRolename())
 //                        .setCompanyId(compId)
 //                        .setColor(ColorUtil.randomColor())

+ 3 - 2
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/WxCorpInfoMapper.xml

@@ -17,15 +17,16 @@
         <result column="auth_username" property="authUsername" />
         <result column="company_id" property="companyId" />
         <result column="agentid" property="agentid" />
+        <result column="agent_secret" property="agentSecret" />
         <result column="contact_secret" property="contactSecret" />
         <result column="contact_server" property="contactServer" />
-        <result column="saas_sync_contact" property="saasSyncContact" />
         <result column="auth_mode" property="authMode" />
+        <result column="saas_sync_contact" property="saasSyncContact" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        corpid, corp_name, corp_full_name, corp_scale, corp_industry, corp_sub_industry, location, access_token, expire_time, permanent_code, auth_username, company_id, agentid, contact_secret, contact_server, saas_sync_contact, auth_mode
+        corpid, corp_name, corp_full_name, corp_scale, corp_industry, corp_sub_industry, location, access_token, expire_time, permanent_code, auth_username, company_id, agentid, agent_secret, contact_secret, contact_server, auth_mode, saas_sync_contact
     </sql>
 
     <select id="getWxCompanyList" resultType="com.management.platform.entity.WxCorpInfo">

+ 2 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/.env.development

@@ -0,0 +1,2 @@
+NODE_ENV="development"
+VUE_APP_URL="http://192.168.5.184:10010"

+ 3 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/.env.production

@@ -0,0 +1,3 @@
+# 配置生产地址,就是你将来发布上线的地址
+NODE_ENV="production"
+VUE_APP_URL="http://192.168.5.184:10010"

+ 22 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/.gitignore

@@ -0,0 +1,22 @@
+.DS_Store
+node_modules
+/dist
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+.svn
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?

+ 49 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/README.bak.md

@@ -0,0 +1,49 @@
+# 知识体系
+
+#### 封装 axios
+
+1. 使用拦截器统一处理请求和响应数据
+2. 挂载到原型上
+
+#### 上拉加载更多
+
+1. vant 的组件
+2. 设置初始高度,不然 bug 很严重
+
+#### 懒加载
+
+1. 懒加载是什么
+2. 如何实现
+
+#### 环境配置
+
+1. 根目录新建 .env.development (测试环境) 文件
+
+   ```
+   VUE_APP_URL="http://132.232.87.95:3000/api"
+   ```
+
+   然后新建。env.production(生产环境)文件
+
+   ```
+   VUE_APP_URL="http://132.232.94.151:3000/api"
+   ```
+
+2. 配置 package.json
+
+   ```
+    "scripts": {
+       "serve": "vue-cli-service serve --model",
+       "build": "vue-cli-service build --model",
+       "lint": "vue-cli-service lint"
+     },
+   ```
+
+3. 项目中通过 process.env.VUE_APP_URL  访问 VUE_APP_URL 的值,不同的环境取到的值不一样
+
+#### 打包部署
+
+#### 移动端适配
+
+1. amfe-flexib 设置 root 元素字体大小
+2. pxtorem  px 转 rem

+ 140 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/README.md

@@ -0,0 +1,140 @@
+# vue 移动端模板
+
+#### 启动项目
+1. npm i 安装依赖
+1. npm run serve 启动项目
+1. cd server  (接口目录)
+1. npm i 
+1. npm run dev
+
+
+>#### 核心知识体系简介
+1. vue-cli3 脚手架
+    * 创建项目
+    * 开发环境和生产环境配置
+    * 配置跨域
+    
+2. vue-router 路由
+    * 路由配置
+    * 子路由配置
+    * 路由守卫,设置页面标题和根据登录状态判断是否允许进入特定页面
+    * 对router-link使用active-class,高亮当前路由
+    
+3. vuex 跨组件通信
+    * vuex 配置
+    * vuex 持久化
+    * vuex 使用
+    
+4. rem 移动端适配
+    * 通过 amfe-flexibe 设置 root 元素的字体大小
+    * 通过 pxtorem 把 px 转成 rem, 无需手动书写 rem
+    
+5. axios 配置
+    * 使用拦截器配置 baseURL 和给请求头加上 token
+    * 使用拦截器对返回的数据进行处理
+    * 挂载到 vue 原型上,方便使用
+    
+6. promise 使用
+    
+    * 在项目中使用 async await 把异步变成同步,编写和阅读更舒服
+    
+7. 有赞 vant-ui 库
+    * 导航栏
+    * 单元格
+    * loading
+    * ......
+    
+8. 使用keep-alive组件缓存某些组件(新增)
+
+9. 添加小型服务器接口,用来编写本项目所需接口
+
+    
+
+>####  vue-cli3 脚手架
+1. 具体操作,请移步[vue-cli3文档官网]( [https://cli.vuejs.org/zh/guide/installation.html](https://links.jianshu.com/go?to=https%3A%2F%2Fcli.vuejs.org%2Fzh%2Fguide%2Finstallation.html)
+)
+2. **开发环境和生产环境配置**
+  * 根目录新建两文件 .env.development => 开发环境配置  .env.production => 生产环境配置
+![image.png](https://upload-images.jianshu.io/upload_images/7177443-4f2c42f1c1bc4439.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+文件内容
+
+```
+// .env.development
+VUE_APP_URL="https://www.easy-mock.com/mock/5cd62747d3a84206275d58d1/huruqing/api"
+```
+
+```
+// .env.production
+VUE_APP_URL="https://www.easy-mock.com/mock/5cd62747d3a84206275d58d1/huruqing/api"
+```
+
+3. **package.json 配置**
+vue-cli3默认已经给你配置好了model, 开发环境对应development, 生产环境对应production,如果你不知道model,请移步[webpack文档官网]([https://www.webpackjs.com/](https://www.webpackjs.com/)
+)
+![image.png](https://upload-images.jianshu.io/upload_images/7177443-5e9e447da363cfca.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+4. 在你的项目中,通过  process.env.VUE_APP_URL 可以访问到你在环境配置文件中设置的变量
+![](https://upload-images.jianshu.io/upload_images/7177443-d585aa842e655950.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+![开发环境中的变量](https://upload-images.jianshu.io/upload_images/7177443-02325513adfb846f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+
+>####  vue-router 路由
+这里主要讲一下路由守卫的配置,先上图
+![路由配置](https://upload-images.jianshu.io/upload_images/7177443-5f45913a5d70bf4d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+下面是路由守卫配置
+![路由守卫](https://upload-images.jianshu.io/upload_images/7177443-a935a3506fd9f567.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+
+>####  vuex 跨组件通信
+1. 项目中有以下几个地方用到了 vuex
+    * 设置登录状态
+    * 设置用户名
+    * 保存 token
+2. 以登录为里,做个简单说明
+![](https://upload-images.jianshu.io/upload_images/7177443-825e2e816a49413b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+登录成功时,修改登陆状态为 true
+![image.png](https://upload-images.jianshu.io/upload_images/7177443-906c4cc3e5713830.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+退出登录时,修改登录状态为 false
+![](https://upload-images.jianshu.io/upload_images/7177443-1da2a2e9208c1872.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+4. 获取 store 中 state 设置的变量通过 mapGetters, 看图
+![](https://upload-images.jianshu.io/upload_images/7177443-61be719b7d9c8a43.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+![在模板中使用](https://upload-images.jianshu.io/upload_images/7177443-8b2c372f88a0f59e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+
+3. vuex 持久化
+    * 使用 vuex-persistedstate 插件对 vuex 的状态持久化
+    * 等你的页面刷新时,状态依然存在
+    * 本质上是这个插件帮你把状态都存到了 localStorage
+配置方法,以下是最简单的配置
+![](https://upload-images.jianshu.io/upload_images/7177443-0aa53dbad9057879.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+使用了 vuex-persistedstate 插件后,store 里的状态都存到了 localStorage
+![image.png](https://upload-images.jianshu.io/upload_images/7177443-9cf6e3db49baf726.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+
+>#### rem 移动端适配
+适配原理我就不多说了,不清楚请看我的另外一篇文章[用rem编写移动端自适应网页](https://www.jianshu.com/p/91ac1690be89)(https://www.jianshu.com/p/91ac1690be89),这里说一下在vue-cli3中是如何配置的
+1. 安装 amfe-flexible 插件 ```npm i amfe-flexible --save-dev```
+2. 在 main.js 中导入
+![ipone6](https://upload-images.jianshu.io/upload_images/7177443-05c1792eb5cfab79.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+3. 此时你的应用的 html 会自动根据手机的尺寸设置了 font-size, 如图
+![](https://upload-images.jianshu.io/upload_images/7177443-5ea467230b5426e0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+![](https://upload-images.jianshu.io/upload_images/7177443-ee3e3fda5ec57b39.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+4. 配置 pxtorem 插件,能帮你自动把 rem 转成 px, 具体配置如下,在项目根目录下的 vue.config.js(没有则新建)
+里进行配置,如图
+![](https://upload-images.jianshu.io/upload_images/7177443-2b6e79201971d86d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+
+>####  axios 配置
+1. axios 拦截器
+能帮我们对数据进行一些统一的处理,比如后台给我们的数据里都是把数据包在 data 对象里面,而使用 axios, 则又会再用 data 把返回的数据再包一层,如果不统一处理以下,用起来很不爽。
+2. 设置请求头,后台识别用户经常使用 token, 我们登陆的时候能拿到后台返回的 token, 然后存入 store 里,当我们发送请求时,我们可以给请求头统一加上 token, 如图
+![](https://upload-images.jianshu.io/upload_images/7177443-2a42eb0010cde4a1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+3. 把 axios 的实例挂载到 vue 的实例上
+![](https://upload-images.jianshu.io/upload_images/7177443-5163a952efbac676.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+发请求的时候,只需要使用 this.$axios.get 或者 this.$axios.post 就行了,是不是很方便
+![](https://upload-images.jianshu.io/upload_images/7177443-5a0bd9bbec047aa7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+
+>#### Promise 的使用
+promise 是个好东西,可以把异步变同步,在项目中使用 async await 编写代码,那叫一个爽,具体用法如下:
+![](https://upload-images.jianshu.io/upload_images/7177443-9f357fbd0a04215a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+
+>#### 有赞 vant-ui 库
+有赞是搞电商开发的,在公众号和小程序模板界算是做得比较不错的,vant-ui是他们开源出来的一个ui库,同时他们还有小程序的ui库,感兴趣的小伙伴可以去[看看](https://youzan.github.io/vant/)(https://youzan.github.io/vant/)
+
+>
+
+

+ 16 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/babel.config.js

@@ -0,0 +1,16 @@
+module.exports = {
+    plugins: [
+        [
+            "import",
+            {
+                libraryName: "vant",
+                libraryDirectory: "es",
+                // 指定样式路径
+                // style: name => `${name}/style/less`
+                style: true
+            },
+            "vant"
+        ],
+        ["@babel/plugin-syntax-dynamic-import"]
+    ]
+};

+ 1 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/build.bat

@@ -0,0 +1 @@
+npm run build

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 13193 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/package-lock.json


+ 63 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/package.json

@@ -0,0 +1,63 @@
+{
+  "name": "maizuo-h6",
+  "version": "0.1.0",
+  "private": true,
+  "scripts": {
+    "serve": "vue-cli-service serve --model",
+    "dev": "vue-cli-service serve --model",
+    "prod": "vue-cli-service serve --model production",
+    "build": "vue-cli-service build --model",
+    "push": "git add . && git commit -m'xxx' && git push",
+    "lint": "vue-cli-service lint"
+  },
+  "dependencies": {
+    "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+    "babel-plugin-import": "^1.13.3",
+    "core-js": "^2.6.12",
+    "css-loader": "^3.6.0",
+    "dingtalk-jsapi": "^2.13.42",
+    "echarts": "^4.9.0",
+    "font-awesome": "^4.7.0",
+    "jquery": "^3.6.1",
+    "pdfh5": "^1.4.2",
+    "style-loader": "^1.3.0",
+    "vue": "^2.6.12",
+    "vuex-persistedstate": "^2.7.1",
+    "weixin-js-sdk": "^1.6.0"
+  },
+  "devDependencies": {
+    "@vue/cli-plugin-babel": "^3.12.1",
+    "@vue/cli-plugin-eslint": "^3.12.1",
+    "@vue/cli-service": "^4.5.13",
+    "amfe-flexible": "^2.2.1",
+    "autoprefixer": "^9.8.6",
+    "axios": "^0.26.1",
+    "babel-eslint": "^10.1.0",
+    "eslint": "^5.16.0",
+    "eslint-plugin-vue": "^5.2.3",
+    "less": "^3.13.1",
+    "less-loader": "^5.0.0",
+    "postcss-loader": "^3.0.0",
+    "postcss-pxtorem": "^4.0.1",
+    "vant": "^2.12.18",
+    "vue-html5-editor": "^1.1.1",
+    "vue-router": "^3.5.1",
+    "vue-template-compiler": "^2.6.12",
+    "vuex": "^3.6.2"
+  },
+  "eslintConfig": {
+    "root": true,
+    "env": {
+      "node": true
+    },
+    "extends": [],
+    "rules": {},
+    "parserOptions": {
+      "parser": "babel-eslint"
+    }
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions"
+  ]
+}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/public/axios.min.js


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/public/favicon.ico


+ 84 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/public/index.html

@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <!-- <meta name="viewport" content="width=device-width,initial-scale=1.0"> -->
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
+    <link rel="shortcut icon" type="image/x-icon" href="./favicon.ico"/>
+    <title>车间生产管家</title>
+    <link rel="stylesheet" href="https://at.alicdn.com/t/font_1456778_1mgn5degp7t.css">
+    <!-- 引入企业微信js -->
+    <script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js" referrerpolicy="origin"></script>
+    <script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js" referrerpolicy="origin"></script>
+    <!-- 接入飞书 -->
+    <script type="text/javascript" src="https://lf1-cdn-tos.bytegoofy.com/goofy/lark/op/h5-js-sdk-1.5.16.js"></script>
+    <!-- <script src="https://s.url.cn/qqun/qun/qqweb/m/qun/confession/js/vconsole.min.js "></script> -->
+
+    <script>
+        // function IsPC() { 
+        //     var userAgentInfo = navigator.userAgent;
+        //     var Agents = ["Android", "iPhone",
+        //                 "SymbianOS", "Windows Phone",
+        //                 "iPad", "iPod"];
+        //     var flag = true;
+        //     for (var v = 0; v < Agents.length; v++) {
+        //         if (userAgentInfo.indexOf(Agents[v]) > 0) {
+        //             flag = false;
+        //             break;
+        //         }
+        //     }
+        //     return flag;
+        // }
+        // var urls = window.location.href
+
+        // // 尝试定向回去, 不行要删除
+        // if(urls.indexOf('jsapi/init') != '-1') {
+        //     location.href = urls.split('jsapi/init')[0]
+        // }
+        // // 尝试定向回去, 不行要删除
+
+        // var flag = IsPC(); //true为PC端,false为手机端
+        // if(flag) {
+        //     console.log('触发')
+        //     // 当前地址为车间生产管家移动端就跳转到车间生产管家官网
+        //     if(urls.indexOf('mobworktime.ttkuaiban') != '-1') {
+        //         location.href = 'https://worktime.ttkuaiban.com';
+        //     } else {
+        //         location.href = 'http://mldworktime.ttkuaiban.com:9097/';
+        //     }
+        // }
+    </script>
+    <style>
+        .dateSelectCell .van-cell__value{
+            -webkit-box-flex: 2;
+            -webkit-flex: 2;
+            flex: 2;
+        }
+        /* 清除浮动 */
+        .clearfix:after{
+            content: ""; 
+            display: block; 
+            height: 0; 
+            clear: both; 
+            visibility: hidden;  
+        }
+        .clearfix {
+            /* 触发 hasLayout */ 
+            zoom: 1; 
+        }
+        .popupSearch .van-search__content {
+            background-color: #FFFFFF !important;
+        }
+    </style>
+</head>
+
+<body>
+    <noscript>
+        <strong>非常抱歉,网页丢了</strong>
+    </noscript>
+    <div id="app"></div>
+    
+</body>
+
+</html>

+ 156 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/App.vue

@@ -0,0 +1,156 @@
+<template>
+    <div>
+        <keep-alive>
+            <router-view v-if="$route.meta.keepAlive"></router-view>
+        </keep-alive>
+        <router-view v-if="!$route.meta.keepAlive"></router-view>
+    </div>
+</template>
+
+<script>
+import $ from 'jquery'
+export default {
+    name: "app",
+    created() { },
+    mounted() {
+      let width=$("body").width();
+      console.log(width)
+      if(width>=1200){
+        let fontsize=width/1920*40;//fontsize为当前屏幕的基数字体,相对于设计稿计算得到的。
+        $("html").css("font-size",`${fontsize}px`)
+      }
+      if(width<=750){
+        let fontsize=width/400*40;
+        $("html").css("font-size",`${fontsize}px`)
+      }
+      //当加载页面的时候设置生效
+      window.onresize = () => {
+        return (() => {
+          let width=$("body").width();
+          if(width>=1200){
+            let fontsize=width/1920*40;
+            $("html").css("font-size",`${fontsize}px`)
+          }
+          if(width<=750){
+            let fontsize=width/400*40;
+            $("html").css("font-size",`${fontsize}px`)
+          }
+        })()
+      }
+    }
+};
+</script>
+
+<style>
+  .popupDiv {
+    background: #F4F4F4;
+    position: relative;
+    height: 100%;
+    width: 100%;
+    display: flex;
+    flex-direction: column;
+  }
+  .popupSearch {
+    width: 100%;
+  }
+  .popupCon {
+    width: 100%;
+    overflow: auto;
+    position: relative;
+  }
+  .paddingDiv {
+    box-sizing: border-box;
+    margin: 0 15px;
+  }
+  .popupTitle {
+    color: #333333;
+    padding: 0 30px;
+    position: relative;
+    line-height: 20px;
+  }
+  .popupTitle::after {
+    content: '';
+    width: 3px;
+    height: 100%;
+    border-radius: 3px;
+    background: #409eff;
+    position: absolute;
+    top: 0;
+    left: 15px;
+  }
+  .popupItem {
+    background: #FFFFFF;
+    padding: 10px 10px;
+    border-radius: 6px;
+    margin-top: 14px;
+    position: relative;
+  }
+  .marginTop {
+    margin-top: 15px;
+  }
+  .paddingTop {
+    padding-top: 10px;
+  }
+  .popupItem p {
+    width: 100%;
+    overflow: hidden;
+    white-space:nowrap;
+    text-overflow: ellipsis;
+    line-height: 22px;
+  }
+  .popupItemOne {
+    font-size: 15px;
+    color: #333;
+  }
+  .popupItemTwo {
+    font-size: 13px;
+    color: #999;
+    margin-top: 10px;
+  }
+  .popupItemIcon {
+    position: absolute;
+    right: 7px;
+    top: 50%;
+    font-size: 20px;
+    margin-top: -10px;
+    color: #999;
+  }
+
+  .popupConBox {
+    box-sizing: border-box;
+  }
+  .borderNone {
+    border-radius: 0;
+  }
+  .marginNone {
+    margin: 0 !important;
+  }
+  .popupBtn {
+    padding: 0 15px;
+    margin-top: 10px;
+    margin-bottom: 15px;
+  }
+  .conBorder {
+    width: auto !important;
+    margin: 0 15px;
+    border-radius: 10px;
+    box-sizing: border-box;
+  }
+  
+  .userNameClass_left {
+    display: inline-block;
+    width: 100px;
+  }
+  .userNameClass_right {
+    display: inline-block;
+    width: 150px;
+    float: right;
+    text-align: right;
+    overflow: hidden;
+    white-space:nowrap;
+    text-overflow: ellipsis;
+  }
+</style>
+
+
+

+ 33 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/app.js

@@ -0,0 +1,33 @@
+export function  initWxConfig(vm){
+    var url="/api" + "/wxcorp/getCorpWXConfig";
+    var curUrl=location.href.split("#")[0];
+    var user = JSON.parse(localStorage.userInfo);
+    var params="url="+curUrl+"&token="+user.id;
+    
+    
+    vm.$ajax.post(url,params).then(res=>{
+        var data=res.data;
+        wx.config({ 
+          beta: true,
+          debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
+          appId: data.appid, // 必填,公众号的唯一标识 
+          timestamp: data.timestamp, // 必填,生成签名的时间戳 
+          nonceStr: data.noncestr, // 必填,生成签名的随机串 
+          signature: data.signature, // 必填,签名,见附录1 
+          jsApiList: [
+              'chooseImage',
+              'previewImage',
+              'uploadImage',
+              'downloadImage',
+              'previewFile',
+              'getLocation',
+         ] 
+        });
+        wx.error(function (res) {
+            console.log("调用微信jsapi返回的状态:"+res.errMsg);
+        });
+    }).catch(function(error) {
+        //vm.errorToast(error,1000);
+        console.info(error);
+    })
+}

BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/icon/kefu.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/MovieDetails/1.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/MovieDetails/jz1.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/MovieDetails/jz2.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/MovieDetails/jz3.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/MovieDetails/jz4.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/MovieDetails/r1.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/MovieDetails/r2.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/MovieDetails/r3.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/MovieDetails/r4.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/MovieDetails/r5.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/alt.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/chong.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/cover/1.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/cover/2.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/cover/3.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/cover/4.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/cover/5.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/group/hb1.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/group/hb2.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/group/tx1.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/group/tx2.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/group/tx3.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/group/tx4.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/home/banner_1.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/home/banner_2.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/home/banner_3.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/home/check.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/home/edit.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/home/more.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/home/my.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/home/wait.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/index/banner4.jpeg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/index/banner_1.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/index/banner_2.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/index/banner_3.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/kf.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/login_logo.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/logo.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/not.jpeg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/null.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/orderList1.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/orderList2.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/beij.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/cl.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/dt.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/hb.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/head_back.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/p.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/qb.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/tg.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/tx.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/userHead.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/personal/yhk.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/poster/1.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/poster/2.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/poster/3.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/poster/4.jpg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/qwcode.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/qx.png


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/img/qxbj.png


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/shju.json


+ 363 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/style/common.less

@@ -0,0 +1,363 @@
+body {
+  background: #f4f4f4;
+  font-size: 16px !important;
+}
+
+.bd {
+  border: 1px solid;
+}
+
+.bdb {
+  border-bottom: 1px solid #ebebeb;
+}
+
+.ovh {
+  overflow: hidden;
+}
+
+.h100pc {
+  height: 100%;
+}
+
+.w100pc {
+  width: 100%;
+}
+
+.dsn {
+  display: none;
+}
+
+.fixed {
+  position: fixed;
+}
+
+.rel {
+  position: relative;
+}
+
+.abs {
+  position: absolute;
+}
+
+.tac {
+  text-align: center;
+}
+
+.lh15 {
+  line-height: 1.5;
+}
+
+/* 颜色 */
+.f999 {
+  color: #999;
+}
+
+.fff {
+  color: #ffffff;
+}
+
+.orange {
+  color: #ff5f16;
+}
+
+/* 背景颜色 */
+.bg-green {
+  background: green;
+}
+
+.bg-gray {
+  background: gray;
+}
+
+.bg-fff {
+  background: #ffffff;
+}
+
+/* 弹性盒子公共样式 */
+/* 排列方向-横向排列 */
+.flex {
+  display: flex;
+}
+
+/* 纵向排列 */
+.flex2 {
+  display: flex;
+  flex-direction: column;
+}
+
+/* 水平居中,垂直居中 */
+.fcc {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+
+/* 两端对齐 */
+.jc-sb {
+  justify-content: space-between;
+}
+
+/* 分散对齐 */
+.jc-sa {
+  justify-content: space-around;
+}
+
+/* 垂直居中 */
+.aic {
+  align-items: center;
+}
+
+/* 分配剩余空间 */
+.fg1 {
+  flex-grow: 1;
+}
+
+.fg2 {
+  flex-grow: 2;
+}
+
+
+/* 字体设置 */
+.f0 {
+  font-size: 0px
+}
+
+.f8 {
+  font-size: 8px
+}
+
+.f10 {
+  font-size: 10px
+}
+
+.f12 {
+  font-size: 12px
+}
+
+.f14 {
+  font-size: 14px
+}
+
+.f16 {
+  font-size: 16px
+}
+
+.f18 {
+  font-size: 18px
+}
+
+.f20 {
+  font-size: 20px
+}
+
+.f22 {
+  font-size: 22px
+}
+
+.f24 {
+  font-size: 24px
+}
+
+.f26 {
+  font-size: 26px
+}
+
+/* margin-top设置 */
+.mt-5 {
+  margin-top: 5px;
+}
+
+.mt-10 {
+  margin-top: 10px;
+}
+
+.mt-15 {
+  margin-top: 15px;
+}
+
+.mt-20 {
+  margin-top: 20px;
+}
+
+.mt-25 {
+  margin-top: 25px;
+}
+
+.mt-30 {
+  margin-top: 30px;
+}
+
+/* margin-bottom设置 */
+.mb-5 {
+  margin-bottom: 5px;
+}
+
+.mb-10 {
+  margin-bottom: 10px;
+}
+
+.mb-15 {
+  margin-bottom: 15px;
+}
+
+.mb-20 {
+  margin-bottom: 20px;
+}
+
+.mb-25 {
+  margin-bottom: 25px;
+}
+
+.mb-30 {
+  margin-bottom: 30px;
+}
+
+/* margin-left设置 */
+.ml-5 {
+  margin-left: 5px;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.ml-15 {
+  margin-left: 15px;
+}
+
+.ml-20 {
+  margin-left: 20px;
+}
+
+.ml-25 {
+  margin-left: 25px;
+}
+
+.ml-30 {
+  margin-left: 30px;
+}
+
+/* margin-right设置 */
+.mr-5 {
+  margin-right: 5px;
+}
+
+.mr-10 {
+  margin-right: 10px;
+}
+
+.mr-15 {
+  margin-right: 15px;
+}
+
+.mr-20 {
+  margin-right: 20px;
+}
+
+.mr-25 {
+  margin-right: 25px;
+}
+
+.mr-30 {
+  margin-right: 30px;
+}
+
+/* padding-top设置 */
+.pt-5 {
+  padding-top: 5px;
+}
+
+.pt-10 {
+  padding-top: 10px;
+}
+
+.pt-15 {
+  padding-top: 15px;
+}
+
+.pt-20 {
+  padding-top: 20px;
+}
+
+.pt-25 {
+  padding-top: 25px;
+}
+
+.pt-30 {
+  padding-top: 30px;
+}
+
+/* padding-bottom设置 */
+.pb-5 {
+  padding-bottom: 5px;
+}
+
+.pb-10 {
+  padding-bottom: 10px;
+}
+
+.pb-15 {
+  padding-bottom: 15px;
+}
+
+.pb-20 {
+  padding-bottom: 20px;
+}
+
+.pb-25 {
+  padding-bottom: 25px;
+}
+
+.pb-30 {
+  padding-bottom: 30px;
+}
+
+/* padding-left设置 */
+.pl-5 {
+  padding-left: 5px;
+}
+
+.pl-10 {
+  padding-left: 10px;
+}
+
+.pl-15 {
+  padding-left: 15px;
+}
+
+.pl-20 {
+  padding-left: 20px;
+}
+
+.pl-25 {
+  padding-left: 25px;
+}
+
+.pl-30 {
+  padding-left: 30px;
+}
+
+/* padding-right设置 */
+.pr-5 {
+  padding-right: 5px;
+}
+
+.pr-10 {
+  padding-right: 10px;
+}
+
+.pr-15 {
+  padding-right: 15px;
+}
+
+.pr-20 {
+  padding-right: 20px;
+}
+
+.pr-25 {
+  padding-right: 25px;
+}
+
+.pr-30 {
+  padding-right: 30px;
+}

+ 539 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/style/font/demo.css

@@ -0,0 +1,539 @@
+/* Logo 字体 */
+@font-face {
+  font-family: "iconfont logo";
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
+}
+
+.logo {
+  font-family: "iconfont logo";
+  font-size: 160px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+/* tabs */
+.nav-tabs {
+  position: relative;
+}
+
+.nav-tabs .nav-more {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  height: 42px;
+  line-height: 42px;
+  color: #666;
+}
+
+#tabs {
+  border-bottom: 1px solid #eee;
+}
+
+#tabs li {
+  cursor: pointer;
+  width: 100px;
+  height: 40px;
+  line-height: 40px;
+  text-align: center;
+  font-size: 16px;
+  border-bottom: 2px solid transparent;
+  position: relative;
+  z-index: 1;
+  margin-bottom: -1px;
+  color: #666;
+}
+
+
+#tabs .active {
+  border-bottom-color: #f00;
+  color: #222;
+}
+
+.tab-container .content {
+  display: none;
+}
+
+/* 页面布局 */
+.main {
+  padding: 30px 100px;
+  width: 960px;
+  margin: 0 auto;
+}
+
+.main .logo {
+  color: #333;
+  text-align: left;
+  margin-bottom: 30px;
+  line-height: 1;
+  height: 110px;
+  margin-top: -50px;
+  overflow: hidden;
+  *zoom: 1;
+}
+
+.main .logo a {
+  font-size: 160px;
+  color: #333;
+}
+
+.helps {
+  margin-top: 40px;
+}
+
+.helps pre {
+  padding: 20px;
+  margin: 10px 0;
+  border: solid 1px #e7e1cd;
+  background-color: #fffdef;
+  overflow: auto;
+}
+
+.icon_lists {
+  width: 100% !important;
+  overflow: hidden;
+  *zoom: 1;
+}
+
+.icon_lists li {
+  width: 100px;
+  margin-bottom: 10px;
+  margin-right: 20px;
+  text-align: center;
+  list-style: none !important;
+  cursor: default;
+}
+
+.icon_lists li .code-name {
+  line-height: 1.2;
+}
+
+.icon_lists .icon {
+  display: block;
+  height: 100px;
+  line-height: 100px;
+  font-size: 42px;
+  margin: 10px auto;
+  color: #333;
+  -webkit-transition: font-size 0.25s linear, width 0.25s linear;
+  -moz-transition: font-size 0.25s linear, width 0.25s linear;
+  transition: font-size 0.25s linear, width 0.25s linear;
+}
+
+.icon_lists .icon:hover {
+  font-size: 100px;
+}
+
+.icon_lists .svg-icon {
+  /* 通过设置 font-size 来改变图标大小 */
+  width: 1em;
+  /* 图标和文字相邻时,垂直对齐 */
+  vertical-align: -0.15em;
+  /* 通过设置 color 来改变 SVG 的颜色/fill */
+  fill: currentColor;
+  /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
+      normalize.css 中也包含这行 */
+  overflow: hidden;
+}
+
+.icon_lists li .name,
+.icon_lists li .code-name {
+  color: #666;
+}
+
+/* markdown 样式 */
+.markdown {
+  color: #666;
+  font-size: 14px;
+  line-height: 1.8;
+}
+
+.highlight {
+  line-height: 1.5;
+}
+
+.markdown img {
+  vertical-align: middle;
+  max-width: 100%;
+}
+
+.markdown h1 {
+  color: #404040;
+  font-weight: 500;
+  line-height: 40px;
+  margin-bottom: 24px;
+}
+
+.markdown h2,
+.markdown h3,
+.markdown h4,
+.markdown h5,
+.markdown h6 {
+  color: #404040;
+  margin: 1.6em 0 0.6em 0;
+  font-weight: 500;
+  clear: both;
+}
+
+.markdown h1 {
+  font-size: 28px;
+}
+
+.markdown h2 {
+  font-size: 22px;
+}
+
+.markdown h3 {
+  font-size: 16px;
+}
+
+.markdown h4 {
+  font-size: 14px;
+}
+
+.markdown h5 {
+  font-size: 12px;
+}
+
+.markdown h6 {
+  font-size: 12px;
+}
+
+.markdown hr {
+  height: 1px;
+  border: 0;
+  background: #e9e9e9;
+  margin: 16px 0;
+  clear: both;
+}
+
+.markdown p {
+  margin: 1em 0;
+}
+
+.markdown>p,
+.markdown>blockquote,
+.markdown>.highlight,
+.markdown>ol,
+.markdown>ul {
+  width: 80%;
+}
+
+.markdown ul>li {
+  list-style: circle;
+}
+
+.markdown>ul li,
+.markdown blockquote ul>li {
+  margin-left: 20px;
+  padding-left: 4px;
+}
+
+.markdown>ul li p,
+.markdown>ol li p {
+  margin: 0.6em 0;
+}
+
+.markdown ol>li {
+  list-style: decimal;
+}
+
+.markdown>ol li,
+.markdown blockquote ol>li {
+  margin-left: 20px;
+  padding-left: 4px;
+}
+
+.markdown code {
+  margin: 0 3px;
+  padding: 0 5px;
+  background: #eee;
+  border-radius: 3px;
+}
+
+.markdown strong,
+.markdown b {
+  font-weight: 600;
+}
+
+.markdown>table {
+  border-collapse: collapse;
+  border-spacing: 0px;
+  empty-cells: show;
+  border: 1px solid #e9e9e9;
+  width: 95%;
+  margin-bottom: 24px;
+}
+
+.markdown>table th {
+  white-space: nowrap;
+  color: #333;
+  font-weight: 600;
+}
+
+.markdown>table th,
+.markdown>table td {
+  border: 1px solid #e9e9e9;
+  padding: 8px 16px;
+  text-align: left;
+}
+
+.markdown>table th {
+  background: #F7F7F7;
+}
+
+.markdown blockquote {
+  font-size: 90%;
+  color: #999;
+  border-left: 4px solid #e9e9e9;
+  padding-left: 0.8em;
+  margin: 1em 0;
+}
+
+.markdown blockquote p {
+  margin: 0;
+}
+
+.markdown .anchor {
+  opacity: 0;
+  transition: opacity 0.3s ease;
+  margin-left: 8px;
+}
+
+.markdown .waiting {
+  color: #ccc;
+}
+
+.markdown h1:hover .anchor,
+.markdown h2:hover .anchor,
+.markdown h3:hover .anchor,
+.markdown h4:hover .anchor,
+.markdown h5:hover .anchor,
+.markdown h6:hover .anchor {
+  opacity: 1;
+  display: inline-block;
+}
+
+.markdown>br,
+.markdown>p>br {
+  clear: both;
+}
+
+
+.hljs {
+  display: block;
+  background: white;
+  padding: 0.5em;
+  color: #333333;
+  overflow-x: auto;
+}
+
+.hljs-comment,
+.hljs-meta {
+  color: #969896;
+}
+
+.hljs-string,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-strong,
+.hljs-emphasis,
+.hljs-quote {
+  color: #df5000;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-type {
+  color: #a71d5d;
+}
+
+.hljs-literal,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-attribute {
+  color: #0086b3;
+}
+
+.hljs-section,
+.hljs-name {
+  color: #63a35c;
+}
+
+.hljs-tag {
+  color: #333333;
+}
+
+.hljs-title,
+.hljs-attr,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+  color: #795da3;
+}
+
+.hljs-addition {
+  color: #55a532;
+  background-color: #eaffea;
+}
+
+.hljs-deletion {
+  color: #bd2c00;
+  background-color: #ffecec;
+}
+
+.hljs-link {
+  text-decoration: underline;
+}
+
+/* 代码高亮 */
+/* PrismJS 1.15.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+code[class*="language-"],
+pre[class*="language-"] {
+  color: black;
+  background: none;
+  text-shadow: 0 1px white;
+  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+  text-align: left;
+  white-space: pre;
+  word-spacing: normal;
+  word-break: normal;
+  word-wrap: normal;
+  line-height: 1.5;
+
+  -moz-tab-size: 4;
+  -o-tab-size: 4;
+  tab-size: 4;
+
+  -webkit-hyphens: none;
+  -moz-hyphens: none;
+  -ms-hyphens: none;
+  hyphens: none;
+}
+
+pre[class*="language-"]::-moz-selection,
+pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection,
+code[class*="language-"] ::-moz-selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+pre[class*="language-"]::selection,
+pre[class*="language-"] ::selection,
+code[class*="language-"]::selection,
+code[class*="language-"] ::selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+@media print {
+
+  code[class*="language-"],
+  pre[class*="language-"] {
+    text-shadow: none;
+  }
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+  padding: 1em;
+  margin: .5em 0;
+  overflow: auto;
+}
+
+:not(pre)>code[class*="language-"],
+pre[class*="language-"] {
+  background: #f5f2f0;
+}
+
+/* Inline code */
+:not(pre)>code[class*="language-"] {
+  padding: .1em;
+  border-radius: .3em;
+  white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+  color: slategray;
+}
+
+.token.punctuation {
+  color: #999;
+}
+
+.namespace {
+  opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+  color: #905;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+  color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+  color: #9a6e3a;
+  background: hsla(0, 0%, 100%, .5);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+  color: #07a;
+}
+
+.token.function,
+.token.class-name {
+  color: #DD4A68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+  color: #e90;
+}
+
+.token.important,
+.token.bold {
+  font-weight: bold;
+}
+
+.token.italic {
+  font-style: italic;
+}
+
+.token.entity {
+  cursor: help;
+}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1706 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/style/font/demo_index.html


+ 279 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/style/font/iconfont.css

@@ -0,0 +1,279 @@
+@font-face {
+  font-family: "iconfont"; /* Project id 2390497 */
+  src: url('iconfont.woff2?t=1653388410123') format('woff2'),
+       url('iconfont.woff?t=1653388410123') format('woff'),
+       url('iconfont.ttf?t=1653388410123') format('truetype');
+}
+
+.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.firerock-icondakajilu:before {
+  content: "\e6e1";
+}
+
+.firerock-iconguanlian:before {
+  content: "\e674";
+}
+
+.firerock-iconusers:before {
+  content: "\e70a";
+}
+
+.firerock-iconquanxian1:before {
+  content: "\e615";
+}
+
+.firerock-iconxitong-:before {
+  content: "\e616";
+}
+
+.firerock-iconkehu:before {
+  content: "\e67e";
+}
+
+.firerock-iconwj-qjd:before {
+  content: "\e70e";
+}
+
+.firerock-icondaibanshixiang:before {
+  content: "\ec4e";
+}
+
+.firerock-icondaiban:before {
+  content: "\e64b";
+}
+
+.firerock-icongongshitongji:before {
+  content: "\e614";
+}
+
+.firerock-iconshenhetongguo:before {
+  content: "\e6a0";
+}
+
+.firerock-iconshenhebohui:before {
+  content: "\e6c6";
+}
+
+.firerock-icondaibandengdaishenhe:before {
+  content: "\e612";
+}
+
+.firerock-iconjianzhugongchenglei:before {
+  content: "\e61e";
+}
+
+.firerock-icongantetu:before {
+  content: "\e6a1";
+}
+
+.firerock-iconkehuguanli:before {
+  content: "\e60f";
+}
+
+.firerock-iconliucheng:before {
+  content: "\e634";
+}
+
+.firerock-iconright:before {
+  content: "\e60e";
+}
+
+.firerock-iconApp_New_Line:before {
+  content: "\e6e3";
+}
+
+.firerock-icon0:before {
+  content: "\e609";
+}
+
+.firerock-iconInsertLine:before {
+  content: "\e61d";
+}
+
+.firerock-iconmima:before {
+  content: "\e611";
+}
+
+.firerock-iconmima1:before {
+  content: "\e608";
+}
+
+.firerock-iconyanzhengma:before {
+  content: "\e60d";
+}
+
+.firerock-icondot:before {
+  content: "\e60b";
+}
+
+.firerock-icondot2:before {
+  content: "\e607";
+}
+
+.firerock-iconbaobiao:before {
+  content: "\e636";
+}
+
+.firerock-iconzuzhijiagou1:before {
+  content: "\e698";
+}
+
+.firerock-icontianbao1:before {
+  content: "\e60a";
+}
+
+.firerock-iconzuzhijiagou:before {
+  content: "\e606";
+}
+
+.firerock-iconzuzhijiegou:before {
+  content: "\e670";
+}
+
+.firerock-iconquanxian:before {
+  content: "\e663";
+}
+
+.firerock-iconbaoxiao:before {
+  content: "\e788";
+}
+
+.firerock-iconbaoxiaodan:before {
+  content: "\e644";
+}
+
+.firerock-icontianbao:before {
+  content: "\e726";
+}
+
+.firerock-iconrecord:before {
+  content: "\e605";
+}
+
+.firerock-icondaoru:before {
+  content: "\e613";
+}
+
+.firerock-icondaochu:before {
+  content: "\e6ab";
+}
+
+.firerock-iconexport:before {
+  content: "\e72d";
+}
+
+.firerock-iconqidong:before {
+  content: "\e63c";
+}
+
+.firerock-iconwancheng:before {
+  content: "\e610";
+}
+
+.firerock-iconcaidan:before {
+  content: "\e6b7";
+}
+
+.firerock-iconshenhe:before {
+  content: "\e604";
+}
+
+.firerock-iconicon-:before {
+  content: "\e6ad";
+}
+
+.firerock-iconrenwu:before {
+  content: "\e64c";
+}
+
+.firerock-iconfengxian:before {
+  content: "\e6a2";
+}
+
+.firerock-iconnormal-ico-ok:before {
+  content: "\e70f";
+}
+
+.firerock-iconicon2:before {
+  content: "\e603";
+}
+
+.firerock-iconfile:before {
+  content: "\e60c";
+}
+
+.firerock-iconex:before {
+  content: "\e65c";
+}
+
+.firerock-iconZip:before {
+  content: "\e9ec";
+}
+
+.firerock-iconJPG:before {
+  content: "\e6ed";
+}
+
+.firerock-iconaudio:before {
+  content: "\e602";
+}
+
+.firerock-icontxt:before {
+  content: "\e741";
+}
+
+.firerock-iconvideo:before {
+  content: "\e771";
+}
+
+.firerock-iconPDF:before {
+  content: "\e61a";
+}
+
+.firerock-iconword:before {
+  content: "\eecf";
+}
+
+.firerock-iconshangchuan:before {
+  content: "\e6fd";
+}
+
+.firerock-iconmiaobiao:before {
+  content: "\ecfa";
+}
+
+.firerock-icontask:before {
+  content: "\e600";
+}
+
+.firerock-iconmeditor-time:before {
+  content: "\e601";
+}
+
+.firerock-icontree:before {
+  content: "\e691";
+}
+
+.firerock-icontongji:before {
+  content: "\e631";
+}
+
+.firerock-iconxiangmu:before {
+  content: "\e617";
+}
+
+.firerock-iconcaiwu:before {
+  content: "\e89c";
+}
+
+.firerock-iconsetting:before {
+  content: "\e672";
+}
+

BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/style/font/iconfont.eot


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/style/font/iconfont.js


+ 471 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/style/font/iconfont.json

@@ -0,0 +1,471 @@
+{
+  "id": "2390497",
+  "name": "seyaproject",
+  "font_family": "iconfont",
+  "css_prefix_text": "firerock-icon",
+  "description": "",
+  "glyphs": [
+    {
+      "icon_id": "15673407",
+      "name": "打卡记录",
+      "font_class": "dakajilu",
+      "unicode": "e6e1",
+      "unicode_decimal": 59105
+    },
+    {
+      "icon_id": "5651484",
+      "name": "关联",
+      "font_class": "guanlian",
+      "unicode": "e674",
+      "unicode_decimal": 58996
+    },
+    {
+      "icon_id": "14949575",
+      "name": "users",
+      "font_class": "users",
+      "unicode": "e70a",
+      "unicode_decimal": 59146
+    },
+    {
+      "icon_id": "736503",
+      "name": "权限",
+      "font_class": "quanxian1",
+      "unicode": "e615",
+      "unicode_decimal": 58901
+    },
+    {
+      "icon_id": "7987507",
+      "name": "系统",
+      "font_class": "xitong-",
+      "unicode": "e616",
+      "unicode_decimal": 58902
+    },
+    {
+      "icon_id": "11111002",
+      "name": "客户",
+      "font_class": "kehu",
+      "unicode": "e67e",
+      "unicode_decimal": 59006
+    },
+    {
+      "icon_id": "6517457",
+      "name": "文件-请假单",
+      "font_class": "wj-qjd",
+      "unicode": "e70e",
+      "unicode_decimal": 59150
+    },
+    {
+      "icon_id": "5961300",
+      "name": "待办事项",
+      "font_class": "daibanshixiang",
+      "unicode": "ec4e",
+      "unicode_decimal": 60494
+    },
+    {
+      "icon_id": "11465003",
+      "name": "待办",
+      "font_class": "daiban",
+      "unicode": "e64b",
+      "unicode_decimal": 58955
+    },
+    {
+      "icon_id": "6023953",
+      "name": "工时统计",
+      "font_class": "gongshitongji",
+      "unicode": "e614",
+      "unicode_decimal": 58900
+    },
+    {
+      "icon_id": "2318254",
+      "name": "审核通过",
+      "font_class": "shenhetongguo",
+      "unicode": "e6a0",
+      "unicode_decimal": 59040
+    },
+    {
+      "icon_id": "9144552",
+      "name": "审核驳回",
+      "font_class": "shenhebohui",
+      "unicode": "e6c6",
+      "unicode_decimal": 59078
+    },
+    {
+      "icon_id": "17483402",
+      "name": "待办  等待 审核",
+      "font_class": "daibandengdaishenhe",
+      "unicode": "e612",
+      "unicode_decimal": 58898
+    },
+    {
+      "icon_id": "5149104",
+      "name": "建筑工程类",
+      "font_class": "jianzhugongchenglei",
+      "unicode": "e61e",
+      "unicode_decimal": 58910
+    },
+    {
+      "icon_id": "16187171",
+      "name": "甘特图",
+      "font_class": "gantetu",
+      "unicode": "e6a1",
+      "unicode_decimal": 59041
+    },
+    {
+      "icon_id": "3686260",
+      "name": "客户管理",
+      "font_class": "kehuguanli",
+      "unicode": "e60f",
+      "unicode_decimal": 58895
+    },
+    {
+      "icon_id": "1868952",
+      "name": "流程",
+      "font_class": "liucheng",
+      "unicode": "e634",
+      "unicode_decimal": 58932
+    },
+    {
+      "icon_id": "9651039",
+      "name": "长箭头",
+      "font_class": "right",
+      "unicode": "e60e",
+      "unicode_decimal": 58894
+    },
+    {
+      "icon_id": "17223736",
+      "name": "App_New_Line",
+      "font_class": "App_New_Line",
+      "unicode": "e6e3",
+      "unicode_decimal": 59107
+    },
+    {
+      "icon_id": "261001",
+      "name": "line",
+      "font_class": "0",
+      "unicode": "e609",
+      "unicode_decimal": 58889
+    },
+    {
+      "icon_id": "17197893",
+      "name": "Insert Line",
+      "font_class": "InsertLine",
+      "unicode": "e61d",
+      "unicode_decimal": 58909
+    },
+    {
+      "icon_id": "19410111",
+      "name": "密 码",
+      "font_class": "mima",
+      "unicode": "e611",
+      "unicode_decimal": 58897
+    },
+    {
+      "icon_id": "16842350",
+      "name": "密 码",
+      "font_class": "mima1",
+      "unicode": "e608",
+      "unicode_decimal": 58888
+    },
+    {
+      "icon_id": "20915138",
+      "name": "验证码",
+      "font_class": "yanzhengma",
+      "unicode": "e60d",
+      "unicode_decimal": 58893
+    },
+    {
+      "icon_id": "11640993",
+      "name": "dot",
+      "font_class": "dot",
+      "unicode": "e60b",
+      "unicode_decimal": 58891
+    },
+    {
+      "icon_id": "9382963",
+      "name": "dot",
+      "font_class": "dot2",
+      "unicode": "e607",
+      "unicode_decimal": 58887
+    },
+    {
+      "icon_id": "7171606",
+      "name": "报表管理",
+      "font_class": "baobiao",
+      "unicode": "e636",
+      "unicode_decimal": 58934
+    },
+    {
+      "icon_id": "4426098",
+      "name": "组织架构",
+      "font_class": "zuzhijiagou1",
+      "unicode": "e698",
+      "unicode_decimal": 59032
+    },
+    {
+      "icon_id": "13100227",
+      "name": "填报",
+      "font_class": "tianbao1",
+      "unicode": "e60a",
+      "unicode_decimal": 58890
+    },
+    {
+      "icon_id": "4469651",
+      "name": "组织架构",
+      "font_class": "zuzhijiagou",
+      "unicode": "e606",
+      "unicode_decimal": 58886
+    },
+    {
+      "icon_id": "4231111",
+      "name": "组织结构",
+      "font_class": "zuzhijiegou",
+      "unicode": "e670",
+      "unicode_decimal": 58992
+    },
+    {
+      "icon_id": "12860884",
+      "name": "权限",
+      "font_class": "quanxian",
+      "unicode": "e663",
+      "unicode_decimal": 58979
+    },
+    {
+      "icon_id": "2101853",
+      "name": "报销",
+      "font_class": "baoxiao",
+      "unicode": "e788",
+      "unicode_decimal": 59272
+    },
+    {
+      "icon_id": "5207594",
+      "name": "报销单",
+      "font_class": "baoxiaodan",
+      "unicode": "e644",
+      "unicode_decimal": 58948
+    },
+    {
+      "icon_id": "19236386",
+      "name": "填报",
+      "font_class": "tianbao",
+      "unicode": "e726",
+      "unicode_decimal": 59174
+    },
+    {
+      "icon_id": "12000587",
+      "name": "记录",
+      "font_class": "record",
+      "unicode": "e605",
+      "unicode_decimal": 58885
+    },
+    {
+      "icon_id": "20147073",
+      "name": "导入",
+      "font_class": "daoru",
+      "unicode": "e613",
+      "unicode_decimal": 58899
+    },
+    {
+      "icon_id": "20154661",
+      "name": "导出",
+      "font_class": "daochu",
+      "unicode": "e6ab",
+      "unicode_decimal": 59051
+    },
+    {
+      "icon_id": "19441448",
+      "name": "export",
+      "font_class": "export",
+      "unicode": "e72d",
+      "unicode_decimal": 59181
+    },
+    {
+      "icon_id": "8796451",
+      "name": "启动",
+      "font_class": "qidong",
+      "unicode": "e63c",
+      "unicode_decimal": 58940
+    },
+    {
+      "icon_id": "19037188",
+      "name": "完 成 ",
+      "font_class": "wancheng",
+      "unicode": "e610",
+      "unicode_decimal": 58896
+    },
+    {
+      "icon_id": "20134686",
+      "name": "菜单",
+      "font_class": "caidan",
+      "unicode": "e6b7",
+      "unicode_decimal": 59063
+    },
+    {
+      "icon_id": "8524192",
+      "name": "审核",
+      "font_class": "shenhe",
+      "unicode": "e604",
+      "unicode_decimal": 58884
+    },
+    {
+      "icon_id": "3590688",
+      "name": "里程碑",
+      "font_class": "icon-",
+      "unicode": "e6ad",
+      "unicode_decimal": 59053
+    },
+    {
+      "icon_id": "5112963",
+      "name": "任务",
+      "font_class": "renwu",
+      "unicode": "e64c",
+      "unicode_decimal": 58956
+    },
+    {
+      "icon_id": "10368440",
+      "name": "风险",
+      "font_class": "fengxian",
+      "unicode": "e6a2",
+      "unicode_decimal": 59042
+    },
+    {
+      "icon_id": "17156568",
+      "name": "ok",
+      "font_class": "normal-ico-ok",
+      "unicode": "e70f",
+      "unicode_decimal": 59151
+    },
+    {
+      "icon_id": "1161198",
+      "name": "棱形",
+      "font_class": "icon2",
+      "unicode": "e603",
+      "unicode_decimal": 58883
+    },
+    {
+      "icon_id": "10202911",
+      "name": "file",
+      "font_class": "file",
+      "unicode": "e60c",
+      "unicode_decimal": 58892
+    },
+    {
+      "icon_id": "2078615",
+      "name": "excel",
+      "font_class": "ex",
+      "unicode": "e65c",
+      "unicode_decimal": 58972
+    },
+    {
+      "icon_id": "4073514",
+      "name": "Zip",
+      "font_class": "Zip",
+      "unicode": "e9ec",
+      "unicode_decimal": 59884
+    },
+    {
+      "icon_id": "4863362",
+      "name": "JPG",
+      "font_class": "JPG",
+      "unicode": "e6ed",
+      "unicode_decimal": 59117
+    },
+    {
+      "icon_id": "5173010",
+      "name": "audio",
+      "font_class": "audio",
+      "unicode": "e602",
+      "unicode_decimal": 58882
+    },
+    {
+      "icon_id": "8469709",
+      "name": "txt",
+      "font_class": "txt",
+      "unicode": "e741",
+      "unicode_decimal": 59201
+    },
+    {
+      "icon_id": "19705514",
+      "name": "video",
+      "font_class": "video",
+      "unicode": "e771",
+      "unicode_decimal": 59249
+    },
+    {
+      "icon_id": "20213818",
+      "name": "PDF",
+      "font_class": "PDF",
+      "unicode": "e61a",
+      "unicode_decimal": 58906
+    },
+    {
+      "icon_id": "20651005",
+      "name": "word",
+      "font_class": "word",
+      "unicode": "eecf",
+      "unicode_decimal": 61135
+    },
+    {
+      "icon_id": "17781647",
+      "name": "上 传",
+      "font_class": "shangchuan",
+      "unicode": "e6fd",
+      "unicode_decimal": 59133
+    },
+    {
+      "icon_id": "7337849",
+      "name": "秒表",
+      "font_class": "miaobiao",
+      "unicode": "ecfa",
+      "unicode_decimal": 60666
+    },
+    {
+      "icon_id": "8659928",
+      "name": "task",
+      "font_class": "task",
+      "unicode": "e600",
+      "unicode_decimal": 58880
+    },
+    {
+      "icon_id": "13530978",
+      "name": "time",
+      "font_class": "meditor-time",
+      "unicode": "e601",
+      "unicode_decimal": 58881
+    },
+    {
+      "icon_id": "9339879",
+      "name": "tree",
+      "font_class": "tree",
+      "unicode": "e691",
+      "unicode_decimal": 59025
+    },
+    {
+      "icon_id": "807967",
+      "name": "统计",
+      "font_class": "tongji",
+      "unicode": "e631",
+      "unicode_decimal": 58929
+    },
+    {
+      "icon_id": "1778691",
+      "name": "项目",
+      "font_class": "xiangmu",
+      "unicode": "e617",
+      "unicode_decimal": 58903
+    },
+    {
+      "icon_id": "14417643",
+      "name": "财务",
+      "font_class": "caiwu",
+      "unicode": "e89c",
+      "unicode_decimal": 59548
+    },
+    {
+      "icon_id": "11673579",
+      "name": "setting",
+      "font_class": "setting",
+      "unicode": "e672",
+      "unicode_decimal": 58994
+    }
+  ]
+}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 92 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/style/font/iconfont.svg


BIN
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/style/font/iconfont.ttf


+ 0 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/assets/style/font/iconfont.woff


Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác