cascade_bak.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. /**
  2. * 请求接口格式
  3. * {
  4. }
  5. */
  6. layui.define(['jquery', 'form', 'layer'], function (exports) {
  7. /**
  8. *返回当前元素在数组中的下标
  9. * @param {Object} val
  10. */
  11. Array.prototype.indexOf = function (val) {
  12. for (var i = 0; i < this.length; i++) {
  13. if (this[i] == val) return i;
  14. }
  15. return -1;
  16. };
  17. var $ = layui.jquery,
  18. form = layui.form,
  19. layer = layui.layer;
  20. var Class = function (obj) {
  21. var _this = this;
  22. _this.elem = obj.elem || 'body';//级联容器
  23. _this.url = obj.url || {};//级联接口
  24. _this.formParm = [];//表单参数名
  25. typeof obj.url == 'object' && ($.each(obj.url, function (key, value) {
  26. _this.formParm.push(key);
  27. }));
  28. _this.box = $('body');//子集容器
  29. _this.boxs = [];//所有子集
  30. _this.title = obj.title || null;//标题
  31. _this.hostParm = {//默认请求参数名
  32. idName: 'id',
  33. rowsName: 'rows'
  34. };
  35. _this.valObj = {};//初始值对象
  36. _this[_this.hostParm['rowsName']] = obj[_this.hostParm['rowsName']] || 10000;//请求条数
  37. for (var i in obj.hostParm) {//自定义请求参数名
  38. _this.hostParm[i] = obj.hostParm[i];
  39. }
  40. _this.data = {};//默认请求参数
  41. _this.data[_this.hostParm['rowsName']] = _this[_this.hostParm['rowsName']];//赋值参数
  42. _this.verify = obj.verify || {};
  43. $.extend(this, obj);
  44. _this.init();//初始化
  45. };
  46. /**
  47. * 初始化父下拉列表
  48. */
  49. Class.prototype.init = function () {
  50. var _this = this;
  51. _this.box = $('<div class="layui-form-item"></div>');//select 容器
  52. _this.title && (_this.box.append('<label class="layui-form-label">' + _this.title + '</label>'));//是否显示标题
  53. //初始化值
  54. if(JSON.stringify(_this.valObj) != '{}'){
  55. _this.val();
  56. }
  57. _this.element(_this.formParm[0]);
  58. };
  59. Class.prototype.element = function (name, code,callback) {
  60. var _this = this;
  61. if (!_this.url[name]) {
  62. // layer.msg("没有配置下级接口",{icon:2,time:600});
  63. return _this;
  64. }
  65. _this.data[_this.hostParm['idName']] = code || null;
  66. $.ajax({
  67. url: _this.url[name],
  68. data: _this.data,
  69. async: 'false',
  70. success: function (res) {
  71. var select_id = "select_" + new Date().getTime();
  72. _this.boxs[_this.formParm.indexOf(name)] = $(_this.selectHtml(select_id, name, res));
  73. _this.box.append(_this.boxs[_this.formParm.indexOf(name)]);//往select容器添加包装好的select对象
  74. $(_this.elem).append(_this.box);//追加到表单容器
  75. _this.event(name);//绑定事件
  76. //执行赋值回调函数
  77. !!callback && callback(name, select_id);
  78. typeof _this.valObj[name] != 'undefined' && ($("#" + select_id).val(_this.valObj[name]));
  79. form.render();
  80. }
  81. });
  82. };
  83. /**
  84. * 包装Html
  85. */
  86. Class.prototype.selectHtml = function (select_id, name, res) {
  87. this.tempSelectId = new Date().getTime();
  88. var html = '<div class="layui-input-inline"><select lay-search name="' + name + '" lay-verify="' + this.verify[name] + '" lay-filter="' + name + this.tempSelectId + '" id="' +
  89. select_id + '"><option value="">请选择……</option>';
  90. for (var xyz in res.data) {
  91. html += '<option value="' + res.data[xyz].id + '">' + res.data[xyz].name + '</option>';
  92. }
  93. return (html + '</select></div>');
  94. };
  95. Class.prototype.event = function (name) {
  96. var _this = this;
  97. var x = _this.formParm.indexOf(name);
  98. form.on("select(" + name + this.tempSelectId + ")", function (obj) {
  99. _this.removeBox(x);
  100. _this.element(_this.formParm[x - 0 + 1], obj.value);
  101. _this.click(obj);
  102. return false;
  103. });
  104. };
  105. Class.prototype.click = function (obj) {
  106. };
  107. Class.prototype.removeBox = function (i) {
  108. var _this = this;
  109. for (var x = i + 1; x < _this.boxs.length; x++) {
  110. _this.boxs[x].remove();
  111. }
  112. };
  113. /**
  114. * 初始值
  115. */
  116. Class.prototype.val = function (obj) {
  117. var _this = this;
  118. $.extend(_this.valObj, obj);
  119. (function temp(i) {
  120. if (_this.valObj[_this.formParm[i + 1]]) {
  121. _this.element(_this.formParm[i - 0 + 1], _this.valObj[_this.formParm[i]], function (name, select_id) {
  122. if (i == -1) {
  123. _this.removeBox(i);
  124. }
  125. temp(++i);
  126. });
  127. }
  128. })(-1);
  129. return _this;
  130. };
  131. var cascade = {};
  132. cascade.render = function (e) {
  133. var i = new Class(e = e || {});
  134. t = $(e.elem);
  135. return t[0] ? i : layui.hint().error("layui.cascade 没有找到" + e.elem + "元素");
  136. };
  137. exports('cascade', cascade);
  138. });