中扬CRM客户关系管理系统
LSH
2023-08-11 affbba0568f48d558ad84fb5247c135d7be96bde
#报价单审核机制
5个文件已修改
110 ■■■■ 已修改文件
src/main/java/com/zy/crm/manager/controller/PriQuoteController.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/entity/PriQuote.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/PriQuoteMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/priQuote/priQuote.js 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/priQuote/priQuote_more.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/controller/PriQuoteController.java
@@ -1,5 +1,6 @@
package com.zy.crm.manager.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
@@ -11,15 +12,15 @@
import com.core.common.DateUtils;
import com.core.common.R;
import com.core.domain.KeyValueVo;
import com.zy.crm.common.model.SettleDto;
import com.zy.crm.common.web.BaseController;
import com.zy.crm.manager.entity.Item;
import com.zy.crm.manager.entity.Plan;
import com.zy.crm.manager.entity.PriQuote;
import com.zy.crm.manager.entity.PriQuoteBudget;
import com.zy.crm.manager.entity.*;
import com.zy.crm.manager.service.ItemService;
import com.zy.crm.manager.service.PlanService;
import com.zy.crm.manager.service.PriQuoteBudgetService;
import com.zy.crm.manager.service.PriQuoteService;
import com.zy.crm.system.entity.User;
import com.zy.crm.system.service.UserService;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
@@ -42,12 +43,27 @@
    private PlanService planService;
    @Autowired
    private UserService userService;
    @Autowired
    private PriQuoteBudgetService priQuoteBudgetService;
    @RequestMapping(value = "/priQuote/{id}/auth")
    @ManagerAuth
    public R get(@PathVariable("id") String id) {
        return R.ok(priQuoteService.selectById(String.valueOf(id)));
        PriQuote priQuote = priQuoteService.selectById(String.valueOf(id));
        assert priQuote != null;
        JSONObject resultObj = JSON.parseObject(JSON.toJSONString(priQuote));
        if (!Cools.isEmpty(priQuote.getForm())) {
            JSONObject formObj = JSON.parseObject(priQuote.getForm());
            formObj.forEach(resultObj::putIfAbsent);
        }
        // 步骤条相关
        resultObj.put("step", priQuote.getSettle() == 5 ? 0 : priQuote.getSettle() + 1);
        return R.ok().add(resultObj);
//        return R.ok(priQuoteService.selectById(String.valueOf(id)));
    }
    @RequestMapping(value = "/priQuote/list/auth")
@@ -127,6 +143,12 @@
        //设置项目流程
        plan.setStep(5);
        priQuote.setForm(JSON.toJSONString(map));     // 自定义表单内容
        priQuote.setSettle(1);  // 1.开始
        User manager = userService.getDeptManager(getHostId(), getUser().getDeptId());        // 获取部门领导
        priQuote.setSettleMsg(JSON.toJSONString(SettleDto.init(plan, manager)));
        planService.updateById(plan);
        priQuoteService.insert(priQuote);
src/main/java/com/zy/crm/manager/entity/PriQuote.java
@@ -86,6 +86,25 @@
    @TableField("member_id")
    private Long memberId;
    /**
     * 表单内容
     */
    @ApiModelProperty(value= "表单内容")
    private String form;
    /**
     * 进度 1: 开始  2: 组长审核  3: 售前组长审核  4: 规划员审核  5: 审批通过
     */
    @ApiModelProperty(value= "进度 1: 开始  2: 组长审核  3: 售前审核  4: 规划员审核  5: 审批通过  ")
    private Integer settle;
    /**
     * 审核进度
     */
    @ApiModelProperty(value= "审核进度")
    @TableField("settle_msg")
    private String settleMsg;
    public PriQuote() {}
    public PriQuote(String title,String sheetData,Date createTime,String filepath) {
@@ -95,6 +114,24 @@
        this.filepath = filepath;
    }
    public String getSettle$(){
        if (null == this.settle){ return null; }
        switch (this.settle){
            case 1:
                return "等待组长审核";
            case 2:
                return "等待售前分配规划员";
            case 3:
                return "等待规划员提交";
            case 4:
                return "规划员已提交";
            case 5:
                return "审批通过";
            default:
                return String.valueOf(this.settle);
        }
    }
    public String getCreateTime$(){
        if (Cools.isEmpty(this.createTime)){
            return "";
src/main/resources/mapper/PriQuoteMapper.xml
@@ -9,6 +9,9 @@
        <result column="sheet_data" property="sheetData" />
        <result column="create_time" property="createTime" />
        <result column="dept_id" property="deptId" />
        <result column="form" property="form" />
        <result column="settle" property="settle" />
        <result column="settle_msg" property="settleMsg" />
    </resultMap>
src/main/webapp/static/js/priQuote/priQuote.js
@@ -3,8 +3,9 @@
layui.config({
    base: baseUrl + "/static/layui/lay/modules/"
}).extend({
    steps: 'steps/steps',
    cascader: 'cascader/cascader',
}).use(['table','laydate', 'form', 'admin', 'xmSelect', 'element', 'cascader', 'tree', 'dropdown','layer','upload', 'cascader'], function(){
}).use(['table','laydate', 'form', 'admin', 'xmSelect', 'element', 'cascader', 'steps', 'tree', 'dropdown','layer','upload', 'cascader'], function(){
    var table = layui.table;
    var $ = layui.jquery;
    var layer = layui.layer;
@@ -12,6 +13,7 @@
    var form = layui.form;
    admin = layui.admin;
    var tree = layui.tree;
    var steps = layui.steps;
    var element = layui.element;
    var upload = layui.upload;
    var xmSelect = layui.xmSelect;
@@ -117,7 +119,7 @@
            if (res.code === 403) {
                top.location.href = baseUrl+"/";
            }
            pageCurr=curr;
            pageCurr=curr;pageCount=count;
            limit();
        }
    });
@@ -150,20 +152,6 @@
        var checkStatus = table.checkStatus(obj.config.id);
        console.log(checkStatus)
        switch(obj.event) {
            case 'more':
                top.priQuoteByMore = obj.data.id;
                console.log(top.priQuoteByMore)
                admin.popupRight({
                    type: 1,
                    window: "top",
                    area: "1250px",
                    url: "priQuote_more.html",
                    end: function () {
                        // $(".layui-laypage-btn")[0].click();
                    }
                })
                break;
            case 'addBlank':
                showEditModel();
                break;
@@ -250,6 +238,20 @@
    table.on('tool(priQuote)', function(obj){
        var data = obj.data;
        switch (obj.event) {
            case 'more':
                top.priQuoteByMore = data.id;
                console.log(top.priQuoteByMore)
                admin.popupRight({
                    type: 1,
                    window: "top",
                    area: "1250px",
                    url: "priQuote_more.html",
                    end: function () {
                        // $(".layui-laypage-btn")[0].click();
                    }
                })
                break;
            case "quote":
                layer.open({
                    type: 2,
src/main/webapp/views/priQuote/priQuote_more.html
@@ -46,7 +46,7 @@
                <div>
                    <i class="layui-icon" style="font-size: 20px;color: #1890ff;font-weight: bold">&#xe656;</i>
                    <span id="form-name" style="margin: 0 6px;font-size: 18px;font-weight: bold;letter-spacing: 1px"></span>
                    <span style="opacity: .5;font-size: small;margin-left: 5px">售前规划申请单</span>
                    <span style="opacity: .5;font-size: small;margin-left: 5px">报价单</span>
                </div>
            </div>
            <div class="layui-card-body" style="padding: 30px 20px">
@@ -75,7 +75,7 @@
                <!-- 时间线 -->
                <div class="layui-card">
                    <div class="layui-card-header">
                        <span>售前规划清单</span>
                        <span>报价单</span>
                    </div>
                    <div class="layui-card-body">
                        <ul class="layui-timeline" id="timelineBox">