Ver Fonte

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

seyason há 1 ano atrás
pai
commit
1bff065d96
16 ficheiros alterados com 410 adições e 110 exclusões
  1. 2 2
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/PlanController.java
  2. 11 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/Plan.java
  3. 2 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/vo/UserVO.java
  4. 1 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/PlanService.java
  5. 88 35
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/PlanServiceImpl.java
  6. 1 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  7. 4 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java
  8. 2 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/PlanMapper.xml
  9. 18 2
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/components/chooseSomeone.vue
  10. 7 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/index/index.vue
  11. 43 9
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/InsertionPlan/InsertionPlan.vue
  12. 128 32
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/InsertionPlan/InsertionPlanAdd.vue
  13. 87 15
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/InsertionPlan/InsertionPlanItem.vue
  14. 13 9
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/todayPlan/distribution.vue
  15. 2 2
      fhKeeper/formulahousekeeper/timesheet-workshop/src/views/plan/orderInsert.vue
  16. 1 0
      fhKeeper/formulahousekeeper/timesheet-workshop/src/views/plan/planComponent.vue

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

@@ -81,8 +81,8 @@ public class PlanController {
     /*计划下产品工序组员分配*/
     @RequestMapping("/teamAllocation")
     @Transactional
-    public HttpRespMsg teamAllocation(PlanProcedureTotal planProcedureTotal, String teamIds) throws Exception {
-        return planService.teamAllocation(planProcedureTotal,teamIds);
+    public HttpRespMsg teamAllocation(PlanProcedureTotal planProcedureTotal, String teamIds,Integer planType) throws Exception {
+        return planService.teamAllocation(planProcedureTotal,teamIds,planType);
     }
 
 }

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

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import java.time.LocalDateTime;
 import com.baomidou.mybatisplus.annotation.TableField;
 import java.io.Serializable;
+import java.util.List;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
@@ -21,7 +22,7 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  *
  * @author Seyason
- * @since 2023-07-29
+ * @since 2023-07-31
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -199,6 +200,9 @@ public class Plan extends Model<Plan> {
     @TableField(exist = false)
     private double totalMoney;
 
+    @TableField(exist = false)
+    private List<PlanProcedureTotal> planProcedureTotals;
+
     /**
      * 创建时间
      */
@@ -211,6 +215,12 @@ public class Plan extends Model<Plan> {
     @TableField("create_id")
     private String createId;
 
+    /**
+     * 0-待下发 1-已下发
+     */
+    @TableField("status")
+    private Integer status;
+
 
     @Override
     protected Serializable pkVal() {

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

@@ -26,5 +26,7 @@ public class UserVO extends User {
 
     private boolean hasAuditDept;
 
+    private List<Department> beDeptList;
+
     private List<SysModule> prodSubMenuList;
 }

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

@@ -34,5 +34,5 @@ public interface PlanService extends IService<Plan> {
 
     HttpRespMsg hasSetDeptDetail();
 
-    HttpRespMsg teamAllocation(PlanProcedureTotal planProcedureTotal, String teamIds) throws Exception;
+    HttpRespMsg teamAllocation(PlanProcedureTotal planProcedureTotal, String teamIds,Integer planType) throws Exception;
 }

+ 88 - 35
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/PlanServiceImpl.java

@@ -103,19 +103,15 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
         }else {
             queryWrapper.eq("plan_type",1);
         }
-        if(planType!=2){
-            if(deptId!=null){
-                queryWrapper.eq("station_id",deptId);
-            }
+        if(deptId!=null){
+            queryWrapper.eq("station_id",deptId);
         }
         if(!StringUtils.isEmpty(date)){
             LocalDate parse = LocalDate.parse(date,df);
             queryWrapper.eq("start_date",parse);
         }else {
-            if(planType!=2){
-                LocalDate now = LocalDate.now();
-                queryWrapper.eq("start_date",planType==0?now:now.plusDays(1));
-            }
+            LocalDate now = LocalDate.now();
+            queryWrapper.eq("start_date",(planType==0||planType==2)?now:now.plusDays(1));
         }
         /*作为工长看到的数据*/
         if(count(new QueryWrapper<Plan>().eq("foreman_id",user.getId()))>0){
@@ -136,6 +132,7 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
         if(!StringUtils.isEmpty(steelStampNumber)){
             queryWrapper.apply("'"+steelStampNumber+"'"+" between steel_stamp_number_start AND steel_stamp_number_end");
         }
+        queryWrapper.orderByDesc("start_date");
         IPage<Plan> planIPage = planMapper.selectPage(new Page<>(pageIndex, pageSize), queryWrapper);
         List<Plan> records = planIPage.getRecords();
         List<Integer> ids = records.stream().map(Plan::getProductId).distinct().collect(Collectors.toList());
@@ -144,6 +141,10 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
         List<Integer> planIds = records.stream().map(Plan::getId).distinct().collect(Collectors.toList());
         planIds.add(-1);
         List<PlanProcedureTotal> procedureTotals = planProcedureTotalService.list(new QueryWrapper<PlanProcedureTotal>().in("plan_id", planIds));
+        List<Integer> ptIds = procedureTotals.stream().map(PlanProcedureTotal::getId).collect(Collectors.toList());
+        ptIds.add(-1);
+        List<ProdProcedureTeam> procedureTeams = prodProcedureTeamService.list(new QueryWrapper<ProdProcedureTeam>().in("plan_procedure_id", ptIds));
+        List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
         records.forEach(rs->{
             Optional<Product> first = productList.stream().filter(pl -> pl.getId().equals(rs.getProductId())).findFirst();
             if(first.isPresent()){
@@ -152,9 +153,22 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
             if(procedureTotals.size()>0){
                 List<PlanProcedureTotal> totals = procedureTotals.stream().filter(ps -> ps.getPlanId().equals(rs.getId())).collect(Collectors.toList());
                 if(totals.size()>0){
-                    double sum = totals.stream().mapToDouble(PlanProcedureTotal::getTotalWages).sum();
+                    double sum = totals.stream().filter(t->t.getTotalWages()!=null).mapToDouble(PlanProcedureTotal::getTotalWages).sum();
                     rs.setTotalMoney(sum);
                 }
+                if(planType==2){
+                    totals.forEach(ps->{
+                        if(procedureTeams.size()>0){
+                            ps.setTeamIds(procedureTeams.stream().filter(pt->pt.getPlanProcedureId().equals(ps.getId())).map(ProdProcedureTeam::getUserId).distinct().collect(Collectors.joining(",")));
+                            if(!StringUtils.isEmpty(ps.getTeamIds())){
+                                String userNames = userList.stream().filter(ul -> Arrays.asList(ps.getTeamIds().split(",")).contains(ul.getId())).collect(Collectors.toList())
+                                        .stream().map(User::getName).collect(Collectors.joining(","));
+                                ps.setTeamNames(userNames);
+                            }
+                        }
+                    });
+                    rs.setPlanProcedureTotals(totals);
+                }
             }
         });
         Map map=new HashMap();
@@ -185,6 +199,7 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
         }
         List<ProdProcedure> procedureList = prodProcedureMapper.selectList(new QueryWrapper<ProdProcedure>().eq("company_id", companyId).eq("product_id",plan.getProductId()).orderByDesc("id"));
         List<PlanProcedureTotal> planProcedureTotals=new ArrayList<>();
+        List<PlanProcedureTotal> oldPlanProcedureTotals=new ArrayList<>();
         List<ProdProcedure> list;
         if(plan.getId()==null){
             list = procedureList.stream().filter(pl -> pl.getVersionNumber().equals(procedureList.get(0).getVersionNumber())).collect(Collectors.toList());
@@ -197,9 +212,15 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
             switch (plan.getPlanType()){
                 case 0:
                     plan.setStartDate(LocalDate.now());
+                    if(plan.getEndDate().isBefore(plan.getStartDate())){
+                        plan.setEndDate(LocalDate.now());
+                    }
                     break;
                 case 1:
                     plan.setStartDate(LocalDate.now().plusDays(1));
+                    if(plan.getEndDate().isBefore(plan.getStartDate())){
+                        plan.setEndDate(LocalDate.now().plusDays(1));
+                    }
                     break;
             }
             if(plan.getPlanType()!=2){
@@ -226,21 +247,39 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
                 return msg;
             }
             list = procedureList.stream().filter(pl -> pl.getVersionNumber().equals(plan.getVersionNumber())).collect(Collectors.toList());
-            planProcedureTotalService.remove(new QueryWrapper<PlanProcedureTotal>().eq("plan_id",plan.getId()));
+//          planProcedureTotalService.remove(new QueryWrapper<PlanProcedureTotal>().eq("plan_id",plan.getId()));
+            List<Integer> ids = list.stream().map(ProdProcedure::getId).collect(Collectors.toList());
+            ids.add(-1);
+            oldPlanProcedureTotals = planProcedureTotalService.list(new QueryWrapper<PlanProcedureTotal>().eq("plan_id", plan.getId()).in("prod_procedure_id", ids));
         }
-        list=list.stream().sorted(Comparator.comparing(ProdProcedure::getId)).collect(Collectors.toList());
-        list.forEach(ps->{
+        if(plan.getPlanType()==0){
+            list=list.stream().sorted(Comparator.comparing(ProdProcedure::getId)).collect(Collectors.toList());
+            for (ProdProcedure prodProcedure : list) {
+                PlanProcedureTotal p=new PlanProcedureTotal();
+                p.setPlanId(plan.getId());
+                p.setProdProcedureId(prodProcedure.getId());
+                BigDecimal totalWages=new BigDecimal(String.valueOf(prodProcedure.getUnitPrice()));
+                totalWages=totalWages.multiply(new BigDecimal(plan.getNum()));
+                p.setTotalWages(totalWages.doubleValue());
+                BigDecimal totalWorkingHours=new BigDecimal(String.valueOf(prodProcedure.getWorkingTime()));
+                totalWorkingHours=totalWorkingHours.multiply(new BigDecimal(plan.getNum()));
+                p.setTotalWorkingHours(totalWorkingHours.doubleValue());
+                if(oldPlanProcedureTotals.size()>0){
+                    boolean b = oldPlanProcedureTotals.stream().anyMatch(fs -> fs.getPlanId().equals(plan.getId()) && fs.getProdProcedureId().equals(prodProcedure.getId()));
+                    if(b){
+                        continue;
+                    }
+                }
+                planProcedureTotals.add(p);
+            }
+        }else {
             PlanProcedureTotal p=new PlanProcedureTotal();
             p.setPlanId(plan.getId());
-            p.setProdProcedureId(ps.getId());
-            BigDecimal totalWages=new BigDecimal(String.valueOf(ps.getUnitPrice()));
-            totalWages=totalWages.multiply(new BigDecimal(plan.getNum()));
-            p.setTotalWages(totalWages.doubleValue());
-            BigDecimal totalWorkingHours=new BigDecimal(String.valueOf(ps.getWorkingTime()));
-            totalWorkingHours=totalWorkingHours.multiply(new BigDecimal(plan.getNum()));
-            p.setTotalWorkingHours(totalWorkingHours.doubleValue());
-            planProcedureTotals.add(p);
-        });
+            boolean b = oldPlanProcedureTotals.stream().anyMatch(fs -> fs.getPlanId().equals(plan.getId()));
+            if(!b){
+                planProcedureTotals.add(p);
+            }
+        }
         planProcedureTotalService.saveBatch(planProcedureTotals);
         return msg;
     }
@@ -264,6 +303,8 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
                     stringBuilder.append((planType==0?"今日计划":planType==1?"明日计划":"插单计划")+"\n");
                     stringBuilder.append(planType==2?"任务名称: "+plan.getTaskName()+"\n"+"任务变更通知号: "+plan.getTaskChangeNoticeNum():"产品名称: "+plan.getProductName()+"\n"+"排产工单号: "+plan.getProductSchedulingNum());
                     wxCorpInfoService.sendWXCorpMsg(wxCorpInfo,first.get().getCorpwxRealUserid(),stringBuilder.toString(),planType==0?"plan/today":planType==1?"plan/tomorrow":"plan/orderInsert",null);
+                    /*修改下发状态为已下发*/
+                    plan.setStatus(1);
                 }else msg.setError("验证失败");
             }
         }
@@ -650,11 +691,11 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
     }
 
     @Override
-    public HttpRespMsg teamAllocation(PlanProcedureTotal planProcedureTotal,String teamIds) throws Exception {
+    public HttpRespMsg teamAllocation(PlanProcedureTotal planProcedureTotal,String teamIds,Integer planType) throws Exception {
         HttpRespMsg msg=new HttpRespMsg();
         Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
-        BigDecimal totalWages=new BigDecimal(planProcedureTotal.getTotalWages());
-        BigDecimal totalWorkingHours=new BigDecimal(planProcedureTotal.getTotalWorkingHours());
+        BigDecimal totalWages=new BigDecimal((planProcedureTotal.getTotalWages()==null||StringUtils.isEmpty(planProcedureTotal.getTotalWages()))?0:planProcedureTotal.getTotalWages());
+        BigDecimal totalWorkingHours=new BigDecimal((planProcedureTotal.getTotalWorkingHours()==null||StringUtils.isEmpty(planProcedureTotal.getTotalWorkingHours())?0:planProcedureTotal.getTotalWorkingHours()));
         BigDecimal overCountWages = new BigDecimal(0);
         BigDecimal overWorkingHours = new BigDecimal(0);
         ProdProcedure prodProcedure = prodProcedureMapper.selectById(planProcedureTotal.getProdProcedureId());
@@ -669,6 +710,15 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
             overWorkingHours=totalWorkingHours.multiply(new BigDecimal(team.length));
             List<ProdProcedureTeam> procedureTeamList = prodProcedureTeamService.list(new QueryWrapper<ProdProcedureTeam>().eq("plan_procedure_id",planProcedureTotal.getId()));
             List<User> userList = userMapper.selectBatchIds(Arrays.asList(team));
+            //处理人员
+            procedureTeamList.stream().forEach(pt->{
+                if(!Arrays.asList(team).contains(pt.getUserId())){
+                    Integer cut = reportMapper.selectCount(new QueryWrapper<Report>().eq("user_procedure_team_id", pt.getId()));
+                    if(cut<1){
+                        prodProcedureTeamService.removeById(pt.getId());
+                    }
+                }
+            });
             for (int i = 0; i < team.length; i++) {
                 ProdProcedureTeam prodProcedureTeam=new ProdProcedureTeam();
                 prodProcedureTeam.setCompanyId(companyId);
@@ -677,12 +727,7 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
                 int finalI = i;
                 Optional<ProdProcedureTeam> first = procedureTeamList.stream().filter(pl -> pl.getUserId().equals(team[finalI])).findFirst();
                 if(first.isPresent()){
-                    Integer cut = reportMapper.selectCount(new QueryWrapper<Report>().eq("user_procedure_team_id", first.get().getId()));
-                    if(cut>0){
-                        prodProcedureTeam.setId(first.get().getId());
-                    }else {
-                        prodProcedureTeamService.remove(new QueryWrapper<ProdProcedureTeam>().eq("plan_procedure_id",planProcedureTotal.getId()).eq("user_id",team[i]));
-                    }
+                    prodProcedureTeam.setId(first.get().getId());
                 }
                 if(i==team.length-1){
                     double wagesAbs =new BigDecimal(planProcedureTotal.getTotalWages()).subtract(overCountWages).doubleValue();
@@ -701,11 +746,19 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
                 String userIds = userList.stream().map(User::getCorpwxRealUserid).collect(Collectors.joining("|"));
                 //todo:推送到企业微信
                 StringBuilder stringBuilder=new StringBuilder();
-                stringBuilder.append("工序  ");
-                stringBuilder.append("工序名称: "+prodProcedure.getName()+"\n"
-                        +"       产品名称:"+product.getName()+"\n"
-                        +"       排产工单号:"+plan.getProductSchedulingNum());
-                wxCorpInfoService.sendWXCorpMsg(wxCorpInfo,userIds,stringBuilder.toString(),"todayPlan",null);
+                if(planType!=2){
+                    stringBuilder.append("工序  ");
+                    stringBuilder.append("工序名称:"+prodProcedure.getName()+"\n"
+                            +"         产品名称:"+product.getName()+"\n"
+                            +"         排产工单号:"+plan.getProductSchedulingNum());
+                    wxCorpInfoService.sendWXCorpMsg(wxCorpInfo,userIds,stringBuilder.toString(),planType==0?"todayPlan":"tomorrowPlan",null);
+                }else {
+                    stringBuilder.append("插单计划  ");
+                    stringBuilder.append("任务名称:"+plan.getTaskName()+"\n"
+                            +"               任务变更通知号:"+plan.getTaskChangeNoticeNum());
+                    wxCorpInfoService.sendWXCorpMsg(wxCorpInfo,userIds,stringBuilder.toString(),"InsertionPlan",null);
+                }
+
             }
         }
         if(!prodProcedureTeamService.saveOrUpdateBatch(list)){

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

@@ -2447,6 +2447,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         userVO.setTimeType(timeTypeMapper.selectById(company.getId()));
         List<Department> manageDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", userVO.getId()));
         List<Integer> deptIds = manageDeptList.stream().map(Department::getDepartmentId).collect(Collectors.toList());
+        userVO.setBeDeptList(manageDeptList);
         //获取当前角色的权限菜单
         setUserRoleMenu(userVO);
         httpRespMsg.data = userVO;

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

@@ -276,9 +276,12 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                 //费用报销
                 title = "收到新的插单计划";
             }
-            else if("todayPlan".equals(pageRouter)){
+            else if("todayPlan".equals(pageRouter)||"tomorrowPlan".equals(pageRouter)){
                 title="收到新的工作安排";
             }
+            else if("InsertionPlan".equals(pageRouter)){
+                title="收到新的插单计划";
+            }
             cardJson.put("title", title);
             cardJson.put("description", msg);
             cardJson.put("url", jumpUrl);

+ 2 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/PlanMapper.xml

@@ -33,11 +33,12 @@
         <result column="version_number" property="versionNumber" />
         <result column="create_time" property="createTime" />
         <result column="create_id" property="createId" />
+        <result column="status" property="status" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, product_scheduling_num, product_id, product_name, project_code, company_id, steel_stamp_number_start, steel_stamp_number_end, num, main_process, station_id, station_name, foreman_id, foreman_name, plan_type, start_date, end_date, task_name, task_type_id, task_type_name, check_type, task_change_notice_num, plan_man_num, plan_work_hour, money_of_job, describtion, version_number, create_time, create_id
+        id, product_scheduling_num, product_id, product_name, project_code, company_id, steel_stamp_number_start, steel_stamp_number_end, num, main_process, station_id, station_name, foreman_id, foreman_name, plan_type, start_date, end_date, task_name, task_type_id, task_type_name, check_type, task_change_notice_num, plan_man_num, plan_work_hour, money_of_job, describtion, version_number, create_time, create_id, status
     </sql>
 
 </mapper>

+ 18 - 2
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/components/chooseSomeone.vue

@@ -26,7 +26,7 @@
       </van-checkbox-group>
 
       <!-- tree -->
-      <div class="treeBox" v-if="newGroupView == 3">
+      <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">
@@ -46,7 +46,7 @@
       <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>
@@ -149,6 +149,7 @@ export default {
     newGroupViewBackCli(flg, i) {
       this.newGroupViewBack = flg
       this.newGroupView = i
+      this.$refs.tree.setCheckedKeys(this.groupVal)
     },
     // 获取所有人员
     getPeople() {
@@ -213,6 +214,21 @@ export default {
       })
       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)
     }
   },
 };

+ 7 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/index/index.vue

@@ -88,6 +88,13 @@ export default {
                 this.previewPicture()
             }
         }
+        console.log(this.user, '====>')
+
+        if(this.user.beDeptList && this.user.beDeptList.length > 0) {
+            localStorage.setItem('beDeptList', true)
+        } else {
+            localStorage.setItem('beDeptList', false)
+        }
     },
     components: {
         Footer

+ 43 - 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="!beDeptList" />
+    <van-nav-bar title="插单计划" left-text="返回" right-text="新建" @click-left="back" v-if="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,17 @@ export default {
   },
   data() {
     return {
-
+      beDeptList: JSON.parse(localStorage.getItem('beDeptList')), // 是否为工长
+      user: JSON.parse(localStorage.getItem('userInfo')),
+      planList: [],
     };
   },
   computed: {},
   watch: {},
   created() {},
-  mounted() {},
+  mounted() {
+    this.getPlanList()
+  },
   methods: {
     back() {
       this.$router.go(-1);
@@ -35,11 +40,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(); });
     }
   },
 };

+ 87 - 15
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: #333`" @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) && beDeptList">分配</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,103 @@
 import ChooseSomeone from '../../../components/chooseSomeone.vue'
 export default {
   name: 'InsertionPlanItem',
-  props: {},
+  props: {
+    planList: {
+      type: Object,
+      default: () => {}
+    }
+  },
   components: {
     ChooseSomeone
   },
   data() {
     return {
-      popupShow: false
+      beDeptList: JSON.parse(localStorage.getItem('beDeptList')), // 是否为工长
+      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() {
-      this.popupShow = true
+      if(this.beDeptList) {
+        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)
     }
   },
 };

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

@@ -14,8 +14,8 @@
           </div>
           <div class="PlanItem" v-show="todayAndTomorrow">
             <div>组员:</div>
-            <span class="textBeyondHiding" v-if="item.teamNames" @click="distributionProp(item,index)">{{ item.teamNames }} <van-icon name="edit" color="#1989fa" /> </span>
-            <span style="color: #1989fa;" v-if="!item.teamNames" @click="distributionProp(item,index)">分配</span>
+            <span class="" v-if="item.teamNames" @click="distributionProp(item,index)">{{ item.teamNames }} <van-icon name="edit" color="#1989fa" /> </span>
+            <span style="color: #1989fa;" v-if="!item.teamNames && beDeptList" @click="distributionProp(item,index)">分配</span>
           </div>
           <div class="PlanItem">
             <div>单件工价:</div><span class="textBeyondHiding">{{ item.prodProcedure.workingTime }}</span>
@@ -56,6 +56,7 @@ export default {
   },
   data() {
     return {
+      beDeptList: JSON.parse(localStorage.getItem('beDeptList')), // 是否为工长
       distributionList: [],
       distributionIndex: null,
       popupShow: false,
@@ -94,14 +95,16 @@ export default {
       console.log('点击了下单计划')
     },
     distributionProp(item, index) {
-      console.log(item, index)
-      if(item.teamIds) {
-        this.peopleListId = item.teamIds.split(',')
-      } else {
-        this.peopleListId = []
+      if(this.beDeptList) {
+        console.log(item, index)
+        if(item.teamIds) {
+          this.peopleListId = item.teamIds.split(',')
+        } else {
+          this.peopleListId = []
+        }
+        this.distributionIndex = index
+        this.popupShow = true
       }
-      this.distributionIndex = index
-      this.popupShow = true
     },
     getDistributionList() {
       this.$axios.post('/plan/planDetail', {
@@ -145,6 +148,7 @@ export default {
         ...newDistributionList,
         teamIds: item.join(","),
         teamNames: nameArr.join(','),
+        planType: this.type
       })
       .then(res => {
         this.$refs.ChooseSomeone['loadingBtn'] = false

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/plan/orderInsert.vue

@@ -173,7 +173,7 @@
         <el-button @click="
           (taskTypeDialog = false)
           ">取 消</el-button>
-        <el-button type="primary" @click="taskTypeAddDialog=true">新增</el-button>
+        <el-button type="primary" @click="taskTypeAddDialog=true,editTaskType()">新增</el-button>
       </span>
     </el-dialog>
 
@@ -188,7 +188,7 @@
         </div>
         <span slot="footer" class="dialog-footer">
         <el-button @click="
-          (taskTypeAddDialog = false), $refs['taskTypeForm'].resetFields()
+          (taskTypeAddDialog = false)
           ">取 消</el-button>
         <el-button type="primary" @click="addTaskType('taskTypeForm')">确 定</el-button>
       </span>

+ 1 - 0
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/plan/planComponent.vue

@@ -468,6 +468,7 @@ export default {
             this.todayPlanForm.stationId.length - 1
             ];
           this.$delete(this.todayPlanForm, 'product')  
+          this.$delete(this.todayPlanForm, 'planProcedureTotals')  
           this.http.post(
             "/plan/addOrUpdatePlan",
             {