Selector.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. 
  2. var Selector = function (guid, title, colums, dataUrl, qparams, multipleChoice, handlers, getselectRows, IsAsyncPage, customQuery) {
  3. var win;
  4. var tree;
  5. var pitchOnDataGrid;
  6. var leftQuery;
  7. var rightTopQuey;
  8. var waitTable;
  9. getselectRows = getselectRows || function () { return undefined; }
  10. customQuery = customQuery || function () { }
  11. var hasEasyUI = function (elementTypeName) {
  12. if (window.top.$(elementTypeName).length > 0) {
  13. return true;
  14. } else {
  15. return false;
  16. }
  17. }
  18. //private 创建Html元素
  19. var createElement = function (elementTypeName, elements, parentElments) {
  20. if (typeof parentElments != "undefined" && typeof elements == "string") {
  21. parentElments.append(elements);
  22. return parentElments.find(elementTypeName);
  23. }
  24. else {
  25. if (typeof elements == "string")
  26. return $(elements);
  27. }
  28. };
  29. var createLinkButton = function (elements) {
  30. var links = elements.find("a");
  31. for (var i = 0; i < links.length; i++) {
  32. $(links[i]).linkbutton();
  33. }
  34. };
  35. var createTableString = function (name) {
  36. var table = "<table";
  37. return table.concat(" name='", name, "'>", "</table>");
  38. };
  39. var registEvent = function (target, eventType, handler) {
  40. target.unbind(eventType, handler);
  41. target.bind(eventType, handler);
  42. }
  43. //private 选择
  44. var selectWait = function (node) {
  45. var selectItem = waitTable.datagrid("getChecked");
  46. var exitRows = pitchOnDataGrid.datagrid("getRows");
  47. if (!multipleChoice) {
  48. if (exitRows.length > 0 || selectItem.length > 1) {
  49. window.top.$.messager.alert("系统消息", "一次只能选择一个" + title);
  50. return;
  51. }
  52. }
  53. for (var i = 0; i < selectItem.length; i++) {
  54. if (!hasContainer(exitRows, selectItem[i]))
  55. pitchOnDataGrid.datagrid("appendRow", selectItem[i]);
  56. }
  57. if (!multipleChoice)
  58. closeWin();
  59. };
  60. function hasContainer(container, item) {
  61. var key = getKey();
  62. for (i = 0; i < container.length; i++) {
  63. if (container[i][key] == item[key])
  64. return true;
  65. }
  66. return false;
  67. }
  68. function getKey() {
  69. var key;
  70. $(colums.split(",")).each(function (i, column) {
  71. var keyValue = column.split(":");
  72. if (keyValue[0] == "Key") {
  73. key = keyValue[1];
  74. return;
  75. }
  76. });
  77. return key;
  78. }
  79. function getQueryColumns() {
  80. var queryColumns = new Array();
  81. $(colums.split(",")).each(function (i, column) {
  82. var keyValue = column.split(":");
  83. if (keyValue.length == 4 && keyValue[3] == "query") {
  84. queryColumns.push({
  85. text: keyValue[0], feild: keyValue[1]
  86. });
  87. }
  88. });
  89. return queryColumns;
  90. }
  91. function pagerFilter(data) {
  92. if (typeof data.length == 'number' && typeof data.splice == 'function') { // is array
  93. data = {
  94. total: data.length,
  95. rows: data
  96. };
  97. }
  98. var dg = waitTable;
  99. var opts = dg.datagrid('options');
  100. var pager = dg.datagrid('getPager');
  101. // pager.pagination({
  102. // onSelectPage: function (pageNum, pageSize) {
  103. // opts.pageNumber = pageNum;
  104. // opts.pageSize = pageSize;
  105. // pager.pagination('refresh', {
  106. // pageNumber: pageNum,
  107. // pageSize: pageSize
  108. // });
  109. // dg.datagrid('loadData', data);
  110. // }
  111. // });
  112. if (!data.originalRows) {
  113. data.originalRows = (data.rows);
  114. }
  115. var start = (opts.pageNumber - 1) * parseInt(opts.pageSize);
  116. var end = start + parseInt(opts.pageSize);
  117. data.rows = (data.originalRows.slice(start, end));
  118. return data;
  119. }
  120. var InitGridFile = function (dataGrid, pagination, url, title) {
  121. var columnsStr = getColumnsJson();
  122. return dataGrid.datagrid({
  123. url: pagination ? url : "",
  124. queryParams: pagination ? getParamsJson() : "",
  125. pagination: pagination,
  126. loadFilter: (pagination == false || IsAsyncPage == true) ? function (d) { if (d.rows == undefined) d.rows = d; return d; } : pagerFilter,
  127. pageSize: 50,
  128. pageList: [5, 25, 50],
  129. title: title,
  130. height: pagination == false ? 200 : 230,
  131. width: 750,
  132. loadMsg: "请稍等....",
  133. singleSelect: !multipleChoice,
  134. columns: [$.parseJSON(columnsStr)],
  135. onLoadSuccess: (pagination && multipleChoice) ? loadSelectRows : function (data) { return data; }
  136. });
  137. }
  138. function loadSelectRows(data) {
  139. //已选择的值和选择的列名
  140. var selectParams = getselectRows();
  141. if (selectParams == undefined)
  142. return;
  143. if (selectParams.selectRows != undefined && selectParams.selectRows != "") {
  144. var selectValues = selectParams.selectRows.split(";");
  145. var valueField = selectParams.valueField;
  146. var rows = data.originalRows;
  147. var selectRows = new Array();
  148. $(rows).each(function (i, j) {
  149. if ($.inArray(j[valueField].toString(), selectValues) >= 0)
  150. selectRows.push(j);
  151. })
  152. pitchOnDataGrid.datagrid("loadData", selectRows);
  153. } else {
  154. pitchOnDataGrid.datagrid("loadData", []);
  155. }
  156. getselectRows = function () { return undefined; }
  157. return data;
  158. }
  159. var getColumnsJson = function () {
  160. var columnsStr = "["
  161. $(colums.split(",")).each(function (i, column) {
  162. var keyValue = column.split(":");
  163. columnsStr = columnsStr.concat('{"field":', "\"", keyValue[1], "\",", '"title":', "\"", keyValue[0], "\"");
  164. if (keyValue[0] == "Key") {
  165. columnsStr = columnsStr.concat(', "checkbox": "true"');
  166. }
  167. if (keyValue[2] != undefined) {
  168. columnsStr = columnsStr.concat(', "width":', "\"", keyValue[2], "\"");
  169. }
  170. if (keyValue[3] == "hidden") {
  171. columnsStr = columnsStr.concat(', "hidden":', "true");
  172. }
  173. columnsStr = columnsStr.concat(', "align":', "\"center\"");
  174. columnsStr = columnsStr.concat("},");
  175. });
  176. columnsStr = columnsStr.substring(0, columnsStr.length - 1);
  177. columnsStr = columnsStr.concat("]");
  178. return columnsStr;
  179. }
  180. var getParamsJson = function () {
  181. var columnsStr = "{";
  182. $(qparams.split(",")).each(function (i, item) {
  183. var keyValue = item.split(":");
  184. columnsStr = columnsStr.concat("\"", keyValue[0], "\":");
  185. columnsStr = columnsStr.concat("\"", keyValue[1], "\",");
  186. });
  187. columnsStr = columnsStr.substring(0, columnsStr.length - 1);
  188. columnsStr = columnsStr.concat("}");
  189. return $.parseJSON(columnsStr);
  190. }
  191. var deleteSelectUser = function () {
  192. var deleteSource = pitchOnDataGrid.datagrid("getChecked");
  193. if (deleteSource.length > 0) {
  194. for (var i = 0; i < deleteSource.length; i++) {
  195. var rowIndex = pitchOnDataGrid.datagrid("getRowIndex", deleteSource[i]);
  196. pitchOnDataGrid.datagrid("deleteRow", rowIndex);
  197. }
  198. } else {
  199. window.top.$.messager.alert("系统消息", "未选中任何行!");
  200. }
  201. };
  202. var close = function () {
  203. var btnSelectOk = $((rightTopQuey.find("a"))[2]);
  204. btnSelectOk.unbind();
  205. btnSelectOk.bind("click", function () {
  206. var selectUser = pitchOnDataGrid.datagrid("getData");
  207. var rcount = pitchOnDataGrid.datagrid("getRows").length;
  208. if (rcount > 0) {
  209. if (handlers instanceof Array) {
  210. for (var i = 0; i < handlers.length; i++) {
  211. handlers[i](selectUser);
  212. }
  213. } else if (typeof handlers != "undefined") {
  214. handlers(selectUser);
  215. }
  216. }
  217. if (!multipleChoice && rcount > 0) {
  218. pitchOnDataGrid.datagrid("deleteRow", 0);
  219. }
  220. win.window("close");
  221. });
  222. };
  223. var queryInfo = function () {
  224. var queryStr = new Array();
  225. var columns = getQueryColumns();
  226. columns.push({ feild: "keyword" });
  227. $.each(columns, function (i, column) {
  228. var value = leftQuery.find("input[name='" + column.feild + "']").val();
  229. queryStr.push("\"" + column.feild + "\":\"" + value + "\"");
  230. });
  231. var params = $.parseJSON("{" + queryStr.join(",") + "}");
  232. waitTable.datagrid('load', params);
  233. }
  234. var createQueryString = function () {
  235. var columns = getQueryColumns();
  236. leftQuery = '<div class="left_query">';
  237. $.each(columns, function (i, column) {
  238. leftQuery = leftQuery.concat(column.text + ":");
  239. leftQuery = leftQuery.concat("<input type='text' name='" + column.feild + "'/>&nbsp;&nbsp;");
  240. });
  241. leftQuery = leftQuery.concat('<a href="javascript:void(0);" name="btnSelectOk" >查询</a>&nbsp;&nbsp;');
  242. leftQuery = leftQuery.concat("</div>");
  243. return leftQuery;
  244. }
  245. function closeWin() {
  246. $((rightTopQuey.find("a"))[2]).click();
  247. }
  248. this.show = function () {
  249. if (!hasEasyUI("div[name='" + guid + "winWarp2']")) {
  250. var warpElement = "<div class='select_warp clear' name='" + guid + "winWarp2'></div>";
  251. var warp = window.top.$(warpElement).appendTo(window.top.document.body);
  252. var wheight = 335;
  253. if (multipleChoice)
  254. wheight = 540;
  255. win = warp.window({
  256. width: 775,
  257. height: wheight,
  258. modal: true,
  259. maximizable: false,
  260. collapsible: false,
  261. shadow: false,
  262. title: title + '信息选择',
  263. onBeforeOpen: function () {
  264. $('select:not(.easyui-combobox)').hide(); //IE6中解决select遮住问题
  265. if (waitTable != undefined && multipleChoice) {
  266. loadSelectRows(waitTable.datagrid("getData"));
  267. }
  268. },
  269. onBeforeClose: function () {
  270. $('select:not(.easyui-combobox)').show();
  271. }
  272. });
  273. leftQuery = createElement("div[class='left_query']", createQueryString(), warp);
  274. customQuery(leftQuery, $(leftQuery.find("a")[0]));
  275. var elementTop = createElement(".select_top",
  276. "<div class='select_top postion_border panel-margin custompanel'></div>", warp);
  277. var elementBottom = createElement(".selectOrg_bottom",
  278. "<div class='selectOrg_bottom postion_border forMultiple custompanel'></div>", warp);
  279. var top_panel_warp = createElement("div[panel_postion='org_top']", "<div class='panel_Data' panel_postion='org_top'></div>", elementTop);
  280. // top_panel_warp.panel({
  281. // width: 750,
  282. // height: 235,
  283. // title: title + '信息',
  284. // closable: false,
  285. // collapsible: true,
  286. // minimizable: false,
  287. // maximizable: false
  288. // });
  289. waitTable = createElement("table[name='waitSelectDataGrid']", createTableString("waitSelectDataGrid"), top_panel_warp);
  290. waitTable = (InitGridFile(waitTable, true, dataUrl, title + '信息'));
  291. createLinkButton(leftQuery);
  292. var rightQuery = '<p class="select_button" pPostion="select_button"><a href="javascript:void(0);" name="btnSelect" >选择</a>&nbsp;&nbsp;<a href="javascript:void(0);" class="forMultiple" name="btnDel">删除</a>';
  293. rightQuery = rightQuery.concat("&nbsp;&nbsp;<a href='javascript:void(0);' name='btnSelectOk' class='forMultiple'>确定</a></p>");
  294. rightTopQuey = createElement("p[pPostion='select_button']", rightQuery, elementTop);
  295. createLinkButton(rightTopQuey);
  296. var left_panel_warp = createElement("div[panel_postion='bottom_select']", "<div class='panel_Data select_Data' panel_postion='bottom_select'></div>", elementBottom);
  297. // var pitchOnPanel = left_panel_warp.panel({
  298. // width: 750,
  299. // height: 220,
  300. // title: '已选' + title,
  301. // closable: false,
  302. // collapsible: true,
  303. // minimizable: false,
  304. // maximizable: false
  305. // });
  306. var pitchOnTable = createElement("table[name='pitchOnSelectDataGrid']", createTableString("pitchOnSelectDataGrid"), left_panel_warp);
  307. pitchOnDataGrid = (InitGridFile(pitchOnTable, false, "", '已选' + title));
  308. if (!multipleChoice)
  309. warp.find('.forMultiple').hide();
  310. //查询
  311. registEvent($((leftQuery.find("a")[0])), "click", queryInfo);
  312. //选择
  313. registEvent($(rightTopQuey.find("a")[0]), "click", selectWait);
  314. //删除
  315. registEvent($(rightTopQuey.find("a")[1]), "click", deleteSelectUser);
  316. //确认
  317. close(handlers);
  318. } else {
  319. window.top.$("div[name='" + guid + "winWarp2']").window('open');
  320. }
  321. }
  322. }