中扬CRM客户关系管理系统
#
LSH
2023-11-04 aa0161bf05195ccb00bc1d8da4b1b8218f93f4d3
#
14个文件已修改
465 ■■■■ 已修改文件
src/main/java/com/zy/crm/common/model/SettleDto.java 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/controller/PlanController.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/controller/PriOnline2Controller.java 163 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/entity/PriOnline2.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/entity/ProcessPermissions.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/utils/SmsUtils.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/CstmrMapper.xml 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/PriOnline2Mapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/priOnline2/priOnline.js 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/priOnline2/priOnline.html 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/priOnline2/priOnline_check.html 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/priOnline2/priOnline_detail.html 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/priOnline2/priOnline_more.html 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/processPermissions/processPermissions.html 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/common/model/SettleDto.java
@@ -30,6 +30,26 @@
    private Boolean curr;
    public static List<SettleDto> InItFlowPath(List<User> users, List<String> names, int nodes) {
        List<SettleDto> list = new ArrayList<>();
        for (int i = 0; i < nodes; i++) {
            SettleDto dto = new SettleDto();
            dto.setStep(i);
            if (i == 0) {
                dto.setTitle("开始");
                dto.setMsg(users.get(i).getUsername() + names.get(i));
                dto.setTime(DateUtils.convert(new Date()));
                dto.setCurr(Boolean.TRUE);
            } else {
                dto.setTitle(names.get(i));
            }
            dto.setUserId(users.get(i).getId());
            dto.setUsername(users.get(i).getUsername());
            list.add(dto);
        }
        return list;
    }
    public static List<SettleDto> init(Plan plan, User manager,User planLeader) {
        List<SettleDto> list = new ArrayList<>();
        for (int i = 1; i < 6; i++) {
@@ -45,12 +65,6 @@
                    dto.setCurr(Boolean.TRUE);
                    list.add(dto);
                    break;
//                case 2:
//                    dto.setTitle("组长审核");
//                    dto.setUserId(manager.getId());
//                    dto.setUsername(manager.getNickname());
//                    list.add(dto);
//                    break;
                case 2:
                    dto.setTitle("售前审核");
                    dto.setUserId(planLeader.getId());
@@ -101,10 +115,6 @@
                    dto.setUsername(president.getNickname());
                    list.add(dto);
                    break;
//                case 4:
//                    dto.setTitle("业务员审核");
//                    list.add(dto);
//                    break;
                case 4:
                    dto.setTitle("审批通过");
                    dto.setUserId(plan.getUserId());
@@ -124,15 +134,6 @@
            SettleDto dto = new SettleDto();
            dto.setStep(i);
            switch (i) {
//                case 0:
//                    dto.setTitle("开始");
//                    dto.setMsg(user.getUsername() + "创建了审批");
//                    dto.setUserId(user.getId());
//                    dto.setUsername(user.getUsername());
//                    dto.setTime(DateUtils.convert(new Date()));
//                    dto.setCurr(Boolean.TRUE);
//                    list.add(dto);
//                    break;
                case 1:
                    dto.setTitle("开始");
                    dto.setMsg(user.getUsername() + "创建了审批");
@@ -172,10 +173,6 @@
                    dto.setUsername(president6.getNickname());
                    list.add(dto);
                    break;
//                case 4:
//                    dto.setTitle("业务员审核");
//                    list.add(dto);
//                    break;
                default:
                    break;
            }
src/main/java/com/zy/crm/manager/controller/PlanController.java
@@ -59,6 +59,7 @@
    private ProcessPermissionsService processPermissionsService;
    String PZH=" ————————————————— ";
    Integer PBN = 6;
    @GetMapping(value = "/plan/{id}/auth")
@@ -696,30 +697,20 @@
        wrapper.like("name", condition);
        wrapper.eq("status",1);
        ProcessPermissions processPermissions1 = processPermissionsService.selectOne(new EntityWrapper<ProcessPermissions>().eq("process_memo", 5).eq("process", "1-1"));//2:核价流程
        User manager1 = userService.selectById(processPermissions1.getUserId());       // 获取核价流程节点1确认人
        ProcessPermissions processPermissions2 = processPermissionsService.selectOne(new EntityWrapper<ProcessPermissions>().eq("process_memo", 5).eq("process", "1-2"));//2:核价流程
        User manager2 = userService.selectById(processPermissions2.getUserId());       // 获取核价流程节点1确认人
        ProcessPermissions processPermissions3= processPermissionsService.selectOne(new EntityWrapper<ProcessPermissions>().eq("process_memo", 5).eq("process", "1-3"));//2:核价流程
        User manager3 = userService.selectById(processPermissions3.getUserId());       // 获取核价流程节点1确认人
        List<ProcessPermissions> processPermissionsList = processPermissionsService.selectList(new EntityWrapper<ProcessPermissions>().eq("process_memo", 4).or().eq("process_memo", 5));//2:核价流程
        int type =0;
        if (getUserId().equals(manager1.getId())){
            type=1;//(货架)
        }else if (getUserId().equals(manager2.getId()) || getUserId().equals(manager3.getId())){
            type = 2;//(集成)
        }else {
        for (ProcessPermissions processPermissions:processPermissionsList){
            if (getUserId().equals(processPermissions.getUserId())){
                type=PBN-processPermissions.getProcessMemo();
                break;
            }
        }
        if (type==0){
            return R.error("你不是核价员,无权接任务");
        }
        List<Long> typeList = new ArrayList<>();
        List<PlanType> planTypes = planTypeService.selectList(new EntityWrapper<PlanType>().eq("type", type));
        if (type==1){
            planTypes = planTypeService.selectList(new EntityWrapper<PlanType>());
        }
        if (Cools.isEmpty(planTypes) || planTypes.size()==0){
            return R.ok();
        }
src/main/java/com/zy/crm/manager/controller/PriOnline2Controller.java
@@ -65,7 +65,7 @@
        assert priOnline2 != null;
        JSONObject resultObj = JSON.parseObject(JSON.toJSONString(priOnline2));
        // 步骤条相关
        resultObj.put("step", priOnline2.getSettle() == 3 ? 0 : priOnline2.getSettle() + 1);
        resultObj.put("step", priOnline2.getSettle().equals(priOnline2.getSettleSize()) ? 0 : priOnline2.getSettle() + 1);
        return R.ok().add(resultObj);
    }
@@ -88,13 +88,15 @@
                  @RequestParam(required = false)String condition,
                  @RequestParam Map<String, Object> param){
        EntityWrapper<PriOnline2> wrapper = new EntityWrapper<>();
        wrapper.setSqlSelect("id,title,create_time as createTime,filepath,settle,item_id as itemId,order_num as orderNum,template_name as templateName,user_id as userId,dept_id as deptId,status,update_time as updateTime,check_data as checkData,update_user_id as updateUserId,member_id as memberId");
        wrapper.setSqlSelect("id,title,create_time as createTime,filepath,settle,settle_size as settleSize,item_id as itemId,order_num as orderNum,template_name as templateName,user_id as userId,dept_id as deptId,status,update_time as updateTime,check_data as checkData,update_user_id as updateUserId,member_id as memberId");
//        wrapper.in("member_id", getUserRoleBelongsToUserId("allopen"));
        excludeTrash(param);
        convert(param, wrapper);
        allLike(PriOnline2.class, param.keySet(), wrapper, condition);
        wrapper.or().eq("member_id",getUserId());
        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
        if (!Cools.isEmpty(orderByField)) {
            wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));
        }
        return R.ok(priOnline2Service.selectPage(new Page<>(curr, limit), wrapper));
    }
@@ -188,18 +190,29 @@
//        }
//        String node="2-";
//        PlanType planType = planTypeService.selectById(plan.getPlanType());
        PlanType planType = planTypeService.selectById(plan.getPlanType());
//        node = node+planType.getType();
//        ProcessPermissions processPermissions = processPermissionsService.selectOne(new EntityWrapper<ProcessPermissions>().eq("process_memo", 5).eq("process", node));//2:核价流程
//        ProcessPermissions processPermissions = processPermissionsService.selectOne(new EntityWrapper<ProcessPermissions>().eq("process_memo", 5).eq("process", "2-1"));//2:核价流程
//        User manager = userService.selectById(processPermissions.getUserId());       // 获取核价流程节点2确认人
                                // 获取业务员
        List<String> initNames = new ArrayList<>();
        initNames.add("接取核价任务");
        initNames.add("完成核价");
        if (planType.getType().equals(2)) {
            initNames.add("完成核价");
        }
//        initNames.add("经理审核");
        initNames.add("业务员确认");
        priOnline2.setSettleMsg(JSON.toJSONString(SettleDto.initSalesPricingPriOnline2(getUser(),userUp,initNames,2)));
        List<User> users = new ArrayList<>();
        users.add(getUser());
        users.add(getUser());
        if (planType.getType().equals(2)) {
            users.add(userService.selectById(73));
        }
        users.add(userUp);
        priOnline2.setSettleMsg(JSON.toJSONString(SettleDto.InItFlowPath(users, initNames, users.size())));
        priOnline2.setSettleSize(users.size());
        //设置项目流程
        plan.setStep(2);
@@ -489,149 +502,57 @@
        PriOnline2 priOnline2 = priOnline2Service.selectById(priOnlineId);
        assert priOnline2 != null;
        Date now = new Date();
        switch (priOnline2.getSettle()) {
            case 0:
                // 本部门经理审核  节点负责人
                User user = userService.selectById(priOnline2.getMemberId());
        Long nextUserId = getUserId();
        User user = new User();
        List<SettleDto> list = new ArrayList<>();
                Plan plan1 = planService.selectById(priOnline2.getItemId());
//                PlanType planType1 = planTypeService.selectById(plan1.getPlanType());
//
//                ProcessPermissions processPermissions1 = processPermissionsService.selectOne(new EntityWrapper<ProcessPermissions>().eq("process_memo", 5).eq("process", "2-"+planType1.getType()));//2:核价流程
//                User manager1 = userService.selectById(processPermissions1.getUserId());       // 获取报价流程节点2确认人
        user = userService.selectById(priOnline2.getMemberId());
                if (Cools.isEmpty(getUser())) {
                    return R.error("抱歉,您没有提交的权限");
        if (Cools.isEmpty(getUser()) || Cools.isEmpty(user)){
            return R.error("抱歉,您无需确认!!!");
                }
                if (!getUserId().equals(user.getId())) {
                    return R.error("抱歉,您没有提交的权限");
                }
                // 修改 settle 步骤数据
                List<SettleDto> list1 = JSON.parseArray(priOnline2.getSettleMsg(), SettleDto.class);
                for (SettleDto dto : list1) {
                    switch (dto.getStep()) {
                        case 0:
                            dto.setCurr(Boolean.FALSE);
                            break;
                        case 1:
                            dto.setCurr(Boolean.TRUE);
                            if (Cools.isEmpty(dto.getMsg())){
                                dto.setMsg(user.getNickname() + "提交完成");
                            }else {
                                dto.setMsg(dto.getMsg()+PZH+DateUtils.convert(new Date())+" " + user.getNickname() + "提交完成");
                            }
                            dto.setTime(DateUtils.convert(now));
                            break;
                        default:
                            break;
                    }
                }
                priOnline2.setSettleMsg(JSON.toJSONString(list1));
                // 修改规划单状态
                priOnline2.setSettle(1);
                priOnline2.setUpdateUserId(getUserId());
                priOnline2.setUpdateTime(now);
                priOnline2.setMemberId(plan1.getUserId());
                if (!priOnline2Service.updateById(priOnline2)) {
                    throw new CoolException("提交失败,请联系管理员");
                }
                break;
//            case 1:
//                // 本部门经理审核  节点负责人
//                Plan plan = planService.selectById(priOnline2.getItemId());
//                PlanType planType = planTypeService.selectById(plan.getPlanType());
//
//                ProcessPermissions processPermissions = processPermissionsService.selectOne(new EntityWrapper<ProcessPermissions>().eq("process_memo", 5).eq("process", "2-"+planType.getType()));//2:报价流程
//                User manager = userService.selectById(processPermissions.getUserId());       // 获取报价流程节点2确认人
//
////                User manager = new User();
////                try{
////                    manager = userService.getDeptManager(getHostId(), getUser().getDeptId());        // 获取部门领导
////                }catch (Exception e){
////                    manager = user;
////                }
//                if (manager.getId().equals(getUserId())) {
//
//                    // 修改 settle 步骤数据
//                    List<SettleDto> list = JSON.parseArray(priOnline2.getSettleMsg(), SettleDto.class);
//                    for (SettleDto dto : list) {
//                        switch (dto.getStep()) {
//                            case 1:
//                                dto.setCurr(Boolean.FALSE);
//                                break;
//                            case 2:
//                                dto.setCurr(Boolean.TRUE);
//                                if (Cools.isEmpty(dto.getMsg())){
//                                    dto.setMsg(manager.getNickname() + "审批通过");
//                                }else {
//                                    dto.setMsg(dto.getMsg()+PZH+DateUtils.convert(new Date())+" " + manager.getNickname() + "审批通过");
//                                }
//                                dto.setTime(DateUtils.convert(now));
//                                break;
//                            default:
//                                break;
//                        }
//                    }
//                    priOnline2.setSettleMsg(JSON.toJSONString(list));
//
//                    // 修改规划单状态
//                    priOnline2.setSettle(2);  // 申请通过
//                    priOnline2.setUpdateTime(now);
//                    priOnline2.setUpdateUserId(getUserId());
//                    priOnline2.setMemberId(plan.getUserId());
//                    if (!priOnline2Service.updateById(priOnline2)) {
//                        throw new CoolException("审核失败,请联系管理员");
//                    }
//                } else {
//                    return R.error("抱歉,您没有审核的权限!!!");
//                }
//                break;
            case 1:
                // 业务员
                User salesman0 = userService.selectById(priOnline2.getUserId());
                if (!getUserId().equals(salesman0.getId())) {
                    return R.error("抱歉,您无需确认!!!");
                }
                // 修改 settle 步骤数据
                List<SettleDto> list2 = JSON.parseArray(priOnline2.getSettleMsg(), SettleDto.class);
                for (SettleDto dto : list2) {
                    switch (dto.getStep()) {
                        case 1:
        list = JSON.parseArray(priOnline2.getSettleMsg(), SettleDto.class);
        for (SettleDto dto : list) {
            if (dto.getStep().equals(priOnline2.getSettle())) {
                            dto.setCurr(Boolean.TRUE);
                            break;
                        case 2:
            } else if (dto.getStep().equals(priOnline2.getSettle() + 1)) {
                            dto.setCurr(Boolean.TRUE);
                            if (Cools.isEmpty(dto.getMsg())){
                                dto.setMsg("业务员" + salesman0.getNickname() + "审批通过");
                    dto.setMsg(user.getNickname() + "审批通过");
                            }else {
                                dto.setMsg(dto.getMsg()+PZH+DateUtils.convert(new Date())+" "+"业务员" + salesman0.getNickname() + "审批通过");
                    dto.setMsg(dto.getMsg() + PZH + DateUtils.convert(new Date()) + " " + user.getNickname() + "审批通过");
                            }
                            dto.setTime(DateUtils.convert(new Date()));
                            break;
                        default:
                            break;
            } else if (dto.getStep().equals(priOnline2.getSettle() + 2)) {
                nextUserId=dto.getUserId();
                    }
                }
                priOnline2.setSettleMsg(JSON.toJSONString(list2));
        priOnline2.setSettleMsg(JSON.toJSONString(list));
                // 修改规划单状态
                priOnline2.setSettle(2);  // 审批通过
        priOnline2.setSettle(priOnline2.getSettle() + 1);  // 审批通过
        if (user.getId().equals(priOnline2.getUserId())) {
                priOnline2.setStatus(1);
                priOnline2.setUpdateTime(new Date());
        }
        priOnline2.setUpdateTime(now);
                priOnline2.setUpdateUserId(getUserId());
        priOnline2.setMemberId(nextUserId);
                if (!priOnline2Service.updateById(priOnline2)) {
                    throw new CoolException("确认失败,请联系管理员");
                }
        if (user.getId().equals(priOnline2.getUserId())) {
                try{
                    priQuoteAdd(priOnline2.getId(),plannerId);
                }catch (Exception e){
                    return R.error("自动生成报价单失败");
                }
                break;
            default:
                return R.error();
        }
        return R.ok("审批成功");
    }
src/main/java/com/zy/crm/manager/entity/PriOnline2.java
@@ -134,6 +134,13 @@
    private Integer settle;
    /**
     * 进度
     */
    @ApiModelProperty(value= "进度")
    @TableField("settle_size")
    private Integer settleSize;
    /**
     * 流程进度
     */
    @ApiModelProperty(value= "流程进度")
@@ -145,12 +152,13 @@
    public PriOnline2() {}
    public PriOnline2(String title, String sheetData, Date createTime, String filepath,Integer settle) {
    public PriOnline2(String title, String sheetData, Date createTime, String filepath,Integer settle,Integer settleSize) {
        this.title = title;
        this.sheetData = sheetData;
        this.createTime = createTime;
        this.filepath = filepath;
        this.settle = settle;
        this.settleSize = settleSize;
    }
//    PriOnline priOnline = new PriOnline(
@@ -167,6 +175,8 @@
            case 1:
                return "等待确认";
            case 2:
                return this.settleSize.equals(this.settle+1)? "审批通过" : "等待确认";
            case 3:
                return "审批通过";
            default:
                return String.valueOf(this.settle);
src/main/java/com/zy/crm/manager/entity/ProcessPermissions.java
@@ -126,15 +126,15 @@
        if (null == this.processMemo){ return null; }
        switch (this.processMemo){
            case 1:
                return "核价流程";
                return "规划流程";
            case 2:
                return "报价流程";
            case 3:
                return "报销流程";
            case 4:
                return "出差流程";
                return "集成核价流程";
            case 5:
                return "核价流程";
                return "货架核价流程";
            case 7:
                return "合同管理";
            case 101:
src/main/java/com/zy/crm/manager/utils/SmsUtils.java
@@ -64,7 +64,7 @@
            headers.put("Authorization", "APPCODE " + APPCODE);
            param.put("templateId", "M6F3C81FE3");
            param.put("receive", phone);
            param.put("receive", "13083813523");
            param.put("tag", code);
            String response = new HttpHandler.Builder()
src/main/resources/mapper/CstmrMapper.xml
@@ -104,12 +104,9 @@
                and
                (
                    <if test="userId != null and userId != ''">
                        user_id = #{userId}
                        user_id = #{userId} or
                    </if>
                    <if test="userId == null or userId == ''">
                        user_id is not null
                    </if>
                    or
                    director = #{userId} or
                    mc.id in
                    (
                        select
@@ -640,59 +637,49 @@
        LEFT JOIN sys_dept sd ON mc.dept_id = sd.id
        WHERE 1=1
        and director is null
        <choose>
            <when test="deptId != null and deptId != ''">
                AND ((CHARINDEX(','+#{deptId}+',', ','+sd.path+',') > 0 OR sd.id = #{deptId})
                or
                (
                user_id = #{userId}
                or
                mc.id in
                (
                select
                cstmr_id
                from man_cstmr_foll
                where 1=1
                and user_id = #{userId}
                )
                ))
            </when>
            <otherwise>
                and
                (
                <if test="userId != null and userId != ''">
                    user_id = #{userId}
                </if>
                <if test="userId == null or userId == ''">
                    user_id is not null
                </if>
                or
                mc.id in
                (
                select
                cstmr_id
                from man_cstmr_foll
                where 1=1
                and user_id = #{userId}
                )
                )
            </otherwise>
        </choose>
<!--        <choose>-->
<!--            <when test="deptId != null and deptId != ''">-->
<!--                AND ((CHARINDEX(','+#{deptId}+',', ','+sd.path+',') > 0 OR sd.id = #{deptId})-->
<!--                or-->
<!--                (-->
<!--                user_id = #{userId}-->
<!--                or-->
<!--                mc.id in-->
<!--                (-->
<!--                select-->
<!--                cstmr_id-->
<!--                from man_cstmr_foll-->
<!--                where 1=1-->
<!--                and user_id = #{userId}-->
<!--                )-->
<!--                ))-->
<!--            </when>-->
<!--            <otherwise>-->
<!--                and-->
<!--                (-->
<!--                <if test="userId != null and userId != ''">-->
<!--                    user_id = #{userId}-->
<!--                </if>-->
<!--                <if test="userId == null or userId == ''">-->
<!--                    user_id is not null-->
<!--                </if>-->
<!--                or-->
<!--                mc.id in-->
<!--                (-->
<!--                select-->
<!--                cstmr_id-->
<!--                from man_cstmr_foll-->
<!--                where 1=1-->
<!--                and user_id = #{userId}-->
<!--                )-->
<!--                )-->
<!--            </otherwise>-->
<!--        </choose>-->
        <if test="hostId != null">
            and mc.host_id = #{hostId}
        </if>
        <if test="condition != null and condition != ''">
            and (
            mc.uuid like concat('%',#{condition},'%')
            or mc.name like concat('%',#{condition},'%')
            or mc.simple like concat('%',#{condition},'%')
            or mc.rela like concat('%',#{condition},'%')
            or mc.tel like concat('%',#{condition},'%')
            or mc.contacts like concat('%',#{condition},'%')
            or mc.remarks like concat('%',#{condition},'%')
            or mc.director like concat('%',#{condition},'%')
            or mc.addr like concat('%',#{condition},'%')
            )
            and mc.name like concat('%',#{condition},'%')
        </if>
        ORDER BY mc.create_time DESC
    </select>
src/main/resources/mapper/PriOnline2Mapper.xml
@@ -18,6 +18,7 @@
        <result column="update_time" property="updateTime" />
        <result column="check_data" property="checkData" />
        <result column="settle" property="settle" />
        <result column="settle_size" property="settleSize" />
    </resultMap>
    <!-- 查询结果不包含excel数据data,以免结果集过大 -->
@@ -34,6 +35,7 @@
        <result column="status" property="status" />
        <result column="update_time" property="updateTime" />
        <result column="settle" property="settle" />
        <result column="settle_size" property="settleSize" />
    </resultMap>
    <select id="listByPage" resultMap="NoDataResultMap">
src/main/webapp/static/js/priOnline2/priOnline.js
@@ -114,6 +114,7 @@
                event: 'more',
                hide: false
            }
            , {field: 'settleSize', align: 'center', title: '流程长度', hide: true}
            , {field: 'user$', align: 'center', title: '业务员',hide : false}
            , {field: 'deptId$', align: 'center', title: '部门',hide : true}
            , {field: 'checkDataStatus$', align: 'center', title: '报价数据',hide : false}
@@ -267,6 +268,7 @@
                    title: data.name
                }, function (i) {
                    layer.close(i);
                    console.log(data)
                    approvalEnd(data.id);
                });
                break;
@@ -277,13 +279,14 @@
                    offset: '200px',
                    title: data.name
                }, function (i) {
                    console.log(data)
                    layer.close(i);
                    // 指定规划员
                    if (data.settle === 1) {
                    // 指定模板
                    if ((data.settle === 1 && data.settleSize===3) || (data.settle===2 && data.settleSize===4)) {
                        admin.open({
                            type: 1,
                            area: '300px',
                            title: '选择规划员',
                            title: '选择报价模板',
                            content: $('#plannerListDialog').html(),
                            success: function (layero, dIndex) {
                                let plannerSel = xmSelect.render({
@@ -582,7 +585,8 @@
            }
        });
    }
    function approvalEnd(planId, plannerId, dIdx) {
    function approvalEnd(priOnlineId, plannerId, dIdx) {
        let loadIndex = layer.load(2);
        $.ajax({
            url: baseUrl+"/priOnline2/approvalEnd/auth",
src/main/webapp/views/priOnline2/priOnline.html
@@ -17,6 +17,7 @@
      top: 1px;
      left: 5px;
    }
    .nav-box-item {
      display: inline-block;
      vertical-align: middle;
@@ -30,13 +31,15 @@
<div class="layui-fluid">
  <div class="layui-card">
    <div class="layui-card-body">
      <div id="search-box" class="layui-form toolbar" style="display: flex;justify-content: flex-end;position: relative">
            <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">
            <i class="layui-icon" style="color: #1890ff;font-weight: bold">&#xe613;</i>
          </div>
          <div class="nav-box-item">
            <button id="organization" style="border: none;padding-right: 35px;" class="layui-btn layui-btn-primary icon-btn">
                        <button id="organization" style="border: none;padding-right: 35px;"
                                class="layui-btn layui-btn-primary icon-btn">
              未知
            </button>
          </div>
@@ -44,7 +47,8 @@
        <div class="layui-form-item">
          <div class="layui-inline">
            <div class="layui-input-inline">
              <input class="layui-input" type="text" name="condition" placeholder="请输入" autocomplete="off" style="border-color: #e1e1e1">
                            <input class="layui-input" type="text" name="condition" placeholder="请输入" autocomplete="off"
                                   style="border-color: #e1e1e1">
            </div>
          </div>
          <div class="layui-inline">&emsp;
@@ -73,11 +77,11 @@
<script type="text/html" id="operate">
  {{# if (d.settle == 0) { }}
    {{# if ((d.settle == 0) || (d.settle == 1 && d.settleSize == 4)){ }}
    <a class="layui-btn layui-btn-xs btn-edit" lay-event="approval">提交</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">删除</a>
  {{# } }}
  {{# if (d.settle == 1) { }}
    {{# if ((d.settle == 1 && d.settleSize == 3) || (d.settle == 2 && d.settleSize == 4)){ }}
    <a class="layui-btn layui-btn-xs btn-edit" lay-event="approval">确认</a>
    <a class="layui-btn layui-btn-xs btn-edit" lay-event="approvalEnd">回退审批</a>
  {{# } }}
@@ -118,11 +122,16 @@
        <div class="layui-form-item">
          <label class="layui-form-label layui-form-required">项目名: </label>
          <div class="layui-input-block cool-auto-complete">
            <input class="layui-input" name="planId" placeholder="请输入项目名" style="display: none" lay-verify="required">
            <input id="planId$" name="planId$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="请输入项目名" onfocus=this.blur()>
                        <input class="layui-input" name="planId" placeholder="请输入项目名" style="display: none"
                               lay-verify="required">
                        <input id="planId$" name="planId$" class="layui-input cool-auto-complete-div"
                               onclick="autoShow(this.id)" type="text" placeholder="请输入项目名" onfocus=this.blur()>
            <div class="cool-auto-complete-window">
              <input class="cool-auto-complete-window-input" data-key="planQueryNameToRobBydirector" onkeyup="autoLoad(this.getAttribute('data-key'))">
              <select class="cool-auto-complete-window-select" data-key="planQueryNameToRobBydirectorSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
                            <input class="cool-auto-complete-window-input" data-key="planQueryNameToRobBydirector"
                                   onkeyup="autoLoad(this.getAttribute('data-key'))">
                            <select class="cool-auto-complete-window-select"
                                    data-key="planQueryNameToRobBydirectorSelect"
                                    onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
              </select>
            </div>
          </div>
@@ -138,8 +147,14 @@
        <div class="layui-form-item">
          <label class="layui-form-label layui-form-required">模板: </label>
          <div class="layui-input-block">
            <input type="radio" name="template" value="1" title="模板1" checked><div class="layui-unselect layui-form-radio"><i class="layui-anim layui-icon"></i><div>模板1</div></div>
            <input type="radio" name="template" value="2" title="模板2" disabled><div class="layui-unselect layui-form-radio"><i class="layui-anim layui-icon"></i><div>模板2</div></div>
                        <input type="radio" name="template" value="1" title="模板1" checked>
                        <div class="layui-unselect layui-form-radio"><i class="layui-anim layui-icon"></i>
                            <div>模板1</div>
                        </div>
                        <input type="radio" name="template" value="2" title="模板2" disabled>
                        <div class="layui-unselect layui-form-radio"><i class="layui-anim layui-icon"></i>
                            <div>模板2</div>
                        </div>
          </div>
        </div>
      </div>
@@ -172,14 +187,16 @@
        <div class="layui-form-item">
          <label class="layui-form-label layui-form-required">核价名: </label>
          <div class="layui-input-block">
            <input class="layui-input" name="templateName" placeholder="请输入核价名" autocomplete="off" lay-verify="required">
                        <input class="layui-input" name="templateName" placeholder="请输入核价名" autocomplete="off"
                               lay-verify="required">
          </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" name="title" placeholder="请输入表格标题" autocomplete="off" lay-verify="required">
                        <input class="layui-input" name="title" placeholder="请输入表格标题" autocomplete="off"
                               lay-verify="required">
          </div>
        </div>
src/main/webapp/views/priOnline2/priOnline_check.html
@@ -24,11 +24,18 @@
  <!--  <div><button type="button" id="export">导出Execel</button></div>-->
<!--  <div><button type="button" id="save">保存到服务器</button></div>-->
<!--  <div><button type="button" id="otherSave">另保存到服务器</button></div>-->
  <div><button type="button" class="layui-btn layui-btn-primary layui-btn-xs btn-edit" id="allprint">全部打印</button></div>
  <div><button type="button" class="layui-btn layui-btn-primary layui-btn-xs btn-edit" id="print">选区打印</button></div>
  <div><button type="button" class="layui-btn layui-btn-primary layui-btn-xs btn-edit" id="download">下载</button></div>
    <div>
        <button type="button" class="layui-btn layui-btn-primary layui-btn-xs btn-edit" id="allprint">全部打印</button>
</div>
<div id="luckysheet" style="margin:0px;padding:0px;position:absolute;width:100%;height: 100vh;left: 0px;top: 0px;"></div>
    <div>
        <button type="button" class="layui-btn layui-btn-primary layui-btn-xs btn-edit" id="print">选区打印</button>
    </div>
    <div>
        <button type="button" class="layui-btn layui-btn-primary layui-btn-xs btn-edit" id="download">下载</button>
    </div>
</div>
<div id="luckysheet"
     style="margin:0px;padding:0px;position:absolute;width:100%;height: 100vh;left: 0px;top: 0px;"></div>
<script>
  $(function () {
    var layer = layui.layer;
@@ -191,7 +198,9 @@
  function getUrlParams(name) {
    var url = window.location.search;
    if (url.indexOf('?') == -1) { return false; }
        if (url.indexOf('?') == -1) {
            return false;
        }
    url = url.substr(1);
    url = url.split('&');
    var name = name || '';
src/main/webapp/views/priOnline2/priOnline_detail.html
@@ -23,12 +23,21 @@
<div style="display: flex;position: absolute;top: 20px;left:30px;z-index: 9999;">
<!--  <div>上传Execel:<input type="file" id="Luckyexcel-demo-file" /></div>-->
<!--  <div><button type="button" id="export">导出Execel</button></div>-->
  <div><button type="button" class="layui-btn layui-btn-primary layui-btn-xs btn-edit" id="save">保存</button></div>
  <div><button type="button" class="layui-btn layui-btn-primary layui-btn-xs btn-edit" id="otherSave">另存为</button></div>
  <div><button type="button" class="layui-btn layui-btn-primary layui-btn-xs btn-edit" id="allprint">全部打印</button></div>
  <div><button type="button" class="layui-btn layui-btn-primary layui-btn-xs btn-edit" id="print">选区打印</button></div>
    <div>
        <button type="button" class="layui-btn layui-btn-primary layui-btn-xs btn-edit" id="save">保存</button>
</div>
<div id="luckysheet" style="margin:0px;padding:0px;position:absolute;width:100%;height: 100vh;left: 0px;top: 0px;"></div>
    <div>
        <button type="button" class="layui-btn layui-btn-primary layui-btn-xs btn-edit" id="otherSave">另存为</button>
    </div>
    <div>
        <button type="button" class="layui-btn layui-btn-primary layui-btn-xs btn-edit" id="allprint">全部打印</button>
    </div>
    <div>
        <button type="button" class="layui-btn layui-btn-primary layui-btn-xs btn-edit" id="print">选区打印</button>
    </div>
</div>
<div id="luckysheet"
     style="margin:0px;padding:0px;position:absolute;width:100%;height: 100vh;left: 0px;top: 0px;"></div>
<script>
  $(function () {
    var layer = layui.layer;
@@ -41,7 +50,8 @@
      allowEdit: true, //是否允许前台编辑
      sheetFormulaBar: true, //是否显示公式栏
      forceCalculation: true,//强制计算公式
      myFolderUrl: '' //左上角<返回按钮的链接
            myFolderUrl: '', //左上角<返回按钮的链接
            allowEdit: true // 是否允许前台编辑
    }
    if(getUrlParams('id') == false || getUrlParams('id') == undefined){
@@ -260,7 +270,9 @@
  function getUrlParams(name) {
    var url = window.location.search;
    if (url.indexOf('?') == -1) { return false; }
        if (url.indexOf('?') == -1) {
            return false;
        }
    url = url.substr(1);
    url = url.split('&');
    var name = name || '';
src/main/webapp/views/priOnline2/priOnline_more.html
@@ -3,6 +3,7 @@
    #formAdvForm {
        background-color: #f3f3f3;
    }
    #formAdvForm .layui-form-item {
        margin-top: 20px;
        margin-bottom: 0;
@@ -31,7 +32,8 @@
            <div class="layui-card-header" style="padding-top: 5px; padding-bottom: 5px">
                <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 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>
                </div>
            </div>
@@ -74,7 +76,8 @@
    </div>
    <div class="form-group-bottom text-right">
        <button class="layui-btn" lay-filter="refresh" lay-submit><i class="layui-icon">&#xe666;</i>&emsp;刷新&emsp;</button>
        <button class="layui-btn" lay-filter="refresh" lay-submit><i class="layui-icon">&#xe666;</i>&emsp;刷新&emsp;
        </button>
    </div>
</form>
@@ -132,6 +135,7 @@
        form.render('select');
        init();
        function init(){
            notice.msg('正在载入数据......', {icon: 4, position: "topRight"});
            $.ajax({
@@ -175,6 +179,7 @@
                type: 'datetime'
            });
        }
        layDateRender();
        /* 监听表单提交 */
src/main/webapp/views/processPermissions/processPermissions.html
@@ -40,11 +40,11 @@
                        <div class="layui-input-block">
                            <select name="process_memo">
                                <option value="">请选择状态</option>
                                <option value="1">核价流程</option>
                                <option value="1">规划流程</option>
                                <option value="2">报价流程</option>
                                <option value="3">报销流程</option>
<!--                                <option value="4">出差流程</option>-->
                                <option value="5">核价流程</option>
                                <option value="4">集成核价流程</option>
                                <option value="5">货架核价流程</option>
                                <option value="7">合同管理</option>
                                <option value="101">其它规划员</option>
                            </select>