captain-ui
Version:
有赞vue wap业务组件库
163 lines (155 loc) • 5.59 kB
JavaScript
var _components;
import each from 'lodash/each';
import fullfillImage from '@youzan/utils/fullfillImage';
import GoodsImg from './goodsImg';
import { SIZE, SHOW_BUY_BTN, SHOW_TITLE, SHOW_GROUP_NUMS } from '../constants';
var IMAGE_MAP = {
0: '!730x0.jpg',
1: '!520x0.jpg',
2: '!290x0.jpg'
};
var centToYuan = function centToYuan(money) {
return (money / 100).toFixed(2);
};
export default {
render: function render() {
var _vm = this;
var _h = _vm.$createElement;
var _c = _vm._self._c || _h;
return _c('li', {
staticClass: "cap-ump-groupon-goods",
class: _vm.goodsClass
}, [_c('a', {
attrs: {
"href": _vm.goodsUrl
}
}, [_c('div', {
staticClass: "cap-ump-groupon-goods__header"
}, [_c('cap-goods-img', {
attrs: {
"ratio": _vm.ratio,
"img-url": _vm.imageUrl,
"fill-style": _vm.imageFillStyle,
"goods-id": _vm.goodsInfo.id
}
}), _vm.isShowGrouponNum ? _c('div', {
staticClass: "cap-ump-groupon-goods__groupon-nums"
}, [_vm._v("\n " + _vm._s(_vm.goods.groupNums) + "人已团\n ")]) : _vm._e(), _vm.goods.imageIcon ? _c('i', {
staticClass: "cap-ump-groupon-goods__image-icon",
style: _vm.imageIconStyle
}) : _vm._e()], 1), _c('div', {
staticClass: "cap-ump-groupon-goods__body",
class: _vm.goodsBodyClass
}, [_vm.isShowTitle ? _c('div', {
staticClass: "cap-ump-groupon-goods__title"
}, [_vm._v("\n " + _vm._s(_vm.goods.title) + "\n ")]) : _vm._e(), _c('div', {
staticClass: "cap-ump-groupon-goods__goods-info"
}, [_c('p', {
staticClass: "cap-ump-groupon-goods__activity-tag"
}, [_vm._v(_vm._s(_vm.goods.conditionNum + _vm.activityTagText))]), _c('div', {
staticClass: "cap-ump-groupon-goods__groupon-price"
}, [_c('span', {
staticClass: "cap-ump-groupon-goods__groupon-price-symbol"
}, [_vm._v("¥")]), _c('span', {
staticClass: "cap-ump-groupon-goods__groupon-price-yuan"
}, [_vm._v(_vm._s(_vm.minActivityPriceObj.yuan))]), _c('span', {
staticClass: "cap-ump-groupon-goods__groupon-price-cent"
}, [_vm._v(_vm._s(_vm.minActivityPriceObj.cent))])]), _c('div', {
staticClass: "cap-ump-groupon-goods__origin-price"
}, [_vm._v("\n 单买价\n "), _c('span', {
staticClass: "cap-ump-groupon-goods__origin-price-symbol"
}, [_vm._v("¥")]), _c('span', {
staticClass: "cap-ump-groupon-goods__origin-price-value"
}, [_vm._v(_vm._s(_vm.minOriginPrice))])])]), _vm.isShowBuyBtn ? _c('div', {
staticClass: "cap-ump-groupon-goods__action"
}, [_vm._v("\n " + _vm._s(_vm.buttonText) + "\n ")]) : _vm._e()])])]);
},
name: 'cap-ump-groupon-goods',
components: (_components = {}, _components[GoodsImg.name] = GoodsImg, _components),
props: {
goods: Object,
size: Number,
showBuyBtn: Number,
buyBtnType: Number,
showTitle: Number,
showGrouponNum: Number,
isPreview: Boolean,
imageFillStyle: Number,
ratio: String
},
data: function data() {
return {
isEnd: this.goods.isEnd && !this.isPreview
};
},
computed: {
imageIconStyle: function imageIconStyle() {
return {
backgroundImage: "url(\"" + fullfillImage(this.goods.imageIcon) + "\")"
};
},
imageUrl: function imageUrl() {
return fullfillImage(this.goods.thumbUrl, IMAGE_MAP[this.size]);
},
goodsUrl: function goodsUrl() {
return this.goods.goodsUrl || 'javascript: void(0);';
},
goodsClass: function goodsClass() {
return {
'cap-ump-groupon-goods--soldout': !this.hasStock,
'cap-ump-groupon-goods--end': this.isEnd
};
},
goodsBodyClass: function goodsBodyClass() {
var _ref;
return _ref = {}, _ref["cap-ump-groupon-goods__body--btn-" + this.buyBtnType] = true, _ref['cap-ump-groupon-goods__body--no-btn'] = !this.isShowBuyBtn, _ref;
},
goodsInfo: function goodsInfo() {
return this.goods.goodsInfo || {};
},
minActivityPrice: function minActivityPrice() {
var min = this.getMinPrice(this.goods.skuPrices);
return centToYuan(min);
},
minActivityPriceObj: function minActivityPriceObj() {
var _this$minActivityPric = this.minActivityPrice.match(/(\d+)(\.\d+)/),
yuan = _this$minActivityPric[1],
cent = _this$minActivityPric[2];
return {
yuan: yuan,
cent: cent
};
},
minOriginPrice: function minOriginPrice() {
var min = this.getMinPrice(this.goods.originSkuPrice);
return centToYuan(min);
},
hasStock: function hasStock() {
return this.goodsInfo.totalStock > 0 || this.isPreview;
},
buttonText: function buttonText() {
return this.hasStock ? '去开团' : '去看看';
},
activityTagText: function activityTagText() {
return this.size === SIZE.SMALL ? '人团' : '人拼团价';
},
isShowTitle: function isShowTitle() {
return this.showTitle === SHOW_TITLE.SHOW;
},
isShowBuyBtn: function isShowBuyBtn() {
return this.showBuyBtn === SHOW_BUY_BTN.SHOW && this.size !== SIZE.SMALL;
},
isShowGrouponNum: function isShowGrouponNum() {
return this.showGrouponNum && this.showGrouponNum === SHOW_GROUP_NUMS.SHOW && this.goods.groupNums > 0;
}
},
methods: {
getMinPrice: function getMinPrice(collection) {
var min = Infinity;
each(collection, function (price) {
min = Math.min(min, price);
});
return min;
}
}
};