JeeSite treeselect 组件封装 layer + zTree 实现树结构选择组件、支持单选多选、异步加载下级节点、支持回显选择状态。
官方提供的方法,通过修改 options.content 值来改变弹框展示内容。
但这样要求,需要存在 Select 页面才行。
这里提供另一个方法,修改 options.contentFormData.url 值,不需要 Select 页面。
具体的业务是这样的:
选择产品时,需要关联所在订单,只展示订单中的产品。
通过定义 openFuncName 回调来实现,这个回调在弹窗前调用,在里面修改弹框展示地址。
HTML 页面
<div class="col-xs-6"> <div class="form-group"> <label class="control-label col-sm-4" title=""> <span class="required ">*</span> ${text('产品名称')}:<i class="fa icon-question hide"></i></label> <div class="col-sm-8"> <#form:treeselect id="proCatalog" title="${text('产品选择')}" path="proCatalog.proCode" labelPath="proCatalog.proName" url="${ctx}/order/workOrder/productTreeData" class=" required" allowClear="true" openFuncName="proCatalogOpenCallback"/> </div> </div> </div>
JS 脚本
function proCatalogOpenCallback(id, options) { if ($("#workOrderCode").val() === "") { js.showMessage('请选择订单!'); return false; } options.contentFormData.url = ctx + "/order/workOrder/productTreeData?workOrder.workOrderCode="+$("#workOrderCode").val(); }
控制器
@RequestMapping(value = "productTreeData") @RequiresUser @ResponseBody public List<Map<String, Object>> productTreeData(WorkOrderRecord workOrderRecord,String excludeCode, String isShowCode) { List<Map<String, Object>> mapList = ListUtils.newArrayList(); List<WorkOrderRecord> list = workOrderRecordService.findList(workOrderRecord); for (int i = 0; i < list.size(); i++) { WorkOrderRecord e = list.get(i); Map<String, Object> map = MapUtils.newHashMap(); map.put("id", e.getProCode()); map.put("pId", "0"); map.put("name", e.getProName()); map.put("fullName", e.getProTypeName() + " " + e.getProName() + " " + e.getProSpecification()); mapList.add(map); } return mapList; }
查看 openFuncName 回调方法,options 对象:
{ "type": 2, "maxmin": true, "shadeClose": true, "title": "产品选择", "area": [ "300px", "400px" ], "content": "/js/tags/treeselect", "contentFormData": { "url": "/js/a/order/workOrder/productTreeData", "checkbox": "false", "chkboxType": "", "expandLevel": "-1", "selectCodes": "", "isReturnValue": "false", "fastSearch": "true" }, "btn": [ "<i class=\"fa fa-check\"></i> 确定", "<i class=\"fa fa-eraser\"></i> 清除", "<i class=\"fa fa-close\"></i> 关闭" ] }
通过修改该对象属性来达到控制弹窗,其中 area 控制弹窗大小,content 弹窗地址,contentFormData 弹窗表单数据,其中contentFormData.url 为请求数据地址。