From f2a42b7d4b772ec4fd5d2ce908ad14b0554c3b63 Mon Sep 17 00:00:00 2001 From: "liujw155@outlook.com" Date: Sat, 8 Feb 2025 18:25:41 +0800 Subject: [PATCH] add shopping cart for tid1878 --- src/pages.json | 7 + .../mall/components/index_search_bar.vue | 5 +- .../mall/components/specification_modal.vue | 5 +- src/subpackage/mall/js/api.js | 3 + src/subpackage/mall/js/handle.js | 20 +- src/subpackage/mall/pages/classify.vue | 20 +- src/subpackage/mall/pages/shopping_cart.vue | 739 +++++++++++++++++++++ src/subpackage/mall/static/images/selected2.png | Bin 0 -> 753 bytes src/subpackage/mall/static/images/useless.png | Bin 0 -> 421 bytes src/utils/calculate.js | 76 +++ src/utils/util.js | 39 +- 11 files changed, 866 insertions(+), 48 deletions(-) create mode 100644 src/subpackage/mall/pages/shopping_cart.vue create mode 100644 src/subpackage/mall/static/images/selected2.png create mode 100644 src/subpackage/mall/static/images/useless.png create mode 100644 src/utils/calculate.js diff --git a/src/pages.json b/src/pages.json index 6800ebc..6407ae3 100644 --- a/src/pages.json +++ b/src/pages.json @@ -1017,6 +1017,13 @@ "style" : { "navigationBarTitleText": "商品分类" } + }, + { + "path": "pages/shopping_cart", + "style" : { + "navigationBarTitleText": "购物车", + "enablePullDownRefresh": true + } } ] } diff --git a/src/subpackage/mall/components/index_search_bar.vue b/src/subpackage/mall/components/index_search_bar.vue index bbdb18f..9f44ad1 100644 --- a/src/subpackage/mall/components/index_search_bar.vue +++ b/src/subpackage/mall/components/index_search_bar.vue @@ -5,7 +5,7 @@ 搜索 - + {{ cartNUmShow }} @@ -29,7 +29,8 @@ export default { let { cartNum } = this; if(!isNaN(cartNum))return cartNum > 99 ? 99 : cartNum; return 0; - } + }, + } } diff --git a/src/subpackage/mall/components/specification_modal.vue b/src/subpackage/mall/components/specification_modal.vue index ec86f91..93ff1c4 100644 --- a/src/subpackage/mall/components/specification_modal.vue +++ b/src/subpackage/mall/components/specification_modal.vue @@ -233,10 +233,7 @@ export default { }) .catch(err => { hideLoad(); - showModal({ - title: '提示', - content: err.message || '操作失败!' - }) + showModal({ content: err.message || '操作失败!' }); console.warn('subpackage mall components specification goodsCartAdd err --->', err); }) }, diff --git a/src/subpackage/mall/js/api.js b/src/subpackage/mall/js/api.js index 2007d32..abf5d11 100644 --- a/src/subpackage/mall/js/api.js +++ b/src/subpackage/mall/js/api.js @@ -10,6 +10,9 @@ export const MALL_API = { goodsComment:`${ORIGIN}/shop2/goodsComment`, //商品评价列表 goodsList:`${ORIGIN}/shop2/goodsList`, //商品列表 goodsCateList:`${ORIGIN}/shop2/goodsCateList`, // 商品分类列表 + goodsCartNumsEdit:`${ORIGIN}/shop2/goodsCartNumsEdit`, //购物车 - 修改数量 + goodsCartDel:`${ORIGIN}/shop2/goodsCartDel`, //购物车 - 删除商品 + goodsCartSettlement:`${ORIGIN}/shop2/goodsCartSettlement`, //购物车 - 去结算 } export default { ORIGIN, MALL_API }; \ No newline at end of file diff --git a/src/subpackage/mall/js/handle.js b/src/subpackage/mall/js/handle.js index 1c6013a..1a6c91c 100644 --- a/src/subpackage/mall/js/handle.js +++ b/src/subpackage/mall/js/handle.js @@ -1,5 +1,6 @@ import { MALL_API } from "./api"; import server from "./server"; +import { accAdd, accMul } from "@/utils/calculate.js"; // 购物车商品列表 export function goodsCartList(brand_id){ @@ -16,10 +17,27 @@ export function goodsCartList(brand_id){ return ({ totalList: _ls, validList: _ls.filter(item => item.product_invalid === 0), - invalidList: _ls.filter(item => item.product_invalid === 0), + invalidList: _ls.filter(item => item.product_invalid === 1), }); }else{ return Promise.reject(_data); } }) +} + +// 获取商品列表价格信息 +export function getPayInfoForGoodsList(array){ + if(!array.length)return ({ num: 0, str: '0.00' }); + let _priceNum = array.reduce((total, item) => { + let _unitPrice = 0; + if(item?.product_spec_multi === 0)_unitPrice = item?.product_spec_single_info?.price ?? 0; + if(item?.product_spec_multi === 1)_unitPrice = item?.product_spec_multi_info?.price ?? 0; + let _price = accMul((item?.product_nums ?? 0), _unitPrice); + return accAdd(total, _price); + }, 0); + return ({ + num: _priceNum, + // 需要支付的类目,四舍五入违法 + str: _priceNum.toFixed(3).slice(0, -1), + }) } \ No newline at end of file diff --git a/src/subpackage/mall/pages/classify.vue b/src/subpackage/mall/pages/classify.vue index 21b8ec3..7060f7b 100644 --- a/src/subpackage/mall/pages/classify.vue +++ b/src/subpackage/mall/pages/classify.vue @@ -1,7 +1,7 @@ + diff --git a/src/subpackage/mall/static/images/selected2.png b/src/subpackage/mall/static/images/selected2.png new file mode 100644 index 0000000000000000000000000000000000000000..6832c3fd63aa6e1653cb1f5f5984521af377c881 GIT binary patch literal 753 zcmVzs2nKyn3n?SSO|{U1J_sxkDGHnh3PK_Xb5U60M?w@r zMTD!V2#aVDqaYzAgp?RA`fyXCF^==Rao;%OI5ThFn;GT3?LFuGfA8FL&b?P)_3LOU zz&Tq3><3wnqy#~s?k<@|Fb-k_c#D?rr>SMeN@!tf)N!d4hs%eM$ANrP`-s6TQaolM z+)C5!ujzb@0ou=d@Z?*cvN!|P3(-%#1eqo zbGQ55%B9^Xe=kD^gxw;k2g?C&Vop+I(s;0-##WR6et4 z1x11`Zym@drco^#oZMW&gUULb4u|e>^Wz(?481b&7RMAoH^_4qiPEDEy$Hv-vlI^+pzXP8X-Q?9i7Vjtvvk!bzq^ z;&lUk^iO;?{x`{#%0LkC7+F0(c#5MXW%}~qukRds(aYbEa*2Fdi$~n&OaZ3P++eMH zi7y@^NAX1flP!2!b%NSW<;xPJARdhk)4um`tlE`<+H=#i$46S+g0w|gu*S{H>U#EV z*qF9XGZv3T8?@AhW)NA5tCK*rp|wF|1d+YCN`M+f8I0mYh}^_k9K{MGgTpA_<>qR| z0ZI$kac}fPx*?N(w#5!3WoG+vtRQT?kSGA#uVngG*m)_9mW-{}@+gF@50fZ_txvP~ j4z}%anm9&Q>3RMiOE+8~5oa{@00000NkvXXu0mjf>Em1x literal 0 HcmV?d00001 diff --git a/src/subpackage/mall/static/images/useless.png b/src/subpackage/mall/static/images/useless.png new file mode 100644 index 0000000000000000000000000000000000000000..2c850f1cf6aa4e81e244ba78079611c1c38aeafb GIT binary patch literal 421 zcmV;W0b2fvP)bep`o0dpq`$doSdAWpP!$fpYrneoSdKE-{Z2fwWg-3xVXFP>+tI8 z@5;)~<>l$*je_~^PeA<(a8X9fzuSmP<%}jrJ;auQ;Kkn+xW2fBOm0C|aszHk zGM1*WD?vla-ZTQz_ke`pJhtx=8@!W#gGmwy18CC(P=bXr5=@e%Hc8SZn`LaWP{b69 zr6#u2wpr&=&Zb%K?JhvE?dHHRzzz&YjuITX(a;XZe!Mv2)f+GGaQ*)PehDO%-dkpN P00000NkvXXu0mjfWl7C% literal 0 HcmV?d00001 diff --git a/src/utils/calculate.js b/src/utils/calculate.js new file mode 100644 index 0000000..2559635 --- /dev/null +++ b/src/utils/calculate.js @@ -0,0 +1,76 @@ +/** + * 加法函数 + * @param {number} arg1 数字1 + * @param {number} arg2 数字2 + * @returns {number} 返回两数相加的结果 + * */ +export function accAdd(arg1, arg2) { + var r1, r2, m, c; + try { r1 = arg1.toString().split(".")[1].length; }catch (e) { r1 = 0 }; + try { r2 = arg2.toString().split(".")[1].length }catch (e) { r2 = 0 }; + c = Math.abs(r1 - r2); + m = Math.pow(10, Math.max(r1, r2)); + if (c > 0) { + var cm = Math.pow(10, c); + if (r1 > r2) { + arg1 = Number(arg1.toString().replace(".", "")); + arg2 = Number(arg2.toString().replace(".", "")) * cm; + }else { + arg1 = Number(arg1.toString().replace(".", "")) * cm; + arg2 = Number(arg2.toString().replace(".", "")); + } + }else { + arg1 = Number(arg1.toString().replace(".", "")); + arg2 = Number(arg2.toString().replace(".", "")); + } + return (arg1 + arg2) / m; +} + +/** + * 减法函数 + * @param {number} arg1 数字1 + * @param {number} arg2 数字2 + * @returns {number} 返回两数相减的结果 + * +*/ +export function accSub(arg1, arg2) { + var r1, r2, m, n; + try { r1 = arg1.toString().split(".")[1].length }catch (e) { r1 = 0 }; + try { r2 = arg2.toString().split(".")[1].length }catch (e) { r2 = 0 }; + + m = Math.pow(10, Math.max(r1, r2)); //last modify by deeka //动态控制精度长度 + n = (r1 >= r2) ? r1 : r2; + return ((arg1 * m - arg2 * m) / m).toFixed(n); +} + +/** + * 乘法函数 + * @param {number} arg1 数字1 + * @param {number} arg2 数字2 + * @returns {number} 返回两数相乘的结果 + * +*/ +export function accMul(arg1, arg2) { + var m = 0, s1 = arg1.toString(), s2 = arg2.toString(); + try { m += s1.split(".")[1].length }catch (e) { }; + try { m += s2.split(".")[1].length }catch (e) { }; + + return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m); +} + +/** + * 除法函数 + * @param {number} arg1 数字1 + * @param {number} arg2 数字2 + * @returns {number} 返回两数相除的结果 + * +*/ +export function accDiv(arg1, arg2) { + var t1 = 0, t2 = 0, r1, r2; + try { t1 = arg1.toString().split(".")[1].length }catch (e) { } + try { t2 = arg2.toString().split(".")[1].length }catch (e) { } + + r1 = Number(arg1.toString().replace(".", "")); + r2 = Number(arg2.toString().replace(".", "")); + return (r1 / r2) * Math.pow(10, t2 - t1); +} \ No newline at end of file diff --git a/src/utils/util.js b/src/utils/util.js index 145beb5..c60ac1b 100644 --- a/src/utils/util.js +++ b/src/utils/util.js @@ -261,34 +261,6 @@ export function getSceneQuery(scene){ return queryObj; } -// 格式化聊天内容 -// export function formatContent(str = ''){ -// let reg = /\[[\u4e00-\u9fa5_a-zA-Z0-9]{1,}\]/gi; -// let strArr = str.split(reg) || []; -// let emojiArr = str.match(reg) || []; -// let contentList = []; -// strArr.forEach(ele=>{ -// if(ele)contentList.push({ -// type:'txt', -// content:ele -// }); -// if(!!emojiArr.length){ -// let iconKey = emojiArr.splice(0,1)[0]; -// if(emojiMap[iconKey]){ -// contentList.push({ -// type:'icon', -// src:`${emojiUrl}${emojiMap[iconKey]}` -// }) -// }else{ -// contentList.push({ -// type:'txt', -// content:iconKey -// }); -// } -// } -// }); -// return contentList -// } //获取地址栏里(URL)传递的参数 function getUrlQuery(key,url){ var _url = decodeURI(url).split('?a=1').join(''); //剪切'?a=1'安卓兼容,再获取参数 @@ -405,10 +377,6 @@ export function $_emit(name, data){ }) } -function getFilterJson(obj){ - return obj -} - function order_pay_type_txt(status = ''){ let _obj = { 0: '微信支付', @@ -419,6 +387,10 @@ function order_pay_type_txt(status = ''){ return _obj[status] || '-' } +export function checkBothArrIsEqual(arr1 = [], arr2 = []){ + return arr1.length === arr2.length && arr1.every(item => arr2.includes(item)); +} + export default { formatTime, formatNumber, @@ -451,5 +423,6 @@ export default { isProfile, $_once, $_emit, - order_pay_type_txt + order_pay_type_txt, + checkBothArrIsEqual, // 判断两个数组是否相等 }