common.js 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. /**
  2. * @authors Mzong(mzong121491@gmail.com)
  3. * @date 2019-01-18 11:15
  4. * @requires layui
  5. * @version $1.1.0$
  6. */
  7. layui.define("layer", function(exports){
  8. //提示:模块也可以依赖其它模块,如:layui.define('layer', callback);
  9. var $ = layui.jquery,
  10. form = layui.form;
  11. // 返回的对象
  12. var returnObj = {
  13. /**
  14. * 省市县三级联动
  15. *
  16. * @param { string } [form] [form是layui.form对象]
  17. * @param {string} [province] [省容器的name名字 ]
  18. * eg:<select name="province">
  19. * @param {string} [city] [省容器的name名字]
  20. * @param {string} [district] [县容器的name名字]
  21. * @return {undefined} [无返回值]
  22. */
  23. showCity: function(AreaDatas,province, city, district) {
  24. //AreaData是地址传过来的json对象
  25. var AreaData = $.rawCitiesData;
  26. console.log("AreaDatas",AreaDatas)
  27. // var AreaData = AreaDatas;
  28. if("undefined" == typeof AreaData) {
  29. layer.open({
  30. title: '系统提示'
  31. ,content: '调用showCity之前请引入地址数据'
  32. });
  33. return;
  34. }
  35. var htmlProvince = '',
  36. htmlCity = '',
  37. htmlDistrict = '',
  38. cityData = '',
  39. districtData = '',
  40. $province = $('select[name='+province+']'),
  41. $city = $('select[name='+city+']'),
  42. $district = $('select[name='+district+']'),
  43. provVal = $province.attr('data-area') || '', // 省默认值
  44. cityVal = $city.attr('data-area') || '', // 市默认值
  45. distVal = $district.attr('data-area') || ''; // 县默认值
  46. $province.find('option').not(':first').remove();
  47. $city.find('option').not(':first').remove();
  48. $district.find('option').not(':first').remove();
  49. form.render('select');
  50. // 加载省数据
  51. loadProvince();
  52. function loadProvince() {
  53. AreaData.forEach(function(v, i) {
  54. htmlProvince += '<option value='+v.code+'>'+v.name+'</option>';
  55. });
  56. $province.append(htmlProvince);
  57. // 默认选中省
  58. defaultSelect($province, provVal, function(code) {
  59. cityData = findPlace(AreaData, code);
  60. loadCity(cityData, true);
  61. });
  62. form.render('select');
  63. }
  64. // 加载城市数据
  65. function loadCity(city, hasDefault) {
  66. $city.find('option').not(':first').remove();
  67. htmlCity = '';
  68. var city = city || [];
  69. city.forEach(function(v, i) {
  70. htmlCity += '<option value='+v.code+'>'+v.name+'</option>';
  71. });
  72. $city.append(htmlCity);
  73. // 默认加载才执行,手动选中不执行
  74. if (hasDefault) {
  75. // 默认选中城市
  76. defaultSelect($city, cityVal, function(code) {
  77. // console.log(code)
  78. // 加载默认城市数据
  79. districtData = findPlace(cityData, code);
  80. loadDistrict(districtData, true);
  81. });
  82. }
  83. form.render('select');
  84. }
  85. // 加载县数据
  86. function loadDistrict(districtData, hasDefault) {
  87. $district.find('option').not(':first').remove();
  88. htmlDistrict = '';
  89. var districtData = districtData || [];
  90. districtData.forEach(function(v, i) {
  91. htmlDistrict += '<option value='+v.code+'>'+v.name+'</option>';
  92. });
  93. $district.append(htmlDistrict);
  94. if (hasDefault) {
  95. // 默认选中县
  96. defaultSelect($district, distVal);
  97. }
  98. form.render('select');
  99. }
  100. // 查找地点数据
  101. function findPlace(data, code) {
  102. var resData = [];
  103. data.forEach(function(v, i) {
  104. if (v.code === code) {
  105. resData = v.sub
  106. }
  107. });
  108. return resData;
  109. }
  110. /*
  111. * 查找默认选中项
  112. * @param {object} jq元素
  113. * @param {string} 默认值
  114. * @param {function} 回调函数
  115. */
  116. function defaultSelect($el, SelectVal, callback) {
  117. $('option', $el).each(function(i, el) {
  118. var $this = $(this);
  119. var optVal = $this.html();
  120. var code;
  121. if (optVal == SelectVal) {
  122. $this.attr("selected", true);
  123. code = $this.val();
  124. // 加载默认城市数据
  125. callback && callback(code);
  126. }
  127. });
  128. }
  129. // 省选择
  130. form.on('select('+province+')', function(data) {
  131. var code = data.value;
  132. // console.log(data.elem); //得到select原始DOM对象
  133. // console.log(code); //得到被选中的值
  134. if (code != '') {
  135. cityData = findPlace(AreaData, code);
  136. loadCity(cityData);
  137. loadDistrict();
  138. } else {
  139. loadCity();
  140. loadDistrict();
  141. }
  142. // console.log(data.othis); //得到美化后的DOM对象
  143. });
  144. // 市选择
  145. form.on('select('+city+')', function(data){
  146. var code = data.value;
  147. if (code != '') {
  148. districtData = findPlace(cityData, code);
  149. loadDistrict(districtData);
  150. // console.log(data.elem); //得到select原始DOM对象
  151. } else {
  152. loadDistrict();
  153. }
  154. // console.log(data.othis); //得到美化后的DOM对象
  155. });
  156. form.on('select('+district+')', function(data){
  157. // console.log(data.elem); //得到select原始DOM对象
  158. // console.log(data.value); //得到被选中的值
  159. // console.log(data.othis); //得到美化后的DOM对象
  160. });
  161. },
  162. /**
  163. * 获取省市县数据
  164. *
  165. * @param { object } [address] [address eg:广东省广州市天河区]
  166. * @return {object} [address][根据code码返回地址名称]
  167. */
  168. getCity: function(address) {
  169. //AreaData是地址传过来的json对象
  170. var AreaData = $.rawCitiesData;
  171. if("undefined" == typeof AreaData) {
  172. layer.open({
  173. title: '系统提示'
  174. ,content: '调用getCity之前请引入地址数据'
  175. });
  176. return;
  177. }
  178. var province = address.province,
  179. city = address.city,
  180. district = address.district,
  181. provinceName = '',
  182. cityName = '',
  183. districtName = '';
  184. function findIndex(arr, target) {
  185. return arr.findIndex(function(v, i) {
  186. return target == v.code;
  187. })
  188. }
  189. if (province) {
  190. var findProvinceIndex = findIndex(AreaData, province);
  191. provinceName = AreaData[findProvinceIndex].name;
  192. }
  193. if (province && city) {
  194. var findCityIndex = findIndex(AreaData[findProvinceIndex].sub, city);
  195. cityName = AreaData[findProvinceIndex].sub[findCityIndex].name;
  196. }
  197. if (province && city && district) {
  198. var findDistrictIndex = findIndex(AreaData[findProvinceIndex].sub[findCityIndex].sub, district);
  199. districtName = AreaData[findProvinceIndex].sub[findCityIndex].sub[findDistrictIndex].name;
  200. }
  201. return {
  202. provinceName: provinceName,
  203. cityName: cityName,
  204. districtName: districtName
  205. }
  206. }
  207. }
  208. // exports module
  209. exports('common', returnObj);
  210. });