From c041523ff100a6a43ebc4411125a3e566e19f193 Mon Sep 17 00:00:00 2001 From: jinlin <jinlin> Date: 星期五, 24 十一月 2023 14:16:16 +0800 Subject: [PATCH] Changes --- zt/core/src/main/java/com/zt/modules/oss/enums/OssStatus.java | 2 web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue | 18 web/src/components/config-uploader/src/config-uploader.vue | 67 + zt/core/src/main/java/com/zt/modules/oss/encry/NoEncryptService.java | 10 web/src/components/table-uploader/src/table-uploader.vue | 23 modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/controller/ItemCirculatOrderController.java | 19 zt/core/src/main/java/com/zt/modules/oss/annotation/DataFieldParser.java | 16 modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/model/ItemCirculatOrder.java | 11 web/packages/components/zt-uploader/src/zt-uploader.vue | 1199 ++++++++++++++++++++++++++++++------------- web/package.json | 2 zt/core/src/main/resources/mapper/oss/SysOssDao.xml | 1 modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/model/ItemCirculatOrderTechnical.java | 9 zt/core/src/main/resources/mapper/sys/SysDictTypeDao.xml | 2 zt/common/src/main/java/com/zt/core/sys/dto/DictIstance.java | 2 modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/dto/ItemCirculatOrderDto.java | 3 modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderTechnicalService.java | 4 web/src/views/modules/itemCirculatOrder/ItemCirculatOrder.vue | 11 zt/core/src/main/java/com/zt/modules/oss/cloud/LocalStorageService.java | 19 zt/core/src/main/java/com/zt/modules/oss/service/SysOssService.java | 4 web/src/views/modules/project/SoftwareTestOrder-AddOrUpdate.vue | 3 zt/core/src/main/java/com/zt/modules/oss/controller/chunkUploadController.java | 11 modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderService.java | 7 zt/core/src/main/java/com/zt/modules/oss/cloud/StorageConfig.java | 4 zt/core/src/main/java/com/zt/modules/oss/controller/SysOssController.java | 8 zt/core/src/main/java/com/zt/modules/oss/mapstruct/OssMapper.java | 3 modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/dao/ItemCirculatOrderDao.java | 2 modules/mainPart/src/main/resources/mapper/itemCirculatOrder/ItemCirculatOrderDao.xml | 12 zt/core/src/main/java/com/zt/modules/oss/model/OssFieldDefine.java | 7 zt/core/src/main/java/com/zt/modules/oss/model/SysOss.java | 6 modules/mainPart/src/main/resources/mapper/itemCirculatOrder/ItemCirculatOrderTechnicalDao.xml | 13 modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/dao/ItemCirculatOrderTechnicalDao.java | 2 web/package-lock.json | 80 ++ 32 files changed, 1,072 insertions(+), 508 deletions(-) diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/controller/ItemCirculatOrderController.java b/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/controller/ItemCirculatOrderController.java index 2a1cebe..1866021 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/controller/ItemCirculatOrderController.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/controller/ItemCirculatOrderController.java @@ -14,7 +14,9 @@ import com.zt.common.validator.group.UpdateGroup; import com.zt.life.modules.itemCirculatOrder.dto.ItemCirculatOrderDto; import com.zt.life.modules.itemCirculatOrder.model.ItemCirculatOrder; +import com.zt.life.modules.itemCirculatOrder.model.ItemCirculatOrderTechnical; import com.zt.life.modules.itemCirculatOrder.service.ItemCirculatOrderService; +import com.zt.life.modules.itemCirculatOrder.service.ItemCirculatOrderTechnicalService; import com.zt.life.modules.project.dto.SoftwareTestOrderDto; import com.zt.life.sys.dto.OssDto; import com.zt.life.sys.service.SysOssConfigService; @@ -52,6 +54,9 @@ @Autowired private SysOssConfigService sysOssConfigService; + @Autowired + private ItemCirculatOrderTechnicalService technicalService; + @GetMapping("page") @ApiOperation("鍒嗛〉") @ApiImplicitParams({ @@ -59,7 +64,10 @@ @ApiImplicitParam(name = Constant.Q.LIMIT, value = Constant.QV.LIMIT, required = true, dataType = Constant.QT.INT), @ApiImplicitParam(name = Constant.Q.ORDER_FIELD, value = Constant.QV.ORDER_FIELD, dataType = Constant.QT.STRING), @ApiImplicitParam(name = Constant.Q.ORDER, value = Constant.QV.ORDER, dataType = Constant.QT.STRING), - @ApiImplicitParam(name = "code", value = "鐗╁搧娴佽浆鍗曠紪鍙�", dataType = Constant.QT.STRING, format = "code^LK") }) + @ApiImplicitParam(name = "code", value = "鐗╁搧娴佽浆鍗曠紪鍙�", dataType = Constant.QT.STRING, format = "code^LK"), + @ApiImplicitParam(name = "softwareName", value = "鐗╁搧鍚嶇О", dataType = Constant.QT.STRING, format = "software_name^EQ"), + @ApiImplicitParam(name = "softwareIdentity", value = "鐗╁搧缂栧彿", dataType = Constant.QT.STRING, format = "software_identity^EQ") + }) public PageResult<ItemCirculatOrder> page(@ApiIgnore @QueryParam QueryFilter queryFilter){ return PageResult.ok(itemCirculatOrderService.page(queryFilter)); @@ -70,9 +78,12 @@ public Result<ItemCirculatOrderDto> getDto(Long projectId, Long circulatOrderid) { ItemCirculatOrderDto data = itemCirculatOrderService.getDto(projectId, circulatOrderid); if (circulatOrderid!=null) { - OssDto ossDto = sysOssConfigService.getOssByBusiType(circulatOrderid, "circulat_order"); - if (ossDto != null) { - data.setFiles(ossDto); + for (ItemCirculatOrderTechnical technical : technicalService.getList(circulatOrderid)) { + Long technicalId = technical.getId(); + OssDto ossDto = sysOssConfigService.getOssByBusiType(technicalId, "circulat_order"); + if (ossDto != null) { + technical.setFiles(ossDto); + } } } return Result.ok(data); diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/dao/ItemCirculatOrderDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/dao/ItemCirculatOrderDao.java index ded9dfb..51d96dd 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/dao/ItemCirculatOrderDao.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/dao/ItemCirculatOrderDao.java @@ -22,5 +22,5 @@ List<ItemCirculatOrder> getList(Map<String, Object> params); - List<DictIstance> itemList(Long projectId); + } diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/dao/ItemCirculatOrderTechnicalDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/dao/ItemCirculatOrderTechnicalDao.java index b5d4b51..fce5a18 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/dao/ItemCirculatOrderTechnicalDao.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/dao/ItemCirculatOrderTechnicalDao.java @@ -1,6 +1,7 @@ package com.zt.life.modules.itemCirculatOrder.dao; import com.zt.common.dao.BaseDao; +import com.zt.core.sys.dto.DictIstance; import com.zt.life.modules.itemCirculatOrder.model.ItemCirculatOrderTechnical; import org.apache.ibatis.annotations.Mapper; @@ -19,5 +20,6 @@ public interface ItemCirculatOrderTechnicalDao extends BaseDao<ItemCirculatOrderTechnical> { List<ItemCirculatOrderTechnical> getList(Map<String, Object> params); + List<DictIstance> itemList(Long projectId); } diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/dto/ItemCirculatOrderDto.java b/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/dto/ItemCirculatOrderDto.java index ebc9840..7a25f53 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/dto/ItemCirculatOrderDto.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/dto/ItemCirculatOrderDto.java @@ -23,8 +23,7 @@ private ItemCirculatOrder circulatOrder; @ApiModelProperty(value = "娴嬭瘯鏈烘瀯淇℃伅") private TestAgencyInfo TestAgencyInfo; - @ApiModelProperty(value = "闄勪欢") - private OssDto files; + @ApiModelProperty(value = "鎶�鏈祫鏂�") private List<ItemCirculatOrderTechnical> technicalList = new ArrayList<>(); diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/model/ItemCirculatOrder.java b/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/model/ItemCirculatOrder.java index 462b976..e16ba9d 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/model/ItemCirculatOrder.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/model/ItemCirculatOrder.java @@ -1,5 +1,6 @@ package com.zt.life.modules.itemCirculatOrder.model; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import com.zt.common.entity.BusiEntity; @@ -51,6 +52,7 @@ @JsonFormat(pattern = "yyyy-MM-dd") private Date detectDate; + @ApiModelProperty(value = "鏍″噯妫�娴嬫儏鍐佃鏄�") private String detectSituation; @@ -80,4 +82,13 @@ @ApiModelProperty(value = "骞翠唤") private String year; + @TableField(exist = false) + @ApiModelProperty(value = "鐗╁搧鍚嶇О") + private String softwareName; + + @TableField(exist = false) + @ApiModelProperty(value = "鐗╁搧缂栧彿") + private String softwareIdentity; + + } diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/model/ItemCirculatOrderTechnical.java b/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/model/ItemCirculatOrderTechnical.java index ed8d8e9..c71d036 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/model/ItemCirculatOrderTechnical.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/model/ItemCirculatOrderTechnical.java @@ -1,7 +1,9 @@ package com.zt.life.modules.itemCirculatOrder.model; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.zt.common.entity.BusiEntity; +import com.zt.life.sys.dto.OssDto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -28,7 +30,7 @@ private Integer no; @ApiModelProperty(value = "鎶�鏈祫鏂欏悕绉�") - private String infoName; + private String name; @ApiModelProperty(value = "鏍囪瘑") private String identify; @@ -48,7 +50,8 @@ @ApiModelProperty(value = "澶囨敞") private String remark; - @ApiModelProperty(value = "鏂囦欢") - private String file; + @TableField(exist = false) + @ApiModelProperty(value = "闄勪欢") + private OssDto files; } diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderService.java b/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderService.java index 54ded60..b527118 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderService.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderService.java @@ -6,6 +6,7 @@ import com.zt.core.sys.dto.DictLeafDto; import com.zt.life.export.dto.WordFile; import com.zt.life.modules.itemCirculatOrder.dao.ItemCirculatOrderDao; +import com.zt.life.modules.itemCirculatOrder.dao.ItemCirculatOrderTechnicalDao; import com.zt.life.modules.itemCirculatOrder.dto.ItemCirculatOrderDto; import com.zt.life.modules.itemCirculatOrder.model.ItemCirculatOrder; import com.zt.life.modules.itemCirculatOrder.model.ItemCirculatOrderTechnical; @@ -14,6 +15,7 @@ import com.zt.life.modules.project.service.ProjectService; import com.zt.life.modules.project.service.SoftwareTestOrderService; import com.zt.life.modules.sysBaseInfo.service.TestAgencyInfoService; +import com.zt.life.sys.dto.OssDto; import com.zt.life.sys.service.SysOssConfigService; import com.zt.modules.coderule.service.SysCodeRuleService; import com.zt.modules.oss.service.SysOssService; @@ -101,6 +103,7 @@ circulatOrderTechnical.setCirculatOrderId(circulatOrderid); technicalService.insert(circulatOrderTechnical); } + sysOssConfigService.updateOss(circulatOrderTechnical.getId(), circulatOrderTechnical.getFiles());// 淇濆瓨闄勪欢 } if (itemCirculatOrderDto.getTestAgencyInfo().getId() == 10000) { @@ -109,7 +112,6 @@ } else { testAgencyInfoService.update(itemCirculatOrderDto.getTestAgencyInfo()); } - sysOssConfigService.updateOss(itemCirculatOrderDto.getId(), itemCirculatOrderDto.getFiles());// 淇濆瓨闄勪欢 return true; } @@ -130,10 +132,9 @@ } else { ItemCirculatOrder itemCirculatOrder =new ItemCirculatOrder(); data.setCirculatOrder(itemCirculatOrder); - List<?> resultList = baseDao.itemList(projectId); + List<?> resultList = technicalService.itemList(projectId); List<?> technicalList = resultList; data.setTechnicalList((List<ItemCirculatOrderTechnical>) technicalList); - } if (projectId != null) { diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderTechnicalService.java b/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderTechnicalService.java index 99914bb..a96f816 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderTechnicalService.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderTechnicalService.java @@ -1,6 +1,7 @@ package com.zt.life.modules.itemCirculatOrder.service; import com.zt.common.service.BaseService; +import com.zt.core.sys.dto.DictIstance; import com.zt.life.modules.itemCirculatOrder.dao.ItemCirculatOrderTechnicalDao; import com.zt.life.modules.itemCirculatOrder.model.ItemCirculatOrderTechnical; import com.zt.life.modules.project.model.SoftwareTestOrderMeasured; @@ -45,5 +46,8 @@ params.put("circulatOrderid",circulatOrderid); return baseDao.getList(params); } + public List<DictIstance> itemList(Long projectId) { + return baseDao.itemList(projectId); + } } diff --git a/modules/mainPart/src/main/resources/mapper/itemCirculatOrder/ItemCirculatOrderDao.xml b/modules/mainPart/src/main/resources/mapper/itemCirculatOrder/ItemCirculatOrderDao.xml index 0944e7b..f9e3d1c 100644 --- a/modules/mainPart/src/main/resources/mapper/itemCirculatOrder/ItemCirculatOrderDao.xml +++ b/modules/mainPart/src/main/resources/mapper/itemCirculatOrder/ItemCirculatOrderDao.xml @@ -17,16 +17,6 @@ ORDER BY ${orderBySql} </if> </select> - <select id="itemList" resultType="com.zt.core.sys.dto.DictIstance"> - SELECT m.* - FROM software_test_order_measured m - JOIN software_test_order s ON s.id = m.order_id - <where> - s.is_delete = 0 and m.is_delete = 0 - <if test="projectId!=null"> - and s.project_id = ${projectId} - </if> - </where> - </select> + </mapper> diff --git a/modules/mainPart/src/main/resources/mapper/itemCirculatOrder/ItemCirculatOrderTechnicalDao.xml b/modules/mainPart/src/main/resources/mapper/itemCirculatOrder/ItemCirculatOrderTechnicalDao.xml index a97e622..cd3052e 100644 --- a/modules/mainPart/src/main/resources/mapper/itemCirculatOrder/ItemCirculatOrderTechnicalDao.xml +++ b/modules/mainPart/src/main/resources/mapper/itemCirculatOrder/ItemCirculatOrderTechnicalDao.xml @@ -16,5 +16,16 @@ ORDER BY ${orderBySql} </if> </select> - + <select id="itemList" resultType="com.zt.core.sys.dto.DictIstance"> + SELECT m.*, p.secret_class + FROM software_test_order_measured m + JOIN software_test_order s ON s.id = m.order_id + JOIN project p ON p.id = ${projectId} + <where> + s.is_delete = 0 and m.is_delete = 0 + <if test="projectId!=null"> + and s.project_id = ${projectId} + </if> + </where> + </select> </mapper> diff --git a/web/package-lock.json b/web/package-lock.json index 483c60c..e06527d 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -7504,8 +7504,7 @@ "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, "duplexer2": { "version": "0.0.2", @@ -8452,6 +8451,27 @@ "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", "dev": true }, + "event-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/event-stream/-/event-stream-4.0.1.tgz", + "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", + "requires": { + "duplexer": "^0.1.1", + "from": "^0.1.7", + "map-stream": "0.0.7", + "pause-stream": "^0.0.11", + "split": "^1.0.1", + "stream-combiner": "^0.2.2", + "through": "^2.3.8" + }, + "dependencies": { + "map-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmmirror.com/map-stream/-/map-stream-0.0.7.tgz", + "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==" + } + } + }, "eventemitter3": { "version": "2.0.3", "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-2.0.3.tgz", @@ -9295,6 +9315,11 @@ "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true + }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==" }, "from2": { "version": "2.3.0", @@ -12860,6 +12885,11 @@ "lodash._objecttypes": "~2.4.1" } }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==" + }, "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -13533,6 +13563,11 @@ "matches-selector": "^1.2.0", "min-dash": "^3.8.1" } + }, + "mingo": { + "version": "6.4.9", + "resolved": "https://registry.npmmirror.com/mingo/-/mingo-6.4.9.tgz", + "integrity": "sha512-jsOiIEJ19UtTaWjNFN4CnuKWqELm2sINZcHqI/nmjezMvXthBIQOftJrlT85NuIDoSFc0vrbjD+GnrzEgYnPbA==" }, "mini-css-extract-plugin": { "version": "0.8.2", @@ -14878,6 +14913,14 @@ "integrity": "sha512-ad/3bsalbbWhmBo0D6FZ4RNMwsLsPpL6gnvhuSaU5Vm7b06Kr5ubSltQQ0T7YKsiJQO+g22zJ4dJKNTXIyOXtA==", "dev": true, "optional": true + }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmmirror.com/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "requires": { + "through": "~2.3" + } }, "pbkdf2": { "version": "3.1.2", @@ -17340,6 +17383,17 @@ } } }, + "save": { + "version": "2.9.0", + "resolved": "https://registry.npmmirror.com/save/-/save-2.9.0.tgz", + "integrity": "sha512-eg8+g8CjvehE/2C6EbLdtK1pINVD27pcJLj4M9PjWWhoeha/y5bWf4dp/0RF+OzbKTcG1bae9qi3PAqiR8CJTg==", + "requires": { + "async": "^3.2.2", + "event-stream": "^4.0.1", + "lodash.assign": "^4.2.0", + "mingo": "^6.1.0" + } + }, "sax": { "version": "1.3.0", "resolved": "https://registry.npmmirror.com/sax/-/sax-1.3.0.tgz", @@ -17967,6 +18021,11 @@ "resolved": "https://registry.npmmirror.com/source-map-url/-/source-map-url-0.4.1.tgz", "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" }, + "spark-md5": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/spark-md5/-/spark-md5-3.0.2.tgz", + "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" + }, "sparkles": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/sparkles/-/sparkles-1.0.1.tgz", @@ -18085,6 +18144,14 @@ "safe-buffer": "~5.2.0" } } + } + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "requires": { + "through": "2" } }, "split-string": { @@ -18254,6 +18321,15 @@ } } }, + "stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", + "requires": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, "stream-consume": { "version": "0.1.1", "resolved": "https://registry.npmmirror.com/stream-consume/-/stream-consume-0.1.1.tgz", diff --git a/web/package.json b/web/package.json index f9c65f0..7af0b41 100644 --- a/web/package.json +++ b/web/package.json @@ -49,7 +49,9 @@ "qs": "^6.7.0", "quill": "^1.3.6", "sass-loader": "^7.1.0", + "save": "^2.9.0", "screenfull": "^4.2.1", + "spark-md5": "^3.0.2", "v-distpicker": "^1.2.6", "v-gantt-chart": "^1.5.1", "vue": "^2.7.14", diff --git a/web/packages/components/zt-uploader/src/zt-uploader.vue b/web/packages/components/zt-uploader/src/zt-uploader.vue index 5fcb43b..a8f22b3 100644 --- a/web/packages/components/zt-uploader/src/zt-uploader.vue +++ b/web/packages/components/zt-uploader/src/zt-uploader.vue @@ -4,39 +4,65 @@ <el-upload ref="upload" class="upload-input" - :class="{hide: uploadDisabled || !isShowUpload}" - :accept="accept" :action="uploadAction" - :before-upload="handleBeforeUpload" :data="data" - :disabled="uploading" :drag="false" :limit="limit" list-type="text" :multiple="multiple" - :name="name" - :on-change="handleChange" - :on-error="handleUploadError" + :auto-upload="true" + :before-upload="handleBeforeUpload" + :http-request="checkedFile" + :before-remove="removeFile" :on-exceed="handleExceed" - :on-success="handleUploadSuccess" - :on-progress="onUploadProgress" :show-file-list="false" :file-list="fileList" v-if="!image && !crop" - > - <el-button class="upload-btn" size="mini" type="primary" icon="el-icon-upload" - v-show="!uploadDisabled && isShowUpload">{{ buttonText }} + <!-- <el-upload--> + <!-- ref="upload"--> + <!-- class="upload-input"--> + <!-- :class="{hide: uploadDisabled || !isShowUpload}"--> + <!-- :accept="accept"--> + <!-- :action="uploadAction"--> + <!-- :before-upload="handleBeforeUpload"--> + <!-- :data="data"--> + <!-- :disabled="uploading"--> + <!-- :drag="false"--> + <!-- :limit="limit"--> + <!-- list-type="text"--> + <!-- :multiple="multiple"--> + <!-- :name="name"--> + <!-- :on-change="handleChange"--> + <!-- :on-error="handleUploadError"--> + <!-- :on-exceed="handleExceed"--> + <!-- :on-success="handleUploadSuccess"--> + <!-- :on-progress="onUploadProgress"--> + <!-- :show-file-list="false"--> + <!-- :file-list="fileList"--> + <!-- v-if="!image && !crop"--> + <!-- :auto-upload="true"--> + <!-- :http-request="checkedFile"--> + <!-- :before-remove="removeFile"--> + <!-- >--> + <div style="display:inline-block;width:600px;text-align: center" v-if="onlyUploadFile" class="el-upload__tip"> + {{computerFileName}} + </div> + <el-button slot="trigger" v-if="onlyUploadFile" size="small" type="primary">閫夊彇鏂囦欢</el-button> + <el-button type="primary" v-if="onlyUploadFile" size="small" style="margin-left:20px" @click="myCheckedFile">鎻� 浜� </el-button> + <el-button class="upload-btn" size="mini" type="primary" icon="el-icon-upload" + v-show="!uploadDisabled && isShowUpload && !onlyUploadFile">{{ buttonText }} + </el-button> + <div slot="tip" class="el-upload__tip" v-show="!uploadDisabled && isShowUpload && tip">{{ tip }}</div> </el-upload> - + <br/> <div v-show="progressFlag"> - <el-progress :text-inside="true" :stroke-width="30" :percentage="progressPercent" :format="format"></el-progress> + <el-progress :text-inside="true" :stroke-width="30" :percentage="progressPercent" :format="format"></el-progress> + </div> -</div> - - <ul class="el-upload-list el-upload-list--text" v-if="!image && !crop && showFileList"> + <ul class="el-upload-list el-upload-list--text" v-if="!image && !crop && !onlyUploadFile"> <li tabindex="0" class="el-upload-list__item is-success" v-for="(file, index) in uploadList" :key="file.id"> <a class="el-upload-list__item-name" :href="file.url" target="_blank"><i class="el-icon-document"></i>{{ file.name }}</a> @@ -71,6 +97,7 @@ :limit="limit" :list-type="drag ? 'picture' : 'picture-card'" :multiple="multiple" + :name="name" :on-change="handleChange" :on-error="handleUploadError" :on-exceed="handleExceed" @@ -161,386 +188,816 @@ </template> <script> -import Cookies from 'js-cookie' -import Cropper from 'vue-image-crop-upload' -import EleGallery from '../../vue-ele-gallery' + import Cookies from 'js-cookie' + import Cropper from 'vue-image-crop-upload' + import EleGallery from '../../vue-ele-gallery' + import SparkMD5 from "spark-md5"; + import axios from "axios"; + import {getUUID} from "../../../utils"; -export default { - name: 'ZtUploader', - props: { - // 鍊� - value: { - type: [Object, Array], - default() { - return this.multiple ? [] : null - } - }, - action: { - type: String, - default: '/sys/oss/upload' - }, - // 鏄惁涓哄浘鐗� - image: { - type: Boolean, - default: false - }, - // 鏄惁鍓 - crop: { - type: Boolean, - default: false - }, - // 瑁佸壀楂樺害 - cropHeight: { - type: Number - }, - // 瑁佸壀瀹藉害 - cropWidth: { - type: Number - }, - // 鏄惁鍚敤鎷栨嫿涓婁紶 - drag: { - type: Boolean, - default: false - }, - // 鏄惁鏀寔澶氶�夋枃浠� - multiple: { - type: Boolean, - default: false - }, - // 鍥剧墖鏄剧ず澶у皬 - size: { - type: Number, - default: 100 - }, - // 澶у皬闄愬埗(MB) - fileSize: { - type: Number - }, - // 鏂囦欢绫诲瀷, 渚嬪['png', 'jpg', 'jpeg'] - fileType: { - type: Array, - default: () => [] - }, - // 缂╃暐鍥惧悗缂�, 渚嬪涓冪墰浜戠缉鐣ュ浘鏍峰紡 (?imageView2/1/w/20/h/20) - thumbSuffix: { - type: String, - default: '' - }, - // 鏄惁鏄剧ず鎻愮ず - isShowTip: { - type: Boolean, - default: true - }, - // 寮圭獥鏍囬 - title: String, - // 鍥剧墖鎳掑姞杞� - lazy: { - type: Boolean, - default: false - }, - // 鏂囦欢涓暟鏄剧ず - limit: { - type: Number, - default: 10 - }, - // 涓婁紶鏃堕檮甯︾殑棰濆鍙傛暟 - data: Object, - // 涓婁紶鐨勬枃浠跺瓧娈靛悕 - name: { - type: String, - default: 'file' - }, - // 鎺ュ彈涓婁紶鐨勬枃浠剁被鍨嬶紙thumbnail-mode 妯″紡涓嬫鍙傛暟鏃犳晥锛� - accept: String, - buttonText: { - type: String, - default: '涓婁紶' - }, - tip: String, - showFileList: { - type: Boolean, - default: true - }, - disabled: { - type: Boolean, - default: false - } - }, - components: { - Cropper, - EleGallery - }, - inject: { - elForm: { - default: '' - } - }, - data() { - return { - progressPercent: 0, - uploadAction: `${window.SITE_CONFIG['apiURL']}${this.action}?token=${Cookies.get('token')}`, - cropData: {}, - isShowCrop: false, - uploading: false, - fileList: this.getUploadList(this.value), - uploadList: this.getUploadList(this.value), - progressFlag:false - } - }, - computed: { - // 鏄惁鏄剧ず鎻愮ず - showTip() { - return this.isShowTip && (this.fileType.length || this.fileSize) - }, - galleryValues() { - let urls = [] - if (this.value) { - if (this.multiple) { - this.value.forEach(v => urls.push({ - src: v.url, - title: v.name - })) - } else { - urls.push({ - src: this.value.url, - title: this.value.name - }) + export default { + name: 'ZtUploader', + props: { + // 鍊� + value: { + type: [Object, Array], + default() { + return this.multiple ? [] : null } + }, + dataForm: Object, + action: { + type: String, + default: '/sys/oss/uploadNew' + }, + // 鏄惁涓哄浘鐗� + showFileList: { + type: Boolean, + default: true + }, + onlyUploadFile: { + type: Boolean, + default: false + }, + // 鏄惁涓哄浘鐗� + image: { + type: Boolean, + default: false + }, + // 鏄惁鍓 + crop: { + type: Boolean, + default: false + }, + // 瑁佸壀楂樺害 + cropHeight: { + type: Number + }, + // 瑁佸壀瀹藉害 + cropWidth: { + type: Number + }, + // 鏄惁鍚敤鎷栨嫿涓婁紶 + drag: { + type: Boolean, + default: false + }, + // 鏄惁鏀寔澶氶�夋枃浠� + multiple: { + type: Boolean, + default: false + }, + // 鍥剧墖鏄剧ず澶у皬 + size: { + type: Number, + default: 100 + }, + // 澶у皬闄愬埗(MB) + fileSize: { + type: Number + }, + // 鏂囦欢绫诲瀷, 渚嬪['png', 'jpg', 'jpeg'] + fileType: { + type: Array, + default: () => [] + }, + // 缂╃暐鍥惧悗缂�, 渚嬪涓冪墰浜戠缉鐣ュ浘鏍峰紡 (?imageView2/1/w/20/h/20) + thumbSuffix: { + type: String, + default: '' + }, + // 鏄惁鏄剧ず鎻愮ず + isShowTip: { + type: Boolean, + default: true + }, + // 寮圭獥鏍囬 + title: String, + // 鍥剧墖鎳掑姞杞� + lazy: { + type: Boolean, + default: false + }, + // 鏂囦欢涓暟鏄剧ず + limit: { + type: Number, + default: 10 + }, + // 涓婁紶鏃堕檮甯︾殑棰濆鍙傛暟 + data: Object, + // 涓婁紶鐨勬枃浠跺瓧娈靛悕 + name: { + type: String, + default: 'file' + }, + // 鎺ュ彈涓婁紶鐨勬枃浠剁被鍨嬶紙thumbnail-mode 妯″紡涓嬫鍙傛暟鏃犳晥锛� + accept: String, + buttonText: { + type: String, + default: '涓婁紶' + }, + tip: String, + disabled: { + type: Boolean, + default: false } - return urls }, - isShowUpload() { // 鏄惁鏄剧ず涓婁紶鎸夐挳 - if (this.multiple) { - return this.uploadList.length < this.limit + components: { + Cropper, + EleGallery + }, + inject: { + elForm: { + default: '' + } + }, + data() { + return { + isUpload: false, + maxSize: 50 * 1024 * 1024 * 1024, // 涓婁紶鏈�澶ф枃浠堕檺鍒� 鏈�灏忓崟浣嶆槸b + multiUploadSize: 10 * 1024 * 1024, // 澶т簬杩欎釜澶у皬鐨勬枃浠朵娇鐢ㄥ垎鍧椾笂浼�(鍚庣鍙互鏀寔鏂偣缁紶) 100mb + eachSize: 10 * 1024 * 1024, // 姣忓潡鏂囦欢澶у皬 100mb + requestCancelQueue: [], // 璇锋眰鏂规硶闃熷垪锛堣皟鐢ㄥ彇娑堜笂浼� + // 姣忎笂浼犱竴鍧楃殑杩涘害 + eachProgress: 0, + // 鎬诲叡鏈夊灏戝潡銆傛柇鐐圭画浼犱娇鐢� + chunksKeep: 0, + // 鍒囧壊鍚庣殑鏂囦欢鏁扮粍 + fileChunksKeep: [], + // 杩欎釜鏂囦欢锛屾柇鐐圭画浼� + fileKeep: null, + // 鏂偣缁紶锛屾枃浠秏d5 + fileMd5Keep: "", + progressPercent: 0, + uploadAction: `${window.SITE_CONFIG['apiURL']}/sys/oss/upload_chunk?token=${Cookies.get('token')}`, + uploadCheckAction: `${window.SITE_CONFIG['apiURL']}/sys/oss/upload_success?token=${Cookies.get('token')}`, + uploadProcessAction: `${window.SITE_CONFIG['apiURL']}${this.action}?token=${Cookies.get('token')}`, + cropData: {}, + isShowCrop: false, + uploading: false, + fileList: this.getUploadList(this.value), + uploadList: this.getUploadList(this.value), + progressFlag: false + } + }, + created() { + if (this.onlyUploadFile) { + this.fileList = [{id: '1', name: '', url: ''}] } else { - return this.uploadList.length === 0 + this.fileList = [] } }, - uploadDisabled() { - return this.disabled || (this.elForm || {}).disabled - }, - successFiles() { - return this.uploadList.filter((file) => file.status === 'success') - }, - isShowGrllery() { - return this.galleryValues.length > 0 - } - }, - watch: { - value(val, oldval) { - if (this.uploadList !== val) { - this.uploadList = this.getUploadList(val) - this.fileList = this.getUploadList(val) - console.log(this.fileList,'this.fileList this.fileList') - this.$emit('getUploaderImg',this.fileList) - } - }, - isShowCrop(value) { - if (value === false) { - this.cropData = {} - } - } - }, - methods: { - format(percentage) { - return percentage === 100 ? '鍚庡彴姝e湪澶勭悊' : `${percentage}%`; - }, - // 鑾峰彇宸蹭笂浼犵殑鏂囦欢鍒楄〃 - getUploadList(val) { - if (val) { - // console.log(val, 'getUploadList val') - if (!this.multiple) { // 鍗曢�� - return [val] - } else { - // console.log([...val], 'getUploadList [...val]') - return [...val] + computed: { + // 鏄惁鏄剧ず鎻愮ず + showTip() { + return this.isShowTip && (this.fileType.length || this.fileSize) + }, + computerFileName(computerFileName) { + let fileName = 'aaaa' + if (this.fileList.length > 0) { + fileName = this.fileList[0].name } - } else { - return [] - } - }, - onUploadProgress(event, file, fileList) { - this.progressFlag = true - let per = Number( - ((event.loaded / event.total) * 100).toFixed(2) - ) - this.progressPercent = per > 100 ? 100 : per - }, - handleSetFileSet(fileName, fileType, fileSize) { - const uid = this.cropData.uid || new Date().getTime() - this.cropData = { - name: fileName, - percentage: 0, - size: fileSize, - type: fileType, - status: 'ready', - uid: uid - } - }, - handleCropSuccess(b64Data) { - this.cropData.url = b64Data - }, - handleCropUploadError(status) { - this.$message.error('涓婁紶澶辫触, 璇烽噸璇�') - this.$emit('error', status) - }, - handleCropUploadSuccess(response) { - this.cropData.status = 'success' - this.cropData.percentage = 100 - this.cropData.response = response - const file = Object.assign({}, this.cropData) - this.handleUploadSuccess(response, file) - }, - // 涓婁紶鍓嶆牎妫�鏍煎紡鍜屽ぇ灏� - handleBeforeUpload(file) { - let isAccept = true - if (this.fileType.length) { // 鏂囦欢绫诲瀷锛堝悗缂�锛変竴鑷� - let fileExtension = '' - if (file.name.lastIndexOf('.') > -1) { - fileExtension = file.name.slice(file.name.lastIndexOf('.') + 1) - } - isAccept = this.fileType.some((type) => { - if (file.type.indexOf(type) > -1) return true - if (fileExtension && fileExtension.indexOf(type) > -1) return true - return false - }) - } - if (!isAccept) { - this.$message.error(`鏂囦欢鏍煎紡涓嶆纭�, 璇蜂笂浼�${this.fileType.join('/')}鏍煎紡鏂囦欢!`) - return false - } - if (this.fileSize) { - const isLt = file.size / 1024 / 1024 < this.fileSize - if (!isLt) { - this.$message.error(`涓婁紶澶у皬涓嶈兘瓒呰繃 ${this.fileSize} MB!`) - return false - } - } - this.uploading = true - return true - }, - handleChange() { - this.uploading = false - /*const config = { - onUploadProgress: (progressEvent) => { - this.progressPercent = Number( - ((progressEvent.loaded / progressEvent.total) * 90).toFixed(2) - ) - } - } - //this.progressFlag = true; - let form = new FormData(); - form.append("file", params.file); - this.$http.post( this.uploadAction,form,config ).then((res) => { - this.progressPercent = 100; - })*/ - }, - // 鏂囦欢涓暟瓒呭嚭 - handleExceed() { - this.$message.error(`鏈�澶氫笂浼�${this.limit}涓猔) - }, - // 涓婁紶澶辫触 - handleUploadError(err) { - this.uploading = false - this.$message.error('涓婁紶澶辫触, 璇烽噸璇�') - this.$emit('error', err) - }, - // 涓婁紶鎴愬姛鍥炶皟 - handleUploadSuccess(response, file) { - console.log(response, file,'response, file') - if (response.code === 0) { - this.progressPercent = 100 - this.uploading = false - // this.$message.success('涓婁紶鎴愬姛') - if (this.multiple) { - this.uploadList.push(response.data) - this.$emit('input', this.uploadList) - } else { - this.$emit('input', response.data) - } - this.progressFlag = false - this.progressPercent = 0 - } - }, - async handleRemove(index) { - let file = this.uploadList[index] - if (file.status === 1) { // 璇佷功鏂囦欢锛岀洿鎺ヤ粠鍒楄〃鍒犻櫎锛屼笉淇濆瓨鏁版嵁搴� - this.handRemoveAndSetValue(index) - } else { - if (await this.$tip.confirm(this.$t('prompt.info', {'handle': this.$t('delete')}))) { - let res = await this.$http.delete('/sys/oss', {'data': [file.id]}) - if (res.success) { - await this.$tip.success() - this.handRemoveAndSetValue(index) + return fileName + }, + galleryValues() { + let urls = [] + if (this.value) { + if (this.multiple) { + this.value.forEach(v => urls.push({ + src: v.url, + title: v.name + })) + } else { + urls.push({ + src: this.value.url, + title: this.value.name + }) } } + return urls + }, + isShowUpload() { // 鏄惁鏄剧ず涓婁紶鎸夐挳 + if (this.multiple) { + return this.uploadList.length < this.limit + } else { + return this.uploadList.length === 0 || this.onlyUploadFile + } + }, + uploadDisabled() { + return this.disabled || (this.elForm || {}).disabled + }, + successFiles() { + return this.uploadList.filter((file) => file.status === 'success') + }, + isShowGrllery() { + return this.galleryValues.length > 0 } }, - handRemoveAndSetValue(index) { - if (this.multiple) { - this.uploadList.splice(index, 1) - this.$refs.upload.uploadFiles.splice(index, 1) - this.$emit('input', this.uploadList || []) - } else { - this.$emit('input', null) + watch: { + // eslint-disable-next-line no-unused-vars + value(val, oldval) { + if (this.uploadList !== val) { + this.uploadList = this.getUploadList(val) + this.fileList = this.getUploadList(val) + if (this.fileList.length>0){ + console.log(this.fileList[0].status, 'val.files[0].status23') + // alert('2222'+this.fileList[0].status) + } + } + }, + isShowCrop(value) { + if (value === false) { + this.cropData = {} + } + } + }, + methods: { + format(percentage) { + return percentage === 100 ? '鍚庡彴姝e湪澶勭悊' : percentage === 99 ? '姝e湪杩涜鏂囦欢鏍¢獙' : `宸蹭笂浼�${percentage}%`; + }, + // 鑾峰彇宸蹭笂浼犵殑鏂囦欢鍒楄〃 + getUploadList(val) { + if (val) { + if (val.length > 0) { + if (!this.multiple) { // 鍗曢�� + console.log(val, 'getUploadList val') + return val + } else { + console.log([...val], 'getUploadList [...val]') + return [...val] + } + } else { + return [] + } + } + }, + // eslint-disable-next-line no-unused-vars + onUploadProgress(event, file, fileList) { + this.progressFlag = true + /*let per = Number( + ((event.loaded / event.total) * 100).toFixed(2) + ) + this.progressPercent = per > 100 ? 100 : per*/ + }, + handleSetFileSet(fileName, fileType, fileSize) { + const uid = this.cropData.uid || new Date().getTime() + this.cropData = { + name: fileName, + percentage: 0, + size: fileSize, + type: fileType, + status: 'ready', + uid: uid + } + }, + handleCropSuccess(b64Data) { + this.cropData.url = b64Data + }, + handleCropUploadError(status) { + this.$message.error('涓婁紶澶辫触, 璇烽噸璇�') + this.$emit('error', status) + }, + handleCropUploadSuccess(response) { + console.log(response, 'handleCropUploadSuccess response') + this.cropData.status = 'success' + this.cropData.percentage = 100 + this.cropData.response = response + const file = Object.assign({}, this.cropData) + this.handleUploadSuccess(response, file) + }, + // 涓婁紶鍓嶆牎妫�鏍煎紡鍜屽ぇ灏� + handleBeforeUpload(file) { + let isAccept = true + if (this.fileType.length) { // 鏂囦欢绫诲瀷锛堝悗缂�锛変竴鑷� + let fileExtension = '' + if (file.name.lastIndexOf('.') > -1) { + fileExtension = file.name.slice(file.name.lastIndexOf('.') + 1) + } + isAccept = this.fileType.some((type) => { + if (file.type.indexOf(type) > -1) return true + if (fileExtension && fileExtension.indexOf(type) > -1) return true + return false + }) + } + if (!isAccept) { + this.$message.error(`鏂囦欢鏍煎紡涓嶆纭�, 璇蜂笂浼�${this.fileType.join('/')}鏍煎紡鏂囦欢!`) + return false + } + if (this.fileSize) { + const isLt = file.size / 1024 / 1024 < this.fileSize + if (!isLt) { + this.$message.error(`涓婁紶澶у皬涓嶈兘瓒呰繃 ${this.fileSize} MB!`) + return false + } + } + if (this.dataForm) { + // eslint-disable-next-line vue/no-mutating-props + this.dataForm.hasUploadFinsh = 50 + } + this.uploading = true + return true + }, + async handleChange() { + this.uploading = false + /*const config = { + onUploadProgress: (progressEvent) => { + this.progressPercent = Number( + ((progressEvent.loaded / progressEvent.total) * 90).toFixed(2) + ) + } + } + //this.progressFlag = true; + let form = new FormData(); + form.append("file", params.file); + this.$http.post( this.uploadAction,form,config ).then((res) => { + this.progressPercent = 100; + })*/ + }, + // 鏂囦欢涓暟瓒呭嚭 + handleExceed(files, fileList) { + if (this.onlyUploadFile) { + this.$set(fileList[0], 'raw', files[0]) + this.$set(fileList[0], 'name', files[0].name) + /* this.$refs.upload.clearFiles() + this.$refs.upload.handleStart(files[0])*/ + } + //this.$message.error(`鏈�澶氫笂浼�${this.limit}涓猔) + }, + // 涓婁紶澶辫触 + handleUploadError(err) { + this.uploading = false + this.$message.error('涓婁紶澶辫触, 璇烽噸璇�') + this.$emit('error', err) + }, + // 涓婁紶鎴愬姛鍥炶皟 + // eslint-disable-next-line no-unused-vars + handleUploadSuccess(response, file) { + console.log(response, 'handleUploadSuccess response') + if (response.code === 0) { + this.progressPercent = 100 + this.uploading = false + // this.$message.success('涓婁紶鎴愬姛') + if (this.multiple) { + this.uploadList.push(response.data) + this.$emit('input', this.uploadList) + } else { + this.$emit('input', response.data) + } + this.progressFlag = false + this.progressPercent = 0 + } + }, + async handleRemove(index) { + let file = this.uploadList[index] + if (file.status === 1) { // 璇佷功鏂囦欢锛岀洿鎺ヤ粠鍒楄〃鍒犻櫎锛屼笉淇濆瓨鏁版嵁搴� + this.handRemoveAndSetValue(index) + } else { + if (await this.$tip.confirm(this.$t('prompt.info', {'handle': this.$t('delete')}))) { + let res = await this.$http.delete('/sys/oss', {'data': [file.id]}) + if (res.success) { + await this.$tip.success() + this.handRemoveAndSetValue(index) + } + } + } + }, + handRemoveAndSetValue(index) { + console.log(index, 'handRemoveAndSetValue') + if (this.multiple) { + this.uploadList.splice(index, 1) + this.$refs.upload.uploadFiles.splice(index, 1) + this.$emit('input', this.uploadList || []) + } else { + this.$emit('input', null) + } + }, + nullFunction(param) { + }, + //寮�濮嬪垎鐗囦笂浼爉yCheckedFile + async myCheckedFile() { + if (!this.handleBeforeUpload(this.fileList[0].raw)) + return + let options = { + file: this.fileList[0].raw, + onProgress: function (val) { + }, + onSuccess: function (val) { + }, + onError: function (val) { + } + } + await this.checkedFile(options) + }, + async checkedFile(options) { + if (!this.isUpload) { + this.isUpload = true; + } else { + return this.$message({ + message: `褰撳墠鏂囦欢姝e湪涓婁紶`, + type: "warning" + }); + } + this.progressFlag = true + const { + maxSize, + multiUploadSize, + getSize, + splitUpload, + singleUpload + } = this; // 瑙f瀯璧嬪�� + const {file, onProgress, onSuccess, onError} = options; // 瑙f瀯璧嬪�� + + file.uid = getUUID().toString() + if (file.size > maxSize) { + return this.$message({ + message: `鎮ㄩ�夋嫨鐨勬枃浠跺ぇ浜�${getSize(maxSize)}`, + type: "error" + }); + } + this.fileKeep = file; + const uploadFunc = + file.size > multiUploadSize ? splitUpload : singleUpload; // 閫夋嫨涓婁紶鏂瑰紡 + try { + await uploadFunc(file, onProgress); + onSuccess(); + } catch (e) { + console.error(e); + this.$message({ + message: e.message, + type: "error" + }); + this.progressFlag = false; + this.progressPercent = 0; + onError(); + } + }, + // 鏍煎紡鍖栨枃浠跺ぇ灏忔樉绀烘枃瀛� + getSize(size) { + return size > 1024 + ? size / 1024 > 1024 + ? size / (1024 * 1024) > 1024 + ? (size / (1024 * 1024 * 1024)).toFixed(2) + "GB" + : (size / (1024 * 1024)).toFixed(2) + "MB" + : (size / 1024).toFixed(2) + "KB" + : size.toFixed(2) + "B"; + }, + // 鍗曟枃浠剁洿鎺ヤ笂浼� + async singleUpload(file, onProgress) { + await this.postFile( + {file, uid: file.uid, fileName: file.fileName, chunk: 0}, + onProgress + ); + const reader = new FileReader(); + + reader.readAsArrayBuffer(file); + console.log(file, 'singleUpload file'); + let hashMd5 = ""; + console.log(hashMd5); + const that = this; + + function getHash(cb) { + console.log(cb, "杩涘叆鍗曚釜涓婁紶鐨刧etHash"); + console.log("杩涘叆鍗曚釜涓婁紶鐨刧etHash"); + reader.onload = function (e) { + console.log("杩涘叆鍗曚釜涓婁紶鐨刧etHash鐨勫嚱鏁�2"); + console.log(hashMd5); + console.log(this); + // console.log(e) + const hash = SparkMD5.ArrayBuffer.hash(e.target.result, false); + console.log(e.target.result, 'e.target.result'); + console.log(hash, 'hash'); + that.hashMd5 = hash; + console.log(that.hashMd5, 'hashMd5'); + that.fileMd5Keep = hash; + cb(hash); + }; + } + + await getHash(function (hash) { + console.log(hash, 'getHash(function (hash) hash'); + console.log(that, 'getHash(function (hash) that'); + // 璇锋眰鎺ュ彛 + that.validateFile({ + name: file.name, + uid: file.uid, + md5: hash, + chunks: 1, + filter_type: "user_data_file" + }); + }); + }, + + // 澶ф枃浠跺垎鍧椾笂浼� + splitUpload(file, onProgress) { + console.log(file, 'splitUpload(file'); + // eslint-disable-next-line no-async-promise-executor + return new Promise(async (resolve, reject) => { + try { + const {eachSize} = this; + const chunks = Math.ceil(file.size / eachSize); + this.chunksKeep = chunks; + const fileChunks = await this.splitFile(file, eachSize, chunks); + this.fileChunksKeep = fileChunks; + //鍒ゆ柇姣忎笂浼犱竴涓枃浠讹紝杩涘害鏉℃定澶氬皯,淇濈暀涓や綅灏忔暟 + this.eachProgress = 100 / chunks; + this.progressFlag = true; + let currentChunk = 0; + let percent = 0; + for (let i = 0; i < fileChunks.length; i++) { + // 鏈嶅姟绔娴嬪凡缁忎笂浼犲埌绗琧urrentChunk鍧椾簡锛岄偅灏辩洿鎺ヨ烦鍒扮currentChunk鍧楋紝瀹炵幇鏂偣缁紶 + // 姝ゆ椂闇�瑕佸垽鏂繘搴︽潯 + if (Number(currentChunk) === i) { + // 姣忓潡涓婁紶瀹屽悗鍒欒繑鍥為渶瑕佹彁浜ょ殑涓嬩竴鍧楃殑index + await this.postFile( + { + chunked: true, + chunk: i, + chunks, + eachSize, + fileName: file.name, + fullSize: file.size, + uid: file.uid, + file: fileChunks[i] + }, + onProgress + ); + currentChunk++; + + // 涓婁紶瀹屼竴鍧楀悗锛岃繘搴︽潯澧炲姞 + percent = percent + this.eachProgress; + // 涓嶈兘瓒呰繃100 + this.progressPercent = percent > 100 ? 99 : Math.floor(percent); + } + } + const spark = new SparkMD5.ArrayBuffer(); + let currentChunkMd5 = 0; + const that = this; + const reader = new FileReader(); + reader.onload = async function (e) { + spark.append(e.target.result); + currentChunkMd5++; + + if (currentChunkMd5 < chunks) { + await loadNext(); + } else { + // console.log(spark.end()); + const hashMd5111 = spark.end(); + that.fileMd5Keep = hashMd5111; + // 鍦ㄨ繖閲岃姹傛帴鍙� + await that.validateFile({ + name: file.name, + uid: file.uid, + md5: hashMd5111, + chunks: fileChunks.length, + filter_type: "git_secret_file" + }); + } + }; + + // eslint-disable-next-line no-inner-declarations + async function loadNext() { + const start = currentChunkMd5 * eachSize; + const end = + start + eachSize >= file.size ? file.size : start + eachSize; + await reader.readAsArrayBuffer(file.slice(start, end)); + } + + await loadNext(); + resolve(); + } catch (error) { + reject(error); + } + }); + }, + // 鏂偣缁紶 + againSplitUpload(file, array) { + console.log("file,array"); + console.log(file); + console.log(array); + // eslint-disable-next-line no-async-promise-executor + return new Promise(async (resolve, reject) => { + try { + // eslint-disable-next-line no-unused-vars + const {eachSize, fileKeep} = this; + const chunks = this.chunksKeep; + const fileChunks = this.fileChunksKeep; + this.progressFlag = true; + // let currentChunk = 0; + for (let i = 0; i < array.length; i++) { + // 鏈嶅姟绔娴嬪凡缁忎笂浼犲埌绗琧urrentChunk鍧椾簡锛岄偅灏辩洿鎺ヨ烦鍒扮currentChunk鍧楋紝瀹炵幇鏂偣缁紶 + // 姝ゆ椂闇�瑕佸垽鏂繘搴︽潯 + // 姣忓潡涓婁紶瀹屽悗鍒欒繑鍥為渶瑕佹彁浜ょ殑涓嬩竴鍧楃殑index + await this.postFile({ + chunked: true, + chunk: array[i], + chunks, + name: file.name, + fullSize: fileKeep.size, + uid: file.uid, + file: fileChunks[array[i]] + }); + // currentChunk++ + + // 涓婁紶瀹屼竴鍧楀悗锛岃繘搴︽潯澧炲姞 + this.progressPercent += this.eachProgress; + // 涓嶈兘瓒呰繃100 + this.progressPercent = this.progressPercent > 100 ? 100 : this.progressPercent; + } + let fileMd5KeepTwo = this.fileMd5Keep; + + const isValidate = await this.validateFile({ + name: file.name, + uid: file.uid, + md5: fileMd5KeepTwo, + chunks: fileChunks.length, + filter_type: "git_secret_file" + }); + if (!isValidate) { + throw new Error("鏂囦欢鏍¢獙寮傚父"); + } + // 鍏抽棴杩涘害鏉� + this.progressFlag = false; + // 閲嶇疆杩涘害鏉� + this.progressPercent = 0; + resolve(); + } catch (e) { + reject(e); + } + }); + }, + // 鏂囦欢鍒嗗潡,鍒╃敤Array.prototype.slice鏂规硶 + splitFile(file, eachSize, chunks) { + return new Promise((resolve, reject) => { + try { + setTimeout(() => { + const fileChunk = []; + for (let chunk = 0; chunks > 0; chunks--) { + fileChunk.push(file.slice(chunk, chunk + eachSize)); + chunk += eachSize; + } + resolve(fileChunk); + }, 0); + } catch (e) { + console.error(e); + reject(new Error("鏂囦欢鍒囧潡鍙戠敓閿欒")); + } + }); + }, + removeFile(file) { + this.requestCancelQueue[file.uid](); + delete this.requestCancelQueue[file.uid]; + return true; + }, + // 鎻愪氦鏂囦欢鏂规硶,灏嗗弬鏁拌浆鎹负FormData, 鐒跺悗閫氳繃axios鍙戣捣璇锋眰 + postFile(param, onProgress) { + const formData = new FormData(); + formData.append("file", param.file); // 鏀逛簡 + formData.append("fileName", param.fileName); // 鏀逛簡 + formData.append("uid", param.uid); + formData.append("chunk", param.chunk); + formData.append("filter_type", "git_secret_file"); + formData.append("chunks", param.chunks); + const {requestCancelQueue} = this; + const config = { + cancelToken: new axios.CancelToken(function executor(cancel) { + if (requestCancelQueue[param.uid]) { + requestCancelQueue[param.uid](); + delete requestCancelQueue[param.uid]; + } + requestCancelQueue[param.uid] = cancel; + }), + onUploadProgress: e => { + if (param.chunked) { + e.percent = Number( + ( + ((param.chunk * (param.eachSize - 1) + e.loaded) / + param.fullSize) * + 100 + ).toFixed(2) + ); + } else { + e.percent = Number(((e.loaded / e.total) * 100).toFixed(2)); + } + onProgress(e) + } + } + //return axios.post('sys/oss/upload_chunk/', formData, config).then(rs => rs.data) + return this.$http({ + url: "/sys/oss/upload_chunk/", + method: "POST", + data: formData + }).then(rs => rs.data + ); + }, + // 鏂囦欢鏍¢獙鏂规硶 + validateFile(file) { + //return axios.post('sys/oss/upload_success/', file).then(rs => rs.data) + return this.$http({ + url: "/sys/oss/upload_success/", + method: "POST", + data: file + }).then(res => { + console.log(res, "validateFile res") + if (res && !res.data) { + this.againSplitUpload(file, res.data.error_file) + this.$message({ + message: "鏈夋枃浠朵笂浼犲け璐ワ紝姝e湪閲嶆柊涓婁紶", + type: "warning" + }); + } else if (res && res.data) { + this.progressPercent = 100 + if (!this.onlyUploadFile) { + this.$http({ + url: this.action, + method: "POST", + data: file + }).then(res => { + console.log(res, '鍚庡彴澶勭悊 res1') + let aa = res.data.status + console.log(aa, 'res.data.status') + + if (this.multiple) { + this.uploadList.push(res.data) + this.$emit('input', this.uploadList) + } else { + this.$emit('input', res.data) + } + this.uploading = false + this.progressFlag = false + this.progressPercent = 0 + this.isUpload = false + }) + } else { + console.log(file.uid, 'file.uid') + this.$emit('recall', file.uid) + this.uploading = false + this.progressFlag = false + this.progressPercent = 0 + this.isUpload = false + } + } else if (res && res.status == 40008) { + this.$message.error(res.message); + this.progressFlag = false; + this.progressPercent = 0; + } + }) + } + }, + mounted() { + // 鎻掑叆鍒癰ody涓�, 閬垮厤寮瑰嚭灞傝閬洊 + if (this.crop && this.$refs.cropper) { + document.body.appendChild(this.$refs.cropper.$el) } } - }, - mounted() { - // 鎻掑叆鍒癰ody涓�, 閬垮厤寮瑰嚭灞傝閬洊 - if (this.crop && this.$refs.cropper) { - document.body.appendChild(this.$refs.cropper.$el) - } } -} </script> <style> -.zt-upload { - line-height: 1; -} + .zt-upload { + line-height: 1; + } -.zt .upload-input .upload-btn { - padding: 8px 12px; -} + .zt .upload-input .upload-btn { + padding: 8px 12px; + } -.zt .upload-input.hide { - height: 0px; -} + .zt .upload-input.hide { + height: 0px; + } -.zt-upload .el-loading-spinner { - line-height: 1; -} + .zt-upload .el-loading-spinner { + line-height: 1; + } -.zt-upload .el-icon-plus { - vertical-align: middle; -} + .zt-upload .el-icon-plus { + vertical-align: middle; + } -.zt-upload .el-upload--picture-card { - width: auto; - height: auto; - background: none; - line-height: inherit; -} + .zt-upload .el-upload--picture-card { + width: auto; + height: auto; + background: none; + line-height: inherit; + } -/* 瑁佸壀 */ -.vue-image-crop-upload.zt-upload-image--cropper { - z-index: 99; -} + /* 瑁佸壀 */ + .vue-image-crop-upload.zt-upload-image--cropper { + z-index: 99; + } -.zt-upload-image--cropper .vicp-drop-area { - background-color: #fbfdff !important; -} + .zt-upload-image--cropper .vicp-drop-area { + background-color: #fbfdff !important; + } -.zt-upload-image--cropper .vicp-icon1-arrow { - border-bottom-color: #909399 !important; -} + .zt-upload-image--cropper .vicp-icon1-arrow { + border-bottom-color: #909399 !important; + } -.zt-upload-image--cropper .vicp-icon1-body { - background-color: #909399 !important; -} + .zt-upload-image--cropper .vicp-icon1-body { + background-color: #909399 !important; + } -.zt-upload-image--cropper .vicp-icon1-bottom { - border-color: #909399 !important; -} + .zt-upload-image--cropper .vicp-icon1-bottom { + border-color: #909399 !important; + } </style> diff --git a/web/src/components/config-uploader/src/config-uploader.vue b/web/src/components/config-uploader/src/config-uploader.vue index 4d45202..1e5fe8e 100644 --- a/web/src/components/config-uploader/src/config-uploader.vue +++ b/web/src/components/config-uploader/src/config-uploader.vue @@ -1,9 +1,9 @@ <template> - <div> - <el-collapse class="config-uploader" v-model="activeNames" v-if="oss && oss.groups.length>1"> + <div v-if="oss"> + <el-collapse class="config-uploader" v-model="activeNames" v-if="oss.groups.length>1"> <el-collapse-item name="1" v-for="group in (oss.groups || [])" :key="group.busiFieldGroup"> <template slot="title"> - <el-tag v-if="!image">{{group.busiFieldGroup}}</el-tag> + <el-tag>{{group.busiFieldGroup}}</el-tag> </template> <!-- <zt-form-item :label="field.busiFieldName" :prop="field.busiField" v-for="field in group.fields" :key="field.busiField" :rules="field.isRequired ? 'required':''" style="width: 100%;"> @@ -11,15 +11,17 @@ :accept="field.accept" :file-size="field.fileSize" @input="change(field.busiField)"/> </zt-form-item>--> <el-table :data="group.fields" :show-header="false"> - <el-table-column width="250" style="text-align: left;white-space:nowrap;"> + <el-table-column width="180" style="text-align: left;white-space:nowrap;"> <template slot-scope="scope"> - <span v-html="scope.row.busiFieldName"></span> + <span v-html="(scope.row.isRequired?'<font color=red>* </font>':'')+ scope.row.busiFieldName"></span> </template> </el-table-column> <el-table-column align="left"> <template slot-scope="scope"> - <zt-uploader :image="image" v-model="dataForm[scope.row.busiField]" multiple :limit="scope.row.fileLimit" :file-type="scope.row.fileType" - :accept="scope.row.accept" :file-size="scope.row.fileSize" @getUploaderImg="getUploaderImg" @input="change(scope.row.busiField)"/> + <zt-uploader v-model="dataForm[scope.row.busiField]" :dataForm="dataForm" multiple + :limit="scope.row.fileLimit" :file-type="scope.row.fileTypeArr" + :showFileList2="false" :accept="scope.row.accept" :file-size="scope.row.fileSize" + @input="change(scope.row.busiField)"/> </template> </el-table-column> </el-table> @@ -32,16 +34,26 @@ <zt-uploader v-model="dataForm[field.busiField]" multiple :limit="field.fileLimit" :file-type="field.fileType" :accept="field.accept" :file-size="field.fileSize" @input="change(field.busiField)"/> </zt-form-item>--> + <template slot="title"> + <el-tag>{{group.busiFieldGroup}}</el-tag> + </template> + <!-- <zt-form-item :label="field.busiFieldName" :prop="field.busiField" v-for="field in group.fields" + :key="field.busiField" :rules="field.isRequired ? 'required':''" style="width: 100%;"> + <zt-uploader v-model="dataForm[field.busiField]" multiple :limit="field.fileLimit" :file-type="field.fileType" + :accept="field.accept" :file-size="field.fileSize" @input="change(field.busiField)"/> + </zt-form-item>--> <el-table :data="group.fields" :show-header="false"> - <el-table-column width="250" style="text-align: left;white-space:nowrap;"> + <el-table-column width="180" style="text-align: left;white-space:nowrap;"> <template slot-scope="scope"> - <span v-html="scope.row.busiFieldName"></span> + <span v-html="(scope.row.isRequired?'<font color=red>* </font>':'')+ scope.row.busiFieldName"></span> </template> </el-table-column> <el-table-column align="left"> <template slot-scope="scope"> - <zt-uploader :image="image" v-model="dataForm[scope.row.busiField]" multiple :limit="scope.row.fileLimit" :file-type="scope.row.fileType" - :accept="scope.row.accept" :file-size="scope.row.fileSize" @getUploaderImg="getUploaderImg" @input="change(scope.row.busiField)"/> + <zt-uploader v-model="dataForm[scope.row.busiField]" :dataForm="dataForm" multiple + :limit="scope.row.fileLimit" :file-type="scope.row.fileTypeArr" + :showFileList2="false" :accept="scope.row.accept" :file-size="scope.row.fileSize" + @input="change(scope.row.busiField)"/> </template> </el-table-column> </el-table> @@ -58,7 +70,6 @@ props: { value: Object, dataForm: Object, - image:false, busiType: String // 涓氬姟绫诲瀷 }, data() { @@ -72,7 +83,15 @@ let arr = [] if (this.dataForm.files && this.dataForm.files.groups) { this.dataForm.files.groups.forEach(group => { - group.fields.forEach(field => arr.push(field)) + group.fields.forEach(field => { + let arrType = [] + if (field.fileTypes) { + arrType = field.fileTypes.split(',') + } + //this.$set(field, 'fileTypeArr', arrType) + field.fileTypeArr = arrType + arr.push(field) + }) }) } return arr @@ -110,25 +129,31 @@ getOss() { let arr = (this.$store.state.oss.configs || []).filter(config => config.busiType === this.busiType) if (arr.length > 0) { + arr[0].groups.forEach(group => { + group.fields.forEach(field => { + let arrType = [] + if (field.fileTypes) { + arrType = field.fileTypes.split(',') + } + //this.$set(field, 'fileTypeArr', arrType) + field.fileTypeArr = arrType + }) + }) + console.log(JSON.parse(JSON.stringify(arr[0])),'JSON.parse(JSON.stringify(arr[0]))') return JSON.parse(JSON.stringify(arr[0])) } return null }, change(busiField) { - console.log(busiField,'busiField busiField') this.fields.forEach(field => { if (field.busiField === busiField) { field.files.length = 0 this.dataForm[busiField].forEach(file => field.files.push(file)) + if (this.dataForm) { + this.dataForm.hasUploadFinsh = 100 + } } }) - }, - getUploaderImg(list){ - // this.imageList = list - if(list[0].url){ - this.$emit('getImageUrl',list[0].url) - } - } } } diff --git a/web/src/components/table-uploader/src/table-uploader.vue b/web/src/components/table-uploader/src/table-uploader.vue index dfde297..7856c5e 100644 --- a/web/src/components/table-uploader/src/table-uploader.vue +++ b/web/src/components/table-uploader/src/table-uploader.vue @@ -1,25 +1,12 @@ <template> <div> - <div class="config-uploader" > + <div class="config-uploader" v-if="oss"> <div v-for="group in (oss.groups || [])" :key="group.busiFieldGroup"> <zt-form-item v-for="field in group.fields" :prop="field.busiField" :key="field.busiField" :rules="field.isRequired ? 'required':''" style="width: 100%;margin-bottom: 0"> <zt-uploader v-model="dataForm[field.busiField]" multiple :limit="field.fileLimit" :file-type="field.fileType" :accept="field.accept" :file-size="field.fileSize" @input="change(field.busiField)"/> </zt-form-item> -<!-- <el-table :data="group.fields" :show-header="false">--> -<!-- <el-table-column width="250" style="text-align: left;white-space:nowrap;">--> -<!-- <template slot-scope="scope">--> -<!-- <span v-html="scope.row.busiFieldName"></span>--> -<!-- </template>--> -<!-- </el-table-column>--> -<!-- <el-table-column align="left">--> -<!-- <template slot-scope="scope">--> -<!-- <zt-uploader v-model="dataForm[scope.row.busiField]" multiple :limit="scope.row.fileLimit" :file-type="scope.row.fileType"--> -<!-- :accept="scope.row.accept" :file-size="scope.row.fileSize" @getUploaderImg="getUploaderImg" @input="change(scope.row.busiField)"/>--> -<!-- </template>--> -<!-- </el-table-column>--> -<!-- </el-table>--> </div> </div> </div> @@ -60,6 +47,7 @@ ...this.getOss(), ...(val || {}) } + console.log(this.oss,"this.oss") // this.dataForm.files = this.oss this.$set(this.dataForm, 'files', this.oss) @@ -72,6 +60,7 @@ } }, mounted() { + this.oss = this.getOss() if (this.oss) { this.oss.groups.forEach(group => { @@ -91,10 +80,14 @@ }, change(busiField) { console.log(busiField,'busiField busiField') + this.fields.forEach(field => { if (field.busiField === busiField) { field.files.length = 0 - this.dataForm[busiField].forEach(file => field.files.push(file)) + this.dataForm[busiField].forEach(file => { + console.log(file,"change file") + field.files.push(file) + }) } }) }, diff --git a/web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue b/web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue index 04e7563..6b96d83 100644 --- a/web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue +++ b/web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue @@ -24,7 +24,7 @@ <el-input v-model="dataForm.project.softwareIdentity" placeholder="鐗╁搧缂栧彿"></el-input> </el-form-item> <el-form-item class="marginTopAndMarginBottom3" label="鏁� 閲�" style="width: 32%"> - <el-input v-model="dataForm.project.softwareName" placeholder="鏁伴噺"></el-input> + <el-input v-model="dataForm.project.isContract" placeholder="鏁伴噺"></el-input> </el-form-item> </div> <div style="border-bottom: 1px solid rgba(0,0,0,.2);"> @@ -38,19 +38,19 @@ <span v-html="indexFormat(scope.$index)"></span> </template> </el-table-column> - <el-table-column prop="Name" min-width="180" label="鎶�鏈祫鏂欏悕绉�"> + <el-table-column prop="infoName" min-width="180" label="鎶�鏈祫鏂欏悕绉�"> <template v-slot="{ row }"> - <el-input v-model="row.Name" placeholder="鎶�鏈祫鏂欏悕绉�"></el-input> + <el-input v-model="row.name" placeholder="鎶�鏈祫鏂欏悕绉�"></el-input> </template> </el-table-column> <el-table-column prop="identify" align="center" width="150" label="鏍囪瘑"> <template v-slot="{ row }"> - <el-input v-model="row.identify" placeholder="鏍囪瘑"></el-input> + <el-input v-model="row.version" placeholder="鏍囪瘑"></el-input> </template> </el-table-column> <el-table-column prop="version" align="center" width="120" label="鐗堟湰"> <template v-slot="{ row }"> - <el-input v-model="row.version" placeholder="鐗堟湰"></el-input> + <el-input v-model="row.identify" placeholder="鐗堟湰"></el-input> </template> </el-table-column> <el-table-column prop="secretClass" label="瀵嗙骇" width="100" align="center"> @@ -77,7 +77,7 @@ <el-table-column fixed="right" prop="files" label="涓婁紶闄勪欢" width="80" align="center"> <template v-slot="{ row }"> <!-- <zt-table-button @click="files(row.id)">涓婁紶闄勪欢</zt-table-button>--> - <table-uploader busi-type="test_order" model-name="dataForm" :dataForm="dataForm" + <table-uploader busi-type="circulat_order" model-name="row" :dataForm="row" v-model="row.files"/> </template> </el-table-column> @@ -156,7 +156,7 @@ </div> <div class="el-border-left " style="width: 35%;height: 40px;"> <el-form-item label="鏄惁婊¤冻娴嬭瘯瑕佹眰" label-width="150px" style="padding-left:20px;margin-bottom:0"> - <zt-dict v-model="dataForm.circulatOrder.acceptSituation" :radio="true" dict="is_or_not"></zt-dict> + <zt-dict v-model="dataForm.circulatOrder.cscs" :radio="true" dict="is_or_not"></zt-dict> </el-form-item> </div> </div> @@ -364,16 +364,18 @@ ...this.dataForm, ...res.data } - console.log(this.dataForm,"this.dataForm") + console.log(this.dataForm,"getInfo this.dataForm") }, // 琛ㄥ崟鎻愪氦 async formSubmit() { + console.log(this.dataForm,"this.dataForm11111") let res = await this.$http[!this.dataForm.id ? 'post' : 'put']('/itemCirculatOrder/ItemCirculatOrder/', this.dataForm) if (res.success) { await this.$tip.success() this.$refs.dialog.close() this.$emit('refreshDataList') } + } } } diff --git a/web/src/views/modules/itemCirculatOrder/ItemCirculatOrder.vue b/web/src/views/modules/itemCirculatOrder/ItemCirculatOrder.vue index d9aeac5..414a9ab 100644 --- a/web/src/views/modules/itemCirculatOrder/ItemCirculatOrder.vue +++ b/web/src/views/modules/itemCirculatOrder/ItemCirculatOrder.vue @@ -5,7 +5,12 @@ <el-form :inline="true" :model="dataForm" @keyup.enter.native="table.query()"> <el-form-item> <el-input v-model="dataForm.code" placeholder="璇疯緭鍏ョ墿鍝佹祦杞崟缂栧彿" clearable></el-input> - + </el-form-item> + <el-form-item> + <el-input v-model="dataForm.softwareName" placeholder="璇疯緭鍏ョ墿鍝佸悕绉�" clearable></el-input> + </el-form-item> + <el-form-item> + <el-input v-model="dataForm.softwareIdentity" placeholder="璇疯緭鍏ョ墿鍝佺紪鍙�" clearable></el-input> </el-form-item> <el-form-item> <zt-button type="query" @click="table.query()"/> @@ -16,6 +21,8 @@ <el-table v-loading="table.dataLoading" :data="table.dataList" height="100px" v-adaptive="{bottomOffset:70}" border @selection-change="table.selectionChangeHandle"> <el-table-column type="selection" width="40"/> <el-table-column prop="code" label="鐗╁搧娴佽浆鍗曠紪鍙�"/> + <el-table-column prop="softwareName" label="鐗╁搧鍚嶇О"/> + <el-table-column prop="softwareIdentity" label="鐗╁搧缂栧彿"/> <zt-table-column-handle :table="table" edit-perm="itemCirculatOrder:update" delete-perm="itemCirculatOrder::delete"/> </el-table> <!-- 寮圭獥, 鏂板 / 淇敼 --> @@ -37,6 +44,8 @@ return { dataForm: { code: '', + softwareName:'', + softwareIdentity:'', } } }, diff --git a/web/src/views/modules/project/SoftwareTestOrder-AddOrUpdate.vue b/web/src/views/modules/project/SoftwareTestOrder-AddOrUpdate.vue index 0bf16d6..96d00e4 100644 --- a/web/src/views/modules/project/SoftwareTestOrder-AddOrUpdate.vue +++ b/web/src/views/modules/project/SoftwareTestOrder-AddOrUpdate.vue @@ -568,6 +568,7 @@ } } // console.log(this.dataForm, "this.dataForm") + console.log(this.dataForm,"getInfo this.dataForm") }, async print(){ var params = qs.stringify({ @@ -579,7 +580,7 @@ }, // 琛ㄥ崟鎻愪氦 async formSubmit() { - console.log(this.dataForm, ' this.dataForm') + console.log(this.dataForm, 'formSubmit this.dataForm') if(this.dataForm.softwareTestOrder.testType1){ this.dataForm.softwareTestOrder.testType1=this.dataForm.softwareTestOrder.testType1.join(',') } diff --git a/zt/common/src/main/java/com/zt/core/sys/dto/DictIstance.java b/zt/common/src/main/java/com/zt/core/sys/dto/DictIstance.java index cd55e37..52f5037 100644 --- a/zt/common/src/main/java/com/zt/core/sys/dto/DictIstance.java +++ b/zt/common/src/main/java/com/zt/core/sys/dto/DictIstance.java @@ -12,4 +12,6 @@ private String identify; + private String secretClass; + } diff --git a/zt/core/src/main/java/com/zt/modules/oss/annotation/DataFieldParser.java b/zt/core/src/main/java/com/zt/modules/oss/annotation/DataFieldParser.java index e35b5d8..9c7272f 100644 --- a/zt/core/src/main/java/com/zt/modules/oss/annotation/DataFieldParser.java +++ b/zt/core/src/main/java/com/zt/modules/oss/annotation/DataFieldParser.java @@ -1,10 +1,8 @@ package com.zt.modules.oss.annotation; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - +import com.zt.common.annotation.OssField; +import com.zt.modules.oss.model.OssFieldDefine; +import io.swagger.annotations.ApiModel; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; @@ -16,10 +14,10 @@ import org.springframework.core.type.classreading.MetadataReaderFactory; import org.springframework.stereotype.Component; -import com.zt.common.annotation.OssField; -import com.zt.modules.oss.model.OssFieldDefine; - -import io.swagger.annotations.ApiModel; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; @Component("dataFieldParser") public class DataFieldParser { diff --git a/zt/core/src/main/java/com/zt/modules/oss/cloud/LocalStorageService.java b/zt/core/src/main/java/com/zt/modules/oss/cloud/LocalStorageService.java index ec5a4f9..2a4854c 100644 --- a/zt/core/src/main/java/com/zt/modules/oss/cloud/LocalStorageService.java +++ b/zt/core/src/main/java/com/zt/modules/oss/cloud/LocalStorageService.java @@ -8,12 +8,10 @@ package com.zt.modules.oss.cloud; - import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.spire.xls.Workbook; import com.zt.common.exception.ErrorCode; import com.zt.common.exception.RenException; -import com.zt.common.utils.CommonUtils; import com.zt.core.oss.encry.IOssEncryptService; import com.zt.modules.oss.enums.CloudChannel; import com.zt.modules.oss.model.QdSysOss; @@ -29,7 +27,6 @@ import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; -import java.util.Date; /** * 鏈湴涓婁紶 @@ -98,8 +95,6 @@ } public void content(SysOss oss, HttpServletResponse response) throws Exception { - Date beginDate = new Date(); - Date lastDate = beginDate; if (oss == null) { throw new IOException("鏂囦欢涓嶅瓨鍦紒"); } @@ -118,15 +113,7 @@ System.out.println(File.separator); System.out.println(oss.getPath()); // 鍒涘缓鏂囦欢杈撳叆娴� - Date nowDate = new Date(); - System.out.println("鍑嗗鏃堕棿锛�" + CommonUtils.getDatePoor(nowDate, lastDate)); - lastDate = nowDate; - InputStream is = ossEncryptService.decrypt(file); - - nowDate = new Date(); - System.out.println("瑙e瘑鏃堕棿锛�" + CommonUtils.getDatePoor(nowDate, lastDate)); - lastDate = nowDate; // 鍝嶅簲杈撳嚭娴� ServletOutputStream out = response.getOutputStream(); // 鍒涘缓缂撳啿鍖� @@ -138,9 +125,6 @@ is.close(); out.flush(); out.close(); - nowDate = new Date(); - System.out.println("杈撳嚭鏃堕棿锛�" + CommonUtils.getDatePoor(nowDate, lastDate)); - System.out.println("鎬绘椂闂达細" + CommonUtils.getDatePoor(nowDate, beginDate)); } } @@ -166,7 +150,8 @@ workbook.saveToStream(outputStream, com.spire.xls.FileFormat.Version2013); // 鎸囧畾鏂囦欢鏍煎紡 documentBytes = outputStream.toByteArray(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); - } else if (filename.endsWith(".docx") || filename.endsWith(".xlsx")) { + } + if (filename.endsWith(".doc") || filename.endsWith(".docx") || filename.endsWith(".xlsx")) { documentBytes = FileCopyUtils.copyToByteArray(in); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", filename); diff --git a/zt/core/src/main/java/com/zt/modules/oss/cloud/StorageConfig.java b/zt/core/src/main/java/com/zt/modules/oss/cloud/StorageConfig.java index a1dd892..b4e9aa6 100644 --- a/zt/core/src/main/java/com/zt/modules/oss/cloud/StorageConfig.java +++ b/zt/core/src/main/java/com/zt/modules/oss/cloud/StorageConfig.java @@ -8,10 +8,10 @@ package com.zt.modules.oss.cloud; -import java.io.Serializable; - import lombok.Data; +import java.io.Serializable; + /** * 浜戝瓨鍌ㄩ厤缃俊鎭� * diff --git a/zt/core/src/main/java/com/zt/modules/oss/controller/SysOssController.java b/zt/core/src/main/java/com/zt/modules/oss/controller/SysOssController.java index 070c5f0..b6caf03 100644 --- a/zt/core/src/main/java/com/zt/modules/oss/controller/SysOssController.java +++ b/zt/core/src/main/java/com/zt/modules/oss/controller/SysOssController.java @@ -8,7 +8,6 @@ package com.zt.modules.oss.controller; -import cn.hutool.core.io.IoUtil; import com.zt.common.annotation.LogOperation; import com.zt.common.annotation.QueryParam; import com.zt.common.constant.Constant; @@ -30,21 +29,14 @@ import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.util.FileCopyUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import springfox.documentation.annotations.ApiIgnore; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; -import java.nio.file.Files; import java.util.Map; /** diff --git a/zt/core/src/main/java/com/zt/modules/oss/controller/chunkUploadController.java b/zt/core/src/main/java/com/zt/modules/oss/controller/chunkUploadController.java index 8e74938..5124257 100644 --- a/zt/core/src/main/java/com/zt/modules/oss/controller/chunkUploadController.java +++ b/zt/core/src/main/java/com/zt/modules/oss/controller/chunkUploadController.java @@ -5,7 +5,6 @@ import io.swagger.annotations.Api; import org.apache.tomcat.util.http.fileupload.FileUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -26,11 +25,11 @@ @PostMapping("/upload_chunk/") public Result<Boolean> uploadFile(@RequestParam("file") MultipartFile file, - @RequestParam("uid") String uid, - @RequestParam("chunk") int chunk, - @RequestParam("filter_type") String filterType, - @RequestParam("fileName") String fileName, - @RequestParam(value = "chunks", required = false) String chunks) { + @RequestParam("uid") String uid, + @RequestParam("chunk") int chunk, + @RequestParam("filter_type") String filterType, + @RequestParam("fileName") String fileName, + @RequestParam(value = "chunks", required = false) String chunks) { try { String tempUploadDir = storageService.getConfig().getLocalPath() + File.separator + "TEMP_UPLOAD"; File dir = new File(tempUploadDir); diff --git a/zt/core/src/main/java/com/zt/modules/oss/encry/NoEncryptService.java b/zt/core/src/main/java/com/zt/modules/oss/encry/NoEncryptService.java index 5795a97..7431ccd 100644 --- a/zt/core/src/main/java/com/zt/modules/oss/encry/NoEncryptService.java +++ b/zt/core/src/main/java/com/zt/modules/oss/encry/NoEncryptService.java @@ -1,13 +1,11 @@ package com.zt.modules.oss.encry; -import java.io.File; -import java.io.InputStream; - +import cn.hutool.core.io.IoUtil; +import com.zt.core.oss.encry.IOssEncryptService; import org.springframework.stereotype.Service; -import cn.hutool.core.io.IoUtil; - -import com.zt.core.oss.encry.IOssEncryptService; +import java.io.File; +import java.io.InputStream; @Service("noEncryptService") public class NoEncryptService implements IOssEncryptService { diff --git a/zt/core/src/main/java/com/zt/modules/oss/enums/OssStatus.java b/zt/core/src/main/java/com/zt/modules/oss/enums/OssStatus.java index f0a672c..dad9916 100644 --- a/zt/core/src/main/java/com/zt/modules/oss/enums/OssStatus.java +++ b/zt/core/src/main/java/com/zt/modules/oss/enums/OssStatus.java @@ -20,7 +20,7 @@ @Dictionary(type = "oss_status", name = "鏂囦欢鐘舵��") public enum OssStatus implements IDictionary { - TEMPORARY(0, "涓存椂"), PERMANENT(1, "姘镐箙"); + TEMPORARY(100, "涓存椂"), PERMANENT(101, "姘镐箙"); private Integer value; private String name; diff --git a/zt/core/src/main/java/com/zt/modules/oss/mapstruct/OssMapper.java b/zt/core/src/main/java/com/zt/modules/oss/mapstruct/OssMapper.java index b686019..30980df 100644 --- a/zt/core/src/main/java/com/zt/modules/oss/mapstruct/OssMapper.java +++ b/zt/core/src/main/java/com/zt/modules/oss/mapstruct/OssMapper.java @@ -1,9 +1,8 @@ package com.zt.modules.oss.mapstruct; -import org.mapstruct.Mapper; - import com.zt.core.oss.dto.OssDto; import com.zt.modules.oss.model.SysOss; +import org.mapstruct.Mapper; @Mapper(componentModel = "spring") public interface OssMapper { diff --git a/zt/core/src/main/java/com/zt/modules/oss/model/OssFieldDefine.java b/zt/core/src/main/java/com/zt/modules/oss/model/OssFieldDefine.java index 1da4510..e59e3b0 100644 --- a/zt/core/src/main/java/com/zt/modules/oss/model/OssFieldDefine.java +++ b/zt/core/src/main/java/com/zt/modules/oss/model/OssFieldDefine.java @@ -1,11 +1,10 @@ package com.zt.modules.oss.model; +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + import java.util.ArrayList; import java.util.List; - -import lombok.Data; - -import org.apache.commons.lang3.StringUtils; @Data public class OssFieldDefine { diff --git a/zt/core/src/main/java/com/zt/modules/oss/model/SysOss.java b/zt/core/src/main/java/com/zt/modules/oss/model/SysOss.java index 719c461..6ed6cc9 100644 --- a/zt/core/src/main/java/com/zt/modules/oss/model/SysOss.java +++ b/zt/core/src/main/java/com/zt/modules/oss/model/SysOss.java @@ -8,16 +8,14 @@ package com.zt.modules.oss.model; -import lombok.Data; -import lombok.EqualsAndHashCode; - import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.zt.common.entity.BusiEntity; - import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; /** * 鏂囦欢涓婁紶 diff --git a/zt/core/src/main/java/com/zt/modules/oss/service/SysOssService.java b/zt/core/src/main/java/com/zt/modules/oss/service/SysOssService.java index 12edc47..4bc5321 100644 --- a/zt/core/src/main/java/com/zt/modules/oss/service/SysOssService.java +++ b/zt/core/src/main/java/com/zt/modules/oss/service/SysOssService.java @@ -1,6 +1,5 @@ package com.zt.modules.oss.service; -import ch.qos.logback.core.util.FileUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.NumberUtil; @@ -13,8 +12,6 @@ import com.zt.common.exception.ErrorCode; import com.zt.common.exception.RenException; import com.zt.common.service.BaseService; -import com.zt.common.utils.MoveTotherFoldersUtils; -import com.zt.common.utils.UUIDUtil; import com.zt.core.oss.dto.OssDto; import com.zt.core.oss.service.ISysOssService; import com.zt.modules.oss.annotation.DataFieldParser; @@ -38,7 +35,6 @@ import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import java.io.*; -import java.nio.file.Files; import java.security.Key; import java.security.SecureRandom; import java.util.*; diff --git a/zt/core/src/main/resources/mapper/oss/SysOssDao.xml b/zt/core/src/main/resources/mapper/oss/SysOssDao.xml index fc61e61..c4f240a 100644 --- a/zt/core/src/main/resources/mapper/oss/SysOssDao.xml +++ b/zt/core/src/main/resources/mapper/oss/SysOssDao.xml @@ -45,5 +45,6 @@ </if> ORDER by a.busi_id,a.sort </select> + <select id="getOldFileList" resultType="com.zt.modules.oss.model.SysOss"></select> </mapper> diff --git a/zt/core/src/main/resources/mapper/sys/SysDictTypeDao.xml b/zt/core/src/main/resources/mapper/sys/SysDictTypeDao.xml index a344df1..f69d260 100644 --- a/zt/core/src/main/resources/mapper/sys/SysDictTypeDao.xml +++ b/zt/core/src/main/resources/mapper/sys/SysDictTypeDao.xml @@ -5,7 +5,7 @@ <select id="getTenantDictTypes" resultType="com.zt.modules.sys.model.SysDictType"> select a.* - from DJ_SYS_DICT_TYPE a + from SYS_DICT_TYPE a where a.is_delete = 0 <if test="tenantId == 0"> and a.tenant_id = #{tenantId} -- Gitblit v1.9.1