Cascadequery.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. /**
  2. * 说明
  3. * [formtype="window"]主要是处理子表弹出框模式,
  4. * table.listTable 处理子表的块模式和表内模式
  5. */
  6. if (typeof QueryUI == 'undefined') {
  7. QueryUI = {};
  8. }
  9. /**
  10. * queryedCacheData保存当前页面的已经查询出来的数据
  11. * 数据格式:
  12. * queryedCacheData{
  13. *
  14. * }
  15. */
  16. QueryUI.queryedCacheData={};
  17. QueryUI.init = function(){
  18. $("select[selectquery]").each(function(){
  19. var me = $(this),
  20. selectquery = me.attr("selectquery");
  21. if (!selectquery)
  22. return true;
  23. selectquery = selectquery.replaceAll("'", "\"");
  24. var queryJson = JSON2.parse(selectquery);
  25. var query = queryJson.query;
  26. for (var i = 0; i < query.length; i++) {
  27. var field;
  28. if(query[i].trigger=='-1')
  29. continue;
  30. // isMain是true 就是绑定主表的字段
  31. if (query[i].isMain=="true") {
  32. field = $(".formTable [name$='" + query[i].trigger + "']");
  33. } else {
  34. field = me.parents('table.listTable,[formtype="window"]').find("[name='" + query[i].trigger + "']");
  35. field.unbind("change");
  36. }
  37. if (field != "")
  38. QueryUI.change(field, me, queryJson);
  39. }
  40. QueryUI.getvalue(me, queryJson);
  41. });
  42. };
  43. QueryUI.change = function(field, SelectObj, queryJson) {
  44. field.bind("change", function() {
  45. QueryUI.getvalue(SelectObj, queryJson);
  46. });
  47. };
  48. QueryUI.replaceValue = function(objValue) {
  49. return objValue.replaceAll(",", "#,");
  50. }
  51. QueryUI.getvalue = function(SelectObj, queryJson) {
  52. var query = queryJson.query;
  53. var fieldValue, subfield, checkfield,field;
  54. var querydataStr = "{";
  55. for (var i = 0; i < query.length; i++) {
  56. if (query[i].isMain=="true") {
  57. //输入框,下拉框,数据字典
  58. subfield = $(".formTable [name$='" + query[i].trigger + "']");
  59. // 选择器
  60. field = $(".formTable [name$='" + query[i].trigger + "ID']");
  61. // 单选、复选框
  62. checkfield = $(":checked[name$='" + query[i].trigger + "']");
  63. } else {
  64. subfield = SelectObj.parents('table.listTable,[formtype="window"]').find("[name='" + query[i].trigger + "']");
  65. field = SelectObj.parents('table.listTable,[formtype="window"]').find("input[name='" + query[i].trigger + "ID']");
  66. checkfield = SelectObj.parents('table.listTable,[formtype="window"]').find(":checked[name='" + query[i].trigger + "']");
  67. }
  68. switch (query[i].controlType) {
  69. //没有绑定任何表字段controlType=-1而有预设值时
  70. case '-1':break;
  71. // 输入框,下拉框,数据字典是一类直接获取值
  72. case '1' :
  73. case '2' :
  74. case '3' :
  75. case '11' :
  76. case '15' :
  77. fieldValue = subfield.val();
  78. break;
  79. // 选择器
  80. case '4' :
  81. case '5' :
  82. case '6' :
  83. case '7' :
  84. case '8' :
  85. case '17' :
  86. case '18' :
  87. case '19' :
  88. fieldValue =field.val();
  89. fieldValue = QueryUI.replaceValue(fieldValue);
  90. break;
  91. // 单选、复选框
  92. case '13' :
  93. case '14' :
  94. var tempvalue;
  95. checkfield.each(function() {
  96. var obj = $(this);
  97. if (typeof(tempvalue) != "undefined"
  98. && tempvalue != "") {
  99. tempvalue += "#," + obj.val();
  100. } else {
  101. tempvalue = obj.val();
  102. }
  103. });
  104. fieldValue = tempvalue;
  105. tempvalue = "";
  106. break;
  107. }
  108. //如果对应的绑定字段有值则使用该值,没有值则判断设计时有没有输入预设值,有预设值则使用,没有则不做输入条件
  109. if (typeof(fieldValue) != "undefined" && fieldValue != ""&& fieldValue!=null) {
  110. querydataStr += query[i].condition + ":\"" + fieldValue + "\",";
  111. }else{
  112. if(query[i].initValue!='')
  113. querydataStr += query[i].condition + ":\"" + query[i].initValue + "\",";
  114. }
  115. }
  116. if (querydataStr.length > 1){
  117. querydataStr = querydataStr.substring(0, querydataStr.length - 1);
  118. querydataStr += "}";
  119. }else{
  120. querydataStr += "}";
  121. }
  122. var queryedCacheDataString="";
  123. //如果querydataStr为{},说明是查询全部数据,引用一个"queryedCacheDataString"标识全部数据
  124. if(querydataStr=="{}"){
  125. queryedCacheDataString="queryedCacheDataString"
  126. }else{
  127. queryedCacheDataString=querydataStr;
  128. }
  129. var cacheData=QueryUI.getCascaData(queryJson.name,queryedCacheDataString);
  130. SelectObj.empty();
  131. if(cacheData){
  132. QueryUI.handData(cacheData,queryJson,SelectObj);
  133. }else{
  134. queryCond = {
  135. alias : queryJson.name,
  136. querydata : querydataStr,
  137. page : 0,
  138. pagesize : 0
  139. };
  140. DoQuery(queryCond, function(data) {
  141. if (data.errors || data.list.length < 1) {
  142. return;
  143. }
  144. QueryUI.handData(data.list,queryJson,SelectObj);
  145. QueryUI.setCascaData(queryJson.name,queryedCacheDataString,data.list);
  146. },true);
  147. };
  148. };
  149. /**
  150. * 获取缓存数据
  151. */
  152. QueryUI.getCascaData = function(alias,querydata){
  153. if(!QueryUI.queryedCacheData)return;
  154. var tempAlias=QueryUI.queryedCacheData[alias];
  155. if(!tempAlias)return ;
  156. var tempData=tempAlias[querydata];
  157. return tempData;
  158. };
  159. /**
  160. * 设置缓存数据
  161. */
  162. QueryUI.setCascaData = function(alias,querydata,data){
  163. var aliasObj = QueryUI.queryedCacheData[alias] || {};
  164. aliasObj[querydata] = data;
  165. QueryUI.queryedCacheData[alias] = aliasObj;
  166. };
  167. /**
  168. * 获取数据以后经过处理,显示多下拉列表中
  169. */
  170. QueryUI.handData=function(data,queryJson,currSelectObj){
  171. var selectObj=$(currSelectObj);
  172. var oFrag=document.createDocumentFragment();
  173. for (var i = 0; i < data.length; i++) {
  174. var dataobj = data[i];
  175. var datavalue = dataobj[queryJson.binding.value.toLowerCase()];
  176. var datakey = dataobj[queryJson.binding.key.toLowerCase()];
  177. var isSame=false;
  178. //判断是否有重复的数据
  179. for (var j=0; j<i;j++){
  180. if(datakey== data[j][queryJson.binding.key.toLowerCase()]){
  181. isSame=true;
  182. break;
  183. }
  184. }
  185. if(isSame) continue;
  186. var opt = $("<option>").val(datakey).text(datavalue);
  187. oFrag.appendChild(opt[0]);
  188. }
  189. selectObj.append(oFrag);
  190. var tempValue = selectObj.attr("val");
  191. selectObj.val(tempValue);
  192. selectObj.trigger("change");
  193. };