/** * 参照的配置 * @author weidy * @date 2022-04-05 */ layui.define(['layer'],function(exports){ var ReferConfig = function(){ this.backPath = (configData.compatibility?path:configData.objectServicePath); this.url = 'btmTypeController/gridAttributesByBtmId'; }; /** * 显示参照窗口的时候 * @param referConfig 参照相关的配置 */ ReferConfig.prototype.showReferDialog = function (config){ //只需要设置默认的值,调用VciWebReferGrid即可 var that = this; //全部都是页面上处理 //基本信息,列的信息,查询的字段配置 //查询条件 var filter = config.filter, name = config.name, title = config.title, valueInfo = '', isMuti = config.isMuti, target = config.target, value = config.value, text = config.text; if(filter.indexOf('.')>-1){ filter=filter.split('.')[0]+'-'+filter.split('.')[1]; } if(name.indexOf('.')>-1){ name=name.split('.')[0]+'-'+name.split('.')[1]; } var options = config.options; var referFilter = filter+"_" + name; var referIndex = $webUtil.dialog({ title:'参照配置', btn:['确定', '清空内容','取消'], content:'
' + '
' + '' + '
' + '
' + '
'+ '
' + '' + '
' + '
' + '
' + '
', fullScreen:true, yes:function(index,layero){ var selectValue = that.getSelectValue(filter,name,isMuti); if(selectValue){ target.setValue(filter,name,selectValue.value,selectValue.rawValue,true,selectValue.allValues); layer.close(referIndex); } }, success:function(layero){ var defaultValues={}; if($webUtil.isNotNull(config.value)){ defaultValues=eval("(" + config.value + ")") }else if($webUtil.isNotNull(config.text)){ defaultValues=eval("(" + config.text + ")") }else { defaultValues.type='default' } that.initForm(referFilter,config,defaultValues); that.initFormType(referFilter,config,defaultValues); that.initWhereTable(referFilter,config,defaultValues); if(defaultValues.type == 'default' || defaultValues.type == 'grid'){ that.initTable(referFilter,config,defaultValues); $("[layui-filter='column_toolbar_" + referFilter + "']").show(); } $("[layui-filter='toolbar_" + referFilter + "_ADDATTR']").unbind('click').click(function (){ var values = layui.form.getValues('form_'+referFilter); if($webUtil.isNull(values['referType'])){ $webUtil.showErrorMsg("请输入参照的业务类型"); return false; } layui.use('platform/objectService/OsAttributeForBtmRefer',function (){ var attrRefer = layui['platform/objectService/OsAttributeForBtmRefer']; attrRefer.showReferDialog({ filter:referFilter+"_attr", name:name + "_attr", title:'选择显示字段', isMuti:true, target: that, options: { where: { btmTypeId: values['referType'], hasDefaultAttr:true } } }); }); }); $("[layui-filter='toolbar_" + referFilter + "_ADDWHERE']").unbind('click').click(function (){ var values = layui.form.getValues('form_'+referFilter); if($webUtil.isNull(values['referType'])){ $webUtil.showErrorMsg("请输入参照的业务类型"); return false; } layui.use('platform/objectService/OsAttributeForBtmRefer',function (){ var attrRefer = layui['platform/objectService/OsAttributeForBtmRefer']; attrRefer.showReferDialog({ filter:referFilter+"_attr", name:name + "_attr", title:'选择查询条件', isMuti:true, target: { setValue: function (filter,name,value,rawValue,closeDialog,allValues){ var referFilter = filter.substring(0,filter.length-5); var tableData = []; layui.each(allValues,function (_index,_item){ var record = { field:_item.id,type:'',typeText:'等于',value:'' } tableData.push(record) }); layui.table.addData("where_" + referFilter, tableData); } }, options: { where: { btmTypeId: values['referType'], hasDefaultAttr:true } } }); }); }); }, btn2: function (layero) { target.setValue(filter,name,'','',true); }, btn3: function (layero) { layer.close(referIndex); } }); }; ReferConfig.prototype.setValue = function (filter,name,value,rawValue,closeDialog,allValues){ //选择属性的时候的回调 var that = this; var referFilter = filter.substring(0,filter.length-5); var tableData = []; layui.each(allValues,function (_index,_item){ var record = { field: _item.id, title: _item.name, fieldType: _item.attrDataType, fieldTypeText: { VTBoolean:"布尔型", VTClob: "长文本", VTDate:"日期", VTDateTime:"日期时间", VTTime:"时间", VTLong:"长整型", VTDouble:"金额/双精度", VTInteger:"整形", VTFilePath:"文件", VTString:"字符串" }[_item.attrDataType], sort: "false", sortField: _item.id, width: _item.attributeLength } tableData.push(record) }); layui.table.addData("column_" + referFilter, tableData); }; ReferConfig.prototype.initTable = function (referFilter,config,defaultValues){ var that = this; var table = layui.table; var height = ($webUtil.isNotNull(config.options.height) && config.options.height*1>1) ?(config.options.height*1-400): 260 ; if(height<300){ height = 260; } if(!defaultValues.tableConfig){ defaultValues.tableConfig= { cols: [{ field: 'id', title: '编号', fieldType: 'text', fieldTypeText: '文本框', sort: "true", sortField: 'id', width: '150', isquery: true, }, { field: 'name', title: '名称', fieldType: 'text', fieldTypeText: '文本框', sort: "true", sortField: 'name', width: '180', isquery: true, }], queryColumns: [{ field: 'id', title: '编号', fieldType: 'text', fieldTypeText: '文本框', sort: "true", sortField: 'id', width: '150', isquery: true, }, { field: 'name', title: '名称', fieldType: 'text', fieldTypeText: '文本框', sort: "true", sortField: 'name', width: '180', isquery: true, }] } } var options = { elem: '#column_' + referFilter, id: 'column_' + referFilter, data:defaultValues.tableConfig.cols, limit:-1, selectMode: table.selectMode.muti, cols: [[table.getIndexColumn(), { field:'field', title:'列字段(*)', width:150, edit:'text' },{ field:'title', title:'列名(*)', edit:'text', width: 170 }, { field: 'fieldTypeText', title: '字段类型(*)', edit: 'select', editConfig: { comboxKey: 'fieldTypeForLayui', valueField:'fieldType', comboxConfig: { data: [{key: 'text', value: '文本框'}, {key: 'combox', value: '下拉菜单'}, {key: 'radio',value: '单选'}, {key: 'swtich', value: '开关'}, {key: 'date', value: '时间'}, {key: 'textarea', value: '文本域'}] } }, width: 80 },{ field:'sort', title:'列表可排序', width: 70, data: [{key: "true", value: "是"}, {key: "false", value: "否"}], templet: function (d) { return ''; } },{ field:'sortField', title: '排序字段', width: 100, edit: 'text' },{ field: 'width', title: '字段宽度', width: 70, edit: 'text' },{ field: 'fixedText', title: '列固定位置', edit: 'select', editConfig: { comboxKey:'fixedForLayui', valueField:'fixed', comboxConfig: { data: [{key: '', value: '不固定'}, {key: 'left', value: '左边'}, {key: 'right', value: '右边'}] } }, width: 90 },{ field: 'templet', title: 'js显示代码', width: 320, edit: 'text' },{ field: 'options', title: '操作', width: 180, templet:function (d){ if(d.isquery) { return '取消快速查询移除'; }else{ return '快速查询移除'; } } }]], //height: height, remoteSort:false, done: function (res, cur, total) { layui.form.on('switch(sortflag)', function(obj){ var tr=$(obj.othis).parents('tr'); var data= layui.table.getData('column_' + referFilter)[tr.attr('data-index')] data[this.name]=obj.elem.checked //layui.table.changeRecord(tableId,tr.attr('data-index'),data); $(obj.othis).parents('td').addClass('layui-table-edit_notsubmit') }); table.on('tool(column_' + referFilter + ')', function (obj) { var data = obj.data;//当前选择行的数据 var layEvent = obj.event;//点的是什么按钮 if (layEvent == 'USEQUERY') { that.USEQUERY(data,referFilter,config); data.isquery=true; layui.table.changeRecord('column_' + referFilter,obj.index,data) } if (layEvent == 'UNUSEQUERY') { that.UNUSEQUERY(data,referFilter,config); data.isquery=false; layui.table.changeRecord('column_' + referFilter,obj.index,data) } if(layEvent == 'REMOVEFIELD'){ that.UNUSEQUERY(data,referFilter,config); table.removeData('column_' + referFilter,data[table.config.indexName]); } }); } }; table.render(options); var toolbatr = $("[layui-filter='query_toolbar_" + referFilter + "']"); if(toolbatr){ toolbatr.empty(); layui.each(defaultValues.tableConfig.queryColumns,function (i,item){ toolbatr.append('' + item.title + ''); }) } }; ReferConfig.prototype.initWhereTable = function (referFilter,config,defaultValues){ var that = this; var table = layui.table; var whereData=[]; if(defaultValues.where){ layui.each(defaultValues.where,function (i,item){ if($webUtil.startWith(item,'>=')){ whereData.push({field:i,value:item.replace('>=',''),type:'>=',typeText:'大于等于'}) }else if($webUtil.startWith(item,'<=')){ whereData.push({field:i,value:item.replace('<=',''),type:'<=',typeText:'小于等于'}) }else if($webUtil.startWith(item,'!=')){ whereData.push({field:i,value:item.replace('!=',''),type:'!=',typeText:'不等于'}) }else if($webUtil.startWith(item,'>')){ whereData.push({field:i,value:item.replace('>',''),type:'>',typeText:'大于'}) }else if($webUtil.startWith(item,'<')){ whereData.push({field:i,value:item.replace('<',''),type:'<',typeText:'小于'}) }else if($webUtil.startWith(item,'*') && $webUtil.endWith(item,'*')){ whereData.push({field:i,value:item.replace('*','').replace('*',''),type:'like',typeText:'包含'}) }else { whereData.push({field:i,value:item,type:'',typeText:'等于'}) } }) } table.render({ elem: '#where_' + referFilter, id: 'where_' + referFilter, data:whereData, limit:-1, selectMode: table.selectMode.muti, cols: [[table.getIndexColumn(), { field:'field', title:'筛选字段', width:150, edit:'text' }, { field:'typeText', title: '筛选类型', width: 100, edit: 'select', editConfig: { comboxKey:'whereTypeForLayui', valueField:'type', comboxConfig: { data: [{key: 'like', value: '包含'}, {key: '', value: '等于'}, {key: '>', value: '大于'}, {key: '<', value: '小于'}, {key: '!=', value: '不等于'}, {key: '>=', value: '大于等于'}, {key: '<=', value: '小于等于'}] } } },{ field:'value', title:'筛选值', edit:'text', width: 170 },{ field: 'options', title: '操作', width: 80, templet:function (d){ return '移除'; } }]], remoteSort:false, done: function (res, cur, total) { table.on('tool(where_' + referFilter + ')', function (obj) { var data = obj.data;//当前选择行的数据 var layEvent = obj.event;//点的是什么按钮 if(layEvent == 'REMOVEFIELD'){ table.removeData('where_' + referFilter,data[table.config.indexName]); } }); } }); }; ReferConfig.prototype.USEQUERY = function (data,referFilter,config){ var that = this; var toolbatr = $("[layui-filter='query_toolbar_" + referFilter + "']"); if(toolbatr){ var fieldSpan = toolbatr.find("span[data-id='" + data.field + "']"); if(fieldSpan.length==0){ toolbatr.append('' + data.title + ''); } } }; ReferConfig.prototype.UNUSEQUERY = function (data,referFilter,config){ var that = this; var toolbatr = $("[layui-filter='query_toolbar_" + referFilter + "']"); if(toolbatr){ var fieldSpan = toolbatr.find("span[data-id='" + data.field + "']"); if(fieldSpan.length>0){ fieldSpan.remove() } } }; /** * 初始化表单 * @param referFilter * @param config */ ReferConfig.prototype.initForm = function (referFilter,config,defaultValues) { var that = this; var form = layui.form; //动态计算个数 var screenWidth = webUtil.getDialogScreenWidth({fullScreen: true}); var preWidth = 360; //忘记form里面为啥要减去1了,不敢改 var defaultColumnOneRow = (screenWidth - screenWidth % preWidth) / preWidth; var btmId = config.options.btmTypeId; if(config && config.options && config.options.formValues && config.options.useFormKey){ btmId = config.options.formValues[config.options.useFormKey]; defaultValues.referType=btmId; defaultValues.referTypeName=config.options.formValues[config.options.useFormText]; if(webUtil.isNull(defaultValues.referTypeName)){ defaultValues.referTypeName=defaultValues.referType; } } form.addItems('form_' + referFilter, that.getFormItems(config,btmId), function () { form.setValues(defaultValues, 'form_' + referFilter); form.on('select(type)', function (data) { form.removeItems("formtype_" + referFilter, [], true) var values=form.getValues('form_' + referFilter); form.addItems("formtype_" + referFilter, that.getFormTypeItems(config, data.value,values.referType), function () { form.setValues(defaultValues, "formtype_" + referFilter); }, {}, {defaultColumnOneRow: defaultColumnOneRow, labelWidth: 160}) if (data.value == 'grid' || data.value == 'default') { $("[layui-filter='column_toolbar_" + referFilter + "']").show(); defaultValues.type = data.value; that.initTable(referFilter, config, defaultValues); } else { $("[layui-filter='column_toolbar_" + referFilter + "']").hide(); layui.table.destory('column_' + referFilter); } }) form.on('select(form_' + referFilter + ')', function (data) { if (data.name == 'referType') { var values = form.getValues("form_" + referFilter); if (values.type == 'grid' || values.type == 'default' || values.type == 'tree') { form.setValues({sortField:''}, "formtype_" + referFilter); form.changeItems('formtype_' + referFilter, { field: 'sortField', title: '排序字段', tooltips: '查询数据时的排序字段', showField: 'sortField', type: 'refer', referConfig: { textField: 'id', type: 'platform/objectService/OsAttributeForBtmRefer', isMuti: false, where: { btmTypeId: data.value, hasDefaultAttr: true } } }) } } }) }, {}, {defaultColumnOneRow: defaultColumnOneRow, labelWidth: 160}); }; ReferConfig.prototype.initFormType = function (referFilter,config,defaultValues){ var that = this; var form = layui.form; //动态计算个数 var screenWidth = webUtil.getDialogScreenWidth({fullScreen: true}); var preWidth = 430; //忘记form里面为啥要减去1了,不敢改 var defaultColumnOneRow = (screenWidth - screenWidth % preWidth) / preWidth ; form.addItems('formtype_'+referFilter, that.getFormTypeItems(config,defaultValues.type,defaultValues.referType), function () { form.setValues(defaultValues, 'formtype_'+referFilter); }, {}, {defaultColumnOneRow: defaultColumnOneRow, labelWidth: 160}); }; ReferConfig.prototype.getFormItems = function (config,btmId){ var that = this; var form = layui.form; return [{ field:'line1', type: 'line', text: '基本信息' },{ field: 'referType', title: '参照的业务类型', tooltips: '参照数据查询的业务类型', required: true, defaultValue:btmId, showField:'referTypeName', type:'refer', referConfig:{ valueField:'id', type:'platform/objectService/OsBtmTypeRefer' }, readOnly: $webUtil.isNotNull(btmId) }, { field: 'textField', title: '显示的属性', tooltips: '选择数据后,显示到字段上的信息所属的属性,一般都是name,如果是多个属性使用逗号分割,如id,name', required: true, defaultValue: 'name' }, { field: 'valueField', title: '存储值的属性', tooltips: '选择数据后,保存到数据库里的属性,一般都是oid或者id,如果是多个属性使用逗号分割,如oid,id', required: true, defaultValue: 'oid' },{ field: 'type', title:'参照窗口类型', tooltips:'default:默认的参照窗口样式; stand:UI上下文配置的方式; classify:分类+档案的显示; 自定义的参照直接写js的组件路径;tree:树形展示;grid:列表展示', defaultValue: 'default', type:'combox', editable:true, comboxKey: 'referDialogType', data:[{key:"default",value: "默认样式"},{key:'stand',value: "平台配置"},{key:"tree",value: "树形"},{key:'grid',value: '列表'}, {key:"refer/OrgDepartmentRefer",value: "部门树"},{key:"refer/OrgDepartmentGridRefer",value: "部门列表"},{key:"refer/SmUserRefer",value: "用户"}, {key:"refer/SmUserGridRefer",value: "用户列表"},{key:"refer/SmRoleRefer",value: "角色列表"},{key:"refer/OrgDutyRefer",value: "职务"} ,{key:(configData.compatibility?'':'refer/SmWorkTypeRefer'),value: "工种"},{key:(configData.compatibility?"refer/WfProcessTemplateRefer":''),value: "流程模板"}], url:"bdSelectInputController/listByFlag", backPath:that.backPath, extraParams:{ namespace:'referDialogType', flag:'referDialogType' }, required: true },{ field:'url', title:'自定义的后台路径', tooltips: '通常为空;如果是列表,后台必须返回DataGrid,如果是树,后台必须返回List' },{ field: 'backPath', title: '服务的地址', tooltips: '通常为空,在支持微服务或者分布式部署的时候才配置' },{ field: 'method', title: '请求后台的协议方式', defaultValue: 'GET', type:'combox', comboxKey: 'httpMethodInRefer', data:[{key:'GET',value: "GET"},{key:'PUT',value: "PUT"},{key:'POST',value: "POST"}], tooltips: 'HTTP的协议方式,支持POST,PUT,GET,一般都是GET' },{ field: 'height', title: '窗口显示的高度', tooltips: '默认空着,设置后表示强制显示这样的高度' },{ field: 'useFormKey', title: '过滤(级联)属性', tooltips: '获取表单上的其他属性的属性的值来过滤,或者使用某个属性来级联选择' },{ field: 'paramForFormKey', title: '过滤属性请求参数', tooltips: '使用过滤属性时,发送给后台的请求参数' }, { field: 'isMuti', title: '是否多选', defaultValue: 'false', type: 'truefalse' },{ field: 'mapFields', title: '映射其他属性', tooltips: '选择数据后,将选择的数据拷贝到表单里的其他属性,书写格式为{当前表单上的属性:选择数据里的属性,xxxxx:yyyy}', useAllWidth:true, inputWidth:760 }]; }; ReferConfig.prototype.getFormTypeItems = function (config,formtype,referType) { var that = this; var items = [] var btmId = config.options.btmTypeId; if(config && config.options && config.options.formValues && config.options.useFormKey){ btmId = config.options.formValues[config.options.useFormKey]; } if(referType){ btmId=referType; } if (formtype == 'default') { items = [{ field: 'line2', type: 'line', text: '默认参照的配置(下方列表)' }, { field: 'limit', title: '每页显示条数', tooltips: '分页时每页显示的数量,不分页填-1', defaultValue: '15' }, { field: 'sortField', title: '排序字段', tooltips: '查询数据时的排序字段', showField:'sortField', type:'refer', referConfig:{ textField:'id', type:'platform/objectService/OsAttributeForBtmRefer', isMuti:false, where: { btmTypeId: btmId, hasDefaultAttr: true } } }, { field: 'sortType', title: '排序类型', tooltips: '查询数据时的排序类型', type: 'combox', comboxKey: 'sortType', data: [{key: 'asc', value: '升序'}, {key: 'desc', value: '降序'}] }] }else if (formtype == 'grid') { items = [{ field: 'line2', type: 'line', text: '列表参照的配置(下方列表)' }, { field: 'limit', title: '每页显示条数', tooltips: '分页时每页显示的数量,不分页填-1', defaultValue: '15' }, { field: 'sortField', title: '排序字段', tooltips: '查询数据时的排序字段', showField:'sortField', type:'refer', referConfig:{ textField:'id', type:'platform/objectService/OsAttributeForBtmRefer', isMuti:false, where: { btmTypeId: btmId, hasDefaultAttr: true } } }, { field: 'sortType', title: '排序类型', tooltips: '查询数据时的排序类型', type: 'combox', comboxKey: 'sortType', data: [{key: 'asc', value: '升序'}, {key: 'desc', value: '降序'}] }] } else if (formtype == 'tree') { items = [{ field: 'line2', type: 'line', text: '树形参照信息' }, { field: 'parentFieldName', required: true, title: '树形的上级属性', tooltips: '树形展示的时候,上下级关系查找的属性。' }, { field: 'parentUsedField', title: '上级属性值对应属性', defaultValue: 'oid', tooltips: '上级属性存储的值,是上级数据的什么属性。一般都是oid' }, { field: 'parentValue', title: '根节点的值', tooltips: '树形展示的时候,上级的值' }, { field: 'loadType', title: '树加载方式', defaultValue: 'all', type: 'combox', comboxKey: 'treeLoadType', data: [{key: 'all', value: '全部'}, {key: 'node', value: '逐级加载'}] }, { field: 'onlyLeaf', title: '是否只能选择叶子节点', tooltips: '是tree的方式时,是否只能选择叶子节点', defaultValue: 'false', type: 'truefalse' }, { field: 'sortField', title: '排序字段', tooltips: '查询数据时的排序字段', showField:'sortField', type:'refer', referConfig:{ textField:'id', type:'platform/objectService/OsAttributeForBtmRefer', isMuti:true, where: { btmTypeId: btmId, hasDefaultAttr: true } } }, { field: 'sortType', title: '排序类型', tooltips: '查询数据时的排序类型', type: 'combox', comboxKey: 'sortType', data: [{key: 'asc', value: '升序'}, {key: 'desc', value: '降序'}] }] } else if (formtype == 'stand') { items = [{ field: 'line2', type: 'line', text: 'stand(平台配置)参照' }, { field: 'referContent', title: '参照的UI上下文', tooltips: '只有参照窗口类型是stand时才必须设置,且在stand类型下才能生效' }, { field: 'displayTable', title: '平台的表格编号', tooltips: '与参照的UI上下文互斥,只有参照窗口类型是stand时才必须设置,且在stand类型下才能生效' }] } return items; }; ReferConfig.prototype.getSelectValue = function(filter,name,isMuti){ var that = this; var form = layui.form; var table = layui.table; var referFilter = filter+"_" + name; if (form.validata('form_'+referFilter) && form.validata('formtype_'+referFilter)) { var values = form.getValues('form_' + referFilter, true); var typevalues = form.getValues('formtype_' + referFilter, true); $.extend(values,typevalues); var tableData = table.getData('column_' + referFilter,true); debugger; var whereData = table.getData('where_' + referFilter,true); var selectValue = {}; if(values.type=='grid' || values.type=='default'){ var toolbatr = $("[layui-filter='query_toolbar_" + referFilter + "']"); var queryColumns=[] if(toolbatr){ var fieldSpan = toolbatr.find("span[data-id]"); layui.each(fieldSpan,function (i,item){ for(var j=0;j0){ values.where={} layui.each(whereData,function (i,item){ if(item.field && item.field!=''){ if(item.type=='like'){ values.where[item.field]="*" +item.value + "*" }else{ values.where[item.field]=item.type+item.value } } }) }else{ delete values.where } if($webUtil.isNotNull(typevalues.sortField)){ values.remoteSort=true; var sortType=typevalues.sortType if(typevalues.sortField.indexOf(',')!=-1){ sortType=[] layui.each(typevalues.sortField.split(','),function (i,item){ sortType.push(typevalues.sortType) }) sortType=sortType.join(',') } values.initSort = { field: typevalues.sortField , type: sortType } }else{ values.remoteSort=false delete values.initSort } selectValue = { value: JSON.stringify(values), rawValue: JSON.stringify(values), allValues: values }; //console.log(selectValue) return selectValue; } }; var rg = new ReferConfig(); exports('referConfig',rg); });