中扬CRM客户关系管理系统
#
LSH
2023-11-07 cb3870820f63e6f7ba595d80dcbbfd3deae6fdf6
#
9个文件已修改
376 ■■■■■ 已修改文件
src/main/java/com/zy/crm/manager/controller/PlanController.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/controller/PriOnline2Controller.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/controller/PriQuoteController.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/entity/PriQuote.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/PriQuoteMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/priOnline2/priOnline.js 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/priQuote/priQuote.js 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/priOnline2/priOnline.html 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/priQuote/priQuote.html 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/controller/PlanController.java
@@ -306,11 +306,14 @@
    @RequestMapping(value = "/plan/view/file/auth")
//    @ManagerAuth
    public R viewFile(@RequestParam("planId") String planId){
        List<FileSaveExampleUtil.FileDTO> fileDTOS = new ArrayList<>();
        if (Cools.isEmpty(planId)){
            return R.ok(fileDTOS);
        }
        int id = Integer.parseInt(planId);
//        String savePath = "D:/crm/plan/file/"+id+"/"; // 指定保存文件的路径
        try{
            List<Integer> ids = planService.selectPlanUrlId(id);
            List<FileSaveExampleUtil.FileDTO> fileDTOS = new ArrayList<>();
            for (int id2 : ids){
                String url = planService.selectPlanUrlPlanIdUrl(id2);
                String name = planService.selectPlanUrlPlanIdName(id2);
src/main/java/com/zy/crm/manager/controller/PriOnline2Controller.java
@@ -277,6 +277,7 @@
        users.add(userUp);
        priOnline2.setSettleMsg(JSON.toJSONString(SettleDto.InItFlowPath(users, initNames, users.size())));
        priOnline2.setSettleSize(users.size());
        priOnline2.setPlanId(plan.getId());
        //设置项目流程
        plan.setStep(2);
@@ -593,8 +594,8 @@
                }
                dto.setTime(DateUtils.convert(new Date()));
            } else if (dto.getStep().equals(priOnline2.getSettle() + 2)) {
                if (priOnline2.getSettleSize().equals(4)){
                    nextUserId = 0L;
                if (Cools.isEmpty(dto.getUserId())){
                    nextUserId= 0L;
                }else {
                    nextUserId=dto.getUserId();
                }
src/main/java/com/zy/crm/manager/controller/PriQuoteController.java
@@ -84,7 +84,7 @@
                  @RequestParam(required = false)String condition,
                  @RequestParam Map<String, Object> param){
        EntityWrapper<PriQuote> wrapper = new EntityWrapper<>();
        wrapper.setSqlSelect("id,title,create_time as createTime,filepath,item_id as itemId,order_num as orderNum,template_name as templateName,sheet_data as sheetData,user_id as userId,dept_id as deptId,settle,settle_msg as settleMsg,form,update_user_id as updateUserId,update_time as updateTime,in_order_num as inOrderNum,member_id as memberId,template");
        wrapper.setSqlSelect("id,title,create_time as createTime,plan_id as planId,filepath,item_id as itemId,order_num as orderNum,template_name as templateName,sheet_data as sheetData,user_id as userId,dept_id as deptId,settle,settle_msg as settleMsg,form,update_user_id as updateUserId,update_time as updateTime,in_order_num as inOrderNum,member_id as memberId,template");
//        wrapper.in("member_id", getUserRoleBelongsToUserId());
        excludeTrash(param);
        convert(param, wrapper);
@@ -169,6 +169,8 @@
        //模板
        priQuote.setTemplate(map.get("template").toString());
        priQuote.setPlanId(priOnline2.getPlanId());
        //设置项目流程
src/main/java/com/zy/crm/manager/entity/PriQuote.java
@@ -113,6 +113,10 @@
    @TableField("host_id")
    private Long hostId;
    @ApiModelProperty(value= "规划单ID")
    @TableField("plan_id")
    private Long planId;
    /**
     * 审核进度
     */
src/main/resources/mapper/PriQuoteMapper.xml
@@ -9,6 +9,7 @@
        <result column="sheet_data" property="sheetData" />
        <result column="create_time" property="createTime" />
        <result column="dept_id" property="deptId" />
        <result column="plan_id" property="planId" />
        <result column="form" property="form" />
        <result column="settle" property="settle" />
        <result column="settle_msg" property="settleMsg" />
src/main/webapp/static/js/priOnline2/priOnline.js
@@ -259,6 +259,96 @@
        }
    });
    $("#data-btn-file2").on("click", (e) => {
        $("#data-btn-upload").click()
    });
    var _uploadFile = null
    //响应上传
    $("#data-btn-upload").on("change",(evt) => {
        var files = evt.target.files;
        if(files==null || files.length==0){
            alert("No files wait for import");
            return;
        }
        var file = files[0]
        var tr = $(['<tr id="upload-">'
            ,'<td id="upload-filename-id-'+ file.lastModified + '">' + file.name +'</td>'
            ,'<td>'+ (file.size/1014).toFixed(1) +'kb</td>'
            ,'<td id="upload-file-id-' + file.lastModified + '">准备上传</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>'
            ,'<button id="file-download" class="layui-btn layui-btn-xs demo-reload layui-hide">下载</button>'
            ,'</td>'
            ,'</tr>'].join(''));
        //删除
        tr.find('.demo-delete').on('click', function(){
            tr.remove();
            $("#data-btn-upload").val("")
            _uploadFile = null
        });
        $('#data-btn-file3').append(tr)
        _uploadFile = file
    })
    //开始上传
    $("#testListAction").on("click", async (e) => {
        if (_uploadFile == null) {
            return false;
        }
        var index = layer.load(1, {
            shadeClose: false,
            title: '上传中..',
            shade: [0.5,'#000']
        });
        var file = _uploadFile
        $("#upload-file-id-" + file.lastModified).html("上传中")
        putObject(file).then((result) => {
            var filename = result.name
            layer.msg('上传成功', {icon: 1});
            $("#upload-file-id-" + file.lastModified).html("上传成功")
            $("#upload-filename-id-" + file.lastModified).html(filename)
            $.ajax({
                url: baseUrl+"/plan/insert/file/auth",
                headers: {'token': localStorage.getItem('token')},
                data: {
                    'planId': $('.layui-layer-title').text(),
                    'filename': filename,
                    'filesize': file.size
                },
                method: 'POST',
                success: function (res) {
                    if (res.code === 200){
                        layer.close(index)
                        console.log(res)
                    } else if (res.code === 403){
                        top.location.href = baseUrl+"/";
                    } else {
                        layer.msg(res.msg)
                    }
                }
            });
        }).catch((e) => {
            console.log(e)
            layer.msg('上传失败', {icon: 2});
            $("#upload-file-id-" + file.lastModified).html("上传失败")
        })
        //清空file
        $("#data-btn-upload").val("")
        _uploadFile = null
    });
    // 监听行工具事件
    table.on('tool(priOnline)', function (obj) {
        var data = obj.data;
@@ -507,9 +597,64 @@
                    }
                });
                break;
            case "uploadLink":
                // 打开弹窗
                // 构建带参数的内容
                console.log(data)
                layer.open({
                    type: 1,
                    title: '上传文件-'+data.itemId,
                    content: $('#myModal')
                });
                // 获取路径下的文件列表,使用 jQuery 的 ajax 方法
                $.ajax({
                    url: '/plan/view/file/auth',
                    data:{
                        planId:data.itemId
                    },
                    success: function(response) {
                        if (response.code==200){
                            var targetTable = document.getElementById("data-btn-file3");
                            targetTable.innerHTML = '';
                            // 将获取到的文件列表添加到文件队列中进行显示
                            response.data.forEach(function(file,index) {
                                // 创建tr元素
                                var tr = document.createElement("tr");
                                tr.id = "upload-"+index;
                                tr.innerHTML = '<td>' + file.name + '</td>'
                                    + '<td>' + (file.size / 1024).toFixed(1) + 'kb</td>'
                                    // + '<td><div class="layui-progress" lay-filter="progress-demo-' + index ,100 + '%'+ '"><div class="layui-progress-bar" lay-percent=""></div></div></td>'
                                    + '<td>'+'已完成'+'</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>'
                                    + '<a href="' + file.path + '" download class="layui-btn layui-btn-xs layui-btn-primary">下载</a>'
                                    + '</td>';
                                // 将tr元素添加到目标table中
                                targetTable.appendChild(tr);
                            });
                        }else {
                            console.log('Failed to get file list error.');
                        }
                    },
                    error: function() {
                        console.log('Failed to get file list.');
                    }
                });
                break;
        }
    });
    // 点击下载按钮时触发文件下载
    $('#data-btn-file3').on('click', 'a', function() {
        console.log(this)
        var downloadUrl = $(this).attr('href');
        let url = getObjectUrl(downloadUrl)
        layer.msg("准备下载中", {icon: 1});
        location.href = url
        return false;  // 阻止默认的链接跳转行为
    });
    // 搜索
    form.on('submit(search)', function (data) {
        pageCurr = 1;
src/main/webapp/static/js/priQuote/priQuote.js
@@ -149,6 +149,96 @@
        }
    });
    $("#data-btn-file2").on("click", (e) => {
        $("#data-btn-upload").click()
    });
    var _uploadFile = null
    //响应上传
    $("#data-btn-upload").on("change",(evt) => {
        var files = evt.target.files;
        if(files==null || files.length==0){
            alert("No files wait for import");
            return;
        }
        var file = files[0]
        var tr = $(['<tr id="upload-">'
            ,'<td id="upload-filename-id-'+ file.lastModified + '">' + file.name +'</td>'
            ,'<td>'+ (file.size/1014).toFixed(1) +'kb</td>'
            ,'<td id="upload-file-id-' + file.lastModified + '">准备上传</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>'
            ,'<button id="file-download" class="layui-btn layui-btn-xs demo-reload layui-hide">下载</button>'
            ,'</td>'
            ,'</tr>'].join(''));
        //删除
        tr.find('.demo-delete').on('click', function(){
            tr.remove();
            $("#data-btn-upload").val("")
            _uploadFile = null
        });
        $('#data-btn-file3').append(tr)
        _uploadFile = file
    })
    //开始上传
    $("#testListAction").on("click", async (e) => {
        if (_uploadFile == null) {
            return false;
        }
        var index = layer.load(1, {
            shadeClose: false,
            title: '上传中..',
            shade: [0.5,'#000']
        });
        var file = _uploadFile
        $("#upload-file-id-" + file.lastModified).html("上传中")
        putObject(file).then((result) => {
            var filename = result.name
            layer.msg('上传成功', {icon: 1});
            $("#upload-file-id-" + file.lastModified).html("上传成功")
            $("#upload-filename-id-" + file.lastModified).html(filename)
            $.ajax({
                url: baseUrl+"/plan/insert/file/auth",
                headers: {'token': localStorage.getItem('token')},
                data: {
                    'planId': $('.layui-layer-title').text(),
                    'filename': filename,
                    'filesize': file.size
                },
                method: 'POST',
                success: function (res) {
                    if (res.code === 200){
                        layer.close(index)
                        console.log(res)
                    } else if (res.code === 403){
                        top.location.href = baseUrl+"/";
                    } else {
                        layer.msg(res.msg)
                    }
                }
            });
        }).catch((e) => {
            console.log(e)
            layer.msg('上传失败', {icon: 2});
            $("#upload-file-id-" + file.lastModified).html("上传失败")
        })
        //清空file
        $("#data-btn-upload").val("")
        _uploadFile = null
    });
    // 监听排序事件
    table.on('sort(priQuote)', function (obj) {
        var searchData = {};
@@ -362,9 +452,64 @@
                    })
                });
                break;
            case "uploadLink":
                // 打开弹窗
                // 构建带参数的内容
                console.log(data)
                layer.open({
                    type: 1,
                    title: '上传文件-'+data.itemId,
                    content: $('#myModal')
                });
                // 获取路径下的文件列表,使用 jQuery 的 ajax 方法
                $.ajax({
                    url: '/plan/view/file/auth',
                    data:{
                        planId:data.itemId
                    },
                    success: function(response) {
                        if (response.code==200){
                            var targetTable = document.getElementById("data-btn-file3");
                            targetTable.innerHTML = '';
                            // 将获取到的文件列表添加到文件队列中进行显示
                            response.data.forEach(function(file,index) {
                                // 创建tr元素
                                var tr = document.createElement("tr");
                                tr.id = "upload-"+index;
                                tr.innerHTML = '<td>' + file.name + '</td>'
                                    + '<td>' + (file.size / 1024).toFixed(1) + 'kb</td>'
                                    // + '<td><div class="layui-progress" lay-filter="progress-demo-' + index ,100 + '%'+ '"><div class="layui-progress-bar" lay-percent=""></div></div></td>'
                                    + '<td>'+'已完成'+'</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>'
                                    + '<a href="' + file.path + '" download class="layui-btn layui-btn-xs layui-btn-primary">下载</a>'
                                    + '</td>';
                                // 将tr元素添加到目标table中
                                targetTable.appendChild(tr);
                            });
                        }else {
                            console.log('Failed to get file list error.');
                        }
                    },
                    error: function() {
                        console.log('Failed to get file list.');
                    }
                });
                break;
        }
    });
    // 点击下载按钮时触发文件下载
    $('#data-btn-file3').on('click', 'a', function() {
        console.log(this)
        var downloadUrl = $(this).attr('href');
        let url = getObjectUrl(downloadUrl)
        layer.msg("准备下载中", {icon: 1});
        location.href = url
        return false;  // 阻止默认的链接跳转行为
    });
    // 搜索
    form.on('submit(search)', function (data) {
        pageCurr = 1;
src/main/webapp/views/priOnline2/priOnline.html
@@ -76,6 +76,31 @@
    <input type="button" onclick="upload()" value="上传"/>
</form>
<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 id="data-btn-upload" 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>
<script type="text/html" id="operate">
    {{# if ((d.settle == 0) || (d.settle == 1 && d.settleSize == 4)){ }}
@@ -88,6 +113,7 @@
    {{# if (d.settle == 1 || (d.settle == 2 && d.settleSize == 4)){ }}
    <a class="layui-btn layui-btn-xs btn-edit" lay-event="approvalEnd">回退审批</a>
    {{# } }}
    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="uploadLink">附件</a>
    <a class="layui-btn layui-btn-xs btn-edit" lay-event="check">核价</a>
    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">编辑</a>
    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="upload">上传询价</a>
@@ -115,6 +141,7 @@
<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script>
<script type="text/javascript" src="../../static/js/luckysheet_js/pako.es5.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/luckysheet_js/base64.min.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/aliyun-oss-sdk.min.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/priOnline2/priOnline.js" charset="utf-8"></script>
<!-- 表单弹窗 -->
<script type="text/html" id="editDialog">
@@ -140,12 +167,12 @@
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">核价名: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" type="text" name="name" placeholder="核价名" autocomplete="off">
                    </div>
                </div>
<!--                <div class="layui-form-item">-->
<!--                    <label class="layui-form-label layui-form-required">核价名: </label>-->
<!--                    <div class="layui-input-block">-->
<!--                        <input class="layui-input" type="text" name="name" placeholder="核价名" autocomplete="off">-->
<!--                    </div>-->
<!--                </div>-->
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">模板: </label>
src/main/webapp/views/priQuote/priQuote.html
@@ -92,6 +92,32 @@
    </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 id="data-btn-upload" 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>
<script type="text/html" id="toolbar">
    <div class="layui-btn-container">
        <button class="layui-btn layui-btn-sm" lay-event="addBlank">新建报价单</button>
@@ -106,6 +132,7 @@
    {{# if (d.settle == 2 || d.settle == 3) { }}
        <a class="layui-btn layui-btn-xs btn-edit" lay-event="refuse">回退审批</a>
    {{# } }}
    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="uploadLink">附件</a>
    <a class="layui-btn layui-btn-xs btn-edit" lay-event="quote">报价</a>
    <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>
@@ -116,6 +143,7 @@
<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/aliyun-oss-sdk.min.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/layui/lay/modules/cascader/citys-data.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/priQuote/priQuote.js" charset="utf-8"></script>
<!-- 表单弹窗 -->