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