Forráskód Böngészése

报销默认生成一条,如果类型为差旅费,则可以添加后续,类型限制选择差旅费

huangguoce 2 hete
szülő
commit
f305c6320e

+ 47 - 0
src/main/java/com/jeeplus/modules/workreimbursement/service/WorkReimbursementTypeService.java

@@ -96,6 +96,32 @@ public class WorkReimbursementTypeService extends TreeService<WorkReimbursementT
         }
     }
 
+    public static List<WorkReimbursementTypeInfo> filterWithParents(List<WorkReimbursementTypeInfo> sourcelist, String targetId) {
+        List<WorkReimbursementTypeInfo> result = new ArrayList<>();
+        Map<String, WorkReimbursementTypeInfo> map = new HashMap<>();
+
+        // 先建立一个 id -> 对象 的映射,方便快速查找
+        for (WorkReimbursementTypeInfo item : sourcelist) {
+            map.put(item.getId(), item);
+        }
+
+        // 从目标节点开始往上找父级
+        WorkReimbursementTypeInfo current = map.get(targetId);
+        while (current != null) {
+            result.add(current);
+            // 找父节点
+            if (current.getParent() != null && StringUtils.isNotBlank(current.getParent().getId())) {
+                current = map.get(current.getParent().getId());
+            } else {
+                break;
+            }
+        }
+
+        // 父级是从下往上加的,如果你想按层级从上往下排,可以反转
+        Collections.reverse(result);
+        return result;
+    }
+
     private List<WorkReimbursementTypeInfo> fingIds(Set<String> parentIdSet, String companyId) {
         return dao.fingIds(parentIdSet,companyId);
     }
@@ -167,6 +193,27 @@ public class WorkReimbursementTypeService extends TreeService<WorkReimbursementT
         return listReturn;
     }
 
+    /**
+     * 查询第一级数据信息
+     * @param workReimbursementTypeInfo
+     * @return
+     */
+    public List<WorkReimbursementTypeInfo> findTreeListByClCz(WorkReimbursementTypeInfo workReimbursementTypeInfo) {
+        List<WorkReimbursementTypeInfo> workReviewStandards = new ArrayList<>();
+        List<WorkReimbursementTypeInfo> listReturn = Lists.newArrayList();
+        Office company = UserUtils.getSelectCompany();
+        workReimbursementTypeInfo.setCompanyId(company.getId());
+        List<WorkReimbursementTypeInfo> listAll = super.findList(workReimbursementTypeInfo);
+        if (listAll!=null && listAll.size()!=0){
+            workReviewStandards.addAll(listAll);
+        }
+        workReviewStandards = filterWithParents(workReviewStandards, "cc41a325c1854b2bb533018b08bbed28");
+        sortList(listReturn,workReviewStandards,"0",true);
+
+        this.queryProofread(listReturn);
+        return listReturn;
+    }
+
     public void queryProofread(List<WorkReimbursementTypeInfo> listReturn){
         List<WorkReimbursementTypeInfo> standards = dao.getByDetail();
         if(standards==null||listReturn==null){

+ 32 - 0
src/main/java/com/jeeplus/modules/workreimbursement/web/WorkReimbursementTypeController.java

@@ -186,6 +186,38 @@ public class WorkReimbursementTypeController extends BaseController {
         }
         return mapList;
     }
+
+    /**
+     * 针对报销类型做的 调整
+     *
+     * @param extId    排除的ID
+     * @return
+     */
+    @RequiresPermissions("user")
+    @ResponseBody
+    @RequestMapping(value = "treeDataByClCz")
+    public List<Map<String, Object>> treeDataByClCz(@RequestParam(required = false) String extId,@RequestParam(required = false) String selectName) {
+        List<Map<String, Object>> mapList = Lists.newArrayList();
+        WorkReimbursementTypeInfo workReimbursementTypeInfo =new WorkReimbursementTypeInfo();
+        if (null != selectName && "" != selectName){
+            workReimbursementTypeInfo.setStandardDetail(selectName);
+        }
+        List<WorkReimbursementTypeInfo> list = workReimbursementTypeService.findTreeListByClCz(workReimbursementTypeInfo);
+        for (int i = 0; i < list.size(); i++) {
+            WorkReimbursementTypeInfo e = list.get(i);
+            if ((StringUtils.isBlank(extId) || (extId != null && !extId.equals(e.getId()) && e.getParentIds().indexOf("," + extId + ",") == -1)) ) {
+                Map<String, Object> map = Maps.newHashMap();
+                map.put("id", e.getId());
+                map.put("pId", e.getParentId());
+                map.put("pIds", e.getParentIds());
+                map.put("name", e.getStandardDetail());
+                map.put("grade", e.getGrade());
+                mapList.add(map);
+            }
+        }
+        return mapList;
+    }
+
     @ResponseBody
     @RequestMapping(value = "projectCharge")
     public String projectCharge(String pids,Model model) {

+ 74 - 10
src/main/webapp/WEB-INF/tags/sys/treeselectAccessoryNoParent.tag

@@ -36,13 +36,17 @@
 		if ($("#${id}Button").hasClass("disabled")){
 			return true;
 		}
+		var myUrl = "${url}";
+		if ("${title}" == "报销类别" && '${id}' != 'workAccountList1_type'){
+			myUrl = "/reimbursementType/reimbursementType/treeDataByClCz"
+		}
 		// 正常打开
 		top.layer.open({
 		    type: 2,
 		    area: ['300px', '420px'],
 		    title:"选择${title}",
 		    ajaxData:{selectIds: $("#${id}Id").val()},
-		    content: "${ctx}/tag/treeselect?url="+encodeURIComponent("${url}")+"&module=${module}&checked=${checked}&extId=${extId}&isAll=${isAll}" ,
+		    content: "${ctx}/tag/treeselect?url="+encodeURIComponent(myUrl)+"&module=${module}&checked=${checked}&extId=${extId}&isAll=${isAll}" ,
 		    btn: ['确定', '关闭']
     	       ,yes: function(index, layero){ //或者使用btn1
 						var tree = layero.find("iframe")[0].contentWindow.tree;//h.find("iframe").contents();
@@ -52,7 +56,7 @@
 						}else{
 							nodes = tree.getSelectedNodes();
 						}
-						console.log(nodes)
+
 						for(var i=0; i<nodes.length; i++) {//<c:if test="${checked && notAllowSelectParent}">
 							if (nodes[i].isParent){
 								continue; // 如果为复选框选择,则过滤掉父节点
@@ -83,17 +87,77 @@
 							//<c:if test="${!checked}">
 							break; // 如果为非复选框选择,则返回第一个选择  </c:if>
 						}
-						$("#${id}Id").val(ids.join(",").replace(/u_/ig,""));
-						$("#${id}Name").val(names.join(","));
-						$("#${id}Name").focus();
-						setParentInfo($("#${id}Id").val());
-						var id="${id}";
-						setPids($("#${id}Pids").val(),id);
-						console.log(index)
+
 						top.layer.close(index);
+						if ("${title}" == "报销类别" && '${id}' == 'workAccountList1_type'){
+							if(names.join(",") != '业务操作奖' &&  names.join(",") != "业务差旅费"){
+								if($("#${id}Name").val() == '业务操作奖' || $("#${id}Name").val() == "业务差旅费"){
+									top.layer.open({
+										title: '提示',
+										content: '您即将修改报销类别为'+names.join(",")+'。若确定,您本次的报销将仅保留第一张报销单及其下上传的文件。是否调整?',
+										icon: 3,
+										btn: ['确定', '取消'],
+										yes: function(tempIndex, layero){
+											// 关闭弹窗
+											top.layer.close(tempIndex);
+											// 获取所有 td
+											var tds = $('#workAccountList .op-td');
+											for (var i = tds.length - 1; i > 0; i--) {  // 注意 i > 0,从倒数第二个开始
+												var td = tds.eq(i); // 当前 td
+												// 找到 td 内 class="op-btn-delete" 的元素
+												var deleteBtn = td.find('.op-btn-delete');
+												// 触发 onclick
+												deleteBtn.each(function() {
+													if (this.onclick) {
+														this.onclick(); // 调用 HTML 内联 onclick
+													} else {
+														$(this).trigger('click'); // 调用 jQuery click 事件
+													}
+												});
+											}
+											document.querySelector('.nav-btn-add').style.display = 'none';
+											$("#${id}Id").val(ids.join(",").replace(/u_/ig,""));
+											$("#${id}Name").val(names.join(","));
+											$("#${id}Name").focus();
+											setParentInfo($("#${id}Id").val());
+											var id="${id}";
+											setPids($("#${id}Pids").val(),id);
+										},
+										btn2: function(tempIndex, layero){
+											console.log("用户点击了取消");
+										},
+										cancel: function(tempIndex, layero){
+											console.log("用户关闭了弹窗");
+										}
+									});
+								}else{
+									$("#${id}Id").val(ids.join(",").replace(/u_/ig,""));
+									$("#${id}Name").val(names.join(","));
+									$("#${id}Name").focus();
+									setParentInfo($("#${id}Id").val());
+									var id="${id}";
+									setPids($("#${id}Pids").val(),id);
+								}
+							}else{
+								document.querySelector('.nav-btn-add').style.display = 'block';
+								$("#${id}Id").val(ids.join(",").replace(/u_/ig,""));
+								$("#${id}Name").val(names.join(","));
+								$("#${id}Name").focus();
+								setParentInfo($("#${id}Id").val());
+								var id="${id}";
+								setPids($("#${id}Pids").val(),id);
+							}
+						}else{
+							$("#${id}Id").val(ids.join(",").replace(/u_/ig,""));
+							$("#${id}Name").val(names.join(","));
+							$("#${id}Name").focus();
+							setParentInfo($("#${id}Id").val());
+							var id="${id}";
+							setPids($("#${id}Pids").val(),id);
+						}
 				    	       },
     	cancel: function(index){ //或者使用btn2
-    	           //按钮【按钮二】的回调
+
     	       }
 		});
 

+ 108 - 65
src/main/webapp/webpage/modules/workreimbursement/treeForm/new/workReimbursementNewFormAdd.jsp

@@ -1501,77 +1501,118 @@
 
 
         // 数电发票删除 - 隐藏行版本(保留DOM,只隐藏)
-        function delRowParentNew(obj, prefix){
-            var id = $(prefix+"_id");
+        function delRowParentNew(obj, prefix ,isBatch){
+            if(prefix == '#workAccountList1' && !isBatch){
+                top.layer.open({
+                    title: '提示',
+                    content: '是否确认删除第1张报销单?(所有报销单数据也将同步删除)',
+                    icon: 3,
+                    btn: ['确定', '取消'],
+                    yes: function(tempIndex, layero){
+                        // 关闭弹窗
+                        top.layer.close(tempIndex);
+                        // 获取所有 td
+                        var tds = $('#workAccountList .op-td');
+                        for (var i = tds.length - 1; i >= 0; i--) {  // 注意 i > 0,从倒数第二个开始
+                            var td = tds.eq(i); // 当前 td
+                            // 找到 td 内 class="op-btn-delete" 的元素
+                            var deleteBtn = td.find('.op-btn-delete');
+                            // 触发 onclick
+                            deleteBtn.each(function(eleIndex,ele) {
+                                if (i == 0){
+                                    delRowParentNew(ele,"#workAccountList1",true)
+                                }else{
+                                    if (this.onclick) {
+                                        this.onclick();
+                                    } else {
+                                        $(this).trigger('click');
+                                    }
+                                }
+                            });
+                        }
+                        document.querySelector('.nav-btn-add').style.display = 'none';
+                    },
+                    btn2: function(tempIndex, layero){
+                        console.log("用户点击了取消");
+                    },
+                    cancel: function(tempIndex, layero){
+                        console.log("用户关闭了弹窗");
+                    }
+                });
+            }else{
+                var id = $(prefix+"_id");
 
-            var workAccountmoney= $(prefix+"_money").val();
-            var money = $("#moneys").val();
-            if (isNumber(workAccountmoney)){
-                if(money==""){
-                    money = parseFloat(workAccountmoney).toFixed(2);
-                }else {
-                    money = (parseFloat(money) - parseFloat(workAccountmoney)).toFixed(2);
-                }
-            }
-            if(money>=0){
-                count++;
-                $("#moneys").val(money);
-                var delFlag = $(prefix+"_delFlag");
-                if (id.val() == ""){
-                    delFlag.val("1");
-                    $(obj).parent().parent().remove();
-                }else if(delFlag.val() == "0"){
-                    delFlag.val("1");
-                    $(obj).html("&divide;").attr("title", "撤回删除");
-                    $(obj).parent().parent().addClass("error");
-                    $(obj).parent().parent().addClass("hide");
-                }else if(delFlag.val() == "1"){
-                    delFlag.val("0");
-                    $(obj).html("&times;").attr("title", "删除");
-                    $(obj).parent().parent().removeClass("error");
+                var workAccountmoney= $(prefix+"_money").val();
+                var money = $("#moneys").val();
+                if (isNumber(workAccountmoney)){
+                    if(money==""){
+                        money = parseFloat(workAccountmoney).toFixed(2);
+                    }else {
+                        money = (parseFloat(money) - parseFloat(workAccountmoney)).toFixed(2);
+                    }
                 }
+                if(money>=0){
+                    count++;
+                    $("#moneys").val(money);
+                    var delFlag = $(prefix+"_delFlag");
+                    if (id.val() == ""){
+                        delFlag.val("1");
+                        $(obj).parent().parent().remove();
+                    }else if(delFlag.val() == "0"){
+                        delFlag.val("1");
+                        $(obj).html("&divide;").attr("title", "撤回删除");
+                        $(obj).parent().parent().addClass("error");
+                        $(obj).parent().parent().addClass("hide");
+                    }else if(delFlag.val() == "1"){
+                        delFlag.val("0");
+                        $(obj).html("&times;").attr("title", "删除");
+                        $(obj).parent().parent().removeClass("error");
+                    }
 
 
-                // 定位外层tr(class为c7f4ef4720924167b2520f620918e1eb)
-                var $outerTr = $("tr." + id.val());
+                    // 定位外层tr(class为c7f4ef4720924167b2520f620918e1eb)
+                    var $outerTr = $("tr." + id.val());
 
-                // 检查外层tr是否存在
-                if ($outerTr.length === 0) {
+                    // 检查外层tr是否存在
+                    if ($outerTr.length === 0) {
 
-                } else {
-                    // 查找外层tr下的所有子tr(包括嵌套在tbody中的)
-                    $outerTr.find("tr").each(function(index, tr) {
-                        var $tr = $(tr);
-
-                        // 找到当前tr的第一个td(索引0)
-                        var $firstTd = $tr.find("td").eq(0);
-                        if ($firstTd.length === 0) {
-                            return true; // 继续下一个tr
-                        }
+                    } else {
+                        // 查找外层tr下的所有子tr(包括嵌套在tbody中的)
+                        $outerTr.find("tr").each(function(index, tr) {
+                            var $tr = $(tr);
+
+                            // 找到当前tr的第一个td(索引0)
+                            var $firstTd = $tr.find("td").eq(0);
+                            if ($firstTd.length === 0) {
+                                return true; // 继续下一个tr
+                            }
 
-                        // 找到第一个td中的第二个input(索引1)
-                        var $targetInput = $firstTd.find("input").eq(1);
-                        if ($targetInput.length === 0) {
-                            return true; // 继续下一个tr
-                        }
+                            // 找到第一个td中的第二个input(索引1)
+                            var $targetInput = $firstTd.find("input").eq(1);
+                            if ($targetInput.length === 0) {
+                                return true; // 继续下一个tr
+                            }
 
-                        // 设置input的值为1
-                        $targetInput.val("1");
-                    });
-                }
+                            // 设置input的值为1
+                            $targetInput.val("1");
+                        });
+                    }
 
-                // 隐藏外层tr(核心新增逻辑)
-                $outerTr.hide();
+                    // 隐藏外层tr(核心新增逻辑)
+                    $outerTr.hide();
 
-                var $currentRow = $(obj).closest("tr"); // 当前行
-                var $parentTable = $currentRow.closest("table"); // 父表格
+                    var $currentRow = $(obj).closest("tr"); // 当前行
+                    var $parentTable = $currentRow.closest("table"); // 父表格
 
-                // 重新排序行号
-                reorderParentRowNumbers($parentTable);
+                    // 重新排序行号
+                    reorderParentRowNumbers($parentTable);
 
-            }else{
-                parent.layer.msg('删除失败',{icon:2});
+                }else{
+                    parent.layer.msg('删除失败',{icon:2});
+                }
             }
+
+
         }
 
         // 数电发票删除 - 隐藏行版本(保留DOM,只隐藏)
@@ -2688,13 +2729,15 @@
                         reimbursementVATTaxesRowIdx = ${fn:length(workReimbursement.reimbursementVATTaxes)};
                     }
                     $(document).ready(function() {
-                        <%--var data = ${fns:toJson(workReimbursement.createBy)};--%>
-                        <%--addRow('#workAccountList', workAccountListRowIdx, workAccountListTpl,data,true );--%>
-                        /*var data = ${fns:toJson(workReimbursement.reimbursementVATTaxes)};
-                    for (var i=0; i<data.length; i++){
-                        addRow('#reimbursementVATTaxes', reimbursementVATTaxesRowIdx, reimbursementVATTaxesTpl, data[i]);
-                        reimbursementVATTaxesRowIdx = reimbursementVATTaxesRowIdx + 1;
-                    }*/
+                        var data = ${fns:toJson(workReimbursement.createBy)};
+                        addRow('#workAccountList', workAccountListRowIdx, workAccountListTpl,data,true );
+                        workAccountListRowIdx = workAccountListRowIdx + 1;
+                        document.querySelector('.nav-btn-add').style.display = 'none';
+                    <%--    var data = ${fns:toJson(workReimbursement.reimbursementVATTaxes)};--%>
+                    <%--for (var i=0; i<data.length; i++){--%>
+                    <%--    addRow('#reimbursementVATTaxes', reimbursementVATTaxesRowIdx, reimbursementVATTaxesTpl, data[i]);--%>
+                    <%--    reimbursementVATTaxesRowIdx = reimbursementVATTaxesRowIdx + 1;--%>
+                    <%--}--%>
                     });
                 </script>
             </div>