瀏覽代碼

Merge branch 'master' of http://47.100.37.243:10080/ZHOU/yunsu

5 年之前
父節點
當前提交
ddbfa8f39d

+ 4 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/controller/MouldController.java

@@ -95,5 +95,9 @@ public class MouldController {
         HttpRespMsg msg = mouldService.getMoildDetail(mouldVO);
         return msg;
     }
+
+
+
+
 }
 

+ 84 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/controller/MouldFileController.java

@@ -0,0 +1,84 @@
+package com.hssx.cloudmodel.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.hssx.cloudmodel.entity.User;
+import com.hssx.cloudmodel.entity.vo.UserVO;
+import com.hssx.cloudmodel.service.MouldFileService;
+import com.hssx.cloudmodel.service.MouldService;
+import com.hssx.cloudmodel.service.UserService;
+import com.hssx.cloudmodel.util.HttpRespMsg;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2019-08-07
+ */
+@RestController
+@RequestMapping("/mould-file")
+public class MouldFileController {
+
+    @Value("${upload.path}")
+    private String path;
+    @Autowired
+    private MouldFileService mouldFileService;
+    @Autowired
+    private UserService userService;
+    /**
+     * 模具文档的上传
+     * 参数: token 用户身份凭证,projectId 项目id ,file 文件信息
+     *
+     * @return
+     */
+    @ApiOperation("模具文档的上传")
+    @RequestMapping("/uploadFile")
+    @ResponseBody
+    public HttpRespMsg uploadFile(@RequestParam(required = false) MultipartFile file,
+                                  HttpServletResponse response, HttpServletRequest request, UserVO userVO) throws Exception {
+        System.out.println("开始上传文件" + "file+" + file.getOriginalFilename());
+        HttpRespMsg msg = new HttpRespMsg();
+        msg = mouldFileService.addFile(userVO,file,path);
+        return msg;
+    }
+
+
+    @ApiOperation("模具文档的审核")
+    @RequestMapping("/check")
+    @ResponseBody
+    public HttpRespMsg check(@RequestParam Integer mouldFileId,@RequestParam Integer isPass,
+                                  HttpServletResponse response, HttpServletRequest request, UserVO userVO) throws Exception {
+        HttpRespMsg msg = new HttpRespMsg();
+        msg = mouldFileService.check(mouldFileId,isPass, userVO);
+        return msg;
+    }
+
+    /**
+     * 项目文档的列表
+     * 参数: token 用户身份凭证,projectId 项目id
+     *
+     * @return
+     */
+    @ApiOperation("模具文档的列表")
+    @RequestMapping("/list")
+    @ResponseBody
+    public HttpRespMsg list(@RequestParam Integer mouldId,  UserVO userVO){
+        HttpRespMsg msg = mouldFileService.getFileList(mouldId, userVO);
+        return msg;
+    }
+}
+

+ 230 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/entity/MouldFile.java

@@ -0,0 +1,230 @@
+package com.hssx.cloudmodel.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2019-08-07
+ */
+@TableName("tb_mould_file")
+public class MouldFile extends Model<MouldFile> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 上传人id
+     */
+    @TableField("uplodtor_id")
+    private Integer uplodtorId;
+
+    /**
+     * 上传人名字
+     */
+    @TableField("uploadtor")
+    private String uploadtor;
+
+    /**
+     * 上传时间
+     */
+    @TableField("indate")
+    private LocalDateTime indate;
+
+    /**
+     * 模具id
+     */
+    @TableField("model_id")
+    private Integer modelId;
+
+    /**
+     * 项目名称
+     */
+    @TableField("project_id")
+    private Integer projectId;
+
+    /**
+     * 文件地址
+     */
+    @TableField("file_url")
+    private String fileUrl;
+
+    /**
+     * 文件名称
+     */
+    @TableField("file_name")
+    private String fileName;
+
+    /**
+     * 所述文件类型,0-模具文档 1-模具产品验收 2-磨具保养作业操作方案 2-模具保养 3-模具更新 4-模具报废
+     */
+    @TableField("blong_type")
+    private Integer blongType;
+
+    /**
+     * 说明
+     */
+    @TableField("content")
+    private String content;
+
+    /**
+     * 审批状态: 0-待审核,1-资产方审核通过,2-生产方审核通过,3-双方审核通过,-1资产方审核不通过,-2生产方审核不通过
+     */
+    @TableField("state")
+    private Integer state;
+
+    /**
+     * 文件类型
+     */
+    @TableField("file_type")
+    private String fileType;
+
+    /**
+     * 文件大小
+     */
+    @TableField("file_size")
+    private String fileSize;
+
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getUplodtorId() {
+        return uplodtorId;
+    }
+
+    public void setUplodtorId(Integer uplodtorId) {
+        this.uplodtorId = uplodtorId;
+    }
+
+    public String getUploadtor() {
+        return uploadtor;
+    }
+
+    public void setUploadtor(String uploadtor) {
+        this.uploadtor = uploadtor;
+    }
+
+    public LocalDateTime getIndate() {
+        return indate;
+    }
+
+    public void setIndate(LocalDateTime indate) {
+        this.indate = indate;
+    }
+
+    public Integer getModelId() {
+        return modelId;
+    }
+
+    public void setModelId(Integer modelId) {
+        this.modelId = modelId;
+    }
+
+    public Integer getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(Integer projectId) {
+        this.projectId = projectId;
+    }
+
+    public String getFileUrl() {
+        return fileUrl;
+    }
+
+    public void setFileUrl(String fileUrl) {
+        this.fileUrl = fileUrl;
+    }
+
+    public String getFileName() {
+        return fileName;
+    }
+
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
+
+    public Integer getBlongType() {
+        return blongType;
+    }
+
+    public void setBlongType(Integer blongType) {
+        this.blongType = blongType;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public String getFileType() {
+        return fileType;
+    }
+
+    public void setFileType(String fileType) {
+        this.fileType = fileType;
+    }
+
+    public String getFileSize() {
+        return fileSize;
+    }
+
+    public void setFileSize(String fileSize) {
+        this.fileSize = fileSize;
+    }
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+    @Override
+    public String toString() {
+        return "MouldFile{" +
+        "id=" + id +
+        ", uplodtorId=" + uplodtorId +
+        ", uploadtor=" + uploadtor +
+        ", indate=" + indate +
+        ", modelId=" + modelId +
+        ", projectId=" + projectId +
+        ", fileUrl=" + fileUrl +
+        ", fileName=" + fileName +
+        ", blongType=" + blongType +
+        ", content=" + content +
+        ", state=" + state +
+        ", fileType=" + fileType +
+        ", fileSize=" + fileSize +
+        "}";
+    }
+}

+ 1 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/entity/vo/UserVO.java

@@ -21,4 +21,5 @@ public class UserVO extends User {
     private String token;
     private Integer isManager = 0;
     private String powers;
+    private Integer mouldId;//模具id
 }

+ 16 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/mapper/MouldFileMapper.java

@@ -0,0 +1,16 @@
+package com.hssx.cloudmodel.mapper;
+
+import com.hssx.cloudmodel.entity.MouldFile;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2019-08-07
+ */
+public interface MouldFileMapper extends BaseMapper<MouldFile> {
+
+}

+ 24 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/service/MouldFileService.java

@@ -0,0 +1,24 @@
+package com.hssx.cloudmodel.service;
+
+import com.hssx.cloudmodel.entity.MouldFile;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.hssx.cloudmodel.entity.ProjectFile;
+import com.hssx.cloudmodel.entity.vo.UserVO;
+import com.hssx.cloudmodel.util.HttpRespMsg;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2019-08-07
+ */
+public interface MouldFileService extends IService<MouldFile> {
+    HttpRespMsg addFile(UserVO userVO, MultipartFile file, String path);
+    HttpRespMsg check(Integer mouldFileId, Integer isPass, UserVO userVO);
+    HttpRespMsg dowloadFile(MouldFile projectFile, String token);
+
+    HttpRespMsg getFileList(int mouldId, UserVO userVO);
+}

+ 170 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/MouldFileServiceImpl.java

@@ -0,0 +1,170 @@
+package com.hssx.cloudmodel.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.hssx.cloudmodel.constant.Constant;
+import com.hssx.cloudmodel.entity.MouldFile;
+import com.hssx.cloudmodel.entity.ProjectFile;
+import com.hssx.cloudmodel.entity.ProjectOperationDynamics;
+import com.hssx.cloudmodel.entity.User;
+import com.hssx.cloudmodel.entity.vo.UserVO;
+import com.hssx.cloudmodel.mapper.MouldFileMapper;
+import com.hssx.cloudmodel.mapper.ProjectFileMapper;
+import com.hssx.cloudmodel.mapper.ProjectOperationDynamicsMapper;
+import com.hssx.cloudmodel.mapper.UserMapper;
+import com.hssx.cloudmodel.service.MouldFileService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.hssx.cloudmodel.util.FileUtil;
+import com.hssx.cloudmodel.util.HttpRespMsg;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2019-08-07
+ */
+@Service
+public class MouldFileServiceImpl extends ServiceImpl<MouldFileMapper, MouldFile> implements MouldFileService {
+
+
+    @Resource
+    UserMapper userMapper;
+    @Resource
+    MouldFileMapper mouldFileMapper;
+    @Resource
+    ProjectOperationDynamicsMapper projectOperationDynamicsMapper;
+
+    @Override
+    public HttpRespMsg addFile(UserVO userVO, MultipartFile file, String path) {
+        HttpRespMsg msg = new HttpRespMsg();
+        User user = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", userVO.getToken()));
+        if(user != null){
+            if (file != null && !file.isEmpty()) {
+                MouldFile projectFile = new MouldFile();
+                projectFile.setUplodtorId(user.getId());
+                projectFile.setUploadtor(user.getUsername());
+                projectFile.setModelId(userVO.getMouldId());
+                File dir = null;
+                dir = new File(path);
+                // D://cloud/upload 文件上传后所存储的位置,部署到服务器上时配置服务器地址即可
+                if (!dir.exists()) {
+                    dir.mkdirs();
+                }
+                String fileName = "";
+                if (file != null && !file.isEmpty()) {
+                    fileName = file.getOriginalFilename();
+                    projectFile.setFileName(fileName);
+                    projectFile.setFileSize(FileUtil.getReadableFileSize(file.getSize()));
+                    System.out.println("上传文件名称" + file.getName() + ", dir = " + dir.getAbsolutePath());
+                    int pos = fileName.lastIndexOf(".");
+                    String rand = UUID.randomUUID().toString().replaceAll("-", "");
+                    String sufix = fileName.substring(pos);
+                    fileName = rand + sufix;
+                    projectFile.setFileType(sufix);//文件后缀
+                    projectFile.setFileUrl("/upload/"+fileName);
+                    projectFile.setBlongType(0);
+                    if (user.getSubordinateType() == 0) {
+                        //上传人为资产方,自动审核通过
+                        projectFile.setState(1);
+                    } else if (user.getSubordinateType() == 1) {
+                        //上传人为生产方,自动审核通过
+                        projectFile.setState(2);
+                    } else {
+                        projectFile.setState(0);
+                    }
+
+                    File saveFile = new File(dir, fileName);
+                    mouldFileMapper.insert(projectFile);
+                    try {
+                        saveFile.createNewFile();
+                        file.transferTo(saveFile);
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                        projectFile = null;
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        projectFile = null;
+                    }
+                    //添加上传记录
+//                    ProjectOperationDynamics dynamics = new ProjectOperationDynamics();
+//                    dynamics.setContent(Constant.UPLOAD);
+//                    dynamics.setFileName(file.getOriginalFilename());
+//                    dynamics.setOperatorId(user.getId());
+//                    dynamics.setOperator(user.getUsername());
+//                    dynamics.setProjectId(userVO.getProjectId());
+//                    projectOperationDynamicsMapper.insert(dynamics);
+                }
+                msg.data = projectFile;
+            }
+        }else{
+            msg.setError("当前用户不存在或者未登录");
+        }
+        return msg;
+    }
+
+    @Override
+    public HttpRespMsg check(Integer mouldFileId, Integer isPass, UserVO userVO) {
+        HttpRespMsg msg = new HttpRespMsg();
+        User user = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", userVO.getToken()));
+        MouldFile mf = new MouldFile();
+        mf.setId(mouldFileId);
+        MouldFile oldData = mouldFileMapper.selectById(mouldFileId);
+        if(user != null){
+            if (user.getSubordinateType() == 0) {
+                //资产方
+                if (isPass == 1) {
+                    if (oldData.getState() == 2) {//生产方也审核通过了
+                        mf.setState(3);
+                    } else {
+                        mf.setState(1);
+                    }
+                } else {
+                    mf.setState(-1);
+                }
+                mouldFileMapper.updateById(mf);
+            } else if (user.getSubordinateType() == 1) {
+                //生产方
+                if (isPass == 1) {
+                    if (oldData.getState() == 1) {//资产方也审核通过了
+                        mf.setState(3);
+                    } else {
+                        mf.setState(2);
+                    }
+                } else {
+                    mf.setState(-2);
+                }
+                mouldFileMapper.updateById(mf);
+            } else {
+                msg.setError("只有生产方和资产方才能审核, subordinteType = " + user.getSubordinateType() + ", 无效!");
+            }
+
+
+        }
+        return msg;
+    }
+
+    @Override
+    public HttpRespMsg dowloadFile(MouldFile projectFile, String token) {
+        HttpRespMsg msg = new HttpRespMsg();
+        User user = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", token));
+        return null;
+    }
+
+    @Override
+    public HttpRespMsg getFileList(int mouldId, UserVO userVO) {
+        HttpRespMsg msg = new HttpRespMsg();
+        User user = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", userVO.getToken()));
+        List<MouldFile> list = mouldFileMapper.selectList(new QueryWrapper<MouldFile>().eq("model_id", mouldId).orderByDesc("id"));
+        msg.data = list;
+        return msg;
+    }
+}

+ 1 - 1
cloud-model/src/main/java/com/hssx/cloudmodel/util/CodeGenerator.java

@@ -204,7 +204,7 @@ public class CodeGenerator {
         //若想要生成的实体类继承某个Controller,则可打开下面注释。写上需要继承的Controller的位置即可
 //        strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController");
         //此处user是表名,多个英文逗号分割
-        strategy.setInclude("tb_project_operation_dynamics");
+        strategy.setInclude("tb_mould_file");
 //        strategy.setExclude();//数据库表全生成
 //        strategy.setInclude(scanner("user").split(","));//表名,多个英文逗号分割
         strategy.setControllerMappingHyphenStyle(true);

+ 27 - 0
cloud-model/src/main/resources/mapper/MouldFileMapper.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.hssx.cloudmodel.mapper.MouldFileMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.hssx.cloudmodel.entity.MouldFile">
+        <id column="id" property="id" />
+        <result column="uplodtor_id" property="uplodtorId" />
+        <result column="uploadtor" property="uploadtor" />
+        <result column="indate" property="indate" />
+        <result column="model_id" property="modelId" />
+        <result column="project_id" property="projectId" />
+        <result column="file_url" property="fileUrl" />
+        <result column="file_name" property="fileName" />
+        <result column="blong_type" property="blongType" />
+        <result column="content" property="content" />
+        <result column="state" property="state" />
+        <result column="file_type" property="fileType" />
+        <result column="file_size" property="fileSize" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, uplodtor_id, uploadtor, indate, model_id, project_id, file_url, file_name, blong_type, content, state, file_type, file_size
+    </sql>
+
+</mapper>

+ 46 - 28
cloud-socket/src/com/js/kbt/socket/UserHandler.java

@@ -56,7 +56,7 @@ public class UserHandler extends SimpleChannelInboundHandler<String> {
             {
         System.out.println("收到==="+arg1+"\n");
         String ret = processMsg(arg1);
-        sendMsg(ret);
+//        sendMsg(ret);
     }
     
     private String processMsg(String input) {
@@ -119,27 +119,33 @@ public class UserHandler extends SimpleChannelInboundHandler<String> {
     	} else {
     		logger.error("调用基站解析平台出错: " + resp);
     	}
-    	
+    	String crcStr = input.substring(input.length() - 4);
+    	item.setCrcCode(""+reverseParseHex(crcStr));
     	//存入数据库
     	mouldHistoryMapper.insertSelective(item);
     	//模具开合记录
     	int cnt = item.getRunCnt();
     	int start = 69;
     	System.out.println("开合模次数="+cnt);
-    	for (int pos=0; pos<cnt; pos++ ) {
-    		//合模时间
-    		MouldHistoryTime time = new MouldHistoryTime();
-    		time.setHistoryId(item.getId());
-    		time.setSeq(pos + 1);
-    		Date closeTime = parseDate(input, start, pos, 0);
-    		time.setCloseTime(closeTime);
-    		//开模时间
-    		Date openTime = parseDate(input, start, pos, 6);
-    		time.setOpenTime(openTime);
-    		int timeCost = (int) (openTime.getTime() - closeTime.getTime());
-    		time.setTimeCost(timeCost);
-    		mouldHistoryTimeMapper.insertSelective(time);
+    	logger.info("时间=="+input.substring(start*2));
+    	int end = (start+(cnt-1)*6+5 + 6)*2;
+    	if (input.length() >= end) {//防止传过来的只有开合模次数,却没有时间
+    		for (int pos=0; pos<cnt; pos++ ) {
+        		//合模时间
+        		MouldHistoryTime time = new MouldHistoryTime();
+        		time.setHistoryId(item.getId());
+        		time.setSeq(pos + 1);
+        		Date closeTime = parseDate(input, start, pos, 0);
+        		time.setCloseTime(closeTime);
+        		//开模时间
+        		Date openTime = parseDate(input, start, pos, 6);
+        		time.setOpenTime(openTime);
+        		int timeCost = (int) (openTime.getTime() - closeTime.getTime());
+        		time.setTimeCost(timeCost);
+        		mouldHistoryTimeMapper.insertSelective(time);
+        	}
     	}
+    	
     	MouldHistoryTimeExample exp = new MouldHistoryTimeExample();
     	exp.createCriteria().andHistoryIdEqualTo(item.getId());
     	List<MouldHistoryTime> list = mouldHistoryTimeMapper.selectByExample(exp);
@@ -214,7 +220,7 @@ public class UserHandler extends SimpleChannelInboundHandler<String> {
     	return Integer.parseInt(str, 16);
     }
     
-    private Date parseDate(String input, int start, int pos, int dateStartPos) {
+    private static Date parseDate(String input, int start, int pos, int dateStartPos) {
     	String year = input.substring((start+pos*6 + dateStartPos)*2, (start+pos*6 + 1 + dateStartPos)*2);
 		String month = input.substring((start+pos*6+1 + dateStartPos)*2, (start+pos*6 + 2 + dateStartPos)*2);
 		String day = input.substring((start+pos*6+2 + dateStartPos)*2, (start+pos*6 + 3 + dateStartPos)*2);
@@ -223,12 +229,17 @@ public class UserHandler extends SimpleChannelInboundHandler<String> {
 		String ss = input.substring((start+pos*6+5 + dateStartPos)*2, (start+pos*6 + 6 + dateStartPos)*2);
 		StringBuilder sb = new StringBuilder();
 		int yearInt = Integer.parseInt(year, 16);
-		sb.append(yearInt < 100?"20":"2");
-		sb.append(yearInt).append("-");
-		int monthInt = Integer.parseInt(month, 16);
-		sb.append(monthInt<10?"0":"").append(monthInt).append("-");
-		int dayInt = Integer.parseInt(day, 16);
-		sb.append(dayInt<10?"0":"").append(dayInt);
+		if (yearInt == 0) {
+			sb.append("2019-01-01");
+		} else {
+			sb.append(yearInt < 100?"20":"2");
+			sb.append(yearInt).append("-");
+			int monthInt = Integer.parseInt(month, 16);
+			sb.append(monthInt<10?"0":"").append(monthInt).append("-");
+			int dayInt = Integer.parseInt(day, 16);
+			sb.append(dayInt<10?"0":"").append(dayInt);
+		}
+		
 		Date parseDate = null;
 		try {
 			parseDate = new SimpleDateFormat("yyyy-MM-dd").parse(sb.toString());
@@ -360,12 +371,19 @@ public class UserHandler extends SimpleChannelInboundHandler<String> {
 	
 	public static void main(String[] args) {
 //		String str = "1F51";
-		String str = "E85F";
-		String temp = "0x"+str;
-		int i = Integer.decode(temp);
-		System.out.println(i);
-		int p = reverseParseHex(str);
-		System.out.println(p);
+		String str = "FAAF470000000000000000000000003137333030303239333810010000000000000000000000000000000000000000001F51E85F0000000000004800646400010001000000ACE1";
+//		String temp = "0x"+str;
+//		int i = Integer.decode(temp);
+//		System.out.println(i);
+//		int p = reverseParseHex(str);
+//		System.out.println(p);
+//		int start = 69;
+//		System.out.println(str.substring(69*2));
+//		Date d = parseDate(str, start, 0, 0);
+//		System.out.println(d.toGMTString());
+		str = str.substring(str.length() - 4);
+		System.out.println(str);
+		System.out.println(reverseParseHex(str));
 	}
 	
 }

+ 1 - 0
ys_vue/src/http.js

@@ -128,6 +128,7 @@ export default {
         var user = sessionStorage.getItem('user') , token = "";
         if(user != null){
             token = JSON.parse(user).headImgurl
+            data.append("token", token);
         }
         axios({
             method: 'post',

+ 6 - 1
ys_vue/src/port.js

@@ -15,15 +15,20 @@ export default {
         addProject: '/project/add', //添加或修改项目
         projectDetail: '/project/detail', //项目详情
         projects: '/project/projectList', //筛选模具列表时作为筛选条件所加载的项目列表
+        uploadFile: '/projectfile/uploadFile', //项目文档的上传
+        dowloadFile: '/projectfile/dowloadFile', //项目文档的下载
+        fileList: '/projectfile/list', //项目文档列表
 
         getUserList: '/user/getUserList', //获取用户列表
         getUserById: '/user/getUserListByCompanyIds', // 给项目分配参与人的时候根据公司id获取公司下的人员
+
+        powerList: '/power/list', // 权限列表
     },
     mold: {
         addMold: '/mould/addOrUpdate', //添加/修改模具设备
         molds: '/mould/list', //模具列表
         modelList: '/mould/modelList', //给项目分配模具获取该公司下的模具列表
-        moldDetail: 'mould/detail', //模具详情
+        moldDetail: '/mould/detail', //模具详情
     },
     // 基础管理
     base: {

+ 5 - 1
ys_vue/src/views/base/allocation.vue

@@ -236,7 +236,7 @@
             getMoulds() {
                 this.listLoading = true;
                 this.http.post(this.port.base.mouldeList,{
-                    currentPage: this.page,
+                    pageNum: this.page,
                     pageSize: this.size
                 },
                 res => {
@@ -394,6 +394,10 @@
         created() {
             let height = window.innerHeight;
             this.tableHeight = height - 210;
+            const that = this;
+            window.onresize = function temp() {
+                that.tableHeight = window.innerHeight - 210;    
+            };
         },
         mounted() {
             this.getMsg();

+ 5 - 1
ys_vue/src/views/base/comp.vue

@@ -160,7 +160,7 @@
 				this.listLoading = true;
                 this.http.post(this.port.base.companyList, {
                     keyName: this.filters.keyName,
-                    currentPage: this.page,
+                    pageNum: this.page,
                     pageSize: this.size
                 }, res => {
                     this.listLoading = false;
@@ -302,6 +302,10 @@
         created() {
             let height = window.innerHeight;
             this.tableHeight = height - 210;
+            const that = this;
+            window.onresize = function temp() {
+                that.tableHeight = window.innerHeight - 210;    
+            };
         },
 
 		mounted() {

+ 5 - 1
ys_vue/src/views/base/factory.vue

@@ -144,7 +144,7 @@
 				this.listLoading = true;
                 this.http.post(this.port.base.factoryList, {
                     keyName: this.filters.keyName,
-                    currentPage: this.page,
+                    pageNum: this.page,
                     pageSize: this.size
                 }, res => {
                     this.listLoading = false;
@@ -355,6 +355,10 @@
         created() {
             let height = window.innerHeight;
             this.tableHeight = height - 210;
+            const that = this;
+            window.onresize = function temp() {
+                that.tableHeight = window.innerHeight - 210;    
+            };
         },
 
 		mounted() {

+ 1 - 1
ys_vue/src/views/base/role.vue

@@ -233,7 +233,7 @@
 				this.listLoading = true;
                 this.http.post(this.port.base.roleList, {
                     keyName: this.filters.keyName,
-                    currentPage: this.page,
+                    pageNum: this.page,
                     pageSize: this.size
                 }, res => {
                     this.listLoading = false;

+ 1 - 1
ys_vue/src/views/mold/moldDetail.vue

@@ -241,7 +241,7 @@
         margin: 20px 0;
         font-size: 16px;
         line-height: 24px;
-        border-left: 1px blue solid;
+        border-left: 1px #20a0ff solid;
     }
 
     .editDetail {

+ 1 - 1
ys_vue/src/views/mold/moldList.vue

@@ -210,7 +210,7 @@
                 this.listLoading = true;
                 this.http.post(this.port.mold.molds, {
                     keyName: this.filters.keyName,
-                    currentPage: this.page,
+                    pageNum: this.page,
                     pageSize: this.size,
                     projectId: this.filters.projectId == ""?-1:this.filters.projectId,
                     serchType: this.filters.serchType

+ 89 - 130
ys_vue/src/views/project/competence.vue

@@ -3,28 +3,31 @@
 		<!--工具条-->
 		<el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
 			<el-form :inline="true" :model="filters">
+                <el-col :span="3">
+                    <el-form-item>
+                        <el-select v-model="filters.companyId" clearable filterable placeholder="请选择项目">
+                            <el-option v-for="item in projects" :key="item.id" :label="item.companyName" :value="item.id">
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                </el-col>
 				<el-form-item>
-					<el-input v-model="filters.name" placeholder="姓名"></el-input>
+					<el-input v-model="filters.keyName" placeholder="请输入姓名进行搜索"></el-input>
 				</el-form-item>
 				<el-form-item>
 					<el-button type="primary" v-on:click="getUsers">查询</el-button>
 				</el-form-item>
-				<el-form-item>
-					<el-button type="primary" @click="handleAdd">新增</el-button>
-				</el-form-item>
 			</el-form>
 		</el-col>
 
 		<!--列表-->
-		<el-table :data="users" highlight-current-row v-loading="listLoading" @selection-change="selsChange" style="width: 100%;">
+		<el-table :data="list" highlight-current-row v-loading="listLoading" style="width: 100%;">
 			<el-table-column type="selection" width="55">
 			</el-table-column>
 			<el-table-column type="index" width="60">
 			</el-table-column>
 			<el-table-column prop="name" label="姓名" width="120" sortable>
 			</el-table-column>
-			<el-table-column prop="sex" label="性别" width="100" :formatter="formatSex" sortable>
-			</el-table-column>
 			<el-table-column prop="age" label="年龄" width="100" sortable>
 			</el-table-column>
 			<el-table-column prop="birth" label="生日" width="120" sortable>
@@ -41,9 +44,15 @@
 
 		<!--工具条-->
 		<el-col :span="24" class="toolbar">
-			<el-button type="danger" @click="batchRemove" :disabled="this.sels.length===0">批量删除</el-button>
-			<el-pagination layout="prev, pager, next" @current-change="handleCurrentChange" :page-size="20" :total="total" style="float:right;">
-			</el-pagination>
+            <el-pagination
+                @size-change="handleSizeChange"
+                @current-change="handleCurrentChange"
+                :page-sizes="[20 , 50 , 80 , 100]"
+                :page-size="20"
+                layout="total, sizes, prev, pager, next"
+                :total="total"
+                style="float:right;">
+            </el-pagination>
 		</el-col>
 
 		<!--编辑界面-->
@@ -73,53 +82,26 @@
 				<el-button type="primary" @click.native="editSubmit" :loading="editLoading">提交</el-button>
 			</div>
 		</el-dialog>
-
-		<!--新增界面-->
-		<el-dialog title="新增" v-model="addFormVisible" :close-on-click-modal="false">
-			<el-form :model="addForm" label-width="80px" :rules="addFormRules" ref="addForm">
-				<el-form-item label="姓名" prop="name">
-					<el-input v-model="addForm.name" autocomplete="off"></el-input>
-				</el-form-item>
-				<el-form-item label="性别">
-					<el-radio-group v-model="addForm.sex">
-						<el-radio class="radio" :label="1">男</el-radio>
-						<el-radio class="radio" :label="0">女</el-radio>
-					</el-radio-group>
-				</el-form-item>
-				<el-form-item label="年龄">
-					<el-input-number v-model="addForm.age" :min="0" :max="200"></el-input-number>
-				</el-form-item>
-				<el-form-item label="生日">
-					<el-date-picker type="date" placeholder="选择日期" v-model="addForm.birth"></el-date-picker>
-				</el-form-item>
-				<el-form-item label="地址">
-					<el-input type="textarea" v-model="addForm.addr"></el-input>
-				</el-form-item>
-			</el-form>
-			<div slot="footer" class="dialog-footer">
-				<el-button @click.native="addFormVisible = false">取消</el-button>
-				<el-button type="primary" @click.native="addSubmit" :loading="addLoading">提交</el-button>
-			</div>
-		</el-dialog>
 	</section>
 </template>
 
 <script>
 	import util from '../../common/js/util'
-	//import NProgress from 'nprogress'
-	import { getUserListPage, removeUser, batchRemoveUser, editUser, addUser } from '../../api/api';
-
 	export default {
 		data() {
 			return {
 				filters: {
-					name: ''
-				},
-				users: [],
+					keyName: ''
+                },
+                
+                projects: [],
+
+				list: [],
 				total: 0,
-				page: 1,
-				listLoading: false,
-				sels: [],//列表选中列
+                page: 1,
+                size: 20,
+                listLoading: false,
+                tableHeight: 0,
 
 				editFormVisible: false,//编辑界面是否显示
 				editLoading: false,
@@ -136,70 +118,63 @@
 					age: 0,
 					birth: '',
 					addr: ''
-				},
-
-				addFormVisible: false,//新增界面是否显示
-				addLoading: false,
-				addFormRules: {
-					name: [
-						{ required: true, message: '请输入姓名', trigger: 'blur' }
-					]
-				},
-				//新增界面数据
-				addForm: {
-					name: '',
-					sex: -1,
-					age: 0,
-					birth: '',
-					addr: ''
 				}
-
 			}
 		},
 		methods: {
-			//性别显示转换
-			formatSex: function (row, column) {
-				return row.sex == 1 ? '男' : row.sex == 0 ? '女' : '未知';
-			},
+            getMsg() {
+                this.http.post(this.port.project.projects, {}, res => {
+                    if (res.code == "ok") {
+                        this.projects = res.data;
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: 'error'
+                        });
+                    }
+                }, error => {
+                    this.$message({
+                        message: error,
+                        type: 'error'
+                    });
+                })
+            },
+
+            //分页
 			handleCurrentChange(val) {
 				this.page = val;
-				this.getUsers();
-			},
+				this.getPowerList();
+            },
+
+            handleSizeChange(val) {
+                this.size = val;
+				this.getPowerList();
+            },
 			//获取用户列表
-			getUsers() {
-				let para = {
-					page: this.page,
-					name: this.filters.name
-				};
+			getPowerList() {
 				this.listLoading = true;
-				//NProgress.start();
-				getUserListPage(para).then((res) => {
-					this.total = res.data.total;
-					this.users = res.data.users;
-					this.listLoading = false;
-					//NProgress.done();
-				});
-			},
-			//删除
-			handleDel: function (index, row) {
-				this.$confirm('确认删除该记录吗?', '提示', {
-					type: 'warning'
-				}).then(() => {
-					this.listLoading = true;
-					//NProgress.start();
-					let para = { id: row.id };
-					removeUser(para).then((res) => {
-						this.listLoading = false;
-						//NProgress.done();
-						this.$message({
-							message: '删除成功',
-							type: 'success'
-						});
-						this.getUsers();
-					});
-				}).catch(() => {
-
-				});
+                this.http.post(this.port.project.powerList, {
+                    keyName: this.filters.keyName,
+                    pageNum: this.page,
+                    pageSize: this.size
+                }, res => {
+                    this.listLoading = false;
+                    if (res.code == "ok") {
+                        this.list = res.data.list;
+                        this.total = res.data.total;
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: 'error'
+                        });
+                    }
+                }, error => {
+                    this.listLoading = false;
+                    this.$message({
+                        message: error,
+                        type: 'error'
+                    });
+                })
 			},
 			//显示编辑界面
 			handleEdit: function (index, row) {
@@ -265,34 +240,18 @@
 					}
 				});
 			},
-			selsChange: function (sels) {
-				this.sels = sels;
-			},
-			//批量删除
-			batchRemove: function () {
-				var ids = this.sels.map(item => item.id).toString();
-				this.$confirm('确认删除选中记录吗?', '提示', {
-					type: 'warning'
-				}).then(() => {
-					this.listLoading = true;
-					//NProgress.start();
-					let para = { ids: ids };
-					batchRemoveUser(para).then((res) => {
-						this.listLoading = false;
-						//NProgress.done();
-						this.$message({
-							message: '删除成功',
-							type: 'success'
-						});
-						this.getUsers();
-					});
-				}).catch(() => {
-
-				});
-			}
-		},
+        },
+        created() {
+            let height = window.innerHeight;
+            this.tableHeight = height - 210;
+            const that = this;
+            window.onresize = function temp() {
+                that.tableHeight = window.innerHeight - 210;    
+            };
+        },
 		mounted() {
-			this.getUsers();
+            this.getMsg();
+			this.getPowerList();
 		}
 	}
 

+ 4 - 4
ys_vue/src/views/project/project.vue

@@ -24,12 +24,12 @@
                     <el-link :underline="false" type="primary" @click="toDetail(scope.row)">{{scope.row.projectName}}</el-link>
 				</template>
 			</el-table-column>
-            <el-table-column prop="customCompaniesStr" label="生产方公司" width="600" sortable>
+            <el-table-column prop="customCompaniesStr" label="生产方公司" width="550">
 			</el-table-column>
             <el-table-column prop="manager" label="项目经理" align="center" sortable>
 			</el-table-column>
-			<el-table-column prop="creator" label="项目创建人" align="center"  sortable>
-			</el-table-column>
+			<!-- <el-table-column prop="creator" label="项目创建人" align="center"  sortable>
+			</el-table-column> -->
 			<el-table-column prop="indate" label="创建时间" width="250" align="center" sortable>
 			</el-table-column>
 			<!-- <el-table-column label="操作" width="250" align="center">
@@ -199,7 +199,7 @@
 				this.listLoading = true;
 				this.http.post(this.port.project.projectList, {
                     keyName: this.filters.keyName,
-                    currentPage: this.page,
+                    pageNum: this.page,
                     pageSize: this.size,
                 }, res => {
                     this.listLoading = false;

+ 151 - 56
ys_vue/src/views/project/projectDetail.vue

@@ -28,27 +28,39 @@
                 </el-col>
                 <el-col :span="6" class="detail">
                     资产方审批人:
-                    <span class="info">{{proDetail.initial}}</span>
+                    <span class="info">{{proDetail.ownerApprover}}</span>
                 </el-col>
                 <el-col :span="6" class="detail">
                     生产方审批人:
-                    <span class="info">{{proDetail.initial}}</span>
+                    <span class="info">{{proDetail.customerApprover}}</span>
                 </el-col>
-                <el-col :span="6" class="detail">
+                <el-col :span="24" class="detail">
                     生产方公司:
-                    <span class="info">{{proDetail.lifetime}}</span>
+                    <span class="info" v-for="(item, index) in proDetail.customCompanies">
+                        {{item.companyName}}
+                        <span v-if="index != proDetail.customCompanies.length-1">、</span>
+                    </span>
                 </el-col>
                 <el-col :span="24" class="detail">
                     项目模具:
-                    <span class="info">{{proDetail.RFIDcode}}</span>
+                    <span class="info model" v-for="(item, index) in proDetail.models">
+                        <span @click="toMold(item.id)">{{item.modelName}}({{item.modelNo}})</span>
+                        <span v-if="index != proDetail.models.length-1">、</span>
+                    </span>
                 </el-col>
                 <el-col :span="24" class="detail">
                     资产方人员:
-                    <span class="info">{{proDetail.mouldNumber}}</span>
+                    <span class="info" v-for="(item, index) in proDetail.ownerUsers">
+                        {{item.username}}
+                        <span v-if="index != proDetail.ownerUsers.length-1">、</span>
+                    </span>
                 </el-col>
                 <el-col :span="24" class="detail">
                     生产方人员:
-                    <span class="info">{{proDetail.project}}</span>
+                    <span class="info" v-for="(item, index) in proDetail.customUsers">
+                        {{item.username}}
+                        <span v-if="index != proDetail.customUsers.length-1">、</span>
+                    </span>
                 </el-col>
             </el-col>
 
@@ -58,25 +70,36 @@
                 </el-upload>
             </el-col>
             <el-col :span="24">
-                <el-table :data="documents" highlight-current-row v-loading="listLoading" style="width: 100%;height:800px;">
+                <el-table :data="files" highlight-current-row v-loading="listLoading" height="400" style="width: 100%;">
                     <el-table-column type="index" width="40"></el-table-column>
-                    <el-table-column prop="name" label="名称" sortable></el-table-column>
-                    <el-table-column prop="size" label="大小" width="200" sortable></el-table-column>
-                    <el-table-column prop="uploader" label="上传者" width="200" sortable></el-table-column>
-                    <el-table-column prop="uploadTime" label="上传时间" width="200" sortable></el-table-column>
-                    <el-table-column label="状态" width="200" sortable>
-                    <template slot-scope="scope">
-                        <span v-if="scope.row.state == 0">需要</span>
-                        <span v-else>不需要</span>
-                    </template>
-                    </el-table-column>
+                    <el-table-column prop="fileName" label="名称" sortable></el-table-column>
+                    <el-table-column prop="fileSize" label="大小" width="150" sortable></el-table-column>
+                    <el-table-column prop="uploader" label="上传者" width="120" sortable></el-table-column>
+                    <el-table-column prop="indate" label="上传时间" width="200" sortable></el-table-column>
                     <el-table-column label="操作" width="220" sortable>
-                    <el-button size="small">浏览</el-button>
-                    <el-button size="small">下载</el-button>
-                    <el-button size="small" type="danger">删除</el-button>
+                        <template slot-scope="scope">
+                            <el-button size="small">
+                                <a :href="scope.row.url" :download="scope.row.fileName">下载</a></el-button>
+                            <el-button size="small" type="danger" v-if="scope.row.uploaderId == user.id">删除</el-button>
+                        </template>
                     </el-table-column>
                 </el-table>
             </el-col>
+
+            <el-col :span="24" class="title">操作记录</el-col>
+            <el-table :data="operations" highlight-current-row v-loading="listLoading" height="400" style="width: 100%;">
+                <el-table-column type="index" width="40"></el-table-column>
+                <el-table-column prop="name" label="姓名" width="400" sortable></el-table-column>
+                <el-table-column prop="document" label="文档名称" sortable></el-table-column>
+                <el-table-column label="操作" width="400" sortable>
+                    <template slot-scope="scope">
+                        <span v-if="scope.row.operations == 0">浏览</span>
+                        <span v-else-if="scope.row.operations == 1">下载</span>
+                        <span v-else>删除</span>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="time" label="时间" width="400" sortable></el-table-column>
+            </el-table>
         </el-col>
 
         <!--编辑界面-->
@@ -104,7 +127,7 @@
                     </el-form-item>
                 </el-col>
                 <el-col :span="12">
-                    <el-form-item label="资产方审批人">
+                    <el-form-item label="资产方审批人" prop="ownerApproverId">
                         <el-select v-model="editForm.ownerApproverId" clearable filterable placeholder="请选择资产方审批人" value-key='id' style="width:190px">
                             <el-option v-for="item in assets" :key="item.id" :label="item.username" :value="item.id">
                             </el-option>
@@ -112,7 +135,7 @@
                     </el-form-item>
                 </el-col>
                 <el-col :span="12">
-                    <el-form-item label="生产方审批人">
+                    <el-form-item label="生产方审批人" prop="customerApproverId">
                         <el-select v-model="editForm.customerApproverId" clearable filterable placeholder="请选择生产方审批人" value-key='id' style="width:190px">
                             <el-option v-for="item in produce" :key="item.id" :label="item.username" :value="item.id">
                             </el-option>
@@ -161,29 +184,14 @@
                 user: JSON.parse(sessionStorage.getItem('user')),
                 //临时数据
                 proDetail: {},
-                documents: [
-                    {
-                    name: "墨盒产品验证文档.word",
-                    size: "100KB",
-                    uploader: "张富贵",
-                    uploadTime: "2019-07-24",
-                    state: 0
-                    }
-                ],
-                operations: [
-                    {
-                    name: "王多银",
-                    document: "墨盒产品验证文档.word",
-                    operation: 0,
-                    time: "时间"
-                    }
-                ],
+                files: [],
 
                 allDetail: {
                     overflow: 'auto',
                     padding: '0px 5px',
                     height: 0
                 },
+
                 listLoading: false,
                 activePage: 0,
 
@@ -200,6 +208,12 @@
                     ],
                     managerId: [
                         { required: true, message: '请选择项目经理', trigger: ['blur','change'] }
+                    ],
+                    ownerApproverId: [
+                        { required: true, message: '请选择资产方审批人', trigger: ['blur','change'] }
+                    ],
+                    customerApproverId: [
+                        { required: true, message: '请选择生产方审批人', trigger: ['blur','change'] }
                     ]
                 },
                 
@@ -223,16 +237,29 @@
             backToList() {
                 this.$router.push("/project");
             },
+            toMold(id) {
+                this.$router.push('/moldList/' + id);
+            },
             handleClick(tab, event) {
             },
             //获取详情
             getDetail() {
-                this.listLoading = true;
                 this.http.post(this.port.project.projectDetail, {
                     id: this.detailId
                 }, res => {
                     if (res.code == "ok") {
-                        this.proDetail = res.data;
+                        var list = res.data;
+                        var approves = res.data.approves;
+
+                        for(var i in approves){
+                            if(approves[i].subordinateType == 0){
+                                list.ownerApprover = approves[i].approverName;
+                            } else {
+                                list.customerApprover = approves[i].approverName;
+                            }
+                        }
+
+                        this.proDetail = list;
                         this.getMsg();
                     } else {
                         this.$message({
@@ -247,6 +274,29 @@
                     });
                 })
             },
+            getFileList() {
+                this.listLoading = true;
+                // 获取文档列表
+                this.http.post(this.port.project.fileList, {
+                    projectId: this.detailId
+                }, res => {
+                    this.listLoading = false;
+                    if (res.code == "ok") {
+                        this.files = res.data;
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: 'error'
+                        });
+                    }
+                }, error => {
+                    this.listLoading = false;
+                    this.$message({
+                        message: error,
+                        type: 'error'
+                    });
+                })
+            },
             //获取信息
             getMsg() {
                 // 获取公司
@@ -364,13 +414,16 @@
                     });
                 })
             },
+            //打开编辑页面
             edit() {
                 this.editFormVisible = true;
                 var compArr = [] ,
                     manager = {} ,
                     ownerApproverId = '' ,
                     customerApproverId = '' ,
-                    moldArr = [];
+                    moldArr = [] ,
+                    assets = [] ,
+                    produce = [];
                 for(var i in this.proDetail.customCompanies){
                     for(var j in this.company){
                         if(this.company[j].id == this.proDetail.customCompanies[i].companyId){
@@ -387,20 +440,28 @@
 
                 for(var i in this.proDetail.approves) {
                     if(this.proDetail.approves[i].subordinateType == 0){
-                        ownerApproverId = this.proDetail.approves[i].approverName;
+                        ownerApproverId = this.proDetail.approves[i].approverId;
                     } else {
-                        customerApproverId = this.proDetail.approves[i].approverName;
+                        customerApproverId = this.proDetail.approves[i].approverId;
                     }
                 }
 
                 for(var i in this.molds){
                     for(var j in this.proDetail.models){
                         if(this.molds[i].id == this.proDetail.models[j].id){
-                            moldArr.push(this.molds[i])
+                            moldArr.push(this.molds[i].id)
                         }
                     }
                 }
 
+                for(var i in this.proDetail.ownerUsers){
+                    assets.push(this.proDetail.ownerUsers[i].id)
+                }
+
+                for(var i in this.proDetail.customUsers){
+                    produce.push(this.proDetail.customUsers[i].id)
+                }
+
                 this.editForm = {
                     id: this.proDetail.id,
                     projectName: this.proDetail.projectName,
@@ -409,14 +470,11 @@
                     ownerApproverId: ownerApproverId,
                     customerApproverId: customerApproverId,
                     modelIds: moldArr,
-                    assets: [],
-                    produce: []
+                    assets: assets,
+                    produce: produce
                 }
             },
-            //上传
-            uploadFile(params) {
-                console.log(params)
-            },
+            //提交
             addSubmit() {
                 this.$refs.editForm.validate((valid) => {
 					if (valid) {
@@ -444,7 +502,7 @@
                             }
                         }
                         
-                        if(userIds != ""){
+                        if(userIds != "" && this.editForm.produce.length != 0){
                             userIds += ","
                         }
 
@@ -477,7 +535,7 @@
                                     message: '修改成功',
                                     type: 'success'
                                 });
-                                this.getUsers();
+                                this.getDetail();
                             } else {
                                 this.$message({
                                     message: res.msg,
@@ -494,7 +552,33 @@
                         })
 					}
 				});
-            }
+            },
+            //上传
+            uploadFile(params) {
+                var fileObj = params.file;
+                var form = new FormData();
+                form.append("projectId", this.proDetail.id);
+                form.append("file", fileObj);
+                this.http.uploadFile(this.port.project.uploadFile, form , res => {
+                    if (res.code == "ok") {
+                        this.$message({
+                            message: '上传成功',
+                            type: 'success'
+                        });
+                        this.getFileList();
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: 'error'
+                        });
+                    }
+                }, error => {
+                    this.$message({
+                        message: error,
+                        type: 'error'
+                    });
+                })
+            },
         },
         created() {
             let height = window.innerHeight;
@@ -506,11 +590,17 @@
         },
         mounted() {
             this.getDetail();
+            this.getFileList();
         }
     };
 </script>
 
 <style scoped>
+    a {
+        text-decoration:none;
+        color: #333;
+    }
+
     .allDetail {
         overflow-y: auto;
     }
@@ -541,7 +631,7 @@
         margin: 20px 0;
         font-size: 16px;
         line-height: 24px;
-        border-left: 1px blue solid;
+        border-left: 1px #20a0ff solid;
         position: relative;
     }
 
@@ -561,6 +651,11 @@
         color: grey;
     }
 
+    .model {
+        cursor: pointer;
+        color:#20a0ff;
+    }
+
     .main {
         padding-left: 10px;
     }

+ 1 - 1
ys_vue/src/views/project/staff.vue

@@ -53,7 +53,7 @@
             <el-pagination
                 @size-change="handleSizeChange"
                 @current-change="handleCurrentChange"
-                :page-sizes="[20 , 50 , 80 , 100 , 200]"
+                :page-sizes="[20 , 50 , 80 , 100]"
                 :page-size="20"
                 layout="total, sizes, prev, pager, next"
                 :total="total"