|
| 1 | +/** |
| 2 | + * 收藏页 -- 模型 |
| 3 | + * @author by Gavin 2016-7-28 |
| 4 | + */ |
| 5 | +var $ = require('home:widget/ui/zepto/zepto.js'); |
| 6 | +var B = require('home:widget/ui/backbone/backbone.js'); |
| 7 | + |
| 8 | +var Model = B.Model.extend({ |
| 9 | + defaults: { |
| 10 | + collections: null, // 收藏数据 |
| 11 | + cateList: null, // 分类列表 |
| 12 | + editable: null, // 编辑按钮是否可点击 |
| 13 | + editStatus: false, // 当前商品的编辑状态 true 表示正在编辑,false表示不是编辑状态 |
| 14 | + checkedNum: 0, // 选中商品的数量 |
| 15 | + deleteList: null, // 删除商品列表 |
| 16 | + errMsg: '', // 错误信息 |
| 17 | + deleteStatus: null, // 删除商品返回状态 |
| 18 | + maxCount: 0, // 收藏商品的总数 |
| 19 | + isEnd: false // 翻页,是否到头了 |
| 20 | + }, |
| 21 | + |
| 22 | + // 错误码统一管理 |
| 23 | + ERROR_CODE: { |
| 24 | + 0: '返回数据格式错误', |
| 25 | + 1: '数据返回异常', |
| 26 | + 2: '数据请求失败' |
| 27 | + }, |
| 28 | + |
| 29 | + /** |
| 30 | + * 当页面初始化时,立即请求数据 |
| 31 | + */ |
| 32 | + initialize: function () { |
| 33 | + this.getList(); |
| 34 | + }, |
| 35 | + |
| 36 | + /** |
| 37 | + * 获取收藏商品列表 |
| 38 | + * @param {opts} object |
| 39 | + * @param {opts.catid} number 分类ID |
| 40 | + * @param {opts.pn} number 起始页 |
| 41 | + * @param {opts.rn} number 结束页 |
| 42 | + */ |
| 43 | + getList: function ( opts ) { |
| 44 | + var _opts = this.formatData( opts ); |
| 45 | + this.fetch({ |
| 46 | + url: '/collect/sku/getlist', |
| 47 | + data: _opts, |
| 48 | + datatype: 'JSON', |
| 49 | + timeout: 20000, |
| 50 | + success: function ( _, data ) { |
| 51 | + if ( data && data.ret === 0 ) { |
| 52 | + if ( data.content && data.content.sku_list ) { |
| 53 | + var oldCollect = _.get('collections'); |
| 54 | + if ( oldCollect === null ) oldCollect = []; |
| 55 | + _.set({ |
| 56 | + // 每次请求的数据都追加到原来的数组上 |
| 57 | + collections: oldCollect.concat(data.content.sku_list), |
| 58 | + editable: data.content.total > 0 ? true : false, |
| 59 | + cateList: data.content.cat_list, |
| 60 | + maxCount: data.content.total |
| 61 | + }); |
| 62 | + _.setIsEnd(); // 是否滚动到头了 |
| 63 | + } else { |
| 64 | + _.set('errMsg', _.ERROR_CODE[0]); |
| 65 | + } |
| 66 | + } else { |
| 67 | + _.set('errMsg', _.ERROR_CODE[1]); |
| 68 | + } |
| 69 | + }, |
| 70 | + error: function ( _, err ) { |
| 71 | + _.set('errMsg', _.ERROR_CODE[2]); |
| 72 | + } |
| 73 | + }); |
| 74 | + }, |
| 75 | + |
| 76 | + /** |
| 77 | + * 滚动时请求数据,判断是否已经没有数据了 |
| 78 | + */ |
| 79 | + setIsEnd: function () { |
| 80 | + var currentCount = this.get('collections').length; |
| 81 | + var maxCount = this.get('maxCount'); |
| 82 | + if ( currentCount >= maxCount ) { |
| 83 | + this.set('isEnd', true); |
| 84 | + } |
| 85 | + }, |
| 86 | + |
| 87 | + /** |
| 88 | + * 格式化数据 |
| 89 | + * @param from this.getList() |
| 90 | + */ |
| 91 | + pn: 0, |
| 92 | + formatData: function ( opts ) { |
| 93 | + var defaults = { |
| 94 | + catid: '', |
| 95 | + pn: this.pn, |
| 96 | + rn: 12 |
| 97 | + }; |
| 98 | + var newOpt = $.extend({}, defaults, opts); |
| 99 | + return newOpt; |
| 100 | + }, |
| 101 | + |
| 102 | + /** |
| 103 | + * 切换商品编辑状态 |
| 104 | + */ |
| 105 | + changeEditStatus: function () { |
| 106 | + this.set('editStatus', !this.get('editStatus')); |
| 107 | + }, |
| 108 | + |
| 109 | + /** |
| 110 | + * 更新选中收藏商品的数量,同时更新删除商品列表 |
| 111 | + * @param {action} string 'add' or 'sub' 编辑收藏品的动作 |
| 112 | + * @param {skuId} number 商品sku_id |
| 113 | + */ |
| 114 | + updateNum: function ( action, skuId ) { |
| 115 | + if ( !action || !skuId ) return; |
| 116 | + var nowNum = +(this.get('checkedNum')); |
| 117 | + var deleteList = this.get('deleteList') || []; |
| 118 | + if ( action == 'add' ) { |
| 119 | + deleteList.push( skuId ); |
| 120 | + this.set({checkedNum: nowNum + 1, deleteList: deleteList}); |
| 121 | + } else if ( action == 'sub' ) { |
| 122 | + deleteList.splice(deleteList.indexOf(skuId), 1); |
| 123 | + this.set({checkedNum: nowNum - 1, deleteList: deleteList}); |
| 124 | + } |
| 125 | + }, |
| 126 | + |
| 127 | + /** |
| 128 | + * 批量删除收藏商品 |
| 129 | + */ |
| 130 | + batchDelete: function () { |
| 131 | + var deleteList = this.get('deleteList'); |
| 132 | + this.fetch({ |
| 133 | + url: '/collect/sku/del', |
| 134 | + data: {sku_list: deleteList}, |
| 135 | + datatype: 'json', |
| 136 | + timeout: 20000, |
| 137 | + success: function ( _, res ) { |
| 138 | + if ( res && res.ret === 0 ) { |
| 139 | + _.set('deleteStatus', res.content.status); |
| 140 | + } else { |
| 141 | + _.set('errMsg', that.ERROR_CODE[1]); |
| 142 | + } |
| 143 | + }, |
| 144 | + error: function ( _, err ) { |
| 145 | + _.set('errMsg', that.ERROR_CODE[2]); |
| 146 | + } |
| 147 | + }); |
| 148 | + } |
| 149 | +}); |
| 150 | + |
| 151 | +module.exports = Model; |
0 commit comments