Ver código fonte

调整日报页面样式,增加角色

seyason 4 anos atrás
pai
commit
f58516f111
54 arquivos alterados com 1245 adições e 236 exclusões
  1. 3 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  2. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/SysFunctionController.java
  3. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/SysModuleController.java
  4. 50 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/SysRoleController.java
  5. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/SysRoleFunctionController.java
  6. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/SysRoleModuleController.java
  7. 72 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/SysFunction.java
  8. 86 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/SysModule.java
  9. 57 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/SysRole.java
  10. 44 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/SysRoleFunction.java
  11. 44 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/SysRoleModule.java
  12. 15 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/User.java
  13. 10 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/UserVO.java
  14. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/SysFunctionMapper.java
  15. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/SysModuleMapper.java
  16. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/SysRoleFunctionMapper.java
  17. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/SysRoleMapper.java
  18. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/SysRoleModuleMapper.java
  19. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/SysFunctionService.java
  20. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/SysModuleService.java
  21. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/SysRoleFunctionService.java
  22. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/SysRoleModuleService.java
  23. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/SysRoleService.java
  24. 4 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  25. 25 13
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  26. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/SysFunctionServiceImpl.java
  27. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/SysModuleServiceImpl.java
  28. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/SysRoleFunctionServiceImpl.java
  29. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/SysRoleModuleServiceImpl.java
  30. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/SysRoleServiceImpl.java
  31. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/SysFunctionMapper.xml
  32. 23 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/SysModuleMapper.xml
  33. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/SysRoleFunctionMapper.xml
  34. 18 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/SysRoleMapper.xml
  35. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/SysRoleModuleMapper.xml
  36. 3 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserMapper.xml
  37. 26 3
      fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/demo_index.html
  38. 7 3
      fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.css
  39. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.js
  40. 7 0
      fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.json
  41. BIN
      fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.ttf
  42. BIN
      fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.woff
  43. BIN
      fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.woff2
  44. 47 25
      fhKeeper/formulahousekeeper/timesheet/src/main.js
  45. 28 145
      fhKeeper/formulahousekeeper/timesheet/src/routes.js
  46. 11 1
      fhKeeper/formulahousekeeper/timesheet/src/views/Login.vue
  47. 7 7
      fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue
  48. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue
  49. 184 0
      fhKeeper/formulahousekeeper/timesheet/src/views/role/role.vue
  50. 28 5
      fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue
  51. 15 13
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue
  52. 24 11
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue
  53. 4 1
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/project/index.vue
  54. 4 2
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/review/index.vue

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

@@ -91,6 +91,9 @@ public class ReportController {
         List<Report> reportList = new ArrayList<>();
         String token = request.getHeader("Token");
         BigDecimal hourCost = userService.getById(token).getCost();
+        if (hourCost == null) {
+            hourCost = new BigDecimal(0);
+        }
         SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
 
 

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

@@ -0,0 +1,21 @@
+package com.management.platform.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 菜单功能权限关联表 前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+@RestController
+@RequestMapping("/sys-function")
+public class SysFunctionController {
+
+}
+

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

@@ -0,0 +1,21 @@
+package com.management.platform.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 菜单表 前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+@RestController
+@RequestMapping("/sys-module")
+public class SysModuleController {
+
+}
+

+ 50 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/SysRoleController.java

@@ -0,0 +1,50 @@
+package com.management.platform.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.SysRole;
+import com.management.platform.service.SysRoleService;
+import com.management.platform.service.UserService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * <p>
+ * 角色表(职务) 前端控制器
+ * </p>
+ *
+ * @author Reiskuchen
+ * @since 2019-11-06
+ */
+@RestController
+@RequestMapping("/permission")
+public class SysRoleController {
+    @Resource
+    private HttpServletRequest request;
+    @Resource
+    private SysRoleService sysRoleService;
+    @Resource
+    private UserService userService;
+
+    @RequestMapping("/getFrontRoleList")
+    public HttpRespMsg getFrontRoleList() {
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.data = sysRoleService.list(new QueryWrapper<SysRole>());
+        return msg;
+    }
+
+    @RequestMapping("/getRoleList")
+    public HttpRespMsg getRoleList() {
+        HttpRespMsg msg = new HttpRespMsg();
+        String userId = request.getHeader("TOKEN");
+        Integer companyId = userService.getById(userId).getCompanyId();
+        msg.data = sysRoleService.list(new QueryWrapper<SysRole>().eq("company_id", companyId));
+        return msg;
+    }
+
+}
+

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

@@ -0,0 +1,21 @@
+package com.management.platform.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 角色菜单关联表 前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+@RestController
+@RequestMapping("/sys-role-function")
+public class SysRoleFunctionController {
+
+}
+

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

@@ -0,0 +1,21 @@
+package com.management.platform.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 角色操作功能权限关联表 前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+@RestController
+@RequestMapping("/sys-role-module")
+public class SysRoleModuleController {
+
+}
+

+ 72 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/SysFunction.java

@@ -0,0 +1,72 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 菜单功能权限关联表
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class SysFunction extends Model<SysFunction> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 功能名称
+     */
+    @TableField("name")
+    private String name;
+
+    /**
+     * 图标
+     */
+    @TableField("icon")
+    private String icon;
+
+    /**
+     * 功能字符KEY
+     */
+    @TableField("code")
+    private String code;
+
+    /**
+     * 对应模块ID
+     */
+    @TableField("module_id")
+    private Integer moduleId;
+
+    /**
+     * 功能排序
+     */
+    @TableField("seq")
+    private Integer seq;
+
+    /**
+     * 0:启用,1.未启用
+     */
+    @TableField("use_state")
+    private Boolean useState;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 86 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/SysModule.java

@@ -0,0 +1,86 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 菜单表
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class SysModule extends Model<SysModule> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 主键CODE
+     */
+    @TableId("id")
+    private Integer id;
+
+    /**
+     * 模块名称
+     */
+    @TableField("name")
+    private String name;
+
+    /**
+     * 模块路径
+     */
+    @TableField("path")
+    private String path;
+
+    /**
+     * 模块父级ID
+     */
+    @TableField("parent_id")
+    private Integer parentId;
+
+    /**
+     * 模块图标
+     */
+    @TableField("icon")
+    private String icon;
+
+    /**
+     * 排序
+     */
+    @TableField("orderitem")
+    private Integer orderitem;
+
+    /**
+     * 是否菜单
+     */
+    @TableField("is_menu")
+    private Boolean isMenu;
+
+    /**
+     * 0:启用,1.未启用
+     */
+    @TableField("use_state")
+    private Boolean useState;
+
+    /**
+     * 账套级别的系统配置-Lei
+     */
+    @TableField("config")
+    private String config;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 57 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/SysRole.java

@@ -0,0 +1,57 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 角色表(职务)
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class SysRole extends Model<SysRole> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 公司id
+     */
+    @TableField("company_id")
+    private Integer companyId;
+
+    /**
+     * 角色名称
+     */
+    @TableField("rolename")
+    private String rolename;
+
+    /**
+     * 角色描述
+     */
+    @TableField("role_describe")
+    private String roleDescribe;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 44 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/SysRoleFunction.java

@@ -0,0 +1,44 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 角色菜单关联表
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class SysRoleFunction extends Model<SysRoleFunction> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 角色编号
+     */
+    @TableId("role_id")
+    private Integer roleId;
+
+    /**
+     * 模块对应操作ID
+     */
+    @TableField("function_id")
+    private Integer functionId;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.roleId;
+    }
+
+}

+ 44 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/SysRoleModule.java

@@ -0,0 +1,44 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 角色操作功能权限关联表
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class SysRoleModule extends Model<SysRoleModule> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 角色编号
+     */
+    @TableId("role_id")
+    private Integer roleId;
+
+    /**
+     * 模块ID
+     */
+    @TableField("module_id")
+    private Integer moduleId;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.roleId;
+    }
+
+}

+ 15 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/User.java

@@ -16,7 +16,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2021-05-30
+ * @since 2021-06-04
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -127,9 +127,22 @@ public class User extends Model<User> {
     @TableField("wx_openid")
     private String wxOpenid;
 
+    /**
+     * 新版权限角色的id
+     */
+    @TableField("role_id")
+    private Integer roleId;
+
+    /**
+     * 新版权限角色的名称
+     */
+    @TableField("role_name")
+    private String roleName;
+
+
+
     @TableField(exist = false)
     private String departmentName;
-
     @Override
     protected Serializable pkVal() {
         return this.id;

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

@@ -1,11 +1,15 @@
 package com.management.platform.entity.vo;
 
 import com.management.platform.entity.Company;
+import com.management.platform.entity.SysFunction;
+import com.management.platform.entity.SysModule;
 import com.management.platform.entity.User;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
+import java.util.List;
+
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
@@ -15,4 +19,10 @@ public class UserVO extends User {
     //是否是项目经理
     private boolean isLeader;
     private Company company;
+
+    //模块菜单的访问权限
+    private List<SysModule> moduleList;
+    //功能按钮的访问权限
+    private List<SysFunction> functionList;
+
 }

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

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.SysFunction;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 菜单功能权限关联表 Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+public interface SysFunctionMapper extends BaseMapper<SysFunction> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.SysModule;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 菜单表 Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+public interface SysModuleMapper extends BaseMapper<SysModule> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.SysRoleFunction;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 角色菜单关联表 Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+public interface SysRoleFunctionMapper extends BaseMapper<SysRoleFunction> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.SysRole;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 角色表(职务) Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+public interface SysRoleMapper extends BaseMapper<SysRole> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.SysRoleModule;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 角色操作功能权限关联表 Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+public interface SysRoleModuleMapper extends BaseMapper<SysRoleModule> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.SysFunction;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 菜单功能权限关联表 服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+public interface SysFunctionService extends IService<SysFunction> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.SysModule;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 菜单表 服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+public interface SysModuleService extends IService<SysModule> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.SysRoleFunction;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 角色菜单关联表 服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+public interface SysRoleFunctionService extends IService<SysRoleFunction> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.SysRoleModule;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 角色操作功能权限关联表 服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+public interface SysRoleModuleService extends IService<SysRoleModule> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.SysRole;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 角色表(职务) 服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+public interface SysRoleService extends IService<SysRole> {
+
+}

+ 4 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -92,7 +92,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             Integer companyId = user.getCompanyId();
             //判断用户的角色,如果是管理员和负责人,查看全部的。如果是普通员工,只能是看到参与的项目
             QueryWrapper<Project> queryWrapper = null;
-            if (user.getRole() == 0) {
+            if (user.getRole() == 0 || user.getRole() == 5) {
                 //普通员工
                 List<Participation> pList = participationMapper.selectList(new QueryWrapper<Participation>().eq("user_id", user.getId()));
                 List<Integer> projectIds = new ArrayList<>();
@@ -101,7 +101,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 } else {
                     projectIds.add(-1);
                 }
-                queryWrapper = new QueryWrapper<Project>().in("id", projectIds);
+                final List<Integer> ids = projectIds;
+                queryWrapper = new QueryWrapper<Project>();
+                queryWrapper.and(wrapper->wrapper.in("id", ids).or().eq("creator_id", user.getId()));
             } else {
                 queryWrapper = new QueryWrapper<Project>().eq("company_id", companyId);
             }

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

@@ -193,8 +193,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         }
                     }
                 }
-
-
             } else {
                 Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
                 List<Integer> ids = null;
@@ -689,9 +687,12 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             sheet.setColumnWidth(0, 5 * 256);
             sheet.setColumnWidth(1, 10 * 256);
             sheet.setColumnWidth(2, 20 * 256);
-            sheet.setColumnWidth(3, 15 * 256);
-            sheet.setColumnWidth(4, 15 * 256);
-            sheet.setColumnWidth(5, 100 * 256);
+            sheet.setColumnWidth(3, 20 * 256);
+            sheet.setColumnWidth(4, 60 * 256);
+
+            sheet.setColumnWidth(5, 15 * 256);
+            sheet.setColumnWidth(6, 15 * 256);
+            sheet.setColumnWidth(7, 100 * 256);
             //设置为居中加粗
             HSSFCellStyle headStyle = workbook.createCellStyle();
             HSSFFont font = workbook.createFont();
@@ -708,17 +709,24 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             headCell = headRow.createCell(2);
             headCell.setCellValue("项目名称");
             headCell.setCellStyle(headStyle);
-
             headCell = headRow.createCell(3);
-            headCell.setCellValue("工作日期");
+            headCell.setCellValue("子项目名称");
             headCell.setCellStyle(headStyle);
-
             headCell = headRow.createCell(4);
-            headCell.setCellValue("工作时长(小时)");
+            headCell.setCellValue("关联任务");
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(5);
+            headCell.setCellValue("工作日期");
+            headCell.setCellStyle(headStyle);
+            headCell = headRow.createCell(6);
+            headCell.setCellValue("工作时长(小时)");
+            headCell.setCellStyle(headStyle);
+            headCell = headRow.createCell(7);
             headCell.setCellValue("工作内容");
             headCell.setCellStyle(headStyle);
+            headCell = headRow.createCell(8);
+            headCell.setCellValue("加班");
+            headCell.setCellStyle(headStyle);
             //设置日期格式
             HSSFCellStyle style = workbook.createCellStyle();
             style.setDataFormat(HSSFDataFormat.getBuiltinFormat("yy/mm/dd hh:mm"));
@@ -738,13 +746,17 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 row.createCell(0).setCellValue(rowNum);
                 row.createCell(1).setCellValue((String) map.get("name"));
                 row.createCell(2).setCellValue((String) map.get("project"));
-                HSSFCell cell = row.createCell(3);
+                row.createCell(3).setCellValue((String) map.get("subProjectName"));
+                row.createCell(4).setCellValue((String) map.get("taskName"));
+
+                HSSFCell cell = row.createCell(5);
                 cell.setCellValue(new SimpleDateFormat("yyyy-MM-dd")
                         .format((java.sql.Date) map.get("createDate")));
                 cell.setCellStyle(style);
-
-                row.createCell(4).setCellValue(map.get("duration").toString());
-                row.createCell(5).setCellValue((String) map.get("content"));
+                row.createCell(6).setCellValue(map.get("duration").toString());
+                row.createCell(7).setCellValue((String) map.get("content"));
+                int isOverTime = (Integer) map.get("isOvertime");
+                row.createCell(8).setCellValue(isOverTime==1?"加班":"-");
 
                 rowNum++;
             }

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

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.SysFunction;
+import com.management.platform.mapper.SysFunctionMapper;
+import com.management.platform.service.SysFunctionService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 菜单功能权限关联表 服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+@Service
+public class SysFunctionServiceImpl extends ServiceImpl<SysFunctionMapper, SysFunction> implements SysFunctionService {
+
+}

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

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.SysModule;
+import com.management.platform.mapper.SysModuleMapper;
+import com.management.platform.service.SysModuleService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 菜单表 服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+@Service
+public class SysModuleServiceImpl extends ServiceImpl<SysModuleMapper, SysModule> implements SysModuleService {
+
+}

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

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.SysRoleFunction;
+import com.management.platform.mapper.SysRoleFunctionMapper;
+import com.management.platform.service.SysRoleFunctionService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 角色菜单关联表 服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+@Service
+public class SysRoleFunctionServiceImpl extends ServiceImpl<SysRoleFunctionMapper, SysRoleFunction> implements SysRoleFunctionService {
+
+}

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

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.SysRoleModule;
+import com.management.platform.mapper.SysRoleModuleMapper;
+import com.management.platform.service.SysRoleModuleService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 角色操作功能权限关联表 服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+@Service
+public class SysRoleModuleServiceImpl extends ServiceImpl<SysRoleModuleMapper, SysRoleModule> implements SysRoleModuleService {
+
+}

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

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.SysRole;
+import com.management.platform.mapper.SysRoleMapper;
+import com.management.platform.service.SysRoleService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 角色表(职务) 服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-06-03
+ */
+@Service
+public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements SysRoleService {
+
+}

+ 21 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/SysFunctionMapper.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.SysFunctionMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.SysFunction">
+        <id column="id" property="id" />
+        <result column="name" property="name" />
+        <result column="icon" property="icon" />
+        <result column="code" property="code" />
+        <result column="module_id" property="moduleId" />
+        <result column="seq" property="seq" />
+        <result column="use_state" property="useState" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, name, icon, code, module_id, seq, use_state
+    </sql>
+
+</mapper>

+ 23 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/SysModuleMapper.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.SysModuleMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.SysModule">
+        <id column="id" property="id" />
+        <result column="name" property="name" />
+        <result column="path" property="path" />
+        <result column="parent_id" property="parentId" />
+        <result column="icon" property="icon" />
+        <result column="orderitem" property="orderitem" />
+        <result column="is_menu" property="isMenu" />
+        <result column="use_state" property="useState" />
+        <result column="config" property="config" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, name, path, parent_id, icon, orderitem, is_menu, use_state, config
+    </sql>
+
+</mapper>

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

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

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

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

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

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

+ 3 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserMapper.xml

@@ -21,11 +21,13 @@
         <result column="color" property="color" />
         <result column="is_active" property="isActive" />
         <result column="wx_openid" property="wxOpenid" />
+        <result column="role_id" property="roleId" />
+        <result column="role_name" property="roleName" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, name, phone, password, portrait_url, create_time, role, company_id, department_id, department_cascade, cost, month_cost, salary_type, manage_dept_id, color, is_active, wx_openid
+        id, name, phone, password, portrait_url, create_time, role, company_id, department_id, department_cascade, cost, month_cost, salary_type, manage_dept_id, color, is_active, wx_openid, role_id, role_name
     </sql>
     <!--单独分页获取人员-->
     <select id="getUserByDepartment" resultType="java.util.Map">

+ 26 - 3
fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/demo_index.html

@@ -54,6 +54,12 @@
       <div class="content unicode" style="display: block;">
           <ul class="icon_lists dib-box">
           
+            <li class="dib">
+              <span class="icon iconfont">&#xe663;</span>
+                <div class="name">权限</div>
+                <div class="code-name">&amp;#xe663;</div>
+              </li>
+          
             <li class="dib">
               <span class="icon iconfont">&#xe788;</span>
                 <div class="name">报销</div>
@@ -276,9 +282,9 @@
 <pre><code class="language-css"
 >@font-face {
   font-family: 'iconfont';
-  src: url('iconfont.woff2?t=1621903475590') format('woff2'),
-       url('iconfont.woff?t=1621903475590') format('woff'),
-       url('iconfont.ttf?t=1621903475590') format('truetype');
+  src: url('iconfont.woff2?t=1622768216453') format('woff2'),
+       url('iconfont.woff?t=1622768216453') format('woff'),
+       url('iconfont.ttf?t=1622768216453') format('truetype');
 }
 </code></pre>
           <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@@ -304,6 +310,15 @@
       <div class="content font-class">
         <ul class="icon_lists dib-box">
           
+          <li class="dib">
+            <span class="icon iconfont firerock-iconquanxian"></span>
+            <div class="name">
+              权限
+            </div>
+            <div class="code-name">.firerock-iconquanxian
+            </div>
+          </li>
+          
           <li class="dib">
             <span class="icon iconfont firerock-iconbaoxiao"></span>
             <div class="name">
@@ -637,6 +652,14 @@
       <div class="content symbol">
           <ul class="icon_lists dib-box">
           
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#firerock-iconquanxian"></use>
+                </svg>
+                <div class="name">权限</div>
+                <div class="code-name">#firerock-iconquanxian</div>
+            </li>
+          
             <li class="dib">
                 <svg class="icon svg-icon" aria-hidden="true">
                   <use xlink:href="#firerock-iconbaoxiao"></use>

+ 7 - 3
fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.css

@@ -1,8 +1,8 @@
 @font-face {
   font-family: "iconfont"; /* Project id 2390497 */
-  src: url('iconfont.woff2?t=1621903475590') format('woff2'),
-       url('iconfont.woff?t=1621903475590') format('woff'),
-       url('iconfont.ttf?t=1621903475590') format('truetype');
+  src: url('iconfont.woff2?t=1622768216453') format('woff2'),
+       url('iconfont.woff?t=1622768216453') format('woff'),
+       url('iconfont.ttf?t=1622768216453') format('truetype');
 }
 
 .iconfont {
@@ -13,6 +13,10 @@
   -moz-osx-font-smoothing: grayscale;
 }
 
+.firerock-iconquanxian:before {
+  content: "\e663";
+}
+
 .firerock-iconbaoxiao:before {
   content: "\e788";
 }

Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.js


+ 7 - 0
fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.json

@@ -5,6 +5,13 @@
   "css_prefix_text": "firerock-icon",
   "description": "",
   "glyphs": [
+    {
+      "icon_id": "12860884",
+      "name": "权限",
+      "font_class": "quanxian",
+      "unicode": "e663",
+      "unicode_decimal": 58979
+    },
     {
       "icon_id": "2101853",
       "name": "报销",

BIN
fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.ttf


BIN
fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.woff


BIN
fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.woff2


+ 47 - 25
fhKeeper/formulahousekeeper/timesheet/src/main.js

@@ -37,14 +37,18 @@ import './assets/myfont/iconfont.css'
 // const router = new VueRouter({
 //     routes
 // })
-import { staffRouter, manageRouter, fixedRouter,leaderRouter, projectManageRouter, expenseRouter,sysManageRouter } from './routes'
+import {fixedRouter, allRouters } from './routes'
 import router from './routes'
 
 import NProgress from 'nprogress'
 import 'nprogress/nprogress.css'
 
 var addRouFlag = false;
-
+//角色权限对应关系
+var userModules = [{role:0, modules:["工时报告","自动计时","项目管理"]},
+            {role:3, modules:["成本统计","财务核算成本","项目管理"]},
+            {role:4, modules:["组织架构"]},
+            {role:5, modules:["工时报告","自动计时","项目管理"]},];
 router.beforeEach((to, from, next) => {
     NProgress.start();
     if (to.path == '/register') {
@@ -54,7 +58,7 @@ router.beforeEach((to, from, next) => {
 
     if(to.path != '/daily') {
         sessionStorage.removeItem("from")
-    }
+    } 
 
     if (to.path == '/login') {
         sessionStorage.removeItem('user');
@@ -66,31 +70,49 @@ router.beforeEach((to, from, next) => {
     } else {
         if (!addRouFlag) {
             if(user != null) {
-                addRouFlag = true
-                if(user.role == 0) {
-                    var getRoutes = baseRoleGetRouters(user.leader?leaderRouter:staffRouter, user);
-                    if (user.company.packageProject == 1 && !user.leader) {
-                        getRoutes = getRoutes.concat(projectManageRouter);
-                    }
-                    if (user.company.packageExpense == 1) {
-                        getRoutes = getRoutes.concat(expenseRouter);
-                    }
-                    global.antRouter = fixedRouter.concat(getRoutes);
-                    router.addRoutes(fixedRouter.concat(getRoutes));
-                    router.options.routes = fixedRouter.concat(getRoutes);
-                    router.push({ path: to.path })
+                addRouFlag = true;
+                var getRoutes = null;
+                if (user.company.packageExpense == 0) {
+                    allRoutes = allRouters.filter(r=>r.name != '费用报销');
+                }
+                if (user.role == 1 || user.role == 2) {
+                    getRoutes = allRouters;
                 } else {
-                    var getRoutes = baseRoleGetRouters(manageRouter, user);
-                    if (user.company.packageExpense == 1) {
-                        getRoutes = getRoutes.concat(expenseRouter);
-                    }
-                    getRoutes = getRoutes.concat(sysManageRouter);
+                    var modules = userModules.filter(u=>u.role == user.role)[0].modules;
                     
-                    global.antRouter = fixedRouter.concat(getRoutes);
-                    router.addRoutes(fixedRouter.concat(getRoutes));
-                    router.options.routes = fixedRouter.concat(getRoutes);
-                    router.push({ path: to.path })
+                    getRoutes = allRouters.filter(r=>{
+                        return modules.filter(m=>m == r.name).length > 0;
+                    });
                 }
+                global.antRouter = fixedRouter.concat(getRoutes);
+                router.addRoutes(fixedRouter.concat(getRoutes));
+                router.options.routes = fixedRouter.concat(getRoutes);
+                router.push({ path: to.path })
+                
+                // if(user.role == 0) {
+                //     var getRoutes = baseRoleGetRouters(user.leader?leaderRouter:staffRouter, user);
+                //     if (user.company.packageProject == 1 && !user.leader) {
+                //         getRoutes = getRoutes.concat(projectManageRouter);
+                //     }
+                //     if (user.company.packageExpense == 1) {
+                //         getRoutes = getRoutes.concat(expenseRouter);
+                //     }
+                //     global.antRouter = fixedRouter.concat(getRoutes);
+                //     router.addRoutes(fixedRouter.concat(getRoutes));
+                //     router.options.routes = fixedRouter.concat(getRoutes);
+                //     router.push({ path: to.path })
+                // } else {
+                //     var getRoutes = baseRoleGetRouters(manageRouter, user);
+                //     if (user.company.packageExpense == 1) {
+                //         getRoutes = getRoutes.concat(expenseRouter);
+                //     }
+                //     getRoutes = getRoutes.concat(sysManageRouter);
+                    
+                //     global.antRouter = fixedRouter.concat(getRoutes);
+                //     router.addRoutes(fixedRouter.concat(getRoutes));
+                //     router.options.routes = fixedRouter.concat(getRoutes);
+                //     router.push({ path: to.path })
+                // }
             }
         }
         next()

+ 28 - 145
fhKeeper/formulahousekeeper/timesheet/src/routes.js

@@ -31,6 +31,7 @@ import team from './views/team/index.vue'
 
 // 系统设置
 import timetype from './views/settings/timetype.vue';
+import role from './views/role/role';
 
 import finance from './views/project/finance';
 import Market from './views/market/list';
@@ -88,36 +89,7 @@ export const fixedRouter = [
     },
     
 ];
-export const projectManageRouter = [
-    //项目管理
-    {
-        path: '/',
-        component: Home,
-        name: '项目管理',
-        iconCls: 'iconfont firerock-iconxiangmu',
-        leaf: true,
-        children: [
-            { path: '/list', component: list, name: '项目管理' },
-            { path: '/projectInside/:id', component: projectInside, name: '项目查看' },
-        ]
-    }
-];
-export const expenseRouter = [
-    // 费用报销模块
-    {
-        path: '/',
-        component: Home,
-        name: '费用报销',
-        iconCls: 'iconfont firerock-iconbaoxiao',
-        leaf: true,
-        children: [
-            { path: '/expense', component: expense, name: '费用报销' }
-        ]
-    }
-];
-
-export const manageRouter = [
-    
+export const allRouters = [//组织架构
     //工时报告
     {
         path: '/',
@@ -150,18 +122,7 @@ export const manageRouter = [
             { path: '/review', component: review, name: '报告审核' },
         ]
     },
-
-    // {
-    //             path: '/',
-    //             component: Home,
-    //             name: '费用报销',
-    //             iconCls: 'iconfont firerock-iconbaoxiao',
-    //             leaf: true,
-    //             children: [
-    //                 { path: '/expense', component: expense, name: '费用报销' }
-    //             ]
-    //         },
-
+    
     //成本统计
     {
         path: '/',
@@ -186,9 +147,6 @@ export const manageRouter = [
             { path: '/finance', component: finance, name: '财务核算成本' },
         ]
     },
-    
-    
-
     //项目管理
     {
         path: '/',
@@ -198,101 +156,50 @@ export const manageRouter = [
         leaf: true,
         children: [
             { path: '/list', component: list, name: '项目管理' },
-            { path: '/projectInside/:id', component: projectInside, name: '项目查看' },
         ]
     },
-
-    {
-        path: '/404',
-        component: NotFound,
-        name: '',
-        hidden: true
-    },
-    {
-        path: '*',
-        hidden: true,
-        redirect: { path: '/404' }
-    }
-];
-
-export const staffRouter = [
-    //工时报告
+    // 费用报销模块
     {
         path: '/',
         component: Home,
-        name: '工时报告',
-        iconCls: 'fa fa-sticky-note',
+        name: '费用报销',
+        iconCls: 'iconfont firerock-iconbaoxiao',
         leaf: true,
         children: [
-            { path: '/daily', component: daily, name: '工时报告' },
+            { path: '/expense', component: expense, name: '费用报销' }
         ]
     },
     {
         path: '/',
         component: Home,
-        name: '自动计时',
-        iconCls: 'iconfont firerock-iconmiaobiao',
-        leaf: true,
+        name: '组织架构',
+        iconCls: 'fa fa-users',
+        leaf: true,//只有一个节点
         children: [
-            { path: '/timer', component: timer, name: '自动计时' },
+            { path: '/team', component: team, name: '组织架构' },
         ]
     },
+    // {
+    //     path: '/',
+    //     component: Home,
+    //     name: '',
+    //     iconCls: 'iconfont firerock-iconquanxian',
+    //     leaf: true,//只有一个节点
+    //     children: [
+    //         { path: '/role', component: role, name: '角色权限' },
+    //     ]
+    // },
     
+    //设置时间类型
     {
-        path: '/404',
-        component: NotFound,
-        name: '',
-        hidden: true
-    },
-    {
-        path: '*',
-        hidden: true,
-        redirect: { path: '/404' }
-    }
-];
-//项目经理的权限,填报和审核
-export const leaderRouter = [
-    //工时报告
-    {
-        path: '/',
-        component: Home,
-        name: '工时报告',
-        iconCls: 'fa fa-sticky-note',
-        leaf: true,
-        children: [
-            { path: '/daily', component: daily, name: '工时报告' },
-        ]
-    },
-    {
-        path: '/',
-        component: Home,
-        name: '自动计时',
-        iconCls: 'iconfont firerock-iconmiaobiao',
-        leaf: true,
-        children: [
-            { path: '/timer', component: timer, name: '自动计时' },
-        ]
-    },
-    //工时审核
-    {
-        path: '/',
-        component: Home,
-        name: '报告审核',
-        iconCls: 'iconfont firerock-iconshenhe',
-        leaf: true,
-        children: [
-            { path: '/review', component: review, name: '报告审核' },
-        ]
-    },
-    //项目管理
-    {
+        
         path: '/',
         component: Home,
-        name: '项目管理',
-        iconCls: 'iconfont firerock-iconxiangmu',
-        leaf: true,
+        name: '',
+        iconCls: 'iconfont firerock-iconsetting',
+        leaf: true,//只有一个节点
         children: [
-            { path: '/list', component: list, name: '项目管理' },
+            { path: '/timetype', component: timetype, name: '系统基础设置' },
         ]
     },
     {
@@ -306,31 +213,7 @@ export const leaderRouter = [
         hidden: true,
         redirect: { path: '/404' }
     }
-];
-
-export const sysManageRouter = [//组织架构
-    {
-        path: '/',
-        component: Home,
-        name: '',
-        iconCls: 'fa fa-users',
-        leaf: true,//只有一个节点
-        children: [
-            { path: '/team', component: team, name: '组织架构' },
-        ]
-    },
-    //设置时间类型
-    {
-        
-        path: '/',
-        component: Home,
-        name: '',
-        iconCls: 'iconfont firerock-iconsetting',
-        leaf: true,//只有一个节点
-        children: [
-            { path: '/timetype', component: timetype, name: '系统基础设置' },
-        ]
-    },]
+]
 
 export default new Router({
     routes: fixedRouter

+ 11 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/Login.vue

@@ -76,8 +76,18 @@
                         this.http.post(this.port.manage.login, this.ruleForm , res => {
                             this.logining = false;
                             if (res.code == "ok") {
+                                var user = res.data;
                                 sessionStorage.setItem('user', JSON.stringify(res.data));
-                                this.$router.push({ path: '/daily' });
+                                if (user.role == 3) {
+                                    //公司高层
+                                    this.$router.push({ path: '/cost' });
+                                } else if (user.role == 4) {
+                                    //人事管理员
+                                    this.$router.push({ path: '/team' });
+                                } else {
+                                    this.$router.push({ path: '/daily' });
+                                }
+                                
                             } else {
                                 this.$message({
                                     message: res.msg,

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

@@ -27,7 +27,7 @@
                             <el-option label="已撤销" value=3 ></el-option>
                         </el-select>
                 </el-form-item>
-                <el-form-item style="float:right;">
+                <el-form-item style="float:right;" v-if="user.role == 1||user.role == 2||user.role == 5">
                     <el-link type="primary" :underline="false" @click="handleAdd(-1,null)">新增项目</el-link>
                 </el-form-item>
             </el-form>
@@ -70,7 +70,7 @@
                     {{scope.row.progress==null?"-":scope.row.progress}}%
                 </template>
             </el-table-column>
-            <el-table-column label="操作" width="290">
+            <el-table-column label="操作" width="290" v-if="user.role == 1||user.role == 2||user.role == 5 || user.leader">
                 <template slot-scope="scope">
                     <el-button v-if="user.role>0" size="mini"  @click="subProject(scope.row)">子项目</el-button>
                     <el-button size="mini" v-if="user.role>0 || user.id==scope.row.inchargerId" type="primary" @click="handleAdd(scope.$index, scope.row)">编辑</el-button>
@@ -146,7 +146,7 @@
             <!-- 项目基线 -->
                 <!-- <div style="width: 100%;border: 1px solid #ddd"></div> -->
                 
-                <div style="margin: 90px 0 30px 0">
+                <div style="margin: 90px 0 30px 0" >
                     <el-divider></el-divider>
                     <span class="el-dialog__title">成本基线</span>
                 </div>
@@ -181,11 +181,11 @@
                 placeholder="整数" clearable @keyup.native="addForm.baseRisk2=addForm.baseRisk2.replace(/[^\d]/g,'');"></el-input><span style="margin-left:10px;">元</span>
             </div>
             <!-- 合计 -->
-            <div style="margin-top: 20px">
-                <span style="margin-left:50px;margin-right:10px;" v-if="user.company.packageProject==1">合计</span>
+            <div style="margin-top: 20px;float:right;">
+                <span style="margin-right:50px;margin-right:10px;" v-if="user.company.packageProject==1">合计</span>
                  <span v-if="addForm.budget <= 0 || addForm.budget == undefined">0</span>
                  <span v-else>{{addForm.budget | numberToCurrency}}</span>
-                <span style="margin-left:10px;">元</span>
+                <span style="margin-right:50px;margin-left:10px;">元</span>
             </div>
 
 
@@ -201,7 +201,7 @@
             <div class="line"><span>姓名</span><span>{{userDetail.name}}</span></div>
             <div class="line"><span>手机号码</span><span>{{userDetail.phone}}</span></div>
             <div class="line"><span>部门</span><span>{{userDetail.departmentName}}</span></div>
-            <div class="line" v-if="user.role>0"><span>成本</span><span>{{userDetail.cost}}元/小时</span></div>
+            <div class="line" v-if="user.role>0&&user.role<=3"><span>成本</span><span>{{userDetail.cost}}元/小时</span></div>
             <div slot="footer" class="dialog-footer">
                 <el-button type="primary" @click="userDetailVisible = false" >确定</el-button>
             </div>

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

@@ -224,7 +224,7 @@
             <el-tab-pane label="文件中心" name="files"><FileCenter ref="fileCenter"></FileCenter></el-tab-pane>
             <el-tab-pane label="项目概览" name="info"><ProjectInfo ref="projectInfo"></ProjectInfo></el-tab-pane>
             <el-tab-pane label="数据统计" name="summary"><Summary ref="summary"></Summary></el-tab-pane>
-            <el-tab-pane label="挣值分析" name="earning" v-if="user.role > 0 || user.id == currentProject.inchargerId"><Earning ref="earning"></Earning></el-tab-pane>
+            <el-tab-pane label="挣值分析" name="earning" v-if="user.role >= 1 && user.role<=3"><Earning ref="earning"></Earning></el-tab-pane>
         </el-tabs>
         
         <!--新增任务界面-->

+ 184 - 0
fhKeeper/formulahousekeeper/timesheet/src/views/role/role.vue

@@ -0,0 +1,184 @@
+<template>
+  <div class="app-container">
+    <div>
+      <el-row>
+        <el-col :span="24">
+          <el-button size="small" type="primary" @click="openCreateDialog">新增角色</el-button>
+        </el-col>
+      </el-row>
+      <el-table :data="roles" style="width: 100%" v-loading="loading">
+        <el-table-column type="index" width="40"></el-table-column>
+        <el-table-column prop="rolename" label="角色名称" width="160"></el-table-column>
+        <el-table-column prop="roleDescribe" label="角色描述"></el-table-column>
+        <el-table-column label="操作" width="290">
+          <template slot-scope="scope">
+            <el-button size="small" @click="openEditDialog(scope.$index)">修改角色</el-button>
+            <el-button
+              size="small"
+              @click="toAuthority(scope.row.id,scope.row.rolename)"
+            >修改权限</el-button>
+            <el-button
+              size="small"
+              type="danger"
+              @click="deleteRole(scope.row.id,scope.row.rolename)"
+            >删除角色</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+
+    <!-- 添加或修改的dialog -->
+    <el-dialog :close-on-click-modal="false" :title="(roleForm.id==null?'新增':'修改')+'角色'" :visible.sync="dialogVisible" width="400px">
+      <el-form ref="form" :model="roleForm" :rules="rules" label-width="60px">
+        <el-form-item label="名称" prop="name">
+          <el-input v-model="roleForm.name" ref="name" placeholder="请输入名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="描述" prop="description">
+          <el-input v-model="roleForm.description" placeholder="请输入描述" clearable></el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogVisible=false">取消</el-button>
+        <el-button type="primary" @click="submitRole">提交</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import util from "../../common/js/util";
+
+export default {
+  data() {
+    return {
+      roles: [],
+      loading: false,
+      dialogVisible: false,
+      roleForm: {
+        id: null,
+        name: null,
+        description: null
+      },
+      rules: {
+        name: [{ required: true, message: "请输入名称", trigger: "blur" }],
+        description: [
+          { required: true, message: "请输入描述", trigger: "blur" }
+        ]
+      },
+      //权限
+      viewPermission:
+        store.getters.authorization.indexOf("pc_view_permission") != -1,
+      editPermission:
+        store.getters.authorization.indexOf("pc_set_permission") != -1
+    };
+  },
+  methods: {
+    getRole() {
+      this.loading = true;
+      request({
+        url: "/permission/getRoleList",
+        method: "post"
+      })
+        .then(response => {
+          this.roles = response.data;
+          this.loading = false;
+        })
+        .catch(error => {
+          this.loading = false;
+        });
+    },
+    submitRole() {
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.loading = true;
+          request({
+            url: "/permission/editRole",
+            method: "post",
+            params: {
+              id: this.roleForm.id,
+              name: this.roleForm.name,
+              description: this.roleForm.description
+            }
+          })
+            .then(response => {
+              this.loading = false;
+              if (response.code == 'ok') {
+                  this.$message({
+                    message: "操作成功",
+                    type: "success"
+                  });
+                  this.dialogVisible = false;
+                  this.getRole();
+              } else {
+                  this.$message({
+                    message: response.message,
+                    type: "error"
+                  });
+              }
+              
+            })
+            .catch(error => {
+              this.loading = false;
+            });
+        }
+      });
+    },
+    //删除
+    deleteRole(id, name) {
+      this.$confirm("是否删除" + name, "删除", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        closeOnClickModal: false,
+        type: "warning"
+      }).then(() => {
+        this.loading = true;
+        request({
+          url: "/permission/deleteRole",
+          method: "post",
+          params: {
+            id: id
+          }
+        })
+          .then(response => {
+            this.loading = false;
+            this.getRole();
+          })
+          .catch(error => {
+            this.loading = false;
+          });
+      });
+    },
+
+    //打开新建dialog
+    openCreateDialog() {
+      this.roleForm.id = null;
+      this.roleForm.name = "";
+      this.roleForm.description = "";
+      this.dialogVisible = true;
+      this.$nextTick(() => {
+          this.$refs.form.clearValidate();
+          this.$refs.name.focus();
+      },500)
+      
+    },
+    //打开编辑dialog
+    openEditDialog(index) {
+      this.roleForm.id = this.roles[index].id;
+      this.roleForm.name = this.roles[index].rolename;
+      this.roleForm.description = this.roles[index].roleDescribe;
+      this.dialogVisible = true;
+      this.$refs.form.clearValidate();
+    },
+    toAuthority(id, name) {
+      this.$router.push("/authority/" + id + "/" + name);
+    }
+  },
+  mounted() {
+    this.getRole();
+  }
+};
+</script>
+
+<style scoped>
+</style>
+

+ 28 - 5
fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

@@ -66,7 +66,7 @@
                 <el-table-column prop="phone" label="手机" width="120"></el-table-column>
                 <el-table-column prop="departmentName" label="部门" sortable></el-table-column>
                 <el-table-column label="角色" width="100">
-                    <template slot-scope="scope">{{scope.row.role == 0 ? "普通员工" : scope.row.role == 1 ? "负责人" : "管理员"}}</template>
+                    <template slot-scope="scope">{{roleArray[scope.row.role]}}</template>
                 </el-table-column>
                 <el-table-column prop="monthCost" label="月成本" sortable>
                     <template slot-scope="scope">{{scope.row.monthCost==null?0:scope.row.monthCost}} 元</template>
@@ -122,7 +122,7 @@
         </el-dialog>
 
         <!-- 新增单个人员的Dialog -->
-        <el-dialog :title="title" :visible.sync="dialogVisible" width="450px" >
+        <el-dialog :title="title" :visible.sync="dialogVisible" width="550px" >
             <el-form ref="form1" :model="insertForm" :rules="rules" label-width="80px">
                 <el-form-item label="名字" prop="name">
                     <el-input v-model="insertForm.name" placeholder="请输入姓名" clearable></el-input>
@@ -150,8 +150,21 @@
                 </el-form-item>
                 <el-form-item label="角色" prop="role">
                     <el-select v-model="insertForm.role" placeholder="请选择角色" style="width: 100%">
-                        <el-option label="普通员工" :value="0"></el-option>
-                        <el-option label="管理员" :value="2"></el-option>
+                        <!-- <el-option label="普通员工" :value="0">
+                            <span style="float: left">普通员工</span>
+                            <span style="float: right; color: #8492a6; font-size: 13px">具有填报日报,参与项目协作基础功能</span>
+                        </el-option>
+                        <el-option label="系统管理员" :value="2" :disabled="user.role != 1">
+                            <span style="float: left">普通员工</span>
+                            <span style="float: right; color: #8492a6; font-size: 13px">具有填报日报,参与项目协作基础功能</span>
+                        </el-option>
+                        <el-option label="公司高层" :value="3"></el-option>
+                        <el-option label="人事管理员" :value="4"></el-option>
+                        <el-option label="项目管理员" :value="5"></el-option> -->
+                        <el-option v-for="item in roleDescArray" :label="item.label" :value="item.value" :key="item.name">
+                            <span style="float: left">{{item.label}}</span>
+                            <span style="float: right; color: #8492a6; font-size: 13px">{{item.desc}}</span>
+                        </el-option>
                     </el-select>
                 </el-form-item>
             </el-form>
@@ -161,7 +174,7 @@
             </span>
         </el-dialog>
 
-        <el-dialog title="修改成本" :visible.sync="dialogVisible1" width="450px" >
+        <el-dialog title="修改成本" :visible.sync="dialogVisible1" width="550px" >
             <el-form ref="form1" :model="insertForm" :rules="rules" label-width="80px">
                 <el-form-item label="薪酬方式" prop="salaryType">
                     <el-radio-group v-model="insertForm.salaryType" @change="onSalaryTypeChange">
@@ -222,6 +235,12 @@
     export default {
         data() {
             return {
+                roleArray:["普通员工","超级管理员", "系统管理员", "公司高层","人事管理员", "项目管理员"],
+                roleDescArray:[{label:"普通员工",value:0, desc:"填报日报,参与项目协作"},
+                {label:"系统管理员",value:2, desc:"具有除了创建系统管理员之外的全部功能"},
+                {label:"公司高层",value:3, desc:"查阅项目信息,人员工时和成本情况"},
+                {label:"人事管理员",value:4, desc:"负责组织架构管理,薪资信息维护"},
+                {label:"项目管理员",value:5, desc:"创建和管理项目"}],
                 userSalaryList:[],
                 userSalaryListDialog: false,
                 value:{},
@@ -964,4 +983,8 @@
         margin: 0px;
         background:#f3f3f3;
     }
+    //全局的作用范围
+    .el-tree-node__content {
+        height:36px;
+    }
 </style>

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

@@ -13,17 +13,18 @@
         <div>
             <el-card class="box-card daily" shadow="never" >
                 <div slot="header" class="clearfix">
-                    <el-date-picker size="small" v-model="date" :editable="false" format="yyyy-MM" value-format="yyyy-MM" @change="changeMonthOut" :clearable="false" type="month" placeholder="选择月份"></el-date-picker>
+                    <el-date-picker size="small" v-model="date" :editable="false" format="yyyy-MM" style="width:187px;"
+                    value-format="yyyy-MM" @change="changeMonthOut" :clearable="false" type="month" placeholder="选择月份"></el-date-picker>
                     <span >
-                    <span style="color:#999;">日期:</span>
+                    <!-- <span style="color:#999;">日期:</span> -->
                     <span v-for="(item,index) in allDate" :id="'day'+index" :class="index==choseDay?'chooseDate date_item':'date_item'" 
                     @click="choseDate(index, item)" :key="index">{{item}}</span>
                     </span>
                 </div>
                 <div style="display:flex;">
-                <div v-if="user.role > 0 || user.manageDeptId != 0">
-                    <div>
-                        <el-select v-model="selectState" size="small" @change="stateChange">
+                <div v-if="user.role > 0 || user.manageDeptId != 0" >
+                    <div style="width:190px;">
+                        <el-select v-model="selectState" size="small" @change="stateChange" >
                         <el-option value="-1" label="全部状态" >全部状态</el-option>
                         <el-option value="-2" label="未填报">未填报</el-option>
                         <el-option value="1" label="已通过">已通过</el-option>
@@ -61,18 +62,18 @@
                 <div :style="'height:'+tableHeight+'px;width:0.5px;background:#eee;margin-right:10px;margin-left:10px;'" ></div>
                 <div class="allDaily" style="float:left;flex-grow:1">
                     <!--系统管理员和部门负责人 -->
-                    <div class="report_title" v-if="user.role > 0 || user.manageDeptId > 0">
+                    <div class="report_title" v-if="user.role == 1 || user.role == 2 || user.manageDeptId > 0">
                         <span>工作日报 | {{depData.label}}</span> - 已填写<span style="margin-left:5px;margin-right:5px;color:green;">{{reportList.length}}</span>人,
                     未填写<span style="margin-left:5px;margin-right:5px;color:red;">{{(depData == null?data[0].membCount:(depData.isUser == 1?1:depData.membCount))-reportList.length}}</span>人
                         <span style="float:right;">
                             <el-link type="primary" style="margin-right:10px;" :underline="false" @click="fillInReport(-1)">填写日报</el-link>
                             <el-link type="primary" style="margin-right:10px;" :underline="false" @click="showExportDialog">导出日报</el-link>
-                            <el-link type="primary" style="margin-right:10px;" :underline="false" @click="batchApprove">批量审核</el-link>
+                            <el-link type="primary" style="margin-right:10px;" :underline="false" @click="batchApprove" >批量审核</el-link>
                         </span>
                     </div>
                     <!--普通员工,含项目经理 -->
-                    <div class="report_title" v-if="user.role==0 && user.manageDeptId == 0"><span>日报列表</span>
-                    <span style="float:right;" v-if="user.role==0 && user.manageDeptId == 0">
+                    <div class="report_title" v-if="(user.role==0||user.role==5) && user.manageDeptId == 0"><span>日报列表</span>
+                    <span style="float:right;" v-if="(user.role==0||user.role==5) && user.manageDeptId == 0">
                             <el-link type="primary" style="margin-right:10px;" :underline="false" @click="fillInReport(-1)">填写日报</el-link>
                             <el-link type="primary" v-if="user.leader" style="margin-right:10px;" :underline="false" @click="batchApprove">批量审核</el-link>
                     </span>
@@ -86,16 +87,16 @@
                                     工作总时长:
                                     <!-- <span :style="parseFloat(item1.reportTime)>parseFloat(item1.calculateTime)+0.5?'color:red':''">{{item1.reportTime}}h</span> -->
                                     <span >{{item1.reportTime}}</span>h
-                                    <span v-if="user.role > 0"><span  style="margin-left:10px;">成本:</span>
+                                    <span v-if="user.role >=1 && user.role <=3"><span  style="margin-left:10px;">成本:</span>
                                     <span >{{item1.cost}}</span>元</span>
                                 </span>
                             </span>
                             <div class="checkbtn">
-                                <el-button v-if="(user.role != 0 || user.id == item1.data[0].inchargerId) && item1.state == 0" type="primary" :loading="logining" size="small" @click="approve(item1.id, item1)">通过</el-button>
-                                <el-button v-if="(user.role != 0 || user.id == item1.data[0].inchargerId) && item1.state == 0" type="danger" :loading="logining" size="small" @click="deny(item1.id,0, item1)">驳回</el-button>
+                                <el-button v-if="(user.role == 1 || user.role == 2 || user.id == item1.data[0].inchargerId) && item1.state == 0" type="primary" :loading="logining" size="small" @click="approve(item1.id, item1)">通过</el-button>
+                                <el-button v-if="(user.role == 1 || user.role == 2 || user.id == item1.data[0].inchargerId) && item1.state == 0" type="danger" :loading="logining" size="small" @click="deny(item1.id,0, item1)">驳回</el-button>
                                 <!--自己可以撤回待审核状态的报告 -->
                                 <el-button v-if="(user.id == item1.id) && item1.state == 0" type="normal" :loading="logining" size="small" @click="cancel(item1)">撤回</el-button>
-                                <el-button v-if="(user.role != 0 || user.id == item1.data[0].inchargerId) && item1.state == 1" type="normal" :loading="logining" size="small" @click="deny(item1.id,1, item1)">撤销</el-button>
+                                <el-button v-if="(user.role == 1 || user.role == 2 || user.id == item1.data[0].inchargerId) && item1.state == 1" type="normal" :loading="logining" size="small" @click="deny(item1.id,1, item1)">撤销</el-button>
                                 <el-button v-if="item1.state >= 2 && user.id == item1.id" type="primary" size="small" @click="fillInReport(index1)">编辑日报</el-button>
                             </div>
                             <div class="one_daily_body">
@@ -1371,6 +1372,7 @@
     }
     .report_title {
         padding:10px 0;
+        color:#666;
     }
     .clearfix {
         overflow-x: auto;

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

@@ -10,7 +10,7 @@
             </van-popup>
             <van-cell title="总时长(h)" v-if="reportTimeType.type == 3">
                 <template>
-                    <van-stepper v-model="reportTimeType.allday" @change="changeAllTime" min="0.5" max="12" step="0.5" :decimal-length="1" />
+                    <van-stepper :disabled="!canEdit" v-model="reportTimeType.allday" @change="changeAllTime" min="0.5" max="12" step="0.5" :decimal-length="1" />
                 </template>
             </van-cell>
             
@@ -23,12 +23,12 @@
                 <van-icon v-if="index>0&&canEdit" class="form_del" name="delete" @click="delPro(index)" />
 
                 <van-cell-group :title="'项目' + (index+1)">
-                    <van-field  readonly  name="projectId" :value="item.projectName" label="投入项目" placeholder="请选择投入项目" @click="clickPicker(index)"
+                    <van-field  readonly  name="projectId" clickable :value="item.projectName" label="投入项目" placeholder="请选择投入项目" @click="clickPicker(index)"
                     :rules="[{ required: true, message: '请选择投入项目' }]"/>
                     <van-popup v-model="showPickerProject" position="bottom">
                         <van-picker show-toolbar :columns="project" value-key="projectName" @confirm="choseProject" @cancel="showPickerProject = false" />
                     </van-popup>
-                    <van-field  readonly name="taskId" :value="item.taskName" label="关联任务" placeholder="请选择关联任务" @click="clickPickerTask(index)"
+                    <van-field v-if="user.company.packageProject == 1"  readonly name="taskId" :value="item.taskName" label="关联任务" placeholder="请选择关联任务" @click="clickPickerTask(index)"
                     />
                     <van-popup v-model="showPickerTask" position="bottom">
                         <van-picker show-toolbar :columns="item.taskList" value-key="taskName" @confirm="choseTask" @cancel="showPickerTask = false" />
@@ -52,7 +52,7 @@
 
                     <!-- 时间段选择模式 -->
                     <van-field readonly v-if="reportTimeType.type == 2" clickable name="datetimePicker" :value="item.startTime" label="开始时间" placeholder="点击选择时间" 
-                        @click="showStartTime = true" />
+                        @click="canEdit?showStartTime = true:''" :disabled="!canEdit"  />
                     <van-popup v-model="showStartTime" position="bottom">
                         <van-datetime-picker
                         v-model="startTime"
@@ -65,7 +65,7 @@
                         <!-- :filter="filter" 原本这个属性在里面 -->
                     </van-popup>
                     <van-field v-if="reportTimeType.type == 2" readonly clickable name="datetimePicker" :value="item.endTime" label="结束时间" placeholder="点击选择时间" 
-                        @click="showEndTime = true" />
+                        @click="canEdit?showEndTime = true:''" :disabled="!canEdit" />
                     <van-popup v-model="showEndTime" position="bottom" >
                         <van-datetime-picker
                         v-model="endTime"
@@ -73,7 +73,7 @@
                         :min-hour="8"
                         :max-hour="23"
                         @confirm="confirmTime(item,1)"
-                        @cancel="showEndTime = false"
+                        @cancel="showEndTime = false" 
                         />
                         <!-- :filter="filter" 原本这个属性在里面 -->
                     </van-popup>
@@ -90,7 +90,7 @@
                             </div>
                         </template>
                     </van-cell>
-                    <van-field class="form_input" 
+                    <van-field class="form_input" :disabled = "!canEdit"
                     v-model="item.content" name="content" type="textarea" label="工作事项" placeholder="请输入工作事项" 
                     rows="3" autosize  />
                     <!-- 单选按钮 -->
@@ -258,6 +258,9 @@
       
             },
             clickTimePicker(i) {
+                if (!this.canEdit) {
+                    return;
+                }
                 this.clickTimeIndex = i;
                 
                 if (this.reportTimeType.type == 0) {
@@ -329,10 +332,10 @@
                         toast.clear();
                         this.project = res.data;
                         
-                        if (this.project.length > 0) {
-                            
-                            this.getTaskList(this.project[0].id);
-                        }
+                        // if (this.project.length > 0) {
+                        //     console.log('this.project[0].id=='+this.project[0].id);
+                        //     this.getTaskList(this.project[0].id);
+                        // }
                     } else {
                         toast.clear();
                         this.$toast.fail('获取失败');
@@ -376,6 +379,13 @@
                                         projectName = this.project[j].projectName;
                                     }
                                 }
+                                let tname = '';
+                                if (list[i].taskId != null && list[i].taskList.length > 0) {
+                                    let filterList = list[i].taskList.filter(t=>t.taskId == list[i].taskId);
+                                    if (filterList.length > 0) {
+                                        tname = filterList[0].taskName;
+                                    }
+                                } 
                                 array.push({
                                     id: list[i].id,
                                     projectId: list[i].projectId,
@@ -389,6 +399,9 @@
                                     endTime: list[i].endTime,
                                     isOvertime: flg,
                                     progress: list[i].progress,
+                                    taskList: list[i].taskList,
+                                    taskId: list[i].taskId,
+                                    taskName:tname,
                                 })
                                 if (list[i].state >= 2) {
                                     this.canEdit = true;

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

@@ -59,7 +59,7 @@
                 userList:[],
                 inchargerUserList:[],
                 show: false,
-                title: "标题",
+                title: "修改项目",
                 form: {
                     id: null,
                     projectName: "",
@@ -150,6 +150,7 @@
                             this.list.push(res.data.records[i])
                         }
                         this.total = res.data.total;
+                        this.page++;
                     } else {
                         this.$toast.fail('获取失败');
                     }
@@ -166,6 +167,7 @@
             // 新增、编辑项目
             openDialog(i) {
                 if(i == -1) {
+                    this.title = "新增项目";
                     this.form = {
                         id: null,
                         projectName: "",
@@ -178,6 +180,7 @@
                     // this.userList.forEach(u=>u.isChecked=false);
                     // this.refreshParticipate();
                 } else {
+                    this.title = "修改项目";
                     this.form = {
                         id: this.list[i].id,
                         projectName: this.list[i].projectName,

+ 4 - 2
fhKeeper/formulahousekeeper/timesheet_h5/src/views/review/index.vue

@@ -9,7 +9,7 @@
             <van-popup v-model="showPicker" position="bottom">
                 <van-datetime-picker v-model="currentDate" type="date" :min-date="minDate" :max-date="maxDate" @confirm="changeTime" @cancel="showPicker = false"/>
             </van-popup>
-            <van-skeleton v-if="report.length != 0" v-for="(item,index) in report" :key="index" title avatar :row="3" :loading="false">
+            <van-skeleton  v-for="(item,index) in report" :key="index" title avatar :row="3" :loading="false">
                 <van-panel class="one_report" :title="item.name" :status="item.state==0?'待审核':item.state==1?'已通过':'已驳回'">
                     <div class="form_text">
                         <span style="margin-right:20px;">
@@ -21,6 +21,7 @@
                     </div>
                     <div v-for="(item1,index1) in item.data" :key="index1" class="one_report_data">
                         <div class="project_title">项目:{{item1.project}}</div>
+                        <div class="project_title" v-if="item1.taskId != null" >任务:{{item1.taskName}}</div>
                         <div class="project_time">时长:{{item1.time}}h <span class="one_span" v-if="item1.isOvertime === 1">加班</span></div>
                         <div class="project_content">事项:<span v-html="item1.content"></span></div>
                         <van-divider />
@@ -170,6 +171,7 @@
 
     .one_report {
         margin-bottom: 15px;
+        font-size:14px;
     }
 
     .form_text {
@@ -186,7 +188,7 @@
     }
 
     .one_report_data {
-        margin-bottom: 20px;
+        margin-bottom: 10px;
         padding: 0 22px;
         div {
             line-height: 30px;