htDicCombo.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. /**
  2. * 数据字典分类下拉框。
  3. * 1.nodeKey:
  4. * 对应数据分类表中的字典nodekey字段。
  5. *
  6. * 2.下拉框类型:
  7. * 1.dicComboBox:
  8. * 表示普通的下拉框
  9. * 2.dicCombo:
  10. * 可为下拉框和树形下拉框。
  11. * 3.dicComboTree:
  12. * 树形下拉框。
  13. * 3.valueFieldID
  14. * 字典对应的值。
  15. * 4.isMultiSelect
  16. * 是否允许多选。
  17. * 5.value
  18. * 下拉框选择的值。
  19. * 6.treeLeafOnly
  20. * 如果是树形下拉框,只选择叶子节点。
  21. *
  22. * 7.height 下拉框的高度。
  23. * <input class="dicComboBox" nodeKey="xueli" valueFieldID="BoxMultiId" name="BoxMultiName" isMultiSelect="true" width="200" value="博士"/>
  24. */
  25. $(function() {
  26. var ctx = __ctx;
  27. /**
  28. * 读取配置信息。
  29. */
  30. function readProp(dicCombo) {
  31. //读取配置信息
  32. var prop = {
  33. //字典对应的分类key。
  34. nodeKey : $(dicCombo).attr("nodeKey"),
  35. width : $(dicCombo).attr("width"),
  36. height : $(dicCombo).attr("height"),
  37. //值字段。
  38. valueFieldID : $(dicCombo).attr("valueFieldID"),
  39. //允许多选
  40. isMultiSelect : $(dicCombo).attr("isMultiSelect"),
  41. //只选择页节点
  42. treeLeafOnly : $(dicCombo).attr("treeLeafOnly"),
  43. value : $(dicCombo).attr("value"),
  44. name : $(dicCombo).attr("name"),
  45. onSelected:$(dicCombo).attr("onSelected")
  46. };
  47. //nodekey 是必须的。
  48. if (isObjNull(prop.nodeKey)) {
  49. $.ligerDialog.warn('数据字典控件,nodeKey属性不能为空!');
  50. return;
  51. }
  52. //宽度
  53. if (isObjNull(prop.width)) prop.width = isObjNull($(dicCombo).width())?150:$(dicCombo).width();
  54. //高度
  55. if (isObjNull(prop.height)) prop.height = isObjNull($(dicCombo).height())&&$(dicCombo).height()<50?100:$(dicCombo).height();
  56. //字段值的ID
  57. if (isObjNull(prop.valueFieldID)){
  58. //表单字段命名为 m:表名:字段名称,在提交数据的时候程序会检查表单名称为m:开头的字段,这个id是不提交的,所以替换掉。
  59. prop.valueFieldID = $(dicCombo).attr("name").replaceAll(":","") +"_id";
  60. }
  61. //是否多选
  62. if (isObjNull(prop.isMultiSelect)) prop.isMultiSelect = false;
  63. //树形多选的配置。
  64. if (prop.isMultiSelect) {
  65. prop.check = {
  66. enable : true,
  67. chkboxType : {"Y" : "s","N" : "s"}
  68. };
  69. }
  70. //页节点选中
  71. if (isObjNull(prop.treeLeafOnly)){
  72. prop.treeLeafOnly = false;
  73. }
  74. return prop;
  75. }
  76. /**
  77. * 判断是否为空。
  78. */
  79. function isObjNull(v, allowBlank){
  80. return v === null || v === undefined || (!allowBlank ? v === '' : false);
  81. }
  82. /**
  83. * 从服务端加载数据字典的数据。
  84. */
  85. function process(dicCombo, prop) {
  86. //防止prop为空时JS报错
  87. if(typeof(prop) == undefined || prop == null || prop== ''){
  88. return;
  89. }
  90. if(typeof(prop.nodeKey) == undefined || prop.nodeKey == null || prop.nodeKey== ''){
  91. return;
  92. }
  93. var url=ctx + "/platform/system/dictionary/getMapByNodeKey.ht";
  94. var params={nodeKey:prop.nodeKey};
  95. $.post(url,params,function(data){
  96. //取得分类类型。
  97. var globalType=data.globalType;
  98. if(!globalType) return;
  99. //类型(0平铺,1树形)
  100. var type=globalType.type;
  101. var dicList=data.dicList;
  102. //下拉框已有的值。
  103. var dictValue = $(dicCombo).val();
  104. var ligerComboObj;
  105. $.each(dicList, function(i, d) {
  106. d.id = d.itemName;
  107. d.text = d.itemName;
  108. });
  109. //平铺的情况。
  110. if ( type == 0) {
  111. // 平铺
  112. ligerComboObj = $(dicCombo).ligerComboBox({
  113. data : dicList,
  114. valueFieldID : prop.valueFieldID ,
  115. width : prop.width,
  116. isMultiSelect : prop.isMultiSelect ,
  117. slide:false,
  118. isShowCheckBox :prop.isMultiSelect,
  119. onSelected:function(newval){
  120. if(this._toggleSelectBox){
  121. this._toggleSelectBox(true);
  122. }
  123. else if(ligerComboObj && ligerComboObj._toggleSelectBox){
  124. ligerComboObj._toggleSelectBox(true);
  125. }
  126. if(prop.onSelected){
  127. eval(prop.onSelected+'.call(this,newval)');
  128. }
  129. }
  130. });
  131. $(dicCombo).trigger("blur");
  132. } else if ( type == 1) {
  133. // 树形
  134. $(dicCombo).ligerComboBox({
  135. slide:false,
  136. valueFieldID : prop.valueFieldID,
  137. width : prop.width,
  138. treeLeafOnly : prop.treeLeafOnly,
  139. tree : {
  140. nameKey:"itemName",
  141. data : {simpleData : {enable: true,idKey: 'dicId',pIdKey : "parentId"},
  142. key : {name : "itemName"},
  143. data : dicList
  144. },
  145. selectValue:dictValue,
  146. view : { selectedMulti : prop.isMultiSelect},
  147. check : prop.check
  148. },
  149. selectBoxWidth : prop.width,
  150. selectBoxHeight : prop.height,
  151. onSelected:function(newval){
  152. if(this._toggleSelectBox){
  153. this._toggleSelectBox(true);
  154. }
  155. else if(ligerComboObj && ligerComboObj._toggleSelectBox){
  156. ligerComboObj._toggleSelectBox(true);
  157. }
  158. if(prop.onSelected){
  159. eval(prop.onSelected+'.call(this,newval)');
  160. }
  161. }
  162. });
  163. }
  164. $.each(dicList, function(i, d) {
  165. if(isObjNull(dictValue)==false){
  166. if(dictValue==d.text){
  167. $("#" + prop.valueFieldID).val(d.id);
  168. }
  169. }
  170. });
  171. });
  172. }
  173. // htDicCombo
  174. $.fn.htDicCombo = function(option) {
  175. $(this).each(function() {
  176. var prop = readProp(this);
  177. process(this, prop);
  178. });
  179. };
  180. $('.dicComboBox,.dicComboTree,.dicCombo').each(function() {
  181. //子表的模板列不做下拉框变换
  182. if($(this).parents("[formtype='edit']").length>0)return;
  183. $(this).htDicCombo();
  184. });
  185. });