From 391c8925d9375a0d2eed2e1af12d0dc7a6c98d1e Mon Sep 17 00:00:00 2001
From: LSH
Date: 星期六, 29 七月 2023 18:15:51 +0800
Subject: [PATCH] #售前规划申请单上传文件
---
src/main/webapp/static/js/cstmr/cstmr.js | 2
src/main/java/com/zy/crm/manager/controller/PlanController.java | 17 +++
src/main/webapp/static/js/plan/plan.js | 102 ++++++++++++++++++--
src/main/webapp/views/plan/plan.html | 39 ++++++-
src/main/java/com/zy/crm/manager/entity/Plan.java | 18 ++
src/main/java/com/zy/crm/common/utils/FileSaveExampleUtil.java | 64 ++++++++++++
6 files changed, 221 insertions(+), 21 deletions(-)
diff --git a/src/main/java/com/zy/crm/common/utils/FileSaveExampleUtil.java b/src/main/java/com/zy/crm/common/utils/FileSaveExampleUtil.java
new file mode 100644
index 0000000..cc6d062
--- /dev/null
+++ b/src/main/java/com/zy/crm/common/utils/FileSaveExampleUtil.java
@@ -0,0 +1,64 @@
+package com.zy.crm.common.utils;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import org.springframework.web.multipart.MultipartFile;
+
+public class FileSaveExampleUtil {
+
+// public static void main(String[] args) {
+// String filePath = "D:/work/file/file.txt"; // 鎸囧畾淇濆瓨鏂囦欢鐨勮矾寰�
+//
+// try {
+// String content = "杩欐槸瑕佷繚瀛樼殑鏂囦欢鍐呭";
+// saveToFile(filePath, content);
+// System.out.println("鏂囦欢淇濆瓨鎴愬姛锛�");
+// } catch (IOException e) {
+// System.out.println("鏂囦欢淇濆瓨澶辫触锛�" + e.getMessage());
+// }
+// }
+
+ public static void saveToFile(String filePath, String content) throws IOException {
+ File file = new File(filePath);
+
+ // 鍒涘缓鐖剁洰褰曪紙濡傛灉涓嶅瓨鍦級
+ File parentDir = file.getParentFile();
+ if (!parentDir.exists()) {
+ parentDir.mkdirs();
+ }
+
+ // 灏嗗唴瀹瑰啓鍏ユ枃浠�
+ try (OutputStream outputStream = new FileOutputStream(file)) {
+ byte[] bytes = content.getBytes();
+ outputStream.write(bytes);
+ }
+ }
+
+// public static void main(String[] args) {
+// String savePath = "C:/path/to/save/"; // 鎸囧畾淇濆瓨鏂囦欢鐨勮矾寰�
+// MultipartFile file = ...; // 鑾峰彇瑕佷繚瀛樼殑MultipartFile鏂囦欢
+//
+// try {
+// saveFile(file, savePath);
+// System.out.println("鏂囦欢淇濆瓨鎴愬姛锛�");
+// } catch (IOException e) {
+// System.out.println("鏂囦欢淇濆瓨澶辫触锛�" + e.getMessage());
+// }
+// }
+
+ public static void saveFile(MultipartFile file, String savePath) throws IOException {
+ // 鍒涘缓淇濆瓨鏂囦欢鐨勭洰褰曪紙濡傛灉涓嶅瓨鍦級
+ File directory = new File(savePath);
+ if (!directory.exists()) {
+ directory.mkdirs();
+ }
+
+ // 淇濆瓨鏂囦欢
+ String fileName = file.getOriginalFilename();
+ String filePath = savePath + fileName;
+ File dest = new File(filePath);
+ file.transferTo(dest);
+ }
+}
diff --git a/src/main/java/com/zy/crm/manager/controller/PlanController.java b/src/main/java/com/zy/crm/manager/controller/PlanController.java
index 46a0311..bf7a647 100644
--- a/src/main/java/com/zy/crm/manager/controller/PlanController.java
+++ b/src/main/java/com/zy/crm/manager/controller/PlanController.java
@@ -14,6 +14,7 @@
import com.core.exception.CoolException;
import com.zy.crm.common.entity.RouteCollectCountType;
import com.zy.crm.common.model.SettleDto;
+import com.zy.crm.common.utils.FileSaveExampleUtil;
import com.zy.crm.common.utils.SetOfUtils;
import com.zy.crm.common.web.BaseController;
import com.zy.crm.manager.controller.result.FollowerTableVo;
@@ -37,6 +38,7 @@
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
+import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
@@ -208,6 +210,21 @@
return R.ok();
}
+ @RequestMapping(value = "/plan/insert/file/auth")
+// @ManagerAuth
+ public R insertFile(@RequestParam("planId") String planId,@RequestParam MultipartFile file){
+ System.out.println("---寮�濮�---");
+ String savePath = "D:/crm/plan/file/"+1+"/"; // 鎸囧畾淇濆瓨鏂囦欢鐨勮矾寰�
+ try{
+ FileSaveExampleUtil.saveFile(file, savePath);
+ }catch (Exception e){
+ return R.error();
+ }
+ return R.ok();
+ }
+
+
+
@PostMapping(value = "/plan/approval/auth")
@ManagerAuth
public R approval(@RequestParam Long planId,
diff --git a/src/main/java/com/zy/crm/manager/entity/Plan.java b/src/main/java/com/zy/crm/manager/entity/Plan.java
index e66b94a..5abbe6b 100644
--- a/src/main/java/com/zy/crm/manager/entity/Plan.java
+++ b/src/main/java/com/zy/crm/manager/entity/Plan.java
@@ -349,13 +349,13 @@
if (null == this.settle){ return null; }
switch (this.settle){
case 1:
- return "寮�濮�";
+ return "绛夊緟缁勯暱瀹℃牳";
case 2:
- return "缁勯暱瀹℃牳";
+ return "绛夊緟鍞墠鍒嗛厤瑙勫垝鍛�";
case 3:
- return "鍞墠瀹℃牳";
+ return "绛夊緟瑙勫垝鍛樻彁浜�";
case 4:
- return "瑙勫垝鍛樺鏍�";
+ return "瑙勫垝鍛樺凡鎻愪氦";
case 5:
return "瀹℃壒閫氳繃";
default:
@@ -369,6 +369,16 @@
if (!Cools.isEmpty(user)){
return String.valueOf(user.getNickname());
}
+ return "";
+ }
+
+ public String getNowHeadman$(){
+ PlanTypeService planTypeService = SpringUtils.getBean(PlanTypeService.class);
+ PlanType planType = planTypeService.selectById(this.planType);
+ User user = planTypeService.findPlanLeader(planType);
+ if (!Cools.isEmpty(user)){
+ return String.valueOf(user.getNickname());
+ }
return null;
}
diff --git a/src/main/webapp/static/js/cstmr/cstmr.js b/src/main/webapp/static/js/cstmr/cstmr.js
index 6b98850..d6e3d1d 100644
--- a/src/main/webapp/static/js/cstmr/cstmr.js
+++ b/src/main/webapp/static/js/cstmr/cstmr.js
@@ -23,7 +23,7 @@
// 閮ㄩ棬浜哄憳 绛涢��
dropdown.render({
elem: '#organization'
- ,content: ['<div id="organizationTree" style="height: calc(330px);border: none"></div>'].join('')
+ ,content: ['<div id="organizationTree" style="height: calc(100vh - 525px);border: none"></div>'].join('')
,style: 'width: 370px; height: 350px; padding: 0 15px; box-shadow: 1px 1px 30px rgb(0 0 0 / 12%);'
,ready: function(){
loadTree();
diff --git a/src/main/webapp/static/js/plan/plan.js b/src/main/webapp/static/js/plan/plan.js
index 244bd6b..5f095b0 100644
--- a/src/main/webapp/static/js/plan/plan.js
+++ b/src/main/webapp/static/js/plan/plan.js
@@ -3,18 +3,20 @@
var treeCond;
var admin;
var planNeedXmlSelData;
+var planNeedXmlFileId;
layui.config({
base: baseUrl + "/static/layui/lay/modules/"
}).extend({
steps: 'steps/steps',
cascader: 'cascader/cascader',
-}).use(['table','laydate', 'form', 'admin', 'xmSelect', 'steps', 'element', 'cascader', 'tree', 'dropdown'], function(){
+}).use(['table','laydate','layer','upload', 'form', 'admin', 'xmSelect', 'steps', 'element', 'cascader', 'tree', 'dropdown'], function(){
var table = layui.table;
var $ = layui.jquery;
var layer = layui.layer;
var layDate = layui.laydate;
var form = layui.form;
admin = layui.admin;
+ var upload = layui.upload;
var xmSelect = layui.xmSelect;
var steps = layui.steps;
var cascader = layui.cascader;
@@ -140,14 +142,16 @@
{type: 'checkbox'}
// ,{field: 'id', align: 'center',title: 'ID'}
// ,{field: 'hostId$', align: 'center',title: '鎵�灞炲晢鎴�'}
- ,{field: 'userId$', align: 'left',title: '涓氬姟鍛�'}
- ,{field: 'planType$', align: 'left',title: '涓氬姟绫诲瀷', width: 150}
- ,{field: 'name', align: 'left',title: '鍞墠瑙勫垝鐢宠鍗曞悕绉�', width: 220, style: 'color: #1890ff;cursor:pointer', event: 'more'}
- ,{field: 'uuid', align: 'left',title: '瑙勫垝鍗曞彿', width: 100}
- ,{field: 'planNeed$', align: 'left',title: '鎵�闇�', templet:function(d){return emptyShow(d.planNeed$)}}
- ,{field: 'deptId$', align: 'left',title: '鎵�灞為儴闂�'}
- ,{field: 'orderId$', align: 'left',title: '璺熻釜椤圭洰', width: 220, style: 'color: #1890ff;cursor:pointer', event: 'orderMore'}
- // ,{field: 'cstmrId$', align: 'left',title: '鐢叉柟鍗曚綅', width: 220, style: 'color: #1890ff;cursor:pointer', event: 'cstmrMore'}
+ ,{field: 'userId$', align: 'left',title: '涓氬姟鍛�',hide: false}
+ ,{field: 'planType$', align: 'left',title: '涓氬姟绫诲瀷', width: 150,hide: false}
+ ,{field: 'name', align: 'left',title: '鍞墠瑙勫垝鐢宠鍗曞悕绉�', width: 220, style: 'color: #1890ff;cursor:pointer', event: 'more',hide: false}
+ ,{field: 'uuid', align: 'left',title: '瑙勫垝鍗曞彿', width: 100,hide: false}
+ ,{field: 'planNeed$', align: 'left',title: '鎵�闇�', templet:function(d){return emptyShow(d.planNeed$)},hide: false}
+ ,{field: 'deptId$', align: 'left',title: '鎵�灞為儴闂�',hide: true}
+ ,{field: 'planner$', align: 'left',title: '瑙勫垝鍛�',hide: false}
+ // ,{field: 'nowHeadman$', align: 'left',title: '瑙勫垝缁勯暱',hide: true}
+ ,{field: 'orderId$', align: 'left',title: '璺熻釜椤圭洰', width: 220, style: 'color: #1890ff;cursor:pointer', event: 'orderMore',hide: false}
+ // ,{field: 'cstmrId$', align: 'left',title: '鐢叉柟鍗曚綅', width: 220, style: 'color: #1890ff;cursor:pointer', event: 'cstmrMore',hide: true}
,{field: 'appleTime$', align: 'left',title: '鐢宠鏃ユ湡', hide: true}
// ,{field: 'beItem$', align: 'center',title: '绔嬮」'}
// ,{field: 'planner', align: 'left',title: '瑙勫垝鍛�', templet:function(d){return emptyShow(d.planner)}}
@@ -159,7 +163,7 @@
// ,{field: 'planBonus', align: 'center',title: '瑙勬牸濂栭噾'}
// ,{field: 'planLeaderBonus', align: 'center',title: '瑙勬牸缁勯暱濂栭噾'}
// ,{field: 'files', align: 'center',title: '闄勪欢'}
- // ,{field: 'settle$', align: 'center',title: '杩涘害'}
+ ,{field: 'settle$', align: 'center',title: '杩涘害'}
// ,{field: 'settleMsg', align: 'center',title: '瀹℃牳杩涘害'}
// ,{field: 'comment', align: 'center',title: '璇勮'}
// ,{field: 'status$', align: 'center',title: '鐘舵��'}
@@ -191,6 +195,72 @@
}
pageCurr=curr;pageCount=count;
limit();
+ }
+ });
+
+ //婕旂ず澶氭枃浠跺垪琛�
+ var uploadListIns = upload.render({
+ elem: '#data-btn-file2'
+ ,elemList: $('#data-btn-file3') //鍒楄〃鍏冪礌瀵硅薄
+ ,url: '/plan/insert/file/auth' //姝ゅ鐢ㄧ殑鏄涓夋柟鐨� http 璇锋眰婕旂ず锛屽疄闄呬娇鐢ㄦ椂鏀规垚鎮ㄨ嚜宸辩殑涓婁紶鎺ュ彛鍗冲彲銆�
+ ,accept: 'file'
+ ,multiple: true
+ ,number: 3
+ ,auto: false
+ ,bindAction: '#testListAction'
+ ,choose: function(obj){
+ var that = this;
+ var files = this.files = obj.pushFile(); //灏嗘瘡娆¢�夋嫨鐨勬枃浠惰拷鍔犲埌鏂囦欢闃熷垪
+ //璇诲彇鏈湴鏂囦欢
+ obj.preview(function(index, file, result){
+ var tr = $(['<tr id="upload-'+ index +'">'
+ ,'<td>'+ file.name +'</td>'
+ ,'<td>'+ (file.size/1014).toFixed(1) +'kb</td>'
+ ,'<td><div class="layui-progress" lay-filter="progress-demo-'+ index +'"><div class="layui-progress-bar" lay-percent=""></div></div></td>'
+ ,'<td>'
+ ,'<button class="layui-btn layui-btn-xs demo-reload layui-hide">閲嶄紶</button>'
+ ,'<button class="layui-btn layui-btn-xs layui-btn-danger demo-delete">鍒犻櫎</button>'
+ ,'</td>'
+ ,'</tr>'].join(''));
+
+ //鍗曚釜閲嶄紶
+ tr.find('.demo-reload').on('click', function(){
+ obj.upload(index, file);
+ });
+
+ //鍒犻櫎
+ tr.find('.demo-delete').on('click', function(){
+ delete files[index]; //鍒犻櫎瀵瑰簲鐨勬枃浠�
+ tr.remove();
+ uploadListIns.config.elem.next()[0].value = ''; //娓呯┖ input file 鍊硷紝浠ュ厤鍒犻櫎鍚庡嚭鐜板悓鍚嶆枃浠朵笉鍙��
+ });
+
+ that.elemList.append(tr);
+ element.render('progress'); //娓叉煋鏂板姞鐨勮繘搴︽潯缁勪欢
+ });
+ }
+ ,done: function(res, index, upload){ //鎴愬姛鐨勫洖璋�
+ var that = this;
+ //if(res.code == 0){ //涓婁紶鎴愬姛
+ var tr = that.elemList.find('tr#upload-'+ index)
+ ,tds = tr.children();
+ tds.eq(3).html(''); //娓呯┖鎿嶄綔
+ delete this.files[index]; //鍒犻櫎鏂囦欢闃熷垪宸茬粡涓婁紶鎴愬姛鐨勬枃浠�
+ return;
+ //}
+ this.error(index, upload);
+ }
+ ,allDone: function(obj){ //澶氭枃浠朵笂浼犲畬姣曞悗鐨勭姸鎬佸洖璋�
+ console.log(obj)
+ }
+ ,error: function(index, upload){ //閿欒鍥炶皟
+ var that = this;
+ var tr = that.elemList.find('tr#upload-'+ index)
+ ,tds = tr.children();
+ tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //鏄剧ず閲嶄紶
+ }
+ ,progress: function(n, elem, e, index){ //娉ㄦ剰锛歩ndex 鍙傛暟涓� layui 2.6.6 鏂板
+ element.progress('progress-demo-'+ index, n + '%'); //鎵ц杩涘害鏉°�俷 鍗充负杩斿洖鐨勮繘搴︾櫨鍒嗘瘮
}
});
@@ -460,6 +530,16 @@
break;
case "del":
del([data.id]);
+ break;
+ case "uploadLink":
+ // 鎵撳紑寮圭獥
+ // 鏋勫缓甯﹀弬鏁扮殑鍐呭
+ planNeedXmlFileId = data.id;
+ layer.open({
+ type: 1,
+ title: '涓婁紶鏂囦欢',
+ content: $('#myModal')
+ });
break;
}
});
@@ -798,7 +878,7 @@
});
-// 鍏抽棴鍔ㄤ綔
+// 鐐瑰嚮浜嬩欢
$(document).on('click','#data-detail-close', function () {
parent.layer.closeAll();
});
diff --git a/src/main/webapp/views/plan/plan.html b/src/main/webapp/views/plan/plan.html
index a540d53..72045f4 100644
--- a/src/main/webapp/views/plan/plan.html
+++ b/src/main/webapp/views/plan/plan.html
@@ -62,7 +62,7 @@
<div class="layui-fluid">
<div class="layui-card" style="margin-bottom: 5px">
- <div class="layui-card-body">
+ <div class="layui-card-body" style="padding-top: 5px;padding-bottom: 5px ">
<div id="search-box" class="layui-form toolbar" style="display: flex;justify-content: flex-end;position: relative">
<div class="nav-box">
<div class="nav-box-item">
@@ -98,10 +98,36 @@
<input style="display:none" id="importExcel" type="file" onchange="upload(this)" >
</div>
</div>
- <div class="layui-card" style="margin-bottom: 0">
- <div class="layui-card-body">
+ <div class="layui-card" style="margin-bottom: 0;">
+ <div class="layui-card-body" style="padding-top: 5px;padding-bottom: 5px ">
瑙勫垝鍗曞垪琛紝
<span class="text-danger">璇峰嬁闅忔剰鍒犻櫎銆�</span>
+ </div>
+ </div>
+</div>
+
+<div id="myModal" style="display: none;">
+ <div style="padding: 10px">
+ <div class="layui-upload">
+ <button type="button" class="layui-btn layui-btn-normal" id="data-btn-file2">閫夋嫨鏂囦欢</button><input class="layui-upload-file" type="file" accept="" name="file" multiple="">
+ <div class="layui-upload-list" style="max-width: 1000px;">
+ <table class="layui-table">
+ <colgroup>
+ <col>
+ <col width="150">
+ <col width="260">
+ <col width="150">
+ </colgroup>
+ <thead>
+ <tr><th>鏂囦欢鍚�</th>
+ <th>澶у皬</th>
+ <th>涓婁紶杩涘害</th>
+ <th>鎿嶄綔</th>
+ </tr></thead>
+ <tbody id="data-btn-file3"></tbody>
+ </table>
+ </div>
+ <button type="button" class="layui-btn" id="testListAction">寮�濮嬩笂浼�</button>
</div>
</div>
</div>
@@ -110,11 +136,14 @@
{{# if (d.settle == 1 || d.settle == 2 || d.settle == 3 || d.settle == 4) { }}
<a class="layui-btn layui-btn-xs btn-edit" lay-event="approval">瀹℃壒</a>
{{# } }}
+<!-- <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" href="javascript:void(0)" onclick="openModal()">涓婁紶鏂囦欢</a>-->
+ <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="uploadLink">涓婁紶鏂囦欢</a>
+<!-- <button type="button" onclick="openModal()">鎵撳紑寮圭獥</button>-->
<a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
<a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
</script>
-<script type="text/html" id="plannerListDialog">
+<scrpt type="text/html" id="plannerListDialog">
<div class="layui-form admin-form">
<div class="model-form" style="padding: 30px">
<div id="plannerXmlSel"></div>
@@ -125,7 +154,7 @@
<button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
</div>
</div>
-</script>
+</scrpt>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script>
--
Gitblit v1.9.1