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