Index: ssts-web/src/main/webapp/disinfectsystem/customform/forminstanceForm.js =================================================================== diff -u -r16052 -r30484 --- ssts-web/src/main/webapp/disinfectsystem/customform/forminstanceForm.js (.../forminstanceForm.js) (revision 16052) +++ ssts-web/src/main/webapp/disinfectsystem/customform/forminstanceForm.js (.../forminstanceForm.js) (revision 30484) @@ -3,12 +3,50 @@ function cancelFormInstance() { formInstanceWin.close(); } -function createFormDefinitionItemElement(type,id,name,allowBlank,options,value){ +function triggerItemAction(valueTriggerItemIds,action){ + if(valueTriggerItemIds != null && valueTriggerItemIds != ""){ + var itemIdArray = valueTriggerItemIds.split(","); + if(itemIdArray.length > 0){ + for(var n = 0 ; n < itemIdArray.length ; n++){ + var triggerItemId = itemIdArray[n]; + if(triggerItemId != null && triggerItemId != ""){ + if("show" == action){ + top.Ext.getCmp("hideElement" + triggerItemId).show(); + }else{ + var xtype = top.Ext.getCmp("hideElement" + triggerItemId).getXType(); + if(xtype == 'fieldset'){ + var length = top.Ext.getCmp("hideElement" + triggerItemId).items.each(function(fsItem){ + var itemType = fsItem.getXType(); + if(itemType == "panel"){ + fsItem.items.each(function(item,index,length){ + item.setValue(false); + }); + }else if(itemType == "hidden"){ + fsItem.setValue(""); + } + }); + }else if(xtype == 'panel'){ + var panel = top.Ext.getCmp("hideElement" + triggerItemId); + panel.items.each(function(item,index,length){ + item.setValue(""); + }); + } + top.Ext.getCmp("hideElement" + triggerItemId).hide(); + } + } + } + } + } +} +function createFormDefinitionItemElement(type,id,name,allowBlank,options,value,isTriggerItem){ + var hideElement = false; if(type == '文本'){ return { columnWidth : .5, layout : 'form', labelWidth : 90, + hidden:hideElement, + id:'hideElement'+id, style:'margin-top:10px', items : [{ xtype : 'textfield', @@ -26,6 +64,8 @@ columnWidth : 1, layout : 'form', labelWidth : 90, + hidden:hideElement, + id:'hideElement'+id, style:'margin-top:10px', items : [{ xtype : 'textarea', @@ -45,6 +85,8 @@ columnWidth : .5, layout : 'form', labelWidth : 90, + hidden:hideElement, + id:'hideElement'+id, style:'margin-top:10px', items : [{ xtype : 'numberfield', @@ -63,6 +105,8 @@ layout : 'form', style:'margin-top:10px', labelWidth : 90, + hidden:hideElement, + id:'hideElement'+id, items : [{ xtype : 'datefieldWithMin', fieldLabel : name, @@ -84,6 +128,8 @@ columnWidth : .5, layout : 'form', labelWidth : 90, + hidden:hideElement, + id:'hideElement'+id, style:'margin-top:10px', items : [{ xtype : 'textfield', @@ -103,6 +149,8 @@ columnWidth : .5, layout : 'form', labelWidth : 90, + hidden:hideElement, + id:'hideElement'+id, style:'margin-top:10px', items : [{ xtype : 'datefieldWithMin', @@ -121,18 +169,30 @@ var optionsArrays = new Array(); if(options != ""){ var optionsJson = JSON.parse(options); + var hideTriggerItemIdsValue = ""; for(var j = 0 ; j < optionsJson.length ; j++){ var optionsArray = new Array(); optionsArray.push(optionsJson[j].name); + optionsArray.push(optionsJson[j].valueTriggerItemIds); optionsArrays.push(optionsArray); + if(value == optionsJson[j].name){ + hideTriggerItemIdsValue = optionsJson[j].valueTriggerItemIds; + } } } return { columnWidth : .5, layout : 'form', labelWidth : 90, + hidden:hideElement, + id:'hideElement'+id, style:'margin-top:10px', items : [{ + xtype:'hidden', + id:'triggerItemIds' + id, + name:'triggerItemIds' + id, + value : hideTriggerItemIdsValue + },{ xtype : 'combo', fieldLabel : name, id : 'configItemOption'+id, @@ -142,14 +202,23 @@ allowBlank : allowBlank, editable : false, store : new Ext.data.SimpleStore({ - fields : [ 'value' ], + fields : [ 'value','valueTriggerItemIds'], data : optionsArrays }), forceSelection : true, value : value, mode : 'local', triggerAction : 'all', - anchor : '100%' + anchor : '100%', + listeners:{ + select : function(combo, record, index) { + var valueTriggerItemIds = record.get("valueTriggerItemIds"); + var oldTriggerItemIds = top.Ext.getCmp("triggerItemIds" + id).getValue(); + triggerItemAction(oldTriggerItemIds,"hide"); + triggerItemAction(valueTriggerItemIds,"show"); + top.Ext.getCmp("triggerItemIds" + id).setValue(valueTriggerItemIds); + } + } }] }; }else if(type == '多选'){ @@ -212,6 +281,7 @@ xtype : "fieldset", title: name, layout : 'column', + id:'hideElement'+id, autoHeight : true, items : optionsArray }; @@ -249,7 +319,6 @@ success : function(response,options){ var result = Ext.decode(response.responseText); if(result.success){ - var items = new Array(); var itemIds = ""; for(var i = 0 ; i< result.data.items.length ; i++){ @@ -259,8 +328,7 @@ itemIds += ";"; } itemIds += formDefinitionItem.id; - - items.push(createFormDefinitionItemElement(formDefinitionItem.type,formDefinitionItem.id,formDefinitionItem.name,allowBlank,formDefinitionItem.optionsJson,null)); + items.push(createFormDefinitionItemElement(formDefinitionItem.type,formDefinitionItem.id,formDefinitionItem.name,allowBlank,formDefinitionItem.optionsJson,null,formDefinitionItem.isTriggerItem)); if(formDefinitionItem.type == '多选'){ items.push({ columnWidth : 1, @@ -370,7 +438,7 @@ lazyInit : true, forceSelection : true, triggerAction : 'all', - hideTrigger : true, + hideTrigger : false, typeAhead : false, allowBlank : false, listeners : { @@ -491,7 +559,7 @@ itemIds += item.id; var allowBlank = item.requirement == '必填'?false:true; - items.push(createFormDefinitionItemElement(item.type,item.id,item.name,allowBlank,item.optionsJson,result.data.items[i].showAnswer)); + items.push(createFormDefinitionItemElement(item.type,item.id,item.name,allowBlank,item.optionsJson,result.data.items[i].showAnswer,item.isTriggerItem)); if(item.type == '多选'){ items.push({ columnWidth : 1, Index: ssts-web/src/main/webapp/disinfectsystem/customform/formInstanceReportView.js =================================================================== diff -u -r16091 -r30484 --- ssts-web/src/main/webapp/disinfectsystem/customform/formInstanceReportView.js (.../formInstanceReportView.js) (revision 16091) +++ ssts-web/src/main/webapp/disinfectsystem/customform/formInstanceReportView.js (.../formInstanceReportView.js) (revision 30484) @@ -129,7 +129,7 @@ lazyInit : true, forceSelection : true, triggerAction : 'all', - hideTrigger : true, + hideTrigger : false, typeAhead : false, anchor : '100%' }] Index: ssts-web/src/main/webapp/disinfectsystem/customform/formdefinitionView.js =================================================================== diff -u -r27321 -r30484 --- ssts-web/src/main/webapp/disinfectsystem/customform/formdefinitionView.js (.../formdefinitionView.js) (revision 27321) +++ ssts-web/src/main/webapp/disinfectsystem/customform/formdefinitionView.js (.../formdefinitionView.js) (revision 30484) @@ -92,6 +92,162 @@ {name : 'optionsJson'} ]); +//触发项类 +var triggerItem = { + + triggerItemModel: [{name: 'name'}], + + extObj: top.Ext, + + /** + * 设置ext对象 + * @param self_ext + */ + setExtObj: function (self_ext) { + this.extObj = self_ext; + }, + + /** + * 获取ext对象 + * @returns {*} + */ + getExtObj: function () { + return this.extObj; + }, + + doSave: function (rowIndex) { + var optionsStr = ""; + var records = triggerItem.extObj.getCmp("triggerItemPanel").getSelectionModel().getSelections(); + for (var i = 0, len = records.length; i < len; i++) { + if (optionsStr !== "") { + optionsStr += ","; + } + optionsStr += records[i].data['name']; + } + var store = triggerItem.extObj.getCmp('itemOptionsGrid').getStore(); + var record = store.getAt(rowIndex); + record.set("valueTriggerItemNames", optionsStr); + triggerItem.extObj.getCmp("triggerItemWindow").close(); + }, + + getTriggerStore: function () { + return new triggerItem.extObj.data.Store({ + proxy: new triggerItem.extObj.data.MemoryProxy([]), + reader: new triggerItem.extObj.data.JsonReader({ + fields: triggerItem.triggerItemModel + }) + }); + }, + + loadTriggerItem: function () { + var triggerItemStore = triggerItem.getTriggerStore(); + var elementRecord = triggerItem.extObj.data.Record.create(triggerItem.triggerItemModel); + var elementStore = triggerItem.extObj.getCmp("formDefinitionItemConfigPanel").getStore(); + for (var i = 0; i < elementStore.getCount(); i++) { + var record = elementStore.getAt(i); + var newRecord = new elementRecord({ + name: record.get('name') + }); + triggerItemStore.add(newRecord); + } + return triggerItemStore; + }, + + createTriggerWindow: function (formObj) { + return new triggerItem.extObj.Window({ + id: 'triggerItemWindow', + layout: 'fit', + title: '参数触发项选择', + width: 500, + modal: true, + autoHeight: true, + border: false, + plain: true, + items: [formObj] + }); + }, + + selectSaveCheck: function (valueTriggerItemNames, triggerItemStore, selectModel) { + var name = valueTriggerItemNames.split(","); + var selectRows = []; + triggerItem.extObj.each(name, function (item) { + var find = triggerItemStore.find('name', item, false); + selectRows.push(find); + }); + if (selectRows.length > 0) { + selectModel.selectRows(selectRows); + } + }, + + createTriggerItemPanel: function (cm, selectModel, triggerItemStore) { + return new triggerItem.extObj.grid.GridPanel({ + id: 'triggerItemPanel', + store: triggerItemStore, + cm: cm, + sm: selectModel, + width: 240, + height: 240, + frame: false, + viewConfig: { + forceFit: true + }, + bodyStyle: 'border:1px solid #afd7af', + anchor: '100%', + selModel: new triggerItem.extObj.grid.RowSelectionModel({ + singleSelect: false + }) + }) + }, + + getCm: function (selectModel) { + var cm = [selectModel, { + header: "名称", + width: 240, + dataIndex: 'name' + }]; + return new triggerItem.extObj.grid.ColumnModel(cm); + }, + + openTriggerItemWin: function (rowIndex, valueTriggerItemNames) { + var triggerItemStore = triggerItem.loadTriggerItem(); + var selectModel = new triggerItem.extObj.grid.CheckboxSelectionModel({handleMouseDown: Ext.emptyFn}); + var panel = new triggerItem.extObj.FormPanel({ + frame: true, + labelAlign: 'right', + labelSeparator: ':', + bodyStyle: 'padding:5px 5px 0px 5px', + autoWidth: true, + autoHeight: true, + autoScroll: true, + items: [{ + layout: 'column', + items: [{ + columnWidth: 1, + layout: 'form', + items: [ + triggerItem.createTriggerItemPanel(triggerItem.getCm(selectModel), selectModel, triggerItemStore) + ] + }] + }], + buttons: [{ + text: '确定', + handler: function () { + triggerItem.doSave(rowIndex); + } + }, { + text: '取消', + handler: function () { + triggerItem.extObj.getCmp("triggerItemWindow").close(); + } + }] + }); + var triggerItemWindow = triggerItem.createTriggerWindow(panel); + triggerItemWindow.show(); + triggerItem.selectSaveCheck(valueTriggerItemNames, triggerItemStore, selectModel); + + } +}; + function removeItem(gridId){ var gridObj = top.Ext.getCmp(gridId); var rows = gridObj.getSelectionModel().getSelections(); @@ -209,6 +365,8 @@ fields : [{ name : 'id' },{ + name : 'valueTriggerItemNames' + },{ name : 'name' },{ name : 'orderNumber' @@ -222,6 +380,7 @@ var record = new goodsRecord({ id : optionsJson[i].id, name : optionsJson[i].name, + valueTriggerItemNames : optionsJson[i].valueTriggerItemNames, orderNumber : optionsJson[i].orderNumber }); optionStore.add(record); @@ -236,12 +395,17 @@ },{ id : 'name', header : "名称", - width:240, + width:200, dataIndex : 'name' },{ + id : 'valueTriggerItemNames', + header : "触发项", + width:200, + dataIndex : 'valueTriggerItemNames' + },{ id : 'orderNumber', header : "操作", - width:240, + width:200, renderer : optionsMoveUpDown, dataIndex : 'orderNumber' },{ @@ -338,7 +502,15 @@ anchor : '100%', selModel : new top.Ext.grid.RowSelectionModel({ singleSelect : false - }) + }), + listeners: { + cellclick: function (thiz, rowIndex, columnIndex, e) { + if (columnIndex === 2) { + var valueTriggerItemNames = thiz.getStore().getAt(rowIndex).get('valueTriggerItemNames') || ''; + triggerItem.openTriggerItemWin(rowIndex, valueTriggerItemNames); + } + } + } }) ] }] @@ -354,6 +526,7 @@ optionJsonArray.push({ id : record.get("id"), name : record.get("name"), + valueTriggerItemNames: record.get("valueTriggerItemNames"), orderNumber : (i+1) }); if(optionsStr != ""){