日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

微信小程序校園失物招領(lǐng)系統(tǒng)實戰(zhàn):云開發(fā)與云函數(shù)核心設(shè)計

微信小程序校園失物招領(lǐng)系統(tǒng)實戰(zhàn):云開發(fā)與云函數(shù)核心設(shè)計 簡介面向正在準(zhǔn)備微信小程序畢業(yè)設(shè)計或課程設(shè)計的學(xué)生這份資源提供了一套完整的校園失物招領(lǐng)系統(tǒng)項目包含可直接閱讀的源碼工程、說明文檔和演示視頻。項目圍繞“設(shè)計與實現(xiàn)”展開覆蓋了從系統(tǒng)總體設(shè)計、數(shù)據(jù)庫設(shè)計到前端功能模塊落地的全過程具體涉及失物招領(lǐng)信息展示、論壇交流、公告管理、失物發(fā)布等核心頁面并配有系統(tǒng)測試的目的與測試方法說明有助于讀者理解小程序前后端交互及常規(guī)開發(fā)規(guī)范。目錄層次清晰可借鑒其中的界面布局與數(shù)據(jù)庫表設(shè)計思路。資料打包為rar格式大小約38.82MB內(nèi)含項目源碼、Word版設(shè)計文檔以及操作演示視頻方便對照文檔查看代碼結(jié)構(gòu)或按視頻復(fù)現(xiàn)運行效果。目前已有120人學(xué)習(xí)適合需要完整項目參考、快速梳理畢業(yè)設(shè)計框架的開發(fā)者。1. 基于微信小程序的校園失物招領(lǐng)系統(tǒng)比想象中更值得做的實戰(zhàn)項目校園失物招領(lǐng)這個場景絕大多數(shù)人的第一反應(yīng)是“太簡單了”。但真去接手一個基于微信小程序的校園失物招領(lǐng)系統(tǒng)你會發(fā)現(xiàn)它并不是「發(fā)布信息 展示列表」兩件事就能糊弄過去的。我見過太多人把精力花在頁面好不好看上結(jié)果栽在圖片上傳、狀態(tài)流轉(zhuǎn)、重復(fù)認(rèn)領(lǐng)這些看不見的環(huán)節(jié)上。這個項目真正的價值在于它把小程序端、云開發(fā)后端、數(shù)據(jù)庫權(quán)限、審核流程串成了一條完整鏈路是一個能講清楚“數(shù)據(jù)怎么流動”的練手項目。這個系統(tǒng)適合兩類人一類是正在做課程設(shè)計或畢業(yè)設(shè)計需要源碼和說明文檔來支撐答辯的學(xué)生另一類是剛接觸小程序開發(fā)想用業(yè)務(wù)閉環(huán)來驗證自己能力的從業(yè)者。它不追求高并發(fā)、不涉及復(fù)雜算法但云函數(shù)怎么寫、表結(jié)構(gòu)怎么拆、狀態(tài)機(jī)怎么設(shè)計這些經(jīng)驗和寫大項目是相通的。標(biāo)題里提到的源碼、說明文檔、演示視頻恰恰是把這個項目從“能跑”推向“能交付”的三件套缺一不可。2. 從需求到表結(jié)構(gòu)先把失物招領(lǐng)的業(yè)務(wù)閉環(huán)畫清楚2.1 業(yè)務(wù)閉環(huán)發(fā)布—匹配—認(rèn)領(lǐng)—核銷四個狀態(tài)缺一不可很多人做失物招領(lǐng)系統(tǒng)第一版只做兩張表一張存失物一張存招領(lǐng)用戶自己刷列表碰運氣。這樣做不是不能跑但離“系統(tǒng)”兩個字差得很遠(yuǎn)。真實的校園場景里丟東西的人希望快速找到撿到東西的人希望盡快脫手管理員希望減少無效溝通。這三方的訴求疊加起來業(yè)務(wù)至少要包含四個環(huán)節(jié)發(fā)布、匹配、認(rèn)領(lǐng)、核銷。發(fā)布環(huán)節(jié)要區(qū)分「尋物啟事」和「失物招領(lǐng)」兩種類型它們的瀏覽邏輯不同、認(rèn)領(lǐng)邏輯也不同。尋物啟事是失主主動描述物品特征等撿到的人聯(lián)系失物招領(lǐng)是拾主上傳物品照片等失主來認(rèn)領(lǐng)。匹配環(huán)節(jié)不能只靠人肉刷新至少要有按關(guān)鍵詞搜索和按分類篩選的能力。認(rèn)領(lǐng)環(huán)節(jié)是防冒領(lǐng)的關(guān)鍵不能誰點一下“我要認(rèn)領(lǐng)”就把東西拿走必須加一層描述核對或管理員審核。核銷環(huán)節(jié)則是把物品狀態(tài)從“待認(rèn)領(lǐng)”改成“已完成”同時記錄操作時間方便日后追溯。這四個環(huán)節(jié)落實在系統(tǒng)里就是一張狀態(tài)流轉(zhuǎn)圖發(fā)布1→ 匹配2→ 認(rèn)領(lǐng)3→ 核銷4。狀態(tài)不能只在代碼里用 if 判斷必須在數(shù)據(jù)庫里落一個字段比如status用整數(shù)表示0 為待處理、1 為已認(rèn)領(lǐng)待審核、2 為已核銷、3 為已下架。這樣后續(xù)做列表過濾、管理員統(tǒng)計、演示視頻里的流程展示都只需要查這一個字段。2.2 數(shù)據(jù)庫設(shè)計用戶表、物品表、認(rèn)領(lǐng)表、審核日志表的具體字段如果把系統(tǒng)做成微信云開發(fā)方案數(shù)據(jù)庫直接用云開發(fā)自帶的 JSON 文檔數(shù)據(jù)庫不需要自己搭 MySQL。這個選擇對畢設(shè)和課設(shè)尤其友好不用買服務(wù)器、不用配域名備案、天然支持微信登錄。但你依然需要像設(shè)計關(guān)系型數(shù)據(jù)庫一樣提前把集合表和字段定清楚否則寫到一半改數(shù)據(jù)結(jié)構(gòu)云函數(shù)里的查詢邏輯會跟著返工。我一般會拆四張核心集合。第一個是用戶集合users字段包括openid用戶唯一標(biāo)識云開發(fā)下建議直接用云函數(shù)獲取、nickName、avatarUrl、studentId學(xué)號選填、phone選填用于認(rèn)領(lǐng)聯(lián)系、createTime。注意openid不要暴露在小程序端直接寫入而是在云函數(shù)里用cloud.getWXContext().OPENID獲取這樣能防止用戶偽造身份。第二個是物品集合items也就是系統(tǒng)的核心數(shù)據(jù)。字段設(shè)計如下itemId我用_id自動生成、type1 尋物 / 2 招領(lǐng)、title物品名稱、category分類比如校園卡、錢包、耳機(jī)、書籍、description詳細(xì)描述這里要引導(dǎo)用戶寫特征為認(rèn)領(lǐng)核對做準(zhǔn)備、images數(shù)組存云存儲 fileID 列表、location丟失或拾得地點、time丟失或拾得時間、status狀態(tài)0 待處理 / 1 待審核 / 2 已完成 / 3 已下架、openid發(fā)布者、contact聯(lián)系方式、createTime。這里有一個容易被忽略的點time這個字段名在云開發(fā)里做排序時和前端傳入格式容易出歧義建議直接用happenTime表示丟失或拾得時間避免和createTime混淆。第三張是認(rèn)領(lǐng)集合claims記錄每一次認(rèn)領(lǐng)申請。字段有itemId、claimOpenid、description認(rèn)領(lǐng)者填寫的物品特征描述、status0 待審核 / 1 通過 / 2 拒絕、createTime、reviewTime。第四張是審核日志集合reviews記錄管理員的每一次操作字段包括itemId、actionpass / reject / finish、reviewerOpenid、remark、createTime。日志集合看起來多余但寫說明文檔時它是亮點答辯時也是交代“系統(tǒng)可追溯性”的抓手。如果你選擇自建后端路線用 MySQL 的話四張表對應(yīng)關(guān)系不變只是把集合名換成表名把 JSON 字段換成 SQL 字段。下面給一份 MySQL 版的核心建表腳本便于對照CREATE TABLE items ( id INT PRIMARY KEY AUTO_INCREMENT, type TINYINT NOT NULL COMMENT 1招領(lǐng) 2尋物, title VARCHAR(100) NOT NULL, category VARCHAR(50) DEFAULT , description TEXT, images JSON COMMENT 圖片URL數(shù)組, location VARCHAR(100), happen_time DATETIME, status TINYINT DEFAULT 0 COMMENT 0待處理 1待審核 2已完成 3已下架, openid VARCHAR(64) NOT NULL, contact VARCHAR(100), create_time DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; CREATE TABLE claims ( id INT PRIMARY KEY AUTO_INCREMENT, item_id INT NOT NULL, openid VARCHAR(64) NOT NULL, description TEXT, status TINYINT DEFAULT 0 COMMENT 0待審核 1通過 2拒絕, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, review_time DATETIME DEFAULT NULL ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;images字段用 JSON 類型存儲能省掉一張附件表這是多數(shù)人實踐后的常見做法。用 utf8mb4 是為了兼容用戶輸入的生僻字和 Emoji微信昵稱里常有特殊字符這個坑在聯(lián)調(diào)時才會暴露。建表后記得給items.status和items.openid加索引列表查詢和我的發(fā)布頁都用得到。2.3 圖片存儲選型為什么優(yōu)先用微信云存儲而不是自建文件服務(wù)器校園失物招領(lǐng)系統(tǒng)的圖片存儲是很多初學(xué)者第一道坎。有人圖省事把圖片轉(zhuǎn)成 base64 直接存數(shù)據(jù)庫結(jié)果列表頁渲染卡到懷疑人生有人堅持自建 Nginx FastDFS折騰兩天還沒把上傳接口調(diào)通。對這個項目體量來說微信云開發(fā)的云存儲是最務(wù)實的方案。云存儲的優(yōu)點在于第一和云函數(shù)、云數(shù)據(jù)庫同屬一套環(huán)境前端直接調(diào)用wx.cloud.uploadFile就能把圖片傳上去返回一個 fileID第二fileID 可以直接在小程序端用image組件的src屬性渲染不需要額外做鑒權(quán)云開發(fā)會自動處理第三不用考慮圖片服務(wù)器的帶寬和磁盤擴(kuò)容問題。你唯一要做的是在云開發(fā)控制臺里給云存儲設(shè)置一個合理的權(quán)限。默認(rèn)權(quán)限建議改成「僅創(chuàng)建者可讀寫」因為失物招領(lǐng)的圖片會包含個人物品信息如果允許所有人讀數(shù)據(jù)庫里存了 fileID 就等于所有人能看圖片不合適。自建文件服務(wù)器倒也不是不行但你要額外處理跨域CORS、防盜鏈、HTTPS 證書、圖片壓縮這四件事每一件都能消耗兩三天而且和微信小程序的對接還得走業(yè)務(wù)域名配置。標(biāo)題給的定位是「源碼 說明文檔 演示視頻」說明這是一個以交付為導(dǎo)向的項目云存儲能把交付周期從三周壓到一周。核心權(quán)衡點在表里對比維度微信云存儲自建 Nginx / FastDFS部署成本零部署開通即用需要服務(wù)器配 Nginx 和上傳接口權(quán)限控制控制臺配置按 openid 粒度需要自己寫鑒權(quán)邏輯小程序鑒權(quán)fileID 直接渲染需配域名 HTTPS處理防盜鏈適合場景畢設(shè)、課設(shè)、原型驗證有現(xiàn)成服務(wù)器和運維能力的場景3. 小程序端三個必寫頁面發(fā)布頁、列表頁、詳情認(rèn)領(lǐng)頁3.1 發(fā)布頁圖片上傳的坑與 wx.chooseMedia 參數(shù)配置發(fā)布頁是用戶接觸系統(tǒng)的第一個入口也是代碼里最容易出問題的頁面。核心功能就兩個填物品信息、上傳圖片。圖片上傳的官方接口是wx.chooseMedia它替代了舊版的wx.chooseImage。很多人寫到這里只配了count和mediaType就完事結(jié)果真機(jī)上一選相冊就白屏原因多半是sourceType或sizeType沒配對。// pages/publish/publish.js Page({ data: { imageList: [], type: 1, // 默認(rèn)選擇失物招領(lǐng)1招領(lǐng) 2尋物 title: , description: }, // 選擇圖片 chooseImages() { wx.chooseMedia({ count: 3 - this.data.imageList.length, // 最多3張減去已選數(shù)量 mediaType: [image], sourceType: [album, camera], sizeType: [compressed], // 強(qiáng)制壓縮避免原圖過大上傳失敗 success: (res) { const selected res.tempFiles.map(file file.tempFilePath); this.setData({ imageList: this.data.imageList.concat(selected) }); } }); }, // 上傳圖片到云存儲返回 fileID 數(shù)組 async uploadImages() { const promises this.data.imageList.map((filePath, index) { const cloudPath lost/${Date.now()}-${index}-${Math.random().toString(36).slice(-6)}.jpg; return wx.cloud.uploadFile({ cloudPath, filePath }).then(res res.fileID); }); return Promise.all(promises); } });這段代碼里的sizeType: [compressed]是關(guān)鍵。校園用戶用手機(jī)拍失物照片原圖可能是 3MB 以上的大圖直接上傳到云存儲會慢、偶爾還會超時失敗。壓縮后一般 200KB 以內(nèi)上傳速度可以接受列表頁渲染也更流暢。cloudPath里拼了時間戳和隨機(jī)字符串是為了避免同一用戶反復(fù)上傳時文件名沖突——云存儲的cloudPath如果重復(fù)后傳的文件會覆蓋先傳的這個坑我就踩過。上傳后的 fileID 不要直接放到items集合里要先調(diào)用云函數(shù)寫入數(shù)據(jù)庫。這樣做的原因是前端直接把數(shù)據(jù)寫到數(shù)據(jù)庫繞過了云函數(shù)的權(quán)限校驗用戶可以把status改成任意值等于給自己開了后門。正確姿勢是前端收集表單數(shù)據(jù)后調(diào)wx.cloud.callFunction({ name: publishItem, data: {...} })由云函數(shù)統(tǒng)一校驗入?yún)⒉懭霐?shù)據(jù)庫。版權(quán)聲明可以不放但代碼里一定要保留入?yún)⑿r灪蚾penid獲取的邏輯。3.2 列表頁下拉刷新與觸底分頁的經(jīng)典寫法列表頁是失物招領(lǐng)系統(tǒng)的門面它的表現(xiàn)直接決定用戶留不留。技術(shù)上要處理的就兩件事分頁加載和下拉刷新。很多人第一次寫云開發(fā)數(shù)據(jù)庫查詢習(xí)慣直接db.collection(items).get()一把梭結(jié)果數(shù)據(jù)量過了幾百條就變慢。云開發(fā)的默認(rèn)限制是一次最多返回 20 條不是 100 條導(dǎo)致后面數(shù)據(jù)永遠(yuǎn)加載不出來。正確做法是配合skip和limit實現(xiàn)分頁再利用小程序原生的onPullDownRefresh和onReachBottom兩個生命周期處理刷新和加載更多。// pages/index/index.js Page({ data: { items: [], page: 0, pageSize: 10, hasMore: true, keyword: }, async loadItems(reset false) { if (reset) { this.setData({ page: 0, items: [], hasMore: true }); } if (!this.data.hasMore) return; const db wx.cloud.database(); const { page, pageSize, keyword } this.data; // 關(guān)鍵詞搜索正則模糊匹配標(biāo)題 const where { status: db.command.neq(3) // 排除已下架 }; if (keyword) { where.title db.RegExp({ regexp: keyword, options: i }); } const res await db.collection(items) .where(where) .orderBy(createTime, desc) .skip(page * pageSize) .limit(pageSize) .get(); const newItems reset ? res.data : this.data.items.concat(res.data); this.setData({ items: newItems, page: page 1, hasMore: res.data.length pageSize }); }, onPullDownRefresh() { this.loadItems(true).then(() wx.stopPullDownRefresh()); }, onReachBottom() { this.loadItems(); } });注意page的自增時機(jī)是在拿到數(shù)據(jù)之后不是請求之前否則失敗重試時會跳過一頁導(dǎo)致數(shù)據(jù)漏掉。db.RegExp是云開發(fā)端提供的正則查詢方式做標(biāo)題模糊搜索夠用但不要用它做description字段的匹配——正則查詢不支持索引數(shù)據(jù)量大時會有性能問題。status: db.command.neq(3)這個寫法只在items集合上生效如果你用的是 MySQL 后端等價寫法是SELECT ... WHERE status ! 3。這里能看出來云開發(fā)數(shù)據(jù)庫的查詢 API 學(xué)習(xí)成本不高但一些邊界條件比如neq是db.command下的方法容易記混。下拉刷新還有一個容易被忽略的點app.json里要開啟enablePullDownRefresh: true并且建議在window配置里設(shè)backgroundTextStyle: dark否則 iOS 下拉刷新的轉(zhuǎn)圈是白色的白底上看不見用戶會以為刷新功能壞了。3.3 詳情頁與認(rèn)領(lǐng)流程用狀態(tài)機(jī)驅(qū)動按鈕渲染詳情頁是認(rèn)領(lǐng)流程的核心載體。一張物品卡片上有發(fā)布者信息、物品描述、圖片、聯(lián)系方式和操作按鈕。按鈕怎么渲染不能寫死得根據(jù)當(dāng)前用戶和物品狀態(tài)動態(tài)計算。比如物品是自己的顯示“刪除”和“標(biāo)記已完成”物品是別人的且狀態(tài)為待處理顯示“申請認(rèn)領(lǐng)”已經(jīng)提交過認(rèn)領(lǐng)申請顯示“審核中”。這種多分支渲染最清晰的做法是先梳理狀態(tài)矩陣再寫wx:if。// pages/detail/detail.js Page({ data: { item: null, claimStatus: -1, // -1 未申請0 待審核1 已通過2 已拒絕 isOwner: false }, // 計算按鈕狀態(tài) buildActions() { const { item, claimStatus, isOwner } this.data; const actions []; if (isOwner) { if (item.status 0 || item.status 1) { actions.push({ key: finish, text: 標(biāo)記已完成 }); } if (item.status ! 2) { actions.push({ key: remove, text: 下架物品 }); } } else if (item.status 0) { if (claimStatus -1) { actions.push({ key: claim, text: 申請認(rèn)領(lǐng) }); } else if (claimStatus 0) { actions.push({ key: pending, text: 審核中, disabled: true }); } else if (claimStatus 1) { actions.push({ key: contact, text: 聯(lián)系發(fā)布者 }); } else { actions.push({ key: claim, text: 重新申請 }); } } this.setData({ actions }); } });claimStatus是查claims集合得到的當(dāng)前用戶對這個物品的申請狀態(tài)。這里有一個先后順序問題必須等item和claimStatus都拿到后再渲染按鈕否則用戶會看到按鈕閃爍一下體驗很糟。常見的做法是在onLoad里并行發(fā)起兩個請求用Promise.all聚合后再調(diào)buildActions()。認(rèn)領(lǐng)申請的動作要在云函數(shù)里完成前端不能直接寫claims集合。云函數(shù)至少要做三件事檢查物品狀態(tài)是否為 0防止已完成的物品被重復(fù)申請檢查該用戶是否已申請過防止重復(fù)提交寫入認(rèn)領(lǐng)記錄并將物品狀態(tài)改為 1待審核。這三步在云函數(shù)里按順序執(zhí)行即使前端被用戶反復(fù)點擊也能通過數(shù)據(jù)庫的狀態(tài)約束擋住。4. 后端接口與核心邏輯云函數(shù)怎么寫才不返工4.1 云函數(shù)和自建后端的取舍數(shù)據(jù)權(quán)限與調(diào)用成本微信云開發(fā)模式下后端邏輯主要寫在云函數(shù)里。一個云函數(shù)對應(yīng)一個exports.main入口相當(dāng)于一個 HTTP 接口。和傳統(tǒng)自建后端比云函數(shù)最大的特點是不需要關(guān)心服務(wù)器但代價是冷啟動延遲和調(diào)用次數(shù)限制。對失物招領(lǐng)這種低頻業(yè)務(wù)冷啟動幾乎無感免費額度也足夠。真正影響選型的是數(shù)據(jù)權(quán)限。云開發(fā)數(shù)據(jù)庫有三種權(quán)限設(shè)置僅創(chuàng)建者可讀寫、所有用戶可讀僅創(chuàng)建者可寫、所有用戶可讀寫。失物招領(lǐng)系統(tǒng)里items集合建議用「所有用戶可讀僅創(chuàng)建者可寫」。因為列表頁和詳情頁的查詢是高頻操作如果都走云函數(shù)每次都調(diào)用一次云函數(shù)不僅慢還會消耗云函數(shù)調(diào)用次數(shù)。但claims集合必須收緊權(quán)限認(rèn)領(lǐng)記錄屬于敏感數(shù)據(jù)不能讓所有用戶讀。你需要保證“讀公開數(shù)據(jù)走數(shù)據(jù)庫直連寫數(shù)據(jù)走云函數(shù)校驗”。這是一個混合策略也是大多數(shù)線上小程序的實際寫法。自建后端則是把所有讀寫都收口到自己的接口。優(yōu)點是邏輯看得見摸得著調(diào)試手段更豐富缺點是要處理登錄態(tài)校驗、用戶身份識別。微信小程序要自建后端通常流程是wx.login拿 code后端用 code 換 openid然后簽發(fā)自定義 token。這套流程在畢業(yè)設(shè)計里也能做但涉及 HTTPS 證書、code2session 接口調(diào)用工作量直接翻倍。如果不是為了練習(xí) Java 或 Node 后端云函數(shù)是更劃算的選擇。4.2 關(guān)鍵詞匹配與模糊查找讓用戶快速找到物品的查詢寫法失物招領(lǐng)信息一多光靠列表滾動沒法用必須做搜索。搜索的核心是關(guān)鍵詞匹配用戶輸入的物品名稱。微信云開發(fā)數(shù)據(jù)庫支持db.RegExp可以用正則表達(dá)式做模糊匹配。但要注意正則匹配在數(shù)據(jù)量超過幾千條后性能會明顯下降所以搜索條件里要配合其他篩選條件一起用比如加上status過濾和category分類。下面這個云函數(shù)實現(xiàn)了掃碼式搜索接收keyword先按標(biāo)題模糊匹配標(biāo)題匹配不到再用description做全文匹配。兩個查詢并行發(fā)起結(jié)果合并去重后返回。去重邏輯用itemId做 map 的鍵一勞永逸避免重復(fù)。// cloudfunctions/searchItems/index.js const cloud require(wx-server-sdk); cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }); const db cloud.database(); const _ db.command; exports.main async (event) { const { keyword , category , page 0, pageSize 10 } event; const reg db.RegExp({ regexp: keyword, options: i }); try { // 并行查標(biāo)題和描述減少響應(yīng)時間 const [titleRes, descRes] await Promise.all([ db.collection(items) .where({ title: reg, status: _.neq(3), ...(category ? { category } : {}) }) .limit(pageSize) .get(), db.collection(items) .where({ description: reg, status: _.neq(3), ...(category ? { category } : {}) }) .limit(pageSize) .get() ]); // 合并去重 const map new Map(); [...titleRes.data, ...descRes.data].forEach(item { if (!map.has(item._id)) { map.set(item._id, { ...item, matchField: item.title.match(reg) ? title : description }); } }); return { ok: true, data: Array.from(map.values()).slice(0, pageSize), count: map.size }; } catch (err) { return { ok: false, message: err.message }; } };Promise.all在這里的意義不是炫技而是把兩次串行查詢變成并行省一半時間。matchField字段用于前端展示時高亮匹配位置雖然高亮不是必須的但說明文檔里寫清楚“搜索結(jié)果可識別匹配字段”答辯時能體現(xiàn)設(shè)計的完整性。db.RegExp的對象不能直接展開到擴(kuò)展運算符里必須嵌套在where條件內(nèi)否則查詢不會生效。這一點卡過不少人。4.3 認(rèn)領(lǐng)核銷與防冒領(lǐng)用狀態(tài)流轉(zhuǎn)和操作日志兜底認(rèn)領(lǐng)流程是失物招領(lǐng)系統(tǒng)的核心也是最容易被簡化處理的部分。簡化版的實現(xiàn)是用戶在詳情頁點“認(rèn)領(lǐng)”把items.status改成 2已完成然后完事。這個流程在演示視頻里看起來很流暢但實際使用時任何人都能點一下就把別人的東西“領(lǐng)走”冒領(lǐng)問題無法避免。我在實際項目中用的方案是“描述核對 管理員審核”雙保險。用戶在詳情頁填一段描述說明物品的特征細(xì)節(jié)比如校園卡上的姓名拼音、錢包的顏色和品牌。云函數(shù)收到后把這條記錄寫入claims集合同時把items.status改為 1待審核。發(fā)布者在“我的發(fā)布”里看到待審核狀態(tài)后能查看認(rèn)領(lǐng)者填寫的描述對照自己的物品特征決定通過或拒絕。如果發(fā)布者沒空處理管理員也能在管理端介入。這套流程用云函數(shù)實現(xiàn)時關(guān)鍵在于對并發(fā)提交的防護(hù)。用戶連續(xù)點擊兩次“申請認(rèn)領(lǐng)”可能產(chǎn)生兩條認(rèn)領(lǐng)記錄導(dǎo)致物品狀態(tài)錯亂。解決方法是云函數(shù)內(nèi)部用事務(wù)。云開發(fā)支持db.runTransaction是處理分布式事務(wù)的推薦方式能在并發(fā)場景下保證數(shù)據(jù)一致性。下面是我常用的原子化認(rèn)領(lǐng)寫法// cloudfunctions/claimItem/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 { itemId, description } event; try { return await db.runTransaction(async transaction { const item await transaction.collection(items).doc(itemId).get(); // 雙重校驗物品必須存在且狀態(tài)為 0 if (!item.data || item.data.status ! 0) { return { ok: false, message: 物品不存在或已被認(rèn)領(lǐng) }; } // 校驗用戶是否重復(fù)申請 const claim await transaction.collection(claims) .where({ itemId, openid: OPENID, status: _.neq(2) }) .get(); if (claim.data.length 0) { return { ok: false, message: 請勿重復(fù)申請 }; } // 寫入認(rèn)領(lǐng)記錄并更新物品狀態(tài) await transaction.collection(claims).add({ data: { itemId, openid: OPENID, description: description || , status: 0, createTime: db.serverDate() } }); await transaction.collection(items).doc(itemId).update({ data: { status: 1 } }); return { ok: true, message: 認(rèn)領(lǐng)申請?zhí)峤怀晒?}; }); } catch (err) { return { ok: false, message: err.message }; } };runTransaction的寫法和普通云函數(shù)明顯不同它把所有操作放在transaction對象上執(zhí)行。如果中途任一步出錯事務(wù)會自動回滾不會出現(xiàn)“認(rèn)領(lǐng)記錄寫入了但物品狀態(tài)還是待認(rèn)領(lǐng)”這種臟數(shù)據(jù)。事務(wù)內(nèi)的get是讀取當(dāng)前版本的數(shù)據(jù)能避免兩個人同時提交時都通過了status ! 0的判斷。這段代碼是說明文檔里最好的素材也是答辯時“系統(tǒng)設(shè)計考慮了并發(fā)安全”的有力證據(jù)。5. 避坑合集圖片、緩存、狀態(tài)不同步的五個經(jīng)典踩坑記錄5.1 圖片上傳失敗錯誤碼卻是 success現(xiàn)象wx.chooseMedia回調(diào)顯示成功uploadFile也返回了fileID但詳情頁圖片加載不出來控制臺報 404。這個問題的隱蔽之處在于失敗不是上傳環(huán)節(jié)而是cloudPath包含了中文或特殊字符。某些版本的云存儲對中文路徑處理不友好會靜默失敗或返回一個無法訪問的 fileID。解決cloudPath只用字母、數(shù)字、橫杠和點。我建議用time random ext的格式擴(kuò)展名從filePath里取不要寫死.jpg因為用戶可能拍的是 png 或 heic 格式。另外注意wx.uploadFile一次只能傳一個文件如果選擇多圖必須用Promise.all并發(fā)上傳但并發(fā)數(shù)不要超過 3。超過 3 個文件同時上傳部分手機(jī)在弱網(wǎng)環(huán)境下會超時表現(xiàn)是“上傳了但列表里少圖”。處理辦法是失敗重試重試次數(shù)控制在 2 次以內(nèi)同時給用戶提示“圖片上傳失敗請檢查網(wǎng)絡(luò)”。5.2 列表頁滑動快了會跳數(shù)據(jù)現(xiàn)象快速下拉或連續(xù)觸底時頁面出現(xiàn)重復(fù)的卡片或者幾個列表項消失。原因分頁用的是page計數(shù)但每次觸底時page的遞增發(fā)生在異步請求返回之后用戶快速滾動時會發(fā)出多次請求多個請求的skip參數(shù)相同自然返回同一批數(shù)據(jù)。解決在data里加一個isLoading鎖請求開始時置為true請求結(jié)束后置為falseonReachBottom里先判斷鎖鎖開著就直接return。這是列表分頁的常備武器任何小程序項目都適用。5.3 認(rèn)領(lǐng)狀態(tài)前端一直不刷新現(xiàn)象用戶在詳情頁提交認(rèn)領(lǐng)返回后再次進(jìn)入詳情頁按鈕還是“申請認(rèn)領(lǐng)”沒有變成“審核中”。原因詳情頁的onLoad只會在頁面首次加載時執(zhí)行從詳情頁返回列表頁再進(jìn)入頁面實例被緩存onLoad不再觸發(fā)。這是小程序經(jīng)典的“頁面棧緩存”問題。解決把狀態(tài)查詢邏輯從onLoad挪到onShow中這樣每次頁面顯示時都會重新拉取claimStatus。代價是多一次請求但對低頻的詳情頁來說完全可以接受。5.4 演示視頻里最容易翻車的初始化數(shù)據(jù)太隨意現(xiàn)象演示視頻錄到一半發(fā)現(xiàn)列表頁沒有數(shù)據(jù)或者在“認(rèn)領(lǐng)”環(huán)節(jié)查不到已經(jīng)發(fā)布的物品。這個翻車多數(shù)不是程序 bug而是演示前沒有準(zhǔn)備演示數(shù)據(jù)。數(shù)據(jù)庫里空蕩蕩功能再完整也顯得空洞。解決寫一個初始化云函數(shù)一次性插入 1015 條模擬數(shù)據(jù)覆蓋不同狀態(tài)待處理、待審核、已完成和不同分類。模擬數(shù)據(jù)的createTime要錯開比如最近一小時幾條、最近一天幾條、最近一周幾條這樣列表頁下拉刷新和分頁都有內(nèi)容可展示。視頻錄制前先跑一遍初始化腳本比現(xiàn)場造數(shù)據(jù)穩(wěn)妥得多。5.5 管理員審核并發(fā)點擊狀態(tài)記錄錯亂現(xiàn)象管理端同時打開多個詳情頁對同一條物品的認(rèn)領(lǐng)申請連續(xù)做“通過”操作最后物品狀態(tài)變成了“已完成”但認(rèn)領(lǐng)記錄卻有兩條通過。原因管理端的審核邏輯如果寫在頁面里直接調(diào)數(shù)據(jù)庫就沒有事務(wù)保護(hù)的。并發(fā)環(huán)境下兩個請求都讀到了“待審核”狀態(tài)都執(zhí)行了通過操作。解決參考 4.3 的事務(wù)寫法把審核動作也收口到云函數(shù)。審核云函數(shù)里用transaction讀取認(rèn)領(lǐng)記錄和物品狀態(tài)先判斷claim.status 0再更新從根上杜絕重復(fù)審核。管理后臺的代碼量不大但這一步不能省。6. 演示視頻與說明文檔的落地技巧讓交付物真正為你加分源碼、說明文檔、演示視頻三件套里演示視頻是最容易被忽視的。很多人臨近答辯才拿手機(jī)對著屏幕隨手一錄開頭卡頓、中間翻車、結(jié)尾黑屏功能再全也抵不過觀感差。我的習(xí)慣是先寫視頻腳本再錄內(nèi)容最后做剪輯。腳本按功能模塊劃分每個模塊控制在 3045 秒全片不超過 5 分鐘。開場 10 秒展示小程序首頁列表和下拉刷新接著演示發(fā)布流程上傳圖片和填寫表單然后是搜索功能輸入一個關(guān)鍵詞看結(jié)果高亮第三段演示認(rèn)領(lǐng)閉環(huán)——提交申請、管理員審核、狀態(tài)變?yōu)橐淹瓿?。每一段前加一個字幕條說明當(dāng)前演示的功能點觀看者不用猜你在干什么。錄制時注意三個階段的數(shù)據(jù)準(zhǔn)備第一階段列表有 5 條未處理的信息第二階段新增一條尋物圖片清晰第三階段用兩個微信號配合一個發(fā)招領(lǐng)另一個申請認(rèn)領(lǐng)模擬真實用戶互動。如果只有一個微信號就通過云開發(fā)控制臺直接修改數(shù)據(jù)庫里claims的status字段來展示審核效果管理員審核頁面的操作仍然走真實界面。這個“半真半假”的錄法在演示視頻里是常見做法功能是真的只是狀態(tài)靠后臺配合。說明文檔的重點放在系統(tǒng)架構(gòu)圖、數(shù)據(jù)庫設(shè)計、核心流程時序圖這三塊不用追求大而全的八股文。架構(gòu)圖里把小程序端、云函數(shù)、云數(shù)據(jù)庫、云存儲四層畫清楚標(biāo)注每個請求的路徑前端通過wx.cloud.callFunction調(diào)用云函數(shù)云函數(shù)操作數(shù)據(jù)庫和存儲。數(shù)據(jù)庫設(shè)計部分放表格列出每張集合的字段、類型、含義。核心流程時序圖畫“發(fā)布→搜索→認(rèn)領(lǐng)→審核→核銷”的完整鏈路一個圖頂過千字描述。文檔寫完以后把 3.3 的狀態(tài)矩陣和 4.3 的事務(wù)代碼單獨摘出來放在附錄里這兩個細(xì)節(jié)能給文檔的深度拉高一個檔次。開源或交付源碼時記得清理app.js里你的env環(huán)境 ID替換成占位符your-env-id并告訴接收者在哪里配置。很多源碼交付出去跑不起來九成是環(huán)境 ID 還是原作者的用戶自己的云環(huán)境根本沒有那個 ID 對應(yīng)的集合。把初始化腳本、云函數(shù)目錄結(jié)構(gòu)、環(huán)境配置三步寫進(jìn) README 的第一屏比寫什么“項目介紹”都實用。這也是我交付過幾套源碼后的血淚經(jīng)驗代碼能不能跑往往不取決于代碼本身而取決于接收者能否在五分鐘內(nèi)完成環(huán)境配置。希望這些經(jīng)驗?zāi)軒湍阍诮桓逗痛疝q時少走彎路祝你順利跑通整套流程。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产精品一级特黄aaa大片在线观看| 自拍偷拍草一草| 久久久久久十| 久久骚| 日本超碰97日韩精品人妻| 天天干天天日天天射黄色| 人人干人人操人人..com| 日韩人妻制服丝袜av| 日本一道在线播放高清| 理论久久婷婷网8| 偷拍导航视频网站| 欧美综合网A| 国产av色网| 日本不卡中文| 成人欧美日超碰| 国产精品熟妇一区二区三| 91黑丝操| 日本影视久久免费| 亚洲成av人片色午夜乱码| 天天干2019| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 91色噜噜狠狠| 精品人妻一区二区三区日产| 91天堂色男人的天堂| 精爱久久| 欧美日韩*字幕一区| 中文字幕精品资源在线| 免费超碰97久久| 亚洲欧美色图| A久久| 国产夫妻一区二区| 天天色欧美| 亚洲精品乱码线路中文字幕| 天综合网| 亚洲日产专区婷婷| 嫩草美女久久| 九九热九九| 91美女在线视频| 性91| 婷婷五月天av| 国产白丝网站| 97精品综合| 日韩中文字幕宗合在线| 在线免费观看日韩一区| 中文字幕天天操| 五月天人妻综合| TS人妖另类精品视频系列| 99久久综合网| 一本一道久久综合久久| 在线可观看的黄色网址| 久久综合久色欧美综合狠狠| 久久久久久久亚洲Av无码| 色五月第四色| 在线看片国产精品每日更新| 一卡二卡在线播放| 欧美专利1区2区3区4区5区免费| 成人性交免费视屏| 日韩中字av一区| 超碰97色| 成人日本片久久久蜜桃| 日本超碰在线国产一区| 97啪啪| 国产馆极品诱惑| 日本www操操操| 精品性爱久久视频| 九九热视频在线观看| 台湾佬大香蕉| 99在线观看无大码| 深夜激情无码| 日韩免费中文字幕视频| 欧美综合网1| 我爱大香蕉| 色97综合中文字幕| 久久婷婷伊人| 一二三区精品视频| 精品9区| 久久女婷| 日本午夜福利影院| 亚洲精品三区在线观看| 啊啊啊水好多| 99re在线视频| 男人久久精品| 不卡啪啪视频| 99精品视频在线观看免费| 97视频免费播放| 色香在线| 国产精品熟女九九九| 99操逼| 国产亚洲精品A在线观看下载| 91色黑人少妇| 九九玖玖精品| 怡红院久久老司机| 性九九九九九九| 国产精品久久发布| 91|九色|国产熟女| 国产无码一二三区| 久操网无码在线| 无码久久亚洲高清,| 亚洲色综合| 91中文精品日韩欧美在线| 天天干,天天日| 无码精品一区二区三区潘金莲| 97AV在线观看| 欧美精品久久96人妻无码| 欧美另类丝袜熟女| 午夜操一视频一区| 亚洲蜜臀视频精品久久| 亚洲色图 图片| 亚洲色图国产另类| 亚洲AO在线| 久久草草欧美精品| 男同专区一区二区三区在线| a人片中文字幕一区二区| 精品一区96| 日本三级久| 97久精品| 超碰天天操| 中文字幕诱惑制服人妻丝袜美丝袜美| 蜜桃精品视频一区| 久久亚洲天堂| 日日摸天天爽夜夜欢| 亚洲色人| 成人免费毛片| 亚欧成人综合影院| 偷看洗澡一二三区美女| 25国产精品免费观看| 久操99| 91丝袜激情在线| 中国黑人三级片网站上区| 九九九久千久久激情蜜桃在线看 | 久久久免费一级黄片| 囯产操逼片| 激情五月综合| 欧美成人综合| 亚洲欧美情色| 日本精品网站在线中文| 国产呦精品一区二区三区下载| 国内毛片国产专区二| 91丨九色丨大屁股| 中文在线久久字幕| 91丝袜在线播放| 操操逼视频| 91GD.COM| 国产精品丝袜久久亚洲不卡| 午夜舔阴达高潮视频免费看| 伊人五月天激情| 亚洲av无码成人精品国产| 国产白嫩精品久久| 可乐操在线| 午夜性刺激视频免费观看| 99www.bibizy香蕉资源国产一区二区三区高清 | 日韩综合97p| 富女玩鸭子一级毛片| 亚洲成人久久一区二区| 97chaopengongkai| 免费av大片| 9久综合网| yy少妇精品久久| 亚洲国产综合图区中文字幕 | 97 九色| 久久精品国产亚洲AV先锋| 天天躁日日躁XXXXYY| 精品人妻一区二区免费蜜桃| 美女黄码视频午夜| 亚洲AV秘无码一区..| 色97| 伊人热综合| 免费看毛片操穴| 国产外初女出血视频| 国产曰批免费观看久久久| 日本有码影片下载| 亚洲国产成人7777| 精品97久久综合| 尤物视频视频官网| 牛牛久久国产精品视频一二三| a亚洲欧美色欲| 精品网站9999| 熟妇的味道HD中文字幕| 色天天野狼综合社区| 九色精品视频导航1| 日本一天色道久久久精品视频| 国产一国产一级毛片古装| 欧美夜夜狠| 91视频在线观看18| 白 大 人妻 区 在线| 亚洲性爱电影| 嗯嗯不要 视频| 成片免费观看视频大全| 青青青国产手线观看视频2| 日日干男人的天堂| 国产亚洲99久久精品| 欧在线一二区| 欧美高潮在线| 日日干日日| 男人天堂欧美| #NAME?| 五月婷婷综合网| 中国人高清www色视频免费| 久操B网| 99精品欧美一区二区三区桃色| 少妇高潮喷水无套久久久久久| 五月丁香狠狠爱| 日本一级特级毛片视频| 亚洲骚男同com| 超碰人人乐97| 免费在线观看AV无码网站| 熟妇熟女一区二区三区| 曰本特级特黄特色黄色A级网站高清在线免费看| 亚欧国产无码精品在线| 9久在线视频只有精品| 美女91av| 亚洲欧美综合网站| 蜜臀AV一区二区三区激情综合| 亚洲一级性爱视频免费看| 精品九九九| 国产精品另类一区大香蕉| 日韩三级在线观看mp4| 午夜天堂精品久久久久91| 久久在线观看免费视频| 日韩图色| 国产嫩草精品A88AV| 视频二区美腿丝袜制服人妻欧美 | 天美麻豆一区二区三区| 亚洲系列欧美| 日韩干B| 一级黄碟| 久久熟女精品不卡一区| 爱av免费| 精品超碰国产| 97自拍视频在线| 亚洲激情在线| 中文字幕在线24| 一区二区三区四区色图| 97中文超碰| 桃色五月天| 五月婷婷五月天| 能看的av| 四虎AV无码| 91狠婷| 亚洲熟妇极品| 成 人 影视 一区 二区 三区 四区| 中文字幕五区| 国产精品久久久视频| 91n美女视频| 黄页18禁| 麻豆性爱视频在线播放| 蜜桃臀av在线观看| 夜夜久久| 竹菊一区二区三区AV线| 欧美人妻制服| 一个色导综合| hd成人一区二区在线| 99久久综合| 麻豆久久久久久久久丝袜| 国内精品不卡无毒99999| 91麻豆天美国产| 91综合天天看| 午夜性生活av免费在线看| 91P0RNY大屁股人妻| 欧美v亚洲v日韩v最新在线二区| 国产在线视视频有精品| 香一区二区三区| 天天色踪合| 91中文字幕在线观看| 天天cao在线| 97色97干| 中文字幕成人| 91欧美性| 午夜激情成人在线观看| 日日日日日| 日日做夜狠狠爱欧美黑人| 日韩欧美麻豆 | AV色天香在线| 欧美精品黑人猛交高潮| 久热超碰| 啪啪自拍九九综合| 国产精品无码论坛| 后入式视频国产自| 国产精品ⅴ无码大片在线看.| 熟女乱伦二区| 青草伊人久久| 福利色色| 久久9久久| 一级A啪啪啪啪| jiujiujiujingpin| 最新亚洲人成网站在线影院| 欧美综合加勒比在线| 亚洲性天堂| 九九久久精品| 2020天天色综合| 99国产在线 精品 视频| 亚洲91网站| 91bbb| 日韩精品99999| 91超碰丝袜制服| www.人人cao| 亚洲素人综合| 亚州伊人色综台| 97色97干| 尤物视频偷拍免费| 亚洲乱色熟女一区| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 加勒比少妇AV婷婷六月天超碰超碰| 欧美亚洲高清| 躁躁日曰躁2020| 性爱免费视频成人| 91色人| 婷婷五月综合激情| 午夜啪| 成人夜夜| 蜜桃臀 后入 一区 二区 三区 在线| 欧美 日韩第一性色| 五月丁香拍拍激情综合三级| 96久久久| 欧美后入式| 美女啊啊啊啊pc| 日本免费专区| 黄页| AV色五月天| 蜜桃久久综合视频| 欧美日韩性爱操大逼| 黄色无码高清黄色无码网站| 欧美日韩不卡传媒| 久湿久久| 日韩人妻无码精品系列| 午夜免费视频1000| 亚洲精品乱码久久久久久蜜桃麻豆| 美女网站91| 偷拍亚洲情色| 亚洲女人毛茸茸91| 国产乱弄免费在线视频。 | 亚洲午夜精品久久久中文影院| 蜜臀99999| 大香蕉宗合网在线| AAA久久| 在线国产福利网址导航| 国产精品女生av| 国产成人欧美精品在线| 欧美成人性活片| 综合亚州欧美| 成人无码欧美一级A片狼牙直播| 后入式在线免费观看60秒| 国产白嫩精品久久| 91在线限制级| 九久久九精品视频| 欧美另类色| 麻豆天美电影一区二区| 欧美午夜精品久久久久久3D| 狠狠色婷婷| 日本岛国黄色网址| 九九热AV| 国产极品一区二区三区三州| www.av在线观看| 自拍偷拍2025在线观看| 国产AV超爽| 91狠狠综合久久久久久| 插入综合网| 五月丁香狠狠爱| 人妻久久久久久久久久久久久久久 | 韩日自拍| 亚洲另类天堂| 日韩无码精品综合久久| 乱伦熟女区| 91无码中出人妻视频| 东京热激情视频一二三区| 日韩三级久久久| 久久9亚洲| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 九九99精品| 精品人人| Julia Annxxxxx| 亚洲激情在线| 无码精品久久| 婷婷综合网站| 啊啊啊啊啊好大好舒服想要| 五月天婷婷社区| 在线播放一级无码视频| 欧美日韩国内不卡| 白丝AV网站| 97精品一区| 国产福利一区二| 秋霞成人做爱| 再深点灬舒服灬太大了好硬好爽| 亚洲AO在线| 人人妻人人爽 97人人看碰人免费公开视频| 精品人妻二区三区| 在免费jIzzjIzz在线视频| 91亚州| 日韩字幕一区| 全免费a敌肛交毛片免费| 欧美一区91大爱| 熟妇无码视频三区| 亚洲综合九九| 国产精品无码av在线| 亚洲天堂女优在线| 黄页网站成人免费| 欧美综合91| 亚洲日韩国产欧美综合v| 亚洲欧美综合色| 色图综合| 91N五十路| 欧亚无码视频| 九九无码| 啪啪啪亚欧美视频| 久久婷婷伊人| 校园春色美腿丝袜 | 男人的天堂,欧美亚洲另类国产日韩,日本高清一区二区 | 国产中文字幕在线观看| 亚洲综合九| 亚洲在线欧美| 激情五月天色色| 日本999精品| 九九九九精| 婷婷影院入口| 高清不卡 中文 人妻| 中文字幕高清精品一区| 超91综合网| 综合亚洲网| 熟女字幕| 69丨亚洲丨精品丨入口免费播放| 国产久久成人| 强奸熟女一区二区三区| 国产性爱在线视频一区二区| 强上我不卡卡| 91一区二区三区蜜桃| AA丁香综合激情| 操人妻视频| 欧苏综合色综合| 猛猛干| 欧美嗯啊……在线观看视频免费| 中文乱码字幕观看| 五月丁香啪啪网| 欧美色图在线视频少妇| 日韩成人综合网| 亚洲黄色电影| 欧美激情视频一区二区三区不卡| 婷婷av在线中文字幕| 91网18| 国产精品自产拍在线观看社区| …中文字幕亚洲乱,97人妻无码费视… | 94色色电影网| 精彩国产视频播放1区2区| 精品久久久久久无码| 亚洲精品久久一区二区三区蜜桃臀| 天天干夜夜操网| 亚洲久久久久| 久久一二三四五六七八九区区| 亚洲AV无码黄色强奸| 操久久久久| 有码色中文字幕在线观看| 在线视频日韩欧美国产| 中文字幕在线观看网址| 精国久久一区二区三区98| 免费又黄又裸乳的视频| 欧洲亚洲少妇| 性色高清..……| 国产夜夜操| 五月天久久久| 91露脸熟女专区| 综合网少妇| 91美女视频在线免费观看| 超碰综合色| 天天艹天天日| 麻豆国产97在线| 欧美高清在线| 国产精品电影推荐| 2025亚洲男人天堂| 超碰97起碰| 久久久久9| 亚洲91在线播放影院| 国产高清自拍视频| 网友自拍第一页| 午夜精品久久久久久久第一页按摩| 国产午夜福利视频在线| 欧美 亚洲| 风间由美日韩欧美久久| 曰本91情色| 日本丝袜美腿人妻九九| 嗯嗯嗯,草死我| 亚洲另类久操网| 色色婷婷五月| 人妻啊啊人妻啊| 天天爽天天操| 久久久久性熟视频| 五月丁香六月婷| 欧美视频中文字幕区| 夜夜影视四色| 玖玖色综合| 欧美一区91大爱| 国产又操| 99热综合| 婷婷亚洲综合| 四虎影库国产精品免费| 亚洲高清内射| 精品亚洲俞拍视频一区| 久久草草欧美精品| 一区二区三区在线资源| 国产精品ⅴ无码大片在线看.| 另类一区| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| 日韩操啪| 国产精品九9| 亚洲精品人体| 97精品国产97久久久久久户外免费| 嗯嗯,好大,好爽,好骚| 欧美一级AAAAAAA| 国产农村妇女精品1区二区| 成人七区| 国产在线精品电影观看| 激情小说成人日本无码一| 久久本道| 国产乱伦亚洲| 亚洲脚交| 欧美极品少妇交| 波多野结衣之双飞调教在线播放| 精品国产网站| 亚洲国产成人福利在线观看| 天天日骚逼熟女| 婷婷啪啪| 秋霞一级A片黄色视频| 国产地址二三| 欧美激情内射| 大香蕉一线视频| 日韩中文字幕熟妇人妻| 啊啊啊啊啊啊啊国| 欧美性爱精品一区二区| 性影在线视频| 精品一啪| 1000部熟女视频在线观看| 91精品人| 69人妻精品丰满熟女区| 国产91av在线播放| A啊啊在线观看| 少妇熟女1区2区3区| 亚洲综合在线高清| 一区操逼| 人妻无码一区二区三区久久99| 熟女五十路一区二区三| 成人精品一区二区91毛片不卡| 欧美黑人性猛交91| 国精综合一二三区影视| 九色 蝌蚪 熟女自| 天天性射网| 国产真实野战在线视频| 亚洲在线观看| 五月天开心网| 91少妇| 国产一区二区av综合| 91熟女视频网| 超碰99在线观看| 超碰色老头| 67194无码不卡| 91丨人妻丨国产丨丝袜| 99色婷婷中文字幕乱色| 午夜一区二区三区国产| 久久99干一本高清| 东京日日夜夜| 日韩免费中文字幕视频| 91N综合在线| 亚洲精品成人激情在线| 亚洲男人天堂网| 亚洲天堂自拍| 九九成人| 很黄很色的视频在线观看| 亚洲精品黑丝| 色综合五月天| 91伊人久| 久操精品| 欧美黑人日韩少妇色情| 超碰人妻久久人妻中文97| 亚洲成?V人片在线观看福利| 亚洲国产精品成人久久蜜臀| 99re6国产精品99re| 婷婷成人久久久精品| 91人妻素女| 揉揉揉夜夜| 96国产污污污丝袜| 操人妻丝袜高跟| 国模吧 一区二区三区| 在线色导航| 精品人妻免费观看| 性综合网| 婷婷五月天激情四射| 夜夜精品视频一区二区| 免费草草草草草视频| 91女人的网站| 九一亚洲国产免费| 欧美日韩免费专区在线| 97爱爱爱综合| 97天天搞在线| 大香蕉丝袜一级片| 丁香婷婷久久 | 北京专精特新企业招聘信息| 色狠狠色| 色婷婷五月天| 色婷婷导航| 丁香五月影院| 东北女人av| 久久欧美按摩999| 91 丝袜在线| 日本一区三级韩国| 乱伦系列一区二区| 色五月婷婷网| 国产九九久久久精品| 色狠狠综合噜一二三区| 午夜一区| 小草精彩毛片| 欧美日韩精品久久| 久久精品无码不卡| 欧美综合网在线| 无码人妻精品酒店| 日韩乱伦AⅤ| 素人一区二区三区日韩| 婷婷中文网| 亚洲av在线免费观看| 亚洲精品天天影视综合网 | 97人妻色| 男人的天堂.com| 金典av| 人妻丝袜一区二区三区在线| 热99这里有精品综合久久 | 亚洲三级网址久久最新| 热久久无毒不卡| 91夜色| 亚洲国产激情国产av| 亚洲天堂男人在线| 嗯嗯啊啊的视频| 精品国产Av无码久久久亚洲| 高清国产av无码| 台湾肥佬网一区二区三区| 9 1超碰九色| 中文字幕久热视频在线| 亚洲天堂另类美腿| 97超碰伊人| 你想操日本小逼吗| 久久国产对白激情浪潮| 懂色av一区二区三区天美传媒| 中文字幕交换人妻| 亚洲精品 欧美精品| 操一操摸一摸| 伊人影院中文字幕| 欧美日韩亚洲天堂| 久久综合国产精品国产| 99re8超碰| 国产久久免费精品视频| 人人喜人人妻| 色牛aV| 97露脸精品丝袜| 84YTCOM性无码| 亚洲成人一二三区| 高清国产精品福利网站| 国产人妻精品久久久一区二区三区| 超碰吊日色| 婷色五月| 亚洲做性| 韩国黄色片精品久久久| 欧美人妻一区二区| 熟女突然公开看18禁影片 | 97综合在线| 97精品一区二区视频在线观看| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 91天美| 亚洲官网在线| 日韩强奸av| 偷拍五区| 99热亚洲| 亚洲av综合伊人久久| 强奸熟女一区二区三区 | 91超级碰碰碰| 韩国一级做a久久久久| 久久久久网站-538在线视频-欧美永久乱码 | 97日本超碰综合| 日本一二区不卡| 躁躁日曰躁2020| 熟女六十路| 中国熟女老妇仑乱一区二区三区| 激情视频一二三| 五月天开心网| AA特级绝黄| 国产真实子伦对白| 大香蕉日韩欧美| 亚洲av无码成人精品国产| 亚洲性天堂| 色一射色一射| 久久精品日韩| 男女性无套 免费九一| 诱惑人妻欧美一区在线播放| 婷婷色网| 丁香九月激情| 美国一区二区免费视频| ji熟女.com| 激情熟女12P| 超碰97亚洲| 久久内射| 综合亚州欧美| www.AV有限公司一区| 亚洲第一成人影院色播| 女人被男人桶爽视频网站| 国产无码成人无码| 精品传媒在线一区| 欧美se综合| 人妻丝袜一区二区三区在线| 国产2.3.4区| 福利五区| 日本三级精品| 欧美不在线| 99re98| 国产传媒日韩| 午夜性生活av免费在线看| 久久久久少妇| 亚洲国产精品V?在线播放| av中亚| 亚洲国产蜜臀系列在线观看| 久草久日| 久久无码精品| 91快色色色色色| 中文字幕版| 97天天摸天天碰| 久久久久久欧美精品se一二三四| 久久夜黄色无码A级大片| 久操网无码在线| 热99这里只有精品| 女同在线视频一区| 久久久艹艹艹| 新视频sss国产| 香蕉99秘 一区精品蜜桃臀| wwe 天天干.com| 色999五月色| 久久最新免费视频23| 神马久久久久久久久久久久| 骚货人妻偷情自拍在线视频| 神马午夜久久久| 日韩欧美三级| 岛国片国产成人亚洲播放| 婷婷丁香五月激情啪啪| 午夜啪啪片| 久操视频资源站公开| 日韩人妻少妇中文字幕| 亚州综合AⅤ| 玖玖草久草99蜜月一区二区三区| 久久久99999久网站| 亚洲日韩天堂| 狼天天狼天天大香蕉| 欧洲乱码视频| 香蕉国产精品麻豆亚洲欧美日韩| 六十路日本| 大香蕉男人的天堂| 国产h小视频在线观看免费| 丁香五月综合| 高颜值美女口爆高潮浪叫| 天天综合97| 国产粉嫩出水在线播放| 亭亭丁香激情| 亚洲欧洲日本精品中文a∨| 一区二区三区国产精产| 久久精品熟女亚洲AV麻豆软件| 亚洲人妻一区二区三区| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 日韩成人性日韩成人性爱视频在线免费观看 | 国产亚州高清国产拍精| 天天操夜夜操狠很操| 国产亲戚伦亲在线| 亚洲综合色在线| 久久人人爽人人爽人人片Ⅴ| 91青青在线视频| 超碰人妻在线| 78精品| 精品一区二区亚洲国产| 后入福利视频| 欧美日韩国内不卡| 97资源站国产精品| 天天日老熟妇| 变态乱伦伪娘灌肠一区二区| 97频视在线| 久久精品国产72国产精品福利 | 9久久美女首页| 脫衣舞一区二区三区| 久污| 亚洲欧美精品一区天堂久久 | 最近二区三区视频大全| 一线黄色免费性爱片| 亚洲人精品久久久| 日韩AV色图| 超碰日本97美女人妻人人玩人人爱| 亚洲无吗在线视频| 深夜激情| 久日91在线| 超碰在线人妻| 久久久久97| 国产超碰在线一区| 91美女在线精品视频| 91亚洲人| 欧美在线综合| 久草免费福利在线播放| 欧美Ⅴ性爱| 亚洲精品九九九九九九| 美欧老女人97| 久久久工口| www.久久久久| 97色综合中文网| 91精品婷婷国产综合久久| 天美精品一区二区三区四区在线观看| 日韩成人电影AV| 国产综合永久精品日韩鬼片| 欧美色网| 蜜臀久久99精品久久久久久无删减 | aaaa黄片| 无码外流操逼视频| 无码不卡八戒| 日本一区二区亚洲综合| 九九热午夜欧亚国产视频| 伊人991| 91伊人大香蕉| 97超碰久| 亚洲AV无码久久精品蜜桃小说| 中文字幕成人理论在线| 亚洲va有码在线天堂| 久久久亚洲高清不打码| 欧美人体性爱互联网第一页婷婷日本| 超碰538| 蜜桃臀一区二区三区久久| 操死我了啊啊啊| 久久久性少妇| 91精品老女人| 一区二区三区免费视频入口| 囯产精品久久久久久久久久梁医生| 欧美影院一区二区三区| 精品无码久久久久久久杏吧| 影音先锋每日最新资源在线观看| 大学生口爆吞精| 亚洲精品性爱片| 精品亚洲国产成人精品| www.99中文字幕| 欧美在线播放aaaa| 韩国轻伦国内自拍一区| 日本高清视频xxxx| 九九热九九| 国产精品熟女一区二区三区| 日韩三级在线观看网站| 凹凸久久人人| 久久久婷婷| 开心五月婷婷| 97精品国产手机| 亚州综合色图| 午夜爽爽爽| 日韩在线国产字幕| 国产日韩精品suv| 亚洲成人在线高清| 国产亚洲色婷婷久久99精品91| 香蕉99秘 精品一区丁香| 亚洲成人妻日韩在线| 亚洲 欧美 制服 另类 自拍| 天天综合~91| 久久夜黄色无码A级大片| 麻豆这里只有精品| 九九毛片这里只有精品| 97亚洲中文| 人人色人人操在线| 久久久少妇诱惑精品视频| 操逼不卡中文字幕| 神马久久69| 天堂俺去俺来也www久久婷婷| 亚洲AV免费在线| nuu12国产麻豆精品| 欧美色91| 亚洲AV免费在线| 亚洲欧美激情小说| 丁香五月激情网| 亚洲综合 欧美| 噜噜吧,噜噜色,噜噜| 狠狠热这里都是精品| 亚洲第一精品在线视频| 97公开久久| 操比国产| 91亚洲欧美| 久久精品老司| 凸凹视频在线观看| 日韩人妻丝袜中文字幕| 殴美综合色88| 影音先锋日本乱伦| 99日免费视频中文字幕| 日本片日本片祼观看网站在线看中文版网页在线看 | 26uuu久久| 丝袜六区| 97在线精品观看视频| 欧美天天影院| 亚洲系列欧美| 色五月第四色| 色999亚洲人成色| 欧美黄色手机在线观看| 日韩精品一区,二区 九九...老司机| 国产精品秘 福利姬在线观看| 91黑人狂躁丰满熟妇| 四虎AV无码| 极品综合| 亚洲丝袜少妇在线| 91在线页| 亚洲熟女综合一区二区| 欧美与日韩97| 中文字幕在线观看第二页| 日本性爱不卡视频| 99草精| 任我爽在线视频免费观看| 97舔舔| 韩国一级婬片A片无码天美| 日韩少妇在线视频| 欧美久热| 亚洲操操| 丁香成人五月天| 丰满欧美放荡少妇在线| 国产九月婷婷| 欧美劲爆视频一区二区| 91人妻最真实刺激绿帽| 97干综合网| 亚洲AO在线| 玖玖视频在线资源一区二区三区| 日语五十路和六十路亚洲国产精品 | 中文字幕午夜精品久久久| 97视频在线观看高清资源| 极品白嫩福利在线| 日本三级韩国三级99| 男人亚洲91首页在线| 粉嫩绯色AV一区二区在线| 男人的天堂午夜av| 日本久久女同性恋视频| 亚洲毛片基地专区| 91国精产品| 国产AV线| 久久亚洲天堂| 久久亚州大香蕉| 99在线精品观看视频中文| 伊人伊人LD| 黑人精品久久97| 东北老女人的激情视频| 超碰97亚洲区| 亚洲亚洲亚洲天堂天堂| 97日韩欧美亚洲| 欧美一区二区| 亚洲在线欧美| 人妻一区二区三区视频| 中文字幕交换人妻| 久草视频分类在线| 天天弄天天操| 嗯嗯啊操我| 东北女人| 欧美日韩系列| 69精品| 久久亚洲精品成人av| 五月丁香综合| 欧美激情一区二区| 91热色| 在线免费观看高清无码视频| 久久精品中文字幕观看| 精品国产肉丝袜在线拍国语| 九九热九九热| 神马久久啊啊| 九九碰九九爱97超碰| 国产成人99久久亚洲综合| 久久亚洲中文字幕视频| 久久久久久久亚洲Av无码| 久久综合九九| 欧美久久婷婷| 日韩无码一区二区三区| 日本不卡高清视频| 亚洲第一页欧美| 国产精品剧情| 十八禁啪啦拍视频无遮挡| 中文字暮97| 婷婷丁香人妻 | 国内精品嫩模A∨私拍小视频| 欧美日韩一区二区三区四区蜜桃| 婷婷综合激情| 国产精品农村妇女精品| 亚洲一区中文字幕一区| 国内精品99999| 大香樵伊人网| 亚洲国产丝袜熟女av| 欧美一二三区四五区| 久久无码成人| 超碰综合97在线| 久久欧美性爱视频| 人妻久久| 超碰资源亚洲97| 夜色91| 五月天激情国产综合婷婷婷| 99热这里都是精品| 丁香五月婷婷啪啪| 久久精品无码熟妇一区二区三区视频导航| 免费视频观看60秒| 欧美亚州手机在线| 亚洲国产熟妇综合色专区| 午夜天堂精品久久久久91| 张柏芝国产一区在线观看| 有码免费观看| 欧美人人曰人人操人人射射| 亚洲AV不卡在线观看尤物| 色翁荡息又大又硬又粗又爽| 精品国产精品一区二区| 国产97在线 | 亚洲| 91在线限制级| av在线资源| 欧美999| 欧洲综合视频| 人人人人插| 欧美日韩在线小说| 中文字幕天天操| 成人性爱全视频观看| 国产在线能看的你懂的| 国产第11页| 密臀在线免费观看| 国产69精品久久久久99尤物| 久一区久久蜜桃| 久草资源在线视频官方总站日韩丝袜美腿| 激情抓乳插进去啪啪啪日韩 | 久日91在线| 久久天天摸| 日韩激情无码影院| 清纯唯美综合亚洲| 久久AV色| 久久久久久大| 黄色大片免费在线| 欧美性夜| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 国产精品com| 大香蕉日韩欧美| 劲爆欧美人妖三区91| 九九久久久久久爱| 五月色综合| 秋霞无码av鲁丝片一区| 日本人妻伦在线中文字幕| 操91| 搞中出视频在线观看| 男人的天堂.com| 九九av| 色五月婷婷中文字幕| 眼镜人妻101.com| 黄色无码高清黄色无码网站| 亚洲性天堂| 欧美78P| 97免费视频在线| 囯产精品久久久久久久久久二区三区| 蜜臀无码一区二区| 亚洲人综合| 中文字幕免费在线观看| 美女91网| 富女玩鸭子一级毛片| 日韩一级性爱无码| 亚洲中文字幕在线视频一区二区| 日韩99精品视频综合区| 日韩中文字幕国产| 日韩精品永久在线观看| 黄色AAAAAAAAAAA大片| 97精品免费视频网站| 在线视频97| 91性高朝久久久久久久久| 人人艹亚洲| 欧美毛片在线网| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | surenchaopeng| 欧美性爱超碰97| 成人精品久久久午夜福利| 天天摸夜夜添无码小视频| 欧美 亚洲 偷拍自拍| 国产性感骚丝袜在线| 五月天AV资源| 日本人妻中文字幕| 亚洲永久永久永久永久一级一级一级精品 | 做爱A级亚欧| 99精品在线播放| 国产精品天干天干综合网麻豆 | 综合自拍| 69综合网| 97免费在线观看| 黄色毛片A片| 天天影视射综合网| 老司机午夜精品视频| 久久99亚洲精品久久99果| 少妇与黑人高潮在线| 久久久少妇| 人妻久久久久久| 骚鸭AV| 中字乱伦AV| 午夜视频久久久| 日本在线激情一区二区三区| 亚洲人久久久网| 乱伦Av网| 熟妇女伦乱视频视频| 亚洲欧美日韩精品久久久一区二区 | 天天影视亚洲| 五月天激情网站| 精品传媒在线一区| 熟妇人妻丰满久久久久久久无码| 97精品熟女少妇一区| 亚洲免费日韩在线一区二区| 欧美日韩黄片精品在线| 亚洲诱惑| 日韩人妻精品久久久久| 毛片99-全集电影手机免费观看完整-B029AV| 97欧美综合| 偷拍亚洲高清图片| 99热大香蕉伊在线| 中文色综合| 青青草视频久久久久| 亚洲骚逼少妇| 丁香五月激情网| 超碰2017| 超碰97人人cao| 久久精品视频久久久| 96精品久久久久久久久| 97精品一二区| 欧美日韩操逼嗦吊| 亚洲风情在线观看| www.91色综合| 国产精品4p在线观看| 五月天人妻综合| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 激情丁香五月婷婷| 日韩成人高清一区二区| 五月丁香激情综合| 精品在线蜜臀| 性爱1区| 欧美日韩免费专区在线| 天堂涩涩| 眼镜人妻101.com| 青青青草伊人精品| 91热爆在线| 一,爱啪啪,在线免费视频| 欧美 亚洲精品首页| 日本一天色道久久久精品视频| 国产亚洲精品第一最新| 欧美激色| 欧洲射精91| 爆乳免费黄网站| 综合色色婷婷| 2018色综合天天操| 91久久国产综合精品| 中文字幕人乱码中文字的预防方法 | 男人天堂久久精品不卡| 国产99久久99热这里只有精品15| 午夜a成v人电影| 日韩人体偷拍| 日美免费黄片| 91色欧美| 欧美成人精品一区二区男人蜜臀| 久久99国产综合精品女同| 日韩免费高清大片在线| 91热热色| 99999久久久久9国产精品| 国产1769在线| 亚洲成av人片色午夜乱码| 日韩三A大片在线观看| 日本爽爽爽爽爽爽免费视频| 天天情欲宗合网| 区一在线观看| 95精品在线| 测评在线观看AV| 高清国产精品福利网站| 人人妻人人爽人人精品| 欧美一级专区免费大片| 少妇69中文|