소스 검색

实习生离职交接

jzh 1 년 전
부모
커밋
486e510c5c

+ 1 - 1
zjugis-business/src/main/java/com/zjugis/business/flow/resign/controller/ResignController.java

@@ -57,7 +57,7 @@ public class ResignController extends BaseController {
     @GetMapping("/indexIntern")
     @Operation(summary = "离职办理表单生成")
     public String indexIntern(String activityTemplateId, String flowInstanceId, String userId) throws Exception {
-        Map<String, Object> map = resignService.getFormParams(flowInstanceId,userId);
+        Map<String, Object> map = resignService.getInternFormParams(flowInstanceId,userId);
         return resultPage(map);
     }
 

+ 2 - 0
zjugis-business/src/main/java/com/zjugis/business/flow/resign/service/ResignService.java

@@ -26,4 +26,6 @@ public interface ResignService {
     ResignDO findByInstanceId(String flowInstanceId);
 
     ResignPageReqVO flowAdd(String flowInstanceId, String userId);
+
+    Map<String, Object> getInternFormParams(String flowInstanceId, String userId);
 }

+ 67 - 0
zjugis-business/src/main/java/com/zjugis/business/flow/resign/service/impl/ResignServiceImpl.java

@@ -201,6 +201,73 @@ public class ResignServiceImpl implements ResignService {
         return ResignConvert.INSTANCE.convert(entity);
     }
 
+    @Override
+    public Map<String, Object> getInternFormParams(String flowInstanceId, String userId) {
+        if (StrUtil.isEmpty(userId)) {
+            userId = SecurityFrameworkUtils.getLoginUserId();
+        }
+        CommonResult<IFlowInstance> flowResult = workflowClient.flowInstance(flowInstanceId);
+        if (flowResult.isSuccess()) {
+            ResignDO entity = resignDAO.findByInstanceId(flowInstanceId);
+            if (Objects.isNull(entity)) {
+                entity = new ResignDO();
+                entity.setInstanceId(flowInstanceId);
+                entity.setUserId(userId);
+                entity.setCreateTime(LocalDateTime.now());
+                entity.setFlowStatus(FlowStatusConstants.FLOW_NOT_START);
+                CommonResult<StaffDeptPostDTO> result = staffApi.getUser(userId);
+                StaffDeptPostDTO dto = result.getCheckedData();
+                entity.setDeptId(dto.getDeptId());
+                entity.setDeptName(dto.getDeptName());
+                entity.setUserId(dto.getUserId());
+                entity.setNickname(dto.getNickname());
+                entity.setRgssj(dto.getRgssj());
+                entity.setHtdqs(dto.getHtdqs());
+                entity.setDrzw(dto.getPostName());
+
+                ResignApplyDO resignApplyDO = resignApplyService.findByUserId(userId);
+                if (resignApplyDO != null) {
+                    entity.setLzygszd(resignApplyDO.getLzygszd());
+                }
+
+                resignDAO.insert(entity);
+            }
+            return createInternMap(flowInstanceId, entity, userId);
+        }
+        return createModelMap();
+    }
+
+    private Map<String, Object> createInternMap(String flowInstanceId, ResignDO entity, String userId) {
+        Map<String, Object> map = new HashMap<>();
+        map.put("formEntity", entity);
+        //查字典
+        List<DictDataRespDTO> resData = dictDataApi.getDictDataListByTypes(getTypeList()).getCheckedData();
+        Map<String, List<DictDataRespDTO>> map1 = new HashMap<>();
+        resData.forEach(v -> {
+            if (map1.get(v.getDictType()) != null) {
+                List<DictDataRespDTO> dtos = map1.get(v.getDictType());
+                dtos.add(v);
+                map1.put(v.getDictType(), dtos);
+            } else {
+                List<DictDataRespDTO> dtos = new ArrayList<>();
+                dtos.add(v);
+                map1.put(v.getDictType(), dtos);
+            }
+        });
+        map1.forEach((k, v) -> map.put(k, JSON.toJSONString(SelectConvert.INSTANCE.convertList(v))));
+
+        ResignApplyDO resignApplyDO = resignApplyService.findByUserId(entity.getUserId());
+        //离职申请
+        map.put("sxlzsq", JSON.toJSONString(resignApplyDO));
+        map.put("z_work_flow", workflowUrl);
+
+        //列表
+        List<ResignDetailDO> detailDOS = resignDetailDAO.selectList(new LambdaQueryWrapperX<ResignDetailDO>().eq(ResignDetailDO::getResignId, entity.getId()));
+        map.put("unfinishedList", JSON.toJSONString(detailDOS.stream().filter(v -> v.getState().equals("1")).collect(Collectors.toList())));
+        map.put("finishedList", JSON.toJSONString(detailDOS.stream().filter(v -> v.getState().equals("2")).collect(Collectors.toList())));
+        return map;
+    }
+
 
     private Map<String, Object> createMap(String flowInstanceId, ResignDO entity, String userId) {
         Map<String, Object> map = new HashMap<>();

+ 2 - 2
zjugis-business/src/main/resources/templates/Resign/indexIntern.ftl

@@ -1,4 +1,4 @@
-<@w.workFlow javascripts=['/Resign/js/index.js','/flow/js/formCommon.js', '/OwCommon/OwCommon.js','/timeSelector/TimeSelector.js']
+<@w.workFlow javascripts=['/Resign/js/indexIntern.js','/flow/js/formCommon.js', '/OwCommon/OwCommon.js','/timeSelector/TimeSelector.js']
 styles=[ '/flow/css/formCommon.css', '/OwCommon/OwCommon.css','/timeSelector/TimeSelector.css' ]>
     <div class="z-position form-boss ow-tabs" name="createReqVO">
         <ul class="ow-tab-nav oa_tabBox">
@@ -492,6 +492,6 @@ styles=[ '/flow/css/formCommon.css', '/OwCommon/OwCommon.css','/timeSelector/Tim
         ;
         (function() {})();
         window.url = '${z_work_flow}'
-        window.lzsq = '${lzsq!}'
+        window.sxlzsq = '${sxlzsq!}'
     </script>
 </@w.workFlow>

+ 452 - 0
zjugis-business/src/main/resources/templates/Resign/js/indexIntern.js

@@ -0,0 +1,452 @@
+(function () {
+    let unfinishedArray = [];
+    let finishedArray = [];
+    let read = z.ui.comm.getUrlParam("read");
+    var addDataUnFinished = null;
+    var addDataFinished = null;
+
+    window.onload = function (ex) {
+        addDataUnFinished = $("#addDataUnfinished")
+        addDataFinished = $("#addDataFinished")
+        unfinishedWork();//未完成工作移交
+        finishedWork();//已完成工作成果
+        bindEvents();
+    }
+
+
+
+
+    function finishedWork() {
+        //未完成工作按钮
+        let un = document.querySelector('#finished')
+        let finished = JSON.parse(un.value)//存在的列表详情
+        $("#addDataFinished").click(function () {
+            addDataFinished.attr('disabled', "true");
+            let obj = {
+                content: "",
+                receiver: "",
+                reviewer: "",
+            }
+
+            finishedArray.push(obj)
+            generateTableTrHtmlFinished(finishedArray.length - 1)
+            buildQjsjSeq();
+        })
+
+
+        if (finished.length > 0) {
+            for (let i = 0; i < finished.length; i++) {
+                let obj = {
+                    content: finished[i].content ? finished[i].content : '',
+                    receiver: finished[i].receiver ? finished[i].receiver : '',
+                    reviewer: finished[i].reviewer ? finished[i].reviewer : '',
+                }
+                finishedArray.push(obj)
+            }
+            for (let i = 0; i < finished.length; i++) {
+                generateTableTrHtmlFinished(i);
+            }
+        }
+    }
+
+    function unfinishedWork() {
+        //未完成工作按钮
+        let un = document.querySelector('#unfinished')
+        let unfinished = JSON.parse(un.value)//存在的列表详情
+        $("#addDataUnfinished").click(function () {
+            addDataUnFinished.attr('disabled', "true");
+            let obj = {
+                content: "",
+                receiver: "",
+                confirmor: "",
+            }
+
+            unfinishedArray.push(obj)
+            generateTableTrHtmlUnfinished(unfinishedArray.length - 1)
+            buildQjsjSeq();
+        })
+
+
+        if (unfinished.length > 0) {
+            for (let i = 0; i < unfinished.length; i++) {
+                let obj = {
+                    content: unfinished[i].content ? unfinished[i].content : '',
+                    receiver: unfinished[i].receiver ? unfinished[i].receiver : '',
+                    confirmor: unfinished[i].confirmor ? unfinished[i].confirmor : '',
+                }
+                unfinishedArray.push(obj)
+            }
+            for (let i = 0; i < unfinished.length; i++) {
+                generateTableTrHtmlUnfinished(i);
+            }
+        }
+    }
+
+
+    //注册业务保存事件
+    function bindEvents() {
+        z.workflow.saveBtn.addListener("onSaveClick", saveForm);
+        var lzsq = JSON.parse(window.sxlzsq.replace(/[\r|\n|\t]/g, ""));
+        var html = "";
+        if (lzsq && lzsq.instanceId) {
+            html = "<a onclick=goAsset1('" + lzsq.instanceId + "')>" + lzsq.nickname + "(" + lzsq.createTime.substring(0, 10) + ")</a>";
+        }else {
+            z.ui.alertWarning("请先办理离职申请");
+        }
+
+        $("#lzsqhtml").html(html);
+    }
+
+
+    /*
+  * all 工作流js传递到业务的参数 success执行的方法
+  * istransfer 工作流js传递到业务的参数 是否转件
+  * */
+    function saveForm(all, istransfer) {
+        var postData = z.ui.form.getFormFields($("[name=createReqVO]"));
+        if (postData === false) {
+            all({success: false});
+            return;
+        }
+        //将string类型的时间转换成时间戳
+        var unfinished = []
+        var finished = []
+        for (let key of Object.keys(postData)) {
+            let mealName = postData[key];
+
+            if (key.startsWith("createReqVO")) {
+                postData.createReqVO = mealName;
+            }
+
+            if (key.startsWith("ResignDetailDO")) {
+                unfinished.push(z.ui.form.childStringify(mealName));
+            }
+
+            if (key.startsWith("ResignFinishedDetailDO")) {
+                finished.push(z.ui.form.childStringify(mealName));
+            }
+        }
+
+
+        postData.createReqVO.unfinishedList = unfinished;
+        postData.createReqVO.finishedList = finished;
+
+
+
+        z.ui.ajax({
+            type: "post",
+            url: "/resign/update",
+            data: JSON.stringify(postData.createReqVO),
+            contentType: "application/json",
+            success: function (res) {
+                if (res && res.code === 200) {
+                    all({success: true});
+                } else {
+                    all({success: false});
+                    z.ui.alertWarning(res.msg);
+                }
+            },
+
+            error: function () {
+                all({success: false});
+            }
+        })
+    }
+
+
+    /**
+     * 页面生成并获取map中的数据
+     * @param i
+     * @returns {HTMLTableRowElement}
+     */
+    function generateTableTrHtmlFinished(i) {
+        var trDom = document.createElement("tr");
+        trDom.style.backgroundColor = "#fff";
+        trDom.id = "qjsjF_" + i;
+        trDom.className = 'qjsjClass'
+        trDom.innerHTML = '<td name="qjsj_seq">' + (i + 1) + '</td>'
+            + '<td>'/*内容*/
+            + '<div class="form-item" >'
+            + '<div class="z-comp-input" name="ResignFinishedDetailDO[' + i + ']$content">'
+            + '<input type="text" value="">'
+            + '</div>'
+            + '</div>'
+            + '</td>'
+            + '<input type="hidden" name="ResignFinishedDetailDO[' + i + ']$state" value="2">'
+            + '<td>'
+            + '<div class="form-flex">'
+            + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
+            + '<div class="z-comp-selecttree" name="receive1[' + i + ']">'
+            + '<input type="hidden" name="ResignFinishedDetailDO[' + i + ']$receiver" value="' + finishedArray[i].receiver + '">'
+            + '<div class="z-inputselect-bar">'
+            + '<span></span><i></i>'
+            + '</div>'
+            + '</div>'
+            + '</div>'
+            + '</div>'
+            + '</td>'
+            + '<td style="align-items: center">'
+            + '<div style="display: flex;white-space: nowrap">'
+            + '<div id="editBtnF_' + (i) + '" class="table-btn editBtnF_' + (i) + '" data-index="' + (i) + '">'
+            + '<span>保存</span>'
+            + '</div>'
+            + '<div id="delBtnF_' + (i) + '" class="table-btn delBtnF_' + (i) + '" data-index="' + (i) + '">'
+            + '<span>删除</span>'
+            + '</div>'
+            + '</div>'
+            + '</td>';
+        let trFragment = document.createDocumentFragment();
+        trFragment.appendChild(trDom);
+        $("[name='finishedBody']").append(trFragment)
+
+
+        z.ui.ajax({
+            type: "get",
+            url: "/common/user-tree",
+            data: {},
+            success: function (res) {
+
+                //初始化
+                res.forEach(obj => {
+                    obj.treeName = 'ResignFinishedDetailDO[' + i + ']$receiver';
+                })
+                selecttree("[name='receive1[" + i + "]']", res, clickReceive)
+
+
+                //赋值
+                if (!(!finishedArray[i].content || finishedArray[i].content.trim() === '')) {
+                    z.ui.input("[name='ResignFinishedDetailDO[" + i + "]$content']").setValue(finishedArray[i].content);
+                }
+                if (!(!finishedArray[i].receiver || finishedArray[i].receiver.trim() === '')) {
+                    z.ui.selecttree("[name='receive1[" + i + "]']").setValue(finishedArray[i].receiver)
+                }
+
+
+                if (read !== '1') {
+                    $("#editBtnF_" + i).click(function () {
+                        const span = $(this).find("span");
+                        const html = span.html();
+                        if (html === '编辑') {
+                            span.html('保存')
+                            detailWrite(i);
+                            addDataFinished.attr('disabled', "true");
+                            $("#qjsjF_" + i).removeClass("form-table-disable")
+                            return;
+                        }
+                        if (html === '保存') {
+                            span.html('编辑')
+                            detailReadonly(i);
+                            addDataFinished.removeAttr('disabled')
+                            $("#qjsjF_" + i).addClass("form-table-disable")
+                            return;
+                        }
+                    })
+
+
+                    $("#delBtnF_" + i).click(function () {
+                        z.ui.confirm("compid").init({
+                            content: "确定删除吗?",
+                            onConfirm: function () {
+                                var element = document.getElementById("qjsjF_" + i);
+                                element.remove();
+                                buildQjsjSeq();
+                                //finishedArray.splice(i, 1)
+                            },
+                            onCancel: function () {
+
+                            }
+                        })
+
+                    })
+
+                } else {
+                    detailReadonly(i)
+                    $("#addDataUnfinished").css("display", "none");
+                    $("#addDataFinished").css("display", "none");
+                }
+
+
+            },
+            error: function () {
+            }
+        })
+
+    }
+
+
+    /**
+     * 页面生成并获取map中的数据
+     * @param i
+     * @returns {HTMLTableRowElement}
+     */
+    function generateTableTrHtmlUnfinished(i) {
+        var trDom = document.createElement("tr");
+        trDom.style.backgroundColor = "#fff";
+        trDom.id = "qjsj_" + i;
+        trDom.className = 'qjsjClass'
+        trDom.innerHTML = '<td name="qjsj_seq">' + (i + 1) + '</td>'
+            + '<td>'/*内容*/
+            + '<div class="form-item" >'
+            + '<div class="z-comp-input" name="ResignDetailDO[' + i + ']$content">'
+            + '<input type="text" value="">'
+            + '</div>'
+            + '</div>'
+            + '</td>'
+            + '<input type="hidden" name="ResignDetailDO[' + i + ']$state" value="1">'
+            + '<td>'
+            + '<div class="form-flex">'
+            + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
+            + '<div class="z-comp-selecttree" name="receive[' + i + ']">'
+            + '<input type="hidden" name="ResignDetailDO[' + i + ']$receiver" value="' + unfinishedArray[i].receiver + '">'
+            + '<div class="z-inputselect-bar">'
+            + '<span></span><i></i>'
+            + '</div>'
+            + '</div>'
+            + '</div>'
+            + '</div>'
+            + '</td>'
+            + '<td style="align-items: center">'
+            + '<div style="display: flex;white-space: nowrap">'
+            + '<div id="editBtnU_' + (i) + '" class="table-btn editBtnU_' + (i) + '" data-index="' + (i) + '">'
+            + '<span>保存</span>'
+            + '</div>'
+            + '<div id="delBtnU_' + (i) + '" class="table-btn delBtnU_' + (i) + '" data-index="' + (i) + '">'
+            + '<span>删除</span>'
+            + '</div>'
+            + '</div>'
+            + '</td>';
+        let trFragment = document.createDocumentFragment();
+        trFragment.appendChild(trDom);
+        $("[name='unfinishedBody']").append(trFragment)
+
+
+        z.ui.ajax({
+            type: "get",
+            url: "/common/user-tree",
+            data: {},
+            success: function (res) {
+
+                //字典初始化
+                res.forEach(obj => {
+                    obj.treeName = 'ResignDetailDO[' + i + ']$receiver';
+                })
+                selecttree("[name='receive[" + i + "]']", res, clickReceive)
+
+
+                //赋值
+                if (!(!unfinishedArray[i].content || unfinishedArray[i].content.trim() === '')) {
+                    z.ui.input("[name='ResignDetailDO[" + i + "]$content']").setValue(unfinishedArray[i].content);
+                }
+                if (!(!unfinishedArray[i].receiver || unfinishedArray[i].receiver.trim() === '')) {
+                    z.ui.selecttree("[name='receive[" + i + "]']").setValue(unfinishedArray[i].receiver)
+                }
+
+
+                if (read !== '1') {
+                    $("#editBtnU_" + i).click(function () {
+                        const span = $(this).find("span");
+                        const html = span.html();
+                        if (html === '编辑') {
+                            span.html('保存')
+                            detailWriteU(i);
+                            addDataUnFinished.attr('disabled', "true");
+                            $("#qjsj_" + i).removeClass("form-table-disable")
+                            return;
+                        }
+                        if (html === '保存') {
+                            span.html('编辑')
+                            detailReadonlyU(i);
+                            addDataUnFinished.removeAttr('disabled')
+                            $("#qjsj_" + i).addClass("form-table-disable")
+                            return;
+                        }
+                    })
+
+
+                    $("#delBtnU_" + i).click(function () {
+                        z.ui.confirm("compid").init({
+                            content: "确定删除吗?",
+                            onConfirm: function () {
+                                var element = document.getElementById("qjsj_" + i);
+                                element.remove();
+                                buildQjsjSeq();
+                                //unfinishedArray.splice(i, 1)
+                            },
+                            onCancel: function () {
+
+                            }
+                        })
+
+                    })
+                } else {
+                    detailReadonlyU(i)
+                }
+
+
+            },
+            error: function () {
+            }
+        })
+    }
+
+
+    function clickReview(even, treeId, treeNode) {
+        $("[name='" + treeNode.treeName + "']").val(treeNode.id);
+    }
+
+    function clickConfirm(even, treeId, treeNode) {
+        $("[name='" + treeNode.treeName + "']").val(treeNode.id);
+    }
+
+    function clickReceive(even, treeId, treeNode) {
+        $("[name='" + treeNode.treeName + "']").val(treeNode.id);
+    }
+
+
+    function detailWrite(i) {
+        $("#delBtn_" + i).css("display", "block");
+        $("[name='receive1[" + i + "]']").removeClass("z-readonly").css("pointer-events", "auto");
+        $("[name='ResignFinishedDetailDO[" + i + "]$content']").removeClass("z-readonly").css("pointer-events", "auto");
+    }
+
+    function detailReadonly(i) {
+        //设置只读属性
+        $("#delBtn_" + i).css("display", "none");
+        $("[name='receive1[" + i + "]']").addClass("z-readonly").css("pointer-events", "none");
+        $("[name='ResignFinishedDetailDO[" + i + "]$content']").addClass("z-readonly").css("pointer-events", "none");
+    }
+
+
+    function detailWriteU(i) {
+        $("#delBtn_" + i).css("display", "block");
+        $("[name='receive[" + i + "]']").removeClass("z-readonly").css("pointer-events", "auto");
+        $("[name='ResignDetailDO[" + i + "]$content']").removeClass("z-readonly").css("pointer-events", "auto");
+    }
+
+    //手动列表添加只读效果
+    function detailReadonlyU(i) {
+        $("#delBtn_" + i).css("display", "none");
+        $("[name='receive[" + i + "]']").addClass("z-readonly").css("pointer-events", "none");
+        $("[name='ResignDetailDO[" + i + "]$content']").addClass("z-readonly").css("pointer-events", "none");
+    }
+
+    function buildQjsjSeq() {
+        let elementsByName = document.getElementsByName("qjsj_seq");
+        for (let i = 0; i < elementsByName.length; i++) {
+            const seqElement = elementsByName[i];
+            seqElement.innerHTML = i + 1;
+        }
+    }
+
+
+}());
+
+function goAsset1(id) {
+    z.webcontainer.openTab({
+        id: 'workflow_hangup_' + id,
+        title: "流程查看",
+        url: window.url + "/IFlowInstance/redirectFlowPage?flowInstanceId=" + id,
+        iconclass: 'fa fa-file'
+    });
+}
+