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