New file |
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | 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.*; |
| | |
| | | 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, |
| | |
| | | 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: |
| | |
| | | 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; |
| | | } |
| | | |
| | |
| | | // 部门人员 筛选 |
| | | 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(); |
| | |
| | | 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; |
| | |
| | | {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)}} |
| | |
| | | // ,{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: '状态'} |
| | |
| | | } |
| | | 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){ //注意:index 参数为 layui 2.6.6 新增 |
| | | element.progress('progress-demo-'+ index, n + '%'); //执行进度条。n 即为返回的进度百分比 |
| | | } |
| | | }); |
| | | |
| | |
| | | break; |
| | | case "del": |
| | | del([data.id]); |
| | | break; |
| | | case "uploadLink": |
| | | // 打开弹窗 |
| | | // 构建带参数的内容 |
| | | planNeedXmlFileId = data.id; |
| | | layer.open({ |
| | | type: 1, |
| | | title: '上传文件', |
| | | content: $('#myModal') |
| | | }); |
| | | break; |
| | | } |
| | | }); |
| | |
| | | |
| | | }); |
| | | |
| | | // 关闭动作 |
| | | // 点击事件 |
| | | $(document).on('click','#data-detail-close', function () { |
| | | parent.layer.closeAll(); |
| | | }); |
| | |
| | | |
| | | <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"> |
| | |
| | | <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> |
| | |
| | | {{# 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> |
| | |
| | | <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> |