index.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445
  1. $(init);
  2. $.extend($.ligerDefaults.Grid, {
  3. rowHeight: 24,
  4. fixedCellHeight: false,
  5. frozen: false,
  6. async: true,
  7. headerRowHeight: 30,
  8. allowUnSelectRow: true
  9. });
  10. //去掉 大于小于包括,并改变顺序
  11. $.ligerDefaults.Filter.operators['string'] =
  12. $.ligerDefaults.Filter.operators['text'] =
  13. ["like", "equal", "notequal", "startwith", "endwith"];
  14. //扩展一个 数字输入 的编辑器
  15. $.ligerDefaults.Grid.editors['numberbox'] = {
  16. create: function (container, editParm)
  17. {
  18. var column = editParm.column;
  19. var precision = column.editor.precision;
  20. var input = $("<input type='text' style='text-align:right' class='l-text' />");
  21. input.bind('keypress', function (e)
  22. {
  23. var keyCode = window.event ? e.keyCode : e.which;
  24. return keyCode >= 48 && keyCode <= 57 || keyCode == 46 || keyCode == 8;
  25. });
  26. input.bind('blur', function ()
  27. {
  28. var value = input.val();
  29. input.val(parseFloat(value).toFixed(precision));
  30. });
  31. container.append(input);
  32. return input;
  33. },
  34. getValue: function (input, editParm)
  35. {
  36. return parseFloat(input.val());
  37. },
  38. setValue: function (input, value, editParm)
  39. {
  40. var column = editParm.column;
  41. var precision = column.editor.precision;
  42. input.val(value.toFixed(precision));
  43. },
  44. resize: function (input, width, height, editParm)
  45. {
  46. input.width(width).height(21);
  47. }
  48. };
  49. $.ligerDefaults.Grid.editors['string'] =
  50. $.ligerDefaults.Grid.editors['text'] = {
  51. create: function (container, editParm)
  52. {
  53. var input = $("<input type='text' style='border:1px solid #d3d3d3;'/>");
  54. container.append(input);
  55. return input;
  56. },
  57. getValue: function (input, editParm)
  58. {
  59. return input.val();
  60. },
  61. setValue: function (input, value, editParm)
  62. {
  63. input.val(value);
  64. },
  65. resize: function (input, width, height, editParm)
  66. {
  67. input.width(width).height(21);
  68. }
  69. };
  70. $.ligerDefaults.Grid.editors['select'] =
  71. {
  72. create: function (container, editParm)
  73. {
  74. var column = editParm.column;
  75. var input = $("<select></select");
  76. container.append(input);
  77. var data = column.editor.data;
  78. if (!data) return input;
  79. $(data).each(function ()
  80. {
  81. input.append('<option value="' + this.value + '">' + (this.text || this.name) + '</option>');
  82. });
  83. return input;
  84. },
  85. getValue: function (input, editParm)
  86. {
  87. return input.val();
  88. },
  89. setValue: function (input, value, editParm)
  90. {
  91. if (value)
  92. input.val(value);
  93. },
  94. resize: function (input, width, height, editParm)
  95. {
  96. input.css({ width: width, height: 22 });
  97. }
  98. };
  99. var root = "../../";
  100. var fieldTypeData = [{ value: 'text', text: '文本框' }, { value: 'textarea', text: '多行文本框' }, { value: 'date', text: '日期控件' }, { value: 'select', text: '下拉框' }, { value: 'digits', text: '整数输入框' }, { value: 'number', text: '浮点数输入框' }, { value: 'hidden', text: '隐藏控件'}];
  101. function init()
  102. {
  103. bulidMainGrid();
  104. }
  105. function bulidMainGrid()
  106. {
  107. var rows = [];
  108. $(columns).each(function ()
  109. {
  110. var row = {
  111. name: this.text,
  112. display: this.text,
  113. listwidth: 180,
  114. type: 'text',
  115. width: 220,
  116. labelwidth: 100,
  117. space: 30,
  118. newline: true,
  119. search_newline : false,
  120. inlist: true,
  121. insearch: false,
  122. inform: true,
  123. SourceTableName: this.sourceTableName,
  124. SourceTableIDField: this.sourceTableIDField,
  125. SourceTableTextField: this.sourceTableTextField
  126. };
  127. row.allownull = this.isNullable ? true : false;
  128. row.type = this.inputType;
  129. if (this.isAutoKey || this.isInForeignKey)
  130. {
  131. row.inlist = false;
  132. row.type = "hidden";
  133. }
  134. if (row.SourceTableName)
  135. {
  136. row.type = "select";
  137. }
  138. if (this.isAutoKey)
  139. {
  140. row.insearch = false;
  141. }
  142. rows.push(row);
  143. });
  144. var gridPanle = $('<div style="margin:7px;"></div>').appendTo('body');
  145. window.grid = gridPanle.ligerGrid({
  146. columns: [
  147. { display: '基本信息', columns: [
  148. { display: '字段名', name: 'name', align: 'left', width: 110, minWidth: 30 },
  149. { display: '显示名', name: 'display', align: 'left', width: 110, minWidth: 30, editor: { type: 'text'} },
  150. { display: '是否为空', name: 'allownull', width: 55, render: checkboxRender}]
  151. },
  152. { display: '列表页设置', columns: [
  153. { display: '列表显示', name: 'inlist', width: 55, render: checkboxRender },
  154. { display: '列表宽度', name: 'listwidth', align: 'right', width: 50, minWidth: 30, editor: { type: 'numberbox'} },
  155. { display: '搜索显示', name: 'insearch', width: 55, render: checkboxRender },
  156. { display: '是否新行', name: 'search_newline', width: 55, render: checkboxRender } ]
  157. },
  158. { display: '表单页设置', columns: [
  159. { display: '表单显示', name: 'inform', width: 55, render: checkboxRender },
  160. { display: '控件类型', name: 'type', align: 'left', width: 80, minWidth: 30, editor: { type: 'select', data: fieldTypeData }, render: fieldTypeRender },
  161. { display: '标签宽度', name: 'labelwidth', align: 'right', width: 55, editor: { type: 'numberbox'} },
  162. { display: '控件宽度', name: 'width', align: 'right', width: 55, editor: { type: 'numberbox'} },
  163. { display: '间隔宽度', name: 'space', align: 'right', width: 55, editor: { type: 'numberbox'} },
  164. { display: '是否新行', name: 'newline', width: 55, render: checkboxRender },
  165. { display: '分组', name: 'group', width: 100, editor: { type: 'text'}}]
  166. }
  167. ],data: { Rows: rows }, usePager: false, toolbar: createGridToolbar(),
  168. enabledEdit: true, clickToEdit: true, fixedCellHeight: false, inWindow: false, rownumbers: true,
  169. width: '98%', height: '100%',heightDiff:-14, rowHeight: 24
  170. });
  171. }
  172. function createGridToolbar(tName)
  173. {
  174. var items = [];
  175. items.push({ text: '预览效果', click: preview, img: "../icons/application_view_list.png" });
  176. items.push({ text: '导出JSON', click: outjson, img: "../icons/printer_48.png" });
  177. items.push({ text: '上移', click: moveup, img: "../icons/sign_up.gif" });
  178. items.push({ text: '下移', click: movedown, img: "../icons/arrow_down.gif" });
  179. //items.push({ text: '自动翻译字段', click: translate, img: "../icons/world.gif" });
  180. return { items: items };
  181. function clear()
  182. {
  183. var managers = $.ligerui.find($.ligerui.controls.Input);
  184. for (var i = 0, l = managers.length; i < l; i++)
  185. {
  186. if (exits(managers[i].id))
  187. {
  188. managers[i].destroy();
  189. }
  190. }
  191. }
  192. function exits(id)
  193. {
  194. for (var i = 0, l = window.grid.rows.length; i < l; i++)
  195. {
  196. var name = window.grid.rows[i].name;
  197. if (name == id) return true;
  198. }
  199. return false;
  200. }
  201. function preview()
  202. {
  203. clear();
  204. var o = bulidData();
  205. var out = [];
  206. out.push('<div>');
  207. out.push(' <div style=" width:98%">');
  208. out.push(' <div class="searchtitle">');
  209. out.push(' <span>搜索</span><img src="../icons/searchtool.gif" />');
  210. out.push(' <div class="togglebtn"></div> ');
  211. out.push(' </div>');
  212. out.push(' <div class="navline" style="margin-bottom:4px; margin-top:4px;"></div>');
  213. out.push(' <div class="searchbox">');
  214. out.push(' <form></form>');
  215. out.push(' <div class="l-clear"></div>');
  216. out.push(' </div>');
  217. out.push(' </div>');
  218. out.push(' <div class="listgrid"></div> ');
  219. out.push('</div>');
  220. var listPanle = $(out.join(''));
  221. var searchform = $("form:first", listPanle);
  222. searchform.ligerForm({ fields: o.search });
  223. var listgrid = $(".listgrid:first", listPanle).ligerGrid({
  224. columns: o.grid,
  225. toolbar: listToolbar(), data: $.extend(true, {}, AllProductData),
  226. width: '98%', height: 400, checkbox: false
  227. });
  228. //搜索 按钮
  229. lab.appendSearchButtons(searchform, listgrid, false, function ()
  230. {
  231. listgrid.options.data = $.extend(true, {}, AllProductData);
  232. });
  233. $.ligerDialog.open({
  234. title: '预览 列表 界面',
  235. target: listPanle,
  236. width: 950, height: 530, isResize: true,
  237. buttons: [{ text: '关闭', onclick: function (item, dialog) { dialog.hide(); } }]
  238. });
  239. function listToolbar()
  240. {
  241. var items = [];
  242. items.push({ text: '增加', click: grid_add, img: "../icons/page_add.png" });
  243. items.push({ text: '修改', click: grid_edit, img: "../icons/edit.gif" });
  244. items.push({ text: '删除', click: grid_delete, img: "../icons/delete.png" });
  245. items.push({ text: '高级自定义查询', click: grid_search, icon: 'search2' });
  246. return { items: items };
  247. function grid_add()
  248. {
  249. clear();
  250. showDetail(o.form);
  251. }
  252. function grid_edit()
  253. {
  254. clear();
  255. var selected = listgrid.getSelected();
  256. if (!selected) { lab.tip('请选择行'); return; }
  257. showDetail(o.form, selected);
  258. }
  259. function grid_delete()
  260. {
  261. listgrid.deleteSelectedRow();
  262. }
  263. function grid_search()
  264. {
  265. listgrid.options.data = $.extend(true, {}, AllProductData);
  266. listgrid.showFilter();
  267. }
  268. }
  269. }
  270. function showDetail(fields, data)
  271. {
  272. var form = $('<form></form> ');
  273. form.ligerForm({ fields: fields });
  274. $.ligerDialog.open({
  275. title: '预览 明细 界面',
  276. target: form,
  277. width: 850, height: 400, isResize: true,
  278. buttons: [{ text: '关闭', onclick: function (item, dialog) { dialog.hide(); } }]
  279. });
  280. lab.loadForm(form, data);
  281. }
  282. function outjson()
  283. {
  284. var d = bulidData();
  285. var textarea = $("<textarea />").width(400).height(120);
  286. textarea.val($.ligerui.toJSON(d));
  287. $.ligerDialog.open({
  288. title: 'JSON',
  289. target: textarea.wrap('<div></div>').parent().css('margin', 10),
  290. width: 470, height: 200, isResize: true,
  291. buttons: [{ text: '关闭', onclick: function (item, dialog) { dialog.hide(); } }]
  292. });
  293. }
  294. function translate()
  295. {
  296. var list = [];
  297. for (var i = 0, l = grid.rows.length; i < l; i++)
  298. {
  299. var o = grid.rows[i];
  300. list.push(o.name);
  301. }
  302. lab.ajax({
  303. loading:'正在翻译中...',
  304. url: root + "handle/translate.ashx",
  305. data: { data: list.join(',') },
  306. success: function (results)
  307. {
  308. for (var i = 0, l = grid.rows.length; i < l; i++)
  309. {
  310. grid.rows[i].display = results[i];
  311. }
  312. grid.reRender({ column: grid.columns[1] });
  313. }
  314. });
  315. }
  316. function moveup()
  317. {
  318. var selected = grid.getSelected();
  319. if (!selected) return;
  320. grid.up(selected);
  321. }
  322. function movedown()
  323. {
  324. var selected = grid.getSelected();
  325. if (!selected) return;
  326. grid.down(selected);
  327. }
  328. }
  329. //获取 表单和表格 结构 所需要的数据
  330. function bulidData()
  331. {
  332. var griddata = [], searchdata= [], formdata= [];
  333. for (var i = 0, l = grid.rows.length; i < l; i++)
  334. {
  335. var o = grid.rows[i];
  336. if (o.inlist)
  337. griddata.push({ display: o.display, name: o.name, width: o.listwidth });
  338. if (o.insearch)
  339. searchdata.push(getFieldData(o, true));
  340. if (o.inform)
  341. formdata.push(getFieldData(o));
  342. }
  343. return { grid: griddata, search: searchdata, form: formdata };
  344. function getFieldData(o, search)
  345. {
  346. if (o.type == "hidden") return { name: o.name, type: o.type };
  347. var field = {
  348. display: o.display,
  349. name: o.name,
  350. newline: o.newline,
  351. labelWidth: o.labelwidth || o.labelWidth,
  352. width: o.width,
  353. space: o.space,
  354. type: o.type
  355. };
  356. if (!search)
  357. {
  358. field.validate = getValidate(o);
  359. field.group = o.group;
  360. field.groupicon = "../icons/communication.gif";
  361. }
  362. else
  363. {
  364. field.cssClass = "field";
  365. field.newline = o.search_newline ? true : false;
  366. }
  367. return field;
  368. }
  369. function getValidate(o)
  370. {
  371. if (o.validate) return o.validate;
  372. if (!o.allownull) return { required: true };
  373. return null;
  374. }
  375. }
  376. //字段类型渲染器
  377. function fieldTypeRender(r, i, value)
  378. {
  379. for (var i = 0, l = fieldTypeData.length; i < l; i++)
  380. {
  381. var o = fieldTypeData[i];
  382. if (o.value == value) return o.text || o.name;
  383. }
  384. return "文本框";
  385. }
  386. //是否类型的模拟复选框的渲染函数
  387. function checkboxRender(rowdata, rowindex, value, column)
  388. {
  389. var iconHtml = '<div class="chk-icon';
  390. if (value) iconHtml += " chk-icon-selected";
  391. iconHtml += '"';
  392. iconHtml += ' rowid = "' + rowdata['__id'] + '"';
  393. iconHtml += ' gridid = "' + this.id + '"';
  394. iconHtml += ' columnname = "' + column.name + '"';
  395. iconHtml += '></div>';
  396. return iconHtml;
  397. }
  398. //是否类型的模拟复选框的点击事件
  399. $("div.chk-icon").live('click', function ()
  400. {
  401. var grid = $.ligerui.get($(this).attr("gridid"));
  402. var rowdata = grid.getRow($(this).attr("rowid"));
  403. var columnname = $(this).attr("columnname");
  404. var checked = rowdata[columnname];
  405. grid.updateCell(columnname, !checked, rowdata);
  406. });
  407. //搜索框 收缩/展开
  408. $(".searchtitle .togglebtn").live('click', function ()
  409. {
  410. if ($(this).hasClass("togglebtn-down")) $(this).removeClass("togglebtn-down");
  411. else $(this).addClass("togglebtn-down");
  412. var searchbox = $(this).parent().nextAll("div.searchbox:first");
  413. searchbox.slideToggle('fast');
  414. });