useGoodsLimit.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /********************商品限购和商品起售********************/
  2. export function useGoodsLimit() {
  3. /**
  4. * 获取商品数量
  5. * params 商品库存(stock),是否开启限购(is_limit),限购类型(limit_type),限购数量(max_buy),起购(min_buy),已购买数量(has_buy)
  6. * return 商品数量,是否可以购买,原因
  7. ***/
  8. const getGoodsNum = (params: any = {}) => {
  9. let { stock, is_limit, limit_type, max_buy, min_buy, has_buy, num } = params;
  10. let temp_range = {
  11. 'up': { num: 0, tips: '', is_stock: false }, // 上限
  12. 'off': { num: 0, tips: '' } // 下限
  13. };
  14. let returnObj = {
  15. num: 0,
  16. max_num: 0,
  17. is_buy: true,
  18. tips: ''
  19. }
  20. /******************* 起售-start ************************/
  21. temp_range.off.num = min_buy > 0 ? min_buy : 1;
  22. if (min_buy) {
  23. temp_range.off.tips = `该商品起购${ params.min_buy }件`;
  24. }
  25. /******************* 起售-end ************************/
  26. /******************* 限购-start ************************/
  27. if (is_limit) {
  28. returnObj.is_buy = true;
  29. if (max_buy) {
  30. if (limit_type == 1) { //单次限购
  31. temp_range.up.num = max_buy;
  32. temp_range.up.tips = `该商品单次限购${ max_buy }件`;
  33. } else { // 单人限购
  34. let buyVal = params.max_buy - (params.has_buy || 0);
  35. temp_range.up.num = buyVal > 0 ? buyVal : 0;
  36. temp_range.up.tips = `该商品单次限购${ max_buy }件`;
  37. if (has_buy > 0) {
  38. temp_range.up.tips += `,已购${ has_buy }件`;
  39. }
  40. }
  41. if (temp_range.up.num > params.stock) {
  42. temp_range.up.num = params.stock;
  43. temp_range.up.is_stock = true;
  44. temp_range.up.tips = "商品库存不足";
  45. }
  46. }
  47. } else {
  48. returnObj.is_buy = true;
  49. temp_range.up.num = stock;
  50. temp_range.up.tips = "商品库存不足";
  51. }
  52. /******************* 限购-end ************************/
  53. if (temp_range.off.num > temp_range.up.num && temp_range.up.is_stock) {
  54. temp_range.up.tips = "商品库存不足";
  55. } else if (temp_range.off.num > temp_range.up.num) {
  56. returnObj.num = temp_range.up.num;
  57. } else {
  58. if (num <= temp_range.off.num) {
  59. returnObj.tips = temp_range.off.tips;
  60. }
  61. }
  62. return returnObj;
  63. }
  64. return {
  65. getGoodsNum
  66. }
  67. }