場管理系統(tǒng)小程序畢設(shè):從業(yè)務(wù)拆解到云開發(fā)避坑全指南)
簡介一份農(nóng)場管理系統(tǒng)小程序畢業(yè)設(shè)計論文面向計算機相關(guān)專業(yè)學(xué)生及畢設(shè)開發(fā)者針對傳統(tǒng)農(nóng)場管理信息混亂、效率低、安全性差等問題給出了基于Java、MySQL、SpringBoot和微信小程序的系統(tǒng)設(shè)計方案。壓縮包內(nèi)含1個doc文檔共1.49MB論文包含中英文摘要、目錄、緒論、開發(fā)環(huán)境與技術(shù)選型、系統(tǒng)分析、數(shù)據(jù)庫設(shè)計、系統(tǒng)功能模塊、系統(tǒng)實現(xiàn)與測試等內(nèi)容重點介紹了農(nóng)場信息、作物管理、生產(chǎn)記錄、員工管理和安全管理等模塊的設(shè)計邏輯。目前已有185人學(xué)習(xí)下載。該論文結(jié)構(gòu)規(guī)范、章節(jié)完整有助于讀者理解B/S架構(gòu)、SpringBoot框架應(yīng)用、MySQL表結(jié)構(gòu)設(shè)計以及項目文檔撰寫方法既可作為畢業(yè)設(shè)計選題的參考模板也可作為后續(xù)系統(tǒng)開發(fā)與論文修改的基礎(chǔ)素材。1. “4.19農(nóng)場管理系統(tǒng)小程序”到底要交付什么一份畢設(shè)題背后的完整閉環(huán)先給一個反直覺的結(jié)論我見過大量栽在答辯前的農(nóng)場管理系統(tǒng)畢設(shè)代碼不是寫不出來而是論文和系統(tǒng)兩張皮演示時功能對不上文檔里的描述評審追問兩句就露餡了。標題里的“4.19”大概率是日期或版本號這不重要重要的是它背后是三類合一的交付物——小程序是載體農(nóng)場管理系統(tǒng)是業(yè)務(wù)內(nèi)容論文.doc是最終成果。這個標題適合誰主要是計算機、軟件工程、物聯(lián)網(wǎng)相關(guān)專業(yè)的畢業(yè)生拿到的是一個典型的“系統(tǒng)設(shè)計實現(xiàn)”類題目。你要交付的不只是一段能跑的代碼而是一條完整的證據(jù)鏈需求分析、數(shù)據(jù)模型、頁面設(shè)計、核心邏輯、測試記錄都要能在論文里找到對應(yīng)章節(jié)。做這類項目最常見的誤區(qū)是一上來就寫頁面寫到一半發(fā)現(xiàn)數(shù)據(jù)沒法閉環(huán)論文也沒法寫。所以這篇筆記我不講大道理直接帶你把“農(nóng)場管理系統(tǒng)小程序”從業(yè)務(wù)拆解、技術(shù)選型、核心編碼走到避坑收尾。新手能照著復(fù)現(xiàn)熟手能直接抄數(shù)據(jù)模型和云函數(shù)。2. 農(nóng)場業(yè)務(wù)拆解先定數(shù)據(jù)集合再寫頁面和論文2.1 農(nóng)場管理系統(tǒng)到底管什么從“農(nóng)場”兩個字推出業(yè)務(wù)模塊別被“農(nóng)場管理系統(tǒng)”這個寬泛名字唬住。打開論文模板里的“需求分析”章節(jié)你需要回答的核心問題是農(nóng)場管理者每天要處理什么事情常見做法是把業(yè)務(wù)切成五個域。第一是種植管理記錄地塊、作物類別、種植日期、生長周期和農(nóng)事操作施肥、澆水、病蟲害防治這是農(nóng)場的“生產(chǎn)線”。第二是農(nóng)資庫存種子、肥料、農(nóng)藥這些東西的出入庫和低庫存預(yù)警沒有這個模塊種植記錄就是無源之水。第三是農(nóng)產(chǎn)品銷售對應(yīng)熱搜詞里的“小程序商城”農(nóng)場種出來的東西要能展示、下單、生成訂單這是整個系統(tǒng)里最能出演示效果的部分。第四是公告通知農(nóng)場主發(fā)布采摘活動、天氣預(yù)警用戶在首頁能看到。第五是用戶與會員微信授權(quán)登錄后記錄用戶身份和訂單歷史。很多論文里會再加一個“溯源”模塊掃商品上的二維碼看到這批菜的種植記錄。這個功能演示效果好而且和種植模塊天然關(guān)聯(lián)強烈建議保留它能讓項目在答辯時的“技術(shù)含量”上一個臺階。2.2 數(shù)據(jù)模型先行的五個集合字段表與權(quán)限預(yù)設(shè)小程序端的農(nóng)場管理系統(tǒng)如果選擇微信云開發(fā)數(shù)據(jù)庫里每個業(yè)務(wù)域?qū)?yīng)一個集合。我一般建議先寫集合再寫頁面避免后續(xù)反復(fù)改字段。集合名用途關(guān)鍵字段權(quán)限建議users用戶信息openid, nickname, avatar, createdAt僅創(chuàng)建者可讀寫crops作物檔案name, category, plantDate, growthCycle, area, status所有用戶可讀僅管理端可寫materials農(nóng)資庫存name, stock, unit, lowStockLimit, updatedAt所有用戶可讀僅管理端可寫goods商城商品title, price, unit, stock, cover, traceCropId所有用戶可讀僅管理端可寫orders訂單orderNo, userId, goodsList, totalAmount, status, createdAt僅創(chuàng)建者可讀寫notices公告title, content, createdAt所有用戶可讀僅管理端可寫字段設(shè)計上有兩個容易被忽略的點。一是所有和時間相關(guān)的字段都用db.serverDate()寫入不要用本地時間戳因為云函數(shù)運行環(huán)境和用戶手機時區(qū)可能有偏差。二是traceCropId這種關(guān)聯(lián)字段要預(yù)留它把商城商品和種植記錄連起來后面做溯源頁面時直接查這個字段就夠了。關(guān)系上其實很簡單crops 一對多 notices 里的農(nóng)事記錄goods 一對一關(guān)聯(lián) cropsorders 內(nèi)嵌 goodsList 數(shù)組。論文里的 ER 圖就按照這個關(guān)系畫評審老師看了不會覺得你是硬湊的。2.3 論文章節(jié)和功能模塊的映射讓系統(tǒng)代碼變成論文章節(jié)寫論文最怕的是系統(tǒng)做完了文檔憋不出來。我的操作方式是反向?qū)φ彰繉懲暌粋€模塊立刻確認它對應(yīng)論文的哪個章節(jié)。系統(tǒng)模塊論文章節(jié)需要準備的素材五個業(yè)務(wù)域需求分析功能結(jié)構(gòu)圖、用例表集合字段設(shè)計數(shù)據(jù)庫設(shè)計E-R 圖、字段說明表登錄、商品、下單系統(tǒng)實現(xiàn)頁面截圖、核心代碼片段訂單流程測試系統(tǒng)測試測試用例表、結(jié)果截圖這樣論文不是最后兩周趕出來的而是跟著開發(fā)進度一起長出來的。尤其注意功能結(jié)構(gòu)圖里的每一個末端節(jié)點都要能在小程序里找到對應(yīng)頁面反過來小程序里的每個 tab 頁都不能是文檔里沒提過的“孤兒頁面”。3. 技術(shù)選型與項目骨架原生小程序加微信云開發(fā)是畢設(shè)性價比最高的組合3.1 原生 WXML vs uni-app按答辯場景選不按簡歷選很多人在選型階段糾結(jié)要不要用 uni-app畢竟熱搜詞里“uniapp 開發(fā) 微信小程序 vs android/ios/鴻蒙”熱度很高。我的建議是如果你的畢業(yè)設(shè)計場景只要求在微信端演示優(yōu)先選原生小程序開發(fā)。原因有三點。第一畢設(shè)答辯現(xiàn)場大概率只跑微信開發(fā)者工具評審老師關(guān)心的不是你能跨幾個端而是業(yè)務(wù)邏輯是否完整原生開發(fā)報錯信息更直觀踩坑資料最多。第二uni-app 在復(fù)雜組件上容易翻車比如自帶地圖組件在真機上的覆蓋層級問題排查起來比原生難得多。第三論文里寫“基于微信小程序原生框架開發(fā)”比寫“基于 uni-app 跨端框架”更不容易被追問答不上來。除非你簡歷上明確寫了前端崗位且時間充裕否則不建議這個階段給自己加跨端負擔(dān)。3.2 云開發(fā)省掉的四件事后端、數(shù)據(jù)庫服務(wù)器、域名、登錄態(tài)農(nóng)場管理系統(tǒng)復(fù)雜度不高如果按傳統(tǒng)方式你需要自己買一臺服務(wù)器裝數(shù)據(jù)庫寫后端接口配 HTTPS 域名做微信登錄的 session 管理。這一套下來至少兩周而且域名備案就可能等一個月。微信云開發(fā)把這些全包了云函數(shù)充當(dāng)后端邏輯云數(shù)據(jù)庫提供 NoSQL 存儲云存儲放圖片免域名、免備案。對畢設(shè)來說云開發(fā)免費額度足夠支撐演示和論文里的測試用例記錄。注意云開發(fā)環(huán)境里的函數(shù)運行在 Node.js 環(huán)境中可以直接使用wx-server-sdk操作數(shù)據(jù)庫這和我們平時寫導(dǎo)出的接口很不一樣少了一層 HTTP 請求的中間過程既是優(yōu)勢也是需要適應(yīng)的點。3.3 最小可跑項目骨架四個 tabBar 頁面和它們的分工一個農(nóng)場管理系統(tǒng)的演示閉環(huán)最少需要四個 tab 頁面。首頁展示農(nóng)場公告和作物概覽商城頁列出農(nóng)產(chǎn)品并支持跳轉(zhuǎn)詳情訂單頁展示當(dāng)前用戶的訂單列表我的頁面展示用戶登錄信息和功能入口。管理端的功能不必在 tabBar 里放在“我的”頁面里以列表項形式進入比如“農(nóng)資入庫”“訂單管理”這樣既能演示管理者視角又不會讓界面顯得臃腫。頁面路徑建議如下頁面路徑核心職責(zé)首頁pages/index/index公告輪播、作物種植概況商城pages/goods/index商品列表、商品詳情訂單pages/order/index訂單列表、下單入口我的pages/mine/index用戶信息、管理入口管理后臺pages/admin/index庫存、訂單、公告管理3.4 從注冊到跑通的最小啟動清單拿到題目后按下面順序操作半天就能看到一個小程序在模擬器里跑起來。提示整個過程中唯一需要一臺電腦和一部可以掃碼的手機其他設(shè)備都不是必須的。第一步訪問微信公眾平臺注冊一個小程序賬號賬號類型選“個人”即可拿到 AppID。第二步下載微信開發(fā)者工具安裝后選擇“小程序項目”填入 AppID選擇 JavaScript 基礎(chǔ)模板。第三步在開發(fā)者工具里點擊“云開發(fā)”按鈕開通環(huán)境環(huán)境名稱建議填farm-prod或類似名字。第四步在云開發(fā)控制臺里創(chuàng)建上一章說的六個集合字段先不用填集合創(chuàng)建好即可。第五步在項目根目錄下創(chuàng)建cloudfunctions文件夾并在project.config.json中指定該目錄。第六步右鍵cloudfunctions創(chuàng)建第一個云函數(shù)login初始化模板選“Node.js 云函數(shù)”然后右鍵“上傳并部署”。第七步在app.js里調(diào)用wx.cloud.init({ env: farm-prod, traceUser: true })。到這一步項目骨架已經(jīng)跑通。很多學(xué)生在這里就開始寫頁面我建議先停一下把下一章的登錄云函數(shù)寫好因為所有后續(xù)業(yè)務(wù)都要依賴用戶的 openid 身份。4. 跑通核心閉環(huán)從商品列表到下單云函數(shù)的完整代碼4.1 登錄云函數(shù)用 openid 建用戶身份不信任前端傳參微信小程序登錄的核心不是用戶輸入用戶名密碼而是通過微信身份體系拿到 openid。openid 是用戶在當(dāng)前小程序內(nèi)的唯一標識天然適合做用戶身份。云函數(shù)里通過cloud.getWXContext()獲取前端不需要傳任何身份信息。// cloudfunctions/login/index.js const cloud require(wx-server-sdk) cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db cloud.database() exports.main async (event, context) { const { OPENID } cloud.getWXContext() const users db.collection(users) const found await users.where({ openid: OPENID }).get() if (found.data.length 0) { await users.add({ data: { openid: OPENID, nickname: 農(nóng)場游客, createdAt: db.serverDate() } }) } return { openid: OPENID, isNew: found.data.length 0 } }DYNAMIC_CURRENT_ENV表示云函數(shù)運行在哪個環(huán)境里不必把環(huán)境 ID 硬編碼這樣部署和切換環(huán)境都方便。判斷found.data.length 0決定是否新用戶注冊首次登錄時寫入一條用戶記錄。注意這里我們只返回 openid不返回任何敏感的 session key。登錄成功后前端一般會把 openid 存入本地緩存方便后續(xù)請求直接使用。這里有一個常見的翻車點不要用 openid 作為登錄憑證傳給業(yè)務(wù)云函數(shù)驗權(quán)因為小程序包可以被反編譯別人可以偽造參數(shù)。正確做法是在需要身份的業(yè)務(wù)云函數(shù)里再調(diào)用一次cloud.getWXContext()獲取真實 openid這個我在第五章避坑里詳細說。4.2 商品列表頁一次集合查詢的三種寫法商品列表是最典型的讀場景。云開發(fā)數(shù)據(jù)庫在小程序端可以直接讀取也可以放在云函數(shù)里讀。兩種寫法都能跑通但語義不同。// pages/goods/index.js 小程序端直查 const db wx.cloud.database() Page({ data: { goods: [] }, async onLoad() { const res await db.collection(goods) .orderBy(createdAt, desc) .get() this.setData({ goods: res.data }) } })這段代碼能跑的前提是 goods 集合的權(quán)限設(shè)置為“所有用戶可讀”。小程序端直查適合簡單列表代碼量少便于演示時現(xiàn)場修改排序方式。但弊端是控制不了查詢的復(fù)雜度一旦需要關(guān)聯(lián)查詢或計算折扣價格直查就處理不了了。// cloudfunctions/getGoodsList/index.js const cloud require(wx-server-sdk) cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db cloud.database() exports.main async (event) { const { category, page 1, pageSize 10 } event const where {} if (category) where.category category const res await db.collection(goods) .where(where) .skip((page - 1) * pageSize) .limit(pageSize) .orderBy(createdAt, desc) .get() return { list: res.data } }云函數(shù)版本的查詢支持分頁和篩選。注意skip和limit的組合是云開發(fā)數(shù)據(jù)庫的標準分頁方式pageSize最大 100超出會報錯。這里的代價是每次查詢都要通過網(wǎng)絡(luò)調(diào)用云函數(shù)開發(fā)時調(diào)試比直查多一步但換來的是數(shù)據(jù)權(quán)限可控。我一般建議商品列表這種只讀數(shù)據(jù)用云函數(shù)查因為后續(xù)大概率要加“只顯示庫存大于 0 的商品”這類條件在云函數(shù)里改邏輯比改頁面里的查詢語句更靈活。4.3 下單接口庫存校驗必須放在云函數(shù)下單是整個系統(tǒng)里最容易翻車的場景原因在于庫存檢查和訂單寫入之間有時間差。如果小程序端先查庫存再寫訂單兩個用戶同時下單可能造成超賣。這個場景在校驗里是最典型的“事務(wù)一致性”問題評審老師也喜歡追問。// cloudfunctions/createOrder/index.js const cloud require(wx-server-sdk) cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db cloud.database() exports.main async (event) { const { OPENID } cloud.getWXContext() const { goodsId, quantity 1 } event try { const result await db.runTransaction(async transaction { const goodsRes await transaction.collection(goods).doc(goodsId).get() const goods goodsRes.data if (!goods || goods.stock quantity) { throw new Error(庫存不足) } await transaction.collection(goods).doc(goodsId).update({ data: { stock: goods.stock - quantity } }) const orderRes await transaction.collection(orders).add({ data: { orderNo: FM Date.now() Math.floor(Math.random() * 1000), userId: OPENID, goodsList: [{ goodsId, name: goods.name, price: goods.price, quantity }], totalAmount: goods.price * quantity, status: pending, createdAt: db.serverDate() } }) return orderRes._id }) return { success: true, orderId: result } } catch (err) { return { success: false, message: err.message } } }runTransaction是云開發(fā)數(shù)據(jù)庫提供的事務(wù)操作保證其中一個寫操作失敗時整個事務(wù)回滾。先查庫存、再扣庫存、最后寫訂單這三步放在同一個事務(wù)里從根源上避免超賣。注意transaction.collection(goods).doc(goodsId).get()在商品不存在時會直接拋異常捕獲后返回給前端“商品不存在”的提示。還有一個參數(shù)容易被忽略orderNo由時間戳加隨機數(shù)拼成這個字段要建成唯一索引避免重復(fù)訂單號。真機演示時如果訂單號重復(fù)會直接影響接下來的訂單列表展示。4.4 訂單列表與動態(tài)標題根據(jù)當(dāng)前農(nóng)場名設(shè)置導(dǎo)航欄標題訂單列表查詢的是當(dāng)前登錄用戶自己的數(shù)據(jù)所以必須在云函數(shù)里用 openid 過濾而不是前端傳 userId 查詢。// cloudfunctions/getMyOrders/index.js const cloud require(wx-server-sdk) cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db cloud.database() exports.main async (event) { const { OPENID } cloud.getWXContext() const res await db.collection(orders) .where({ userId: OPENID }) .orderBy(createdAt, desc) .get() return { list: res.data } }用戶在首頁進入不同農(nóng)場分區(qū)時導(dǎo)航欄標題應(yīng)該跟著變化。小程序里wx.setNavigationBarTitle可以把標題動態(tài)設(shè)置成當(dāng)前農(nóng)場的名稱。// 在頁面 onLoad 或 onShow 中調(diào)用 wx.setNavigationBarTitle({ title: 四季農(nóng)場 - (farmName || 首頁) })這里有個細節(jié)如果當(dāng)前頁面在小程序端被分享出去接收方打開時標題也會變成分享時的標題動態(tài)標題能讓用戶知道你來自哪個農(nóng)場這個小細節(jié)寫進論文的“頁面創(chuàng)新點”里可以加分。5. 畢設(shè)避坑六則從“開發(fā)版已過期”到蘋果虛擬支付攔截5.1 開發(fā)版小程序已過期請在開發(fā)者工具重新掃碼現(xiàn)象真機預(yù)覽小程序時手機端彈窗提示“開發(fā)版小程序已過期請在開發(fā)者工具重新掃碼”。原因開發(fā)版和體驗版的小程序授權(quán)登錄態(tài)有有效期通常在發(fā)布前一段時間后失效不是代碼寫錯了。解決在開發(fā)者工具里重新點擊“預(yù)覽”并掃碼如果問題依舊檢查工具里的“清緩存全部緩存”再重新編譯。這個提示出現(xiàn)的另一個前提是項目處于“開發(fā)版”而非“體驗版”畢設(shè)答辯當(dāng)天務(wù)必提前半小時用正式版或體驗版鏈接以防現(xiàn)場掃碼后失效。5.2 真機預(yù)覽時 request 報“不在合法域名列表”現(xiàn)象模擬器里接口通真機上所有請求報request:fail url not in domain list。原因小程序真機環(huán)境強制校驗 request 請求的域名必須是在小程序后臺配置過的合法域名而云開發(fā)不走這個限制。解決如果你只是本地調(diào)試在開發(fā)者工具右上角“詳情-本地設(shè)置-不校驗合法域名”打勾即可但如果接入了第三方位置服務(wù)或天氣接口必須到小程序后臺配置 request 合法域名。這個配置在畢設(shè)期間容易被忽略因為模擬器不報錯。5.3 數(shù)據(jù)庫權(quán)限默認值導(dǎo)致商品列表空白現(xiàn)象商品頁首次打開空白云函數(shù)查詢返回空數(shù)組。原因云開發(fā)集合的默認權(quán)限是“僅創(chuàng)建者可讀寫”這意味著其他用戶訪問時讀取不到任何記錄而管理端寫入的數(shù)據(jù)也無法被游客用戶查看。解決在云開發(fā)控制臺選中集合權(quán)限設(shè)置選擇“所有用戶可讀僅創(chuàng)建者可寫”或自定義安全規(guī)則只開放讀權(quán)限。上架的成品系統(tǒng)建議用自定義安全規(guī)則而不用內(nèi)置預(yù)設(shè)但畢設(shè)階段內(nèi)置預(yù)設(shè)足夠。5.4 蘋果 iOS 上虛擬支付被攔截農(nóng)資商城怎么處理現(xiàn)象iOS 真機上支付按鈕點擊無反應(yīng)或者無法拉起微信支付。原因小程序虛擬支付在 iOS 端受蘋果限制涉及虛擬商品會被微信支付直接攔下只允許線下實體商品。解決做農(nóng)場管理系統(tǒng)時銷售的是實體農(nóng)產(chǎn)品不涉及虛擬商品。但如果你加了“開會員看種植直播”這類功能就踩到紅線了。處理方法是把會員開通功能在 iOS 上隱藏只保留安卓版本顯示——這是一個簡單但不太好開口的妥協(xié)方案更穩(wěn)妥的做法是引導(dǎo)用戶通過小程序內(nèi)客服線下轉(zhuǎn)賬。5.5 小程序包可以被反編譯密鑰與邏輯別放前端現(xiàn)象有人拿到小程序分包后直接用反編譯工具還原出源碼在代碼里找到了數(shù)據(jù)庫操作密鑰。原因小程序前端代碼是明文包雖然上線前會壓縮混淆但核心邏輯仍可還原。解決凡是對敏感數(shù)據(jù)的讀寫都放在云函數(shù)里執(zhí)行前端只負責(zé)交互渲染。反編譯這個事不必恐慌但對安全要求較高的信息如管理員 openid 白名單、支付回調(diào)校驗等一律不要在前端出現(xiàn)。答辯時如果有人問安全性這也是一個可以展開講的點。5.6 用微信開發(fā)者工具抓包排查云函數(shù)請求異常現(xiàn)象云函數(shù)調(diào)用超時或者返回的數(shù)據(jù)不是預(yù)期結(jié)果打開控制臺看到的只有一串errCode: -1的報錯信息。原因云函數(shù)運行在 Node.js 環(huán)境里前端控制臺不一定能看到完整的日志堆棧。解決在開發(fā)者工具的“云開發(fā)”面板里打開云函數(shù)日志重點看cloud function exec error之后的輸出。如果你在云函數(shù)里用了第三方 HTTP 請求庫還要在函數(shù)內(nèi)手動打日志因為云函數(shù)默認不打印外部請求詳情。這個排查手段比盲改代碼有用得多也是熟手和剛?cè)腴T的人效率差別最大的地方。6. 論文收尾技巧三張圖、一張測試表、一個緩存時間設(shè)置論文正文收尾前必須先補齊四樣?xùn)|西功能結(jié)構(gòu)圖、ER 圖、時序圖、測試用例表。功能結(jié)構(gòu)圖用 draw.io 畫按“農(nóng)場管理系統(tǒng)——商城管理——商品列表/下單/訂單查詢”的層級展開確保每個末端節(jié)點都能在項目里找到頁面。ER 圖按 2.2 節(jié)的關(guān)系畫實體寫集合名屬性寫關(guān)鍵字段。時序圖畫下單流程用戶小程序端發(fā)起下單請求云函數(shù) createOrder 執(zhí)行事務(wù)事務(wù)內(nèi)查庫存、扣庫存、生成訂單返回訂單號。這張圖能把第四章的代碼邏輯可視化比任何文字描述都有說服力。測試用例表按這個格式列用例編號、測試內(nèi)容、輸入數(shù)據(jù)、預(yù)期結(jié)果、實際結(jié)果、是否通過。選擇三條核心用例即可商品瀏覽、庫存不足下單、訂單列表查詢。測試表的“實際結(jié)果”要貼真機或模擬器的截圖這比表格本身更重要。最后一個實用技巧是緩存時間的設(shè)置。微信小程序默認wx.setStorageSync寫入的緩存沒有過期時間導(dǎo)致用戶改完資料后舊數(shù)據(jù)殘留。給登錄態(tài)加一個過期判斷邏輯非常簡單// 寫入緩存時帶上時間戳 wx.setStorageSync(loginTime, Date.now()) // 讀取時校驗是否過期7 天有效期 const loginTime wx.getStorageSync(loginTime) const expired Date.now() - loginTime 7 * 24 * 60 * 60 * 1000 if (expired) { wx.removeStorageSync(loginTime) wx.reLaunch({ url: /pages/mine/index }) }這里的 7 天有效期寫死在代碼里答辯時可以改成從后端配置讀取。這是我做類似項目時經(jīng)常用到的小習(xí)慣它讓系統(tǒng)的狀態(tài)管理不那么“黑匣子”也減少了不少線上問題。農(nóng)場管理系統(tǒng)算是我?guī)н^最多的一類畢設(shè)題說不上多難但每一屆總有人在數(shù)據(jù)權(quán)限和事務(wù)上翻車。希望這些從選題到收尾的經(jīng)驗?zāi)軒偷侥阆M麕偷侥愕氖恰吧俨纫粋€坑多拿一分畢業(yè)”。本文還有配套的精品資源點擊獲取