這篇文章會很長,非常長,特別長,無敵長。
真的是擠牙膏般的項目進度,差不多是8月底有開始這個項目的想法,時至今日都1個多月了,拋去頻繁的加班時間,王者時間,羽毛球時間...見縫插針的寫這個項目,我竟然寫完了,我竟然沒有半途放棄,可真把我自己感動壞了。
好吧,主要是這個小程序很簡單,本文會講解一下這個小程序的代碼,所有代碼幾乎是我一個個敲出來的,所有邏輯也是自己構思梳理的,因此很多實現方式並不是很好,冗余代碼很多,代碼質量堪憂,但我也在學習中,隨着技術提升,會不斷來重構代碼,如果大家有任何建議歡迎私信我哦,特別感謝。
該小程序采用的雲開發,沒有自己搭建后端,我心目中,只要沒有后端的內容我就覺得很簡單。但其實我還是想有朝一日能自己獨立完成前后端所有工作,寫一個更棒的作品。
之前有寫過幾篇文章,可以回顧一下。你可能需要的文章:
天啦嚕,看了半天代碼發現還挺多,一時間不曉得該從哪里開始。那還是按照tab頁使用邏輯順序來吧。
啟動頁
之前文章也有過如何寫一個啟動頁面。至於為什么需要個啟動頁呢?
我覺得主要也就兩點,一個是好看,還有個就是添加獲取用戶信息類型按鈕,間接引導用戶授權獲取用戶信息。
至於為啥要獲取用戶信息?
曾真有段時間,我糾結了好久,因為我自己這個程序中,除了展示,好像也沒啥需要用到這個數據的地方。
但我還是寫了。
當前登陸用戶的用戶名和頭像圖片,通過 open-data 標簽可以無需授權直接獲取,只要指定相應類型userNickName和userAvatarUrl即可,樣式只需要用view容器包裹起來進行設置。button按鈕指定open-type為getUserInfo,在點擊事件中就可以拿到授權之后的用戶公開信息數據。
拿到用戶信息需要保存到數據庫中,也只需要首次登錄的用戶在授權之后才需要入庫,所以加個判斷當前登陸用戶是否是首次登錄,判斷條件是每個用戶的唯一值openId。
通過這個邏輯,那需要處理的可以分為如下幾個:
1、獲取當前登錄用戶的openId。
getOpenID() { let that = this; wx.cloud.callFunction({ name: 'login', complete: res => { const openId = res.result.event.userInfo.openId; that.setData({ openId }) } }) },
這個login雲函數是項目構建時自動生成的,雲函數寫法:
4、檢查當前登錄用戶是否已經存在數據庫。
首頁
首頁從上到下分為幾塊,輪播圖,輪播告示,icon列表,推薦商品展示。
輪播圖。
直接用自帶的組件,swiper和swiper-item配合使用。
因為之前有小伙伴咨詢過,如何雲開發中數據庫新建集合,這里用gif簡單說明一下。
為啥要兩個gif呢,因為超過300幀的它不給上傳~
輪播告示。
和輪播圖一樣的,只是輪播方向不同,swiper中添加個參數 vertical。點擊顯示彈窗,引用的是WeUI庫,咋用參考以往文章。
icon列表。
到這里就要用到本程序中最最最復雜的一個數據庫集合了,幾乎所有的商品數據都是存放在這個集合中的。
那icon列表就是獲取goods集合中每個對象icon字段值,推薦商品列表就是每個對象中list數組中所有isHot為true的數據。
而我這里肯定是需要點擊不同的icon跳轉到不同的分類欄目中的,那就需要在跳轉時候攜帶該分類id,還是當前這個數組的下標。
通過定義全局參數,可以解決wx.switchTab無法攜帶參數的問題。
app.js中,在onLaunch里定義個全局對象。
在menu.js中,在最開始需要引入全局變量。
分類頁這兒主要的處理邏輯有三塊內容。
1、區分管理員權限和普通用戶權限。
管理員權限可以有新增商品和刪除的功能,普通用戶只可以查看。
權限這塊的處理應該會有更好的方案。
我比較挫,想到的最簡單的方法就是利用openId來做過濾。在頁面初次加載的時候獲取當前用戶的openId,和啟動頁一樣的方法,只是回調函數中不一樣。在數據庫中定義個管理員集合,你需要給那些用戶設置成管理員,將他們的openId放在這個集合中。
我是在app.js中獲取這個管理員集合的,可能是剛剛嘗過全局變量的甜頭吧。
當時對於這個邏輯處理的考慮也是想了蠻久,這個小程序的制作出發點只是作為一個助手作用,方便用戶查看店鋪所有商品,是做一個商品分類展示的功能,不支付線上下單,主要也是因為顯示下單這個功能太復雜,個人小程序沒權限做。
那我就想着僅僅分類展示並不滿足使用,加入個喜歡列表實用性更大。
商品的固定數據是可以存入雲開發的數據庫中,但是針對於每個用戶不同的喜歡數據,最好的方案就是使用緩存。
localStorange的數據形式是key / value,一開始計划的是固定一個key,value中是個數組對象。
這一定是可行的,但我不會做......麻煩能實現的朋友私信我。
好的方案來不了可以來挫的嘛。我用商品的分類Id和當前商品Id拼接起來作為key,這就保證了key唯一性,那存入本地的數據是需要在喜歡列表展示的,我需要展示的數據有分類Id,id,商品名,是不是喜歡,封面縮略圖,價格。明白了這幾點要求,實現就很簡單了。
在每個商品的愛心圖標上加一個點擊事件。
3、從本地緩存中獲取喜歡列表詳情
有些商品是已經加入喜歡列表的,商品上的喜歡圖標已經是高亮狀態,等到下次進入該分類頁,就應該將之前設置喜歡狀態的商品顯示出來,不然每次進來都是初始的模樣就毫無意義了。
首先是需要獲取商品列表數據,再根據本地緩存數據,將喜歡的商品數據修改一下狀態。
這樣就是分三步走。
獲取商品列表數據。
商品詳情頁
點擊跳轉過來的時候,攜帶的參數只有分類id和商品id。根據這兩個字段就可以在商品列表數據查詢到具體所有數據。
在當前頁面獲取傳參過來的數據。
按照之前數據庫集合中定義的數據格式,這里就分兩塊。一個是相關數據的填寫表單,一個就是上傳的圖片列表。
圖片列表上傳的實現,官方都給了相應的api方法。
選擇圖片:
最輕松的一個頁面,讀取本地緩存展示數據。這里還用到了WeUI的mp-slideview組件,修改這個組件的樣式還是挺麻煩,高度樣式沒改成功,多少存在點瑕疵。
個人信息頁
這個頁面已經純屬和小程序主旨功能無關了,我就是無聊寫着玩湊湊頁面的。想寫些什么都可以自由發揮,隨便添加什么功能都可以,這里我就不介紹我隨便寫的東西了。
至此,該篇歷經四天的文章終於結束(主要是周末玩了兩天),目前正文字數4500+......
我廢話可真多呀。
這個小程序會繼續維護,有任何不明白的地方聯系我哦~
關注我吧