ソースを参照

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

Min 1 年間 前
コミット
d283a2b84c
21 ファイル変更858 行追加256 行削除
  1. 4 9
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/UserController.java
  2. 42 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/UserWorkTypeController.java
  3. 1 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/User.java
  4. 3 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/UserWorkType.java
  5. 1 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/mapper/UserMapper.java
  6. 4 4
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/UserService.java
  7. 8 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/UserWorkTypeService.java
  8. 6 3
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ProdProcedureServiceImpl.java
  9. 12 16
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ProductServiceImpl.java
  10. 14 11
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  11. 81 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/UserWorkTypeServiceImpl.java
  12. 4 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/UserMapper.xml
  13. 146 69
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/components/chooseSomeone.vue
  14. 42 9
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/InsertionPlan/InsertionPlan.vue
  15. 128 32
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/InsertionPlan/InsertionPlanAdd.vue
  16. 82 14
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/InsertionPlan/InsertionPlanItem.vue
  17. 31 9
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/todayPlan/distribution.vue
  18. 2 2
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/vue.config.js
  19. 10 10
      fhKeeper/formulahousekeeper/timesheet-workshop/config/index.js
  20. 79 56
      fhKeeper/formulahousekeeper/timesheet-workshop/src/views/product/list.vue
  21. 158 9
      fhKeeper/formulahousekeeper/timesheet-workshop/src/views/team/index.vue

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

@@ -120,11 +120,6 @@ public class UserController {
     public HttpRespMsg getBaseInfo(@RequestParam String userId){
         HttpRespMsg msg=new HttpRespMsg();
         User user = userService.getById(userId);
-        UserWorkType workType = userWorkTypeService.getById(user.getWorkTypeId());
-        if(workType!=null){
-            user.setWorkType(workType.getName());
-        }
-
         msg.setData(user);
 
         return msg;
@@ -141,11 +136,11 @@ public class UserController {
      */
     @RequestMapping("/getEmployeeList")
     public HttpRespMsg getEmployeeList(@RequestParam Integer departmentId,@RequestParam(defaultValue = "0") Integer matchingType, String keyword,
-                                       Integer status, Integer roleId,
+                                       Integer status, Integer roleId,Integer workTypeId,
                                        Integer onlyDirect,
                                        String cursor,
                                        @RequestParam Integer pageIndex, @RequestParam Integer pageSize) throws Exception {
-        return userService.getEmployeeList(departmentId,matchingType, keyword, status, roleId, onlyDirect, cursor,pageIndex, pageSize, request);
+        return userService.getEmployeeList(departmentId,matchingType, keyword, status, roleId,workTypeId, onlyDirect, cursor,pageIndex, pageSize, request);
     }
 
     @RequestMapping("/getSimpleActiveUserList")
@@ -215,11 +210,11 @@ public class UserController {
      */
     @RequestMapping("/insertUser")
     public HttpRespMsg insertUser(String id, @RequestParam String name, String phone,
-                                  @RequestParam Integer roleId, Double monthCost, Double cost,
+                                  @RequestParam Integer roleId,@RequestParam Integer workTypeId, Double monthCost, Double cost,
                                   Integer departmentId, Integer salaryType, String costApplyDate,
                                     String position, String certJson,String inductionDate,String superiorId,
                                     String plate1,String plate2,String plate3,String plate4,String plate5, String jobNumber, String inactiveDate) {
-        return userService.insertUser(id, name, phone, roleId, monthCost, cost, departmentId, salaryType, costApplyDate,
+        return userService.insertUser(id, name, phone, roleId, workTypeId, monthCost, cost, departmentId, salaryType, costApplyDate,
                     position, certJson, request,inductionDate,superiorId,plate1, plate2, plate3,plate4,plate5, jobNumber, inactiveDate);
     }
 

+ 42 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/UserWorkTypeController.java

@@ -1,10 +1,21 @@
 package com.management.platform.controller;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.management.platform.entity.User;
+import com.management.platform.entity.UserWorkType;
+import com.management.platform.mapper.UserMapper;
+import com.management.platform.service.UserWorkTypeService;
+import com.management.platform.util.HttpRespMsg;
+import org.apache.http.HttpRequest;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
 /**
  * <p>
  *  前端控制器
@@ -16,6 +27,37 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 @RequestMapping("/user-work-type")
 public class UserWorkTypeController {
+    @Resource
+    private UserWorkTypeService userWorkTypeService;
+    @Resource
+    private HttpServletRequest request;
+    @Resource
+    private UserMapper userMapper;
+
+    @RequestMapping("getAll")
+    public HttpRespMsg getAll(){
+        HttpRespMsg msg=new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("Token"));
+
+        List<UserWorkType> typeList = userWorkTypeService.list(new LambdaQueryWrapper<UserWorkType>().eq(user.getCompanyId() != null, UserWorkType::getCompanyId, user.getCompanyId()));
+
+        msg.setData(typeList);
+        return msg;
+    }
+
+    @RequestMapping("updateOrInsert")
+    public HttpRespMsg update(UserWorkType workType){
+       return userWorkTypeService.updateOrInsert(workType,request);
+    }
+
+    @RequestMapping("delete")
+    public HttpRespMsg delete(Integer id){
+        return userWorkTypeService.delete(id,request);
+    }
 
+    @RequestMapping("getById")
+    public HttpRespMsg getById(Integer id){
+        return userWorkTypeService.getInfo(id,request);
+    }
 }
 

+ 1 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/User.java

@@ -303,7 +303,7 @@ public class User extends Model<User> {
     /**
      * 工种名
      */
-    @TableField(exist = false)
+    @TableField("work_type")
     private String workType;
 
     @Override

+ 3 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/UserWorkType.java

@@ -30,6 +30,9 @@ public class UserWorkType extends Model<UserWorkType> {
     @TableField("name")
     private String name;
 
+    @TableField("company_id")
+    private Integer companyId;
+
 
     @Override
     protected Serializable pkVal() {

+ 1 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/mapper/UserMapper.java

@@ -22,7 +22,7 @@ import java.util.Map;
 public interface UserMapper extends BaseMapper<User> {
     List<Map<String, Object>> getUserByDepartment(Page page,
                                                   @Param("companyId") Integer companyId,
-                                                  @Param("departmentId") Integer departmentId,Integer matchingType, String keyword, Integer status, @Param("roleId") Integer roleId);
+                                                  @Param("departmentId") Integer departmentId, Integer matchingType, String keyword, Integer status, @Param("roleId") Integer roleId, @Param("workTypeId") Integer workTypeId);
 
     List<Map<String, Object>> getUserByDepartmentList(Page page,
                                                       @Param("companyId") Integer companyId,

+ 4 - 4
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/UserService.java

@@ -27,7 +27,7 @@ public interface UserService extends IService<User> {
 
     HttpRespMsg getUserInfo(String id);
 
-    HttpRespMsg getEmployeeList(Integer departmentId,Integer matchingType, String keyword, Integer status, Integer roleId, Integer onlyDirect, String cursor, Integer pageIndex, Integer pageSize, HttpServletRequest request) throws Exception;
+    HttpRespMsg getEmployeeList(Integer departmentId, Integer matchingType, String keyword,  Integer status, Integer roleId,Integer workTypeId, Integer onlyDirect, String cursor, Integer pageIndex, Integer pageSize, HttpServletRequest request) throws Exception;
 
     HttpRespMsg deleteUser(String userId, HttpServletRequest request);
 
@@ -35,10 +35,10 @@ public interface UserService extends IService<User> {
 
     HttpRespMsg insertCompany(String companyName, String name, String phone, String vcode, String pwd, Integer type, String from);
 
-    HttpRespMsg insertUser(String id, String name, String phone, Integer roleId, Double monthCost, Double cost, Integer departmentId,
+    HttpRespMsg insertUser(String id, String name, String phone,  Integer roleId, Integer  workTypeId, Double monthCost, Double cost, Integer departmentId,
                            Integer salaryType, String costApplyDate, String position, String certJson,
-                           HttpServletRequest request,String inductionDate, String superiorId,String plate1,
-                           String plate2,String plate3,String plate4,String plate5, String jobNumber, String inactiveDate);
+                           HttpServletRequest request, String inductionDate, String superiorId, String plate1,
+                           String plate2, String plate3, String plate4, String plate5, String jobNumber, String inactiveDate);
 
     HttpRespMsg importUser(MultipartFile multipartFile, HttpServletRequest request);
 

+ 8 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/UserWorkTypeService.java

@@ -2,6 +2,9 @@ package com.management.platform.service;
 
 import com.management.platform.entity.UserWorkType;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.management.platform.util.HttpRespMsg;
+
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * <p>
@@ -13,4 +16,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface UserWorkTypeService extends IService<UserWorkType> {
 
+    HttpRespMsg updateOrInsert(UserWorkType workType, HttpServletRequest request);
+
+    HttpRespMsg delete(Integer id,HttpServletRequest request);
+
+    HttpRespMsg getInfo(Integer id, HttpServletRequest request);
 }

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

@@ -50,7 +50,6 @@ public class ProdProcedureServiceImpl extends ServiceImpl<ProdProcedureMapper, P
         long count = prodProcedureList.stream().filter(prodProcedure -> map.put(prodProcedure.getName(), prodProcedure) == null).count();
         if(count==prodProcedureList.size()){
 
-
             prodProcedureList.stream().forEach(prodProcedure -> {
                 user.getCompanyId();
                 prodProcedure.setCompanyId(user.getCompanyId());
@@ -72,15 +71,17 @@ public class ProdProcedureServiceImpl extends ServiceImpl<ProdProcedureMapper, P
                 //2.要删除的id
                 List<ProdProcedure> deleteList = oldList.stream().filter(old -> {
                     for (ProdProcedure prodProcedure : prodProcedureList) {
-                        if (prodProcedure.getId() == old.getId()) {
+                        System.out.println(old.getId()+"=="+prodProcedure.getId());
+                        if (old.getId()==prodProcedure.getId() ) {
                             return false;
                         }
                     }
                     return true;
 
                 }).collect(Collectors.toList());
-                if (deleteList != null && deleteList.size() > 0) {
 
+                if (deleteList != null && deleteList.size() > 0) {
+                    System.out.println("deleteList"+deleteList);
                     List<Integer> deleteIdList = deleteList.stream().map(delete -> delete.getId()).collect(Collectors.toList());
                     prodProcedureMapper.deleteBatchIds(deleteIdList);
                 }
@@ -88,11 +89,13 @@ public class ProdProcedureServiceImpl extends ServiceImpl<ProdProcedureMapper, P
                 //3.编辑的id
                 List<ProdProcedure> updateList = prodProcedureList.stream().filter(prodProcedure -> prodProcedure.getId() != null).collect(Collectors.toList());
                 if (updateList != null&&updateList.size()>0) {
+                    System.out.println("updateList"+updateList);
                     this.updateBatchById(updateList);
                 }
                 //4.新增的id
                 List<ProdProcedure> insertList = prodProcedureList.stream().filter(prodProcedure -> prodProcedure.getId() == null).collect(Collectors.toList());
                 if (insertList != null&&insertList.size()>0) {
+                    System.out.println("insertList"+insertList);
                     this.saveBatch(insertList);
                 }
             }else{

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

@@ -348,7 +348,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
             sheet = workbook.getSheetAt(1);
             rowNum = sheet.getLastRowNum();
 
-            for(int indexNum=1;indexNum<rowNum;indexNum++){
+            for(int indexNum=1;indexNum<=rowNum;indexNum++){
                 XSSFRow row = sheet.getRow(indexNum);
                 //跳过空行
                 if(row==null){
@@ -425,30 +425,26 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
                 prodProcedureList.add(prodProcedure);
             }
 
-            //检查同一版本的同一版本号工序中有没有重复的
+            //检查一个产品是否只有一个工序版本号中有没有重复的
             for (ProdProcedure prodProcedure : prodProcedureList) {
 
-                if(prodProcedureList.stream().filter(procedure ->{
-                    return prodProcedure.getName().equals(procedure.getName())&&!prodProcedure.getVersionNumber().equals(procedure.getVersionNumber());
-                } ).count()>0){
+                if(prodProcedureList.stream().filter(procedure -> {
+                    return prodProcedure.getProductName().equals(procedure.getProductName()) && !prodProcedure.getVersionNumber().equals(procedure.getVersionNumber());
+                }).count()>0){
+
                     msg.setError("一个产品只能导入一个产品号");
                     return msg;
                 }
 
-
-
-
-                long count = prodProcedureList.stream()
+                //检查是否有重复的工序
+                if(prodProcedureList.stream()
                         .filter(procedure -> procedure.getProductName().equals(prodProcedure.getProductName()) && procedure.getVersionNumber().equals(prodProcedure.getVersionNumber()) && procedure.getName().equals(prodProcedure.getName()))
-                        .count();
-                if(count>1){
+                        .count()>1){
                     msg.setError("产品"+prodProcedure.getProductName()+"的"+prodProcedure.getVersionNumber()+"版本工序重复了");
                     return msg;
                 }
             }
 
-            System.out.println(productList);
-            System.out.println(prodProcedureList);
             //插入数据
             if(saveBatch(productList)) {
 
@@ -621,12 +617,12 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
             }
 
 
-      *//*      //导出excel
+            //导出excel
             String result="系统提示:Excel文件导出成功!";
             //生成Excel文件
             String fileUrlSuffix = "产品详情"+System.currentTimeMillis();
-            return excelExportService.exportGeneralExcelByTitleAndList(wxCorpInfo,fileUrlSuffix,dataList,path);*//*
-//
+            return excelExportService.exportGeneralExcelByTitleAndList(wxCorpInfo,fileUrlSuffix,dataList,path);
+
             String title= "产品详情"+System.currentTimeMillis();
             String fileName= title+".xlsx";
             String path="D://cloud/upload/";

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

@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.constant.Constant;
-import com.management.platform.controller.WeiXinCorpController;
 import com.management.platform.entity.*;
 import com.management.platform.entity.vo.SysRichFunction;
 import com.management.platform.entity.vo.UserVO;
@@ -19,8 +18,6 @@ import me.chanjar.weixin.mp.api.WxMpService;
 import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
 import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
 import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
-import org.apache.commons.collections4.Put;
-import org.apache.commons.io.FileUtils;
 import org.apache.poi.hssf.usermodel.*;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.ss.usermodel.*;
@@ -36,7 +33,6 @@ import org.springframework.ldap.core.LdapTemplate;
 import org.springframework.ldap.filter.EqualsFilter;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.client.RestTemplate;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.servlet.ModelAndView;
@@ -211,7 +207,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     private TaskGroupService taskGroupService;
     @Resource
     private ParticipationService participationService;
-
+    @Resource
+    private UserWorkTypeMapper workTypeMapper;
     @Resource
     private LdapTemplate ldapTemplate;
 
@@ -744,7 +741,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 
     //获取员工的列表
     @Override
-    public HttpRespMsg getEmployeeList(Integer departmentId,Integer matchingType,String keyword, Integer status, Integer roleId, Integer onlyDirect, String cursor, Integer pageIndex, Integer pageSize, HttpServletRequest request) throws Exception {
+    public HttpRespMsg getEmployeeList(Integer departmentId, Integer matchingType, String keyword,  Integer status, Integer roleId,Integer workTypeId, Integer onlyDirect, String cursor, Integer pageIndex, Integer pageSize, HttpServletRequest request) throws Exception {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         Boolean flag = false;
         if (status != null && status.equals(2)){
@@ -784,11 +781,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 Page<User> page = new Page<>(pageIndex, pageSize);
                 if (departmentId == -1) {
                     //单独查找全部
-                    list = userMapper.getUserByDepartment(page, companyId, null,matchingType, keyword, status, roleId);
+                    list = userMapper.getUserByDepartment(page, companyId, null,matchingType, keyword, status, roleId,workTypeId);
                     total = page.getTotal();
                 } else if (departmentId == 0) {
                     //单独查找0, 未分配的
-                    list = userMapper.getUserByDepartment(page, companyId, departmentId,matchingType, keyword, status, roleId);
+                    list = userMapper.getUserByDepartment(page, companyId, departmentId,matchingType, keyword, status, roleId, workTypeId);
                     total = page.getTotal();
                 } else {
                     //范围查找
@@ -1181,9 +1178,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 
     //新增或修改用户
     @Override
-    public HttpRespMsg insertUser(String targetId, String name, String phone, Integer roleId, Double monthCost, Double cost,
-                                  Integer departmentId, Integer salaryType, String costApplyDate, String position, String certJson, HttpServletRequest request,String inductionDate,
-                                  String superiorId,   String plate1,String plate2,String plate3,String plate4,String plate5, String jobNumber, String inactiveDate) {
+    public HttpRespMsg insertUser(String targetId, String name, String phone, Integer roleId, Integer  workTypeId, Double monthCost, Double cost,
+                                  Integer departmentId, Integer salaryType, String costApplyDate, String position, String certJson, HttpServletRequest request, String inductionDate,
+                                  String superiorId, String plate1, String plate2, String plate3, String plate4, String plate5, String jobNumber, String inactiveDate) {
+
+
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         try {
@@ -1222,6 +1221,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                                 .setPhone(phone)
                                 .setRoleId(roleId)
                                 .setRoleName(sysRoleMapper.selectById(roleId).getRolename())
+                                .setWorkTypeId(workTypeId)
+                                .setWorkType(workTypeMapper.selectById(workTypeId).getName())
                                 .setCompanyId(creator.getCompanyId())
                                 .setMonthCost(monthCostValue)
                                 .setCost(costValue)
@@ -1303,6 +1304,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                         .setPhone(phone)
                         .setRoleId(roleId)
                         .setRoleName(sysRoleMapper.selectById(roleId).getRolename())
+                        .setWorkTypeId(workTypeId)
+                        .setWorkType(workTypeMapper.selectById(workTypeId).getName())
                         .setMonthCost(monthCostValue)
                         .setCost(costValue)
                         .setPosition(position)

+ 81 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/UserWorkTypeServiceImpl.java

@@ -1,11 +1,19 @@
 package com.management.platform.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.management.platform.entity.User;
 import com.management.platform.entity.UserWorkType;
+import com.management.platform.mapper.UserMapper;
 import com.management.platform.mapper.UserWorkTypeMapper;
 import com.management.platform.service.UserWorkTypeService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.util.HttpRespMsg;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
 /**
  * <p>
  *  服务实现类
@@ -16,5 +24,78 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class UserWorkTypeServiceImpl extends ServiceImpl<UserWorkTypeMapper, UserWorkType> implements UserWorkTypeService {
+    @Resource
+    private UserWorkTypeMapper workTypeMapper;
+    @Resource
+    private UserMapper userMapper;
+    @Override
+    public HttpRespMsg updateOrInsert(UserWorkType workType, HttpServletRequest request) {
+        HttpRespMsg msg=new HttpRespMsg();
+        String token = request.getHeader("Token");
+        Integer companyId = userMapper.selectById(token).getCompanyId();
+
+        int count = count(new LambdaQueryWrapper<UserWorkType>()
+                .eq(StringUtils.isNoneBlank(workType.getName()), UserWorkType::getName, workType.getName())
+                .eq(companyId!=null,UserWorkType::getCompanyId,companyId)
+        );
+
+        if(workType.getId()!=null){
+           if(count>1){
+               msg.setError("改工种已存在");
+           }else{
+
+               workTypeMapper.updateById(workType);
+               User user=new User();
+               user.setWorkType(workType.getName());
+
+               userMapper.update(user,new LambdaQueryWrapper<User>()
+                       .eq(true,User::getWorkTypeId,workType.getId())
+                       .eq(companyId!=null,User::getCompanyId,companyId)
+               );
+           }
+
+        }else{
+            if(count!=0){
+                msg.setError("改工种已存在");
+            }else{
+                workType.setCompanyId(companyId);
+                workTypeMapper.insert(workType);
+            }
+
+        }
+
+         msg.setData(workType);
+        return msg;
+    }
+
+
+    @Override
+    public HttpRespMsg delete(Integer id, HttpServletRequest request) {
+        HttpRespMsg msg=new HttpRespMsg();
+
+        String token = request.getHeader("Token");
+        User user = userMapper.selectById(token);
+        if(userMapper.selectCount(new LambdaQueryWrapper<User>().eq(id!=null,User::getWorkTypeId,id)
+                .eq(user.getCompanyId()!=null,User::getCompanyId,user.getCompanyId()))>0){
+            msg.setError("改工种正在使用,不能删除");
+        }else{
+            workTypeMapper.deleteById(id);
+        }
+        return msg;
+    }
+
+    @Override
+    public HttpRespMsg getInfo(Integer id, HttpServletRequest request) {
+        HttpRespMsg msg=new HttpRespMsg();
+
+        String token = request.getHeader("Token");
+        User user = userMapper.selectById(token);
+        UserWorkType userWorkType = workTypeMapper.selectOne(new LambdaQueryWrapper<UserWorkType>()
+                .eq(user.getCompanyId() != null, UserWorkType::getCompanyId, user.getCompanyId())
+                .eq(id != null, UserWorkType::getId, id)
+        );
+        msg.setData(userWorkType);
 
+        return msg;
+    }
 }

+ 4 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/UserMapper.xml

@@ -58,7 +58,7 @@
     </sql>
     <!--单独分页获取人员-->
     <select id="getUserByDepartment" resultType="java.util.Map">
-        SELECT a.id, a.role_id as roleId, a.role_name as roleName, a.name, a.phone, a.portrait_url AS portraitUrl, a.role, a.company_id AS companyId, a.cost,
+        SELECT a.id,a.gender, a.role_id as roleId, a.role_name as roleName, a.work_type_id as workTypeId, a.work_type as workType, a.name, a.phone, a.portrait_url AS portraitUrl, a.role, a.company_id AS companyId, a.cost,
         a.department_id AS departmentId, b.department_name AS departmentName, a.department_cascade AS departmentCascade,
         a.month_cost as monthCost, a.salary_type as salaryType, a.is_active as isActive,date_format(a.`inactive_date`, '%Y-%m-%d') AS inactiveDate, a.cost_apply_date as costApplyDate,a.plate1,a.plate2,a.plate3,a.plate4,a.plate5,
         a.job_number as jobNumber, DATE_FORMAT(a.create_time, '%Y-%m-%d %H:%m')  as createTime
@@ -88,6 +88,9 @@
         <if test="roleId != null">
             AND a.role_id = #{roleId}
         </if>
+        <if test="workTypeId!= null">
+            AND a.work_type_id = #{workTypeId}
+        </if>
     </select>
 
     <!--范围分页获取人员-->

+ 146 - 69
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/components/chooseSomeone.vue

@@ -1,8 +1,8 @@
 <template>
   <div class="chooseSomeone">
     <div class="chooseSomeone_selsect">
-      <van-search v-model="selectValue" shape="round" background="#F4F4F4" placeholder="请输入姓名"
-        @search="onSearch"></van-search>
+      <van-search v-model.trim="selectValue" shape="round" background="#F4F4F4" placeholder="请输入姓名" @search="onSearch"
+        @input="onSearch"></van-search>
     </div>
     <div class="chooseSomeone_Con contentRoll">
       <!-- 单选 -->
@@ -26,24 +26,40 @@
       </van-checkbox-group>
 
       <!-- tree -->
-      <div class="treeBox" v-if="newGroupView == 3">
-        <div class="treeBox_tree_text" v-if="!newGroupViewBack && groupView" @click="newGroupViewBackCli(true, groupView)"><van-icon name="arrow-left"/>返回</div>
+      <div class="treeBox" v-show="newGroupView == 3">
+        <div class="treeBox_tree_text" v-if="!newGroupViewBack && groupView"
+          @click="newGroupViewBackCli(true, groupView)"><van-icon name="arrow-left" />返回</div>
         <div class="treeBox_tree">
-          <el-tree v-model="treeVal" show-checkbox node-key="id" :data="personnelTree" :props="defaultProps"></el-tree>
+          <el-tree ref="tree" v-model="treeVal" show-checkbox node-key="id" :data="personnelTree" :props="defaultProps"
+            :filter-node-method="filterNode">
+            <span class="custom-tree-node" slot-scope="{ node, data }">
+              <span>
+                {{ node.label }}
+              </span>
+            </span>
+          </el-tree>
         </div>
       </div>
     </div>
     <div class="chooseSomeone_btn" v-if="newGroupViewBack">
       <van-button round size="small" v-if="newGroupViewBack" @click="newGroupViewBackCli(false, 3)">从其他工位选择员工</van-button>
-      <van-button round type="info" size="small"  @click="handClick()">确定</van-button>
+      <van-button round type="info" size="small" :loading="loadingBtn" @click="handClick()">确定</van-button>
     </div>
     <div class="chooseSomeone_btn" v-if="!newGroupViewBack">
-      <van-button round type="info" size="small" style="width: 100%;">确定</van-button>
+      <van-button round type="info" size="small" style="width: 100%;" @click="treeHandClick()">确定</van-button>
     </div>
   </div>
 </template>
 
 <script>
+/**
+ * peopleList 数据格式要求
+ * 传过来的数据必须包含 以下四个字段
+ * id: 人员id
+ * name: 人员姓名
+ * phone: 人员电话
+ * jobNumber: 人员工号
+ */
 export default {
   props: {
     groupView: {
@@ -58,8 +74,9 @@ export default {
       type: Array,
       default: () => []
     },
-    teamAllocation:{
-      type: Function
+    peopleListId: { // 选中的Id
+      type: Array,
+      default: () => []
     },
   },
   components: {},
@@ -71,41 +88,8 @@ export default {
       treeVal: [],
       // 人员数组
       personnelList: [],
-      personnelTree: [{
-        label: '一级 1',
-        children: [{
-          label: '二级 1-1',
-          children: [{
-            label: '三级 1-1-1'
-          }]
-        }]
-      }, {
-        label: '一级 2',
-        children: [{
-          label: '二级 2-1',
-          children: [{
-            label: '三级 2-1-1'
-          }]
-        }, {
-          label: '二级 2-2',
-          children: [{
-            label: '三级 2-2-1'
-          }]
-        }]
-      }, {
-        label: '一级 3',
-        children: [{
-          label: '二级 3-1',
-          children: [{
-            label: '三级 3-1-1'
-          }]
-        }, {
-          label: '二级 3-2',
-          children: [{
-            label: '三级 3-2-1'
-          }]
-        }]
-      }],
+      personnelTree: [],
+      newPersonnelTree: [],
       defaultProps: {
         children: 'children',
         label: 'label'
@@ -113,47 +97,138 @@ export default {
 
       newGroupView: '', // 组件传过来的值
       newGroupViewBack: '', // 组件传过来的值
+
+      loadingBtn: false // 确定按钮loading
     };
   },
   computed: {},
-  watch: {},
+  watch: {
+    selectValue(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
   created() { },
-  mounted() { 
-    this.newGroupView = JSON.parse(JSON.stringify(this.groupView)) 
+  mounted() {
+    this.newGroupView = JSON.parse(JSON.stringify(this.groupView))
     this.newGroupViewBack = JSON.parse(JSON.stringify(this.groupViewBack))
     this.personnelList = JSON.parse(JSON.stringify(this.peopleList))
-   },
+    let newPpeopleListId = JSON.parse(JSON.stringify(this.peopleListId))
+    if (newPpeopleListId.length > 0) {
+      if (this.groupView == 1) {
+        this.radioVal = newPpeopleListId[0]
+      } else if (this.groupView == 2) {
+        this.groupVal = newPpeopleListId
+      } else if (this.groupView == 3) {
+        // tree 额外处理
+        console.log('tree 额外处理')
+      }
+    }
+    console.log(this.groupVal)
+    if (this.peopleList.length <= 0) {
+      this.getPeople()
+    }
+    this.getDepartmentPersonnel()
+  },
   methods: {
     onSearch() {
-      console.log('搜索', this.selectValue)
+      if (!this.selectValue) {
+        this.personnelList = JSON.parse(JSON.stringify(this.peopleList))
+        return
+      }
+      if (this.groupView != 3) {
+        this.personnelList = this.personnelList.filter(item => {
+          return item.name.indexOf(this.selectValue) != -1 || item.jobNumber.indexOf(this.selectValue) != -1
+        })
+      }
+      console.log(this.personnelList)
+    },
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
     },
     newGroupViewBackCli(flg, i) {
       this.newGroupViewBack = flg
       this.newGroupView = i
+      this.$refs.tree.setCheckedKeys(this.groupVal)
     },
     // 获取所有人员
     getPeople() {
       this.$axios.post('/user/getSimpleActiveUserList', {})
-      .then(res => {
-        if (res.code == "ok") {
-          if(!this.peopleList) {
-            this.peopleList = res.data.map(item => {
-              return {
-                name: item.name,
-                id: item.id,
-                phone: item.phone,
-                jobNumber: item.jobNumber
-              }
-            })
+        .then(res => {
+          if (res.code == "ok") {
+            if (!this.peopleList) {
+              this.peopleList = res.data.map(item => {
+                return {
+                  name: item.name,
+                  id: item.id,
+                  phone: item.phone,
+                  jobNumber: item.jobNumber
+                }
+              })
+            }
+          } else {
+            this.$toast.clear();
+            this.$toast.fail(res.msg);
           }
-        } else {
-          this.$toast.clear();
-          this.$toast.fail(res.msg);
+        }).catch(err => { this.$toast.clear(); });
+    },
+    // 获取部门人员
+    getDepartmentPersonnel() {
+      this.$axios.post('/department/listAllMemb', {})
+        .then(res => {
+          if (res.code == "ok") {
+            let list = res.data;
+            this.setUserToDept(res.data)
+            this.personnelTree = list
+            this.newPersonnelTree = JSON.parse(JSON.stringify(list))
+            console.log(this.personnelTree)
+          } else {
+            this.$toast.clear();
+            this.$toast.fail(res.msg);
+          }
+        }).catch(err => { this.$toast.clear(); });
+    },
+    // 递归设置人员到部门
+    setUserToDept(list) {
+      for (var i in list) {
+        if (list[i].children != null) {
+          this.setUserToDept(list[i].children);
+        }
+
+        if (list[i].userList != null) {
+          if (list[i].children == null) {
+            list[i].children = [];
+          }
+          list[i].userList.forEach(element => {
+            var obj = { id: element.id, label: element.name, parentId: element.departmentId, isUser: 1 };
+            list[i].children.push(obj);
+          });
         }
-      }).catch(err => { this.$toast.clear(); });
+      }
     },
-    handClick () {
-      this.teamAllocation(this.groupVal); 
+    // 单选和复选点击确定触发的事件
+    handClick() {
+      let arr = this.groupView == 1 ? [this.radioVal] : this.groupVal
+      let newArr = this.personnelList.filter(item => {
+        return arr.includes(item.id)
+      })
+      this.loadingBtn = true
+      this.$emit('ChooseSomeoneChanhe', newArr)
+    },
+    treeHandClick() {
+      console.log(this.treeVal)
+      console.log(this.$refs.tree.getCheckedNodes())
+      let arr = this.$refs.tree.getCheckedNodes()
+      let newArr = arr.map(item => {
+        return {
+          id: item.id,
+          name: item.label || '',
+          phone: item.phone || '',
+          jobNumber: item.jobNumber || ''
+        }
+      })
+      this.loadingBtn = true
+      this.$emit('ChooseSomeoneChanhe', newArr)
     }
   },
 };
@@ -189,12 +264,14 @@ export default {
       overflow-y: auto;
       padding: 10px;
     }
-    .treeBox_tree_text{
+
+    .treeBox_tree_text {
       font-size: 14px;
       color: #999;
       display: flex;
       align-items: center;
       padding: 8px;
+
       .van-icon {
         margin-right: 6px;
       }
@@ -205,6 +282,7 @@ export default {
       height: 30px;
     }
   }
+
   .chooseSomeone_Con {
     flex: 1;
     background-color: #fff;
@@ -255,5 +333,4 @@ export default {
       width: 48%;
     }
   }
-}
-</style>
+}</style>

+ 42 - 9
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/InsertionPlan/InsertionPlan.vue

@@ -1,10 +1,11 @@
 <template>
   <div class="flexCoum">
-    <van-nav-bar title="插单计划" left-text="返回" right-text="新建" @click-left="back" fixed left-arrow @click-right="add" />
+    <van-nav-bar title="插单计划" left-text="返回" @click-left="back" fixed left-arrow v-if="!user.beDeptList" />
+    <van-nav-bar title="插单计划" left-text="返回" right-text="新建" @click-left="back" v-if="user.beDeptList" fixed left-arrow @click-right="add" />
     <div class="InsertionPlan flexCoum-box">
       <div class="InsertionPlanBox contentRoll">
-        <div v-for="item,index in 20" :key="index" class="InsertionPlanBox_item">
-          <InsertionPlan-Item></InsertionPlan-Item>
+        <div v-for="item,index in planList" :key="index" class="InsertionPlanBox_item">
+          <InsertionPlan-Item :planList="item"></InsertionPlan-Item>
         </div>
       </div>
     </div>
@@ -20,13 +21,16 @@ export default {
   },
   data() {
     return {
-
+      user: JSON.parse(localStorage.getItem('userInfo')),
+      planList: [],
     };
   },
   computed: {},
   watch: {},
   created() {},
-  mounted() {},
+  mounted() {
+    this.getPlanList()
+  },
   methods: {
     back() {
       this.$router.go(-1);
@@ -35,11 +39,40 @@ export default {
     add() {
       this.$router.push({
         name: '计划新增',
-        params: {
-          text: '传过来的值'
-        }
       })
-    }
+    },
+    getPlanList() {
+      this.$axios.post('/plan/list', {
+        pageIndex: 0,
+        pageSize: 10000,
+        planType: 2,
+      })
+      .then(res => {
+        if (res.code == "ok") {
+          res.data.records.forEach(item => { item.flg = false })
+          this.planList = res.data.records;
+        } else {
+          this.$toast.clear();
+          this.$toast.fail(res.msg);
+        }
+      }).catch(err => { this.$toast.clear(); });
+    },
+    // 返回当天的日期 格式:yyyy-MM-dd
+    getNowFormatDate() {
+      var date = new Date();
+      var seperator1 = "-";
+      var year = date.getFullYear();
+      var month = date.getMonth() + 1;
+      var strDate = date.getDate();
+      if (month >= 1 && month <= 9) {
+        month = "0" + month;
+      }
+      if (strDate >= 0 && strDate <= 9) {
+        strDate = "0" + strDate;
+      }
+      var currentdate = year + seperator1 + month + seperator1 + strDate;
+      return currentdate;
+    },
   },
 };
 </script>

+ 128 - 32
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/InsertionPlan/InsertionPlanAdd.vue

@@ -2,42 +2,43 @@
   <div class="flexCoum">
     <van-nav-bar title="插单计划" left-text="返回" @click-left="back" fixed left-arrow />
     <!-- 表单 -->
-    <van-form class="InsertionPlan flexCoum-box" label-width="7em" input-align="right" validate-first @failed="onFailed">
+    <van-form class="InsertionPlan flexCoum-box" label-width="7em" input-align="right" @submit="onSubmit" validate-first
+      @failed="onFailed">
       <!-- 内容 -->
       <div class="InsertionPlanBox contentRoll">
-        <van-field v-model.trim="inserFrom.number" :readonly="false" label="任务变更通知号" placeholder="请输入"
+        <van-field v-model.trim="inserFrom.taskChangeNoticeNum" :readonly="false" label="任务变更通知号" placeholder="请输入"
           :rules="[{ pattern }]" />
-        <van-field v-model.trim="inserFrom.number" :readonly="false" label="任务名称" placeholder="请输入"
+        <van-field v-model.trim="inserFrom.taskName" :readonly="false" label="任务名称" placeholder="请输入"
           :rules="[{ pattern }]" />
-        <van-field readonly clickable :readonly="false" v-model.trim="inserFrom.value" label="任务类型"
-          placeholder="请选择" @click="selectClick()" />
-        <van-field v-model.trim="inserFrom.number" :readonly="false" label="计划人数" placeholder="请输入"
+        <van-field readonly clickable :readonly="false" v-model.trim="inserFrom.taskTypeName" label="任务类型"
+          placeholder="请选择" @click="selectClick('taskTypeId', 'taskTypeName', 'taskTypeNameColumns')" />
+        <van-field v-model.trim="inserFrom.planManNum" :readonly="false" label="计划人数" placeholder="请输入"
           :rules="[{ pattern }]" />
-        <van-field v-model.trim="inserFrom.number" type="number" :readonly="false" label="数量"
-          placeholder="请输入" :rules="[{ pattern }]" />
-        <van-field v-model.trim.number="inserFrom.number" type="number" :readonly="false" label="计划工时"
+        <van-field v-model.trim="inserFrom.num" type="number" :readonly="false" label="数量" placeholder="请输入"
+          :rules="[{ pattern }]" />
+        <van-field v-model.trim.number="inserFrom.planWorkHour" type="number" :readonly="false" label="计划工时"
           placeholder="请输入" :rules="[{ pattern }]" />
-        <van-field v-model.trim.number="inserFrom.number" type="number" :readonly="false" label="单价"
+        <van-field v-model.trim.number="inserFrom.moneyOfJob" type="number" :readonly="false" label="单价"
           :placeholder="`请输入  元/小时`" :rules="[{ pattern }]" />
-        <van-field readonly clickable :readonly="false" v-model.trim="inserFrom.value" label="质检类型"
-          placeholder="请选择" @click="selectClick()" />
-        <van-field v-model.trim="inserFrom.gong" :readonly="true" label="工位" placeholder="请输入" />
-        <van-field v-model.trim="inserFrom.zhang" :readonly="true" label="工长" placeholder="请输入" />
-        <van-field :readonly="false" :formatter="formatDate"
-          v-model="inserFrom.statrTime" label="开工时间" placeholder="请选择" @click="selectTime()" />
-        <van-field :readonly="false" :formatter="formatDate"
-          v-model="inserFrom.statrTime" label="完工时间" placeholder="请选择" @click="selectTime()" />
-        <van-field v-model="inserFrom.message" rows="4" autosize label="描述" type="textarea" placeholder="请输入" />
+        <van-field readonly clickable :readonly="false" v-model.trim="inserFrom.checkTypeName" label="质检类型"
+          placeholder="请选择" @click="selectClick('checkType', 'checkTypeName', 'checkTypeNameColumns')" />
+        <van-field v-model.trim="inserFrom.stationIdName" :readonly="true" label="工位" placeholder="请输入" />
+        <van-field v-model.trim="inserFrom.foremanName" :readonly="true" label="工长" placeholder="请输入" />
+        <van-field :readonly="false" :formatter="formatDate" v-model="inserFrom.startDate" label="开工时间" placeholder="请选择"
+          @click="selectTime('startDate')" />
+        <van-field :readonly="false" :formatter="formatDate" v-model="inserFrom.endDate" label="完工时间" placeholder="请选择"
+          @click="selectTime('endDate')" />
+        <van-field v-model="inserFrom.describtion" rows="4" autosize label="描述" type="textarea" placeholder="请输入" />
       </div>
       <!-- 提交按钮 -->
       <div class="InsertionPlanBtn">
-        <van-button round block type="info" native-type="submit">提交</van-button>
+        <van-button round block type="info" :loading="loadingBtn" native-type="submit">提交</van-button>
       </div>
     </van-form>
 
     <!-- 选择器 -->
     <van-popup v-model="showPicker" position="bottom">
-      <van-picker show-toolbar :columns="columns" @confirm="onConfirm" @cancel="showPicker = false" />
+      <van-picker show-toolbar value-key="name" :columns="columns" @confirm="onConfirm" @cancel="showPicker = false" />
     </van-popup>
     <!-- 选择时间 -->
     <van-calendar v-model="showPickerDate" @confirm="onConfirmDate" />
@@ -51,15 +52,38 @@ export default {
   data() {
     return {
       inserFrom: {
-        number: '',
-        gong: '工位A01',
-        zhang: '张三',
-        message: '',
+        taskChangeNoticeNum: '',
+        taskName: '',
+        taskTypeId: '',
+        planManNum: '',
+        num: '',
+        planWorkHour: '',
+        moneyOfJob: '',
+        checkType: '',
+        startDate: '',
+        endDate: '',
+        describtion: '',
+
+        taskTypeName: '',
+        checkTypeName: '',
+
+        stationId: JSON.parse(localStorage.getItem('userInfo')).beDeptList[0].departmentId || '',
+        stationIdName: JSON.parse(localStorage.getItem('userInfo')).beDeptList[0].departmentName || '',
+        foremanName: JSON.parse(localStorage.getItem('userInfo')).name,
       },
-      pattern: /\d{6}/,
-      columns: ['杭州', '宁波', '温州', '嘉兴', '湖州'],
+      pattern: /\S/,
+      columns: [],
       showPicker: false,
       showPickerDate: false,
+
+      loadingBtn: false,
+
+      // 选择字段名字
+      selectName: '',
+      selectNameId: '',
+
+      taskTypeNameColumns: [],
+      checkTypeNameColumns: [{ id: 0, name: '自检' }, { id: 1, name: '互检' }, { id: 2, name: '专检' }]
     };
   },
   computed: {},
@@ -67,6 +91,14 @@ export default {
   created() { },
   mounted() {
     console.log(this.$route.params)
+    if(this.$route.params.item) {
+      this.inserFrom = {
+        ...JSON.parse(JSON.stringify(this.$route.params.item)),
+      }
+      this.inserFrom.checkTypeName = this.inserFrom.checkType == 0 ? '自检' : this.inserFrom.checkType == 1 ? '互检' : '专检'
+      this.inserFrom.stationIdName = this.inserFrom.stationName
+    }
+    this.getTaskType()
   },
   methods: {
     back() {
@@ -79,25 +111,72 @@ export default {
     onFailed(errorInfo) {
       console.log('failed', errorInfo);
     },
-    selectClick() {
+    onSubmit() {
+      console.log(this.inserFrom, '将要传递的值')
+      this.loadingBtn = true
+      delete this.inserFrom.planProcedureTotals
+      delete this.inserFrom.product
+      this.$axios.post('/plan/addOrUpdatePlan', {
+        ...this.inserFrom,
+        planType: 2,
+      })
+        .then(res => {
+          this.loadingBtn = false
+          if (res.code == "ok") {
+            this.inserFrom = {
+              taskChangeNoticeNum: '',
+              taskName: '',
+              taskTypeId: '',
+              planManNum: '',
+              num: '',
+              planWorkHour: '',
+              moneyOfJob: '',
+              checkType: '',
+              startDate: '',
+              endDate: '',
+              describtion: '',
+
+              taskTypeName: '',
+              checkTypeName: '',
+
+              stationId: JSON.parse(localStorage.getItem('userInfo')).beDeptList[0].departmentId || '',
+              stationIdName: JSON.parse(localStorage.getItem('userInfo')).beDeptList[0].departmentName || '',
+              foremanName: JSON.parse(localStorage.getItem('userInfo')).name,
+            }
+            this.$toast.success('操作成功');
+        } else {
+            this.$toast.clear();
+            this.$toast.fail(res.msg);
+          }
+        }).catch(err => { this.$toast.clear(); this.loadingBtn = false });
+    },
+    selectClick(id, name, columns) {
+      this.selectName = name;
+      this.selectNameId = id;
+      this.columns = this[columns];
+
+      console.log(this.columns)
+
       this.showPicker = true;
     },
     onConfirm(value) {
       console.log(value);
-      this.inserFrom.value = value;
+      this.inserFrom[this.selectNameId] = value.id;
+      this.inserFrom[this.selectName] = value.name;
       this.showPicker = false;
     },
-    selectTime() {
+    selectTime(name) {
+      this.selectName = name;
       this.showPickerDate = true
     },
     onConfirmDate(value) {
       console.log(value);
-      this.inserFrom.statrTime =  this.formatDate(value);
+      this.inserFrom[this.selectName] = this.formatDate(value);
       this.showPickerDate = false;
     },
     // 日期格式化
     formatDate(date) {
-      if(date) {
+      if (date) {
         var date = new Date(date);
         var year = date.getFullYear();
         var month = date.getMonth() + 1;
@@ -107,6 +186,23 @@ export default {
         var formattedDate = year + "-" + month + "-" + day;
         return formattedDate
       }
+    },
+    // 获取数据
+    getTaskType() {
+      this.$axios.post('/task-type/list', {})
+        .then(res => {
+          if (res.code == "ok") {
+            this.taskTypeNameColumns = res.data.map(item => {
+              return {
+                id: item.id,
+                name: item.taskTypeName
+              }
+            });
+          } else {
+            this.$toast.clear();
+            this.$toast.fail(res.msg);
+          }
+        }).catch(err => { this.$toast.clear(); });
     }
   },
 };

+ 82 - 14
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/InsertionPlan/InsertionPlanItem.vue

@@ -1,21 +1,21 @@
 <template>
   <div class="InsertionPlanItem">
     <div class="planItem_header">
-      <div>任务一</div>
-      <div>2022-2200220202</div>
+      <div>{{ planList.taskName }}</div>
+      <div>{{ planList.startDate + '-' + planList.endDate }}</div>
     </div>
     <div class="planItem_conter" @click="toAdd()">
-      <div class="item"><p>计划人数:</p><span>2人</span></div>
-      <div class="item"><div>技术变更</div></div>
-      <div class="item"><p>数量:</p><span>5</span></div>
-      <div class="item"><p>工时:</p><span>8小时</span></div>
+      <div class="item"><p>计划人数:</p><span>{{ planList.planManNum }}人</span></div>
+      <div class="item"><div>{{ planList.taskTypeName }}</div></div>
+      <div class="item"><p>数量:</p><span>{{ planList.num }}</span></div>
+      <div class="item"><p>工时:</p><span>{{ planList.planWorkHour }}小时</span></div>
       <div class="item" style="width: 100%;">
         <p>组员:</p>
-        <span :style="`color: #1989fa`" @click.stop="distributionProp()">
-          张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山
+        <span :style="`color: #1989fa`" @click.stop="distributionProp()" v-if="planList.planProcedureTotals[0] && planList.planProcedureTotals[0].teamNames">
+          {{ planList.planProcedureTotals[0] && planList.planProcedureTotals[0].teamNames }}
           <van-icon name="edit" color="#1989fa"/>
         </span>
-        <span :style="`color: #1989fa`" v-if="false">分配</span>
+        <span :style="`color: #1989fa`" @click.stop="distributionProp()" v-if="!(planList.planProcedureTotals[0] && planList.planProcedureTotals[0].teamNames)">分配</span>
       </div>
       <div class="planItem_conter_icon">
         <van-icon name="arrow" size="20" color="#999" />
@@ -24,7 +24,7 @@
 
     <!-- 弹出层选人 -->
     <van-popup v-model="popupShow" round position="bottom" :style="{ height: '80%',background: '#F4F4F4' }" >
-      <ChooseSomeone :groupView="2" :groupViewBack="true"></ChooseSomeone>
+      <ChooseSomeone ref="ChooseSomeoneOne" :groupView="2" :groupViewBack="true" :peopleList="peopleList" @ChooseSomeoneChanhe="chooseSomeoneChanhe" :peopleListId="peopleListId"></ChooseSomeone>
     </van-popup>
   </div>
 </template>
@@ -33,31 +33,99 @@
 import ChooseSomeone from '../../../components/chooseSomeone.vue'
 export default {
   name: 'InsertionPlanItem',
-  props: {},
+  props: {
+    planList: {
+      type: Object,
+      default: () => {}
+    }
+  },
   components: {
     ChooseSomeone
   },
   data() {
     return {
-      popupShow: false
+      popupShow: false,
+      peopleList: {
+        planProcedureTotals: [{teamNames: ''}]
+      },
+      peopleListId: [],
     };
   },
   computed: {},
   watch: {},
   created() {},
-  mounted() {},
+  mounted() {
+    this.getPeople()
+  },
   methods: {
     toAdd() {
       console.log('跳转')
       this.$router.push({
         name: '计划新增',
         params: {
-          text: '传过来的值'
+          item: this.planList
         }
       })
     },
     distributionProp() {
+      console.log(this.planList, '看看你')
+      this.peopleListId =  this.planList.planProcedureTotals[0] ? this.planList.planProcedureTotals[0].teamIds ? this.planList.planProcedureTotals[0].teamIds.split(',') : [] : []
       this.popupShow = true
+    },
+    // 获取人员
+    getPeople() {
+      this.$axios.post('/user/getSimpleActiveUserList', {
+        departmentId: this.planList.stationId,
+      })
+      .then(res => {
+        if (res.code == "ok") {
+          this.peopleList = res.data.map(item => {
+            return {
+              name: item.name,
+              id: item.id,
+              phone: item.phone,
+              jobNumber: item.jobNumber
+            }
+          })
+        } else {
+          JSON.parse()
+          this.$toast.clear();
+          this.$toast.fail(res.msg);
+        }
+      }).catch(err => { this.$toast.clear(); });
+    },
+    teamAllocation(item, nameArr){
+      let newPlanList = JSON.parse(JSON.stringify(this.planList))
+      delete newPlanList.planProcedureTotals[0].prodProcedure
+      this.$axios.post('/plan/teamAllocation', {
+        ...newPlanList.planProcedureTotals[0],
+        teamIds: item.join(","),
+        teamNames: nameArr.join(","),
+        planType: 2,
+      })
+      .then(res => {
+        this.$refs.ChooseSomeoneOne['loadingBtn'] = false
+        this.popupShow = false
+        if (res.code == "ok") {
+          this.planList.planProcedureTotals[0].teamNames = nameArr.join(',')
+          this.planList.planProcedureTotals[0].teamIds = teamIds.join(',')
+        } else {
+          this.$toast.clear();
+          this.$toast.fail(res.msg);
+        }
+      }).catch(err => { this.$toast.clear();this.$refs.ChooseSomeoneOne['loadingBtn'] = false, this.popupShow = false});
+    },
+    // 选中人员
+    chooseSomeoneChanhe(item) {
+      // console.log('当前点击的人员', item, this.distributionList[this.distributionIndex])
+      let arr = item.map(item => {
+        return item.id
+      })
+      let nameArr = item.map(item => {
+        return item.name
+      })
+      console.log(arr, nameArr)
+      this.teamAllocation(arr, nameArr)
     }
   },
 };

+ 31 - 9
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/todayPlan/distribution.vue

@@ -42,7 +42,7 @@
     </div>
     <!-- 弹出层选人 -->
     <van-popup v-model="popupShow" round position="bottom" :style="{ height: '80%',background: '#F4F4F4' }" >
-      <ChooseSomeone :groupView="2" :groupViewBack="true" :peopleList="peopleList" :teamAllocation="teamAllocation"></ChooseSomeone>
+      <ChooseSomeone ref="ChooseSomeone" :groupView="2" :groupViewBack="true" :peopleList="peopleList" @ChooseSomeoneChanhe="chooseSomeoneChanhe" :peopleListId="peopleListId"></ChooseSomeone>
     </van-popup>
   </div>
 </template>
@@ -65,6 +65,7 @@ export default {
       type: '', // 传过来的type
       departmentId: '', // 部门id
       peopleList: [], // 人员数据
+      peopleListId: [], // 回显人员ID
     };
   },
   computed: {},
@@ -93,6 +94,12 @@ export default {
       console.log('点击了下单计划')
     },
     distributionProp(item, index) {
+      console.log(item, index)
+      if(item.teamIds) {
+        this.peopleListId = item.teamIds.split(',')
+      } else {
+        this.peopleListId = []
+      }
       this.distributionIndex = index
       this.popupShow = true
     },
@@ -125,28 +132,43 @@ export default {
               jobNumber: item.jobNumber
             }
           })
-          console.log(this.peopleList, '人员数据')
         } else {
           this.$toast.clear();
           this.$toast.fail(res.msg);
         }
       }).catch(err => { this.$toast.clear(); });
     },
-    teamAllocation(groupVal){
-      var that=this;
-      this.$delete(this.distributionList[this.distributionIndex], 'prodProcedure')  
+    teamAllocation(item, nameArr){
+      let newDistributionList = JSON.parse(JSON.stringify(this.distributionList[this.distributionIndex]))
+      delete newDistributionList.prodProcedure
       this.$axios.post('/plan/teamAllocation', {
-        ...this.distributionList[this.distributionIndex],
-        teamIds:groupVal.join(",")
+        ...newDistributionList,
+        teamIds: item.join(","),
+        teamNames: nameArr.join(','),
+        planType: this.type
       })
       .then(res => {
+        this.$refs.ChooseSomeone['loadingBtn'] = false
         if (res.code == "ok") {
-          that.popupShow = false
+          this.distributionList[this.distributionIndex].teamNames = nameArr.join(',')
+          this.popupShow = false
         } else {
           this.$toast.clear();
           this.$toast.fail(res.msg);
         }
-      }).catch(err => { this.$toast.clear(); });
+      }).catch(err => { this.$toast.clear();this.$refs.ChooseSomeone['loadingBtn'] = false});
+    },
+
+    // 选中人员
+    chooseSomeoneChanhe(item) {
+      // console.log('当前点击的人员', item, this.distributionList[this.distributionIndex])
+      let arr = item.map(item => {
+        return item.id
+      })
+      let nameArr = item.map(item => {
+        return item.name
+      })
+      this.teamAllocation(arr, nameArr)
     }
   },
 };

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet-workshop-h5/vue.config.js

@@ -7,8 +7,8 @@ const Timestamp = new Date().getTime();
 // var ip = '47.101.180.183'
 // var ip = '47.100.37.243'
 //var ip = '192.168.2.12'
-// var ip = '192.168.2.12'
- var ip = '127.0.0.1'
+var ip = '192.168.2.12'
+//  var ip = '127.0.0.1'
 
 
 // var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip

+ 10 - 10
fhKeeper/formulahousekeeper/timesheet-workshop/config/index.js

@@ -4,17 +4,17 @@ var path = require('path')
 //var ip = '47.101.180.183'
 // var ip = '47.100.37.243'
 // var ip = '192.168.10.2'
-// var ip = '192.168.2.13' 
+var ip = '192.168.2.12' 
 
-var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip
-for (var i in ifaces) {
-    for (var j in ifaces[i]) {
-        var val = ifaces[i][j]
-        if (val.family === 'IPv4' && val.address !== '127.0.0.1') {
-            ip = val.address
-        }
-    }
-}
+// var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip
+// for (var i in ifaces) {
+//     for (var j in ifaces[i]) {
+//         var val = ifaces[i][j]
+//         if (val.family === 'IPv4' && val.address !== '127.0.0.1') {
+//             ip = val.address
+//         }
+//     }
+// }
 // 1196735749
 module.exports = {
   build: {

+ 79 - 56
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/product/list.vue

@@ -368,10 +368,10 @@
 
 
         <!-- 产品分类管理 -->
-        <el-dialog title="分类管理" :visible.sync="isganttshow" width="50%" :before-close="handleClose">
+        <el-dialog title="分类管理" :visible.sync="isganttshow" width="50%" >
             <div>
                 <el-table :data="categoryList" style="width: 100%">
-                    <el-table-column type="index" width="180">
+                    <el-table-column type="index" width="180" label="序号">
                     </el-table-column>
                     <el-table-column prop="name" label="分类名称" width="180">
                     </el-table-column>
@@ -408,7 +408,7 @@
             <div>
                 <el-form ref="form" :model="category" label-width="80px">
                     <el-form-item label="分类名称">
-                        <el-input v-model="category.name"></el-input>
+                        <el-input v-model="category.name" placeholder="请输入"></el-input>
                     </el-form-item>
                 </el-form>
             </div>
@@ -788,7 +788,7 @@ export default {
             temaddForm: {},
             rules: {
                 name: [{ required: true, message: this.$t('pleaseentername'), trigger: "blur" }],
-                code: [{ required: true, message: this.$t('qing-shu-ru-bian-hao'), trigger: "blur" }],
+                code: [{ required: true, message: "请输入项目代码", trigger: "blur" }],
                 orderNumber: [{ required: true, message:' 请输入订单数量', trigger: "blur" }],
                 unit: [{ required: true, message: '请输入单位', trigger: "blur" }],
                 groupNumber: [{ required: true, message: '请输入编组', trigger: "blur" }],
@@ -1057,24 +1057,33 @@ export default {
                 })
         },
         saveCategory() {
+            if (this.category.name == null) {
+                this.$message({
+                    showClose: true,
+                    message: '分类名不能为空',
+                    type: 'warning'
+                });
+            }else{
 
-            this.http.post("/prod-category/saveOrUpdateInfo", this.category,
-                res => {
-                    if (res.code == 'ok') {
-                        this.isganttshowCa = false
-                        this.getCategoryList()
-                        this.category = {}
-                    } else {
-                        this.$message({
-                            showClose: true,
-                            message: '该分类已存在',
-                            type: 'warning'
-                        });
-                    }
+                this.http.post("/prod-category/saveOrUpdateInfo", this.category,
+                    res => {
+                        if (res.code == 'ok') {
+                            this.isganttshowCa = false
+                            this.getCategoryList()
+                            this.category = {}
+                        } else {
+                            this.$message({
+                                showClose: true,
+                                message: '该分类已存在',
+                                type: 'warning'
+                            });
+                        }
 
 
-                })
+                    })
 
+            }
+            
         },
 
         getCategoryList() {
@@ -3230,50 +3239,64 @@ export default {
             this.$refs.form1.validate(valid => {
                 console.log(valid)
                 if (valid) {
+                    console.log("columnNumber", this.addForm.columnNumber,"vehicleNumber", this.addForm.vehicleNumber)
+                    let flag=true;
+                    if(!Number.isInteger(this.addForm.orderNumber)){
+                        flag=false;
+                    }
+                    if(this.addForm.columnNumber != null && !Number.isInteger(this.addForm.columnNumber)){
+                        flag=false;
+                    }
+                    if(this.addForm.vehicleNumber != null && !Number.isInteger(this.addForm.vehicleNumber)){
+                        flag=false;
+                    }
 
-                    if(Number.isInteger(this.addForm.orderNumber)&& Number.isInteger(this.addForm.columnNumber) && Number.isInteger(this.addForm.vehicleNumber)){    
-                    //console.log("valid",valid)
-                    this.addLoading = true;
-                    this.addForm.categoryId = this.cateId;
-                    this.http.post('/product/saveProductInfo', this.addForm,
-                        res => {
-                            this.addLoading = false;
-                            if (res.code == "ok") {
-                                this.productId = res.data.id;
-                                this.productName = res.data.name;
-                                this.$message({
-                                    message: (this.addForm.id != null ? this.$t('xiu-gai') : this.$t('create')) + this.$t('other.successful'),
-                                    type: "success"
-                                });
-                                if (addSequence) {
-                                    //进入工序录入
-                                    this.http.post('/prod-procedure/getProdProcedureList', { productId: this.productId },
-                                        res => {
-                                            this.procedureLit = res.data.prodProcedureList;
-                                            this.procedureVersion = res.data.version;
-
-                                        })
-
-                                    this.prodEditActive = 1;
+                    
+                    if(flag){
+                            //console.log("valid",valid)
+                        this.addLoading = true;
+                        this.addForm.categoryId = this.cateId;
+                        this.http.post('/product/saveProductInfo', this.addForm,
+                            res => {
+                                this.addLoading = false;
+                                if (res.code == "ok") {
+                                    this.productId = res.data.id;
+                                    this.productName = res.data.name;
+                                    this.$message({
+                                        message: (this.addForm.id != null ? this.$t('xiu-gai') : this.$t('create')) + this.$t('other.successful'),
+                                        type: "success"
+                                    });
+                                    if (addSequence) {
+                                        //进入工序录入
+                                        this.http.post('/prod-procedure/getProdProcedureList', { productId: this.productId },
+                                            res => {
+                                                this.procedureLit = res.data.prodProcedureList;
+                                                this.procedureVersion = res.data.version;
+
+                                            })
+
+                                        this.prodEditActive = 1;
+                                    } else {
+                                        this.addFormVisible = false;
+                                    }
+                                    this.getList();
                                 } else {
-                                    this.addFormVisible = false;
+                                    this.$message({
+                                        message: res.msg,
+                                        type: "error"
+                                    });
                                 }
-                                this.getList();
-                            }else {
+                            },
+                            error => {
+                                this.addLoading = false;
                                 this.$message({
-                                    message: res.msg,
+                                    message: error,
                                     type: "error"
                                 });
-                            }
-                        },
-                        error => {
-                            this.addLoading = false;
-                            this.$message({
-                                message: error,
-                                type: "error"
-                            });
-                        });;
-                    } else {
+                            });;
+
+                    }
+                    else {
                          this.$message({
                             message: "数量要为整数",
                             type: "error"

+ 158 - 9
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/team/index.vue

@@ -113,6 +113,10 @@
                     <el-form-item style="float:right;" v-if="user.dingdingUserid != null && permissions.structureImport">
                         <el-link type="primary" :underline="false" @click="showCorpDDSyncDialog">{{ $t('synchronizetheaddressbook') }}</el-link>
                     </el-form-item>
+
+                     <el-form-item style="float:right;" v-if="permissions.structureExport">
+                          <el-link type="primary" :underline="false" @click="showWorkTypeDialog">自定义工种</el-link>
+                      </el-form-item>
                     
                     <el-form-item style="float:right;">
                         <span style="color: #666666">{{ $t('jiao-se') }}</span>
@@ -121,16 +125,27 @@
                         </el-select>
                     </el-form-item>
                     <el-form-item style="float:right;">
-                        <span style="color: #666666">{{ $t('state.states') }}</span>
-                        <el-select v-model="status" :placeholder="$t('defaultText.pleaseChoose')" @change="getUser()" style="width: 120px" size="small">
+                        <span style="color: #666666">工种</span>
+                        <el-select v-model="workTypeId" :placeholder="$t('defaultText.pleaseChoose')" @change="getUser()" style="width: 120px" clearable size="small">
                             <el-option
-                            v-for="item in states"
-                            :key="item.value"
-                            :label="item.label"
-                            :value="item.value">
+                            v-for="item in workTypeList"
+                            :key="item.id"
+                            :label="item.name"
+                            :value="item.id">
                             </el-option>
                         </el-select>
                     </el-form-item>
+                    <el-form-item style="float:right;">
+                          <span style="color: #666666">{{ $t('state.states') }}</span>
+                          <el-select v-model="status" :placeholder="$t('defaultText.pleaseChoose')" @change="getUser()" style="width: 120px" size="small">
+                              <el-option
+                              v-for="item in states"
+                              :key="item.value"
+                              :label="item.label"
+                              :value="item.value">
+                              </el-option>
+                          </el-select>
+                      </el-form-item>
                     <el-form-item style="float:right;">
                         <div style="width: 300px;display: inline-block;margin-top: 4px">
                             <el-input v-model="keyword" class="input-with-select" placeholder="请输入" clearable="true" size="small">
@@ -173,6 +188,8 @@
                   </template>
                 </el-table-column>
                 <el-table-column prop="jobNumber" :label="$t('Worknumber')" ></el-table-column>
+                <el-table-column prop="workType" label="工种" ></el-table-column>
+                <el-table-column  label="性别" ><template slot-scope="scope"><div>{{ scope.row.gender == 1 ? '男' : "女" }}</div></template></el-table-column>
                 <el-table-column prop="phone" :label="$t('shou-ji')" width="120"></el-table-column>
                 <el-table-column prop="departmentName" :label="$t('lable.department')" width="220">
                   <template slot-scope="scope">
@@ -236,7 +253,42 @@
             </el-col>
         </el-col>
       </div>
-
+      <!-- 工种列表 -->
+       <el-dialog title="工种管理" :visible.sync="isganttshow" width="50%" :before-close="handleClose">
+              <div>
+                  <el-table :data="workTypeList" style="width: 100%">
+                      <el-table-column type="index" width="180" label="序号">
+                      </el-table-column>
+                      <el-table-column prop="name" label="工种名称" width="180">
+                      </el-table-column>
+                      <el-table-column label="操作">
+                          <template slot-scope="scope">
+                              <el-button size="mini" @click="updateWorkType(scope.row)">编辑</el-button>
+                              <el-button size="mini" @click="deleteWorkType(scope.row)">删除</el-button>
+                          </template>
+                      </el-table-column>
+                  </el-table>
+              </div>
+              <span slot="footer" class="dialog-footer">
+                  <el-button @click="isganttshow = false">取 消</el-button>
+                  <el-button type="primary" @click="isganttshowWk = true; title = '新增工种'; workType = {}">新增</el-button>
+              </span>
+          </el-dialog>
+          
+          <!-- 编辑工种 -->
+          <el-dialog :title="title" :visible.sync="isganttshowWk" width="30%">
+              <div>
+                  <el-form ref="form" :model="workType" label-width="80px">
+                      <el-form-item label="工种名称">
+                          <el-input v-model="workType.name" placeholder="请输入"></el-input>
+                      </el-form-item>
+                  </el-form>
+              </div>
+              <span slot="footer" class="dialog-footer">
+                  <el-button @click="isganttshowWk = false">取 消</el-button>
+                  <el-button type="primary" @click=" saveWorkType()">确定</el-button>
+              </span>
+          </el-dialog>
       <!-- 修正工时所属部门 -->
       <el-dialog title="修正工时" :visible.sync="workingHoursDialog" width="650px" :before-close="handleClose">
         <div>
@@ -341,6 +393,16 @@
                   <el-form-item :label="$t('Worknumber')" prop="jobNumber">
                       <el-input v-model="insertForm.jobNumber" :placeholder="$t('peaseenterthe')" clearable></el-input>
                   </el-form-item>
+                  <el-form-item label="工种" prop="workTypeId">
+                         <el-select v-model="insertForm.workTypeId" placeholder="请选择">
+                            <el-option
+                              v-for="item in workTypeList"
+                              :key="item.id"
+                              :label="item.name"
+                              :value="item.id">
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
                   <el-form-item :label="$t('monthcost')" prop="monthCost" v-if="insertForm.salaryType == 0 && permissions.structurePersonnel&&user.timeType.isSecretSalary==0">
                       <el-input v-model="insertForm.monthCost" id="mc" @input="oninput" :placeholder="$t('yuechengben')" clearable @keyup.native="restrictNumber('mc')"></el-input>
                       <span style="color:orange;font-size:12px;">{{ $t('yuegongzuoo') }}{{timeType.monthDays}}{{ $t('time.day') }},{{$t('meitian')}}{{timeType.allday}}{{ $t('xiaoshi') }}</span>
@@ -801,6 +863,8 @@ export default {
     window.onresize = function temp() {
         that.tableHeight = window.innerHeight - 195;
     };
+
+    this.getAllWorkType()
     this.initDrag([
       {
         type: "LR",
@@ -840,6 +904,11 @@ export default {
   },
   data() {
     return {
+      isganttshow: false,
+      isganttshowWk: false,
+      workTypeId: null,
+      workTypeList: [],  //所有工种集合
+      workType:{},
       isSyncContact: false,
       showSyncDDDialog: false,
       transferActiveDialogFlag:false,
@@ -2420,6 +2489,7 @@ export default {
           status: this.status,
           // role: this.role
           roleId: this.roleId,
+          workTypeId: this.workTypeId,
           onlyDirect: this.onlyDirect ? "1" : "0",
           cursor: this.nextCursor, // 游标
           matchingType: this.integer
@@ -2508,6 +2578,79 @@ export default {
         })
         .catch(() => {});
     },
+    showWorkTypeDialog(){
+      this.getAllWorkType()
+      this.isganttshow=true;
+    },
+    //获取所有的工种
+    getAllWorkType(){
+      this.http.post("/user-work-type/getAll",{},
+      res=>{
+        if(res.code =='ok'){
+          this.workTypeList=res.data.map(item=>{
+            return{
+              id: parseInt(item.id),
+              name: item.name
+            }
+          })
+          console.log(this.workTypeList)
+        }
+      })
+    },
+    updateWorkType(row) {
+      this.isganttshowWk = true
+      this.title = "编辑工种"
+      this.workType = row
+    },
+    deleteWorkType(row) {
+      this.http.post("/user-work-type/delete", { id: row.id },
+        res => {
+          console.log("=======", res.code)
+          if (res.code === 'ok') {
+            this.getAllWorkType()
+            this.$message({
+              showClose: true,
+              message: '删除成功',
+              type: 'success'
+            });
+          } else {
+            this.$message({
+              showClose: true,
+              message: res.msg,
+              type: 'warning'
+            });
+          }
+        })
+    },
+    saveWorkType() {
+     
+      if(this.workType.name==null){
+         this.$message({
+          showClose: true,
+          message: '工种名不能为空',
+          type: 'warning'
+        });
+      }else{
+          this.http.post("/user-work-type/updateOrInsert", this.workType,
+          res => {
+            if (res.code == 'ok') {
+              this.isganttshowWk = false
+              this.getAllWorkType()
+              this.workType = {}
+            } else {
+              this.$message({
+                showClose: true,
+                message: '该工种已存在',
+                type: 'warning'
+              });
+            }
+
+
+          })
+      }
+    
+
+    },
 
     // 新增、编辑人员
     openInsertDialog(row, roleNameFlg) {
@@ -2572,10 +2715,12 @@ export default {
                 plate3: res.data.plate3,
                 plate4: res.data.plate4,
                 plate5: res.data.plate5,
-                jobNumber: res.data.jobNumber
+                jobNumber: res.data.jobNumber,
+                workTypeId: res.data.workTypeId
               };
               this.$set(this.insertForm, 'inductionDate', res.data.inductionDate)
               this.getUserCustomConfig(1);
+              this.getAllWorkType()
             } else {
               this.$message({
                 message: res.msg,
@@ -2656,11 +2801,13 @@ export default {
             this.submitLoading = false;
             return false;
           }
+
           form = {
             name: this.insertForm.name,
             phone: this.insertForm.phone,
             // role: this.insertForm.role,
             roleId: this.insertForm.roleId,
+            workTypeId: this.insertForm.workTypeId,
             monthCost: this.insertForm.monthCost,
             cost: this.insertForm.cost,
             salaryType: this.insertForm.salaryType,
@@ -2674,6 +2821,8 @@ export default {
             plate4: this.insertForm.plate4,
             plate5: this.insertForm.plate5,
             jobNumber: this.insertForm.jobNumber,
+            workTypeId: this.insertForm.workTypeId
+            
           };
           if (this.insertForm.isActive == 0) {
             form.inactiveDate = this.insertForm.inactiveDate;
@@ -2902,7 +3051,7 @@ export default {
             position: this.insertForm.position,
             certJson: this.insertForm.certJson,
             inductionDate: this.insertForm.inductionDate,
-            jobNumber: this.insertForm.jobNumber,
+            jobNumber: this.insertForm.jobNumber
           };
           if (this.insertForm.departmentId != null) {
             form.departmentId =