buy.js 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. import { get,post } from "../../common/request.js"
  2. import stylemap from "../../common/stylemap"
  3. import pathmap from "../../common/pathmap"
  4. import { retCartData } from "../../data/car"
  5. import bindSearch from "../../module/search/search.js"
  6. const app = getApp();
  7. // pages/buy/buy.js
  8. Page({
  9. /**
  10. * 页面的初始数据
  11. */
  12. data: {
  13. windowh: app.globalData.windowh,
  14. list:false,
  15. limit:10,
  16. pageindex:0,
  17. lock:false,
  18. searchfouce:false,
  19. selectbar:null,
  20. hasloadall:false,
  21. filters:[
  22. {
  23. title:"排序",
  24. name:"sortby"
  25. },
  26. {
  27. title:"品牌",
  28. name:"brand"
  29. },
  30. {
  31. title:"价格",
  32. name:"price"
  33. },
  34. {
  35. title:"更多",
  36. name:"more"
  37. }
  38. ],
  39. sortbymap:[
  40. {
  41. title:"默认排序",
  42. value:""
  43. },
  44. {
  45. title:"价格最低",
  46. value:"price&asc"
  47. },
  48. {
  49. title:"价格最高",
  50. value:"price&desc"
  51. },
  52. {
  53. title:"车龄最短",
  54. value:"car_age&asc"
  55. },
  56. {
  57. title:"里程最少",
  58. value:"mileage&asc"
  59. },
  60. {
  61. title:"最新发布",
  62. value:"new&asc"
  63. }
  64. ],
  65. searchdata:{
  66. sortby:"",
  67. price:"",
  68. car_age:"",
  69. mileage:"",
  70. transmission:"",
  71. displacement:"",
  72. emission:"",
  73. colour:""
  74. }
  75. },
  76. /**
  77. * 生命周期函数--监听页面加载
  78. */
  79. onLoad: function (options) {
  80. bindSearch(this);
  81. var initialheight = (app.globalData.windowh-300)/26;
  82. var searchdata = Object.assign(this.data.searchdata,options);
  83. this.setData(Object.assign({
  84. initialheight:initialheight
  85. },stylemap));
  86. this.getWheres();
  87. this.getList(this.data.searchdata);
  88. this.loadBrandRecommend()
  89. },
  90. transformSearchData:function(searchdata){
  91. var para = Object.assign({},searchdata);
  92. var sortby = para.sortby;
  93. if(sortby){
  94. var sortinfo = sortby.split("&");
  95. para.order_key = sortinfo[0];
  96. para.order_val = sortinfo[1];
  97. }
  98. delete para.sortby;
  99. return para;
  100. },
  101. //获取筛选信息
  102. getWheres:function(){
  103. var _self = this;
  104. get(pathmap.wheres, {
  105. }, function (json) {
  106. var brandlist = {};
  107. json.data.brandlist = []
  108. for(var i = 65; i < 91; i++){
  109. brandlist[String.fromCharCode(i)] = [];
  110. }
  111. json.data.brand.forEach(function(item){
  112. if(Object.prototype.toString.call(brandlist[item.initial])=="[object Array]"){
  113. brandlist[item.initial].push(item);
  114. }
  115. })
  116. var inith = 562;
  117. var scale = app.globalData.scale;
  118. for(var name in brandlist){
  119. var l = brandlist[name].length;
  120. if(l>0){
  121. json.data.brandlist.push({
  122. initial:name,
  123. list:brandlist[name],
  124. top:inith/scale
  125. });
  126. inith = inith+45+l*79;
  127. }
  128. }
  129. _self.setData({
  130. wheres: json.data
  131. })
  132. })
  133. },
  134. loadBrandRecommend:function(){
  135. var _self = this;
  136. get(pathmap.brandrecommend, {
  137. }, function (json) {
  138. })
  139. },
  140. getList:function(searchdata){
  141. var _self = this;
  142. var para = this.transformSearchData(searchdata);
  143. para.offset = 0;
  144. para.limit = this.data.limit;
  145. if(!this.data.lock){
  146. this.setData({
  147. lock:true
  148. })
  149. get(pathmap.searchcar, para, function (json) {
  150. var list = retCartData(json.data&&json.data.list);
  151. var obj = {
  152. lock:false,
  153. list:list,
  154. searchdata:searchdata,
  155. offset:_self.data.limit
  156. }
  157. if(json.data.total<=_self.data.limit){
  158. obj.hasloadall=true;
  159. }else{
  160. obj.hasloadall=false;
  161. }
  162. _self.setData(obj);
  163. if(list.length==0){
  164. _self.loadLikeCar()
  165. }
  166. })
  167. }
  168. },
  169. loadListMore:function(){
  170. var _self = this;
  171. var para = this.transformSearchData(this.data.searchdata);
  172. para.offset = this.data.offset;
  173. para.limit = this.data.limit;
  174. if(!this.data.lock&&!this.data.hasloadall){
  175. this.setData({
  176. lock:true
  177. })
  178. get(pathmap.searchcar, para, function (json) {
  179. var list = retCartData(json.data&&json.data.list);
  180. var nextoffset = _self.data.offset+_self.data.limit
  181. var obj = {
  182. lock:false,
  183. list:_self.data.list.concat(list),
  184. offset:nextoffset
  185. }
  186. if(json.data.total<=nextoffset){
  187. obj.hasloadall=true;
  188. }else{
  189. obj.hasloadall=false;
  190. }
  191. _self.setData(obj);
  192. })
  193. }
  194. },
  195. showFilter:function(e){
  196. var el = e.currentTarget;
  197. var name = el.dataset.name;
  198. if(name==this.data.selectbar){
  199. name=null;
  200. }
  201. this.setData({
  202. selectbar:name
  203. })
  204. },
  205. changeSort:function(e){
  206. var el = e.currentTarget;
  207. var name = el.dataset.sort;
  208. var searchdata = Object.assign(this.data.searchdata,{sortby:name});
  209. this.setData({
  210. selectbar:""
  211. })
  212. this.getList(searchdata);
  213. },
  214. changePrice:function(e){
  215. var el = e.currentTarget;
  216. var id = el.dataset.id;
  217. var searchdata = Object.assign(this.data.searchdata,{price:id});
  218. this.setData({
  219. selectbar:"" //关闭筛选卡
  220. })
  221. this.getList(searchdata);
  222. },
  223. loadLikeCar:function(){
  224. var _self = this;
  225. if(!this.data.like){
  226. get(pathmap.like, {
  227. offset: 0,
  228. limit: 10
  229. }, function (json) {
  230. var list = retCartData(json.data.list)
  231. _self.setData({
  232. like: list
  233. })
  234. })
  235. }
  236. },
  237. scrollInit:function(e){
  238. var init = e.currentTarget.dataset.init;
  239. this.setData({
  240. scrolltoinit:init
  241. })
  242. },
  243. getBrandDetail:function(e){
  244. var _self = this;
  245. var brand = e.currentTarget.dataset.brand;
  246. var series = [];
  247. this.data.wheres.car_series.map(function(item){
  248. if(item.brand_id == brand.brand_id){
  249. series.push(item);
  250. }
  251. })
  252. this.setData({
  253. serieslist:{
  254. belong:brand,
  255. list:series
  256. },
  257. searchdata:Object.assign(this.data.searchdata,{brand:brand.brand_id,car_series:""})
  258. })
  259. // get(pathmap.series, {
  260. // brand_id:brand.brand_id
  261. // }, function (json) {
  262. // var list = retCartData(json.data.list)
  263. // _self.setData({
  264. // serieslist: json.data
  265. // })
  266. // })
  267. },
  268. waitScroll:null,
  269. brandScroll:function(e) {
  270. var _self = this;
  271. //this.setData({ brandScrollTop: e.detail.scrollTop })
  272. if(this.waitScroll){
  273. try{
  274. clearTimeout(this.waitScroll);
  275. }catch(err){}
  276. }
  277. this.waitScroll = setTimeout(function(){
  278. var scrollinit = "";
  279. var list = _self.data.wheres.brandlist;
  280. for(var i=0,l=list.length;i<l;i++){
  281. if(e.detail.scrollTop<list[i].top){
  282. scrollinit = list[i?i-1:i].initial;
  283. break;
  284. }
  285. }
  286. _self.setData({scrollinit:scrollinit})
  287. },50)
  288. },
  289. selectSeries:function(e){
  290. var _self = this;
  291. var series = e.currentTarget.dataset.series;
  292. this.setData({
  293. serieslist:"",
  294. selectbar:"" //关闭品牌筛选卡
  295. })
  296. this.getList(Object.assign(this.data.searchdata,{car_series:series.car_series_id}));
  297. },
  298. filterBack:function(){
  299. this.setData({selectbar:""})
  300. },
  301. getMoreFilter:function(e){
  302. var info = e.currentTarget.dataset;
  303. var obj = {};
  304. obj[info.type]=info.value;
  305. this.setData({searchdata:Object.assign(this.data.searchdata,obj)})
  306. },
  307. resetFilter:function(){
  308. this.setData({searchdata:Object.assign(this.data.searchdata,{
  309. car_age:"",
  310. mileage:"",
  311. transmission:"",
  312. displacement:"",
  313. emission:"",
  314. colour:""
  315. })})
  316. },
  317. moreSearch:function(){
  318. this.setData({selectbar:""})
  319. this.getList(this.data.searchdata);
  320. }
  321. })