中扬CRM客户关系管理系统
LSH
2024-04-02 75c3ceae532acc1ffe1df3c6b71a5b9621be8a41
#周计划
5个文件已修改
1个文件已添加
381 ■■■■ 已修改文件
src/main/java/com/zy/crm/manager/controller/WeeklyController.java 88 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/entity/Weekly.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/common.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/weekly/weekly.js 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/weekly/weekly.html 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/weekly/weekly_more.html 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/controller/WeeklyController.java
@@ -47,12 +47,24 @@
    private SmsCodeService smsCodeService;
    String PZH = " ————————————————— ";
    Integer PBN = 6;
    Integer PBN = 3;
    @RequestMapping(value = "/weekly/{id}/auth")
    @ManagerAuth
    public R get(@PathVariable("id") String id) {
        return R.ok(weeklyService.selectById(String.valueOf(id)));
        Weekly weekly = weeklyService.selectById(String.valueOf(id));
        assert weekly != null;
        JSONObject resultObj = JSON.parseObject(JSON.toJSONString(weekly));
        if (!Cools.isEmpty(weekly.getForm())) {
            JSONObject formObj = JSON.parseObject(weekly.getForm());
            formObj.forEach(resultObj::putIfAbsent);
        }
        // 步骤条相关
        resultObj.put("step", weekly.getSettle().equals(weekly.getSettleSize()) ? 0 : weekly.getSettle() + 1);
        return R.ok().add(resultObj);
//        return R.ok(weeklyService.selectById(String.valueOf(id)));
    }
    @RequestMapping(value = "/weekly/list/auth")
@@ -103,11 +115,27 @@
    @RequestMapping(value = "/weekly/delete/auth")
    @ManagerAuth
    public R delete(@RequestParam(value="ids[]") Long[] ids){
         for (Long id : ids){
            weeklyService.deleteById(id);
        }
        return R.ok();
    public R delete(@RequestParam() Long[] ids){
         try{
             for (Long id : ids){
                 List<WeeklyDailyReality> weeklyDailyRealities = weeklyDailyRealityService.selectList(new EntityWrapper<WeeklyDailyReality>().eq("weekly_id", id));
                 for (WeeklyDailyReality weeklyDailyReality:weeklyDailyRealities){
                     weeklyDailyRealityService.deleteById(weeklyDailyReality);
                 }
                 List<WeeklyDailyPlan> weeklyDailyPlans = weeklyDailyPlanService.selectList(new EntityWrapper<WeeklyDailyPlan>().eq("weekly_id", id));
                 for (WeeklyDailyPlan weeklyDailyPlan:weeklyDailyPlans){
                     weeklyDailyPlanService.deleteById(weeklyDailyPlan);
                 }
                 List<WeeklyFoll> weeklyFolls = weeklyFollService.selectList(new EntityWrapper<WeeklyFoll>().eq("weekly_id", id));
                 for (WeeklyFoll weeklyFoll:weeklyFolls){
                     weeklyFollService.deleteById(weeklyFoll);
                 }
                 weeklyService.deleteById(id);
             }
         }catch (Exception e){
             throw new CoolException("删除失败,异常信息:"+e);
         }
         return R.ok();
    }
    @RequestMapping(value = "/weekly/export/auth")
@@ -220,16 +248,33 @@
            weekly.setWeeklyNowMonth(TimeCalculatorUtils.WeeklyNowMonthDay(weekly.getStartTime()));
            weekly.setWeeklyDayMonth(weekly.getWeeklyMonth()+"月第"+weekly.getWeeklyNowMonth()+"周");
            List<User> userList = new ArrayList<>();
            userList.add(getUser());
            User manager = new User();
            try {
                manager = userService.getDeptManager(getHostId(), getUser().getDeptId());        // 获取部门领导
            } catch (Exception e) {
                manager = getUser();
            }
            userList.add(manager);
            weekly.setDirector(manager.getId());
            // 获取业务员
            List<String> initNames = new ArrayList<>();
            initNames.add("创建了审批");
            initNames.add("业务员提交");
            initNames.add("部门领导审核");
            List<User> users = new ArrayList<>();
            users.add(getUser());
            users.add(getUser());
            users.add(manager);
//            users.add(getUser());
            weekly.setSettleMsg(JSON.toJSONString(SettleDto.InItFlowPathTwo(users, initNames, users.size())));
            weekly.setSettleSize(users.size());
            weekly.setSettleCurrent(1);
            if (users.size() > 1) {
                weekly.setDirector(users.get(1).getId());
            } else {
                weekly.setDirector(getUserId());
            }
            weekly.setSettleSize(users.size());
            List<Date> dates = TimeCalculatorUtils.WeeklyListDays(dateList);//获取周一到周日日期
@@ -268,7 +313,7 @@
            }
            try{
                insertWeeklyFoll(userList,weekly.getId());                // 自动添加跟进人
                insertWeeklyFoll(users,weekly.getId());                // 自动添加跟进人
            }catch (Exception e){
                log.error("周报添加跟进人异常,异常信息1:"+e);
            }
@@ -285,10 +330,13 @@
        for (User user:userList){
            try{
                // 自动添加跟进人
                WeeklyFoll weeklyFoll = new WeeklyFoll();
                weeklyFoll.setUserId(user.getId());
                weeklyFoll.setWeeklyId(weeklyId);
                weeklyFollService.insert(weeklyFoll);
                List<WeeklyFoll> weeklyFolls = weeklyFollService.selectList(new EntityWrapper<WeeklyFoll>().eq("weekly_id", weeklyId).eq("user_id", user.getId()));
                if (weeklyFolls.size()==0){
                    WeeklyFoll weeklyFoll = new WeeklyFoll();
                    weeklyFoll.setUserId(user.getId());
                    weeklyFoll.setWeeklyId(weeklyId);
                    weeklyFollService.insert(weeklyFoll);
                }
            }catch (Exception e){
                log.error("周报添加跟进人异常,异常信息2:"+e);
                continue;
@@ -323,23 +371,21 @@
            weekly.setUpdateBy(getUserId());
            weekly.setUpdateTime(now);
            List<User> userList = new ArrayList<>();
            userList.add(getUser());
            User manager = new User();
            try {
                manager = userService.getDeptManager(getHostId(), getUser().getDeptId());        // 获取部门领导
            } catch (Exception e) {
                manager = getUser();
            }
            userList.add(manager);
            weekly.setDirector(manager.getId());
            // 获取业务员
            List<String> initNames = new ArrayList<>();
            initNames.add("创建了审批");
            initNames.add("业务员提交");
            initNames.add("部门领导审核");
//            initNames.add("业务员确认");
            List<User> users = new ArrayList<>();
            users.add(getUser());
            users.add(getUser());
            users.add(manager);
//            users.add(getUser());
@@ -426,7 +472,7 @@
            }
            try{
                insertWeeklyFoll(userList,weekly.getId());                // 自动添加跟进人
                insertWeeklyFoll(users,weekly.getId());                // 自动添加跟进人
            }catch (Exception e){
                log.error("周报添加跟进人异常,异常信息1:"+e);
            }
src/main/java/com/zy/crm/manager/entity/Weekly.java
@@ -204,6 +204,12 @@
    @TableField("weekly_day_month")
    private String weeklyDayMonth;
    /**
     * 表单内容
     */
    @ApiModelProperty(value= "表单内容")
    private String form;
    public Weekly() {}
    public Weekly(Date startTime,Date endTime,Long userId,Long hostId,Long deptId,String cstmrIdsReality,Integer status,Integer settle,String settleMsg,String comment,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo,Long director,Integer settleSize,Integer settleCurrent,String cstmrIdsPlan,Integer weeklyAll,Integer weeklyNowMonth,Integer weeklyYear,Integer weeklyMonth,Integer weeklyDay,String weeklyDayMonth) {
@@ -325,19 +331,19 @@
            case 0:
                return "默认";
            case 1:
                return "开始";
                return "待提交";
            case 2:
                return "组长待审";
                return "待审核";
            case 3:
                return "组长审核";
            case 4:
                return "规划待审";
            case 5:
                return "规划审核";
            case 6:
                return "审批中";
            case 7:
                return "审批通过";
                return "通过";
//            case 4:
//                return "规划待审";
//            case 5:
//                return "规划审核";
//            case 6:
//                return "审批中";
//            case 7:
//                return "审批通过";
            default:
                return String.valueOf(this.settle);
        }
src/main/webapp/static/js/common.js
@@ -241,6 +241,7 @@
var planByMore;
var priQuoteByMore;
var reimburseOnlineByMore;
var weeklyByMore;
function getQueryVariable(variable)
{
src/main/webapp/static/js/weekly/weekly.js
@@ -5,6 +5,20 @@
var htmlCstmrData;
var indexS = "9999,8888";
var indexDelSign = 0;
let nowUserId2 = 0;
fWeekly();
function fWeekly() {
    layui.jquery.ajax({
        url: baseUrl + "/dashboard/user/id/popup/auth",
        data:{token : localStorage.getItem('token')},
        method: 'GET',
        success: function (res) {
            if (res.code === 200) {
                nowUserId2 = res.data;
            }
        }
    })
}
layui.config({
    base: baseUrl + "/static/layui/lay/modules/"
}).extend({
@@ -99,7 +113,6 @@
            ,{field: 'deptId$', align: 'center',title: '所属部门',hide : true}
            ,{field: 'cstmrIdsReality', align: 'center',title: '实际甲方单位ID集合',hide : true}
            ,{field: 'status$', align: 'center',title: '状态',hide : false}
            ,{field: 'settle$', align: 'center',title: '进度',hide : false}
            ,{field: 'settleMsg', align: 'center',title: '审核进度',hide : true}
            ,{field: 'weeklyDailyPlan', align: 'center',title: '日计划',hide : false, toolbar: '#tbLookPlan'}
            ,{field: 'weeklyDailyReality', align: 'center',title: '日行程',hide : false, toolbar: '#tbLookReality'}
@@ -109,12 +122,16 @@
            ,{field: 'updateBy$', align: 'center',title: '修改人员',hide : true}
            ,{field: 'updateTime$', align: 'center',title: 'update_time',hide : true}
            ,{field: 'memo', align: 'center',title: '备注(50字)',hide : false}
            ,{field: 'director$', align: 'center',title: '审批人',hide : true}
            ,{field: 'director$', align: 'center',title: '审核节点',hide : true}
            ,{field: 'director', align: 'center',title: '审核节点',hide : true}
            ,{field: 'settle', align: 'center',title: '进度',hide : true}
            ,{field: 'settleSize', align: 'center',title: '流程长度',hide : true}
            ,{field: 'settle$', align: 'center',title: '进度', style: 'color: #1890ff;cursor:pointer', event: 'more',hide: false}
            ,{field: 'settleCurrent', align: 'center',title: '当前进度',hide : true}
            ,{field: 'cstmrIdsPlan', align: 'center',title: '计划甲方单位ID集合',hide : true}
            ,{field: 'weeklyAll', align: 'center',title: '周数',hide : true}
            ,{field: 'weeklyNowMonth', align: 'center',title: '当月第几周',hide : true}
            ,{field: 'nowUserId', align: 'center', title: 'nowUserId', hide: true, templet:function(){ return nowUserId2 }}
            ,{field: 'weeklyYear', align: 'center',title: '年',hide : true}
            ,{field: 'weeklyMonth', align: 'center',title: '月',hide : true}
            ,{field: 'weeklyDay', align: 'center',title: '日',hide : true}
@@ -290,7 +307,6 @@
                        url: baseUrl+"/weekly/delete/auth",
                        headers: {'token': localStorage.getItem('token')},
                        data: {ids: data.id},
                        method: 'POST',
                        traditional:true,
                        success: function (res) {
                            if (res.code === 200){
src/main/webapp/views/weekly/weekly.html
@@ -92,7 +92,7 @@
<script type="text/html" id="toolbar">
    <div class="layui-btn-container">
        <button class="layui-btn layui-btn-sm" lay-event="addBlank">创建周计划</button>
        <!--    <button class="layui-btn layui-btn-sm layui-btn-danger" lay-event="deleteData">删除</button>-->
<!--        <button class="layui-btn layui-btn-sm layui-btn-danger" lay-event="deleteData">删除</button>-->
    </div>
</script>
@@ -101,19 +101,16 @@
    <input type="button" onclick="upload()" value="上传"/>
</form>
<!--    {{# if (d.settle == 1 || d.settle == 2 || d.settle == 3 || d.settle == 4 || d.settle == 5) { }}-->
<!--    <a class="layui-btn layui-btn-xs btn-edit" lay-event="approval2">审批</a>-->
<!--    {{# } }}-->
<!--    {{# if ((((d.settle == 2 || d.settle == 3) && d.settleSize==4) || d.settle == 1) && d.nowUserId==d.director) { }}-->
<!--    {{# } }}-->
<!--    {{# if (((d.settle == 2 || d.settle == 3)&& d.settleSize==4) && d.nowUserId==d.director) { }}-->
<!--    {{# } }}-->
<!--  <a class="layui-btn layui-btn-xs btn-edit" lay-event="approval">提交</a>-->
<script type="text/html" id="operate">
    <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>
    {{# if (d.settle == 1 && d.nowUserId == d.director) { }}
        <a class="layui-btn layui-btn-xs btn-edit" lay-event="approval">提交</a>
    {{# } }}
    {{# if (d.settle == 2 && d.nowUserId == d.director) { }}
        <a class="layui-btn layui-btn-xs btn-edit" lay-event="approval">审批</a>
    {{# } }}
    {{# if (d.settle == 3 && d.nowUserId == d.director) { }}
        <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="edit">计划</a>
    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="editReality">行程</a>
src/main/webapp/views/weekly/weekly_more.html
New file
@@ -0,0 +1,219 @@
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<style>
    #formAdvForm {
        background-color: #f3f3f3;
    }
    #formAdvForm .layui-form-item {
        margin-top: 20px;
        margin-bottom: 0;
    }
    #formAdvForm .layui-form-item .layui-inline {
        margin-bottom: 25px;
        margin-right: 0;
    }
    .form-group-bottom {
        position: fixed;
        left: 0;
        right: 0;
        bottom: 0;
        padding: 10px 20px;
        background-color: #fff;
        box-shadow: 0 -1px 2px 0 rgba(0, 0, 0, .05);
    }
    .card-body-item {
        display: inline-block;
        border-right: 1px solid #e0e0e0;
        width: 250px;
        padding: 0 30px 0 10px;
    }
    .header-desc {
        overflow:hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
        -o-text-overflow:ellipsis;
    }
</style>
<!-- 正文开始 -->
<form class="layui-form" id="formAdvForm" lay-filter="formAdvForm" style="height: 100%">
    <div class="layui-fluid" style="padding-bottom: 75px;height: 100%; overflow: scroll;box-sizing: border-box">
        <!-- 标题 -->
        <div class="layui-card">
            <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 style="opacity: .5;font-size: small;margin-left: 5px">周计划审批</span>
                </div>
            </div>
            <div class="layui-card-body" style="padding: 30px 20px">
                <div class="layui-tab layui-steps">
                    <ul class="layui-tab-title" id="stepBox">
                    </ul>
                </div>
            </div>
        </div>
        <div class="layui-row">
            <!-- 数据 -->
<!--            <div class="layui-col-md9">-->
<!--                <div class="layui-card">-->
<!--                    <div class="layui-card-header">-->
<!--                        基本信息-->
<!--                    </div>-->
<!--                    <div class="layui-card-body">-->
<!--                    </div>-->
<!--                </div>-->
<!--            </div>-->
            <!-- 动态 -->
<!--            <div class="layui-col-md3" style="width: 24%;margin-left: 1%">-->
            <div class="layui-col-md3" style="width: 100%;">
                <!-- 时间线 -->
                <div class="layui-card">
                    <div class="layui-card-header">
                        <span>流程动态</span>
                    </div>
                    <div class="layui-card-body">
                        <ul class="layui-timeline" id="timelineBox">
                        </ul>
                    </div>
                </div>
            </div>
        </div>
    </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>
    </div>
</form>
<script type="text/html" id="followerTabOperate">
    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="del">删除</a>
</script>
<!--&lt;!&ndash; 跟进人 &ndash;&gt;-->
<!--<script type="text/html" id="followerEditDialog">-->
<!--    <form id="followerEditForm" lay-filter="followerEditForm" class="layui-form model-form">-->
<!--        <input name="experimentId" type="hidden"/>-->
<!--        <div class="layui-form-item" style="float: left;clear: none;margin-right: 20px">-->
<!--            <label class="layui-form-label">选择成员</label>-->
<!--            <div class="layui-input-block">-->
<!--                <div id="followersBox" name="followersBox">-->
<!--                </div>-->
<!--            </div>-->
<!--        </div>-->
<!--        <div class="layui-form-item text-right" style="float: left;clear: none">-->
<!--            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>-->
<!--            <button class="layui-btn" lay-filter="followerSubmit" lay-submit>保存</button>-->
<!--        </div>-->
<!--    </form>-->
<!--</script>-->
<script type="text/template" id="stepTpl">
    {{#each list}}
    <li id="step-{{step}}" style="pointer-events: none">
        <i class="layui-icon layui-icon-ok">{{step}}</i>
        <span class="layui-steps-title">{{title}}</span>
        {{# if username}}
        <span class="layui-steps-content">{{username}}</span>
        {{ else }}
        <span class="layui-steps-content">&nbsp;</span>
        {{/if}}
    </li>
    {{/each}}
</script>
<script type="text/template" id="timelineTpl">
    {{#each list}}
    <li class="layui-timeline-item">
        <i class="layui-icon layui-timeline-axis">&#xe63f;</i>
        <div class="layui-timeline-content layui-text">
            <h4 class="layui-timeline-title" style="display: inline;margin-right: 10px;">{{title}}</h4>
            <span>{{time}}</span>
            <p>
                {{msg}}
            </p>
        </div>
    </li>
    {{/each}}
</script>
<script>
    var weeklyId = top.weeklyByMore;
    $('.layui-layer-close').hide();
    layui.config({
        base: baseUrl + "/static/layui/lay/modules/"
    }).extend({
        notice: 'notice/notice',
        steps: 'steps/steps',
    }).use(['form', 'table', 'laydate', 'notice', 'xmSelect', 'steps'], function () {
        var $ = layui.jquery;
        var form = layui.form;
        var table = layui.table;
        var laydate = layui.laydate;
        var notice = layui.notice;
        var xmSelect = layui.xmSelect;
        var steps = layui.steps;
        form.render('select');
        init();
        function init(){
            notice.msg('正在载入数据......', {icon: 4, position: "topRight"});
            $.ajax({
                url: baseUrl + "/weekly/" + weeklyId + "/auth",
                headers: {'token': localStorage.getItem('token')},
                method: 'GET',
                success: function (res) {
                    notice.destroy();
                    if (res.code === 200) {
                        let weeklyId = res.data;
                        top.weeklyByMore = null;
                        $("#form-name").html(weeklyId.name);
                        // 进度步骤图
                        let template0 = Handlebars.compile($('#stepTpl').html());
                        $('#stepBox').html(template0({list: JSON.parse(weeklyId.settleMsg)}));
                        $('#step-' + Number(weeklyId.step)).addClass("layui-this");
                        let template1 = Handlebars.compile($('#timelineTpl').html());
                        $('#timelineBox').html(template1({list: JSON.parse(weeklyId.settleMsg)}));
                        // 补充html
                        $('#customizeBox').html(weeklyId.formHtml);
                        // 设备明细
                        form.val('formAdvForm', weeklyId);
                        top.convertDisabled($('#formAdvForm :input'), true);
                        // 跟进人
                        // initFollowers(weeklyId.id);
                        layDateRender();
                    } else if (res.code === 403) {
                        top.location.href = baseUrl + "/";
                    } else {
                        layer.msg(res.msg, {icon: 2})
                    }
                }
            })
        }
        /* 渲染laydate */
        function layDateRender() {
            laydate.render({
                elem: '#endTime',
                type: 'datetime'
            });
        }
        layDateRender();
        /* 监听表单提交 */
        form.on('submit(refresh)', function (data) {
            init();
            return false;
        });
    })
</script>