@yorkjs/hive-biz 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -0
- package/dist/hive-biz.esm.js +2 -0
- package/dist/hive-biz.esm.js.map +1 -0
- package/dist/hive-biz.esm.min.js +2 -0
- package/dist/hive-biz.esm.min.js.map +1 -0
- package/dist/hive-biz.js +2 -0
- package/dist/hive-biz.js.map +1 -0
- package/dist/hive-biz.min.js +2 -0
- package/dist/hive-biz.min.js.map +1 -0
- package/package.json +56 -0
- package/types/index.d.ts +8 -0
- package/types/selector/combo.d.ts +16 -0
- package/types/selector/comboSelector.d.ts +24 -0
- package/types/selector/comboSpecSelector.d.ts +58 -0
- package/types/selector/constant.d.ts +29 -0
- package/types/selector/customSpecSelector.d.ts +53 -0
- package/types/selector/customization.d.ts +28 -0
- package/types/selector/product.d.ts +25 -0
- package/types/selector/specSelector.d.ts +29 -0
- package/types/selector/type.d.ts +514 -0
- package/types/util/adjoinMartix.d.ts +13 -0
- package/types/util/dataType.d.ts +4 -0
- package/types/util/specAdjoinMartix.d.ts +10 -0
package/README.md
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{isNaN as t,cloneDeep as i,isEqual as e,find as s,flattenDeep as o,every as n,fill as c,pick as r,findIndex as u,filter as a}from"lodash-es";import*as m from"@yorkjs/hive";import h,{moneyToDisplay as d}from"@yorkjs/hive";function p(i){if(null==i||t(i))return!0;let e=!1;switch(Object.prototype.toString.call(i)){case"[object Object]":e=0===Object.keys(i).length;break;case"[object Array]":e=0===i.length;break;case"[object String]":0===i.trim().length&&(e=!0)}return e}const l=1e7,_="decrease";class f{comboGroupList;constructor(t){this.comboGroupList=i(t.comboGroupList)}getComboGroupList(){return i(this.comboGroupList)}updateComboGroupList(t){return!e(this.comboGroupList,t)&&(this.comboGroupList=i(t),!0)}setItemSelected(t,i,e){const s=this.comboGroupList[t];if(!s)return;const{items:o,min_count:n,max_count:c}=s,r=o[i];if(!r)return;let u=0;if(o.forEach(t=>{1===t.selected&&u++}),2===e){if(1===n&&u<=1)return}else if(1===c)o.forEach((t,e)=>{e!==i&&(t.selected=2)});else if(u>=c)return;r.selected=e}setItemCount(t,i,e){const s=this.comboGroupList[t];if(!s)return;const o=s.items[i];if(!o)return;const{items:n}=s,c=o.min_count,r=o.max_count,u=s.max_count,a=this.checkIsFixedSelect(o);let m=0;n.forEach(t=>{t.id===o.id?m+=e:1===t.selected&&(m+=t.count)}),-1!==u&&m>u||-1!==r&&e>r||e<0||m<0||a&&e<c||(o.count=e,o.selected=0===e?2:1)}setComboChildSelected(t,i,e){const s=this.comboGroupList[t];if(!s)return;const o=s.items[i];if(!o||p(o.children))return;const{sku:n,count:c}=e,r=n.id;o.children.forEach(t=>{t.combo_sku.id===r?(t.selected=1,t.count=c):t.selected=2}),o.selected=1}setComboSkuSelected(t,i,e){const s=this.comboGroupList[t];if(!s)return;const o=s.items[i];if(!o)return;const{sku:n,customization_item_list:c}=e,r=this.checkComboItemIsUseSelectCount(o);o.combo_sku={id:n.id,name:n.name,stock_count:o.combo_sku?.stock_count??l},c&&(o.combo_customization_item_list=c),r&&0===o.count&&(o.count=1),this.setItemSelected(t,i,1)}formatSelectSkuComboItemList(){return C(this.comboGroupList)}validate(){return L(this.comboGroupList)}reconstructFromCart(t){this.comboGroupList=k(this.comboGroupList,t)}checkIsFixedSelect(t){const{selected:i,selectable:e}=t;return 1===i&&2===e}checkComboItemIsUseSelectCount(t){const{min_count:i,max_count:e}=t;return i!==e&&e>1}}function k(t,i){return p(i)?t:t.map(t=>{const e=t.items.map(t=>{const e=s(i,i=>i.id===t.id);if(!e)return 1===t.selectable&&(t.selected=2),t;const{children:o,combo_product:n}=t;return p(o)?(n&&(e.combo_sku_id&&(t.combo_sku={id:e.combo_sku_id,name:e.combo_sku_name,stock_count:t.combo_sku?.stock_count??l}),e.combo_product_customization_item_list&&(t.combo_customization_item_list=[e.combo_product_customization_item_list])),t.count=e.count,t.selected=1,t):(o.forEach(t=>{t.combo_sku.id===e.combo_sku_id?(t.selected=1,t.count=e.count):t.selected=2}),t)});return{...t,items:e}})}function C(t){return t.map(t=>{const i=[],e=t.name;return t.items.forEach(t=>{const{id:n,name:c,count:r,selected:u,children:a,combo_sku:m,combo_sku_type:h,combo_customization_item_list:d}=t;if(!p(a)){const t=s(a,t=>1===t.selected);return void(t&&i.push({id:n,name:`${c}(${t.name})`,combo_group_name:e,combo_sku_id:t.combo_sku.id,count:t.count}))}if(2!==u)if(1!==h){if(m){const t={id:n,name:c,count:r,combo_sku_id:m.id,combo_sku_name:m.name,combo_group_name:e};d&&(t.combo_product_customization_item_list=o(d)),i.push(t)}}else i.push({id:n,name:c,count:r,combo_group_name:e})}),i})}function L(t){let i=!0,e="";const o=C(t);return t.forEach((t,n)=>{if(!i)return;const{items:c,min_count:r,max_count:u}=t,a=t.name;if(c.forEach((t,o)=>{if(!i)return;const{count:n,min_count:c,selected:r,children:u,combo_sku:m,combo_product:h}=t;if(2!==r){if(!p(u)){return void(p(s(u,t=>1===t.selected))&&(i=!1,e=`【${a}】:第${o+1}个商品,请选择定制项`))}if(h&&p(m))return i=!1,void(e=`【${a}】:第${o+1}个商品,请选择规格`);n<c&&(i=!1,e=`【${a}】:第${o+1}个商品,至少选择 ${c} 件`)}}),!i)return;let m=0;if(o[n]?.forEach(t=>{m+=t.count}),m<r)return i=!1,void(e=`【${a}】:至少选择 ${r} 件商品`);m>u&&(i=!1,e=`【${a}】:最多选择 ${u} 件商品`)}),e}function g(t){const{items:i,repeatable:e,min_count:s,max_count:o}=t;if(n(i,t=>2===t.selectable))return"";const c=[];s===o?c.push(`请选择${s}项`):(s>0&&c.push(`至少选择${s}项`),o>0&&c.push(`最多可选${o}项`)),1===e&&c.push("可重复选");let r=0;return i.forEach(t=>{1===t.selected&&(r+=t.count)}),r>0&&c.push(`已选${r}`),c.join(",")}class S{vertex=[];quantity=0;adjoinArray=[];constructor(t){this.vertex=t,this.quantity=this.vertex.length,this.adjoinArray=[],this.init()}init(){this.adjoinArray=c(new Array(this.quantity*this.quantity),0)}setAdjoinVertexs(t,i,e){const s=this.vertex.indexOf(t);i.forEach((t,i)=>{const o=this.vertex.indexOf(t),n=this.adjoinArray[s*this.quantity+o];"number"!=typeof n?this.adjoinArray[s*this.quantity+o].push(e):this.adjoinArray[s*this.quantity+o]=n>1?[n,e]:e})}getVertexCol(t){const i=this.vertex.indexOf(t),e=[];return this.vertex.forEach((t,s)=>{e.push(this.adjoinArray[i+this.quantity*s])}),e}getCollection(t){const i=t.map(t=>this.getVertexCol(t));let e=[];return i.forEach((i,s)=>{i.some(t=>0!==t)&&e.push(t[s])}),e}getUnions(t){const i=t.map(t=>this.getVertexCol(t));let e=[];return this.vertex.forEach((t,s)=>{const o=i.map(t=>t[s]).filter(t=>1!==t);this.isItemEqual(o)&&e.push(t)}),e}isItemEqual(t){if(t.includes(0))return!1;let i=-1;return t.length&&(t.some(t=>("number"==typeof t&&(i=t),"number"==typeof t)),-1===i)?this.isArrayUnions(t):t.every(t=>"number"==typeof t?t===i:t.includes(i))}isArrayUnions(t){return!!t.length&&t[0].some(i=>t.every(t=>t.includes(i)))}}class b extends S{specList=[];specCombinationList=[];constructor(t,i){super(t.reduce((t,i)=>[...t,...i.list],[])),this.specList=t,this.specCombinationList=i,this.initSpec(),this.initSameLevel()}initSpec(){this.specCombinationList.forEach((t,i)=>{this.fillInSpec(t.specs,i+2)})}initSameLevel(){const t=this.getCollection(this.vertex);this.specList.forEach(i=>{const e=[];i.list.forEach(i=>{t.includes(i)&&e.push(i)}),this.fillInSpec(e,1)})}getSpecsOptions(t){let i=[];return i=t.some(Boolean)?this.getUnions(t.filter(Boolean)):this.getCollection(this.vertex),i}fillInSpec(t,i){t.forEach(e=>{this.setAdjoinVertexs(e,t,i)})}}class y{productSpecGroupList;skuListAfter;activitySpecList;specAdjoinMatrix;constructor(t){const{productSpecGroupList:i,skuListAfter:e,activitySpecList:s=[]}=t;this.productSpecGroupList=i,this.skuListAfter=e,this.activitySpecList=s,this.specAdjoinMatrix=new b(i,e)}isActivitySpec(t,i){return!p(this.activitySpecList)&&!!s(this.activitySpecList[t],t=>t.name===i)}getSpecGroupStateList(t){const i=this.specAdjoinMatrix.getSpecsOptions(t);return this.productSpecGroupList.map(({title:e,list:s},o)=>({title:e,items:s.map(e=>({value:e,isEnabled:-1!==i.indexOf(e),isActive:-1!==t.indexOf(e),isActivitySpec:this.isActivitySpec(o,e)}))}))}getOptionSpecs(t){return this.specAdjoinMatrix.getSpecsOptions(t)}toggleSpec(t,i,e,s){if(!t)return s;const o=[...s],n=this.productSpecGroupList[e]?.list??[];return-1!==o.indexOf(i)?o[e]="":(n.forEach(t=>{const i=o.indexOf(t);-1!==i&&(o[i]="")}),o[e]=i),o}findMatchedSku(t){const i=t.filter(Boolean),e=this.productSpecGroupList.length;if(i.length===e)return this.skuListAfter.find(t=>i.every(i=>t.specs.includes(i)))}isAllSpecSelected(t){const i=this.productSpecGroupList.length;return t.filter(t=>!p(t)).length===i}}function I(t){return t.map(t=>function(t){return r(t,["id","count"])}(t))}function v(t){return I(o(t))}function x(t,i){let e=0;const n=o(i);return t.forEach(t=>{const{items:i}=t;i.forEach(t=>{const{id:i,customization_item:o}=t,{increase_type:c,increase_sale_price:r}=o,u=s(n,t=>t.id===i);u&&2===c&&(e+=h.timesNumber(r,u.count))})}),e}function G(t,i,e){if(-1===t)return t;const s=x(i,e||[]);return h.plusNumber(t,s)}function A(t,i){return t.length===i.length&&n(t,t=>s(i,i=>i.id===t.id&&i.count===t.count))}function P(t){return t.map(t=>{const i={...t,items:[]};return i.items=t.items.map(t=>{const{count:i,selected:e}=t,s={...t,selected_count:0};return 1===e&&(s.selected_count=i),s}),i})}function z(t){return E(t)}function E(t){const i=[];return t.forEach(t=>{const e=[],{items:s,customization:o}=t;s.forEach(t=>{const{id:i,count:s,selected:n,selected_count:c,customization_item:r}=t;1===n&&e.push({id:i,name:r.name,count:c||s,count_type:o.count_type})}),i.push(e)}),i}function $(t,e){const o=[],n=i(t).map(t=>{const n=i(t.items),c=t.customization,r=[];return n.forEach(t=>{const{id:i,count:o,selected:n,selectable:u,customization_item:a}=t,m=s(e,i=>i.id===t.id);m?(r.push(m),t.selected_count=m.count,t.selected=1):2===u?1===n&&r.push({id:i,name:a.name,count:o,count_type:c.count_type}):(t.selected_count=0,t.selected=2)}),o.push(r),{...t,items:n}});return{isValid:M(n,o).isValid,customizationGroupList:n,selectedCustomizationItemList:o}}function M(t,i){let e=!0,s="";return t.forEach((t,o)=>{const{customization:n,min_count:c,max_count:r}=t,{count_type:u}=n,a=V(u);if(!e)return;let m=0;return i[o].forEach(t=>{m+=t.count}),m<c?(e=!1,s=`『${n.name}』:至少选择 ${c} ${a}`,void(1===r&&(s=`请选择『${n.name}』`))):m>r?(e=!1,void(s=`『${n.name}』:最多选择 ${r} ${a}`)):void 0}),{isValid:e,errMsg:s}}function V(t){return 1===t?"种":"份"}const O=t=>{const{selectable:i,min_count:e,max_count:s}=t;return 1===i&&e!==s&&s>1},j=t=>{const{max_count:i}=t;let e=0;return t.items.forEach(t=>{1===t.selected&&(e+=t.selected_count)}),-1===i||e<i},D=t=>{const{selected:i,selectable:e}=t;return 2===e&&1===i},T=t=>{const{selected:i,selectable:e}=t;return 2===e&&2===i};function q(t,i){const e={...t,...i,origin_sku_id:t.id,is_promotion_activity:!0,is_set_activity_price:!1};return-1===i.sale_price?e.sale_price=t.sale_price:(e.original_price=t.sale_price,e.is_set_activity_price=!0),-1===i.stock_count&&(e.stock_count=t.stock_count),e}function F(t,i){const e=[];return i.forEach(function(i){const{combo_sku:o,min_count:n,max_count:c}=i,r=s(t,t=>t.id===o.id);if(!r)return;const u={...r};n>0&&(u.per_order_min_limit=n),c>0&&(u.per_order_max_limit=c),e.push(u)}),e}function w(t,i){return i?q(t,i):{...t,origin_sku_id:t.id,is_promotion_activity:!1,is_set_activity_price:!1}}function N(t,i,e){return i?function(t,i,e){if(e)return t.map(t=>{const e=s(i,i=>i.sku.id===t.id);let o=w(t);if(e){const{promotion_activity_sku:i}=e;o=q(t,i)}return o});return i.map(t=>{const{sku:i,promotion_activity_sku:e}=t;return q(i,e)})}(t,i,e):t.map(t=>w(t))}function U(t,i,e){const s=[];return i.forEach((i,o)=>{const{items:n}=i,c={...i,items:[]};t.forEach(t=>{const i=t.item_ids,s=u(n,function(t){return t.id===i[o]});if(-1===s)return;const r=n[s];-1===u(c.items,function(t){return t.id===r.id})&&(t.is_promotion_activity&&e&&(r.is_promotion_activity=!0),c.items.push(r))}),s.push(c)}),s}function B(t){return t.map(t=>({title:t.spec.name,list:t.items.map(t=>t.name)}))}function J(t,i){const e=[];return t.map(t=>{t.stock_count>0&&e.push({...t,specs:t.item_ids.map(t=>i[t])})}),e}function H(t){const i={};return t.forEach(t=>{t.items.forEach(t=>{i[t.id]=t.name})}),i}function K(t,i){let e=i;return 0!==t.length&&void 0!==t[0].items[0]?.image&&(e=t[0].items[0].image),e}function Q(t){const i=[];return t.forEach(t=>{const e=[];t.items.forEach(t=>{t.is_promotion_activity&&e.push(t)}),i.push(e)}),i}function R(t,i){const{combo_type:e,select_type:s}=i;return 2===e?"选套餐":3===t||2===s?"选规格":"加入购物车"}function W(t,i){return 1===t&&1===i}function X(t,i,e=2){return 1===t&&2===e?1===i?"销售中":"已售罄":"已下架"}function Y(t){const i=t.map(t=>t.sale_price),e=Math.min(...i)||0,s=Math.max(...i)||0;return e===s?`¥${d(e)}`:`¥${d(e)} ~ ¥${d(s)}`}function Z(t){const{end_price:i,start_price:e}=t;return e===i?`¥${d(e)}`:`¥${d(e)}~${d(i)}`}function tt(t){let i=0;return t.forEach(t=>{i+=t.stock_count}),i}function it(t,i,e){const s={cartList:[],cartCount:0},o=i.id,n=i.code;return t.forEach(t=>{const i=t.product,c=t.external_product;t.error||(e?c?.id===e&&(s.cartList.push(t),s.cartCount+=t.cart.count):o?i.id===o&&(s.cartList.push(t),s.cartCount+=t.cart.count):i.code===n&&(s.cartList.push(t),s.cartCount+=t.cart.count))}),s}function et(t,i){if(p(i))return t;const e={...t,...i};return-1===i.sale_price?e.sale_price=t.sale_price:e.original_price=t.sale_price,-1===i.stock_count&&(e.stock_count=t.stock_count),e}function st(t,e){if(p(e))return;const{skuId:n,product:c,promotionActivityProduct:r,customizationItemList:u}=t,a=s(e,t=>{const i=c.id,e=c.code,s=t.product,a=t.external_product;let m=!1;if(m=a?a.id===r?.id:i?s.id===i:s.code===e,!m)return!1;if(!n)return!0;const h=t.sku,d=t.external_sku;if(!(d?d.id===n:h.id===n))return!1;const l=t.product_customization_item_list||[];if(p(u)&&p(l))return!0;return A(o(u),l)});return a?i(a):void 0}function ot(t){return t.map(t=>function(t){const i=r(t,["id","count","combo_sku_id","combo_product_customization_item_list"]),e=i.combo_product_customization_item_list;return e&&(i.combo_product_customization_item_list=I(e)),i}(t))}function nt(t){return ot(o(t))}function ct(t,i){let e=0;const n=o(i);return t.forEach(t=>{const{items:i}=t;i.forEach(t=>{const{id:i,increase_sale_price:o}=t,c=s(n,t=>t.id===i);c&&o>0&&(e+=m.timesNumber(o,c.count))})}),e}function rt(t,i,e){if(-1===t)return t;const s=ct(i,e||[]);return m.plusNumber(t,s)}function ut(t,i){return t.length===i.length&&n(t,t=>s(i,i=>{if(i.id!==t.id||i.count!==t.count)return!1;if(i.combo_sku_id!==t.combo_sku_id)return!1;const e=i.combo_product_customization_item_list||[],s=t.combo_product_customization_item_list||[];return!(!p(s)||!p(e))||A(s,e)}))}function at(t){const{name:i,combo_sku_name:e,combo_product_customization_item_list:s}=t;let o=i;if(s){const t=ht(e,s);o=t?`${i}(${t})`:i;const n=dt(s);n&&(o=`${o}、${n}`)}return o}function mt(t){if(p(t))return"";return t.map(t=>at(t)).join("+")}function ht(t,i){const e=a(i||[],t=>1===t.count_type);if(p(e))return t||"";const s=e.map(t=>t.name).join("、");return t?`${t}、${s}`:s}function dt(t){const i=a(t||[],t=>1!==t.count_type);return p(i)?"":i.map(t=>`${t.name}x${t.count}`).join("、")}function pt(t){const{items:i,max_count:e}=t;let s=0;return i.forEach(t=>{1===t.selected&&(s+=t.count)}),-1===e||s<e}function lt(t,i){const{items:e,min_count:s,max_count:o}=t;let n=0;if(e.forEach((t,i)=>{1===t.selected&&n++}),2===i){if(1===s&&n<=1)return!1}else if(o>1&&n>=o)return!1;return!0}function _t(t){const{selected:i,selectable:e}=t;return 1===i&&2===e}function ft(t){const{selectable:i}=t;return 2!==i&&(!kt(t)&&!Ct(t))}function kt(t){const{children:i}=t;return!p(i)}function Ct(t){const{min_count:i,max_count:e}=t;return i!==e&&e>1}class Lt{product={};specImage=void 0;skuId=0;sku=void 0;skuList=[];skuListAfter=[];selectedSpecs=[];productSpecGroupList=[];specList=[];stockCount=0;minCount=1;maxCount=1;perOrderMinLimit=-1;perOrderMaxLimit=-1;salePrice=0;originalPrice=-1;skuComboGroupList=[];skuComboItemList=[];cartCount=0;cartItem=void 0;visibleComboInfo=!1;isComponentLoading=!0;initCartItem;channel1Type;onChange;_initSkuListAfter=[];_initSpecType=0;getInitialSkuId(){return this._initSkuListAfter[0]?.id??0}constructor(t){const{productData:i,initCartItem:e,channel1Type:s,onChange:o}=t;this.initCartItem=e,this.channel1Type=s,this.onChange=o,this._initProductData(i)}init(t){const i=this._initSpecType,e=this.initCartItem,s=this._initSkuListAfter;let o=0;if(2===i&&!p(e)){const{sku:t,external_sku:i}=e,n=i?.id||t.id;o=u(s,t=>t.id===n),-1===o&&(o=0)}this.cartItem=e,this.cartCount=e?.cart?.count||0;const n=s[o];if(1===i)return this._initSkuDetail(t),this._updateSkuData(n||this.skuList[0]),this.isComponentLoading=!1,void this._notifyChange();this._initSkuDetail(t),s[o]?.specs.forEach((t,i)=>{this._selectSpec(!0,t,i)}),this.isComponentLoading=!1,this._notifyChange()}getView(){return{product:this.product,skuId:this.skuId,salePrice:this.getSalePrice(),originalPrice:this.getOriginalPrice(),specImage:this.specImage,skuListAfter:this.skuListAfter,selectedSpecs:this.selectedSpecs,productSpecGroupList:this.productSpecGroupList,skuComboGroupList:this.skuComboGroupList,skuComboItemList:this.skuComboItemList,cartCount:this.cartCount,maxCount:this.maxCount,isComponentLoading:this.isComponentLoading,visibleComboInfo:this.visibleComboInfo}}handleSelectSpecs(t,i,o){if(!this._selectSpec(t,i,o)||this.selectedSpecs.indexOf("")>=0)return this._notifyChange(),{needFetchSkuDetail:!1,skuId:0};const n=s(this.skuListAfter,t=>e(t.specs,this.selectedSpecs));return n?(void 0!==this.specList[0]?.items[0]?.image&&this.specList[0].items.forEach(t=>{t.name===this.selectedSpecs[0]&&(this.specImage=t.image)}),this._notifyChange(),{needFetchSkuDetail:!0,skuId:n.id}):(this._notifyChange(),{needFetchSkuDetail:!1,skuId:0})}updateSkuDetailData(t){this._initSkuDetail(t),this._notifyChange()}updateCartCountData(t){if(t&&void 0!==t.cart){const i=t.cart,e=i?.count||0;this.cartItem=t,this.cartCount=e}else this.cartItem=void 0,this.cartCount=0;this._notifyChange()}handleSelectComboData(t){this.skuComboItemList=t;return L(this.skuComboGroupList)?(this.cartItem=void 0,this.cartCount=0,this._notifyChange(),{isValid:!1}):(this._notifyChange(),{isValid:!0})}handleProductCountChange(t,i){const{perOrderMinLimit:e,cartItem:s,selectedSpecs:o}=this;if(o.indexOf("")>=0)return{isValid:!1,errMsg:"请选择规格"};if(t>0){if(i===_&&-1!==e&&t<e)return{isValid:!0,cartItem:s,count:0};const o=L(this.skuComboGroupList);if(o)return{isValid:!1,errMsg:o};const n=this._checkProductCount(t);if(!n.isValid)return n}return{isValid:!0,cartItem:s,count:t}}getAddToCartParams(t,i){const{skuId:e,product:s,skuList:o,selectedSpecs:n,productSpecGroupList:c,skuComboItemList:r,perOrderMinLimit:u}=this,a=n.indexOf(""),m=W(s?.status,s?.has_stock),h=X(s?.status,s?.has_stock);if(0!==o[0].item_ids.length&&a>=0)return{isValid:!1,errMsg:`请选择${c[a].title}`};if(!m)return{isValid:!1,errMsg:h};const d=L(this.skuComboGroupList);if(d)return{isValid:!1,errMsg:d};return{isValid:!0,params:{productId:t,promotionActivityProductId:i,skuId:e,count:-1!==u?u:1,skuComboItemList:nt(r)}}}handleShowComboInfo(){p(o(this.skuComboItemList))||(this.visibleComboInfo=!0,this._notifyChange())}handleCloseComboInfo(){this.visibleComboInfo=!1,this._notifyChange()}getSalePrice(){return rt(this.salePrice,this.skuComboGroupList,this.skuComboItemList)}getOriginalPrice(){return rt(this.originalPrice,this.skuComboGroupList,this.skuComboItemList)}validateCombo(){return L(this.skuComboGroupList)}buildCartCountParams(){const t=nt(this.skuComboItemList);return{channel1_type:this.channel1Type,checked:1,sku_id:this.skuId,sku_type:0,sku_combo_item_list:JSON.stringify(t),cart:1}}_initProductData(t){const{product:i,skuList:e,productCover:s,productSpecGroupList:o}=t,n=H(o),r=B(o),u=J(e,n),a=K(o,s);this.product=i,this.specImage=a,this.skuList=e,this.skuListAfter=u,this.selectedSpecs=c(new Array(r.length),""),this.productSpecGroupList=r,this.specList=o,this._initSkuListAfter=u,this._initSpecType=i.spec_type}_initSkuDetail(t){const{sku:i,sku_combo_group_list:e}=t,s=w(i);this._updateSkuData(s);const o=k(e||[],this.cartItem?.sku_combo_item_list);this.skuComboGroupList=o,this.skuComboItemList=C(o)}_updateSkuData(t){const i=t.id,e=t.stock_count,s=t.per_order_min_limit,o=t.per_order_max_limit,n=-1===s?1:Math.min(s,e),c=-1===o?e:Math.min(o,e);this.sku=t,this.skuId=i,this.stockCount=e,this.salePrice=t.sale_price,this.originalPrice=t.original_price,this.minCount=n,this.maxCount=c,this.perOrderMinLimit=s,this.perOrderMaxLimit=o}_checkProductCount(t){const{minCount:i,maxCount:e,stockCount:s,perOrderMinLimit:o}=this;if(t<i||t<o){return{isValid:!1,errMsg:-1!==o?`该商品 ${o} 件起售哦`:`购买数量至少 ${i} 件`}}if(t>e){return{isValid:!1,errMsg:t>s?"库存不足":`该商品最多购买 ${e} 件哦`}}return{isValid:!0}}_selectSpec(t,i,e){const{selectedSpecs:s,productSpecGroupList:o}=this;return 0!==o.length&&(!(s[e]===i||!t)&&(s[e]=i,this.selectedSpecs=s.slice(),!0))}_notifyChange(){this.onChange()}}class gt{product={};promotionActivityProduct=void 0;specImage=void 0;skuId=0;sku=void 0;skuList=[];skuListAfter=[];selectedSpecs=[];productSpecGroupList=[];specList=[];activitySpecList=[];stockCount=0;minCount=1;maxCount=1;perOrderMinLimit=-1;perOrderMaxLimit=-1;salePrice=0;originalPrice=-1;customizationGroupList=[];customizationItemList=[];cartCount=0;cartItem=void 0;cartList=[];channel1Type;onChange;constructor(t){const{productData:i,cartList:e,channel1Type:s,onChange:o}=t;this.cartList=e||[],this.channel1Type=s,this.onChange=o,this._initProductData(i)}setCartList(t){this.cartList=t,this._updateSkuCartItem(),this._notifyChange()}init(){const t=this.skuListAfter,i=this.product.spec_type,o=this._findSkuCartItem();let n=0;if(!p(o)){const{sku:i,external_sku:e,product_customization_item_list:s}=o,c=e?.id||i.id;if(n=u(t,t=>t.id===c),-1===n&&(n=0),!p(s)){const t=$(this.customizationGroupList,s);this.customizationGroupList=t.customizationGroupList,this.customizationItemList=t.selectedCustomizationItemList}}if(this._updateSkuCartItem(),1===i)return this._updateSkuData(this.skuList[0]),void this._notifyChange();t[n]?.specs.forEach((t,i)=>{this._selectSpec(!0,t,i)});const c=s(t,t=>e(t.specs,this.selectedSpecs));c&&this._updateSkuData(c),this._notifyChange()}getView(){return{product:this.product,promotionActivityProduct:this.promotionActivityProduct,skuId:this.skuId,sku:this.sku,salePrice:this.getSalePrice(),originalPrice:this.originalPrice,specImage:this.specImage,skuListAfter:this.skuListAfter,selectedSpecs:this.selectedSpecs,productSpecGroupList:this.productSpecGroupList,activitySpecList:this.activitySpecList,customizationGroupList:this.customizationGroupList,cartCount:this.cartCount,maxCount:this.maxCount,cartItem:this.cartItem}}handleSelectSpecs(t,i,o){const n=this._selectSpec(t,i,o),c=this.buildCartCountParams();if(!n||this.selectedSpecs.indexOf("")>=0)return this._updateSkuCartItem(),this._notifyChange(),{needFetchCart:!1,cartParams:c};const r=s(this.skuListAfter,t=>e(t.specs,this.selectedSpecs));return r?(void 0!==this.specList[0]?.items[0]?.image&&this.specList[0].items.forEach(t=>{t.name===this.selectedSpecs[0]&&(this.specImage=t.image)}),this._updateSkuData(r),this._updateSkuCartItem(),this._notifyChange(),{needFetchCart:!0,cartParams:this.buildCartCountParams()}):(this._updateSkuCartItem(),this._notifyChange(),{needFetchCart:!1,cartParams:c})}updateCartCountData(t){if(t&&void 0!==t.cart){const i=t.cart;this.cartItem=t,this.cartCount=i?.count||0}else this.cartItem=void 0,this.cartCount=0;this._notifyChange()}handleCustomizationItemListSelect(t){this.customizationItemList=t;return M(this.customizationGroupList,t).isValid?(this._updateSkuCartItem(),this._notifyChange(),{isValid:!0,cartParams:this.buildCartCountParams()}):(this.cartItem=void 0,this.cartCount=0,this._notifyChange(),{isValid:!1})}handleProductCountChange(t,i){const{perOrderMinLimit:e,cartItem:s,selectedSpecs:o}=this;if(o.indexOf("")>=0)return{isValid:!1,errMsg:"请选择规格"};if(t>0){if(i===_&&-1!==e&&t<e)return{isValid:!0,cartItem:s,count:0};if(this.customizationGroupList.length>0){const t=M(this.customizationGroupList,this.customizationItemList);if(!t.isValid)return{isValid:!1,errMsg:t.errMsg}}const o=this._checkProductCount(t);if(!o.isValid)return o}return{isValid:!0,cartItem:s,count:t}}getAddToCartParams(t,i){const{sku:e,skuId:s,product:o,skuList:n,selectedSpecs:c,productSpecGroupList:r,customizationItemList:u,customizationGroupList:a,perOrderMinLimit:m}=this,h=c.indexOf(""),d=W(o?.status,o?.has_stock),p=X(o?.status,o?.has_stock);if(0!==n[0].item_ids.length&&h>=0)return{isValid:!1,errMsg:`请选择${r[h].title}`};if(!d)return{isValid:!1,errMsg:p};if(a.length>0){const t=M(a,u);if(!t.isValid)return{isValid:!1,errMsg:t.errMsg}}const l=v(u);return{isValid:!0,params:{productId:t,promotionActivityProductId:e?.is_promotion_activity?i:void 0,skuId:s,count:-1!==m?m:1,productCustomizationItemList:l}}}getSalePrice(){const t=x(this.customizationGroupList,this.customizationItemList);return this.salePrice+t}buildCartCountParams(){const t=v(this.customizationItemList),i=this.sku?.is_promotion_activity?1:0;return{channel1_type:this.channel1Type,checked:1,sku_id:this.skuId,sku_type:i,product_customization_item_list:JSON.stringify(t),cart:1}}_initProductData(t){const{product:i,promotionActivityProduct:e,skuList:s,productCover:o,productSpecGroupList:n,productCustomizationGroupList:r}=t,u=H(n),a=B(n),m=J(s,u),h=K(n,o),d=Q(n),p=P(r||[]);this.product=i,this.promotionActivityProduct=e,this.specImage=h,this.skuList=s,this.skuListAfter=m,this.selectedSpecs=c(new Array(a.length),""),this.productSpecGroupList=a,this.specList=n,this.activitySpecList=d,this.customizationGroupList=p,this.customizationItemList=r?z(p):[]}_updateSkuData(t){const i=t.id,e=t.stock_count,s=t.per_order_min_limit,o=t.per_order_max_limit,n=-1===s?1:Math.min(s,e),c=-1===o?e:Math.min(o,e);this.sku=t,this.skuId=i,this.stockCount=e,this.salePrice=t.sale_price,this.originalPrice=t.original_price,this.minCount=n,this.maxCount=c,this.perOrderMinLimit=s,this.perOrderMaxLimit=o,this._findSkuCartItem(i)}_checkProductCount(t){const{minCount:i,maxCount:e,stockCount:s,perOrderMinLimit:o}=this;if(t<i||t<o){return{isValid:!1,errMsg:-1!==o?`该商品 ${o} 件起售哦`:`购买数量至少 ${i} 件`}}if(t>e){return{isValid:!1,errMsg:t>s?"库存不足":`该商品最多购买 ${e} 件哦`}}return{isValid:!0}}_selectSpec(t,i,e){const{selectedSpecs:s,productSpecGroupList:o}=this;return 0!==o.length&&(!(s[e]===i||!t)&&(s[e]=i,this.selectedSpecs=s.slice(),!0))}_notifyChange(){this.onChange()}_findSkuCartItem(t){const{cartList:e}=this;if(p(e))return;const{product:n,promotionActivityProduct:c,customizationItemList:r}=this,u=s(e,i=>{const e=n.id,s=n.code,u=i.product,a=i.external_product;let m=!1;if(m=a?a.id===c?.id:e?u.id===e:u.code===s,!m)return!1;const h=t||this.skuId;if(!h)return!0;const d=i.sku,l=i.external_sku;if(!(l?l.id===h:d.id===h))return!1;const _=i.product_customization_item_list||[];if(p(r)&&p(_))return!0;return A(o(r),_)});return u?i(u):void 0}_updateSkuCartItem(){const t=this._findSkuCartItem(this.skuId);this.cartItem=t,this.cartCount=t?.cart?.count||0}}export{f as ComboSelector,Lt as ComboSpecSelector,gt as CustomSpecSelector,y as SpecSelector,ct as calculateSelectedComboPrice,x as calculateSelectedCustomizationPrice,j as checkCanPlusCount,Ct as checkComboItemIsUseSelectCount,O as checkCustomizationItemIsUseSelectCount,M as checkCustomizationItemList,A as checkCustomizationItemListEqual,pt as checkGroupCanPlusCount,kt as checkHasChildren,lt as checkIsCanChangeSelectCheckbox,T as checkIsDisabledSelected,_t as checkIsFixedSelect,D as checkIsFixedSelected,ft as checkIsUseSelectCheckbox,W as checkProductOnSale,ut as checkSkuComboItemListEqual,st as findCustomizationSkuCartItem,it as findProductCartList,rt as formatComboPrice,V as formatCountTypeUnit,dt as formatCustomizationCountType,P as formatCustomizationGroupList,G as formatCustomizationPrice,z as formatInitCustomizationItemList,Z as formatPriceRange,R as formatProductBuyText,F as formatProductComboChildrenSkuList,w as formatProductSku,N as formatProductSkuList,U as formatProductSpecGroupList,X as formatProductStatus,C as formatSelectSkuComboItemList,g as formatSelectTips,E as formatSelectedCustomizationItemList,mt as formatSkuComboItemList,at as formatSkuComboItemName,J as formatSkuListAfter,tt as formatSkuListStockCount,ht as formatSkuNameWithCustomization,Y as formatSkuPrice,B as formatSpecList,H as formatSpecObj,et as formatWithExternalSku,q as formatWithPromotionActivitySku,Q as getActivitySpecList,K as getSpecImage,ot as getSubmitComboItemList,nt as getSubmitComboItemListArr,I as getSubmitCustomizationItemList,v as getSubmitCustomizationItemListArr,k as reconstructComboGroupList,$ as reconstructCustomizationItemList,L as validateComboGroupList};
|
|
2
|
+
//# sourceMappingURL=hive-biz.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hive-biz.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{isNaN as t,cloneDeep as i,isEqual as e,find as s,flattenDeep as o,every as n,fill as c,pick as r,findIndex as u,filter as a}from"lodash-es";import*as m from"@yorkjs/hive";import h,{moneyToDisplay as d}from"@yorkjs/hive";function p(i){if(null==i||t(i))return!0;let e=!1;switch(Object.prototype.toString.call(i)){case"[object Object]":e=0===Object.keys(i).length;break;case"[object Array]":e=0===i.length;break;case"[object String]":0===i.trim().length&&(e=!0)}return e}const l=1e7,_="decrease";class f{comboGroupList;constructor(t){this.comboGroupList=i(t.comboGroupList)}getComboGroupList(){return i(this.comboGroupList)}updateComboGroupList(t){return!e(this.comboGroupList,t)&&(this.comboGroupList=i(t),!0)}setItemSelected(t,i,e){const s=this.comboGroupList[t];if(!s)return;const{items:o,min_count:n,max_count:c}=s,r=o[i];if(!r)return;let u=0;if(o.forEach(t=>{1===t.selected&&u++}),2===e){if(1===n&&u<=1)return}else if(1===c)o.forEach((t,e)=>{e!==i&&(t.selected=2)});else if(u>=c)return;r.selected=e}setItemCount(t,i,e){const s=this.comboGroupList[t];if(!s)return;const o=s.items[i];if(!o)return;const{items:n}=s,c=o.min_count,r=o.max_count,u=s.max_count,a=this.checkIsFixedSelect(o);let m=0;n.forEach(t=>{t.id===o.id?m+=e:1===t.selected&&(m+=t.count)}),-1!==u&&m>u||-1!==r&&e>r||e<0||m<0||a&&e<c||(o.count=e,o.selected=0===e?2:1)}setComboChildSelected(t,i,e){const s=this.comboGroupList[t];if(!s)return;const o=s.items[i];if(!o||p(o.children))return;const{sku:n,count:c}=e,r=n.id;o.children.forEach(t=>{t.combo_sku.id===r?(t.selected=1,t.count=c):t.selected=2}),o.selected=1}setComboSkuSelected(t,i,e){const s=this.comboGroupList[t];if(!s)return;const o=s.items[i];if(!o)return;const{sku:n,customization_item_list:c}=e,r=this.checkComboItemIsUseSelectCount(o);o.combo_sku={id:n.id,name:n.name,stock_count:o.combo_sku?.stock_count??l},c&&(o.combo_customization_item_list=c),r&&0===o.count&&(o.count=1),this.setItemSelected(t,i,1)}formatSelectSkuComboItemList(){return C(this.comboGroupList)}validate(){return L(this.comboGroupList)}reconstructFromCart(t){this.comboGroupList=k(this.comboGroupList,t)}checkIsFixedSelect(t){const{selected:i,selectable:e}=t;return 1===i&&2===e}checkComboItemIsUseSelectCount(t){const{min_count:i,max_count:e}=t;return i!==e&&e>1}}function k(t,i){return p(i)?t:t.map(t=>{const e=t.items.map(t=>{const e=s(i,i=>i.id===t.id);if(!e)return 1===t.selectable&&(t.selected=2),t;const{children:o,combo_product:n}=t;return p(o)?(n&&(e.combo_sku_id&&(t.combo_sku={id:e.combo_sku_id,name:e.combo_sku_name,stock_count:t.combo_sku?.stock_count??l}),e.combo_product_customization_item_list&&(t.combo_customization_item_list=[e.combo_product_customization_item_list])),t.count=e.count,t.selected=1,t):(o.forEach(t=>{t.combo_sku.id===e.combo_sku_id?(t.selected=1,t.count=e.count):t.selected=2}),t)});return{...t,items:e}})}function C(t){return t.map(t=>{const i=[],e=t.name;return t.items.forEach(t=>{const{id:n,name:c,count:r,selected:u,children:a,combo_sku:m,combo_sku_type:h,combo_customization_item_list:d}=t;if(!p(a)){const t=s(a,t=>1===t.selected);return void(t&&i.push({id:n,name:`${c}(${t.name})`,combo_group_name:e,combo_sku_id:t.combo_sku.id,count:t.count}))}if(2!==u)if(1!==h){if(m){const t={id:n,name:c,count:r,combo_sku_id:m.id,combo_sku_name:m.name,combo_group_name:e};d&&(t.combo_product_customization_item_list=o(d)),i.push(t)}}else i.push({id:n,name:c,count:r,combo_group_name:e})}),i})}function L(t){let i=!0,e="";const o=C(t);return t.forEach((t,n)=>{if(!i)return;const{items:c,min_count:r,max_count:u}=t,a=t.name;if(c.forEach((t,o)=>{if(!i)return;const{count:n,min_count:c,selected:r,children:u,combo_sku:m,combo_product:h}=t;if(2!==r){if(!p(u)){return void(p(s(u,t=>1===t.selected))&&(i=!1,e=`【${a}】:第${o+1}个商品,请选择定制项`))}if(h&&p(m))return i=!1,void(e=`【${a}】:第${o+1}个商品,请选择规格`);n<c&&(i=!1,e=`【${a}】:第${o+1}个商品,至少选择 ${c} 件`)}}),!i)return;let m=0;if(o[n]?.forEach(t=>{m+=t.count}),m<r)return i=!1,void(e=`【${a}】:至少选择 ${r} 件商品`);m>u&&(i=!1,e=`【${a}】:最多选择 ${u} 件商品`)}),e}function g(t){const{items:i,repeatable:e,min_count:s,max_count:o}=t;if(n(i,t=>2===t.selectable))return"";const c=[];s===o?c.push(`请选择${s}项`):(s>0&&c.push(`至少选择${s}项`),o>0&&c.push(`最多可选${o}项`)),1===e&&c.push("可重复选");let r=0;return i.forEach(t=>{1===t.selected&&(r+=t.count)}),r>0&&c.push(`已选${r}`),c.join(",")}class S{vertex=[];quantity=0;adjoinArray=[];constructor(t){this.vertex=t,this.quantity=this.vertex.length,this.adjoinArray=[],this.init()}init(){this.adjoinArray=c(new Array(this.quantity*this.quantity),0)}setAdjoinVertexs(t,i,e){const s=this.vertex.indexOf(t);i.forEach((t,i)=>{const o=this.vertex.indexOf(t),n=this.adjoinArray[s*this.quantity+o];"number"!=typeof n?this.adjoinArray[s*this.quantity+o].push(e):this.adjoinArray[s*this.quantity+o]=n>1?[n,e]:e})}getVertexCol(t){const i=this.vertex.indexOf(t),e=[];return this.vertex.forEach((t,s)=>{e.push(this.adjoinArray[i+this.quantity*s])}),e}getCollection(t){const i=t.map(t=>this.getVertexCol(t));let e=[];return i.forEach((i,s)=>{i.some(t=>0!==t)&&e.push(t[s])}),e}getUnions(t){const i=t.map(t=>this.getVertexCol(t));let e=[];return this.vertex.forEach((t,s)=>{const o=i.map(t=>t[s]).filter(t=>1!==t);this.isItemEqual(o)&&e.push(t)}),e}isItemEqual(t){if(t.includes(0))return!1;let i=-1;return t.length&&(t.some(t=>("number"==typeof t&&(i=t),"number"==typeof t)),-1===i)?this.isArrayUnions(t):t.every(t=>"number"==typeof t?t===i:t.includes(i))}isArrayUnions(t){return!!t.length&&t[0].some(i=>t.every(t=>t.includes(i)))}}class b extends S{specList=[];specCombinationList=[];constructor(t,i){super(t.reduce((t,i)=>[...t,...i.list],[])),this.specList=t,this.specCombinationList=i,this.initSpec(),this.initSameLevel()}initSpec(){this.specCombinationList.forEach((t,i)=>{this.fillInSpec(t.specs,i+2)})}initSameLevel(){const t=this.getCollection(this.vertex);this.specList.forEach(i=>{const e=[];i.list.forEach(i=>{t.includes(i)&&e.push(i)}),this.fillInSpec(e,1)})}getSpecsOptions(t){let i=[];return i=t.some(Boolean)?this.getUnions(t.filter(Boolean)):this.getCollection(this.vertex),i}fillInSpec(t,i){t.forEach(e=>{this.setAdjoinVertexs(e,t,i)})}}class y{productSpecGroupList;skuListAfter;activitySpecList;specAdjoinMatrix;constructor(t){const{productSpecGroupList:i,skuListAfter:e,activitySpecList:s=[]}=t;this.productSpecGroupList=i,this.skuListAfter=e,this.activitySpecList=s,this.specAdjoinMatrix=new b(i,e)}isActivitySpec(t,i){return!p(this.activitySpecList)&&!!s(this.activitySpecList[t],t=>t.name===i)}getSpecGroupStateList(t){const i=this.specAdjoinMatrix.getSpecsOptions(t);return this.productSpecGroupList.map(({title:e,list:s},o)=>({title:e,items:s.map(e=>({value:e,isEnabled:-1!==i.indexOf(e),isActive:-1!==t.indexOf(e),isActivitySpec:this.isActivitySpec(o,e)}))}))}getOptionSpecs(t){return this.specAdjoinMatrix.getSpecsOptions(t)}toggleSpec(t,i,e,s){if(!t)return s;const o=[...s],n=this.productSpecGroupList[e]?.list??[];return-1!==o.indexOf(i)?o[e]="":(n.forEach(t=>{const i=o.indexOf(t);-1!==i&&(o[i]="")}),o[e]=i),o}findMatchedSku(t){const i=t.filter(Boolean),e=this.productSpecGroupList.length;if(i.length===e)return this.skuListAfter.find(t=>i.every(i=>t.specs.includes(i)))}isAllSpecSelected(t){const i=this.productSpecGroupList.length;return t.filter(t=>!p(t)).length===i}}function I(t){return t.map(t=>function(t){return r(t,["id","count"])}(t))}function v(t){return I(o(t))}function x(t,i){let e=0;const n=o(i);return t.forEach(t=>{const{items:i}=t;i.forEach(t=>{const{id:i,customization_item:o}=t,{increase_type:c,increase_sale_price:r}=o,u=s(n,t=>t.id===i);u&&2===c&&(e+=h.timesNumber(r,u.count))})}),e}function G(t,i,e){if(-1===t)return t;const s=x(i,e||[]);return h.plusNumber(t,s)}function A(t,i){return t.length===i.length&&n(t,t=>s(i,i=>i.id===t.id&&i.count===t.count))}function P(t){return t.map(t=>{const i={...t,items:[]};return i.items=t.items.map(t=>{const{count:i,selected:e}=t,s={...t,selected_count:0};return 1===e&&(s.selected_count=i),s}),i})}function z(t){return E(t)}function E(t){const i=[];return t.forEach(t=>{const e=[],{items:s,customization:o}=t;s.forEach(t=>{const{id:i,count:s,selected:n,selected_count:c,customization_item:r}=t;1===n&&e.push({id:i,name:r.name,count:c||s,count_type:o.count_type})}),i.push(e)}),i}function $(t,e){const o=[],n=i(t).map(t=>{const n=i(t.items),c=t.customization,r=[];return n.forEach(t=>{const{id:i,count:o,selected:n,selectable:u,customization_item:a}=t,m=s(e,i=>i.id===t.id);m?(r.push(m),t.selected_count=m.count,t.selected=1):2===u?1===n&&r.push({id:i,name:a.name,count:o,count_type:c.count_type}):(t.selected_count=0,t.selected=2)}),o.push(r),{...t,items:n}});return{isValid:M(n,o).isValid,customizationGroupList:n,selectedCustomizationItemList:o}}function M(t,i){let e=!0,s="";return t.forEach((t,o)=>{const{customization:n,min_count:c,max_count:r}=t,{count_type:u}=n,a=V(u);if(!e)return;let m=0;return i[o].forEach(t=>{m+=t.count}),m<c?(e=!1,s=`『${n.name}』:至少选择 ${c} ${a}`,void(1===r&&(s=`请选择『${n.name}』`))):m>r?(e=!1,void(s=`『${n.name}』:最多选择 ${r} ${a}`)):void 0}),{isValid:e,errMsg:s}}function V(t){return 1===t?"种":"份"}const O=t=>{const{selectable:i,min_count:e,max_count:s}=t;return 1===i&&e!==s&&s>1},j=t=>{const{max_count:i}=t;let e=0;return t.items.forEach(t=>{1===t.selected&&(e+=t.selected_count)}),-1===i||e<i},D=t=>{const{selected:i,selectable:e}=t;return 2===e&&1===i},T=t=>{const{selected:i,selectable:e}=t;return 2===e&&2===i};function q(t,i){const e={...t,...i,origin_sku_id:t.id,is_promotion_activity:!0,is_set_activity_price:!1};return-1===i.sale_price?e.sale_price=t.sale_price:(e.original_price=t.sale_price,e.is_set_activity_price=!0),-1===i.stock_count&&(e.stock_count=t.stock_count),e}function F(t,i){const e=[];return i.forEach(function(i){const{combo_sku:o,min_count:n,max_count:c}=i,r=s(t,t=>t.id===o.id);if(!r)return;const u={...r};n>0&&(u.per_order_min_limit=n),c>0&&(u.per_order_max_limit=c),e.push(u)}),e}function w(t,i){return i?q(t,i):{...t,origin_sku_id:t.id,is_promotion_activity:!1,is_set_activity_price:!1}}function N(t,i,e){return i?function(t,i,e){if(e)return t.map(t=>{const e=s(i,i=>i.sku.id===t.id);let o=w(t);if(e){const{promotion_activity_sku:i}=e;o=q(t,i)}return o});return i.map(t=>{const{sku:i,promotion_activity_sku:e}=t;return q(i,e)})}(t,i,e):t.map(t=>w(t))}function U(t,i,e){const s=[];return i.forEach((i,o)=>{const{items:n}=i,c={...i,items:[]};t.forEach(t=>{const i=t.item_ids,s=u(n,function(t){return t.id===i[o]});if(-1===s)return;const r=n[s];-1===u(c.items,function(t){return t.id===r.id})&&(t.is_promotion_activity&&e&&(r.is_promotion_activity=!0),c.items.push(r))}),s.push(c)}),s}function B(t){return t.map(t=>({title:t.spec.name,list:t.items.map(t=>t.name)}))}function J(t,i){const e=[];return t.map(t=>{t.stock_count>0&&e.push({...t,specs:t.item_ids.map(t=>i[t])})}),e}function H(t){const i={};return t.forEach(t=>{t.items.forEach(t=>{i[t.id]=t.name})}),i}function K(t,i){let e=i;return 0!==t.length&&void 0!==t[0].items[0]?.image&&(e=t[0].items[0].image),e}function Q(t){const i=[];return t.forEach(t=>{const e=[];t.items.forEach(t=>{t.is_promotion_activity&&e.push(t)}),i.push(e)}),i}function R(t,i){const{combo_type:e,select_type:s}=i;return 2===e?"选套餐":3===t||2===s?"选规格":"加入购物车"}function W(t,i){return 1===t&&1===i}function X(t,i,e=2){return 1===t&&2===e?1===i?"销售中":"已售罄":"已下架"}function Y(t){const i=t.map(t=>t.sale_price),e=Math.min(...i)||0,s=Math.max(...i)||0;return e===s?`¥${d(e)}`:`¥${d(e)} ~ ¥${d(s)}`}function Z(t){const{end_price:i,start_price:e}=t;return e===i?`¥${d(e)}`:`¥${d(e)}~${d(i)}`}function tt(t){let i=0;return t.forEach(t=>{i+=t.stock_count}),i}function it(t,i,e){const s={cartList:[],cartCount:0},o=i.id,n=i.code;return t.forEach(t=>{const i=t.product,c=t.external_product;t.error||(e?c?.id===e&&(s.cartList.push(t),s.cartCount+=t.cart.count):o?i.id===o&&(s.cartList.push(t),s.cartCount+=t.cart.count):i.code===n&&(s.cartList.push(t),s.cartCount+=t.cart.count))}),s}function et(t,i){if(p(i))return t;const e={...t,...i};return-1===i.sale_price?e.sale_price=t.sale_price:e.original_price=t.sale_price,-1===i.stock_count&&(e.stock_count=t.stock_count),e}function st(t,e){if(p(e))return;const{skuId:n,product:c,promotionActivityProduct:r,customizationItemList:u}=t,a=s(e,t=>{const i=c.id,e=c.code,s=t.product,a=t.external_product;let m=!1;if(m=a?a.id===r?.id:i?s.id===i:s.code===e,!m)return!1;if(!n)return!0;const h=t.sku,d=t.external_sku;if(!(d?d.id===n:h.id===n))return!1;const l=t.product_customization_item_list||[];if(p(u)&&p(l))return!0;return A(o(u),l)});return a?i(a):void 0}function ot(t){return t.map(t=>function(t){const i=r(t,["id","count","combo_sku_id","combo_product_customization_item_list"]),e=i.combo_product_customization_item_list;return e&&(i.combo_product_customization_item_list=I(e)),i}(t))}function nt(t){return ot(o(t))}function ct(t,i){let e=0;const n=o(i);return t.forEach(t=>{const{items:i}=t;i.forEach(t=>{const{id:i,increase_sale_price:o}=t,c=s(n,t=>t.id===i);c&&o>0&&(e+=m.timesNumber(o,c.count))})}),e}function rt(t,i,e){if(-1===t)return t;const s=ct(i,e||[]);return m.plusNumber(t,s)}function ut(t,i){return t.length===i.length&&n(t,t=>s(i,i=>{if(i.id!==t.id||i.count!==t.count)return!1;if(i.combo_sku_id!==t.combo_sku_id)return!1;const e=i.combo_product_customization_item_list||[],s=t.combo_product_customization_item_list||[];return!(!p(s)||!p(e))||A(s,e)}))}function at(t){const{name:i,combo_sku_name:e,combo_product_customization_item_list:s}=t;let o=i;if(s){const t=ht(e,s);o=t?`${i}(${t})`:i;const n=dt(s);n&&(o=`${o}、${n}`)}return o}function mt(t){if(p(t))return"";return t.map(t=>at(t)).join("+")}function ht(t,i){const e=a(i||[],t=>1===t.count_type);if(p(e))return t||"";const s=e.map(t=>t.name).join("、");return t?`${t}、${s}`:s}function dt(t){const i=a(t||[],t=>1!==t.count_type);return p(i)?"":i.map(t=>`${t.name}x${t.count}`).join("、")}function pt(t){const{items:i,max_count:e}=t;let s=0;return i.forEach(t=>{1===t.selected&&(s+=t.count)}),-1===e||s<e}function lt(t,i){const{items:e,min_count:s,max_count:o}=t;let n=0;if(e.forEach((t,i)=>{1===t.selected&&n++}),2===i){if(1===s&&n<=1)return!1}else if(o>1&&n>=o)return!1;return!0}function _t(t){const{selected:i,selectable:e}=t;return 1===i&&2===e}function ft(t){const{selectable:i}=t;return 2!==i&&(!kt(t)&&!Ct(t))}function kt(t){const{children:i}=t;return!p(i)}function Ct(t){const{min_count:i,max_count:e}=t;return i!==e&&e>1}class Lt{product={};specImage=void 0;skuId=0;sku=void 0;skuList=[];skuListAfter=[];selectedSpecs=[];productSpecGroupList=[];specList=[];stockCount=0;minCount=1;maxCount=1;perOrderMinLimit=-1;perOrderMaxLimit=-1;salePrice=0;originalPrice=-1;skuComboGroupList=[];skuComboItemList=[];cartCount=0;cartItem=void 0;visibleComboInfo=!1;isComponentLoading=!0;initCartItem;channel1Type;onChange;_initSkuListAfter=[];_initSpecType=0;getInitialSkuId(){return this._initSkuListAfter[0]?.id??0}constructor(t){const{productData:i,initCartItem:e,channel1Type:s,onChange:o}=t;this.initCartItem=e,this.channel1Type=s,this.onChange=o,this._initProductData(i)}init(t){const i=this._initSpecType,e=this.initCartItem,s=this._initSkuListAfter;let o=0;if(2===i&&!p(e)){const{sku:t,external_sku:i}=e,n=i?.id||t.id;o=u(s,t=>t.id===n),-1===o&&(o=0)}this.cartItem=e,this.cartCount=e?.cart?.count||0;const n=s[o];if(1===i)return this._initSkuDetail(t),this._updateSkuData(n||this.skuList[0]),this.isComponentLoading=!1,void this._notifyChange();this._initSkuDetail(t),s[o]?.specs.forEach((t,i)=>{this._selectSpec(!0,t,i)}),this.isComponentLoading=!1,this._notifyChange()}getView(){return{product:this.product,skuId:this.skuId,salePrice:this.getSalePrice(),originalPrice:this.getOriginalPrice(),specImage:this.specImage,skuListAfter:this.skuListAfter,selectedSpecs:this.selectedSpecs,productSpecGroupList:this.productSpecGroupList,skuComboGroupList:this.skuComboGroupList,skuComboItemList:this.skuComboItemList,cartCount:this.cartCount,maxCount:this.maxCount,isComponentLoading:this.isComponentLoading,visibleComboInfo:this.visibleComboInfo}}handleSelectSpecs(t,i,o){if(!this._selectSpec(t,i,o)||this.selectedSpecs.indexOf("")>=0)return this._notifyChange(),{needFetchSkuDetail:!1,skuId:0};const n=s(this.skuListAfter,t=>e(t.specs,this.selectedSpecs));return n?(void 0!==this.specList[0]?.items[0]?.image&&this.specList[0].items.forEach(t=>{t.name===this.selectedSpecs[0]&&(this.specImage=t.image)}),this._notifyChange(),{needFetchSkuDetail:!0,skuId:n.id}):(this._notifyChange(),{needFetchSkuDetail:!1,skuId:0})}updateSkuDetailData(t){this._initSkuDetail(t),this._notifyChange()}updateCartCountData(t){if(t&&void 0!==t.cart){const i=t.cart,e=i?.count||0;this.cartItem=t,this.cartCount=e}else this.cartItem=void 0,this.cartCount=0;this._notifyChange()}handleSelectComboData(t){this.skuComboItemList=t;return L(this.skuComboGroupList)?(this.cartItem=void 0,this.cartCount=0,this._notifyChange(),{isValid:!1}):(this._notifyChange(),{isValid:!0})}handleProductCountChange(t,i){const{perOrderMinLimit:e,cartItem:s,selectedSpecs:o}=this;if(o.indexOf("")>=0)return{isValid:!1,errMsg:"请选择规格"};if(t>0){if(i===_&&-1!==e&&t<e)return{isValid:!0,cartItem:s,count:0};const o=L(this.skuComboGroupList);if(o)return{isValid:!1,errMsg:o};const n=this._checkProductCount(t);if(!n.isValid)return n}return{isValid:!0,cartItem:s,count:t}}getAddToCartParams(t,i){const{skuId:e,product:s,skuList:o,selectedSpecs:n,productSpecGroupList:c,skuComboItemList:r,perOrderMinLimit:u}=this,a=n.indexOf(""),m=W(s?.status,s?.has_stock),h=X(s?.status,s?.has_stock);if(0!==o[0].item_ids.length&&a>=0)return{isValid:!1,errMsg:`请选择${c[a].title}`};if(!m)return{isValid:!1,errMsg:h};const d=L(this.skuComboGroupList);if(d)return{isValid:!1,errMsg:d};return{isValid:!0,params:{productId:t,promotionActivityProductId:i,skuId:e,count:-1!==u?u:1,skuComboItemList:nt(r)}}}handleShowComboInfo(){p(o(this.skuComboItemList))||(this.visibleComboInfo=!0,this._notifyChange())}handleCloseComboInfo(){this.visibleComboInfo=!1,this._notifyChange()}getSalePrice(){return rt(this.salePrice,this.skuComboGroupList,this.skuComboItemList)}getOriginalPrice(){return rt(this.originalPrice,this.skuComboGroupList,this.skuComboItemList)}validateCombo(){return L(this.skuComboGroupList)}buildCartCountParams(){const t=nt(this.skuComboItemList);return{channel1_type:this.channel1Type,checked:1,sku_id:this.skuId,sku_type:0,sku_combo_item_list:JSON.stringify(t),cart:1}}_initProductData(t){const{product:i,skuList:e,productCover:s,productSpecGroupList:o}=t,n=H(o),r=B(o),u=J(e,n),a=K(o,s);this.product=i,this.specImage=a,this.skuList=e,this.skuListAfter=u,this.selectedSpecs=c(new Array(r.length),""),this.productSpecGroupList=r,this.specList=o,this._initSkuListAfter=u,this._initSpecType=i.spec_type}_initSkuDetail(t){const{sku:i,sku_combo_group_list:e}=t,s=w(i);this._updateSkuData(s);const o=k(e||[],this.cartItem?.sku_combo_item_list);this.skuComboGroupList=o,this.skuComboItemList=C(o)}_updateSkuData(t){const i=t.id,e=t.stock_count,s=t.per_order_min_limit,o=t.per_order_max_limit,n=-1===s?1:Math.min(s,e),c=-1===o?e:Math.min(o,e);this.sku=t,this.skuId=i,this.stockCount=e,this.salePrice=t.sale_price,this.originalPrice=t.original_price,this.minCount=n,this.maxCount=c,this.perOrderMinLimit=s,this.perOrderMaxLimit=o}_checkProductCount(t){const{minCount:i,maxCount:e,stockCount:s,perOrderMinLimit:o}=this;if(t<i||t<o){return{isValid:!1,errMsg:-1!==o?`该商品 ${o} 件起售哦`:`购买数量至少 ${i} 件`}}if(t>e){return{isValid:!1,errMsg:t>s?"库存不足":`该商品最多购买 ${e} 件哦`}}return{isValid:!0}}_selectSpec(t,i,e){const{selectedSpecs:s,productSpecGroupList:o}=this;return 0!==o.length&&(!(s[e]===i||!t)&&(s[e]=i,this.selectedSpecs=s.slice(),!0))}_notifyChange(){this.onChange()}}class gt{product={};promotionActivityProduct=void 0;specImage=void 0;skuId=0;sku=void 0;skuList=[];skuListAfter=[];selectedSpecs=[];productSpecGroupList=[];specList=[];activitySpecList=[];stockCount=0;minCount=1;maxCount=1;perOrderMinLimit=-1;perOrderMaxLimit=-1;salePrice=0;originalPrice=-1;customizationGroupList=[];customizationItemList=[];cartCount=0;cartItem=void 0;cartList=[];channel1Type;onChange;constructor(t){const{productData:i,cartList:e,channel1Type:s,onChange:o}=t;this.cartList=e||[],this.channel1Type=s,this.onChange=o,this._initProductData(i)}setCartList(t){this.cartList=t,this._updateSkuCartItem(),this._notifyChange()}init(){const t=this.skuListAfter,i=this.product.spec_type,o=this._findSkuCartItem();let n=0;if(!p(o)){const{sku:i,external_sku:e,product_customization_item_list:s}=o,c=e?.id||i.id;if(n=u(t,t=>t.id===c),-1===n&&(n=0),!p(s)){const t=$(this.customizationGroupList,s);this.customizationGroupList=t.customizationGroupList,this.customizationItemList=t.selectedCustomizationItemList}}if(this._updateSkuCartItem(),1===i)return this._updateSkuData(this.skuList[0]),void this._notifyChange();t[n]?.specs.forEach((t,i)=>{this._selectSpec(!0,t,i)});const c=s(t,t=>e(t.specs,this.selectedSpecs));c&&this._updateSkuData(c),this._notifyChange()}getView(){return{product:this.product,promotionActivityProduct:this.promotionActivityProduct,skuId:this.skuId,sku:this.sku,salePrice:this.getSalePrice(),originalPrice:this.originalPrice,specImage:this.specImage,skuListAfter:this.skuListAfter,selectedSpecs:this.selectedSpecs,productSpecGroupList:this.productSpecGroupList,activitySpecList:this.activitySpecList,customizationGroupList:this.customizationGroupList,cartCount:this.cartCount,maxCount:this.maxCount,cartItem:this.cartItem}}handleSelectSpecs(t,i,o){const n=this._selectSpec(t,i,o),c=this.buildCartCountParams();if(!n||this.selectedSpecs.indexOf("")>=0)return this._updateSkuCartItem(),this._notifyChange(),{needFetchCart:!1,cartParams:c};const r=s(this.skuListAfter,t=>e(t.specs,this.selectedSpecs));return r?(void 0!==this.specList[0]?.items[0]?.image&&this.specList[0].items.forEach(t=>{t.name===this.selectedSpecs[0]&&(this.specImage=t.image)}),this._updateSkuData(r),this._updateSkuCartItem(),this._notifyChange(),{needFetchCart:!0,cartParams:this.buildCartCountParams()}):(this._updateSkuCartItem(),this._notifyChange(),{needFetchCart:!1,cartParams:c})}updateCartCountData(t){if(t&&void 0!==t.cart){const i=t.cart;this.cartItem=t,this.cartCount=i?.count||0}else this.cartItem=void 0,this.cartCount=0;this._notifyChange()}handleCustomizationItemListSelect(t){this.customizationItemList=t;return M(this.customizationGroupList,t).isValid?(this._updateSkuCartItem(),this._notifyChange(),{isValid:!0,cartParams:this.buildCartCountParams()}):(this.cartItem=void 0,this.cartCount=0,this._notifyChange(),{isValid:!1})}handleProductCountChange(t,i){const{perOrderMinLimit:e,cartItem:s,selectedSpecs:o}=this;if(o.indexOf("")>=0)return{isValid:!1,errMsg:"请选择规格"};if(t>0){if(i===_&&-1!==e&&t<e)return{isValid:!0,cartItem:s,count:0};if(this.customizationGroupList.length>0){const t=M(this.customizationGroupList,this.customizationItemList);if(!t.isValid)return{isValid:!1,errMsg:t.errMsg}}const o=this._checkProductCount(t);if(!o.isValid)return o}return{isValid:!0,cartItem:s,count:t}}getAddToCartParams(t,i){const{sku:e,skuId:s,product:o,skuList:n,selectedSpecs:c,productSpecGroupList:r,customizationItemList:u,customizationGroupList:a,perOrderMinLimit:m}=this,h=c.indexOf(""),d=W(o?.status,o?.has_stock),p=X(o?.status,o?.has_stock);if(0!==n[0].item_ids.length&&h>=0)return{isValid:!1,errMsg:`请选择${r[h].title}`};if(!d)return{isValid:!1,errMsg:p};if(a.length>0){const t=M(a,u);if(!t.isValid)return{isValid:!1,errMsg:t.errMsg}}const l=v(u);return{isValid:!0,params:{productId:t,promotionActivityProductId:e?.is_promotion_activity?i:void 0,skuId:s,count:-1!==m?m:1,productCustomizationItemList:l}}}getSalePrice(){const t=x(this.customizationGroupList,this.customizationItemList);return this.salePrice+t}buildCartCountParams(){const t=v(this.customizationItemList),i=this.sku?.is_promotion_activity?1:0;return{channel1_type:this.channel1Type,checked:1,sku_id:this.skuId,sku_type:i,product_customization_item_list:JSON.stringify(t),cart:1}}_initProductData(t){const{product:i,promotionActivityProduct:e,skuList:s,productCover:o,productSpecGroupList:n,productCustomizationGroupList:r}=t,u=H(n),a=B(n),m=J(s,u),h=K(n,o),d=Q(n),p=P(r||[]);this.product=i,this.promotionActivityProduct=e,this.specImage=h,this.skuList=s,this.skuListAfter=m,this.selectedSpecs=c(new Array(a.length),""),this.productSpecGroupList=a,this.specList=n,this.activitySpecList=d,this.customizationGroupList=p,this.customizationItemList=r?z(p):[]}_updateSkuData(t){const i=t.id,e=t.stock_count,s=t.per_order_min_limit,o=t.per_order_max_limit,n=-1===s?1:Math.min(s,e),c=-1===o?e:Math.min(o,e);this.sku=t,this.skuId=i,this.stockCount=e,this.salePrice=t.sale_price,this.originalPrice=t.original_price,this.minCount=n,this.maxCount=c,this.perOrderMinLimit=s,this.perOrderMaxLimit=o,this._findSkuCartItem(i)}_checkProductCount(t){const{minCount:i,maxCount:e,stockCount:s,perOrderMinLimit:o}=this;if(t<i||t<o){return{isValid:!1,errMsg:-1!==o?`该商品 ${o} 件起售哦`:`购买数量至少 ${i} 件`}}if(t>e){return{isValid:!1,errMsg:t>s?"库存不足":`该商品最多购买 ${e} 件哦`}}return{isValid:!0}}_selectSpec(t,i,e){const{selectedSpecs:s,productSpecGroupList:o}=this;return 0!==o.length&&(!(s[e]===i||!t)&&(s[e]=i,this.selectedSpecs=s.slice(),!0))}_notifyChange(){this.onChange()}_findSkuCartItem(t){const{cartList:e}=this;if(p(e))return;const{product:n,promotionActivityProduct:c,customizationItemList:r}=this,u=s(e,i=>{const e=n.id,s=n.code,u=i.product,a=i.external_product;let m=!1;if(m=a?a.id===c?.id:e?u.id===e:u.code===s,!m)return!1;const h=t||this.skuId;if(!h)return!0;const d=i.sku,l=i.external_sku;if(!(l?l.id===h:d.id===h))return!1;const _=i.product_customization_item_list||[];if(p(r)&&p(_))return!0;return A(o(r),_)});return u?i(u):void 0}_updateSkuCartItem(){const t=this._findSkuCartItem(this.skuId);this.cartItem=t,this.cartCount=t?.cart?.count||0}}export{f as ComboSelector,Lt as ComboSpecSelector,gt as CustomSpecSelector,y as SpecSelector,ct as calculateSelectedComboPrice,x as calculateSelectedCustomizationPrice,j as checkCanPlusCount,Ct as checkComboItemIsUseSelectCount,O as checkCustomizationItemIsUseSelectCount,M as checkCustomizationItemList,A as checkCustomizationItemListEqual,pt as checkGroupCanPlusCount,kt as checkHasChildren,lt as checkIsCanChangeSelectCheckbox,T as checkIsDisabledSelected,_t as checkIsFixedSelect,D as checkIsFixedSelected,ft as checkIsUseSelectCheckbox,W as checkProductOnSale,ut as checkSkuComboItemListEqual,st as findCustomizationSkuCartItem,it as findProductCartList,rt as formatComboPrice,V as formatCountTypeUnit,dt as formatCustomizationCountType,P as formatCustomizationGroupList,G as formatCustomizationPrice,z as formatInitCustomizationItemList,Z as formatPriceRange,R as formatProductBuyText,F as formatProductComboChildrenSkuList,w as formatProductSku,N as formatProductSkuList,U as formatProductSpecGroupList,X as formatProductStatus,C as formatSelectSkuComboItemList,g as formatSelectTips,E as formatSelectedCustomizationItemList,mt as formatSkuComboItemList,at as formatSkuComboItemName,J as formatSkuListAfter,tt as formatSkuListStockCount,ht as formatSkuNameWithCustomization,Y as formatSkuPrice,B as formatSpecList,H as formatSpecObj,et as formatWithExternalSku,q as formatWithPromotionActivitySku,Q as getActivitySpecList,K as getSpecImage,ot as getSubmitComboItemList,nt as getSubmitComboItemListArr,I as getSubmitCustomizationItemList,v as getSubmitCustomizationItemListArr,k as reconstructComboGroupList,$ as reconstructCustomizationItemList,L as validateComboGroupList};
|
|
2
|
+
//# sourceMappingURL=hive-biz.esm.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hive-biz.esm.min.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/dist/hive-biz.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports,require("lodash-es"),require("@yorkjs/hive")):"function"==typeof define&&define.amd?define(["exports","lodash-es","@yorkjs/hive"],i):i((t="undefined"!=typeof globalThis?globalThis:t||self)["Hive-Biz"]={},t.lodashEs,t.hive)}(this,function(t,i,e){"use strict";function n(t){if(t&&t.__esModule)return t;var i=Object.create(null);return t&&Object.keys(t).forEach(function(e){if("default"!==e){var n=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(i,e,n.get?n:{enumerable:!0,get:function(){return t[e]}})}}),i.default=t,Object.freeze(i)}var o=n(e);function r(t,i){(null==i||i>t.length)&&(i=t.length);for(var e=0,n=Array(i);e<i;e++)n[e]=t[e];return n}function u(t,i,e){return i=l(i),function(t,i){if(i&&("object"==typeof i||"function"==typeof i))return i;if(void 0!==i)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,f()?Reflect.construct(i,e||[],l(t).constructor):i.apply(t,e))}function c(t,i){if(!(t instanceof i))throw new TypeError("Cannot call a class as a function")}function s(t,i,e){return i&&function(t,i){for(var e=0;e<i.length;e++){var n=i[e];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,v(n.key),n)}}(t.prototype,i),Object.defineProperty(t,"prototype",{writable:!1}),t}function a(t,i,e){return(i=v(i))in t?Object.defineProperty(t,i,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[i]=e,t}function l(t){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},l(t)}function f(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(f=function(){return!!t})()}function m(t,i){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);i&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function h(t){for(var i=1;i<arguments.length;i++){var e=null!=arguments[i]?arguments[i]:{};i%2?m(Object(e),!0).forEach(function(i){a(t,i,e[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):m(Object(e)).forEach(function(i){Object.defineProperty(t,i,Object.getOwnPropertyDescriptor(e,i))})}return t}function d(t,i){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,i){return t.__proto__=i,t},d(t,i)}function p(t){return function(t){if(Array.isArray(t))return r(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,i){if(t){if("string"==typeof t)return r(t,i);var e={}.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?r(t,i):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(t){var i=function(t,i){if("object"!=typeof t||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,i);if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===i?String:Number)(t)}(t,"string");return"symbol"==typeof i?i:i+""}function _(t){if(null==t||i.isNaN(t))return!0;var e=!1;switch(Object.prototype.toString.call(t)){case"[object Object]":e=0===Object.keys(t).length;break;case"[object Array]":e=0===t.length;break;case"[object String]":0===t.trim().length&&(e=!0)}return e}var k=1e7,y="decrease",C=function(){return s(function t(e){c(this,t),this.comboGroupList=i.cloneDeep(e.comboGroupList)},[{key:"getComboGroupList",value:function(){return i.cloneDeep(this.comboGroupList)}},{key:"updateComboGroupList",value:function(t){return!i.isEqual(this.comboGroupList,t)&&(this.comboGroupList=i.cloneDeep(t),!0)}},{key:"setItemSelected",value:function(t,i,e){var n=this.comboGroupList[t];if(n){var o=n.items,r=n.min_count,u=n.max_count,c=o[i];if(c){var s=0;if(o.forEach(function(t){1===t.selected&&s++}),2===e){if(1===r&&s<=1)return}else if(1===u)o.forEach(function(t,e){e!==i&&(t.selected=2)});else if(s>=u)return;c.selected=e}}}},{key:"setItemCount",value:function(t,i,e){var n=this.comboGroupList[t];if(n){var o=n.items[i];if(o){var r=n.items,u=o.min_count,c=o.max_count,s=n.max_count,a=this.checkIsFixedSelect(o),l=0;r.forEach(function(t){t.id===o.id?l+=e:1===t.selected&&(l+=t.count)}),-1!==s&&l>s||-1!==c&&e>c||e<0||l<0||a&&e<u||(o.count=e,o.selected=0===e?2:1)}}}},{key:"setComboChildSelected",value:function(t,i,e){var n=this.comboGroupList[t];if(n){var o=n.items[i];if(o&&!_(o.children)){var r=e.sku,u=e.count,c=r.id;o.children.forEach(function(t){t.combo_sku.id===c?(t.selected=1,t.count=u):t.selected=2}),o.selected=1}}}},{key:"setComboSkuSelected",value:function(t,i,e){var n,o,r=this.comboGroupList[t];if(r){var u=r.items[i];if(u){var c=e.sku,s=e.customization_item_list,a=this.checkComboItemIsUseSelectCount(u);u.combo_sku={id:c.id,name:c.name,stock_count:null!==(n=null===(o=u.combo_sku)||void 0===o?void 0:o.stock_count)&&void 0!==n?n:k},s&&(u.combo_customization_item_list=s),a&&0===u.count&&(u.count=1),this.setItemSelected(t,i,1)}}}},{key:"formatSelectSkuComboItemList",value:function(){return S(this.comboGroupList)}},{key:"validate",value:function(){return L(this.comboGroupList)}},{key:"reconstructFromCart",value:function(t){this.comboGroupList=b(this.comboGroupList,t)}},{key:"checkIsFixedSelect",value:function(t){var i=t.selected,e=t.selectable;return 1===i&&2===e}},{key:"checkComboItemIsUseSelectCount",value:function(t){var i=t.min_count,e=t.max_count;return i!==e&&e>1}}])}();function b(t,e){return _(e)?t:t.map(function(t){var n=t.items.map(function(t){var n=i.find(e,function(i){return i.id===t.id});if(!n)return 1===t.selectable&&(t.selected=2),t;var o=t.children,r=t.combo_product;if(!_(o))return o.forEach(function(t){t.combo_sku.id===n.combo_sku_id?(t.selected=1,t.count=n.count):t.selected=2}),t;if(r){var u,c;if(n.combo_sku_id)t.combo_sku={id:n.combo_sku_id,name:n.combo_sku_name,stock_count:null!==(u=null===(c=t.combo_sku)||void 0===c?void 0:c.stock_count)&&void 0!==u?u:k};n.combo_product_customization_item_list&&(t.combo_customization_item_list=[n.combo_product_customization_item_list])}return t.count=n.count,t.selected=1,t});return h(h({},t),{},{items:n})})}function S(t){return t.map(function(t){var e=[],n=t.name;return t.items.forEach(function(t){var o=t.id,r=t.name,u=t.count,c=t.selected,s=t.children,a=t.combo_sku,l=t.combo_sku_type,f=t.combo_customization_item_list;if(_(s)){if(2!==c)if(1!==l){if(a){var m={id:o,name:r,count:u,combo_sku_id:a.id,combo_sku_name:a.name,combo_group_name:n};f&&(m.combo_product_customization_item_list=i.flattenDeep(f)),e.push(m)}}else e.push({id:o,name:r,count:u,combo_group_name:n})}else{var h=i.find(s,function(t){return 1===t.selected});h&&e.push({id:o,name:"".concat(r,"(").concat(h.name,")"),combo_group_name:n,combo_sku_id:h.combo_sku.id,count:h.count})}}),e})}function L(t){var e=!0,n="",o=S(t);return t.forEach(function(t,r){var u;if(e){var c=t.items,s=t.min_count,a=t.max_count,l=t.name;if(c.forEach(function(t,o){if(e){var r=t.count,u=t.min_count,c=t.selected,s=t.children,a=t.combo_sku,f=t.combo_product;if(2!==c)if(_(s)){if(f&&_(a))return e=!1,void(n="【".concat(l,"】:第").concat(o+1,"个商品,请选择规格"));r<u&&(e=!1,n="【".concat(l,"】:第").concat(o+1,"个商品,至少选择 ").concat(u," 件"))}else{_(i.find(s,function(t){return 1===t.selected}))&&(e=!1,n="【".concat(l,"】:第").concat(o+1,"个商品,请选择定制项"))}}}),e){var f=0;if(null===(u=o[r])||void 0===u||u.forEach(function(t){f+=t.count}),f<s)return e=!1,void(n="【".concat(l,"】:至少选择 ").concat(s," 件商品"));f>a&&(e=!1,n="【".concat(l,"】:最多选择 ").concat(a," 件商品"))}}}),n}var g=function(t){function i(t,e){var n;return c(this,i),a(n=u(this,i,[t.reduce(function(t,i){return[].concat(p(t),p(i.list))},[])]),"specList",[]),a(n,"specCombinationList",[]),n.specList=t,n.specCombinationList=e,n.initSpec(),n.initSameLevel(),n}return function(t,i){if("function"!=typeof i&&null!==i)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(i&&i.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),i&&d(t,i)}(i,t),s(i,[{key:"initSpec",value:function(){var t=this;this.specCombinationList.forEach(function(i,e){t.fillInSpec(i.specs,e+2)})}},{key:"initSameLevel",value:function(){var t=this,i=this.getCollection(this.vertex);this.specList.forEach(function(e){var n=[];e.list.forEach(function(t){i.includes(t)&&n.push(t)}),t.fillInSpec(n,1)})}},{key:"getSpecsOptions",value:function(t){return t.some(Boolean)?this.getUnions(t.filter(Boolean)):this.getCollection(this.vertex)}},{key:"fillInSpec",value:function(t,i){var e=this;t.forEach(function(n){e.setAdjoinVertexs(n,t,i)})}}])}(function(){return s(function t(i){c(this,t),a(this,"vertex",[]),a(this,"quantity",0),a(this,"adjoinArray",[]),this.vertex=i,this.quantity=this.vertex.length,this.adjoinArray=[],this.init()},[{key:"init",value:function(){this.adjoinArray=i.fill(new Array(this.quantity*this.quantity),0)}},{key:"setAdjoinVertexs",value:function(t,i,e){var n=this,o=this.vertex.indexOf(t);i.forEach(function(t,i){var r=n.vertex.indexOf(t),u=n.adjoinArray[o*n.quantity+r];"number"!=typeof u?n.adjoinArray[o*n.quantity+r].push(e):n.adjoinArray[o*n.quantity+r]=u>1?[u,e]:e})}},{key:"getVertexCol",value:function(t){var i=this,e=this.vertex.indexOf(t),n=[];return this.vertex.forEach(function(t,o){n.push(i.adjoinArray[e+i.quantity*o])}),n}},{key:"getCollection",value:function(t){var i=this,e=t.map(function(t){return i.getVertexCol(t)}),n=[];return e.forEach(function(i,e){i.some(function(t){return 0!==t})&&n.push(t[e])}),n}},{key:"getUnions",value:function(t){var i=this,e=t.map(function(t){return i.getVertexCol(t)}),n=[];return this.vertex.forEach(function(t,o){var r=e.map(function(t){return t[o]}).filter(function(t){return 1!==t});i.isItemEqual(r)&&n.push(t)}),n}},{key:"isItemEqual",value:function(t){if(t.includes(0))return!1;var i=-1;return t.length&&(t.some(function(t){return"number"==typeof t&&(i=t),"number"==typeof t}),-1===i)?this.isArrayUnions(t):t.every(function(t){return"number"==typeof t?t===i:t.includes(i)})}},{key:"isArrayUnions",value:function(t){return!!t.length&&t[0].some(function(i){return t.every(function(t){return t.includes(i)})})}}])}()),I=function(){return s(function t(i){c(this,t);var e=i.productSpecGroupList,n=i.skuListAfter,o=i.activitySpecList,r=void 0===o?[]:o;this.productSpecGroupList=e,this.skuListAfter=n,this.activitySpecList=r,this.specAdjoinMatrix=new g(e,n)},[{key:"isActivitySpec",value:function(t,e){return!_(this.activitySpecList)&&!!i.find(this.activitySpecList[t],function(t){return t.name===e})}},{key:"getSpecGroupStateList",value:function(t){var i=this,e=this.specAdjoinMatrix.getSpecsOptions(t);return this.productSpecGroupList.map(function(n,o){return{title:n.title,items:n.list.map(function(n){return{value:n,isEnabled:-1!==e.indexOf(n),isActive:-1!==t.indexOf(n),isActivitySpec:i.isActivitySpec(o,n)}})}})}},{key:"getOptionSpecs",value:function(t){return this.specAdjoinMatrix.getSpecsOptions(t)}},{key:"toggleSpec",value:function(t,i,e,n){var o,r;if(!t)return n;var u=p(n),c=null!==(o=null===(r=this.productSpecGroupList[e])||void 0===r?void 0:r.list)&&void 0!==o?o:[];return-1!==u.indexOf(i)?u[e]="":(c.forEach(function(t){var i=u.indexOf(t);-1!==i&&(u[i]="")}),u[e]=i),u}},{key:"findMatchedSku",value:function(t){var i=t.filter(Boolean),e=this.productSpecGroupList.length;if(i.length===e)return this.skuListAfter.find(function(t){return i.every(function(i){return t.specs.includes(i)})})}},{key:"isAllSpecSelected",value:function(t){var i=this.productSpecGroupList.length;return t.filter(function(t){return!_(t)}).length===i}}])}();function P(t){return t.map(function(t){return function(t){return i.pick(t,["id","count"])}(t)})}function x(t){return P(i.flattenDeep(t))}function O(t,e){var n=0,r=i.flattenDeep(e);return t.forEach(function(t){t.items.forEach(function(t){var e=t.id,u=t.customization_item,c=u.increase_type,s=u.increase_sale_price,a=i.find(r,function(t){return t.id===e});a&&2===c&&(n+=o.default.timesNumber(s,a.count))})}),n}function z(t,e){return t.length===e.length&&i.every(t,function(t){return i.find(e,function(i){return i.id===t.id&&i.count===t.count})})}function G(t){return t.map(function(t){var i=h(h({},t),{},{items:[]});return i.items=t.items.map(function(t){var i=t.count,e=t.selected,n=h(h({},t),{},{selected_count:0});return 1===e&&(n.selected_count=i),n}),i})}function A(t){return E(t)}function E(t){var i=[];return t.forEach(function(t){var e=[],n=t.items,o=t.customization;n.forEach(function(t){var i=t.id,n=t.count,r=t.selected,u=t.selected_count,c=t.customization_item;1===r&&e.push({id:i,name:c.name,count:u||n,count_type:o.count_type})}),i.push(e)}),i}function j(t,e){var n=[],o=i.cloneDeep(t).map(function(t){var o=i.cloneDeep(t.items),r=t.customization,u=[];return o.forEach(function(t){var n=t.id,o=t.count,c=t.selected,s=t.selectable,a=t.customization_item,l=i.find(e,function(i){return i.id===t.id});l?(u.push(l),t.selected_count=l.count,t.selected=1):2===s?1===c&&u.push({id:n,name:a.name,count:o,count_type:r.count_type}):(t.selected_count=0,t.selected=2)}),n.push(u),h(h({},t),{},{items:o})});return{isValid:D(o,n).isValid,customizationGroupList:o,selectedCustomizationItemList:n}}function D(t,i){var e=!0,n="";return t.forEach(function(t,o){var r=t.customization,u=t.min_count,c=t.max_count,s=M(r.count_type);if(e){var a=0;return i[o].forEach(function(t){a+=t.count}),a<u?(e=!1,n="『".concat(r.name,"』:至少选择 ").concat(u," ").concat(s),void(1===c&&(n="请选择『".concat(r.name,"』")))):a>c?(e=!1,void(n="『".concat(r.name,"』:最多选择 ").concat(c," ").concat(s))):void 0}}),{isValid:e,errMsg:n}}function M(t){return 1===t?"种":"份"}function V(t,i){var e=h(h(h({},t),i),{},{origin_sku_id:t.id,is_promotion_activity:!0,is_set_activity_price:!1});return-1===i.sale_price?e.sale_price=t.sale_price:(e.original_price=t.sale_price,e.is_set_activity_price=!0),-1===i.stock_count&&(e.stock_count=t.stock_count),e}function w(t,i){return i?V(t,i):h(h({},t),{},{origin_sku_id:t.id,is_promotion_activity:!1,is_set_activity_price:!1})}function T(t){return t.map(function(t){return{title:t.spec.name,list:t.items.map(function(t){return t.name})}})}function q(t,i){var e=[];return t.map(function(t){t.stock_count>0&&e.push(h(h({},t),{},{specs:t.item_ids.map(function(t){return i[t]})}))}),e}function F(t){var i={};return t.forEach(function(t){t.items.forEach(function(t){i[t.id]=t.name})}),i}function N(t,i){var e,n=i;0!==t.length&&(void 0!==(null===(e=t[0].items[0])||void 0===e?void 0:e.image)&&(n=t[0].items[0].image));return n}function U(t){var i=[];return t.forEach(function(t){var e=[];t.items.forEach(function(t){t.is_promotion_activity&&e.push(t)}),i.push(e)}),i}function B(t,i){return 1===t&&1===i}function R(t,i){return 1===t&&2===(arguments.length>2&&void 0!==arguments[2]?arguments[2]:2)?1===i?"销售中":"已售罄":"已下架"}function W(t){return t.map(function(t){return function(t){var e=i.pick(t,["id","count","combo_sku_id","combo_product_customization_item_list"]),n=e.combo_product_customization_item_list;return n&&(e.combo_product_customization_item_list=P(n)),e}(t)})}function H(t){return W(i.flattenDeep(t))}function J(t,e){var n=0,r=i.flattenDeep(e);return t.forEach(function(t){t.items.forEach(function(t){var e=t.id,u=t.increase_sale_price,c=i.find(r,function(t){return t.id===e});c&&u>0&&(n+=o.timesNumber(u,c.count))})}),n}function $(t,i,e){if(-1===t)return t;var n=J(i,e||[]);return o.plusNumber(t,n)}function K(t){var i=t.name,e=t.combo_sku_name,n=t.combo_product_customization_item_list,o=i;if(n){var r=Q(e,n);o=r?"".concat(i,"(").concat(r,")"):i;var u=X(n);u&&(o="".concat(o,"、").concat(u))}return o}function Q(t,e){var n=i.filter(e||[],function(t){return 1===t.count_type});if(_(n))return t||"";var o=n.map(function(t){return t.name}).join("、");return t?"".concat(t,"、").concat(o):o}function X(t){var e=i.filter(t||[],function(t){return 1!==t.count_type});return _(e)?"":e.map(function(t){return"".concat(t.name,"x").concat(t.count)}).join("、")}function Y(t){return!_(t.children)}function Z(t){var i=t.min_count,e=t.max_count;return i!==e&&e>1}var tt=function(){return s(function t(i){c(this,t),a(this,"product",{}),a(this,"specImage",void 0),a(this,"skuId",0),a(this,"sku",void 0),a(this,"skuList",[]),a(this,"skuListAfter",[]),a(this,"selectedSpecs",[]),a(this,"productSpecGroupList",[]),a(this,"specList",[]),a(this,"stockCount",0),a(this,"minCount",1),a(this,"maxCount",1),a(this,"perOrderMinLimit",-1),a(this,"perOrderMaxLimit",-1),a(this,"salePrice",0),a(this,"originalPrice",-1),a(this,"skuComboGroupList",[]),a(this,"skuComboItemList",[]),a(this,"cartCount",0),a(this,"cartItem",void 0),a(this,"visibleComboInfo",!1),a(this,"isComponentLoading",!0),a(this,"_initSkuListAfter",[]),a(this,"_initSpecType",0);var e=i.productData,n=i.initCartItem,o=i.channel1Type,r=i.onChange;this.initCartItem=n,this.channel1Type=o,this.onChange=r,this._initProductData(e)},[{key:"getInitialSkuId",value:function(){var t,i;return null!==(t=null===(i=this._initSkuListAfter[0])||void 0===i?void 0:i.id)&&void 0!==t?t:0}},{key:"init",value:function(t){var e,n,o=this,r=this._initSpecType,u=this.initCartItem,c=this._initSkuListAfter,s=0;if(2===r&&!_(u)){var a=u.sku,l=u.external_sku,f=(null==l?void 0:l.id)||a.id;-1===(s=i.findIndex(c,function(t){return t.id===f}))&&(s=0)}this.cartItem=u,this.cartCount=(null==u||null===(e=u.cart)||void 0===e?void 0:e.count)||0;var m=c[s];if(1===r)return this._initSkuDetail(t),this._updateSkuData(m||this.skuList[0]),this.isComponentLoading=!1,void this._notifyChange();this._initSkuDetail(t),null===(n=c[s])||void 0===n||n.specs.forEach(function(t,i){o._selectSpec(!0,t,i)}),this.isComponentLoading=!1,this._notifyChange()}},{key:"getView",value:function(){return{product:this.product,skuId:this.skuId,salePrice:this.getSalePrice(),originalPrice:this.getOriginalPrice(),specImage:this.specImage,skuListAfter:this.skuListAfter,selectedSpecs:this.selectedSpecs,productSpecGroupList:this.productSpecGroupList,skuComboGroupList:this.skuComboGroupList,skuComboItemList:this.skuComboItemList,cartCount:this.cartCount,maxCount:this.maxCount,isComponentLoading:this.isComponentLoading,visibleComboInfo:this.visibleComboInfo}}},{key:"handleSelectSpecs",value:function(t,e,n){var o,r=this;if(!this._selectSpec(t,e,n)||this.selectedSpecs.indexOf("")>=0)return this._notifyChange(),{needFetchSkuDetail:!1,skuId:0};var u=i.find(this.skuListAfter,function(t){return i.isEqual(t.specs,r.selectedSpecs)});return u?(void 0!==(null===(o=this.specList[0])||void 0===o||null===(o=o.items[0])||void 0===o?void 0:o.image)&&this.specList[0].items.forEach(function(t){t.name===r.selectedSpecs[0]&&(r.specImage=t.image)}),this._notifyChange(),{needFetchSkuDetail:!0,skuId:u.id}):(this._notifyChange(),{needFetchSkuDetail:!1,skuId:0})}},{key:"updateSkuDetailData",value:function(t){this._initSkuDetail(t),this._notifyChange()}},{key:"updateCartCountData",value:function(t){if(t&&void 0!==t.cart){var i=t.cart,e=(null==i?void 0:i.count)||0;this.cartItem=t,this.cartCount=e}else this.cartItem=void 0,this.cartCount=0;this._notifyChange()}},{key:"handleSelectComboData",value:function(t){return this.skuComboItemList=t,L(this.skuComboGroupList)?(this.cartItem=void 0,this.cartCount=0,this._notifyChange(),{isValid:!1}):(this._notifyChange(),{isValid:!0})}},{key:"handleProductCountChange",value:function(t,i){var e=this.perOrderMinLimit,n=this.cartItem;if(this.selectedSpecs.indexOf("")>=0)return{isValid:!1,errMsg:"请选择规格"};if(t>0){if(i===y&&-1!==e&&t<e)return{isValid:!0,cartItem:n,count:0};var o=L(this.skuComboGroupList);if(o)return{isValid:!1,errMsg:o};var r=this._checkProductCount(t);if(!r.isValid)return r}return{isValid:!0,cartItem:n,count:t}}},{key:"getAddToCartParams",value:function(t,i){var e=this.skuId,n=this.product,o=this.skuList,r=this.selectedSpecs,u=this.productSpecGroupList,c=this.skuComboItemList,s=this.perOrderMinLimit,a=r.indexOf(""),l=B(null==n?void 0:n.status,null==n?void 0:n.has_stock),f=R(null==n?void 0:n.status,null==n?void 0:n.has_stock);if(0!==o[0].item_ids.length&&a>=0)return{isValid:!1,errMsg:"请选择".concat(u[a].title)};if(!l)return{isValid:!1,errMsg:f};var m=L(this.skuComboGroupList);return m?{isValid:!1,errMsg:m}:{isValid:!0,params:{productId:t,promotionActivityProductId:i,skuId:e,count:-1!==s?s:1,skuComboItemList:H(c)}}}},{key:"handleShowComboInfo",value:function(){_(i.flattenDeep(this.skuComboItemList))||(this.visibleComboInfo=!0,this._notifyChange())}},{key:"handleCloseComboInfo",value:function(){this.visibleComboInfo=!1,this._notifyChange()}},{key:"getSalePrice",value:function(){return $(this.salePrice,this.skuComboGroupList,this.skuComboItemList)}},{key:"getOriginalPrice",value:function(){return $(this.originalPrice,this.skuComboGroupList,this.skuComboItemList)}},{key:"validateCombo",value:function(){return L(this.skuComboGroupList)}},{key:"buildCartCountParams",value:function(){var t=H(this.skuComboItemList);return{channel1_type:this.channel1Type,checked:1,sku_id:this.skuId,sku_type:0,sku_combo_item_list:JSON.stringify(t),cart:1}}},{key:"_initProductData",value:function(t){var e=t.product,n=t.skuList,o=t.productCover,r=t.productSpecGroupList,u=F(r),c=T(r),s=q(n,u),a=N(r,o);this.product=e,this.specImage=a,this.skuList=n,this.skuListAfter=s,this.selectedSpecs=i.fill(new Array(c.length),""),this.productSpecGroupList=c,this.specList=r,this._initSkuListAfter=s,this._initSpecType=e.spec_type}},{key:"_initSkuDetail",value:function(t){var i,e=t.sku,n=t.sku_combo_group_list,o=w(e);this._updateSkuData(o);var r=b(n||[],null===(i=this.cartItem)||void 0===i?void 0:i.sku_combo_item_list);this.skuComboGroupList=r,this.skuComboItemList=S(r)}},{key:"_updateSkuData",value:function(t){var i=t.id,e=t.stock_count,n=t.per_order_min_limit,o=t.per_order_max_limit,r=-1===n?1:Math.min(n,e),u=-1===o?e:Math.min(o,e);this.sku=t,this.skuId=i,this.stockCount=e,this.salePrice=t.sale_price,this.originalPrice=t.original_price,this.minCount=r,this.maxCount=u,this.perOrderMinLimit=n,this.perOrderMaxLimit=o}},{key:"_checkProductCount",value:function(t){var i=this.minCount,e=this.maxCount,n=this.stockCount,o=this.perOrderMinLimit;return t<i||t<o?{isValid:!1,errMsg:-1!==o?"该商品 ".concat(o," 件起售哦"):"购买数量至少 ".concat(i," 件")}:t>e?{isValid:!1,errMsg:t>n?"库存不足":"该商品最多购买 ".concat(e," 件哦")}:{isValid:!0}}},{key:"_selectSpec",value:function(t,i,e){var n=this.selectedSpecs;return 0!==this.productSpecGroupList.length&&(!(n[e]===i||!t)&&(n[e]=i,this.selectedSpecs=n.slice(),!0))}},{key:"_notifyChange",value:function(){this.onChange()}}])}(),it=function(){return s(function t(i){c(this,t),a(this,"product",{}),a(this,"promotionActivityProduct",void 0),a(this,"specImage",void 0),a(this,"skuId",0),a(this,"sku",void 0),a(this,"skuList",[]),a(this,"skuListAfter",[]),a(this,"selectedSpecs",[]),a(this,"productSpecGroupList",[]),a(this,"specList",[]),a(this,"activitySpecList",[]),a(this,"stockCount",0),a(this,"minCount",1),a(this,"maxCount",1),a(this,"perOrderMinLimit",-1),a(this,"perOrderMaxLimit",-1),a(this,"salePrice",0),a(this,"originalPrice",-1),a(this,"customizationGroupList",[]),a(this,"customizationItemList",[]),a(this,"cartCount",0),a(this,"cartItem",void 0),a(this,"cartList",[]);var e=i.productData,n=i.cartList,o=i.channel1Type,r=i.onChange;this.cartList=n||[],this.channel1Type=o,this.onChange=r,this._initProductData(e)},[{key:"setCartList",value:function(t){this.cartList=t,this._updateSkuCartItem(),this._notifyChange()}},{key:"init",value:function(){var t,e=this,n=this.skuListAfter,o=this.product.spec_type,r=this._findSkuCartItem(),u=0;if(!_(r)){var c=r.sku,s=r.external_sku,a=r.product_customization_item_list,l=(null==s?void 0:s.id)||c.id;if(-1===(u=i.findIndex(n,function(t){return t.id===l}))&&(u=0),!_(a)){var f=j(this.customizationGroupList,a);this.customizationGroupList=f.customizationGroupList,this.customizationItemList=f.selectedCustomizationItemList}}if(this._updateSkuCartItem(),1===o)return this._updateSkuData(this.skuList[0]),void this._notifyChange();null===(t=n[u])||void 0===t||t.specs.forEach(function(t,i){e._selectSpec(!0,t,i)});var m=i.find(n,function(t){return i.isEqual(t.specs,e.selectedSpecs)});m&&this._updateSkuData(m),this._notifyChange()}},{key:"getView",value:function(){return{product:this.product,promotionActivityProduct:this.promotionActivityProduct,skuId:this.skuId,sku:this.sku,salePrice:this.getSalePrice(),originalPrice:this.originalPrice,specImage:this.specImage,skuListAfter:this.skuListAfter,selectedSpecs:this.selectedSpecs,productSpecGroupList:this.productSpecGroupList,activitySpecList:this.activitySpecList,customizationGroupList:this.customizationGroupList,cartCount:this.cartCount,maxCount:this.maxCount,cartItem:this.cartItem}}},{key:"handleSelectSpecs",value:function(t,e,n){var o,r=this,u=this._selectSpec(t,e,n),c=this.buildCartCountParams();if(!u||this.selectedSpecs.indexOf("")>=0)return this._updateSkuCartItem(),this._notifyChange(),{needFetchCart:!1,cartParams:c};var s=i.find(this.skuListAfter,function(t){return i.isEqual(t.specs,r.selectedSpecs)});return s?(void 0!==(null===(o=this.specList[0])||void 0===o||null===(o=o.items[0])||void 0===o?void 0:o.image)&&this.specList[0].items.forEach(function(t){t.name===r.selectedSpecs[0]&&(r.specImage=t.image)}),this._updateSkuData(s),this._updateSkuCartItem(),this._notifyChange(),{needFetchCart:!0,cartParams:this.buildCartCountParams()}):(this._updateSkuCartItem(),this._notifyChange(),{needFetchCart:!1,cartParams:c})}},{key:"updateCartCountData",value:function(t){if(t&&void 0!==t.cart){var i=t.cart;this.cartItem=t,this.cartCount=(null==i?void 0:i.count)||0}else this.cartItem=void 0,this.cartCount=0;this._notifyChange()}},{key:"handleCustomizationItemListSelect",value:function(t){return this.customizationItemList=t,D(this.customizationGroupList,t).isValid?(this._updateSkuCartItem(),this._notifyChange(),{isValid:!0,cartParams:this.buildCartCountParams()}):(this.cartItem=void 0,this.cartCount=0,this._notifyChange(),{isValid:!1})}},{key:"handleProductCountChange",value:function(t,i){var e=this.perOrderMinLimit,n=this.cartItem;if(this.selectedSpecs.indexOf("")>=0)return{isValid:!1,errMsg:"请选择规格"};if(t>0){if(i===y&&-1!==e&&t<e)return{isValid:!0,cartItem:n,count:0};if(this.customizationGroupList.length>0){var o=D(this.customizationGroupList,this.customizationItemList);if(!o.isValid)return{isValid:!1,errMsg:o.errMsg}}var r=this._checkProductCount(t);if(!r.isValid)return r}return{isValid:!0,cartItem:n,count:t}}},{key:"getAddToCartParams",value:function(t,i){var e=this.sku,n=this.skuId,o=this.product,r=this.skuList,u=this.selectedSpecs,c=this.productSpecGroupList,s=this.customizationItemList,a=this.customizationGroupList,l=this.perOrderMinLimit,f=u.indexOf(""),m=B(null==o?void 0:o.status,null==o?void 0:o.has_stock),h=R(null==o?void 0:o.status,null==o?void 0:o.has_stock);if(0!==r[0].item_ids.length&&f>=0)return{isValid:!1,errMsg:"请选择".concat(c[f].title)};if(!m)return{isValid:!1,errMsg:h};if(a.length>0){var d=D(a,s);if(!d.isValid)return{isValid:!1,errMsg:d.errMsg}}var p=x(s);return{isValid:!0,params:{productId:t,promotionActivityProductId:null!=e&&e.is_promotion_activity?i:void 0,skuId:n,count:-1!==l?l:1,productCustomizationItemList:p}}}},{key:"getSalePrice",value:function(){var t=O(this.customizationGroupList,this.customizationItemList);return this.salePrice+t}},{key:"buildCartCountParams",value:function(){var t,i=x(this.customizationItemList),e=null!==(t=this.sku)&&void 0!==t&&t.is_promotion_activity?1:0;return{channel1_type:this.channel1Type,checked:1,sku_id:this.skuId,sku_type:e,product_customization_item_list:JSON.stringify(i),cart:1}}},{key:"_initProductData",value:function(t){var e=t.product,n=t.promotionActivityProduct,o=t.skuList,r=t.productCover,u=t.productSpecGroupList,c=t.productCustomizationGroupList,s=F(u),a=T(u),l=q(o,s),f=N(u,r),m=U(u),h=G(c||[]);this.product=e,this.promotionActivityProduct=n,this.specImage=f,this.skuList=o,this.skuListAfter=l,this.selectedSpecs=i.fill(new Array(a.length),""),this.productSpecGroupList=a,this.specList=u,this.activitySpecList=m,this.customizationGroupList=h,this.customizationItemList=c?A(h):[]}},{key:"_updateSkuData",value:function(t){var i=t.id,e=t.stock_count,n=t.per_order_min_limit,o=t.per_order_max_limit,r=-1===n?1:Math.min(n,e),u=-1===o?e:Math.min(o,e);this.sku=t,this.skuId=i,this.stockCount=e,this.salePrice=t.sale_price,this.originalPrice=t.original_price,this.minCount=r,this.maxCount=u,this.perOrderMinLimit=n,this.perOrderMaxLimit=o,this._findSkuCartItem(i)}},{key:"_checkProductCount",value:function(t){var i=this.minCount,e=this.maxCount,n=this.stockCount,o=this.perOrderMinLimit;return t<i||t<o?{isValid:!1,errMsg:-1!==o?"该商品 ".concat(o," 件起售哦"):"购买数量至少 ".concat(i," 件")}:t>e?{isValid:!1,errMsg:t>n?"库存不足":"该商品最多购买 ".concat(e," 件哦")}:{isValid:!0}}},{key:"_selectSpec",value:function(t,i,e){var n=this.selectedSpecs;return 0!==this.productSpecGroupList.length&&(!(n[e]===i||!t)&&(n[e]=i,this.selectedSpecs=n.slice(),!0))}},{key:"_notifyChange",value:function(){this.onChange()}},{key:"_findSkuCartItem",value:function(t){var e=this,n=this.cartList;if(!_(n)){var o=this.product,r=this.promotionActivityProduct,u=this.customizationItemList,c=i.find(n,function(n){var c=o.id,s=o.code,a=n.product,l=n.external_product;if(!(l?l.id===(null==r?void 0:r.id):c?a.id===c:a.code===s))return!1;var f=t||e.skuId;if(!f)return!0;var m=n.sku,h=n.external_sku;if(!(h?h.id===f:m.id===f))return!1;var d=n.product_customization_item_list||[];return!(!_(u)||!_(d))||z(i.flattenDeep(u),d)});return c?i.cloneDeep(c):void 0}}},{key:"_updateSkuCartItem",value:function(){var t,i=this._findSkuCartItem(this.skuId);this.cartItem=i,this.cartCount=(null==i||null===(t=i.cart)||void 0===t?void 0:t.count)||0}}])}();t.ComboSelector=C,t.ComboSpecSelector=tt,t.CustomSpecSelector=it,t.SpecSelector=I,t.calculateSelectedComboPrice=J,t.calculateSelectedCustomizationPrice=O,t.checkCanPlusCount=function(t){var i=t.max_count,e=0;return t.items.forEach(function(t){1===t.selected&&(e+=t.selected_count)}),-1===i||e<i},t.checkComboItemIsUseSelectCount=Z,t.checkCustomizationItemIsUseSelectCount=function(t){var i=t.selectable,e=t.min_count,n=t.max_count;return 1===i&&e!==n&&n>1},t.checkCustomizationItemList=D,t.checkCustomizationItemListEqual=z,t.checkGroupCanPlusCount=function(t){var i=t.items,e=t.max_count,n=0;return i.forEach(function(t){1===t.selected&&(n+=t.count)}),-1===e||n<e},t.checkHasChildren=Y,t.checkIsCanChangeSelectCheckbox=function(t,i){var e=t.items,n=t.min_count,o=t.max_count,r=0;if(e.forEach(function(t,i){1===t.selected&&r++}),2===i){if(1===n&&r<=1)return!1}else if(o>1&&r>=o)return!1;return!0},t.checkIsDisabledSelected=function(t){var i=t.selected;return 2===t.selectable&&2===i},t.checkIsFixedSelect=function(t){var i=t.selected,e=t.selectable;return 1===i&&2===e},t.checkIsFixedSelected=function(t){var i=t.selected;return 2===t.selectable&&1===i},t.checkIsUseSelectCheckbox=function(t){return 2!==t.selectable&&(!Y(t)&&!Z(t))},t.checkProductOnSale=B,t.checkSkuComboItemListEqual=function(t,e){return t.length===e.length&&i.every(t,function(t){return i.find(e,function(i){if(i.id!==t.id||i.count!==t.count)return!1;if(i.combo_sku_id!==t.combo_sku_id)return!1;var e=i.combo_product_customization_item_list||[],n=t.combo_product_customization_item_list||[];return!(!_(n)||!_(e))||z(n,e)})})},t.findCustomizationSkuCartItem=function(t,e){if(!_(e)){var n=t.skuId,o=t.product,r=t.promotionActivityProduct,u=t.customizationItemList,c=i.find(e,function(t){var e=o.id,c=o.code,s=t.product,a=t.external_product;if(!(a?a.id===(null==r?void 0:r.id):e?s.id===e:s.code===c))return!1;if(!n)return!0;var l=t.sku,f=t.external_sku;if(!(f?f.id===n:l.id===n))return!1;var m=t.product_customization_item_list||[];return!(!_(u)||!_(m))||z(i.flattenDeep(u),m)});return c?i.cloneDeep(c):void 0}},t.findProductCartList=function(t,i,e){var n={cartList:[],cartCount:0},o=i.id,r=i.code;return t.forEach(function(t){var i=t.product,u=t.external_product;t.error||(e?(null==u?void 0:u.id)===e&&(n.cartList.push(t),n.cartCount+=t.cart.count):o?i.id===o&&(n.cartList.push(t),n.cartCount+=t.cart.count):i.code===r&&(n.cartList.push(t),n.cartCount+=t.cart.count))}),n},t.formatComboPrice=$,t.formatCountTypeUnit=M,t.formatCustomizationCountType=X,t.formatCustomizationGroupList=G,t.formatCustomizationPrice=function(t,i,e){if(-1===t)return t;var n=O(i,e||[]);return o.default.plusNumber(t,n)},t.formatInitCustomizationItemList=A,t.formatPriceRange=function(t){var i=t.end_price,n=t.start_price;return n===i?"¥".concat(e.moneyToDisplay(n)):"¥".concat(e.moneyToDisplay(n),"~").concat(e.moneyToDisplay(i))},t.formatProductBuyText=function(t,i){var e=i.combo_type,n=i.select_type;return 2===e?"选套餐":3===t||2===n?"选规格":"加入购物车"},t.formatProductComboChildrenSkuList=function(t,e){var n=[];return e.forEach(function(e){var o=e.combo_sku,r=e.min_count,u=e.max_count,c=i.find(t,function(t){return t.id===o.id});if(c){var s=h({},c);r>0&&(s.per_order_min_limit=r),u>0&&(s.per_order_max_limit=u),n.push(s)}}),n},t.formatProductSku=w,t.formatProductSkuList=function(t,e,n){return e?function(t,e,n){if(n)return t.map(function(t){var n=i.find(e,function(i){return i.sku.id===t.id}),o=w(t);if(n){var r=n.promotion_activity_sku;o=V(t,r)}return o});return e.map(function(t){return V(t.sku,t.promotion_activity_sku)})}(t,e,n):t.map(function(t){return w(t)})},t.formatProductSpecGroupList=function(t,e,n){var o=[];return e.forEach(function(e,r){var u=e.items,c=h(h({},e),{},{items:[]});t.forEach(function(t){var e=t.item_ids,o=i.findIndex(u,function(t){return t.id===e[r]});if(-1!==o){var s=u[o];-1===i.findIndex(c.items,function(t){return t.id===s.id})&&(t.is_promotion_activity&&n&&(s.is_promotion_activity=!0),c.items.push(s))}}),o.push(c)}),o},t.formatProductStatus=R,t.formatSelectSkuComboItemList=S,t.formatSelectTips=function(t){var e=t.items,n=t.repeatable,o=t.min_count,r=t.max_count;if(i.every(e,function(t){return 2===t.selectable}))return"";var u=[];o===r?u.push("请选择".concat(o,"项")):(o>0&&u.push("至少选择".concat(o,"项")),r>0&&u.push("最多可选".concat(r,"项"))),1===n&&u.push("可重复选");var c=0;return e.forEach(function(t){1===t.selected&&(c+=t.count)}),c>0&&u.push("已选".concat(c)),u.join(",")},t.formatSelectedCustomizationItemList=E,t.formatSkuComboItemList=function(t){return _(t)?"":t.map(function(t){return K(t)}).join("+")},t.formatSkuComboItemName=K,t.formatSkuListAfter=q,t.formatSkuListStockCount=function(t){var i=0;return t.forEach(function(t){i+=t.stock_count}),i},t.formatSkuNameWithCustomization=Q,t.formatSkuPrice=function(t){var i=t.map(function(t){return t.sale_price}),n=Math.min.apply(Math,p(i))||0,o=Math.max.apply(Math,p(i))||0;return n===o?"¥".concat(e.moneyToDisplay(n)):"¥".concat(e.moneyToDisplay(n)," ~ ¥").concat(e.moneyToDisplay(o))},t.formatSpecList=T,t.formatSpecObj=F,t.formatWithExternalSku=function(t,i){if(_(i))return t;var e=h(h({},t),i);return-1===i.sale_price?e.sale_price=t.sale_price:e.original_price=t.sale_price,-1===i.stock_count&&(e.stock_count=t.stock_count),e},t.formatWithPromotionActivitySku=V,t.getActivitySpecList=U,t.getSpecImage=N,t.getSubmitComboItemList=W,t.getSubmitComboItemListArr=H,t.getSubmitCustomizationItemList=P,t.getSubmitCustomizationItemListArr=x,t.reconstructComboGroupList=b,t.reconstructCustomizationItemList=j,t.validateComboGroupList=L});
|
|
2
|
+
//# sourceMappingURL=hive-biz.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hive-biz.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports,require("lodash-es"),require("@yorkjs/hive")):"function"==typeof define&&define.amd?define(["exports","lodash-es","@yorkjs/hive"],i):i((t="undefined"!=typeof globalThis?globalThis:t||self)["Hive-Biz"]={},t.lodashEs,t.hive)}(this,function(t,i,e){"use strict";function n(t){if(t&&t.__esModule)return t;var i=Object.create(null);return t&&Object.keys(t).forEach(function(e){if("default"!==e){var n=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(i,e,n.get?n:{enumerable:!0,get:function(){return t[e]}})}}),i.default=t,Object.freeze(i)}var o=n(e);function r(t,i){(null==i||i>t.length)&&(i=t.length);for(var e=0,n=Array(i);e<i;e++)n[e]=t[e];return n}function u(t,i,e){return i=l(i),function(t,i){if(i&&("object"==typeof i||"function"==typeof i))return i;if(void 0!==i)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,f()?Reflect.construct(i,e||[],l(t).constructor):i.apply(t,e))}function c(t,i){if(!(t instanceof i))throw new TypeError("Cannot call a class as a function")}function s(t,i,e){return i&&function(t,i){for(var e=0;e<i.length;e++){var n=i[e];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,v(n.key),n)}}(t.prototype,i),Object.defineProperty(t,"prototype",{writable:!1}),t}function a(t,i,e){return(i=v(i))in t?Object.defineProperty(t,i,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[i]=e,t}function l(t){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},l(t)}function f(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(f=function(){return!!t})()}function m(t,i){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);i&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function h(t){for(var i=1;i<arguments.length;i++){var e=null!=arguments[i]?arguments[i]:{};i%2?m(Object(e),!0).forEach(function(i){a(t,i,e[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):m(Object(e)).forEach(function(i){Object.defineProperty(t,i,Object.getOwnPropertyDescriptor(e,i))})}return t}function d(t,i){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,i){return t.__proto__=i,t},d(t,i)}function p(t){return function(t){if(Array.isArray(t))return r(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,i){if(t){if("string"==typeof t)return r(t,i);var e={}.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?r(t,i):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(t){var i=function(t,i){if("object"!=typeof t||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,i);if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===i?String:Number)(t)}(t,"string");return"symbol"==typeof i?i:i+""}function _(t){if(null==t||i.isNaN(t))return!0;var e=!1;switch(Object.prototype.toString.call(t)){case"[object Object]":e=0===Object.keys(t).length;break;case"[object Array]":e=0===t.length;break;case"[object String]":0===t.trim().length&&(e=!0)}return e}var k=1e7,y="decrease",C=function(){return s(function t(e){c(this,t),this.comboGroupList=i.cloneDeep(e.comboGroupList)},[{key:"getComboGroupList",value:function(){return i.cloneDeep(this.comboGroupList)}},{key:"updateComboGroupList",value:function(t){return!i.isEqual(this.comboGroupList,t)&&(this.comboGroupList=i.cloneDeep(t),!0)}},{key:"setItemSelected",value:function(t,i,e){var n=this.comboGroupList[t];if(n){var o=n.items,r=n.min_count,u=n.max_count,c=o[i];if(c){var s=0;if(o.forEach(function(t){1===t.selected&&s++}),2===e){if(1===r&&s<=1)return}else if(1===u)o.forEach(function(t,e){e!==i&&(t.selected=2)});else if(s>=u)return;c.selected=e}}}},{key:"setItemCount",value:function(t,i,e){var n=this.comboGroupList[t];if(n){var o=n.items[i];if(o){var r=n.items,u=o.min_count,c=o.max_count,s=n.max_count,a=this.checkIsFixedSelect(o),l=0;r.forEach(function(t){t.id===o.id?l+=e:1===t.selected&&(l+=t.count)}),-1!==s&&l>s||-1!==c&&e>c||e<0||l<0||a&&e<u||(o.count=e,o.selected=0===e?2:1)}}}},{key:"setComboChildSelected",value:function(t,i,e){var n=this.comboGroupList[t];if(n){var o=n.items[i];if(o&&!_(o.children)){var r=e.sku,u=e.count,c=r.id;o.children.forEach(function(t){t.combo_sku.id===c?(t.selected=1,t.count=u):t.selected=2}),o.selected=1}}}},{key:"setComboSkuSelected",value:function(t,i,e){var n,o,r=this.comboGroupList[t];if(r){var u=r.items[i];if(u){var c=e.sku,s=e.customization_item_list,a=this.checkComboItemIsUseSelectCount(u);u.combo_sku={id:c.id,name:c.name,stock_count:null!==(n=null===(o=u.combo_sku)||void 0===o?void 0:o.stock_count)&&void 0!==n?n:k},s&&(u.combo_customization_item_list=s),a&&0===u.count&&(u.count=1),this.setItemSelected(t,i,1)}}}},{key:"formatSelectSkuComboItemList",value:function(){return S(this.comboGroupList)}},{key:"validate",value:function(){return L(this.comboGroupList)}},{key:"reconstructFromCart",value:function(t){this.comboGroupList=b(this.comboGroupList,t)}},{key:"checkIsFixedSelect",value:function(t){var i=t.selected,e=t.selectable;return 1===i&&2===e}},{key:"checkComboItemIsUseSelectCount",value:function(t){var i=t.min_count,e=t.max_count;return i!==e&&e>1}}])}();function b(t,e){return _(e)?t:t.map(function(t){var n=t.items.map(function(t){var n=i.find(e,function(i){return i.id===t.id});if(!n)return 1===t.selectable&&(t.selected=2),t;var o=t.children,r=t.combo_product;if(!_(o))return o.forEach(function(t){t.combo_sku.id===n.combo_sku_id?(t.selected=1,t.count=n.count):t.selected=2}),t;if(r){var u,c;if(n.combo_sku_id)t.combo_sku={id:n.combo_sku_id,name:n.combo_sku_name,stock_count:null!==(u=null===(c=t.combo_sku)||void 0===c?void 0:c.stock_count)&&void 0!==u?u:k};n.combo_product_customization_item_list&&(t.combo_customization_item_list=[n.combo_product_customization_item_list])}return t.count=n.count,t.selected=1,t});return h(h({},t),{},{items:n})})}function S(t){return t.map(function(t){var e=[],n=t.name;return t.items.forEach(function(t){var o=t.id,r=t.name,u=t.count,c=t.selected,s=t.children,a=t.combo_sku,l=t.combo_sku_type,f=t.combo_customization_item_list;if(_(s)){if(2!==c)if(1!==l){if(a){var m={id:o,name:r,count:u,combo_sku_id:a.id,combo_sku_name:a.name,combo_group_name:n};f&&(m.combo_product_customization_item_list=i.flattenDeep(f)),e.push(m)}}else e.push({id:o,name:r,count:u,combo_group_name:n})}else{var h=i.find(s,function(t){return 1===t.selected});h&&e.push({id:o,name:"".concat(r,"(").concat(h.name,")"),combo_group_name:n,combo_sku_id:h.combo_sku.id,count:h.count})}}),e})}function L(t){var e=!0,n="",o=S(t);return t.forEach(function(t,r){var u;if(e){var c=t.items,s=t.min_count,a=t.max_count,l=t.name;if(c.forEach(function(t,o){if(e){var r=t.count,u=t.min_count,c=t.selected,s=t.children,a=t.combo_sku,f=t.combo_product;if(2!==c)if(_(s)){if(f&&_(a))return e=!1,void(n="【".concat(l,"】:第").concat(o+1,"个商品,请选择规格"));r<u&&(e=!1,n="【".concat(l,"】:第").concat(o+1,"个商品,至少选择 ").concat(u," 件"))}else{_(i.find(s,function(t){return 1===t.selected}))&&(e=!1,n="【".concat(l,"】:第").concat(o+1,"个商品,请选择定制项"))}}}),e){var f=0;if(null===(u=o[r])||void 0===u||u.forEach(function(t){f+=t.count}),f<s)return e=!1,void(n="【".concat(l,"】:至少选择 ").concat(s," 件商品"));f>a&&(e=!1,n="【".concat(l,"】:最多选择 ").concat(a," 件商品"))}}}),n}var g=function(t){function i(t,e){var n;return c(this,i),a(n=u(this,i,[t.reduce(function(t,i){return[].concat(p(t),p(i.list))},[])]),"specList",[]),a(n,"specCombinationList",[]),n.specList=t,n.specCombinationList=e,n.initSpec(),n.initSameLevel(),n}return function(t,i){if("function"!=typeof i&&null!==i)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(i&&i.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),i&&d(t,i)}(i,t),s(i,[{key:"initSpec",value:function(){var t=this;this.specCombinationList.forEach(function(i,e){t.fillInSpec(i.specs,e+2)})}},{key:"initSameLevel",value:function(){var t=this,i=this.getCollection(this.vertex);this.specList.forEach(function(e){var n=[];e.list.forEach(function(t){i.includes(t)&&n.push(t)}),t.fillInSpec(n,1)})}},{key:"getSpecsOptions",value:function(t){return t.some(Boolean)?this.getUnions(t.filter(Boolean)):this.getCollection(this.vertex)}},{key:"fillInSpec",value:function(t,i){var e=this;t.forEach(function(n){e.setAdjoinVertexs(n,t,i)})}}])}(function(){return s(function t(i){c(this,t),a(this,"vertex",[]),a(this,"quantity",0),a(this,"adjoinArray",[]),this.vertex=i,this.quantity=this.vertex.length,this.adjoinArray=[],this.init()},[{key:"init",value:function(){this.adjoinArray=i.fill(new Array(this.quantity*this.quantity),0)}},{key:"setAdjoinVertexs",value:function(t,i,e){var n=this,o=this.vertex.indexOf(t);i.forEach(function(t,i){var r=n.vertex.indexOf(t),u=n.adjoinArray[o*n.quantity+r];"number"!=typeof u?n.adjoinArray[o*n.quantity+r].push(e):n.adjoinArray[o*n.quantity+r]=u>1?[u,e]:e})}},{key:"getVertexCol",value:function(t){var i=this,e=this.vertex.indexOf(t),n=[];return this.vertex.forEach(function(t,o){n.push(i.adjoinArray[e+i.quantity*o])}),n}},{key:"getCollection",value:function(t){var i=this,e=t.map(function(t){return i.getVertexCol(t)}),n=[];return e.forEach(function(i,e){i.some(function(t){return 0!==t})&&n.push(t[e])}),n}},{key:"getUnions",value:function(t){var i=this,e=t.map(function(t){return i.getVertexCol(t)}),n=[];return this.vertex.forEach(function(t,o){var r=e.map(function(t){return t[o]}).filter(function(t){return 1!==t});i.isItemEqual(r)&&n.push(t)}),n}},{key:"isItemEqual",value:function(t){if(t.includes(0))return!1;var i=-1;return t.length&&(t.some(function(t){return"number"==typeof t&&(i=t),"number"==typeof t}),-1===i)?this.isArrayUnions(t):t.every(function(t){return"number"==typeof t?t===i:t.includes(i)})}},{key:"isArrayUnions",value:function(t){return!!t.length&&t[0].some(function(i){return t.every(function(t){return t.includes(i)})})}}])}()),I=function(){return s(function t(i){c(this,t);var e=i.productSpecGroupList,n=i.skuListAfter,o=i.activitySpecList,r=void 0===o?[]:o;this.productSpecGroupList=e,this.skuListAfter=n,this.activitySpecList=r,this.specAdjoinMatrix=new g(e,n)},[{key:"isActivitySpec",value:function(t,e){return!_(this.activitySpecList)&&!!i.find(this.activitySpecList[t],function(t){return t.name===e})}},{key:"getSpecGroupStateList",value:function(t){var i=this,e=this.specAdjoinMatrix.getSpecsOptions(t);return this.productSpecGroupList.map(function(n,o){return{title:n.title,items:n.list.map(function(n){return{value:n,isEnabled:-1!==e.indexOf(n),isActive:-1!==t.indexOf(n),isActivitySpec:i.isActivitySpec(o,n)}})}})}},{key:"getOptionSpecs",value:function(t){return this.specAdjoinMatrix.getSpecsOptions(t)}},{key:"toggleSpec",value:function(t,i,e,n){var o,r;if(!t)return n;var u=p(n),c=null!==(o=null===(r=this.productSpecGroupList[e])||void 0===r?void 0:r.list)&&void 0!==o?o:[];return-1!==u.indexOf(i)?u[e]="":(c.forEach(function(t){var i=u.indexOf(t);-1!==i&&(u[i]="")}),u[e]=i),u}},{key:"findMatchedSku",value:function(t){var i=t.filter(Boolean),e=this.productSpecGroupList.length;if(i.length===e)return this.skuListAfter.find(function(t){return i.every(function(i){return t.specs.includes(i)})})}},{key:"isAllSpecSelected",value:function(t){var i=this.productSpecGroupList.length;return t.filter(function(t){return!_(t)}).length===i}}])}();function P(t){return t.map(function(t){return function(t){return i.pick(t,["id","count"])}(t)})}function x(t){return P(i.flattenDeep(t))}function O(t,e){var n=0,r=i.flattenDeep(e);return t.forEach(function(t){t.items.forEach(function(t){var e=t.id,u=t.customization_item,c=u.increase_type,s=u.increase_sale_price,a=i.find(r,function(t){return t.id===e});a&&2===c&&(n+=o.default.timesNumber(s,a.count))})}),n}function z(t,e){return t.length===e.length&&i.every(t,function(t){return i.find(e,function(i){return i.id===t.id&&i.count===t.count})})}function G(t){return t.map(function(t){var i=h(h({},t),{},{items:[]});return i.items=t.items.map(function(t){var i=t.count,e=t.selected,n=h(h({},t),{},{selected_count:0});return 1===e&&(n.selected_count=i),n}),i})}function A(t){return E(t)}function E(t){var i=[];return t.forEach(function(t){var e=[],n=t.items,o=t.customization;n.forEach(function(t){var i=t.id,n=t.count,r=t.selected,u=t.selected_count,c=t.customization_item;1===r&&e.push({id:i,name:c.name,count:u||n,count_type:o.count_type})}),i.push(e)}),i}function j(t,e){var n=[],o=i.cloneDeep(t).map(function(t){var o=i.cloneDeep(t.items),r=t.customization,u=[];return o.forEach(function(t){var n=t.id,o=t.count,c=t.selected,s=t.selectable,a=t.customization_item,l=i.find(e,function(i){return i.id===t.id});l?(u.push(l),t.selected_count=l.count,t.selected=1):2===s?1===c&&u.push({id:n,name:a.name,count:o,count_type:r.count_type}):(t.selected_count=0,t.selected=2)}),n.push(u),h(h({},t),{},{items:o})});return{isValid:D(o,n).isValid,customizationGroupList:o,selectedCustomizationItemList:n}}function D(t,i){var e=!0,n="";return t.forEach(function(t,o){var r=t.customization,u=t.min_count,c=t.max_count,s=M(r.count_type);if(e){var a=0;return i[o].forEach(function(t){a+=t.count}),a<u?(e=!1,n="『".concat(r.name,"』:至少选择 ").concat(u," ").concat(s),void(1===c&&(n="请选择『".concat(r.name,"』")))):a>c?(e=!1,void(n="『".concat(r.name,"』:最多选择 ").concat(c," ").concat(s))):void 0}}),{isValid:e,errMsg:n}}function M(t){return 1===t?"种":"份"}function V(t,i){var e=h(h(h({},t),i),{},{origin_sku_id:t.id,is_promotion_activity:!0,is_set_activity_price:!1});return-1===i.sale_price?e.sale_price=t.sale_price:(e.original_price=t.sale_price,e.is_set_activity_price=!0),-1===i.stock_count&&(e.stock_count=t.stock_count),e}function w(t,i){return i?V(t,i):h(h({},t),{},{origin_sku_id:t.id,is_promotion_activity:!1,is_set_activity_price:!1})}function T(t){return t.map(function(t){return{title:t.spec.name,list:t.items.map(function(t){return t.name})}})}function q(t,i){var e=[];return t.map(function(t){t.stock_count>0&&e.push(h(h({},t),{},{specs:t.item_ids.map(function(t){return i[t]})}))}),e}function F(t){var i={};return t.forEach(function(t){t.items.forEach(function(t){i[t.id]=t.name})}),i}function N(t,i){var e,n=i;0!==t.length&&(void 0!==(null===(e=t[0].items[0])||void 0===e?void 0:e.image)&&(n=t[0].items[0].image));return n}function U(t){var i=[];return t.forEach(function(t){var e=[];t.items.forEach(function(t){t.is_promotion_activity&&e.push(t)}),i.push(e)}),i}function B(t,i){return 1===t&&1===i}function R(t,i){return 1===t&&2===(arguments.length>2&&void 0!==arguments[2]?arguments[2]:2)?1===i?"销售中":"已售罄":"已下架"}function W(t){return t.map(function(t){return function(t){var e=i.pick(t,["id","count","combo_sku_id","combo_product_customization_item_list"]),n=e.combo_product_customization_item_list;return n&&(e.combo_product_customization_item_list=P(n)),e}(t)})}function H(t){return W(i.flattenDeep(t))}function J(t,e){var n=0,r=i.flattenDeep(e);return t.forEach(function(t){t.items.forEach(function(t){var e=t.id,u=t.increase_sale_price,c=i.find(r,function(t){return t.id===e});c&&u>0&&(n+=o.timesNumber(u,c.count))})}),n}function $(t,i,e){if(-1===t)return t;var n=J(i,e||[]);return o.plusNumber(t,n)}function K(t){var i=t.name,e=t.combo_sku_name,n=t.combo_product_customization_item_list,o=i;if(n){var r=Q(e,n);o=r?"".concat(i,"(").concat(r,")"):i;var u=X(n);u&&(o="".concat(o,"、").concat(u))}return o}function Q(t,e){var n=i.filter(e||[],function(t){return 1===t.count_type});if(_(n))return t||"";var o=n.map(function(t){return t.name}).join("、");return t?"".concat(t,"、").concat(o):o}function X(t){var e=i.filter(t||[],function(t){return 1!==t.count_type});return _(e)?"":e.map(function(t){return"".concat(t.name,"x").concat(t.count)}).join("、")}function Y(t){return!_(t.children)}function Z(t){var i=t.min_count,e=t.max_count;return i!==e&&e>1}var tt=function(){return s(function t(i){c(this,t),a(this,"product",{}),a(this,"specImage",void 0),a(this,"skuId",0),a(this,"sku",void 0),a(this,"skuList",[]),a(this,"skuListAfter",[]),a(this,"selectedSpecs",[]),a(this,"productSpecGroupList",[]),a(this,"specList",[]),a(this,"stockCount",0),a(this,"minCount",1),a(this,"maxCount",1),a(this,"perOrderMinLimit",-1),a(this,"perOrderMaxLimit",-1),a(this,"salePrice",0),a(this,"originalPrice",-1),a(this,"skuComboGroupList",[]),a(this,"skuComboItemList",[]),a(this,"cartCount",0),a(this,"cartItem",void 0),a(this,"visibleComboInfo",!1),a(this,"isComponentLoading",!0),a(this,"_initSkuListAfter",[]),a(this,"_initSpecType",0);var e=i.productData,n=i.initCartItem,o=i.channel1Type,r=i.onChange;this.initCartItem=n,this.channel1Type=o,this.onChange=r,this._initProductData(e)},[{key:"getInitialSkuId",value:function(){var t,i;return null!==(t=null===(i=this._initSkuListAfter[0])||void 0===i?void 0:i.id)&&void 0!==t?t:0}},{key:"init",value:function(t){var e,n,o=this,r=this._initSpecType,u=this.initCartItem,c=this._initSkuListAfter,s=0;if(2===r&&!_(u)){var a=u.sku,l=u.external_sku,f=(null==l?void 0:l.id)||a.id;-1===(s=i.findIndex(c,function(t){return t.id===f}))&&(s=0)}this.cartItem=u,this.cartCount=(null==u||null===(e=u.cart)||void 0===e?void 0:e.count)||0;var m=c[s];if(1===r)return this._initSkuDetail(t),this._updateSkuData(m||this.skuList[0]),this.isComponentLoading=!1,void this._notifyChange();this._initSkuDetail(t),null===(n=c[s])||void 0===n||n.specs.forEach(function(t,i){o._selectSpec(!0,t,i)}),this.isComponentLoading=!1,this._notifyChange()}},{key:"getView",value:function(){return{product:this.product,skuId:this.skuId,salePrice:this.getSalePrice(),originalPrice:this.getOriginalPrice(),specImage:this.specImage,skuListAfter:this.skuListAfter,selectedSpecs:this.selectedSpecs,productSpecGroupList:this.productSpecGroupList,skuComboGroupList:this.skuComboGroupList,skuComboItemList:this.skuComboItemList,cartCount:this.cartCount,maxCount:this.maxCount,isComponentLoading:this.isComponentLoading,visibleComboInfo:this.visibleComboInfo}}},{key:"handleSelectSpecs",value:function(t,e,n){var o,r=this;if(!this._selectSpec(t,e,n)||this.selectedSpecs.indexOf("")>=0)return this._notifyChange(),{needFetchSkuDetail:!1,skuId:0};var u=i.find(this.skuListAfter,function(t){return i.isEqual(t.specs,r.selectedSpecs)});return u?(void 0!==(null===(o=this.specList[0])||void 0===o||null===(o=o.items[0])||void 0===o?void 0:o.image)&&this.specList[0].items.forEach(function(t){t.name===r.selectedSpecs[0]&&(r.specImage=t.image)}),this._notifyChange(),{needFetchSkuDetail:!0,skuId:u.id}):(this._notifyChange(),{needFetchSkuDetail:!1,skuId:0})}},{key:"updateSkuDetailData",value:function(t){this._initSkuDetail(t),this._notifyChange()}},{key:"updateCartCountData",value:function(t){if(t&&void 0!==t.cart){var i=t.cart,e=(null==i?void 0:i.count)||0;this.cartItem=t,this.cartCount=e}else this.cartItem=void 0,this.cartCount=0;this._notifyChange()}},{key:"handleSelectComboData",value:function(t){return this.skuComboItemList=t,L(this.skuComboGroupList)?(this.cartItem=void 0,this.cartCount=0,this._notifyChange(),{isValid:!1}):(this._notifyChange(),{isValid:!0})}},{key:"handleProductCountChange",value:function(t,i){var e=this.perOrderMinLimit,n=this.cartItem;if(this.selectedSpecs.indexOf("")>=0)return{isValid:!1,errMsg:"请选择规格"};if(t>0){if(i===y&&-1!==e&&t<e)return{isValid:!0,cartItem:n,count:0};var o=L(this.skuComboGroupList);if(o)return{isValid:!1,errMsg:o};var r=this._checkProductCount(t);if(!r.isValid)return r}return{isValid:!0,cartItem:n,count:t}}},{key:"getAddToCartParams",value:function(t,i){var e=this.skuId,n=this.product,o=this.skuList,r=this.selectedSpecs,u=this.productSpecGroupList,c=this.skuComboItemList,s=this.perOrderMinLimit,a=r.indexOf(""),l=B(null==n?void 0:n.status,null==n?void 0:n.has_stock),f=R(null==n?void 0:n.status,null==n?void 0:n.has_stock);if(0!==o[0].item_ids.length&&a>=0)return{isValid:!1,errMsg:"请选择".concat(u[a].title)};if(!l)return{isValid:!1,errMsg:f};var m=L(this.skuComboGroupList);return m?{isValid:!1,errMsg:m}:{isValid:!0,params:{productId:t,promotionActivityProductId:i,skuId:e,count:-1!==s?s:1,skuComboItemList:H(c)}}}},{key:"handleShowComboInfo",value:function(){_(i.flattenDeep(this.skuComboItemList))||(this.visibleComboInfo=!0,this._notifyChange())}},{key:"handleCloseComboInfo",value:function(){this.visibleComboInfo=!1,this._notifyChange()}},{key:"getSalePrice",value:function(){return $(this.salePrice,this.skuComboGroupList,this.skuComboItemList)}},{key:"getOriginalPrice",value:function(){return $(this.originalPrice,this.skuComboGroupList,this.skuComboItemList)}},{key:"validateCombo",value:function(){return L(this.skuComboGroupList)}},{key:"buildCartCountParams",value:function(){var t=H(this.skuComboItemList);return{channel1_type:this.channel1Type,checked:1,sku_id:this.skuId,sku_type:0,sku_combo_item_list:JSON.stringify(t),cart:1}}},{key:"_initProductData",value:function(t){var e=t.product,n=t.skuList,o=t.productCover,r=t.productSpecGroupList,u=F(r),c=T(r),s=q(n,u),a=N(r,o);this.product=e,this.specImage=a,this.skuList=n,this.skuListAfter=s,this.selectedSpecs=i.fill(new Array(c.length),""),this.productSpecGroupList=c,this.specList=r,this._initSkuListAfter=s,this._initSpecType=e.spec_type}},{key:"_initSkuDetail",value:function(t){var i,e=t.sku,n=t.sku_combo_group_list,o=w(e);this._updateSkuData(o);var r=b(n||[],null===(i=this.cartItem)||void 0===i?void 0:i.sku_combo_item_list);this.skuComboGroupList=r,this.skuComboItemList=S(r)}},{key:"_updateSkuData",value:function(t){var i=t.id,e=t.stock_count,n=t.per_order_min_limit,o=t.per_order_max_limit,r=-1===n?1:Math.min(n,e),u=-1===o?e:Math.min(o,e);this.sku=t,this.skuId=i,this.stockCount=e,this.salePrice=t.sale_price,this.originalPrice=t.original_price,this.minCount=r,this.maxCount=u,this.perOrderMinLimit=n,this.perOrderMaxLimit=o}},{key:"_checkProductCount",value:function(t){var i=this.minCount,e=this.maxCount,n=this.stockCount,o=this.perOrderMinLimit;return t<i||t<o?{isValid:!1,errMsg:-1!==o?"该商品 ".concat(o," 件起售哦"):"购买数量至少 ".concat(i," 件")}:t>e?{isValid:!1,errMsg:t>n?"库存不足":"该商品最多购买 ".concat(e," 件哦")}:{isValid:!0}}},{key:"_selectSpec",value:function(t,i,e){var n=this.selectedSpecs;return 0!==this.productSpecGroupList.length&&(!(n[e]===i||!t)&&(n[e]=i,this.selectedSpecs=n.slice(),!0))}},{key:"_notifyChange",value:function(){this.onChange()}}])}(),it=function(){return s(function t(i){c(this,t),a(this,"product",{}),a(this,"promotionActivityProduct",void 0),a(this,"specImage",void 0),a(this,"skuId",0),a(this,"sku",void 0),a(this,"skuList",[]),a(this,"skuListAfter",[]),a(this,"selectedSpecs",[]),a(this,"productSpecGroupList",[]),a(this,"specList",[]),a(this,"activitySpecList",[]),a(this,"stockCount",0),a(this,"minCount",1),a(this,"maxCount",1),a(this,"perOrderMinLimit",-1),a(this,"perOrderMaxLimit",-1),a(this,"salePrice",0),a(this,"originalPrice",-1),a(this,"customizationGroupList",[]),a(this,"customizationItemList",[]),a(this,"cartCount",0),a(this,"cartItem",void 0),a(this,"cartList",[]);var e=i.productData,n=i.cartList,o=i.channel1Type,r=i.onChange;this.cartList=n||[],this.channel1Type=o,this.onChange=r,this._initProductData(e)},[{key:"setCartList",value:function(t){this.cartList=t,this._updateSkuCartItem(),this._notifyChange()}},{key:"init",value:function(){var t,e=this,n=this.skuListAfter,o=this.product.spec_type,r=this._findSkuCartItem(),u=0;if(!_(r)){var c=r.sku,s=r.external_sku,a=r.product_customization_item_list,l=(null==s?void 0:s.id)||c.id;if(-1===(u=i.findIndex(n,function(t){return t.id===l}))&&(u=0),!_(a)){var f=j(this.customizationGroupList,a);this.customizationGroupList=f.customizationGroupList,this.customizationItemList=f.selectedCustomizationItemList}}if(this._updateSkuCartItem(),1===o)return this._updateSkuData(this.skuList[0]),void this._notifyChange();null===(t=n[u])||void 0===t||t.specs.forEach(function(t,i){e._selectSpec(!0,t,i)});var m=i.find(n,function(t){return i.isEqual(t.specs,e.selectedSpecs)});m&&this._updateSkuData(m),this._notifyChange()}},{key:"getView",value:function(){return{product:this.product,promotionActivityProduct:this.promotionActivityProduct,skuId:this.skuId,sku:this.sku,salePrice:this.getSalePrice(),originalPrice:this.originalPrice,specImage:this.specImage,skuListAfter:this.skuListAfter,selectedSpecs:this.selectedSpecs,productSpecGroupList:this.productSpecGroupList,activitySpecList:this.activitySpecList,customizationGroupList:this.customizationGroupList,cartCount:this.cartCount,maxCount:this.maxCount,cartItem:this.cartItem}}},{key:"handleSelectSpecs",value:function(t,e,n){var o,r=this,u=this._selectSpec(t,e,n),c=this.buildCartCountParams();if(!u||this.selectedSpecs.indexOf("")>=0)return this._updateSkuCartItem(),this._notifyChange(),{needFetchCart:!1,cartParams:c};var s=i.find(this.skuListAfter,function(t){return i.isEqual(t.specs,r.selectedSpecs)});return s?(void 0!==(null===(o=this.specList[0])||void 0===o||null===(o=o.items[0])||void 0===o?void 0:o.image)&&this.specList[0].items.forEach(function(t){t.name===r.selectedSpecs[0]&&(r.specImage=t.image)}),this._updateSkuData(s),this._updateSkuCartItem(),this._notifyChange(),{needFetchCart:!0,cartParams:this.buildCartCountParams()}):(this._updateSkuCartItem(),this._notifyChange(),{needFetchCart:!1,cartParams:c})}},{key:"updateCartCountData",value:function(t){if(t&&void 0!==t.cart){var i=t.cart;this.cartItem=t,this.cartCount=(null==i?void 0:i.count)||0}else this.cartItem=void 0,this.cartCount=0;this._notifyChange()}},{key:"handleCustomizationItemListSelect",value:function(t){return this.customizationItemList=t,D(this.customizationGroupList,t).isValid?(this._updateSkuCartItem(),this._notifyChange(),{isValid:!0,cartParams:this.buildCartCountParams()}):(this.cartItem=void 0,this.cartCount=0,this._notifyChange(),{isValid:!1})}},{key:"handleProductCountChange",value:function(t,i){var e=this.perOrderMinLimit,n=this.cartItem;if(this.selectedSpecs.indexOf("")>=0)return{isValid:!1,errMsg:"请选择规格"};if(t>0){if(i===y&&-1!==e&&t<e)return{isValid:!0,cartItem:n,count:0};if(this.customizationGroupList.length>0){var o=D(this.customizationGroupList,this.customizationItemList);if(!o.isValid)return{isValid:!1,errMsg:o.errMsg}}var r=this._checkProductCount(t);if(!r.isValid)return r}return{isValid:!0,cartItem:n,count:t}}},{key:"getAddToCartParams",value:function(t,i){var e=this.sku,n=this.skuId,o=this.product,r=this.skuList,u=this.selectedSpecs,c=this.productSpecGroupList,s=this.customizationItemList,a=this.customizationGroupList,l=this.perOrderMinLimit,f=u.indexOf(""),m=B(null==o?void 0:o.status,null==o?void 0:o.has_stock),h=R(null==o?void 0:o.status,null==o?void 0:o.has_stock);if(0!==r[0].item_ids.length&&f>=0)return{isValid:!1,errMsg:"请选择".concat(c[f].title)};if(!m)return{isValid:!1,errMsg:h};if(a.length>0){var d=D(a,s);if(!d.isValid)return{isValid:!1,errMsg:d.errMsg}}var p=x(s);return{isValid:!0,params:{productId:t,promotionActivityProductId:null!=e&&e.is_promotion_activity?i:void 0,skuId:n,count:-1!==l?l:1,productCustomizationItemList:p}}}},{key:"getSalePrice",value:function(){var t=O(this.customizationGroupList,this.customizationItemList);return this.salePrice+t}},{key:"buildCartCountParams",value:function(){var t,i=x(this.customizationItemList),e=null!==(t=this.sku)&&void 0!==t&&t.is_promotion_activity?1:0;return{channel1_type:this.channel1Type,checked:1,sku_id:this.skuId,sku_type:e,product_customization_item_list:JSON.stringify(i),cart:1}}},{key:"_initProductData",value:function(t){var e=t.product,n=t.promotionActivityProduct,o=t.skuList,r=t.productCover,u=t.productSpecGroupList,c=t.productCustomizationGroupList,s=F(u),a=T(u),l=q(o,s),f=N(u,r),m=U(u),h=G(c||[]);this.product=e,this.promotionActivityProduct=n,this.specImage=f,this.skuList=o,this.skuListAfter=l,this.selectedSpecs=i.fill(new Array(a.length),""),this.productSpecGroupList=a,this.specList=u,this.activitySpecList=m,this.customizationGroupList=h,this.customizationItemList=c?A(h):[]}},{key:"_updateSkuData",value:function(t){var i=t.id,e=t.stock_count,n=t.per_order_min_limit,o=t.per_order_max_limit,r=-1===n?1:Math.min(n,e),u=-1===o?e:Math.min(o,e);this.sku=t,this.skuId=i,this.stockCount=e,this.salePrice=t.sale_price,this.originalPrice=t.original_price,this.minCount=r,this.maxCount=u,this.perOrderMinLimit=n,this.perOrderMaxLimit=o,this._findSkuCartItem(i)}},{key:"_checkProductCount",value:function(t){var i=this.minCount,e=this.maxCount,n=this.stockCount,o=this.perOrderMinLimit;return t<i||t<o?{isValid:!1,errMsg:-1!==o?"该商品 ".concat(o," 件起售哦"):"购买数量至少 ".concat(i," 件")}:t>e?{isValid:!1,errMsg:t>n?"库存不足":"该商品最多购买 ".concat(e," 件哦")}:{isValid:!0}}},{key:"_selectSpec",value:function(t,i,e){var n=this.selectedSpecs;return 0!==this.productSpecGroupList.length&&(!(n[e]===i||!t)&&(n[e]=i,this.selectedSpecs=n.slice(),!0))}},{key:"_notifyChange",value:function(){this.onChange()}},{key:"_findSkuCartItem",value:function(t){var e=this,n=this.cartList;if(!_(n)){var o=this.product,r=this.promotionActivityProduct,u=this.customizationItemList,c=i.find(n,function(n){var c=o.id,s=o.code,a=n.product,l=n.external_product;if(!(l?l.id===(null==r?void 0:r.id):c?a.id===c:a.code===s))return!1;var f=t||e.skuId;if(!f)return!0;var m=n.sku,h=n.external_sku;if(!(h?h.id===f:m.id===f))return!1;var d=n.product_customization_item_list||[];return!(!_(u)||!_(d))||z(i.flattenDeep(u),d)});return c?i.cloneDeep(c):void 0}}},{key:"_updateSkuCartItem",value:function(){var t,i=this._findSkuCartItem(this.skuId);this.cartItem=i,this.cartCount=(null==i||null===(t=i.cart)||void 0===t?void 0:t.count)||0}}])}();t.ComboSelector=C,t.ComboSpecSelector=tt,t.CustomSpecSelector=it,t.SpecSelector=I,t.calculateSelectedComboPrice=J,t.calculateSelectedCustomizationPrice=O,t.checkCanPlusCount=function(t){var i=t.max_count,e=0;return t.items.forEach(function(t){1===t.selected&&(e+=t.selected_count)}),-1===i||e<i},t.checkComboItemIsUseSelectCount=Z,t.checkCustomizationItemIsUseSelectCount=function(t){var i=t.selectable,e=t.min_count,n=t.max_count;return 1===i&&e!==n&&n>1},t.checkCustomizationItemList=D,t.checkCustomizationItemListEqual=z,t.checkGroupCanPlusCount=function(t){var i=t.items,e=t.max_count,n=0;return i.forEach(function(t){1===t.selected&&(n+=t.count)}),-1===e||n<e},t.checkHasChildren=Y,t.checkIsCanChangeSelectCheckbox=function(t,i){var e=t.items,n=t.min_count,o=t.max_count,r=0;if(e.forEach(function(t,i){1===t.selected&&r++}),2===i){if(1===n&&r<=1)return!1}else if(o>1&&r>=o)return!1;return!0},t.checkIsDisabledSelected=function(t){var i=t.selected;return 2===t.selectable&&2===i},t.checkIsFixedSelect=function(t){var i=t.selected,e=t.selectable;return 1===i&&2===e},t.checkIsFixedSelected=function(t){var i=t.selected;return 2===t.selectable&&1===i},t.checkIsUseSelectCheckbox=function(t){return 2!==t.selectable&&(!Y(t)&&!Z(t))},t.checkProductOnSale=B,t.checkSkuComboItemListEqual=function(t,e){return t.length===e.length&&i.every(t,function(t){return i.find(e,function(i){if(i.id!==t.id||i.count!==t.count)return!1;if(i.combo_sku_id!==t.combo_sku_id)return!1;var e=i.combo_product_customization_item_list||[],n=t.combo_product_customization_item_list||[];return!(!_(n)||!_(e))||z(n,e)})})},t.findCustomizationSkuCartItem=function(t,e){if(!_(e)){var n=t.skuId,o=t.product,r=t.promotionActivityProduct,u=t.customizationItemList,c=i.find(e,function(t){var e=o.id,c=o.code,s=t.product,a=t.external_product;if(!(a?a.id===(null==r?void 0:r.id):e?s.id===e:s.code===c))return!1;if(!n)return!0;var l=t.sku,f=t.external_sku;if(!(f?f.id===n:l.id===n))return!1;var m=t.product_customization_item_list||[];return!(!_(u)||!_(m))||z(i.flattenDeep(u),m)});return c?i.cloneDeep(c):void 0}},t.findProductCartList=function(t,i,e){var n={cartList:[],cartCount:0},o=i.id,r=i.code;return t.forEach(function(t){var i=t.product,u=t.external_product;t.error||(e?(null==u?void 0:u.id)===e&&(n.cartList.push(t),n.cartCount+=t.cart.count):o?i.id===o&&(n.cartList.push(t),n.cartCount+=t.cart.count):i.code===r&&(n.cartList.push(t),n.cartCount+=t.cart.count))}),n},t.formatComboPrice=$,t.formatCountTypeUnit=M,t.formatCustomizationCountType=X,t.formatCustomizationGroupList=G,t.formatCustomizationPrice=function(t,i,e){if(-1===t)return t;var n=O(i,e||[]);return o.default.plusNumber(t,n)},t.formatInitCustomizationItemList=A,t.formatPriceRange=function(t){var i=t.end_price,n=t.start_price;return n===i?"¥".concat(e.moneyToDisplay(n)):"¥".concat(e.moneyToDisplay(n),"~").concat(e.moneyToDisplay(i))},t.formatProductBuyText=function(t,i){var e=i.combo_type,n=i.select_type;return 2===e?"选套餐":3===t||2===n?"选规格":"加入购物车"},t.formatProductComboChildrenSkuList=function(t,e){var n=[];return e.forEach(function(e){var o=e.combo_sku,r=e.min_count,u=e.max_count,c=i.find(t,function(t){return t.id===o.id});if(c){var s=h({},c);r>0&&(s.per_order_min_limit=r),u>0&&(s.per_order_max_limit=u),n.push(s)}}),n},t.formatProductSku=w,t.formatProductSkuList=function(t,e,n){return e?function(t,e,n){if(n)return t.map(function(t){var n=i.find(e,function(i){return i.sku.id===t.id}),o=w(t);if(n){var r=n.promotion_activity_sku;o=V(t,r)}return o});return e.map(function(t){return V(t.sku,t.promotion_activity_sku)})}(t,e,n):t.map(function(t){return w(t)})},t.formatProductSpecGroupList=function(t,e,n){var o=[];return e.forEach(function(e,r){var u=e.items,c=h(h({},e),{},{items:[]});t.forEach(function(t){var e=t.item_ids,o=i.findIndex(u,function(t){return t.id===e[r]});if(-1!==o){var s=u[o];-1===i.findIndex(c.items,function(t){return t.id===s.id})&&(t.is_promotion_activity&&n&&(s.is_promotion_activity=!0),c.items.push(s))}}),o.push(c)}),o},t.formatProductStatus=R,t.formatSelectSkuComboItemList=S,t.formatSelectTips=function(t){var e=t.items,n=t.repeatable,o=t.min_count,r=t.max_count;if(i.every(e,function(t){return 2===t.selectable}))return"";var u=[];o===r?u.push("请选择".concat(o,"项")):(o>0&&u.push("至少选择".concat(o,"项")),r>0&&u.push("最多可选".concat(r,"项"))),1===n&&u.push("可重复选");var c=0;return e.forEach(function(t){1===t.selected&&(c+=t.count)}),c>0&&u.push("已选".concat(c)),u.join(",")},t.formatSelectedCustomizationItemList=E,t.formatSkuComboItemList=function(t){return _(t)?"":t.map(function(t){return K(t)}).join("+")},t.formatSkuComboItemName=K,t.formatSkuListAfter=q,t.formatSkuListStockCount=function(t){var i=0;return t.forEach(function(t){i+=t.stock_count}),i},t.formatSkuNameWithCustomization=Q,t.formatSkuPrice=function(t){var i=t.map(function(t){return t.sale_price}),n=Math.min.apply(Math,p(i))||0,o=Math.max.apply(Math,p(i))||0;return n===o?"¥".concat(e.moneyToDisplay(n)):"¥".concat(e.moneyToDisplay(n)," ~ ¥").concat(e.moneyToDisplay(o))},t.formatSpecList=T,t.formatSpecObj=F,t.formatWithExternalSku=function(t,i){if(_(i))return t;var e=h(h({},t),i);return-1===i.sale_price?e.sale_price=t.sale_price:e.original_price=t.sale_price,-1===i.stock_count&&(e.stock_count=t.stock_count),e},t.formatWithPromotionActivitySku=V,t.getActivitySpecList=U,t.getSpecImage=N,t.getSubmitComboItemList=W,t.getSubmitComboItemListArr=H,t.getSubmitCustomizationItemList=P,t.getSubmitCustomizationItemListArr=x,t.reconstructComboGroupList=b,t.reconstructCustomizationItemList=j,t.validateComboGroupList=L});
|
|
2
|
+
//# sourceMappingURL=hive-biz.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hive-biz.min.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@yorkjs/hive-biz",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "util function",
|
|
5
|
+
"main": "dist/hive-biz.js",
|
|
6
|
+
"module": "dist/hive-biz.esm.js",
|
|
7
|
+
"jsnext:main": "dist/hive-biz.esm.js",
|
|
8
|
+
"types": "types/index.d.ts",
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"types"
|
|
12
|
+
],
|
|
13
|
+
"keywords": [
|
|
14
|
+
"hive-biz"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"test": "jest",
|
|
18
|
+
"source": "cross-env NODE_ENV=development NODE_FORMAT=es node_modules/.bin/rollup -c ./rollup.config.js && cross-env NODE_ENV=development node_modules/.bin/rollup -c ./rollup.config.js",
|
|
19
|
+
"min": "cross-env NODE_ENV=production NODE_MINIFY=true NODE_FORMAT=es node_modules/.bin/rollup -c ./rollup.config.js && cross-env NODE_ENV=production NODE_MINIFY=true node_modules/.bin/rollup -c ./rollup.config.js",
|
|
20
|
+
"build": "npm run source && npm run min"
|
|
21
|
+
},
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "git+https://github.com/yorkjs/hive-biz.git"
|
|
25
|
+
},
|
|
26
|
+
"author": "yorkjs team",
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"bugs": {
|
|
29
|
+
"url": "https://github.com/yorkjs/hive-biz/issues"
|
|
30
|
+
},
|
|
31
|
+
"homepage": "https://github.com/yorkjs/hive-biz#readme",
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@babel/core": "^7.27.4",
|
|
34
|
+
"@babel/preset-env": "^7.27.2",
|
|
35
|
+
"@babel/preset-typescript": "^7.27.1",
|
|
36
|
+
"@rollup/plugin-babel": "^6.0.4",
|
|
37
|
+
"@rollup/plugin-replace": "^6.0.2",
|
|
38
|
+
"@types/jest": "^30.0.0",
|
|
39
|
+
"@types/node": "^24.0.3",
|
|
40
|
+
"cross-env": "^7.0.3",
|
|
41
|
+
"jest": "^30.0.2",
|
|
42
|
+
"jest-environment-jsdom": "^30.0.2",
|
|
43
|
+
"rollup": "^4.44.0",
|
|
44
|
+
"rollup-plugin-filesize": "^10.0.0",
|
|
45
|
+
"rollup-plugin-terser": "^7.0.2",
|
|
46
|
+
"rollup-plugin-typescript2": "^0.36.0",
|
|
47
|
+
"ts-jest": "^29.4.0",
|
|
48
|
+
"typedoc": "^0.28.17",
|
|
49
|
+
"typescript": "^5.9.3"
|
|
50
|
+
},
|
|
51
|
+
"dependencies": {
|
|
52
|
+
"@yorkjs/hive": "^0.4.7",
|
|
53
|
+
"lodash-es": "^4.17.21",
|
|
54
|
+
"typedoc-material-theme": "^1.4.1"
|
|
55
|
+
}
|
|
56
|
+
}
|
package/types/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './selector/comboSelector';
|
|
2
|
+
export * from './selector/specSelector';
|
|
3
|
+
export * from './selector/comboSpecSelector';
|
|
4
|
+
export * from './selector/customSpecSelector';
|
|
5
|
+
export * from './selector/type';
|
|
6
|
+
export * from './selector/product';
|
|
7
|
+
export * from './selector/customization';
|
|
8
|
+
export * from './selector/combo';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ICartSkuComboItem, IOrderSkuCustomizationItem, ISelectSkuComboItem, ISkuComboGroupItem, ISkuComboItem, ISubmitSelectSkuComboItem } from './type';
|
|
2
|
+
export declare function getSubmitComboItemList(skuComboItemList: ISelectSkuComboItem[]): ISubmitSelectSkuComboItem[];
|
|
3
|
+
export declare function getSubmitComboItemListArr(skuComboItemList: ISelectSkuComboItem[][]): ISubmitSelectSkuComboItem[];
|
|
4
|
+
export declare function calculateSelectedComboPrice(skuComboGroupList: ISkuComboGroupItem[], skuComboItemList: ISelectSkuComboItem[][]): number;
|
|
5
|
+
export declare function formatComboPrice(price: number, skuComboGroupList: ISkuComboGroupItem[], skuComboItemList?: ISelectSkuComboItem[][]): number;
|
|
6
|
+
export declare function checkSkuComboItemListEqual(skuComboItemList: ISelectSkuComboItem[], cartItemSkuComboItemList: ICartSkuComboItem[]): boolean;
|
|
7
|
+
export declare function formatSkuComboItemName(item: ICartSkuComboItem): string;
|
|
8
|
+
export declare function formatSkuComboItemList(skuComboItemList: ICartSkuComboItem[]): string;
|
|
9
|
+
export declare function formatSkuNameWithCustomization(skuName?: string, customizationItemList?: IOrderSkuCustomizationItem[]): string;
|
|
10
|
+
export declare function formatCustomizationCountType(customizationItemList?: IOrderSkuCustomizationItem[]): string;
|
|
11
|
+
export declare function checkGroupCanPlusCount(comboGroupItem: ISkuComboGroupItem): boolean;
|
|
12
|
+
export declare function checkIsCanChangeSelectCheckbox(comboGroupItem: ISkuComboGroupItem, selected: number): boolean;
|
|
13
|
+
export declare function checkIsFixedSelect(comboItem: ISkuComboItem): boolean;
|
|
14
|
+
export declare function checkIsUseSelectCheckbox(comboItem: ISkuComboItem): boolean;
|
|
15
|
+
export declare function checkHasChildren(comboItem: ISkuComboItem): boolean;
|
|
16
|
+
export declare function checkComboItemIsUseSelectCount(comboItem: ISkuComboItem): boolean;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ISkuComboGroupItem, ISelectSkuComboItem, ICartSkuComboItem, ISkuPopupSubmitData } from './type';
|
|
2
|
+
export interface IComboSelectorOptions {
|
|
3
|
+
comboGroupList: ISkuComboGroupItem[];
|
|
4
|
+
}
|
|
5
|
+
export type ComboSelectChangeCallback = (skuComboItemList: ISelectSkuComboItem[][]) => void;
|
|
6
|
+
export declare class ComboSelector {
|
|
7
|
+
private comboGroupList;
|
|
8
|
+
constructor(options: IComboSelectorOptions);
|
|
9
|
+
getComboGroupList(): ISkuComboGroupItem[];
|
|
10
|
+
updateComboGroupList(comboGroupList: ISkuComboGroupItem[]): boolean;
|
|
11
|
+
setItemSelected(groupIndex: number, itemIndex: number, selected: number): void;
|
|
12
|
+
setItemCount(groupIndex: number, itemIndex: number, count: number): void;
|
|
13
|
+
setComboChildSelected(groupIndex: number, itemIndex: number, data: ISkuPopupSubmitData): void;
|
|
14
|
+
setComboSkuSelected(groupIndex: number, itemIndex: number, data: ISkuPopupSubmitData): void;
|
|
15
|
+
formatSelectSkuComboItemList(): ISelectSkuComboItem[][];
|
|
16
|
+
validate(): string;
|
|
17
|
+
reconstructFromCart(skuComboItemList?: ICartSkuComboItem[]): void;
|
|
18
|
+
private checkIsFixedSelect;
|
|
19
|
+
private checkComboItemIsUseSelectCount;
|
|
20
|
+
}
|
|
21
|
+
export declare function reconstructComboGroupList(comboGroupList: ISkuComboGroupItem[], skuComboItemList?: ICartSkuComboItem[]): ISkuComboGroupItem[];
|
|
22
|
+
export declare function formatSelectSkuComboItemList(comboGroupList: ISkuComboGroupItem[]): ISelectSkuComboItem[][];
|
|
23
|
+
export declare function validateComboGroupList(comboGroupList: ISkuComboGroupItem[]): string;
|
|
24
|
+
export declare function formatSelectTips(comboGroupItem: ISkuComboGroupItem): string;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { ISelectSkuComboItem } from './type';
|
|
2
|
+
import { ICountChangeResult, IAddToCartParamsResult, IComboSpecSelectorView, IComboSpecSelectorOptions, IFetchCartCountParams, IFetchCartCountResult, IMallSkuDetailDataForCombo } from './type';
|
|
3
|
+
export declare class ComboSpecSelector {
|
|
4
|
+
private product;
|
|
5
|
+
private specImage;
|
|
6
|
+
private skuId;
|
|
7
|
+
private sku;
|
|
8
|
+
private skuList;
|
|
9
|
+
private skuListAfter;
|
|
10
|
+
private selectedSpecs;
|
|
11
|
+
private productSpecGroupList;
|
|
12
|
+
private specList;
|
|
13
|
+
private stockCount;
|
|
14
|
+
private minCount;
|
|
15
|
+
private maxCount;
|
|
16
|
+
private perOrderMinLimit;
|
|
17
|
+
private perOrderMaxLimit;
|
|
18
|
+
private salePrice;
|
|
19
|
+
private originalPrice;
|
|
20
|
+
private skuComboGroupList;
|
|
21
|
+
private skuComboItemList;
|
|
22
|
+
private cartCount;
|
|
23
|
+
private cartItem;
|
|
24
|
+
private visibleComboInfo;
|
|
25
|
+
private isComponentLoading;
|
|
26
|
+
private initCartItem;
|
|
27
|
+
private channel1Type;
|
|
28
|
+
private onChange;
|
|
29
|
+
private _initSkuListAfter;
|
|
30
|
+
private _initSpecType;
|
|
31
|
+
getInitialSkuId(): number;
|
|
32
|
+
constructor(options: IComboSpecSelectorOptions);
|
|
33
|
+
init(skuDetailData: IMallSkuDetailDataForCombo): void;
|
|
34
|
+
getView(): IComboSpecSelectorView;
|
|
35
|
+
handleSelectSpecs(isOption: boolean, value: string, index: number): {
|
|
36
|
+
needFetchSkuDetail: boolean;
|
|
37
|
+
skuId: number;
|
|
38
|
+
};
|
|
39
|
+
updateSkuDetailData(skuDetailData: IMallSkuDetailDataForCombo): void;
|
|
40
|
+
updateCartCountData(result: IFetchCartCountResult): void;
|
|
41
|
+
handleSelectComboData(skuComboItemList: ISelectSkuComboItem[][]): {
|
|
42
|
+
isValid: boolean;
|
|
43
|
+
};
|
|
44
|
+
handleProductCountChange(count: number, type: string): ICountChangeResult;
|
|
45
|
+
getAddToCartParams(productId: number, promotionActivityProductId?: number): IAddToCartParamsResult;
|
|
46
|
+
handleShowComboInfo(): void;
|
|
47
|
+
handleCloseComboInfo(): void;
|
|
48
|
+
getSalePrice(): number;
|
|
49
|
+
getOriginalPrice(): number;
|
|
50
|
+
validateCombo(): string;
|
|
51
|
+
buildCartCountParams(): IFetchCartCountParams;
|
|
52
|
+
private _initProductData;
|
|
53
|
+
private _initSkuDetail;
|
|
54
|
+
private _updateSkuData;
|
|
55
|
+
private _checkProductCount;
|
|
56
|
+
private _selectSpec;
|
|
57
|
+
private _notifyChange;
|
|
58
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export declare const VALUE_UNDEFINED = -1;
|
|
2
|
+
export declare const ENTITY_BOOL_YES = 1;
|
|
3
|
+
export declare const ENTITY_BOOL_NO = 2;
|
|
4
|
+
export declare const SKU_COMBO_ITEM_COMBO_SKU_TYPE_NONE = 1;
|
|
5
|
+
export declare const SKU_COMBO_ITEM_COMBO_SKU_TYPE_ALL = 2;
|
|
6
|
+
export declare const SKU_COMBO_ITEM_COMBO_SKU_TYPE_PART = 3;
|
|
7
|
+
export declare const SKU_COMBO_ITEM_COMBO_SKU_TYPE_ONE = 4;
|
|
8
|
+
export declare const SKU_STOCK_COUNT_UNLIMITED = 10000000;
|
|
9
|
+
export declare const MALL_PRODUCT_SPEC_TYPE_SINGLE = 1;
|
|
10
|
+
export declare const MALL_PRODUCT_SPEC_TYPE_MULTIPLE = 2;
|
|
11
|
+
export declare const ORDER_EXTERNAL_SKU_TYPE_MALL = 0;
|
|
12
|
+
export declare const ORDER_EXTERNAL_SKU_TYPE_MARKETING_PROMOTION_ACTIVITY = 1;
|
|
13
|
+
export declare const PRODUCT_COMBO_TYPE_SINGLE = 1;
|
|
14
|
+
export declare const PRODUCT_COMBO_TYPE_MULTIPLE = 2;
|
|
15
|
+
export declare const PRODUCT_SELECT_TYPE_DIRECT = 1;
|
|
16
|
+
export declare const PRODUCT_SELECT_TYPE_DIALOG = 2;
|
|
17
|
+
export declare const SHOP_TYPE_DISTRIBUTOR = 1;
|
|
18
|
+
export declare const SHOP_TYPE_PROMOTER = 2;
|
|
19
|
+
export declare const SHOP_TYPE_MAHUA = 3;
|
|
20
|
+
export declare const CUSTOMIZATION_COUNT_TYPE_KIND = 1;
|
|
21
|
+
export declare const CUSTOMIZATION_COUNT_TYPE_QUANTITY = 2;
|
|
22
|
+
export declare const CUSTOMIZATION_ITEM_INCREASE_TYPE_FREE = 1;
|
|
23
|
+
export declare const CUSTOMIZATION_ITEM_INCREASE_TYPE_FIXED = 2;
|
|
24
|
+
export declare const CHAGNE_TYPE_DECREASE = "decrease";
|
|
25
|
+
export declare const CHAGNE_TYPE_INCREASE = "increase";
|
|
26
|
+
export declare const CHAGNE_TYPE_EDIT = "edit";
|
|
27
|
+
export declare const PRODUCT_STATUS_ALL = -1;
|
|
28
|
+
export declare const PRODUCT_STATUS_ONLINE = 1;
|
|
29
|
+
export declare const PRODUCT_STATUS_OFFLINE = 2;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { ICartListItem, IProductSelectedCustomizationItem } from './type';
|
|
2
|
+
import { ICountChangeResult, IAddToCartParamsResult, ICustomSpecSelectorView, ICustomSpecSelectorOptions, IFetchCustomCartCountParams, IFetchCartCountResult } from './type';
|
|
3
|
+
export declare class CustomSpecSelector {
|
|
4
|
+
private product;
|
|
5
|
+
private promotionActivityProduct;
|
|
6
|
+
private specImage;
|
|
7
|
+
private skuId;
|
|
8
|
+
private sku;
|
|
9
|
+
private skuList;
|
|
10
|
+
private skuListAfter;
|
|
11
|
+
private selectedSpecs;
|
|
12
|
+
private productSpecGroupList;
|
|
13
|
+
private specList;
|
|
14
|
+
private activitySpecList;
|
|
15
|
+
private stockCount;
|
|
16
|
+
private minCount;
|
|
17
|
+
private maxCount;
|
|
18
|
+
private perOrderMinLimit;
|
|
19
|
+
private perOrderMaxLimit;
|
|
20
|
+
private salePrice;
|
|
21
|
+
private originalPrice;
|
|
22
|
+
private customizationGroupList;
|
|
23
|
+
private customizationItemList;
|
|
24
|
+
private cartCount;
|
|
25
|
+
private cartItem;
|
|
26
|
+
private cartList;
|
|
27
|
+
private channel1Type;
|
|
28
|
+
private onChange;
|
|
29
|
+
constructor(options: ICustomSpecSelectorOptions);
|
|
30
|
+
setCartList(cartList: ICartListItem[]): void;
|
|
31
|
+
init(): void;
|
|
32
|
+
getView(): ICustomSpecSelectorView;
|
|
33
|
+
handleSelectSpecs(isOption: boolean, value: string, index: number): {
|
|
34
|
+
needFetchCart: boolean;
|
|
35
|
+
cartParams: IFetchCustomCartCountParams;
|
|
36
|
+
};
|
|
37
|
+
updateCartCountData(result: IFetchCartCountResult): void;
|
|
38
|
+
handleCustomizationItemListSelect(customizationItemList: IProductSelectedCustomizationItem[][]): {
|
|
39
|
+
isValid: boolean;
|
|
40
|
+
cartParams?: IFetchCustomCartCountParams;
|
|
41
|
+
};
|
|
42
|
+
handleProductCountChange(count: number, type: string): ICountChangeResult;
|
|
43
|
+
getAddToCartParams(productId: number, promotionActivityProductId?: number): IAddToCartParamsResult;
|
|
44
|
+
getSalePrice(): number;
|
|
45
|
+
buildCartCountParams(): IFetchCustomCartCountParams;
|
|
46
|
+
private _initProductData;
|
|
47
|
+
private _updateSkuData;
|
|
48
|
+
private _checkProductCount;
|
|
49
|
+
private _selectSpec;
|
|
50
|
+
private _notifyChange;
|
|
51
|
+
private _findSkuCartItem;
|
|
52
|
+
private _updateSkuCartItem;
|
|
53
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { IOrderSkuCustomizationItem, IProductCustomizationGroupItem, IProductCustomizationGroupItemView, IProductCustomizationItemView, IProductSelectedCustomizationItem, ISubmitSelectedCustomizationItem } from './type';
|
|
2
|
+
interface ISelectedCustomizationItem {
|
|
3
|
+
id: number;
|
|
4
|
+
count: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function getSubmitCustomizationItemList(customizationItemList: ISelectedCustomizationItem[]): ISubmitSelectedCustomizationItem[];
|
|
7
|
+
export declare function getSubmitCustomizationItemListArr(customizationItemList: ISelectedCustomizationItem[][]): ISubmitSelectedCustomizationItem[];
|
|
8
|
+
export declare function calculateSelectedCustomizationPrice(customizationGroupList: IProductCustomizationGroupItemView[], customizationItemList: IProductSelectedCustomizationItem[][]): number;
|
|
9
|
+
export declare function formatCustomizationPrice(price: number, customizationGroupList: IProductCustomizationGroupItemView[], customizationItemList?: IProductSelectedCustomizationItem[][]): number;
|
|
10
|
+
export declare function checkCustomizationItemListEqual(selectCustomizationItemList: IProductSelectedCustomizationItem[], cartCustomizationItemList: IOrderSkuCustomizationItem[]): any;
|
|
11
|
+
export declare function formatCustomizationGroupList(customizationGroupList: IProductCustomizationGroupItem[]): IProductCustomizationGroupItemView[];
|
|
12
|
+
export declare function formatInitCustomizationItemList(customizationGroupList: IProductCustomizationGroupItemView[]): IProductSelectedCustomizationItem[][];
|
|
13
|
+
export declare function formatSelectedCustomizationItemList(customizationGroupList: IProductCustomizationGroupItemView[]): IProductSelectedCustomizationItem[][];
|
|
14
|
+
export declare function reconstructCustomizationItemList(customizationGroupList: IProductCustomizationGroupItemView[], selectedCustomizationItemList: IProductSelectedCustomizationItem[]): {
|
|
15
|
+
isValid: boolean;
|
|
16
|
+
customizationGroupList: IProductCustomizationGroupItemView[];
|
|
17
|
+
selectedCustomizationItemList: IProductSelectedCustomizationItem[][];
|
|
18
|
+
};
|
|
19
|
+
export declare function checkCustomizationItemList(customizationGroupList: IProductCustomizationGroupItemView[], customizationItemList: IProductSelectedCustomizationItem[][]): {
|
|
20
|
+
isValid: boolean;
|
|
21
|
+
errMsg: string;
|
|
22
|
+
};
|
|
23
|
+
export declare function formatCountTypeUnit(countType: number): "种" | "份";
|
|
24
|
+
export declare const checkCustomizationItemIsUseSelectCount: (customizationItem: IProductCustomizationItemView) => boolean;
|
|
25
|
+
export declare const checkCanPlusCount: (customizationGroupItem: IProductCustomizationGroupItemView) => boolean;
|
|
26
|
+
export declare const checkIsFixedSelected: (customizationItem: IProductCustomizationItemView) => boolean;
|
|
27
|
+
export declare const checkIsDisabledSelected: (customizationItem: IProductCustomizationItemView) => boolean;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ISku, IFormatSku, IPromotionActivitySkuListItem, IPromotionActivitySku, IProductSpecGroup, IProductSpecItem, ICartListItem, IFindProductCart, ISpecList, ISkuCombination, ISpecObj, IImage, ISkuComboChildItem, ISimpleProduct, IProductPriceRange, IExternalSku, IProduct, IPromotionActivityProduct, IProductSelectedCustomizationItem } from "./type";
|
|
2
|
+
export declare function formatWithPromotionActivitySku(sku: ISku, promotionActivitySku: IPromotionActivitySku): IFormatSku;
|
|
3
|
+
export declare function formatProductComboChildrenSkuList(skuList: IFormatSku[], children: ISkuComboChildItem[]): IFormatSku[];
|
|
4
|
+
export declare function formatProductSku(sku: ISku, promotionActivitySku?: IPromotionActivitySku): IFormatSku;
|
|
5
|
+
export declare function formatProductSkuList(skuList: ISku[], promotionActivitySkuList?: IPromotionActivitySkuListItem[], isSelfActivity?: boolean): IFormatSku[];
|
|
6
|
+
export declare function formatProductSpecGroupList(skuList: IFormatSku[], productSpecGroupList: IProductSpecGroup[], useActivityFlag?: boolean): IProductSpecGroup[];
|
|
7
|
+
export declare function formatSpecList(productSpecGroupList: IProductSpecGroup[]): ISpecList[];
|
|
8
|
+
export declare function formatSkuListAfter(skuList: IFormatSku[], specObj: ISpecObj): ISkuCombination[];
|
|
9
|
+
export declare function formatSpecObj(productSpecGroupList: IProductSpecGroup[]): ISpecObj;
|
|
10
|
+
export declare function getSpecImage(productSpecGroupList: IProductSpecGroup[], productCover: IImage): IImage;
|
|
11
|
+
export declare function getActivitySpecList(productSpecGroupList: IProductSpecGroup[]): IProductSpecItem[][];
|
|
12
|
+
export declare function formatProductBuyText(shopType: number | undefined, product: ISimpleProduct): string;
|
|
13
|
+
export declare function checkProductOnSale(productStatus: number, hasStock: number): boolean;
|
|
14
|
+
export declare function formatProductStatus(productStatus: number, hasStock: number, skuDeleted?: number): string;
|
|
15
|
+
export declare function formatSkuPrice(skuList: ISku[]): string;
|
|
16
|
+
export declare function formatPriceRange(priceRange: IProductPriceRange): string;
|
|
17
|
+
export declare function formatSkuListStockCount(list: ISku[]): number;
|
|
18
|
+
export declare function findProductCartList(cartList: ICartListItem[], product: ISimpleProduct, activityProductId?: number): IFindProductCart;
|
|
19
|
+
export declare function formatWithExternalSku(sku: ISku, externalSku?: IExternalSku): ISku;
|
|
20
|
+
export declare function findCustomizationSkuCartItem(item: {
|
|
21
|
+
skuId?: number;
|
|
22
|
+
product: IProduct;
|
|
23
|
+
promotionActivityProduct?: IPromotionActivityProduct;
|
|
24
|
+
customizationItemList?: IProductSelectedCustomizationItem[][];
|
|
25
|
+
}, cartList: ICartListItem[]): ICartListItem | undefined;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ISpecList, ISkuCombination, IProductSpecItem } from './type';
|
|
2
|
+
export interface ISpecSelectorOptions {
|
|
3
|
+
productSpecGroupList: ISpecList[];
|
|
4
|
+
skuListAfter: ISkuCombination[];
|
|
5
|
+
activitySpecList?: IProductSpecItem[][];
|
|
6
|
+
}
|
|
7
|
+
export interface ISpecItemState {
|
|
8
|
+
value: string;
|
|
9
|
+
isEnabled: boolean;
|
|
10
|
+
isActive: boolean;
|
|
11
|
+
isActivitySpec: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface ISpecGroupState {
|
|
14
|
+
title: string;
|
|
15
|
+
items: ISpecItemState[];
|
|
16
|
+
}
|
|
17
|
+
export declare class SpecSelector {
|
|
18
|
+
private productSpecGroupList;
|
|
19
|
+
private skuListAfter;
|
|
20
|
+
private activitySpecList;
|
|
21
|
+
private specAdjoinMatrix;
|
|
22
|
+
constructor(options: ISpecSelectorOptions);
|
|
23
|
+
isActivitySpec(listIndex: number, value: string): boolean;
|
|
24
|
+
getSpecGroupStateList(selectedSpecs: string[]): ISpecGroupState[];
|
|
25
|
+
getOptionSpecs(selectedSpecs: string[]): string[];
|
|
26
|
+
toggleSpec(isEnabled: boolean, value: string, groupIndex: number, selectedSpecs: string[]): string[];
|
|
27
|
+
findMatchedSku(selectedSpecs: string[]): ISkuCombination | undefined;
|
|
28
|
+
isAllSpecSelected(selectedSpecs: string[]): boolean;
|
|
29
|
+
}
|
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
type RemoveOptional<T> = {
|
|
2
|
+
[K in keyof T as undefined extends T[K] ? never : K]: T[K];
|
|
3
|
+
};
|
|
4
|
+
export type InferResponseType<P, B, E> = B & {
|
|
5
|
+
[K in keyof RemoveOptional<P> & keyof E]: E[K];
|
|
6
|
+
};
|
|
7
|
+
export type InferResponseTypeSimple<P, E> = {
|
|
8
|
+
[K in keyof RemoveOptional<P> & keyof E]: E[K];
|
|
9
|
+
};
|
|
10
|
+
export type RequiredParamsPartial<T, K extends keyof T> = PartialRequired<T, K>;
|
|
11
|
+
export type RequiredParamsPartialStrict<T, K extends keyof T> = RemoveOptional<PartialRequired<T, K>>;
|
|
12
|
+
export type PartialRequired<T, K extends keyof T> = Required<Pick<T, K>> & Omit<T, K>;
|
|
13
|
+
export interface IImage {
|
|
14
|
+
id: number;
|
|
15
|
+
url: string;
|
|
16
|
+
size: number;
|
|
17
|
+
width: number;
|
|
18
|
+
height: number;
|
|
19
|
+
}
|
|
20
|
+
export interface ISku {
|
|
21
|
+
id: number;
|
|
22
|
+
code: string;
|
|
23
|
+
barcode: string;
|
|
24
|
+
name: string;
|
|
25
|
+
item_ids: number[];
|
|
26
|
+
original_price: number;
|
|
27
|
+
sale_price: number;
|
|
28
|
+
price_type: number;
|
|
29
|
+
cost_price: number;
|
|
30
|
+
stock_count: number;
|
|
31
|
+
shelf_life: number;
|
|
32
|
+
per_order_min_limit: number;
|
|
33
|
+
per_order_max_limit: number;
|
|
34
|
+
per_user_max_limit: number;
|
|
35
|
+
weight: number;
|
|
36
|
+
type: number;
|
|
37
|
+
is_deleted: number;
|
|
38
|
+
}
|
|
39
|
+
export interface IProduct {
|
|
40
|
+
id: number;
|
|
41
|
+
code: string;
|
|
42
|
+
title: string;
|
|
43
|
+
sub_title: string;
|
|
44
|
+
phone_number: string;
|
|
45
|
+
unit_type: number;
|
|
46
|
+
sale_type: number;
|
|
47
|
+
spec_type: number;
|
|
48
|
+
stock_type: number;
|
|
49
|
+
customization_type: number;
|
|
50
|
+
combo_type: number;
|
|
51
|
+
select_type: number;
|
|
52
|
+
access_type: number;
|
|
53
|
+
has_stock: number;
|
|
54
|
+
top: number;
|
|
55
|
+
index: number;
|
|
56
|
+
type: number;
|
|
57
|
+
status: number;
|
|
58
|
+
product_status: number;
|
|
59
|
+
create_time: number;
|
|
60
|
+
update_time: number;
|
|
61
|
+
settlement_type?: number;
|
|
62
|
+
audit_status?: number;
|
|
63
|
+
}
|
|
64
|
+
export interface IProductPriceRange {
|
|
65
|
+
start_price: number;
|
|
66
|
+
end_price: number;
|
|
67
|
+
}
|
|
68
|
+
export interface IProductSpecItem {
|
|
69
|
+
id: number;
|
|
70
|
+
name: string;
|
|
71
|
+
image?: IImage;
|
|
72
|
+
is_promotion_activity?: boolean;
|
|
73
|
+
}
|
|
74
|
+
export interface ISpecList {
|
|
75
|
+
title: string;
|
|
76
|
+
list: string[];
|
|
77
|
+
}
|
|
78
|
+
export interface IFormatSku extends ISku {
|
|
79
|
+
origin_sku_id: number;
|
|
80
|
+
is_promotion_activity: boolean;
|
|
81
|
+
is_set_activity_price: boolean;
|
|
82
|
+
}
|
|
83
|
+
export interface ISkuCombination extends IFormatSku {
|
|
84
|
+
specs: string[];
|
|
85
|
+
}
|
|
86
|
+
interface IComboSku {
|
|
87
|
+
id: number;
|
|
88
|
+
name: string;
|
|
89
|
+
stock_count: number;
|
|
90
|
+
}
|
|
91
|
+
interface IComboProductCustomizationItem {
|
|
92
|
+
id: number;
|
|
93
|
+
name: string;
|
|
94
|
+
count: number;
|
|
95
|
+
count_type: number;
|
|
96
|
+
}
|
|
97
|
+
export interface IComboProduct {
|
|
98
|
+
id: number;
|
|
99
|
+
title: string;
|
|
100
|
+
status: number;
|
|
101
|
+
select_type: number;
|
|
102
|
+
customization_type: number;
|
|
103
|
+
}
|
|
104
|
+
export interface ISkuComboChildItem extends Omit<ISkuComboItem, 'children'> {
|
|
105
|
+
combo_sku: IComboSku;
|
|
106
|
+
}
|
|
107
|
+
export interface ISkuComboItem {
|
|
108
|
+
id: number;
|
|
109
|
+
code: string;
|
|
110
|
+
name: string;
|
|
111
|
+
image: IImage;
|
|
112
|
+
combo_sku_type: number;
|
|
113
|
+
combo_product?: IComboProduct;
|
|
114
|
+
combo_sku?: IComboSku;
|
|
115
|
+
combo_customization_item_list?: IComboProductCustomizationItem[][];
|
|
116
|
+
pack_count: number;
|
|
117
|
+
increase_sale_price: number;
|
|
118
|
+
selectable: number;
|
|
119
|
+
selected: number;
|
|
120
|
+
count: number;
|
|
121
|
+
min_count: number;
|
|
122
|
+
max_count: number;
|
|
123
|
+
children?: ISkuComboChildItem[];
|
|
124
|
+
}
|
|
125
|
+
export interface ISkuComboGroupItem {
|
|
126
|
+
id: number;
|
|
127
|
+
code: string;
|
|
128
|
+
name: string;
|
|
129
|
+
has_image: number;
|
|
130
|
+
min_count: number;
|
|
131
|
+
max_count: number;
|
|
132
|
+
repeatable: number;
|
|
133
|
+
source: number;
|
|
134
|
+
type: number;
|
|
135
|
+
items: ISkuComboItem[];
|
|
136
|
+
}
|
|
137
|
+
export interface ISelectSkuComboItem {
|
|
138
|
+
id: number;
|
|
139
|
+
name: string;
|
|
140
|
+
combo_group_name: string;
|
|
141
|
+
count: number;
|
|
142
|
+
combo_sku_id?: number;
|
|
143
|
+
combo_sku_name?: string;
|
|
144
|
+
combo_product_customization_item_list?: IComboProductCustomizationItem[];
|
|
145
|
+
}
|
|
146
|
+
export interface ICartSkuComboItem {
|
|
147
|
+
id: number;
|
|
148
|
+
name: string;
|
|
149
|
+
count: number;
|
|
150
|
+
combo_group_name: string;
|
|
151
|
+
combo_sku_id?: number;
|
|
152
|
+
combo_sku_name?: string;
|
|
153
|
+
combo_product_customization_item_list?: IOrderSkuCustomizationItem[];
|
|
154
|
+
}
|
|
155
|
+
export interface IOrderSkuCustomizationItem {
|
|
156
|
+
id: number;
|
|
157
|
+
name: string;
|
|
158
|
+
count: number;
|
|
159
|
+
count_type: number;
|
|
160
|
+
}
|
|
161
|
+
export interface IProductSelectedCustomizationItem {
|
|
162
|
+
id: number;
|
|
163
|
+
name: string;
|
|
164
|
+
count: number;
|
|
165
|
+
count_type: number;
|
|
166
|
+
}
|
|
167
|
+
export interface ISkuPopupSubmitData {
|
|
168
|
+
sku: IFormatSku;
|
|
169
|
+
count: number;
|
|
170
|
+
customization_item_list?: IProductSelectedCustomizationItem[][];
|
|
171
|
+
}
|
|
172
|
+
export interface ICart {
|
|
173
|
+
id: number;
|
|
174
|
+
sku_type: number;
|
|
175
|
+
sku_price: number;
|
|
176
|
+
product_type: number;
|
|
177
|
+
combo_type: number;
|
|
178
|
+
count: number;
|
|
179
|
+
checked: number;
|
|
180
|
+
status: number;
|
|
181
|
+
create_time: number;
|
|
182
|
+
update_time: number;
|
|
183
|
+
}
|
|
184
|
+
export interface ICartSkuComboItem {
|
|
185
|
+
id: number;
|
|
186
|
+
name: string;
|
|
187
|
+
count: number;
|
|
188
|
+
combo_group_name: string;
|
|
189
|
+
combo_sku_id?: number;
|
|
190
|
+
combo_sku_name?: string;
|
|
191
|
+
combo_product_customization_item_list?: IOrderSkuCustomizationItem[];
|
|
192
|
+
}
|
|
193
|
+
export interface IPromotionActivity {
|
|
194
|
+
id: number;
|
|
195
|
+
title: string;
|
|
196
|
+
tag: string;
|
|
197
|
+
scope: number;
|
|
198
|
+
type: number;
|
|
199
|
+
phase: number;
|
|
200
|
+
cycle_phase: number;
|
|
201
|
+
status: number;
|
|
202
|
+
cycle_end_time?: number;
|
|
203
|
+
}
|
|
204
|
+
export interface IPromotionActivityProduct {
|
|
205
|
+
id: number;
|
|
206
|
+
profit_share_rate: number;
|
|
207
|
+
index: number;
|
|
208
|
+
create_time: number;
|
|
209
|
+
update_time: number;
|
|
210
|
+
}
|
|
211
|
+
export interface IExternalActivityProduct extends IPromotionActivityProduct {
|
|
212
|
+
}
|
|
213
|
+
export interface IExternalSku {
|
|
214
|
+
id: number;
|
|
215
|
+
sale_price: number;
|
|
216
|
+
stock_count: number;
|
|
217
|
+
}
|
|
218
|
+
export interface ICartListItem {
|
|
219
|
+
activity?: IPromotionActivity;
|
|
220
|
+
activity_type?: number;
|
|
221
|
+
external_product?: IExternalActivityProduct;
|
|
222
|
+
external_sku?: IExternalSku;
|
|
223
|
+
error: string;
|
|
224
|
+
cart: ICart;
|
|
225
|
+
product: IProduct;
|
|
226
|
+
sku: ISku;
|
|
227
|
+
product_cover?: IImage;
|
|
228
|
+
sku_combo_item_list?: ICartSkuComboItem[];
|
|
229
|
+
product_customization_item_list?: IOrderSkuCustomizationItem[];
|
|
230
|
+
product_delivery_types?: number[];
|
|
231
|
+
}
|
|
232
|
+
export interface IFindProductCart {
|
|
233
|
+
cartList: ICartListItem[];
|
|
234
|
+
cartCount: number;
|
|
235
|
+
}
|
|
236
|
+
export interface IProductSpec {
|
|
237
|
+
id: number;
|
|
238
|
+
name: string;
|
|
239
|
+
}
|
|
240
|
+
export interface IProductSpecGroup {
|
|
241
|
+
id: number;
|
|
242
|
+
spec: IProductSpec;
|
|
243
|
+
has_image: number;
|
|
244
|
+
items: IProductSpecItem[];
|
|
245
|
+
}
|
|
246
|
+
export interface ICustomizationItemBase {
|
|
247
|
+
id: number;
|
|
248
|
+
name: string;
|
|
249
|
+
increase_type: number;
|
|
250
|
+
increase_sale_price: number;
|
|
251
|
+
}
|
|
252
|
+
export interface ICustomizationBase {
|
|
253
|
+
id: number;
|
|
254
|
+
name: string;
|
|
255
|
+
count_type: number;
|
|
256
|
+
}
|
|
257
|
+
export interface ICustomizationItem {
|
|
258
|
+
id: number;
|
|
259
|
+
customization_item: ICustomizationItemBase;
|
|
260
|
+
image?: IImage;
|
|
261
|
+
selected: number;
|
|
262
|
+
selectable: number;
|
|
263
|
+
count: number;
|
|
264
|
+
min_count: number;
|
|
265
|
+
max_count: number;
|
|
266
|
+
}
|
|
267
|
+
export interface IProductCustomizationGroupItem {
|
|
268
|
+
id: number;
|
|
269
|
+
customization: ICustomizationBase;
|
|
270
|
+
has_image: number;
|
|
271
|
+
min_count: number;
|
|
272
|
+
max_count: number;
|
|
273
|
+
items: ICustomizationItem[];
|
|
274
|
+
}
|
|
275
|
+
export interface ISkuPopupData {
|
|
276
|
+
product: IProduct;
|
|
277
|
+
promotionActivityProduct?: IPromotionActivityProduct;
|
|
278
|
+
skuList: IFormatSku[];
|
|
279
|
+
productCover: IImage;
|
|
280
|
+
productSpecGroupList: IProductSpecGroup[];
|
|
281
|
+
productCustomizationGroupList?: IProductCustomizationGroupItem[];
|
|
282
|
+
}
|
|
283
|
+
export interface IPromotionActivitySku {
|
|
284
|
+
id: number;
|
|
285
|
+
sale_price: number;
|
|
286
|
+
stock_count: number;
|
|
287
|
+
}
|
|
288
|
+
export interface IPromotionActivitySkuListItem {
|
|
289
|
+
promotion_activity_sku: IPromotionActivitySku;
|
|
290
|
+
sku: ISku;
|
|
291
|
+
}
|
|
292
|
+
export interface ISpecObj {
|
|
293
|
+
[key: number]: string;
|
|
294
|
+
}
|
|
295
|
+
export interface ISimpleProduct {
|
|
296
|
+
id: number;
|
|
297
|
+
code: string;
|
|
298
|
+
title: string;
|
|
299
|
+
combo_type: number;
|
|
300
|
+
has_stock: number;
|
|
301
|
+
select_type: number;
|
|
302
|
+
spec_type: number;
|
|
303
|
+
status: number;
|
|
304
|
+
}
|
|
305
|
+
export interface ISubmitSelectSkuComboItem {
|
|
306
|
+
id: number;
|
|
307
|
+
count: number;
|
|
308
|
+
combo_sku_id?: number;
|
|
309
|
+
combo_product_customization_item_list?: Omit<IComboProductCustomizationItem, 'name' | 'count_type'>[];
|
|
310
|
+
}
|
|
311
|
+
export interface IProductCustomizationItemView extends ICustomizationItem {
|
|
312
|
+
selected_count: number;
|
|
313
|
+
}
|
|
314
|
+
export interface IProductCustomizationGroupItemView extends IProductCustomizationGroupItem {
|
|
315
|
+
items: IProductCustomizationItemView[];
|
|
316
|
+
}
|
|
317
|
+
export interface ISubmitSelectedCustomizationItem {
|
|
318
|
+
id: number;
|
|
319
|
+
count: number;
|
|
320
|
+
}
|
|
321
|
+
export interface IAddCartParams {
|
|
322
|
+
productId: number;
|
|
323
|
+
promotionActivityProductId?: number;
|
|
324
|
+
skuId: number;
|
|
325
|
+
count: number;
|
|
326
|
+
productCustomizationItemList?: ISubmitSelectedCustomizationItem[];
|
|
327
|
+
skuComboItemList?: ISubmitSelectSkuComboItem[];
|
|
328
|
+
}
|
|
329
|
+
export interface ICountChangeResult {
|
|
330
|
+
isValid: boolean;
|
|
331
|
+
errMsg?: string;
|
|
332
|
+
cartItem?: ICartListItem;
|
|
333
|
+
count?: number;
|
|
334
|
+
}
|
|
335
|
+
export interface IAddToCartParamsResult {
|
|
336
|
+
isValid: boolean;
|
|
337
|
+
errMsg?: string;
|
|
338
|
+
params?: IAddCartParams;
|
|
339
|
+
}
|
|
340
|
+
export interface IComboSpecSelectorOptions {
|
|
341
|
+
productData: {
|
|
342
|
+
product: IProduct;
|
|
343
|
+
skuList: IFormatSku[];
|
|
344
|
+
productCover: IImage;
|
|
345
|
+
productSpecGroupList: IProductSpecGroup[];
|
|
346
|
+
};
|
|
347
|
+
initCartItem?: ICartListItem;
|
|
348
|
+
channel1Type: number;
|
|
349
|
+
onChange: SelectorChangeCallback;
|
|
350
|
+
}
|
|
351
|
+
export interface ICustomSpecSelectorOptions {
|
|
352
|
+
productData: {
|
|
353
|
+
product: IProduct;
|
|
354
|
+
promotionActivityProduct?: IPromotionActivityProduct;
|
|
355
|
+
skuList: IFormatSku[];
|
|
356
|
+
productCover: IImage;
|
|
357
|
+
productSpecGroupList: IProductSpecGroup[];
|
|
358
|
+
productCustomizationGroupList?: IProductCustomizationGroupItem[];
|
|
359
|
+
};
|
|
360
|
+
cartList?: ICartListItem[];
|
|
361
|
+
channel1Type: number;
|
|
362
|
+
onChange: SelectorChangeCallback;
|
|
363
|
+
}
|
|
364
|
+
export interface IComboSpecSelectorView {
|
|
365
|
+
product: IProduct;
|
|
366
|
+
skuId: number;
|
|
367
|
+
salePrice: number;
|
|
368
|
+
originalPrice: number;
|
|
369
|
+
specImage: IImage | undefined;
|
|
370
|
+
skuListAfter: ISkuCombination[];
|
|
371
|
+
selectedSpecs: string[];
|
|
372
|
+
productSpecGroupList: ISpecList[];
|
|
373
|
+
skuComboGroupList: ISkuComboGroupItem[];
|
|
374
|
+
skuComboItemList: ISelectSkuComboItem[][];
|
|
375
|
+
cartCount: number;
|
|
376
|
+
maxCount: number;
|
|
377
|
+
isComponentLoading: boolean;
|
|
378
|
+
visibleComboInfo: boolean;
|
|
379
|
+
}
|
|
380
|
+
export interface ICustomSpecSelectorView {
|
|
381
|
+
product: IProduct;
|
|
382
|
+
promotionActivityProduct: IPromotionActivityProduct | undefined;
|
|
383
|
+
skuId: number;
|
|
384
|
+
sku: IFormatSku | undefined;
|
|
385
|
+
salePrice: number;
|
|
386
|
+
originalPrice: number;
|
|
387
|
+
specImage: IImage | undefined;
|
|
388
|
+
skuListAfter: ISkuCombination[];
|
|
389
|
+
selectedSpecs: string[];
|
|
390
|
+
productSpecGroupList: ISpecList[];
|
|
391
|
+
activitySpecList: IProductSpecItem[][];
|
|
392
|
+
customizationGroupList: IProductCustomizationGroupItemView[];
|
|
393
|
+
cartCount: number;
|
|
394
|
+
maxCount: number;
|
|
395
|
+
cartItem: ICartListItem | undefined;
|
|
396
|
+
}
|
|
397
|
+
export type SelectorChangeCallback = () => void;
|
|
398
|
+
export interface IFetchCartCountParams {
|
|
399
|
+
channel1_type: number;
|
|
400
|
+
checked: number;
|
|
401
|
+
sku_id: number;
|
|
402
|
+
sku_type: number;
|
|
403
|
+
sku_combo_item_list: string;
|
|
404
|
+
cart: number;
|
|
405
|
+
}
|
|
406
|
+
export interface IFetchCustomCartCountParams {
|
|
407
|
+
channel1_type: number;
|
|
408
|
+
checked: number;
|
|
409
|
+
sku_id: number;
|
|
410
|
+
sku_type: number;
|
|
411
|
+
product_customization_item_list: string;
|
|
412
|
+
cart: number;
|
|
413
|
+
}
|
|
414
|
+
export interface IFetchCartCountResult {
|
|
415
|
+
cart?: {
|
|
416
|
+
id: number;
|
|
417
|
+
count: number;
|
|
418
|
+
[key: string]: any;
|
|
419
|
+
};
|
|
420
|
+
[key: string]: any;
|
|
421
|
+
}
|
|
422
|
+
export interface IMallSkuDetailParams {
|
|
423
|
+
sku_id: number;
|
|
424
|
+
sku_type: number;
|
|
425
|
+
shop?: requestOptionalFlag;
|
|
426
|
+
product?: requestOptionalFlag;
|
|
427
|
+
product_unit?: requestOptionalFlag;
|
|
428
|
+
product_cover?: requestOptionalFlag;
|
|
429
|
+
product_config?: requestOptionalFlag;
|
|
430
|
+
product_delivery_types?: requestOptionalFlag;
|
|
431
|
+
sku_image?: requestOptionalFlag;
|
|
432
|
+
thread?: requestOptionalFlag;
|
|
433
|
+
activity?: requestOptionalFlag;
|
|
434
|
+
shop_order_config?: requestOptionalFlag;
|
|
435
|
+
sku_combo_group_list?: requestOptionalFlag;
|
|
436
|
+
sku_combo_item_list?: requestOptionalFlag;
|
|
437
|
+
}
|
|
438
|
+
export type requestOptionalFlag = 1;
|
|
439
|
+
export interface IMallSkuDetailParamsForCombo extends IMallSkuDetailParams {
|
|
440
|
+
sku_combo_group_list: requestOptionalFlag;
|
|
441
|
+
sku_combo_item_list: requestOptionalFlag;
|
|
442
|
+
}
|
|
443
|
+
interface IMallSkuDetailBase {
|
|
444
|
+
sku: ISku;
|
|
445
|
+
external_sku?: IExternalSku;
|
|
446
|
+
sku_id: number;
|
|
447
|
+
sku_type: number;
|
|
448
|
+
}
|
|
449
|
+
export interface ISimpleShop {
|
|
450
|
+
id: number;
|
|
451
|
+
type: number;
|
|
452
|
+
style: number;
|
|
453
|
+
name: string;
|
|
454
|
+
phone_number: string;
|
|
455
|
+
delivery_types: number[];
|
|
456
|
+
address: string;
|
|
457
|
+
longitude: number;
|
|
458
|
+
latitude: number;
|
|
459
|
+
business_times: number[];
|
|
460
|
+
}
|
|
461
|
+
export interface IProductUnit {
|
|
462
|
+
id: number;
|
|
463
|
+
name: string;
|
|
464
|
+
type: number;
|
|
465
|
+
conversion: number;
|
|
466
|
+
}
|
|
467
|
+
export interface IProductConfig {
|
|
468
|
+
user_message_fields: string;
|
|
469
|
+
order_auto_process: number;
|
|
470
|
+
}
|
|
471
|
+
export interface ISimpleActivity {
|
|
472
|
+
id: number;
|
|
473
|
+
tag: string;
|
|
474
|
+
type: number;
|
|
475
|
+
}
|
|
476
|
+
export interface IShopOrderConfig {
|
|
477
|
+
order_expire_minutes: number;
|
|
478
|
+
dine_order_confirm_mode: number;
|
|
479
|
+
dine_order_process_mode: number;
|
|
480
|
+
dine_order_prepare_minutes: number;
|
|
481
|
+
dine_order_auto_finish_hours: number;
|
|
482
|
+
self_order_confirm_mode: number;
|
|
483
|
+
self_order_process_mode: number;
|
|
484
|
+
self_order_auto_finish_hours: number;
|
|
485
|
+
self_order_auto_expire_days: number;
|
|
486
|
+
shop_order_confirm_mode: number;
|
|
487
|
+
shop_order_apply_rider_mode: number;
|
|
488
|
+
shop_order_prepare_minutes: number;
|
|
489
|
+
shop_order_auto_finish_hours: number;
|
|
490
|
+
express_order_auto_finish_days: number;
|
|
491
|
+
virtual_order_auto_finish_hours: number;
|
|
492
|
+
oversold_process_mode: number;
|
|
493
|
+
freight_amount_calculate_mode: number;
|
|
494
|
+
}
|
|
495
|
+
export interface IMallSkuDetailExtensions {
|
|
496
|
+
shop: ISimpleShop;
|
|
497
|
+
product: IProduct;
|
|
498
|
+
product_unit: IProductUnit;
|
|
499
|
+
product_cover: IImage;
|
|
500
|
+
product_config: IProductConfig;
|
|
501
|
+
product_delivery_types: number[];
|
|
502
|
+
sku_image?: IImage;
|
|
503
|
+
activity?: ISimpleActivity;
|
|
504
|
+
shop_order_config?: IShopOrderConfig;
|
|
505
|
+
sku_combo_group_list?: ISkuComboGroupItem[];
|
|
506
|
+
}
|
|
507
|
+
export type IMallSkuDetailDataForCombo = InferIMallSkuDetailData<IMallSkuDetailParamsForCombo>;
|
|
508
|
+
export type InferIMallSkuDetailData<T extends IMallSkuDetailParams> = InferResponseType<T, IMallSkuDetailBase, IMallSkuDetailExtensions>;
|
|
509
|
+
export interface ISkuPopupSbumitData {
|
|
510
|
+
sku: IFormatSku;
|
|
511
|
+
count: number;
|
|
512
|
+
customizationItemList?: IProductSelectedCustomizationItem[][];
|
|
513
|
+
}
|
|
514
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export default class AdjoinMatrix {
|
|
2
|
+
vertex: never[];
|
|
3
|
+
quantity: number;
|
|
4
|
+
adjoinArray: never[];
|
|
5
|
+
constructor(vertx: any);
|
|
6
|
+
init(): void;
|
|
7
|
+
setAdjoinVertexs(id: any, sides: any, weight: any): void;
|
|
8
|
+
getVertexCol(id: any): never[];
|
|
9
|
+
getCollection(params: any): never[];
|
|
10
|
+
getUnions(params: any): never[];
|
|
11
|
+
isItemEqual(params: any): any;
|
|
12
|
+
isArrayUnions(params: any): any;
|
|
13
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import AdjoinMatrix from "./adjoinMartix";
|
|
2
|
+
export default class SpecAdjoinMatrix extends AdjoinMatrix {
|
|
3
|
+
specList: never[];
|
|
4
|
+
specCombinationList: never[];
|
|
5
|
+
constructor(specList: any, specCombinationList: any);
|
|
6
|
+
initSpec(): void;
|
|
7
|
+
initSameLevel(): void;
|
|
8
|
+
getSpecsOptions(params: any): never[];
|
|
9
|
+
fillInSpec(params: any, weight: any): void;
|
|
10
|
+
}
|