Browse Source

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

Min 1 năm trước cách đây
mục cha
commit
2a22cc2af6
17 tập tin đã thay đổi với 3389 bổ sung2635 xóa
  1. 10 29
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/ProdMaterialController.java
  2. 7 12
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/ProdProcedureController.java
  3. 18 16
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/ProductController.java
  4. 6 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/ProdProcedure.java
  5. 2 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/ProdMaterialService.java
  6. 1 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/ProdProcedureService.java
  7. 5 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/ProductService.java
  8. 23 2
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ProdMaterialServiceImpl.java
  9. 54 44
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ProdProcedureServiceImpl.java
  10. 421 116
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ProductServiceImpl.java
  11. 27 10
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/components/chooseSomeone.vue
  12. 9 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/router/index.js
  13. 48 5
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/InsertionPlan/InsertionPlan.vue
  14. 137 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/InsertionPlan/InsertionPlanAdd.vue
  15. 120 0
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/InsertionPlan/InsertionPlanItem.vue
  16. 1 1
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/todayPlan/distribution.vue
  17. 2500 2397
      fhKeeper/formulahousekeeper/timesheet-workshop/src/views/product/list.vue

+ 10 - 29
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/ProdMaterialController.java

@@ -1,6 +1,7 @@
 package com.management.platform.controller;
 
 
+import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.management.platform.entity.ProdMaterial;
 import com.management.platform.entity.ProdMaterial;
@@ -37,45 +38,25 @@ public class ProdMaterialController {
     private ProdMaterialService prodMaterialService;
 
     /**
-     * 获取产品的id物料列表
+     * 根据产品的id获取最新物料列表
      */
     @RequestMapping("/getProdMaterialList")
     public HttpRespMsg getProdMaterialList (@RequestParam Integer productId){
-        HttpRespMsg httpRespMsg=new HttpRespMsg();
-        HashMap<String,Object> map=new HashMap<>();
-
-        List<String> versionList= (List<String>) prodMaterialService.getVersion(request,productId).getData();
-        List<ProdMaterial> prodMaterialList=new ArrayList<>();
-        if(versionList!=null&&versionList.size()>1){
-            HttpRespMsg info = prodMaterialService.getInfo(request, versionList.get(versionList.size() - 1), productId);
-            prodMaterialList= (List<ProdMaterial>) info.data;
-            map.put("version",versionList.get(versionList.size() - 1));
-        }else{
-            map.put("version","");
-        }
-
-        map.put("prodMaterialList",prodMaterialList);
-
-        httpRespMsg.data=map;
-        return httpRespMsg;
+
+       return prodMaterialService.getLastProdMaterialList(productId,request);
     }
 
     /**
-     * 新增、修改工序
+     * 新增、修改物料
      */
     @RequestMapping("/changeProdMaterial")
     public HttpRespMsg changeProdMaterial ( Integer productId ,String version,  String  prodMaterials){
-        HttpRespMsg httpRespMsg=new HttpRespMsg();
-        ObjectMapper mapper = new ObjectMapper();
+
         List<ProdMaterial> prodMaterialList= null;
-        try {
-            prodMaterialList = Arrays.asList(mapper.readValue(prodMaterials, ProdMaterial[].class));
-            return prodMaterialService.changeProdMaterial(request, prodMaterialList,productId,version);
-        } catch (IOException e) {
-            httpRespMsg.setError("data is error");
-            e.printStackTrace();
-        }
-        return httpRespMsg;
+        prodMaterialList = Arrays.asList(JSONObject.parseObject(prodMaterials, ProdMaterial[].class));
+
+        return prodMaterialService.changeProdMaterial(request, prodMaterialList,productId,version);
+
     }
 
 

+ 7 - 12
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/ProdProcedureController.java

@@ -1,6 +1,7 @@
 package com.management.platform.controller;
 
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.management.platform.entity.ProdProcedure;
@@ -46,25 +47,19 @@ public class ProdProcedureController {
      * 新增、修改工序
      */
     @RequestMapping("/changeProdProcedure")
-    public HttpRespMsg changeProdProcedure ( Integer productId ,String version,  String  prodProcedures){
-        HttpRespMsg httpRespMsg=new HttpRespMsg();
-        ObjectMapper mapper = new ObjectMapper();
+    public HttpRespMsg changeProdProcedure ( Integer productId ,String productName,String version, String  prodProcedures){
+
         List<ProdProcedure> prodProcedureList= null;
-        try {
-            prodProcedureList = Arrays.asList(mapper.readValue(prodProcedures, ProdProcedure[].class));
-            return prodProcedureService.changeProdProcedure(request, prodProcedureList,productId,version);
-        } catch (IOException e) {
-            httpRespMsg.setError("data is error");
-            e.printStackTrace();
-        }
-        return httpRespMsg;
+        prodProcedureList =Arrays.asList(JSONObject.parseObject(prodProcedures,ProdProcedure[].class));
+
+        return prodProcedureService.changeProdProcedure(request, prodProcedureList,productId,productName,version);
     }
 
 
     /**
      * 是否可删除工序
      * 查看该工序有没有被使用(计划中)
-     * TODO
+     * todo
      */
     @RequestMapping("/isDelete")
     public HttpRespMsg isDeleteProdProcedure (Integer id){

+ 18 - 16
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/ProductController.java

@@ -6,10 +6,8 @@ import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.PlanService;
 import com.management.platform.service.ProductService;
 import com.management.platform.util.HttpRespMsg;
-import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
@@ -71,26 +69,30 @@ public class ProductController {
     }
 
     /**
-     * todo
-     * @param file
+     *
+     * @param
      * @return
      */
-    @RequestMapping("/importData")
-    public HttpRespMsg importData(MultipartFile file,Integer categoryId){
+    @RequestMapping(value = "/importData",method = RequestMethod.POST)
+    public HttpRespMsg importData(@RequestParam("file") MultipartFile file,@RequestParam Integer categoryId){
         return productService.importData(file,categoryId,request);
     }
 
 
+    @RequestMapping("/exportData")
+    public HttpRespMsg exportData(String date,Integer productType){
+        return productService.exportData(date,productType);
+    }
 
- /*   *//**
-     * todo
-     * @param date
-     * @param planType
+    /**
+     * 新增产品和对应的工序列表
+     * @param
      * @return
-     *//*
-    @RequestMapping("/exportData")
-    public HttpRespMsg exportData(String date,Integer planType){
-        return productService.exportData(date,planType);
-    }*/
+     */
+    @RequestMapping(value = "copyProductInfo")
+    public HttpRespMsg insertProductInfo(String name,Integer id){
+
+        return productService.insertProductInfo(name,id,request);
+    }
 }
 

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

@@ -60,7 +60,7 @@ public class ProdProcedure extends Model<ProdProcedure> {
      * 单件工时
      */
     @TableField("working_time")
-    private Double workingTime;
+    private Integer workingTime;
 
     /**
      * 版本号
@@ -68,6 +68,11 @@ public class ProdProcedure extends Model<ProdProcedure> {
     @TableField("version_number")
     private String versionNumber;
 
+    /**
+     * 产品名称
+     */
+    @TableField("product_name")
+    private String productName;
 
     @Override
     protected Serializable pkVal() {

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

@@ -2,7 +2,6 @@ package com.management.platform.service;
 
 import com.management.platform.entity.ProdMaterial;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.management.platform.entity.ProdProcedure;
 import com.management.platform.util.HttpRespMsg;
 
 import javax.servlet.http.HttpServletRequest;
@@ -25,4 +24,6 @@ public interface ProdMaterialService extends IService<ProdMaterial> {
     HttpRespMsg isDelete(HttpServletRequest request, Integer id);
 
     HttpRespMsg changeProdMaterial(HttpServletRequest request, List<ProdMaterial> prodMaterialList, Integer productId, String version);
+
+    HttpRespMsg getLastProdMaterialList(Integer productId, HttpServletRequest request);
 }

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

@@ -18,7 +18,7 @@ import java.util.List;
 public interface ProdProcedureService extends IService<ProdProcedure> {
 
 
-    HttpRespMsg changeProdProcedure(HttpServletRequest request, List<ProdProcedure> ProdProcedureList,  Integer productId,String version);
+    HttpRespMsg changeProdProcedure(HttpServletRequest request, List<ProdProcedure> ProdProcedureList, Integer productId, String productName, String version);
 
     HttpRespMsg isDelete(HttpServletRequest request, Integer deleteId);
 

+ 5 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/ProductService.java

@@ -26,4 +26,9 @@ public interface ProductService extends IService<Product> {
     HttpRespMsg delete(Integer id);
 
     HttpRespMsg importData(MultipartFile file, Integer categoryId, HttpServletRequest request);
+
+
+    HttpRespMsg exportData(String date, Integer productType);
+
+    HttpRespMsg insertProductInfo(String name, Integer id, HttpServletRequest request);
 }

+ 23 - 2
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ProdMaterialServiceImpl.java

@@ -2,8 +2,6 @@ package com.management.platform.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.management.platform.entity.PlanMaterial;
-import com.management.platform.entity.ProdMaterial;
 import com.management.platform.entity.ProdMaterial;
 import com.management.platform.entity.User;
 import com.management.platform.mapper.PlanMaterialMapper;
@@ -18,6 +16,8 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -137,4 +137,25 @@ public class ProdMaterialServiceImpl extends ServiceImpl<ProdMaterialMapper, Pro
 
         return msg;
     }
+
+    @Override
+    public HttpRespMsg getLastProdMaterialList(Integer productId, HttpServletRequest request) {
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        HashMap<String,Object> map=new HashMap<>();
+
+        List<String> versionList= (List<String>) getVersion(request,productId).getData();
+        List<ProdMaterial> prodMaterialList=new ArrayList<>();
+        if(versionList!=null&&versionList.size()>0){
+            HttpRespMsg info = getInfo(request, versionList.get(versionList.size() - 1), productId);
+            prodMaterialList= (List<ProdMaterial>) info.data;
+            map.put("version",versionList.get(versionList.size() - 1));
+        }else{
+            map.put("version","");
+        }
+
+        map.put("prodMaterialList",prodMaterialList);
+        System.out.println(map);
+        httpRespMsg.data=map;
+        return httpRespMsg;
+    }
 }

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

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.management.platform.entity.ProdProcedure;
 import com.management.platform.entity.User;
 import com.management.platform.mapper.ProdProcedureMapper;
+import com.management.platform.mapper.ProductMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.ProdProcedureService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -17,6 +18,7 @@ import javax.servlet.http.HttpServletRequest;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -34,67 +36,75 @@ public class ProdProcedureServiceImpl extends ServiceImpl<ProdProcedureMapper, P
     private ProdProcedureMapper prodProcedureMapper;
     @Resource
     private UserMapper userMapper;
+    @Resource
+    private ProductMapper productMapper;
 
 
     @Override
-    public HttpRespMsg changeProdProcedure(HttpServletRequest request, List<ProdProcedure> prodProcedureList, Integer productId,String version) {
+    public HttpRespMsg changeProdProcedure(HttpServletRequest request, List<ProdProcedure> prodProcedureList, Integer productId, String productName, String version) {
         HttpRespMsg msg = new HttpRespMsg();
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(token);
+        //检查有没有重复的工序名称
+        Map<String,ProdProcedure> map=new HashMap<>();
+        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());
+                prodProcedure.setProductId(productId);
+                prodProcedure.setVersionNumber(version);
+                prodProcedure.setProductName(productName);
+            });
+
+            //1.获取原有的工序id
+            List<ProdProcedure> oldList = prodProcedureMapper.selectList(new LambdaQueryWrapper<ProdProcedure>()
+                    .eq(user.getCompanyId() != null, ProdProcedure::getCompanyId, user.getCompanyId())
+                    .eq(productId != null, ProdProcedure::getProductId, productId)
+                    .eq(StringUtils.isNotBlank(version),ProdProcedure::getVersionNumber,version)
+                    .select(ProdProcedure::getId)
+            );
+
+            if(oldList!=null&&oldList.size()>0){
+
+                //2.要删除的id
+                List<ProdProcedure> deleteList = oldList.stream().filter(old -> {
+                    for (ProdProcedure prodProcedure : prodProcedureList) {
+                        if (prodProcedure.getId() == old.getId()) {
+                            return false;
+                        }
+                    }
+                    return true;
 
-        prodProcedureList.stream().forEach(prodProcedure -> {
-            user.getCompanyId();
-            prodProcedure.setCompanyId(user.getCompanyId());
-            prodProcedure.setProductId(productId);
-            prodProcedure.setVersionNumber(version);
-
-        });
-
-
-        //1.获取原有的工序id
-        List<ProdProcedure> oldList = prodProcedureMapper.selectList(new LambdaQueryWrapper<ProdProcedure>()
-                .eq(user.getCompanyId() != null, ProdProcedure::getCompanyId, user.getCompanyId())
-                .eq(productId != null, ProdProcedure::getProductId, productId)
-                .eq(StringUtils.isNotBlank(version),ProdProcedure::getVersionNumber,version)
-                .select(ProdProcedure::getId)
-        );
-
-        if(oldList!=null&&oldList.size()>0){
+                }).collect(Collectors.toList());
+                if (deleteList != null && deleteList.size() > 0) {
 
-            //2.要删除的id
-            List<ProdProcedure> deleteList = oldList.stream().filter(old -> {
-                for (ProdProcedure prodProcedure : prodProcedureList) {
-                    if (prodProcedure.getId() == old.getId()) {
-                        return false;
-                    }
+                    List<Integer> deleteIdList = deleteList.stream().map(delete -> delete.getId()).collect(Collectors.toList());
+                    prodProcedureMapper.deleteBatchIds(deleteIdList);
                 }
-                return true;
 
-            }).collect(Collectors.toList());
-            if (deleteList != null && deleteList.size() > 0) {
+                //3.编辑的id
+                List<ProdProcedure> updateList = prodProcedureList.stream().filter(prodProcedure -> prodProcedure.getId() != null).collect(Collectors.toList());
+                if (updateList != null&&updateList.size()>0) {
+                    this.updateBatchById(updateList);
+                }
+                //4.新增的id
+                List<ProdProcedure> insertList = prodProcedureList.stream().filter(prodProcedure -> prodProcedure.getId() == null).collect(Collectors.toList());
+                if (insertList != null&&insertList.size()>0) {
+                    this.saveBatch(insertList);
+                }
+            }else{
 
-                List<Integer> deleteIdList = deleteList.stream().map(delete -> delete.getId()).collect(Collectors.toList());
-                prodProcedureMapper.deleteBatchIds(deleteIdList);
+                this.saveBatch(prodProcedureList);
             }
 
-            //3.编辑的id
-            List<ProdProcedure> updateList = prodProcedureList.stream().filter(prodProcedure -> prodProcedure.getId() != null).collect(Collectors.toList());
-            if (updateList != null&&updateList.size()>0) {
-                this.updateBatchById(updateList);
-            }
-            //4.新增的id
-            List<ProdProcedure> insertList = prodProcedureList.stream().filter(prodProcedure -> prodProcedure.getId() == null).collect(Collectors.toList());
-            if (insertList != null&&insertList.size()>0) {
-                this.saveBatch(insertList);
-            }
         }else{
-
-            this.saveBatch(prodProcedureList);
+            msg.setError("工序名称重复");
         }
 
 
-
-
         return msg;
     }
 

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

@@ -1,9 +1,11 @@
 package com.management.platform.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
 import com.management.platform.entity.*;
 import com.management.platform.mapper.*;
 import com.management.platform.service.ProdMaterialService;
@@ -13,12 +15,15 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.MessageUtils;
 import org.apache.poi.EncryptedDocumentException;
+import org.apache.poi.hssf.usermodel.*;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
-import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.xssf.usermodel.XSSFCell;
 import org.apache.poi.xssf.usermodel.XSSFRow;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
@@ -27,10 +32,8 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.io.*;
-import java.time.format.DateTimeFormatter;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.math.BigDecimal;
+import java.util.*;
 
 /**
  * <p>
@@ -43,6 +46,8 @@ import java.util.Map;
 @Service
 @Transactional
 public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {
+    /*@Value(value = "${upload.path}")
+    private String path;*/
     @Resource
     ProductMapper productMapper;
     @Resource
@@ -93,17 +98,41 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
 
     @Override
     public HttpRespMsg saveProductInfo(Product product, HttpServletRequest request) {
+        HttpRespMsg msg = new HttpRespMsg();
+
         String token = request.getHeader("Token");
         User user = userMapper.selectById(token);
+
         product.setCompanyId(user.getCompanyId());
         if (product.getId() == null) {
-            productMapper.insert(product);
+            Integer count = productMapper.selectCount(new LambdaQueryWrapper<Product>()
+                    .eq(user.getCompanyId() != null, Product::getCompanyId, user.getCompanyId())
+                    .eq(!StringUtils.isEmpty(product.getName()), Product::getName, product.getName())
+            );
+            if(count==0){
+                productMapper.insert(product);
+
+            }else{
+                msg.setError("产品名重复");
+            }
         } else {
-            productMapper.updateById(product);
+            Product selectOne = productMapper.selectOne(new LambdaQueryWrapper<Product>()
+                    .eq(user.getCompanyId() != null, Product::getCompanyId, user.getCompanyId())
+                    .eq(!StringUtils.isEmpty(product.getName()), Product::getName, product.getName())
+            );
+            if(selectOne.getId()==product.getId()){
+                productMapper.updateById(product);
+            }else{
+                msg.setError("产品名重复");
+            }
+
         }
-        HttpRespMsg msg = new HttpRespMsg();
+
         System.out.println(product);
         msg.setData(product);
+
+
+
         return msg;
     }
 
@@ -156,7 +185,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
     }
 
     /**
-     * todo  待定
+     *
      * @param multipartFile
      * @param categoryId
      * @param request
@@ -165,7 +194,12 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
     @Override
     public HttpRespMsg importData(MultipartFile multipartFile, Integer categoryId, HttpServletRequest request) {
         HttpRespMsg msg=new HttpRespMsg();
-        DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        List<Product> productList=new ArrayList<>();
+        List<ProdProcedure> prodProcedureList=new ArrayList<>();
+
+
+        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+
         String fileName = multipartFile.getOriginalFilename();
         File file = new File(fileName == null ? "file" : fileName);
         InputStream inputStream = null;
@@ -183,138 +217,229 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
             }
             inputStream.close();
             outputStream.close();
+
+
             //然后解析表格
+
             XSSFWorkbook workbook = new XSSFWorkbook(file);
-            //我们只需要第一个sheet
+            //第一个sheet 产品信息
             XSSFSheet sheet = workbook.getSheetAt(0);
             int rowNum = sheet.getLastRowNum();
 
             //获取相关数据
-            Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+
             for(int rowIndex=1;rowIndex<=rowNum;rowIndex++){
                 XSSFRow row = sheet.getRow(rowIndex);
                 //跳过空行
                 if(row==null){
                     continue;
                 }
-                if(rowIndex==1){
-                    //产品基本信息
-                    XSSFCell nameCell = row.getCell(0);
-                    XSSFCell codeCell = row.getCell(1);
-                    XSSFCell orderNumberCell = row.getCell(2);
-                    XSSFCell unitCell = row.getCell(3);
-                    XSSFCell groupNumberCell = row.getCell(4);
-                    XSSFCell columnNumberCell = row.getCell(5);
-                    XSSFCell vehicleNumberCell = row.getCell(6);
-                    XSSFCell descriptionCell = row.getCell(7);
-                    XSSFCell categoryNameCell = row.getCell(8);
-                    if(nameCell!=null){
-                        nameCell.setCellType(CellType.STRING);
-                    }
-                    if(codeCell!=null){
-                        codeCell.setCellType(CellType.STRING);
-                    }
-                    if(orderNumberCell!=null){
-                        orderNumberCell.setCellType(CellType.NUMERIC);
-                    }
-                    if(unitCell!=null){
-                        unitCell.setCellType(CellType.STRING);
-                    }
-                    if(groupNumberCell!=null){
-                        groupNumberCell.setCellType(CellType.NUMERIC);
-                    }
-                    if(columnNumberCell!=null){
-                        columnNumberCell.setCellType(CellType.NUMERIC);
-                    }
-                    if(vehicleNumberCell!=null){
-                        vehicleNumberCell.setCellType(CellType.NUMERIC);
-                    }
-                    if(descriptionCell!=null){
-                        descriptionCell.setCellType(CellType.STRING);
-                    }
-                    if(categoryNameCell!=null){
-                        categoryNameCell.setCellType(CellType.STRING);
-                    }
 
-                    Product product=new Product();
-                    product.setCompanyId(companyId);
-                    if(nameCell!=null){
+                //产品基本信息
+                XSSFCell nameCell = row.getCell(0);
+                XSSFCell codeCell = row.getCell(1);
+                XSSFCell orderNumberCell = row.getCell(2);
+                XSSFCell unitCell = row.getCell(3);
+                XSSFCell groupNumberCell = row.getCell(4);
+                XSSFCell columnNumberCell = row.getCell(5);
+                XSSFCell vehicleNumberCell = row.getCell(6);
+                XSSFCell descriptionCell = row.getCell(7);
+
+                if(nameCell!=null){
+                    nameCell.setCellType(CellType.STRING);
+                }
+                if(codeCell!=null){
+                    codeCell.setCellType(CellType.STRING);
+                }
+                if(orderNumberCell!=null){
+                    orderNumberCell.setCellType(CellType.NUMERIC);
+                }
+                if(unitCell!=null){
+                    unitCell.setCellType(CellType.STRING);
+                }
+                if(groupNumberCell!=null){
+                    groupNumberCell.setCellType(CellType.NUMERIC);
+                }
+                if(columnNumberCell!=null){
+                    columnNumberCell.setCellType(CellType.NUMERIC);
+                }
+                if(vehicleNumberCell!=null){
+                    vehicleNumberCell.setCellType(CellType.NUMERIC);
+                }
+                if(descriptionCell!=null){
+                    descriptionCell.setCellType(CellType.STRING);
+                }
+
+
+                Product product=new Product();
+                product.setCompanyId(companyId);
+                product.setCategoryId(categoryId);
+                if(nameCell!=null){
+                    Integer count = productMapper.selectCount(new LambdaQueryWrapper<Product>()
+                            .eq(companyId != null, Product::getCompanyId, companyId)
+                            .eq(!StringUtils.isEmpty( nameCell.getStringCellValue()), Product::getName,  nameCell.getStringCellValue())
+                    );
+                    if(count==0){
                         product.setName(nameCell.getStringCellValue());
-                    }else{
-                        msg.setError("产品名称不能为空");
-                        return msg;
-                    }
-                    if(codeCell!=null){
-                       product.setCode(codeCell.getStringCellValue());
-                    }else{
-                        msg.setError("项目代码不能为空");
-                        return msg;
-                    }
-                    if(orderNumberCell!=null){
-                        product.setOrderNumber(Integer.valueOf(String.valueOf(orderNumberCell.getNumericCellValue())));
 
                     }else{
-                        msg.setError("订单数量不能为空");
+                        msg.setError("产品名和已存在的产品重复");
                         return msg;
                     }
-                    if(unitCell!=null){
-                        product.setUnit(unitCell.getStringCellValue());
 
-                    }else{
-                        msg.setError("单位不能为空");
-                        return msg;
-                    }
-                    if(groupNumberCell!=null){
-                        product.setGroupNumber(Integer.valueOf(String.valueOf(groupNumberCell.getStringCellValue())));
-                    }else{
-                        msg.setError("编组不能为空");
-                        return msg;
-                    }
-                    if(columnNumberCell!=null){
-                        product.setColumnNumber(Integer.valueOf(String.valueOf(columnNumberCell.getStringCellValue())));
-                    }
-                    if(vehicleNumberCell!=null){
-                        product.setVehicleNumber(Integer.valueOf(String.valueOf(vehicleNumberCell.getStringCellValue())));
+                }else{
+                    msg.setError("产品名称不能为空");
+                    return msg;
+                }
+                if(codeCell!=null){
+                    product.setCode(codeCell.getStringCellValue());
+                }else{
+                    msg.setError("项目代码不能为空");
+                    return msg;
+                }
+                if(orderNumberCell!=null){
+                    product.setOrderNumber((int) Math.round(orderNumberCell.getNumericCellValue()));
 
+                }else{
+                    msg.setError("订单数量不能为空");
+                    return msg;
+                }
+                if(unitCell!=null){
+                    product.setUnit(unitCell.getStringCellValue());
+
+                }else{
+                    msg.setError("单位不能为空");
+                    return msg;
+                }
+                if(groupNumberCell!=null){
+                    product.setGroupNumber((int) Math.round(groupNumberCell.getNumericCellValue()));
+                }else{
+                    msg.setError("编组不能为空");
+                    return msg;
+                }
+                if(columnNumberCell!=null){
+                    product.setColumnNumber((int) Math.round(columnNumberCell.getNumericCellValue()));
+                }
+                if(vehicleNumberCell!=null){
+                    product.setVehicleNumber((int) Math.round(vehicleNumberCell.getNumericCellValue()));
+
+                }
+                if(descriptionCell!=null){
+                    product.setDescription(descriptionCell.getStringCellValue());
+                }
+                productList.add(product);
+
+            }
+
+            //获取派工单信息
+            sheet = workbook.getSheetAt(1);
+            rowNum = sheet.getLastRowNum();
+
+            for(int indexNum=1;indexNum<rowNum;indexNum++){
+                XSSFRow row = sheet.getRow(indexNum);
+                //跳过空行
+                if(row==null){
+                    continue;
+                }
+
+                //工序信息
+                XSSFCell productNameCell = row.getCell(0);
+                XSSFCell versionNumberCell = row.getCell(1);
+                XSSFCell nameCell = row.getCell(2);
+                XSSFCell workingTimeCell = row.getCell(3);
+                XSSFCell unitPriceCell = row.getCell(4);
+                XSSFCell checkTypeCell = row.getCell(5);
+                if( productNameCell!=null){
+                    productNameCell.setCellType(CellType.STRING);
+                }
+                if(versionNumberCell!=null){
+                    versionNumberCell.setCellType(CellType.STRING);
+                }
+                if(nameCell!=null){
+                    nameCell.setCellType(CellType.STRING);
+                }
+                if(workingTimeCell!=null){
+                    workingTimeCell.setCellType(CellType.NUMERIC);
+                }
+                if(unitPriceCell!=null){
+                    unitPriceCell.setCellType(CellType.NUMERIC);
+                }
+                if(checkTypeCell!=null){
+                    checkTypeCell.setCellType(CellType.STRING);
+                }
+
+                ProdProcedure prodProcedure=new ProdProcedure();
+                if( productNameCell!=null){
+                    prodProcedure.setProductName(productNameCell.getStringCellValue());
+                }else{
+                    msg.setError("产品名称不能为空");
+                }
+                if(versionNumberCell!=null){
+                    prodProcedure.setVersionNumber(versionNumberCell.getStringCellValue());
+
+                }else{
+                    msg.setError("版本号不能为空");
+                }
+                if(nameCell!=null){
+                    prodProcedure.setName(nameCell.getStringCellValue());
+
+                }else{
+                    msg.setError("工序名称不能为空");
+                }
+                if(workingTimeCell!=null){
+                    prodProcedure.setWorkingTime((int) Math.round(workingTimeCell.getNumericCellValue()));
+
+                }else{
+                    msg.setError("单件工时不能为空");
+                }
+                if(unitPriceCell!=null){
+                    prodProcedure.setUnitPrice(new BigDecimal(unitPriceCell.getNumericCellValue()));
+                }else{
+                    msg.setError("单件工价不能为空");
+                }
+                if(checkTypeCell!=null){
+                    String checkType = String.valueOf(checkTypeCell.getStringCellValue());
+                    switch (checkType){
+                        case "自检" : prodProcedure.setCheckType(0);break;
+                        case "互检" : prodProcedure.setCheckType(1);break;
+                        case "专检" : prodProcedure.setCheckType(2);break;
+                        default: msg.setError("质检类型只能为:自检,互检,专检");return msg;
                     }
-                    if(descriptionCell!=null){
-                        product.setDescription(descriptionCell.getStringCellValue());
-                        descriptionCell.setCellType(CellType.STRING);
-                    }
-                    if(categoryNameCell!=null){
-
-                        ProdCategory category = prodCategoryMapper.selectOne(new QueryWrapper<ProdCategory>().eq("name", categoryNameCell.getStringCellValue()));
-                        if(category==null){
-                            msg.setError("该分类不存在");
-                            return msg;
-                        }
-                        product.setCategoryName(category.getName());
-                        product.setCategoryId(category.getId());
-                    }else{
-                        msg.setError("分类名称不能为空");
-                        return msg;
-                    }
-                    rowIndex+=3;
                 }else{
-                    //工序和物料信息
-                    XSSFCell versionNumberPCell = row.getCell(0);
-                    XSSFCell namePCell = row.getCell(1);
-                    XSSFCell workingTimeCell = row.getCell(2);
-                    XSSFCell unitPriceCell = row.getCell(3);
-                    XSSFCell checkTypeCell = row.getCell(4);
-                    XSSFCell columnNumberCell = row.getCell(5);
-                    XSSFCell versionNumberMCell = row.getCell(6);
-                    XSSFCell nameMCell = row.getCell(7);
-                    XSSFCell companyCodeCell = row.getCell(8);
-                    XSSFCell materialQualityCell = row.getCell(9);
-                    XSSFCell thicknessCell = row.getCell(10);
-                    XSSFCell numberProductCell = row.getCell(11);
-                    XSSFCell numberVehicleCell = row.getCell(11);
+                    msg.setError("质检类型不能为空");
+                }
 
+                prodProcedureList.add(prodProcedure);
+            }
+
+            //检查同一版本的同一版本号工序中有没有重复的
+            for (ProdProcedure prodProcedure : prodProcedureList) {
 
+                long count = prodProcedureList.stream()
+                        .filter(procedure -> procedure.getProductName().equals(prodProcedure.getProductName()) && procedure.getVersionNumber().equals(prodProcedure.getVersionNumber()) && procedure.getName().equals(prodProcedure.getName()))
+                        .count();
+                if(count>1){
+                    msg.setError("产品"+prodProcedure.getProductName()+"的"+prodProcedure.getVersionNumber()+"版本工序重复了");
+                    return msg;
                 }
             }
 
+            System.out.println(productList);
+            System.out.println(prodProcedureList);
+            //插入数据
+            if(saveBatch(productList)) {
+
+                for (Product product : productList) {
+                    prodProcedureList.stream()
+                            .filter(prodProcedure -> prodProcedure.getProductName().equals(product.getName()))
+                            .forEach(prodProcedure ->{
+                                prodProcedure.setProductId(product.getId());
+                                prodProcedure.setCompanyId(companyId);
+
+                            } );
+                }
+            }
+            prodProcedureService.saveBatch(prodProcedureList);
 
         } catch (IOException e) {
             e.printStackTrace();
@@ -351,10 +476,190 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
 //            file.deleteOnExit();//程序退出时删除临时文件
             System.out.println(file.delete());
         }
-        return null;
+        return msg;
+    }
+
+
+    @Override
+    public HttpRespMsg exportData(String date, Integer productType)  {
+        HttpRespMsg msg=new HttpRespMsg();
+
+        List<Integer> productIdList =Arrays.asList( JSONObject.parseObject(date, Integer[].class));
+
+        if(productIdList!=null&&productIdList.size()>0) {
+
+            //获取数据
+            List<Product> productList = productMapper.selectBatchIds(productIdList);
+            List<ProdProcedure> prodProcedureList = prodProcedureMapper.selectList(new LambdaQueryWrapper<ProdProcedure>().in(ProdProcedure::getProductId, productIdList));
+
+            //表格
+            List<String> pdTitles; //列的名称
+            pdTitles = Arrays.asList("产品名称", "项目代码", "订单数量", "单位", "编组", "每列数量", "每辆数量", "描述");
+            List<String> pcTitles; //列的名称
+            pcTitles = Arrays.asList("产品名称", "版本号", "工序名称", "单件工时", "单件工价", "质检类型");
+
+            //设置表格格式
+            HSSFWorkbook wb = new HSSFWorkbook();
+
+            HSSFCellStyle style = wb.createCellStyle();
+            style.setBorderBottom(BorderStyle.valueOf((short) 1));
+            style.setBorderLeft(BorderStyle.valueOf((short) 1));
+            style.setBorderRight(BorderStyle.valueOf((short) 1));
+            style.setBorderTop(BorderStyle.valueOf((short) 1));
+            //水平居中
+            style.setAlignment(HorizontalAlignment.CENTER);
+            //垂直对齐
+            style.setVerticalAlignment(VerticalAlignment.CENTER);
+            style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+            style.setBottomBorderColor(IndexedColors.BLACK.index);
+            //背景颜色
+            style.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
+            HSSFFont headerFont1 = (HSSFFont) wb.createFont();
+            //字体加粗
+            headerFont1.setBold(true);
+            //字体类型
+            headerFont1.setFontName("黑体");
+            //字体大小
+            headerFont1.setFontHeightInPoints((short) 15);
+            style.setFont(headerFont1);
+
+
+            HSSFSheet sheet=wb.createSheet("产品基本信息");
+            //设置每一列的列宽
+            sheet.setColumnWidth(0,256*15);
+            sheet.setColumnWidth(1,256*15);
+            sheet.setColumnWidth(2,256*15);
+            sheet.setColumnWidth(3,256*15);
+            sheet.setColumnWidth(4,256*15);
+            sheet.setColumnWidth(5,256*15);
+            sheet.setColumnWidth(6,256*15);
+            sheet.setColumnWidth(7,256*40);
+
+            HSSFRow row = sheet.createRow(0);
+            //创建标题
+            HSSFCell cell = null;
+            for (int i = 0; i < pdTitles.size(); i++) {
+                cell = row.createCell(i);
+                cell.setCellValue(pdTitles.get(i));
+                cell.setCellStyle(style);
+            }
+            //写入产品基本信息
+            for(int i=1;i<=productList.size();i++){
+                row=sheet.createRow(i);
+                row.createCell(0).setCellValue(productList.get(i-1).getName());
+                row.createCell(1).setCellValue(productList.get(i-1).getCode());
+                row.createCell(2).setCellValue(productList.get(i-1).getOrderNumber());
+                row.createCell(3).setCellValue(productList.get(i-1).getUnit());
+                row.createCell(4).setCellValue(productList.get(i-1).getGroupNumber());
+                row.createCell(5).setCellValue(productList.get(i-1).getColumnNumber());
+                row.createCell(6).setCellValue(productList.get(i-1).getVehicleNumber());
+                row.createCell(7).setCellValue(productList.get(i-1).getDescription());
+            }
+
+
+
+
+
+             sheet=wb.createSheet("派工单");
+            //设置每一列的列宽
+            sheet.setColumnWidth(0,256*15);
+            sheet.setColumnWidth(1,256*15);
+            sheet.setColumnWidth(2,256*15);
+            sheet.setColumnWidth(3,256*15);
+            sheet.setColumnWidth(4,256*15);
+            sheet.setColumnWidth(5,256*15);
+
+
+            row = sheet.createRow(0);
+            //创建标题
+             cell = null;
+            for (int i = 0; i < pcTitles.size(); i++) {
+                cell = row.createCell(i);
+                cell.setCellValue(pcTitles.get(i));
+                cell.setCellStyle(style);
+            }
+            //写入工序基本信息
+            for(int i=1;i<=prodProcedureList.size();i++){
+                row=sheet.createRow(i);
+                row.createCell(0).setCellValue(prodProcedureList.get(i-1).getProductName());
+                row.createCell(1).setCellValue(prodProcedureList.get(i-1).getVersionNumber());
+                row.createCell(2).setCellValue(prodProcedureList.get(i-1).getName());
+                row.createCell(3).setCellValue(prodProcedureList.get(i-1).getWorkingTime());
+                row.createCell(4).setCellValue(prodProcedureList.get(i-1).getUnitPrice().toString());
+
+                String chekType="";
+                switch(prodProcedureList.get(i-1).getCheckType()){
+                    case 0: chekType="自检";break;
+                    case 1: chekType="互检";break;
+                    case 2: chekType="专检";
+                }
+
+                row.createCell(5).setCellValue(chekType);
+            }
+
+
+            //导出excel
+            String result="系统提示:Excel文件导出成功!";
+
+            String title= "产品详情"+System.currentTimeMillis();
+            String fileName= title+".xlsx";
+            String path="D://cloud/upload/";
+            try {
+                File dir = null;
+                dir = new File(path);
+                // D://cloud/upload 文件上传后所存储的位置,部署到服务器上时配置服务器地址即可
+                if (!dir.exists()) {
+                    dir.mkdirs();
+                }
+                FileOutputStream os = new FileOutputStream(path+fileName);//保存到本地
+                wb.write(os);
+                os.flush();
+                os.close();
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+
+            msg.data ="/upload/"+fileName;
 
+        }
+        return msg;
+    }
 
+    @Override
+    public HttpRespMsg insertProductInfo(String name, Integer id, HttpServletRequest request) {
+        HttpRespMsg msg=new HttpRespMsg();
+        String token = request.getHeader("Token");
+        Integer companyId = userMapper.selectById(token).getCompanyId();
 
+        if(count(new LambdaQueryWrapper<Product>()
+                .eq(!StringUtils.isEmpty(name),Product::getName,name).eq(companyId!=null,Product::getCompanyId,companyId))>0){
+            msg.setError("产品名称重复");
+            return msg;
+        }
 
+
+        //1.查询目标产品的信息
+        Product product = productMapper.selectById(id);
+        List<ProdProcedure> prodProcedureList = prodProcedureMapper.selectList(new LambdaQueryWrapper<ProdProcedure>()
+                .eq(id != null, ProdProcedure::getProductId, id)
+                .eq(companyId != null, ProdProcedure::getCompanyId, companyId)
+        );
+        System.out.println(prodProcedureList);
+
+        //2.修改
+        product.setName(name);
+        product.setId(null);
+
+        System.out.println(product);
+
+        productMapper.insert(product);
+        prodProcedureList.stream().forEach(prodProcedure ->{
+            prodProcedure.setProductId(product.getId());
+            prodProcedure.setProductName(name);
+        });
+
+        prodProcedureService.saveBatch(prodProcedureList);
+
+        return msg;
     }
 }

+ 27 - 10
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/components/chooseSomeone.vue

@@ -6,7 +6,7 @@
     </div>
     <div class="chooseSomeone_Con contentRoll">
       <!-- 单选 -->
-      <van-radio-group v-model="radioVal" class="chooseSomeone_radio_group" v-if="groupView == 1">
+      <van-radio-group v-model="radioVal" class="chooseSomeone_radio_group" v-if="newGroupView == 1">
         <van-radio :name="item.id" v-for="item, index in personnelList" :key="index">
           <div class="chooseSomeone_radio_group_item">
             <div>{{ item.name }}</div>
@@ -16,7 +16,7 @@
       </van-radio-group>
 
       <!-- 复选 -->
-      <van-checkbox-group v-model="groupVal" class="chooseSomeoneo_group" v-if="groupView == 2">
+      <van-checkbox-group v-model="groupVal" class="chooseSomeoneo_group" v-if="newGroupView == 2">
         <van-checkbox :name="item.id" v-for="item, index in personnelList" :key="index">
           <div class="chooseSomeone_group_item">
             <div>{{ item.name }}</div>
@@ -26,17 +26,20 @@
       </van-checkbox-group>
 
       <!-- tree -->
-      <div class="treeBox" v-if="groupView == 3">
-        <div class="treeBox_tree_text"><van-icon name="arrow-left" />返回</div>
+      <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_tree">
           <el-tree v-model="treeVal" show-checkbox node-key="id" :data="personnelTree" :props="defaultProps"></el-tree>
         </div>
       </div>
     </div>
-    <div class="chooseSomeone_btn">
-      <van-button round size="small">从其他工位选择员工</van-button>
+    <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">确定</van-button>
     </div>
+    <div class="chooseSomeone_btn" v-if="!newGroupViewBack">
+      <van-button round type="info" size="small" style="width: 100%;">确定</van-button>
+    </div>
   </div>
 </template>
 
@@ -45,8 +48,12 @@ export default {
   props: {
     groupView: {
       type: Number,
-      default: () => 3 // 1单选 2复选 3tree
-    }
+      default: () => 1 // 1单选 2复选 3tree
+    },
+    groupViewBack: {
+      type: Boolean,
+      default: () => false // 是否显示从其他工位选择员工
+    } 
   },
   components: {},
   data() {
@@ -110,16 +117,26 @@ export default {
       defaultProps: {
         children: 'children',
         label: 'label'
-      }
+      },
+
+      newGroupView: '', // 组件传过来的值
+      newGroupViewBack: '', // 组件传过来的值
     };
   },
   computed: {},
   watch: {},
   created() { },
-  mounted() { },
+  mounted() { 
+    this.newGroupView = JSON.parse(JSON.stringify(this.groupView)) 
+    this.newGroupViewBack = JSON.parse(JSON.stringify(this.groupViewBack))
+   },
   methods: {
     onSearch() {
       console.log('搜索', this.selectValue)
+    },
+    newGroupViewBackCli(flg, i) {
+      this.newGroupViewBack = flg
+      this.newGroupView = i
     }
   },
 };

+ 9 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/router/index.js

@@ -65,6 +65,15 @@ const router = new Router({
             keepAlive: false
         }
     },
+    {
+        path: "/InsertionPlanAdd",
+        name: '计划新增',
+        component: () => import("@/views/planView/InsertionPlan/InsertionPlanAdd"),
+        meta: {
+            title: "计划新增",
+            keepAlive: false
+        }
+    },
     {
         path: "/statisticsView",
         component: () => import("@/views/statisticsView/statisticsView"),

+ 48 - 5
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/InsertionPlan/InsertionPlan.vue

@@ -1,13 +1,23 @@
 <template>
-  <div>
-    插单计划
+  <div class="flexCoum">
+    <van-nav-bar title="插单计划" left-text="返回" right-text="新建" @click-left="back" 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>
+      </div>
+    </div>
   </div>
 </template>
 
 <script>
+import InsertionPlanItem from './InsertionPlanItem.vue'
 export default {
   props: {},
-  components: {},
+  components: {
+    InsertionPlanItem
+  },
   data() {
     return {
 
@@ -17,10 +27,43 @@ export default {
   watch: {},
   created() {},
   mounted() {},
-  methods: {},
+  methods: {
+    back() {
+      this.$router.go(-1);
+    },
+    // 新建
+    add() {
+      this.$router.push({
+        name: '计划新增',
+        params: {
+          text: '传过来的值'
+        }
+      })
+    }
+  },
 };
 </script>
 
-<style scoped>
+<style scoped lang="less">
+  * {
+    box-sizing: border-box;
+  }
+  .InsertionPlan {
+    height: 100%;
+    background-color: #F4F4F4;
+    padding-top: 46px;
+    display: flex;
+    flex-direction: column;
+
+    .InsertionPlanBox {
+      flex: 1;
+      height: 100%;
+      margin: 15px;
+      overflow-y: auto;
 
+      .InsertionPlanBox_item {
+        margin-bottom: 20px;
+      }
+    }
+  }
 </style>

+ 137 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/InsertionPlan/InsertionPlanAdd.vue

@@ -0,0 +1,137 @@
+<template>
+  <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">
+      <!-- 内容 -->
+      <div class="InsertionPlanBox contentRoll">
+        <van-field v-model.trim="inserFrom.number" :readonly="false" label="任务变更通知号" placeholder="请输入"
+          :rules="[{ pattern }]" />
+        <van-field v-model.trim="inserFrom.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.number" :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="计划工时"
+          placeholder="请输入" :rules="[{ pattern }]" />
+        <van-field v-model.trim.number="inserFrom.number" 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="请输入" />
+      </div>
+      <!-- 提交按钮 -->
+      <div class="InsertionPlanBtn">
+        <van-button round block type="info" 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-popup>
+    <!-- 选择时间 -->
+    <van-calendar v-model="showPickerDate" @confirm="onConfirmDate" />
+  </div>
+</template>
+
+<script>
+export default {
+  props: {},
+  components: {},
+  data() {
+    return {
+      inserFrom: {
+        number: '',
+        gong: '工位A01',
+        zhang: '张三',
+        message: '',
+      },
+      pattern: /\d{6}/,
+      columns: ['杭州', '宁波', '温州', '嘉兴', '湖州'],
+      showPicker: false,
+      showPickerDate: false,
+    };
+  },
+  computed: {},
+  watch: {},
+  created() { },
+  mounted() {
+    console.log(this.$route.params)
+  },
+  methods: {
+    back() {
+      this.$router.go(-1);
+    },
+    // 校验函数返回 true 表示校验通过,false 表示不通过
+    validator(val) {
+      return /1\d{10}/.test(val);
+    },
+    onFailed(errorInfo) {
+      console.log('failed', errorInfo);
+    },
+    selectClick() {
+      this.showPicker = true;
+    },
+    onConfirm(value) {
+      console.log(value);
+      this.inserFrom.value = value;
+      this.showPicker = false;
+    },
+    selectTime() {
+      this.showPickerDate = true
+    },
+    onConfirmDate(value) {
+      console.log(value);
+      this.inserFrom.statrTime = value;
+      this.showPickerDate = false;
+    },
+    // 日期格式化
+    formatDate(date) {
+      if(date) {
+        var date = new Date(date);
+        var year = date.getFullYear();
+        var month = date.getMonth() + 1;
+        var day = date.getDate();
+        month = (month < 10 ? "0" : "") + month;
+        day = (day < 10 ? "0" : "") + day;
+        var formattedDate = year + "-" + month + "-" + day;
+        return formattedDate
+      }
+    }
+  },
+};
+</script>
+
+<style scoped lang="less">
+* {
+  box-sizing: border-box;
+}
+
+.InsertionPlan {
+  height: 100%;
+  background-color: #F4F4F4;
+  padding-top: 46px;
+  display: flex;
+  flex-direction: column;
+
+  .InsertionPlanBox {
+    flex: 1;
+    height: 100%;
+    overflow-y: auto;
+  }
+
+  .InsertionPlanBtn {
+    padding: 10px;
+  }
+}
+</style>

+ 120 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/InsertionPlan/InsertionPlanItem.vue

@@ -0,0 +1,120 @@
+<template>
+  <div class="InsertionPlanItem">
+    <div class="planItem_header">
+      <div>任务一</div>
+      <div>2022-2200220202</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" style="width: 100%;">
+        <p>组员:</p>
+        <span :style="`color: #1989fa`" @click.stop="distributionProp()">
+          张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山张山
+          <van-icon name="edit" color="#1989fa"/>
+        </span>
+        <span :style="`color: #1989fa`" v-if="false">分配</span>
+      </div>
+      <div class="planItem_conter_icon">
+        <van-icon name="arrow" size="20" color="#999" />
+      </div>
+    </div>
+
+    <!-- 弹出层选人 -->
+    <van-popup v-model="popupShow" round position="bottom" :style="{ height: '80%',background: '#F4F4F4' }" >
+      <ChooseSomeone :groupView="2" :groupViewBack="true"></ChooseSomeone>
+    </van-popup>
+  </div>
+</template>
+
+<script>
+import ChooseSomeone from '../../../components/chooseSomeone.vue'
+export default {
+  name: 'InsertionPlanItem',
+  props: {},
+  components: {
+    ChooseSomeone
+  },
+  data() {
+    return {
+      popupShow: false
+    };
+  },
+  computed: {},
+  watch: {},
+  created() {},
+  mounted() {},
+  methods: {
+    toAdd() {
+      console.log('跳转')
+      this.$router.push({
+        name: '计划新增',
+        params: {
+          text: '传过来的值'
+        }
+      })
+    },
+    distributionProp() {
+      this.popupShow = true
+    }
+  },
+};
+</script>
+
+<style scoped lang="less">
+  * {
+    box-sizing: border-box;
+    font-size: 16px;
+    color: #333;
+  }
+  .planItem_header {
+    display: flex;
+    justify-content: space-between;
+    margin-bottom: 10px;
+  }
+  .planItem_conter {
+    width: 100%;
+    padding: 8px;
+    background-color: #fff;
+    border-radius: 6px;
+    display: flex;
+    flex-wrap: wrap;
+    position: relative;
+
+    .planItem_conter_icon {
+      position: absolute;
+      top: 50%;
+      right: 2px;
+      margin-top: -10px;
+    }
+    
+    .item {
+      width: 50%;
+      display: flex;
+      padding: 8px;
+      position: relative;
+
+      p {
+        width: 70px;
+        text-align: right;
+        margin-right: 4px;
+        color: #999;
+      }
+      div {
+        width: 100%;
+        text-align: right;
+        color: #E6A23C;
+      }
+      span {
+        display: inline-block;
+        max-width: 220px;
+        min-width: 60px;
+        .van-icon {
+          top: 3px;
+        }
+      }
+    }
+  }
+</style>

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

@@ -40,7 +40,7 @@
     </div>
     <!-- 弹出层选人 -->
     <van-popup v-model="popupShow" round position="bottom" :style="{ height: '80%',background: '#F4F4F4' }" >
-      <ChooseSomeone></ChooseSomeone>
+      <ChooseSomeone :groupView="2" :groupViewBack="true"></ChooseSomeone>
     </van-popup>
   </div>
 </template>

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2500 - 2397
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/product/list.vue