buy.js 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368
  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. filterlock:true
  75. }
  76. },
  77. /**
  78. * 生命周期函数--监听页面加载
  79. */
  80. onLoad: function (options) {
  81. bindSearch(this);
  82. var initialheight = Math.round((app.globalData.windowh-300)/26/app.globalData.scale);
  83. //initialheight = initialheight-initialheight%2;
  84. var searchdata = Object.assign(this.data.searchdata,options);
  85. this.setData(Object.assign({
  86. initialheight:initialheight
  87. },stylemap));
  88. this.getWheres();
  89. this.getList(this.data.searchdata);
  90. this.loadBrandRecommend()
  91. },
  92. transformSearchData:function(searchdata){
  93. var para = Object.assign({},searchdata);
  94. var sortby = para.sortby;
  95. if(sortby){
  96. var sortinfo = sortby.split("&");
  97. para.order_key = sortinfo[0];
  98. para.order_val = sortinfo[1];
  99. }
  100. delete para.sortby;
  101. return para;
  102. },
  103. //获取筛选信息
  104. getWheres:function(){
  105. var _self = this;
  106. get(pathmap.wheres, {
  107. no_brand_series:1
  108. }, function (json) {
  109. _self.setData({
  110. wheres: json.data
  111. })
  112. })
  113. },
  114. loadBrandRecommend:function(){
  115. var _self = this;
  116. get(pathmap.brandrecommend, {
  117. }, function (json) {
  118. _self.setData({
  119. brandrecommend:json.data
  120. })
  121. })
  122. },
  123. getList:function(searchdata){
  124. var _self = this;
  125. var para = this.transformSearchData(searchdata);
  126. para.offset = 0;
  127. para.limit = this.data.limit;
  128. if(!this.data.lock){
  129. this.setData({
  130. lock:true
  131. })
  132. get(pathmap.searchcar, para, function (json) {
  133. var list = retCartData(json.data&&json.data.list);
  134. var obj = {
  135. lock:false,
  136. list:list,
  137. searchdata:searchdata,
  138. offset:_self.data.limit
  139. }
  140. if(json.data.total<=_self.data.limit){
  141. obj.hasloadall=true;
  142. }else{
  143. obj.hasloadall=false;
  144. }
  145. _self.setData(obj);
  146. if(list.length==0){
  147. _self.loadLikeCar()
  148. }
  149. })
  150. }
  151. },
  152. loadListMore:function(){
  153. var _self = this;
  154. var para = this.transformSearchData(this.data.searchdata);
  155. para.offset = this.data.offset;
  156. para.limit = this.data.limit;
  157. if(!this.data.lock&&!this.data.hasloadall){
  158. this.setData({
  159. lock:true
  160. })
  161. get(pathmap.searchcar, para, function (json) {
  162. var list = retCartData(json.data&&json.data.list);
  163. var nextoffset = _self.data.offset+_self.data.limit
  164. var obj = {
  165. lock:false,
  166. list:_self.data.list.concat(list),
  167. offset:nextoffset
  168. }
  169. if(json.data.total<=nextoffset){
  170. obj.hasloadall=true;
  171. }else{
  172. obj.hasloadall=false;
  173. }
  174. _self.setData(obj);
  175. })
  176. }
  177. },
  178. showFilter:function(e){
  179. var el = e.currentTarget;
  180. var name = el.dataset.name;
  181. if(name==this.data.selectbar){
  182. name=null;
  183. }
  184. if(name=="brand"&&!this.data.brandlist){
  185. this.getBrands();
  186. }
  187. this.setData({
  188. selectbar:name
  189. })
  190. },
  191. getBrands:function(){
  192. var _self=this;
  193. get(pathmap.getbrand, {}, function (json) {
  194. var initiallist = {};
  195. var brandlist = []
  196. for(var i = 65; i < 91; i++){
  197. initiallist[String.fromCharCode(i)] = [];
  198. }
  199. json.data.brand.forEach(function(item){
  200. if(Object.prototype.toString.call(initiallist[item.initial])=="[object Array]"){
  201. initiallist[item.initial].push(item);
  202. }
  203. })
  204. var inith = 562;
  205. var scale = app.globalData.scale;
  206. for(var name in initiallist){
  207. var l = initiallist[name].length;
  208. if(l>0){
  209. brandlist.push({
  210. initial:name,
  211. list:initiallist[name],
  212. top:inith/scale
  213. });
  214. inith = inith+45+l*79;
  215. }
  216. }
  217. _self.setData({wheres:Object.assign(_self.data.wheres,{brandlist:brandlist})})
  218. })
  219. },
  220. changeSort:function(e){
  221. var el = e.currentTarget;
  222. var name = el.dataset.sort;
  223. var searchdata = Object.assign(this.data.searchdata,{sortby:name});
  224. this.setData({
  225. selectbar:""
  226. })
  227. this.getList(searchdata);
  228. },
  229. changePrice:function(e){
  230. var el = e.currentTarget;
  231. var id = el.dataset.id;
  232. var searchdata = Object.assign(this.data.searchdata,{price:id});
  233. this.setData({
  234. selectbar:"" //关闭筛选卡
  235. })
  236. this.getList(searchdata);
  237. },
  238. loadLikeCar:function(){
  239. var _self = this;
  240. if(!this.data.like){
  241. get(pathmap.like, {
  242. offset: 0,
  243. limit: 10
  244. }, function (json) {
  245. var list = retCartData(json.data.list)
  246. _self.setData({
  247. like: list
  248. })
  249. })
  250. }
  251. },
  252. scrollInit:function(e){
  253. var init = e.currentTarget.dataset.init;
  254. this.setData({
  255. scrolltoinit:init
  256. })
  257. },
  258. getBrandDetail:function(e){
  259. var _self = this;
  260. var brandinfo = e.currentTarget.dataset;
  261. var series = [];
  262. get(pathmap.serieslist, {brand_id:brandinfo.id}, function (json) {
  263. series = json.data.car_series;
  264. _self.setData({
  265. serieslist:{
  266. belong:brandinfo,
  267. list:series
  268. },
  269. searchdata:Object.assign(_self.data.searchdata,{brand:brandinfo.id,car_series:""})
  270. })
  271. })
  272. // this.data.wheres.car_series.map(function(item){
  273. // if(item.brand_id == brand.brand_id){
  274. // series.push(item);
  275. // }
  276. // })
  277. // this.setData({
  278. // serieslist:{
  279. // belong:brand,
  280. // list:series
  281. // },
  282. // searchdata:Object.assign(this.data.searchdata,{brand:brand.brand_id,car_series:""})
  283. // })
  284. // get(pathmap.series, {
  285. // brand_id:brand.brand_id
  286. // }, function (json) {
  287. // var list = retCartData(json.data.list)
  288. // _self.setData({
  289. // serieslist: json.data
  290. // })
  291. // })
  292. },
  293. waitScroll:null,
  294. brandScroll:function(e) {
  295. var _self = this;
  296. //this.setData({ brandScrollTop: e.detail.scrollTop })
  297. if(this.waitScroll){
  298. try{
  299. clearTimeout(this.waitScroll);
  300. }catch(err){}
  301. }
  302. this.waitScroll = setTimeout(function(){
  303. var scrollinit = "";
  304. var list = _self.data.wheres.brandlist;
  305. for(var i=0,l=list.length;i<l;i++){
  306. if(e.detail.scrollTop<list[i].top){
  307. // scrollinit = list[i?i-1:i].initial;
  308. scrollinit=(i?i-1:i)
  309. break;
  310. }
  311. }
  312. _self.setData({scrollinit:scrollinit})
  313. },50)
  314. },
  315. selectSeries:function(e){
  316. var _self = this;
  317. var series = e.currentTarget.dataset.series;
  318. this.setData({
  319. serieslist:"",
  320. selectbar:"" //关闭品牌筛选卡
  321. })
  322. this.getList(Object.assign(this.data.searchdata,{car_series:series.car_series_id}));
  323. },
  324. filterBack:function(){
  325. this.setData({selectbar:"",serieslist:""})
  326. },
  327. getMoreFilter:function(e){
  328. var info = e.currentTarget.dataset;
  329. var obj = {};
  330. obj[info.type]=info.value;
  331. this.setData({searchdata:Object.assign(this.data.searchdata,obj)})
  332. },
  333. resetFilter:function(){
  334. this.setData({searchdata:Object.assign(this.data.searchdata,{
  335. car_age:"",
  336. mileage:"",
  337. transmission:"",
  338. displacement:"",
  339. emission:"",
  340. colour:""
  341. })})
  342. },
  343. moreSearch:function(){
  344. this.setData({selectbar:""})
  345. this.getList(this.data.searchdata);
  346. },
  347. lockFilter:function(e){
  348. if(e.detail&&!this.data.filterlock){
  349. this.setData({
  350. filterlock:true
  351. })
  352. }else if(!e.detail&&this.data.filterlock){
  353. this.setData({
  354. filterlock:false
  355. })
  356. }
  357. },
  358. submitsearchinfo:function(obj){
  359. this.getList(Object.assign(this.data.searchdata,obj));
  360. this.setData({searchshow:false})
  361. },
  362. })