1. 程式人生 > >微信小程式簡陋購物車(邏輯什麼的都有)

微信小程式簡陋購物車(邏輯什麼的都有)

關於樣式醜的說法,自行改成好看的就好

<style lang="less">
page {
  background: #f4f4f4;
}

.cart-top {
  background: #fff;
  .receive {
    padding: 20rpx;
    display: flex;
    justify-content: space-between;
  }
  .address {
    padding: 0 20rpx 20rpx;
  }
  .address-bar {
    display: block;
    width: 750rpx;
height: 15rpx; } } .list-title { border-top: 20rpx #f4f4f4 solid; padding: 20rpx; border-bottom: 1px #dddddd solid; background: #fff; } .ware-list { padding-bottom: 80rpx; background: #fff; } .ware-item { display: flex; padding: 0 20rpx; } .choice-button { width: 70rpx; display
: flex; align-items: center; flex-shrink: 0; } .ware-content { display: flex; flex: 1; padding: 20rpx 0; justify-content: space-between; align-items: center; border-bottom: 1px #f5f5f5 solid; .ware-image { margin-right: 20rpx; image { display: block; width: 160rpx; height
: 160rpx; } } .ware-title { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; margin-bottom: 20rpx; } .ware-info { flex: 1; } .ware-info-btm { display: flex; justify-content: space-between; .ware-price { font-size: 18px; color: #ff6066; span { font-size: 12px; } } } } .cart-total { background: #fff; display: flex; justify-content: space-between; align-items: center; height: 95rpx; position: fixed; bottom: 0; left: 0; width: 100%; .total-button { box-sizing: border-box; padding-left: 20rpx; margin-right: 50rpx; display: flex; align-items: center; icon { margin-right: 20rpx; } } .total-center { flex: 1; .colorRed { text { font-size: 12px; } } .price-tips { color: #999; font-size: 12px; } } .accounts { flex-shrink: 0; width: 230rpx; height: 100%; display: flex; align-items: center; justify-content: center; background: #ff6066; color: #fff; } } .calculate { display: flex; .rect { width: 50rpx; height: 50rpx; line-height: 50rpx; border: 1px #666 solid; text-align: center; } .number { line-height: 50rpx; width: 90rpx; padding: 5rpx; box-sizing: border-box; text-align: center; } } .cart-empty { padding: 20rpx; background: #fff; text-align: center; } .empty{ display: flex; padding:100rpx 0; justify-content: center; flex-direction: column; align-items: center; image{ width:120rpx; height:120rpx; margin-bottom:50rpx; } }
</style> <template> <view class="container"> <view wx:if="{{cartData.length > 0}}"> <!-- 收貨人資訊 --> <view class="cart-top" wx:if="{{address.addr}}"> <view class="receive"> <view class="name"> 收貨人: {{address.userName}} </view> <view class="phonen-number"> {{address.telNumber}} </view> </view> <view class="address"> 收貨地址: {{address.addr}} </view> <image src="../images/[email protected]" class="address-bar"> </view> <view class="cart-empty" wx:if="{{!address.addr}}" bindtap="handleAddress"> 新增地址 </view> <view class="list-title"> 優購生活館 </view> <!-- 購物車列表 --> <view class="ware-list"> <view wx:for="{{cartData}}" wx:key="{{index}}"> <view class="ware-item"> <!-- 左側的按鈕 --> <view class="choice-button" @tap="handleSelect({{item}})"> <icon type="success" color="{{item.checked ? 'red' : '#999'}}" size="18"/> </view> <view class="ware-content"> <!-- 左側的圖片 --> <navigator class="ware-image" url="/pages/goods_detail?goods_id={{item.goods_id}}"> <image src="{{item.goods_small_logo}}"/> </navigator> <!-- 右邊的商品資訊 --> <view class="ware-info"> <navigator url="/pages/goods_detail?goods_id={{item.goods_id}}" class="ware-title"> {{item.goods_name}} </navigator> <view class="ware-info-btm"> <view class="ware-price"> <span></span>{{item.goods_price}} </view> <!-- 修改商品的數量 --> <view class="calculate"> <view class="calculate"> <view class="rect" @tap="handleCompouted({{item}}, -1)">-</view> <view class="number">{{item.count}}</view> <view class="rect" @tap="handleCompouted({{item}}, 1)">+</view> </view> </view> </view> </view> </view> </view> </view> </view> <!-- 結算 --> <view class="cart-total"> <view class="total-button" @tap="handleAllSelect"> <icon type="success" color="{{allSelect ? 'red' : '#999'}}" size="18"/>全選 </view> <view class="total-center"> <view class="total-price"> 合計: <text class="colorRed"> <text></text>{{allPrice}} </text> </view> <view class="price-tips"> 包含運費 </view> </view> <view class="accounts" bindtap="handleSubmit" > 結算({{allCount}}) </view> </view> </view> <!-- 購物車數量為空的時候 --> <view class="empty" wx:if="{{cartData.length == 0}}" > <image src="../images/[email protected]"/> 購物車為空 </view> </view> </template> <script> import wepy from 'wepy'; import cartManage from '../utils/cartManage'; import request from '../utils/request'; import authManage from '../utils/authManage'; /* 1. 從商品詳情頁新增到購物車 cartManage.add 2. 動態修改購物車的總價格 cartManage.updatePrice 3. 修改購物車商品的選中狀態 cartManage.update 4. 修改購物車商品全選的狀態 cartManage.updataAllChecked 5. 修改購物車商品的數量 cartManage.update */ export default class Cart extends wepy.page { config = { navigationBarTitleText: '搜尋' }; data = { // 儲存購物車列表,預設是空陣列 cartData: (cartManage.data && cartManage.data.goods) || [], allSelect: true, allPrice: 0, address: { userName: '', telNumber: '', addr: '' }, allCount: cartManage.data.allCount }; onShow() { this.updateData(); // 頁面開啟時候判斷是否是全選 this.cartData.forEach(v => { if (!v.checked) { this.allSelect = false; } }); } // 判斷是否是全選 isAllSelelct() { const { cartData } = this; // 只要有一個商品沒選中, 取消全選狀態 for (let i = 0, v; (v = cartData[i++]); ) { if (!v.checked) { this.allSelect = false; return; } this.allSelect = true; } } // 更新data資料 updateData() { // 更新data的資料 this.cartData = cartManage.data.goods; // 更新價格 this.allPrice = cartManage.data.allPrice; // 更新總數 this.allCount = cartManage.data.allCount; } methods = { handleCompouted: function(item, num) { item.count += Number(num); if (item.count == 0) { // 呼叫對話彈窗 wx.showModal wx.showModal({ content: '確定刪除商品嗎?', success: res => { if (res.confirm) { // 點選確定就刪除商品 cartManage.remove(item); this.updateData(); this.$apply(); } } }); } else { cartManage.update(item); this.updateData(); } }, handleSelect: function(item) { item.checked = !item.checked; cartManage.update(item); this.updateData(); // 判斷是否是全部選中 this.isAllSelelct(); }, // 點選全選時候觸發 handleAllSelect: function() { const { allSelect } = this; this.allSelect = !allSelect; cartManage.updataAllChecked(this.allSelect); // 更新價格 this.allPrice = cartManage.data.allPrice; }, // 新增收貨地址 handleAddress: function() { wx.chooseAddress({ success: res => { this.address = { userName: res.userName, telNumber: res.telNumber, addr: `${res.provinceName}${res.cityName}${res.countyName}${ res.detailInfo }` }; // 把收貨地址存到本地 cartManage.addAddr(this.address); this.$apply(); } }); }, // 提交整個訂單 handleSubmit: function() { // 提交訂單的引數 const data = { order_price: this.allPrice, consignee_addr: this.address.addr, goods: this.cartData.map(v => { return { goods_id: v.goods_id, goods_number: v.count, goods_price: v.goods_price }; }) }; // 判斷是否登入 if (!authManage.isAuth) { wx.navigateTo({ url: '/pages/login' }); return; } // 提交訂單 request({ url: 'api/public/v1/my/orders/create', data, method: 'POST', header: { Authorization: authManage.getToken() }, success: res => { const {data} = res.data; this.pay( { order_number: data.order_number } ) } }); } };

相關推薦

程式簡陋購物車(邏輯什麼的)

關於樣式醜的說法,自行改成好看的就好 <style lang="less"> page { background: #f4f4f4; } .cart-top { background: #fff; .receive { padding: 20rpx;

程式購物車和父子元件傳值及calc的注意事項

在做微信小程式時,覺得小組裡對購物車的實現不是很完美,就自己嘗試的寫了下,然後用到了父子元件傳值,父子元件傳值的話,和vue框架上是非常相似的,以及calc這個css函式,calc有個注意點,自己不怎麼用,一時間有差點忘了,這裡記錄下 1.效果圖 2.子元件實現

7個黑科技十足的程式,每一個能讓你念念不舍!

微信上最為出名的想必就最為小程式了!基本上與現有的軟體也就相差毫幾,有些人為了免下軟體幾乎都用上了,那為什麼有那麼多人都鍾愛於小程式呢?其關鍵原因就是方便,只要用微信一個軟體,就可以隨意使用任何小程式了! 那麼今天小編在這裡就為大家分享7個非常好用的微信小程式,個個都黑科技十足!讓你念念不舍。

5個伴你成長的程式,每一個是一等一的能手!

每個小程式的出現都各有各的用途,而每個小程式也不可能都深受大家的討厭,也不可能大家都會喜歡,各有各的好,用的上就不錯,所以,今天給大家分享5個伴你成長的微信小程式,希望大家能夠喜歡。 1.實驗樓 一款海量學習課程的工具 這款小程式的分類是非常明確的,所包含的課成也是對大家有幫助的,如we

程式購物車--商城系列

// pages/shopcart/shopcart.jsPage({ /** * 頁面的初始資料 */ data: { 'iscart': false, //控制購物車有沒有資料 'goodList': [ { 'cover': '/assets/image

程式實現購物車功能

 在我的GitHub上有校園二手交易微信小程式的原始碼,這裡麵包含了購物車的功能,GitHub地址:https://github.com/zhuyuzhu/Secondhand-goods-on-campus,該專案的pages資料夾下的shoppingCart資料夾就是購物

程式 前端原始碼邏輯和工作流詳解

看完微信小程式的前端程式碼真的讓我熱血沸騰啊,程式碼邏輯和設計一目瞭然,沒有多餘的東西,真的是大道至簡。 廢話不多說,直接分析前端程式碼。個人觀點,難免有疏漏,僅供參考。 檔案基本結構:  先看入口app.js,app(obj)註冊一個小程式。接受一個 obje

程式實戰專案-邏輯層簡單介紹

邏輯層這邊我主要分為三個模組進行介紹:1.頁面函式的生命週期2.頁面路由介紹3.js模組化一、App()函式的生命週期Page()函式的生命週期二、頁面路由介紹頁面路由幾種方式:頁面路由出發時機和相應的

程式,大多數人搞錯的八個問題

宣告:本文為CSDN原創投稿文章。 作者:王安,數字天堂DCloud公司創始人兼CEO 責編:陳秋歌,關注微信開發等領域,尋求報道或者投稿請發郵件chenqg#csdn.net。研發心得、專案實戰、前沿技術、外文翻譯……,只要是技術乾貨,十分

uniapp 開發【程式簡陋登入模組】

<script>      export default {   

使Atom支援程式程式碼格式wxml,wxss顏色(高亮)

在用Atom來瀏覽或者編輯微信小程式時的介面時全灰色文字怎麼辦?!! 如何讓wxml和wxs格式的程式碼像HTML,CSS變成高亮的呢。。 就像這樣 ↓↓↓↓↓↓↓ 修改步驟如下 1.在Atom中裝

程式-切換tab頁並且資料攜帶

微信小程式還處於內測階段,最不方便的莫過於官方在不停的更新,前幾天寫的功能隔個幾天忽然發現不能用了_(:зゝ∠)_ 功能需求如下: 我在首頁點選“5萬以上”他會把跳轉到買車頁然後同時把“5萬以上”這個篩選條件帶到買車頁。 之前navigator導航是可以跳轉並攜帶資料的,

程式(看文件寫例項十)程式課堂寶APP實現我的模組相關介面及邏輯

繼上篇博文,這篇完成最後一個模組,即我的模組。 一、頁面效果 這個模組是和使用者型別相關的,因此老師賬號和學生賬號能看的功能不一樣,老師端效果如下: 點選頭像到達個人資訊如下: 點選後可以做相應的修改。學生端的介面如下: 修改密碼的頁面如下: &nbs

程式(看文件寫例項六)程式課堂寶APP實現簽到邏輯

繼上篇博文,這篇寫下籤到實現的邏輯。 一、實現邏輯 發起簽到 1、先上傳當前自己的定位經緯度 2、學生查詢老師的最後一次簽到記錄,如果發現簽到記錄signComplete為false說明有新的簽到 3、得到簽到的第幾次課 4、系統獲得學生的定位經緯度 5、判斷兩點經緯度轉

程式-06 tab選項卡滑動切換與列表Item(scroll 、 swiper)資料的獲取等所用到的

目錄   示例圖片 WXML js WXSS 示例圖片 WXML <view > <scroll-view scroll-x="true" class="tab-h" scroll-left="{{scrollLeft}}

4個無敵好用的程式,用了你離不開

自從有了微信小程式,平均每天開啟微信的次數在急劇增加,因為微信小程式,無需下載,無需安裝,不佔手機記憶體,卻還有和手機APP同樣強大的功能,讓很多人受益。以下是我手機裡4個無敵好用的微信小程式,用了保證你都離不開。 1.胖次工具箱 一個簡潔、無廣告的多功能工具箱 這個小程式真的是

Atitit 程式的部署流程文件 目錄 1.1. 設定https 參照 Atitit tomcat linux 常用命令 1 1.2. 增加證書 騰訊雲和阿里雲可申請免費證書,但要一天

Atitit 微信小程式的部署流程文件   目錄 1.1. 設定https  參照 Atitit tomcat linux 常用命令 1 1.2. 增加證書   騰訊雲和阿里雲都可申請免費證書,但要一天稽核  可以淘寶購買證書快速寫

程式——學習筆記(二):邏輯層(1)

邏輯層將資料進行處理後傳送給檢視層,同時接受檢視層的事件反饋。 用App()函式註冊一個小程式。 當小程式初始化完成時,會觸發 onLaunch(全域性只觸發一次) 當小程式啟動,或從後臺進入前臺顯示,會觸發 onShow 當小程式從前臺進入後臺,會觸發 onHide 當小程式發生指令碼錯

4個別人愛用的程式,快來親自體驗一下啦!

自從小程式正式啟用後,小程式可以幫我們解決不少難題了,它的最大好處就是不用下載,使用起來方便快速,因此獲得了很多朋友的喜愛,今天為大家整理了5個超棒的微信小程式,還沒用用過的朋友可以使用一下哦! 1.王大嬸冥想 這是一個與智慧機器人聊天的冥想小程式,王大嬸兒用聊天對話的形式提供多種服務,有煩

程式 自定義單選複選按鈕組的實現(用於實現購物車產品列表功能)

  (一)單選按鈕組 模型圖如下:  index.js Page({ data: { parameter: [{ id: 1, name: '銀色' }, { id: 2, name: '白色' },{ id: 3, name: '黑色' }],//模擬商