小程序購物車部分業(yè)務(wù)邏輯

小程序購物車商品數(shù)量加減,單選全選,商品價(jià)格累計(jì)

2020年注定了是個(gè)不平凡的一年,疫情的爆發(fā)阻礙前去工作的腳步,只有在家敲著自己的小鍵盤玩樂了,把每一天當(dāng)成一個(gè)新的開始,牢記心中的理想,微笑面對生活,不斷充實(shí)自己,就會擁有精彩有意義的人生。逆境中學(xué)習(xí),逆戰(zhàn)中敲代碼。

最近學(xué)習(xí)小程序,簡單的對購物車基本功能做下學(xué)習(xí)筆記。

本次應(yīng)用uni-app創(chuàng)建項(xiàng)目

uni-app是一個(gè)使用Vue.js開發(fā)所有前端應(yīng)用的框架,開發(fā)者編寫一套代碼,可發(fā)布到iOS,Android,H5,以及各種小程序(微信/支付寶/百度/頭條/ QQ /釘釘)等多個(gè)平臺。

DCloud公司擁有420萬開發(fā)者,數(shù)十萬應(yīng)用案例,10.5億手機(jī)端用戶,數(shù)十款uni-app插件,70 +微信/ qq群。阿里小程序工具官方內(nèi)置uni-app(詳見),騰訊課堂官方為uni-app錄制培訓(xùn)課程(詳見),開發(fā)者可以放心選擇。 uni-app在手,做啥都不愁。甚至不跨端,也是更好uni-app的小程序開發(fā)框架(詳見),更好的App跨平臺框架,更方便的H5開發(fā)框架。你都可以快速交付,不需要轉(zhuǎn)換開發(fā)思維,不需要更改開發(fā)習(xí)慣。

頁面大致內(nèi)容

在這里插入圖片描述

下面是代碼

頁面模板

1

<template>

<view>

<view v-if="flag">

? ? ? 購物車未添加內(nèi)容,請 <navigator open-type="switchTab" url="/pages/home/home">//跳轉(zhuǎn)到商品頁,選購</navigator>

? ? </view>

? ? <view v-else>

? ? ? <view class="cartlist">

? ? ? ? <checkbox-group @change="allselected">

? ? ? ? ? <checkbox :checked="allchecked" />全選

? ? ? ? </checkbox-group>

? ? ? ? <view class="cartitem" v-for="(item, index) of cartlist" :key="index">

? ? ? ? ? <checkbox-group @change="selected(item)">

? ? ? ? ? ? <checkbox :checked="item.flag" />

? ? ? ? ? </checkbox-group>

? ? ? ? ? {{ item.proname }} ¥{{ item.price }} -- {{ item.num }}

? ? ? ? ? <text @click="reduce(item)">[-]</text>

? ? ? ? ? <text @click="add(item)">[+]</text>

? ? ? ? ? <text @click="del(item, index)">[del]</text>

? ? ? ? </view>

? ? ? </view>

? ? </view>

? ? <view> 總數(shù):{{totalNum}}</view>

? ? <view> 總價(jià):{{totalPrice}}</view>

</view>

</template>


js部分

<script>

? import { request, toast } from '../../utils/index.js' //

export default {

data() {

return {

flag: true,

? ? ? ? cartlist: [],

? ? ? ? allchecked: true

}

},

? ? computed: {

? ? ? totalNum () { //總數(shù)量

? ? ? ? let totalNum = 0;

? ? ? ? this.cartlist.map(item => {

? ? ? ? ? item.flag ? totalNum += item.num : totalNum += 0

? ? ? ? })

? ? ? ? return totalNum

? ? ? },

? ? ? totalPrice () { //總價(jià)格

? ? ? ? let totalPrice = 0;

? ? ? ? this.cartlist.map(item => {

? ? ? ? ? item.flag ? totalPrice += item.num * item.price : totalPrice += 0

? ? ? ? })

? ? ? ? return totalPrice

? ? ? }

? ? },

? ? onLoad () {

? ? },

? ? onShow () { // 不使用 onLoad 以及 mounted 是因?yàn)轫撁姹痪彺妫瑪?shù)據(jù)更新不及時(shí)

? ? ? try{

? ? ? ? let userid = uni.getStorageSync('userid')

? ? ? ? let token = uni.getStorageSync('token')

? ? ? ? if (userid && token) {

? ? ? ? ? request({

? ? ? ? ? ? url: '/cart',

? ? ? ? ? ? data: {

? ? ? ? ? ? ? userid, token

? ? ? ? ? ? }

? ? ? ? ? }).then(res => {

? ? ? ? ? ? if (res.data.code === '10019') {

? ? ? ? ? ? ? toast({title:'請先登錄'})

? ? ? ? ? ? ? uni.navigateTo({

? ? ? ? ? ? ? ? url: '/pages/login/login'

? ? ? ? ? ? ? })

? ? ? ? ? ? } else if (res.data.code === '10012') {

? ? ? ? ? ? ? toast({title:'請先選購商品'})

? ? ? ? ? ? ? this.flag = true

? ? ? ? ? ? } else {

? ? ? ? ? ? ? toast({title:'購物車列表獲取成功'})

? ? ? ? ? ? ? this.flag = false

? ? ? ? ? ? ? // 賦值之前給 數(shù)據(jù)添加數(shù)據(jù)項(xiàng) item.flag

? ? ? ? ? ? ? res.data.data.map( item => {

? ? ? ? ? ? ? ? item.flag = true

? ? ? ? ? ? ? })

? ? ? ? ? ? ? this.cartlist = res.data.data

? ? ? ? ? ? ? console.log(this.cartlist)

? ? ? ? ? ? }

? ? ? ? ? })

? ? ? ? } else {

? ? ? ? ? toast({title:'請先登錄'})

? ? ? ? ? uni.navigateTo({

? ? ? ? ? ? url: '/pages/login/login'

? ? ? ? ? })

? ? ? ? }

? ? ? }catch(e){

? ? ? ? //TODO handle the exception

? ? ? }

? ? ?

? ? ?

? ? },

methods: {

? ? ? allselected () { //全選框

? ? ? ? this.allchecked = !this.allchecked

? ? ? ? console.log(this.allchecked)

? ? ? ? // 如果為真,修改數(shù)據(jù)的每一項(xiàng)的flag的值都為真,否則都為假

? ? ? ? if (this.allchecked) {

? ? ? ? ? this.cartlist.map( item => {

? ? ? ? ? ? item.flag = true

? ? ? ? ? })

? ? ? ? } else {

? ? ? ? ? this.cartlist.map( item => {

? ? ? ? ? ? item.flag = false

? ? ? ? ? })

? ? ? ? }

? ? ? },

? ? ? selected (item) { //每條數(shù)據(jù)選擇框

? ? ? ? console.log('test', item)

? ? ? ? item.flag = !item.flag

? ? ? ? console.log(this.cartlist)

? ? ? ? // 如果單獨(dú)某一項(xiàng)沒被選中,那么全選一定不被選中

? ? ? ? // 如果單獨(dú)某一項(xiàng)被選中了,檢測其他項(xiàng)是否都被選中,如果都選中了,全選被選中

? ? ? ? if(!item.flag) {

? ? ? ? ? this.allchecked = false

? ? ? ? } else {

? ? ? ? ? // 檢測其余項(xiàng)是否被選中 --- 一假則假

? ? ? ? ? const test = this.cartlist.every(item => {

? ? ? ? ? ? return item.flag === true

? ? ? ? ? })

? ? ? ? ?

? ? ? ? ? if (test) {

? ? ? ? ? ? this.allchecked = true

? ? ? ? ? } else {

? ? ? ? ? ? this.allchecked = false

? ? ? ? ? }

? ? ? ? }

? ? ? },

reduce (item) { //商品數(shù)量減

? ? ? ? // 如果當(dāng)前的個(gè)數(shù)為1 不操作,如果大于1減1操作

? ? ? ? let num = item.num

? ? ? ? if (num > 1) {

? ? ? ? ? num -= 1

? ? ? ? } else {

? ? ? ? ? num = 1

? ? ? ? }

? ? ? ? let token = uni.getStorageSync('token')

? ? ? ? request({

? ? ? ? ? url: '/cart/update',

? ? ? ? ? data: {

? ? ? ? ? ? token,

? ? ? ? ? ? cartid: item.cartid, // item包含購物車記錄id

? ? ? ? ? ? num

? ? ? ? ? }

? ? ? ? }).then(res => {

? ? ? ? ? if (res.data.code === '10019') {

? ? ? ? ? ? toast({title:'請先登錄'})

? ? ? ? ? ? uni.navigateTo({

? ? ? ? ? ? ? url: '/pages/login/login'

? ? ? ? ? ? })

? ? ? ? ? } else {

? ? ? ? ? ? toast({title:'修改數(shù)量成功'})

? ? ? ? ? ? item.num -= 1 // 服務(wù)器返回成功之后? 視圖才更新

? ? ? ? ? }

? ? ? ? })

? ? ? },

? ? ? add (item) { //商品數(shù)量減

? ? ? ? // item.num += 1

? ? ? ? // 加1

? ? ? ? let num = item.num

? ? ? ? num += 1

? ? ? ? let token = uni.getStorageSync('token')

? ? ? ? request({

? ? ? ? ? url: '/cart/update',

? ? ? ? ? data: {

? ? ? ? ? ? token,

? ? ? ? ? ? cartid: item.cartid, // item包含購物車記錄id

? ? ? ? ? ? num

? ? ? ? ? }

? ? ? ? }).then(res => {

? ? ? ? ? if (res.data.code === '10019') {

? ? ? ? ? ? toast({title:'請先登錄'})

? ? ? ? ? ? uni.navigateTo({

? ? ? ? ? ? ? url: '/pages/login/login'

? ? ? ? ? ? })

? ? ? ? ? } else {

? ? ? ? ? ? toast({title:'修改數(shù)量成功'})

? ? ? ? ? ? item.num += 1 // 服務(wù)器返回成功之后? 視圖才更新

? ? ? ? ? }

? ? ? ? })

? ? ? },

? ? ? del (item,index) {? 刪除商品

? ? ? ? let token = uni.getStorageSync('token')

? ? ? ? request({

? ? ? ? ? url: '/cart/delete',

? ? ? ? ? data: {

? ? ? ? ? ? token,

? ? ? ? ? ? cartid: item.cartid

? ? ? ? ? }

? ? ? ? }).then(res => {

? ? ? ? ? if (res.data.code === '10019') {

? ? ? ? ? ? toast({title:'請先登錄'})

? ? ? ? ? ? uni.navigateTo({

? ? ? ? ? ? ? url: '/pages/login/login'

? ? ? ? ? ? })

? ? ? ? ? } else {

? ? ? ? ? ? toast({title:'刪除數(shù)據(jù)成功'})

? ? ? ? ? ? this.cartlist.splice(index, 1) // 刪除當(dāng)前的數(shù)據(jù)

? ? ? ? ? ? // 如果點(diǎn)擊刪除 刪完之后要顯示沒有數(shù)據(jù)了

? ? ? ? ? ? this.cartlist.length === 0 ? this.flag = true : this.flag = false

? ? ? ? ? }

? ? ? ? })

? ? ? }

}

}

</script>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容