From 61569d13baf15119cbc060441c6487a2c1eb895f Mon Sep 17 00:00:00 2001 From: jiangping <jp@doumee.com> Date: 星期一, 30 六月 2025 15:58:57 +0800 Subject: [PATCH] 最新版本541200007 --- admin/src/components/business/OperaCompanyDocumentsWindow.vue | 8 + admin/src/components/common/UploadFile.vue | 16 ++ server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/common/PublicCloudController.java | 50 +++++++++ admin/src/api/system/common.js | 8 + server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/DownloadFileDTO.java | 23 ++++ admin/package-lock.json | 165 ++++++++++++++++---------------- admin/src/components/system/dict/OperaDictDataWindow.vue | 2 admin/package.json | 1 admin/src/views/business/companyDocuments.vue | 10 + 9 files changed, 188 insertions(+), 95 deletions(-) diff --git a/admin/package-lock.json b/admin/package-lock.json index 9c49bda..5c1bdfc 100644 --- a/admin/package-lock.json +++ b/admin/package-lock.json @@ -1876,6 +1876,63 @@ "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=", "dev": true }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "optional": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "optional": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, "ssri": { "version": "8.0.1", "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-8.0.1.tgz?cache=0&sync_timestamp=1617826515595&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-8.0.1.tgz", @@ -1883,6 +1940,28 @@ "dev": true, "requires": { "minipass": "^3.1.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "vue-loader-v16": { + "version": "npm:vue-loader@16.8.3", + "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz", + "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", + "dev": true, + "optional": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" } } } @@ -4994,6 +5073,11 @@ "resolved": "https://registry.npm.taobao.org/dotenv-expand/download/dotenv-expand-5.1.0.tgz", "integrity": "sha1-P7rwIL/XlIhAcuomsel5HUWmKfA=", "dev": true + }, + "downloadjs": { + "version": "1.4.7", + "resolved": "https://registry.npmmirror.com/downloadjs/-/downloadjs-1.4.7.tgz", + "integrity": "sha512-LN1gO7+u9xjU5oEScGFKvXhYf7Y/empUIIEAGBs1LzUq/rg5duiDrkuH5A2lQGd5jfMOb9X9usDa2oVXwJ0U/Q==" }, "duplexer": { "version": "0.1.2", @@ -13904,87 +13988,6 @@ "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz", "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", "dev": true - } - } - }, - "vue-loader-v16": { - "version": "npm:vue-loader@16.8.3", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz", - "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", - "dev": true, - "optional": true, - "requires": { - "chalk": "^4.1.0", - "hash-sum": "^2.0.0", - "loader-utils": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "optional": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "optional": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "optional": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "optional": true - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "optional": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "optional": true, - "requires": { - "has-flag": "^4.0.0" - } } } }, diff --git a/admin/package.json b/admin/package.json index 78ce443..2a8afaa 100644 --- a/admin/package.json +++ b/admin/package.json @@ -19,6 +19,7 @@ "axios": "^0.21.1", "core-js": "^3.6.5", "dayjs": "^1.11.13", + "downloadjs": "^1.4.7", "echarts": "^5.4.3", "el-tree-transfer": "^2.4.7", "element-tiptap": "^1.27.1", diff --git a/admin/src/api/system/common.js b/admin/src/api/system/common.js index 0c4b120..cc299e9 100644 --- a/admin/src/api/system/common.js +++ b/admin/src/api/system/common.js @@ -71,3 +71,11 @@ export function upload (data) { return request.post('/visitsAdmin/cloudService/public/upload', data) } + +// 涓嬭浇缃戠粶闄勪欢 +export function downloadFile(data) { + return request.post('/visitsAdmin/cloudService/public/downloadFile', data, { + trim: true, + download: true + }) +} diff --git a/admin/src/components/business/OperaCompanyDocumentsWindow.vue b/admin/src/components/business/OperaCompanyDocumentsWindow.vue index 84fb7ad..309c455 100644 --- a/admin/src/components/business/OperaCompanyDocumentsWindow.vue +++ b/admin/src/components/business/OperaCompanyDocumentsWindow.vue @@ -27,7 +27,7 @@ noResultsText="娌℃湁鍖归厤鐨勭粨鏋�" /> </el-form-item> <el-form-item label="闄勪欢鍦板潃" prop="fileurl"> - <UploadFile :uploadData="{ folder: 'company_documents',fileType:'' }" :fileList="fileList" @uploadSuccess="uploadFileBiz" /> + <UploadFile :uploadData="{ folder: 'company_documents',fileType:'.zip,.war,.pdf' }" :fileList="fileList" @uploadSuccess="uploadFileBiz" /> <!-- <UploadFile width="100px" height="100px" :list="[]" folder="company_documents" @success="uploadFileBiz($event, 2)" />--> </el-form-item> @@ -35,7 +35,7 @@ <el-input type="textarea" v-model="form.content" placeholder="璇疯緭鍏ラ檮浠舵弿杩�" v-trim/> </el-form-item> <el-form-item label="鎺掑簭鐮侊紙闄嶅簭锛�" prop="sortnum"> - <el-input v-model="form.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim/> + <el-input type="number" v-model="form.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim/> </el-form-item> </el-form> </GlobalWindow> @@ -106,6 +106,7 @@ this.title = title this.visible = true this.getCate() + this.fileList = [] this.getCompany() // 鏂板缓缁勭粐 if (target == null) { @@ -120,6 +121,9 @@ for (const key in this.form) { this.form[key] = target[key] } + if(this.form.fileurl){ + this.fileList = [{ fileurl: this.form.fileurl, fileurlFull:this.form.fileurlFull, name: this.form.fileName,fileSize:this.form.fileSize }] + } }) }, uploadFileBiz (file) { diff --git a/admin/src/components/common/UploadFile.vue b/admin/src/components/common/UploadFile.vue index cf30d02..180ca08 100644 --- a/admin/src/components/common/UploadFile.vue +++ b/admin/src/components/common/UploadFile.vue @@ -2,7 +2,7 @@ <div> <el-upload class="upload-demo" - :accept="uploadData.fileTyp" + :accept="uploadData.fileType" :action="uploadImgUrl" :limit="this.fileLength" :on-exceed="handleExceed" @@ -11,7 +11,12 @@ :before-upload="beforeFileUpload" :file-list="fileList"> <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button> - <div slot="tip" class="el-upload__tip" >鍙兘涓婁紶{{ this.fileLength }}涓枃浠讹紝鏁伴噺瓒呰繃璇峰垹闄ゅ凡浼犻檮浠堕噸鏂颁笂浼�</div> + <div slot="tip" class="el-upload__tip" > + 鍙兘涓婁紶{{ this.fileLength }}涓枃浠�, + {{uploadData.fileType?('鍙敮鎸佷笂浼犮��'+uploadData.fileType+'銆戠被鍨嬫枃浠�'):''}} + 鏂囦欢澶у皬涓嶈兘瓒呰繃30MB, + 鏁伴噺瓒呰繃璇峰垹闄ゅ凡浼犻檮浠堕噸鏂颁笂浼� + </div> </el-upload> </div> @@ -67,9 +72,14 @@ // beforeFileUpload(file) { if(this.fileList && this.fileList.length >= this.fileLength){ - this.$message.error('鍙厑璁镐笂浼犮��'+this.fileLength+'w鏂囦欢銆�') + this.$message.error('鍙厑璁镐笂浼犮��'+this.fileLength+'涓枃浠躲��') return false; } + const isLt2M = file.size / 1024 / 1024 <= 30; // 妫�鏌ユ枃浠跺ぇ灏忔槸鍚﹀皬浜�30MB + if (!isLt2M) { + this.$message.error('涓婁紶鏂囦欢澶у皬涓嶈兘瓒呰繃 30MB!'); + return false; // 涓嶅厑璁镐笂浼犺秴杩囨寚瀹氬ぇ灏忕殑鏂囦欢 + } this.$emit('uploadBegin') return true } diff --git a/admin/src/components/system/dict/OperaDictDataWindow.vue b/admin/src/components/system/dict/OperaDictDataWindow.vue index f51c43e..1d9970e 100644 --- a/admin/src/components/system/dict/OperaDictDataWindow.vue +++ b/admin/src/components/system/dict/OperaDictDataWindow.vue @@ -41,7 +41,7 @@ import BaseOpera from '@/components/base/BaseOpera' import GlobalWindow from '@/components/common/GlobalWindow' import RichEditor from '@/components/common/RichEditor' -import UploadFile from "@/components/common/UploadFile"; +import UploadFile from "@/components/common/UploadFile" export default { name: 'OperaDictDataWindow', extends: BaseOpera, diff --git a/admin/src/views/business/companyDocuments.vue b/admin/src/views/business/companyDocuments.vue index 465bd37..7cad0c1 100644 --- a/admin/src/views/business/companyDocuments.vue +++ b/admin/src/views/business/companyDocuments.vue @@ -68,6 +68,8 @@ import TableLayout from '@/layouts/TableLayout' import Pagination from '@/components/common/Pagination' import OperaCompanyDocumentsWindow from '@/components/business/OperaCompanyDocumentsWindow' +import {downloadFile} from "@/api/system/common"; + export default { name: 'CompanyDocuments', extends: BaseTable, @@ -91,10 +93,10 @@ }) this.search() }, - methods:{ - download(row){ - if(row.fileurlFull){ - window.open(row.fileurlFull) + methods: { + download (row) { + if (row.fileurlFull) { + downloadFile({ url: row.fileurlFull, fileName:row.fileName }) } } } diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/common/PublicCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/common/PublicCloudController.java index eb2fc5e..3af671e 100644 --- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/common/PublicCloudController.java +++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/common/PublicCloudController.java @@ -1,5 +1,6 @@ package com.doumee.cloud.common; +import cn.hutool.core.io.IoUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.doumee.api.BaseController; @@ -15,7 +16,9 @@ import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.FtpUtil; +import com.doumee.core.utils.HttpsUtil; import com.doumee.core.utils.aliyun.ALiYunUtil; +import com.doumee.dao.business.dto.DownloadFileDTO; import com.doumee.dao.system.model.SystemDict; import com.doumee.dao.system.model.SystemDictData; import io.swagger.annotations.Api; @@ -23,6 +26,9 @@ import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.compress.archivers.zip.Zip64Mode; +import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; +import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -30,12 +36,12 @@ import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.commons.CommonsMultipartResolver; +import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.PrintWriter; +import java.io.*; +import java.net.URLEncoder; +import java.nio.charset.Charset; import java.util.*; /** @@ -151,6 +157,42 @@ return; } + @ApiOperation(value = "涓嬭浇缃戠粶鏂囦欢") + @RequestMapping(method= RequestMethod.POST,value="/downloadFile") + @ResponseBody + public void downloadFile(@RequestBody DownloadFileDTO param, HttpServletRequest request, HttpServletResponse response) throws Exception { + if(StringUtils.isBlank(param.getUrl())){ + throw new BusinessException(ResponseStatus.BAD_REQUEST); + } + InputStream inputStream = HttpsUtil.connectionInputsteam(param.getUrl(),"GET","",null); + if(inputStream == null){ + if(StringUtils.isBlank(param.getUrl())){ + throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏂囦欢涓嬭浇澶辫触锛岃妫�鏌ユ枃浠惰矾寰勬槸鍚﹀悎娉曪紒"); + } + } + if(StringUtils.isBlank(param.getFileName())){ + param.setFileName(System.currentTimeMillis()+""); + if(param.getUrl().lastIndexOf(".") >0){ + String nfix = param.getUrl().substring(param.getUrl().lastIndexOf(".")); + param.setFileName(System.currentTimeMillis()+"."+nfix); + } + } + String encodeFileName = URLEncoder.encode(param.getFileName(), Charset.forName("UTF-8").toString()); + response.setHeader("Content-Disposition","attachment;filename=" + encodeFileName); + response.setContentType("application/octet-stream"); + response.setHeader("eva-opera-type", "download"); + response.setHeader("eva-download-filename", encodeFileName); + ServletOutputStream os = response.getOutputStream(); + byte[] buffer = new byte[4096]; + int bytesRead; + + while ((bytesRead = inputStream.read(buffer)) != -1) { + os.write(buffer, 0, bytesRead); + } + os.flush(); + os.close(); + inputStream.close(); + } @ApiOperation(value = "涓婁紶鏂囦欢鍒癋TP") @RequestMapping(method= RequestMethod.POST,value="/upload") @ResponseBody diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/DownloadFileDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/DownloadFileDTO.java new file mode 100644 index 0000000..30d5cfc --- /dev/null +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/DownloadFileDTO.java @@ -0,0 +1,23 @@ +package com.doumee.dao.business.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * Created by IntelliJ IDEA. + * + * @Author : Rk + * @create 2024/5/20 14:54 + */ +@Data +public class DownloadFileDTO { + + @ApiModelProperty(value = "缃戠粶闄勪欢鍦板潃") + private String url ; + + @ApiModelProperty(value = "闄勪欢鍚嶇О") + private String fileName; + + + +} -- Gitblit v1.9.3