亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

SpringBoot2+Vue3疫情隔離管理系統(tǒng)開發(fā)實戰(zhàn):從零搭建到部署全流程

SpringBoot2+Vue3疫情隔離管理系統(tǒng)開發(fā)實戰(zhàn):從零搭建到部署全流程 最近把一個疫情隔離管理系統(tǒng)從零到一完整做了一遍技術(shù)棧就是標(biāo)題里那套——SpringBoot2 Vue3 MyBatis-Plus MySQL8.0。說實話這類系統(tǒng)放在平時看起來不復(fù)雜無非就是人員登記、健康監(jiān)測、房間管理、物資管理幾塊業(yè)務(wù)但真正從設(shè)計表結(jié)構(gòu)到前后端聯(lián)調(diào)再到打包部署、寫文檔準(zhǔn)備交付整個過程里踩過的坑遠(yuǎn)比想象中多。這篇文章不聊虛的就把我做這個項目的完整思路、表結(jié)構(gòu)設(shè)計、后端核心封裝、前端頁面交互、環(huán)境部署實測記錄以及那些文檔里絕對不會寫的排查經(jīng)驗全部攤開講清楚。項目源碼附帶的說明文檔我看了寫得中規(guī)中矩但還不夠細(xì)所以我決定自己重新整理一篇記錄更接近真實開發(fā)過程的經(jīng)驗。不管你是準(zhǔn)備拿這個項目做課程設(shè)計、畢業(yè)設(shè)計還是單純想練手SpringBoot2 Vue3的組合玩法這篇內(nèi)容都能幫你省下不少摸索時間?;A(chǔ)要求不高會一點Java和JavaScript語法就能跟上我會把關(guān)鍵代碼和配置直接貼出來你照著做就能跑起來。1. 業(yè)務(wù)梳理與技術(shù)選型背后的邏輯1.1 這個系統(tǒng)到底解決什么問題疫情隔離管理這個場景核心痛點在于信息分散。隔離人員入住登記靠紙質(zhì)表格每日體溫監(jiān)測靠人工匯報房間占用情況靠打電話問物資消耗靠月底盤庫存。一旦人數(shù)上來數(shù)據(jù)一多管理就完全失控。所以這個系統(tǒng)的定位就是把這些分散操作集中到一個平臺里讓不同角色在各自權(quán)限范圍內(nèi)完成自己的工作。管理員負(fù)責(zé)全局配置和數(shù)據(jù)查看醫(yī)護(hù)人員負(fù)責(zé)錄入隔離人員的健康監(jiān)測信息普通用戶或隔離人員則可以通過系統(tǒng)查看自己的狀態(tài)和通知。核心業(yè)務(wù)流程其實只有一條人員登記入駐、分配房間、每日健康記錄、到期解除隔離。圍繞這條鏈路再延伸出物資管理、公告通知、數(shù)據(jù)統(tǒng)計等輔助模塊。1.2 技術(shù)棧選型不追新選成熟為什么選SpringBoot2而不是SpringBoot3我的考慮很簡單。SpringBoot2.7.x配合JDK8是當(dāng)前最穩(wěn)定的企業(yè)級組合網(wǎng)上資料多遇到問題基本一搜就有答案。SpringBoot3強(qiáng)制要求JDK17如果你的電腦只裝了JDK8那就要多一道環(huán)境配置的檻。對于課程設(shè)計和畢業(yè)設(shè)計這種場景穩(wěn)定性優(yōu)先于新版本特性另外MyBatis-Plus對SpringBoot2.x的支持也是最成熟的代碼生成器、分頁插件、條件構(gòu)造器都是直接可用。Vue3選擇了Composition API Element Plus的組合。Vue3對比Vue2最大的變化就是組合式API邏輯復(fù)用更清晰配合Vite構(gòu)建速度極快開發(fā)體驗比webpack時代好太多。Element Plus是Vue3生態(tài)里最完整的UI組件庫后臺管理系統(tǒng)的表格、表單、彈窗、標(biāo)簽頁都能一站解決。MySQL8.0在這個項目里其實發(fā)揮了幾個關(guān)鍵特性。默認(rèn)字符集是utf8mb4中文存儲不會出現(xiàn)亂碼問題窗口函數(shù)和公共表表達(dá)式這些新特性雖然在這個項目里沒用上但以后做數(shù)據(jù)分析報表擴(kuò)展時直接就能用另外MySQL8.0對JSON字段類型支持很好后面如果要擴(kuò)展自定義字段也方便。最重要的是學(xué)校機(jī)房和企業(yè)內(nèi)部環(huán)境現(xiàn)在普遍裝的就是8.0選它意味著部署不折騰。1.3 軟件架構(gòu)與核心模塊劃分整個系統(tǒng)采用經(jīng)典前后端分離架構(gòu)。后端提供RESTful API前端通過HTTP請求調(diào)用兩者之間通過JSON交換數(shù)據(jù)。后端SpringBoot負(fù)責(zé)業(yè)務(wù)邏輯和數(shù)據(jù)庫操作前端Vue3負(fù)責(zé)頁面渲染和用戶交互。系統(tǒng)功能模塊我劃分為六大塊模塊核心功能設(shè)計說明用戶管理登錄注冊、角色分配、賬號維護(hù)采用JWT做無狀態(tài)認(rèn)證角色分管理員/醫(yī)護(hù)人員/普通用戶人員管理隔離人員登記、解除、查詢核心業(yè)務(wù)入口包含入住和解除兩個關(guān)鍵動作房間管理樓棟/房間信息維護(hù)、分配狀態(tài)房間狀態(tài)驅(qū)動分配邏輯空閑/占用/消殺三種狀態(tài)健康監(jiān)測體溫記錄、異常標(biāo)記、連續(xù)監(jiān)控按人員維度記錄每日健康數(shù)據(jù)支持歷史曲線查詢物資管理物資出入庫、庫存預(yù)警核心是庫存臺賬的準(zhǔn)確性預(yù)警閾值可配置公告管理通知發(fā)布、列表查看面向所有角色支持按發(fā)布時間排序模塊之間的依賴關(guān)系也很清晰人員管理依賴房間管理來確定入住房間健康監(jiān)測依賴人員管理來確定記錄歸屬統(tǒng)計報表又依賴前面所有模塊的數(shù)據(jù)。設(shè)計時把公共字段創(chuàng)建時間、更新時間、邏輯刪除標(biāo)記統(tǒng)一放進(jìn)基礎(chǔ)實體類避免每個表都重復(fù)寫一遍。2. 數(shù)據(jù)庫設(shè)計與初始化腳本要點2.1 核心表結(jié)構(gòu)設(shè)計數(shù)據(jù)庫是整套系統(tǒng)的地基。我在設(shè)計表結(jié)構(gòu)的時候一切都是圍繞“業(yè)務(wù)狀態(tài)如何流轉(zhuǎn)”來做的。最終確定的六張核心表是用戶表、隔離人員表、房間表、健康記錄表、物資表、公告表。這里挑幾張關(guān)鍵表詳細(xì)說一下。隔離人員表是最復(fù)雜的一張表它承載了整條業(yè)務(wù)主線的狀態(tài)。字段包括姓名、證件類型、證件號碼、手機(jī)號、來源地、入住時間、計劃解除時間、實際解除時間、入住房間號、狀態(tài)。其中狀態(tài)字段是關(guān)鍵設(shè)計我用了tinyint類型的status0表示待入住1表示隔離中2表示已解除。為什么不直接用字符串因為后端做狀態(tài)條件查詢時整型比較比字符串匹配效率更高而且配合MyBatis-Plus的枚舉類型就能在Java代碼里做統(tǒng)一轉(zhuǎn)換。房間表的設(shè)計重點在狀態(tài)字段和編號規(guī)則。房間編號我采用了“樓棟號-樓層-房間號”的組合格式比如2-3-05表示2棟3層05號房。這樣設(shè)計的好處是前端展示時不用額外拼接后端做樓棟統(tǒng)計時也能通過模糊查詢實現(xiàn)。健康記錄表相對簡單但索引設(shè)計很關(guān)鍵。由于系統(tǒng)要按人員查歷史記錄我創(chuàng)建了聯(lián)合索引人員ID記錄日期否則數(shù)據(jù)量上來之后按人員查詢會全表掃描。物資表的重點在于庫存字段的約束檢查。庫存不能為負(fù)數(shù)我在數(shù)據(jù)庫層直接加了CHECK (quantity 0)的約束在應(yīng)用層用事務(wù)控制出入庫操作的原子性雙保險。2.2 建庫建表與初始化數(shù)據(jù)腳本示例數(shù)據(jù)庫名稱定義為isolation_db字符集指定為utf8mb4。我個人習(xí)慣在MySQL8.0上把排序規(guī)則設(shè)為utf8mb4_unicode_ci這個排序規(guī)則對中文文本比較友好。CREATE DATABASE IF NOT EXISTS isolation_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;用戶表建表語句我直接給出來注意密碼字段不要用varchar(50)因為BCrypt加密后的密碼長度是60位長度不夠會導(dǎo)致認(rèn)證失敗CREATE TABLE sys_user ( id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT 主鍵ID, username VARCHAR(50) NOT NULL UNIQUE COMMENT 登錄賬號, password VARCHAR(100) NOT NULL COMMENT BCrypt加密后的密碼, nickname VARCHAR(50) COMMENT 用戶昵稱, role VARCHAR(20) NOT NULL DEFAULT USER COMMENT 角色: ADMIN/DOCTOR/USER, status TINYINT NOT NULL DEFAULT 1 COMMENT 狀態(tài): 1啟用 0禁用, create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, deleted TINYINT NOT NULL DEFAULT 0 COMMENT 邏輯刪除標(biāo)記, INDEX idx_username (username) ) ENGINEInnoDB COMMENT系統(tǒng)用戶表;這里有一個非常容易被忽略的坑MySQL8.0默認(rèn)的認(rèn)證插件是caching_sha2_password而很多老版本驅(qū)動只支持mysql_native_password。如果你在連接數(shù)據(jù)庫時報認(rèn)證插件錯誤要么改用8.0對應(yīng)的驅(qū)動版本要么在建用戶時指定認(rèn)證插件。我的做法是在項目初始化時統(tǒng)一使用mysql-connector-j8.0.x版本代碼里指定驅(qū)動為com.mysql.cj.jdbc.Driver。2.3 初始化管理員的正確姿勢初始數(shù)據(jù)里必須要有一個管理員賬號。我用BCrypt加密工具生成密碼串而不是明文存入數(shù)據(jù)庫。具體做法是寫一個CommandLineRunner在SpringBoot啟動時檢測sys_user表是否為空如果為空就自動插入默認(rèn)管理員。Component public class AdminInitializer implements CommandLineRunner { Autowired private SysUserMapper userMapper; Override public void run(String... args) { Long count userMapper.selectCount(null); if (count 0) return; SysUser admin new SysUser(); admin.setUsername(admin); admin.setPassword(new BCryptPasswordEncoder().encode(admin123)); admin.setNickname(系統(tǒng)管理員); admin.setRole(ADMIN); userMapper.insert(admin); log.info(默認(rèn)管理員賬號已創(chuàng)建: admin / admin123); } }這樣設(shè)計的好處是別人拿到源碼后不需要手動執(zhí)行SQL插入數(shù)據(jù)就能啟動系統(tǒng)體驗會好很多。3. 后端核心實現(xiàn)SpringBoot2 MyBatis-Plus的實戰(zhàn)技巧3.1 項目骨架與統(tǒng)一結(jié)果封裝后端項目的標(biāo)準(zhǔn)包結(jié)構(gòu)是這樣的controller、service、mapper、entity、common、config。controller只做參數(shù)接收和結(jié)果響應(yīng)service寫業(yè)務(wù)邏輯mapper就是MyBatis-Plus的BaseMapper接口entity對應(yīng)數(shù)據(jù)庫表common放通用工具類和結(jié)果封裝config放配置類。所有接口返回統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)這是前后端協(xié)作質(zhì)量提升的關(guān)鍵一步。封裝的返回體包含三個字段code狀態(tài)碼、message提示信息、data業(yè)務(wù)數(shù)據(jù)。Data public class ResultT { private Integer code; private String message; private T data; public static T ResultT success(T data) { ResultT result new Result(); result.code 200; result.message 操作成功; result.data data; return result; } public static T ResultT error(String message) { ResultT result new Result(); result.code 500; result.message message; return result; } }統(tǒng)一的返回格式解決了前后端溝通成本問題。前端axios攔截器只需要判斷code是否為200再決定是走業(yè)務(wù)邏輯還是彈出錯誤提示代碼邏輯會非常干凈。3.2 基于MyBatis-Plus的通用CRUD服務(wù)封裝MyBatis-Plus這個框架最大的價值不是幫你寫SQL而是幫你省掉那些無狀態(tài)的單表增刪改查代碼?;贐aseMapper接口你不需要寫任何SQL就能完成單表的插入、更新、條件查詢、分頁查詢。但如果每個Service都重復(fù)寫一套selectList、insert、updateById那也沒有真正省事。我的做法是封裝一個通用Service接口和實現(xiàn)類把常見的CRUD操作抽象出來。這個思路在項目里效果非常明顯六個業(yè)務(wù)模塊的Service層加起來不到兩百行業(yè)務(wù)代碼。public interface CommonServiceT { boolean save(T entity); boolean update(T entity); boolean removeById(Long id); T getById(Long id); ListT list(WrapperT queryWrapper); IPageT page(PageT page, WrapperT queryWrapper); }通用實現(xiàn)類基于IServiceT來做業(yè)務(wù)模塊的Service只需要繼承這個通用實現(xiàn)類再補(bǔ)充各自獨有的業(yè)務(wù)方法即可。值得注意的是通用CRUD雖然方便但只適合單表簡單操作。多表關(guān)聯(lián)或復(fù)雜統(tǒng)計我會在mapper里寫自定義SQL使用Select注解或XML文件實現(xiàn)。千萬不要所有業(yè)務(wù)都用通用CRUD硬套比如物資出庫時要同時扣減庫存并新增出入庫記錄這種就必須用事務(wù)方法處理。3.3 分頁查詢的正確打開方式MyBatis-Plus分頁需要先配置分頁插件這個步驟容易漏漏了之后你會發(fā)現(xiàn)page方法返回的數(shù)據(jù)永遠(yuǎn)是全量的。Configuration public class MybatisPlusConfig { Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }配置完成后Service層調(diào)用分頁前端只需要傳遞當(dāng)前頁碼pageNum和每頁條數(shù)pageSize兩個參數(shù)即可。分頁插件會自動生成count查詢和limit語句你不需要手動寫SQL。除了分頁MyBatis-Plus的LambdaQueryWrapper也很好用。比如做人員列表的條件查詢姓名和狀態(tài)都可能為空用條件構(gòu)造器配合StringUtils.hasText()判斷就能避免拼接SQL時空條件的坑。LambdaQueryWrapperIsolationPerson wrapper new LambdaQueryWrapper(); wrapper.like(StringUtils.hasText(personName), IsolationPerson::getName, personName) .eq(personStatus ! null, IsolationPerson::getStatus, personStatus) .orderByDesc(IsolationPerson::getCreateTime);用LambdaQueryWrapper還有一層好處就是編譯期能檢查字段名字段寫錯了會直接編譯報錯不會等到運(yùn)行期才告警這一點對開發(fā)效率影響非常大。3.4 登錄鑒權(quán)與角色權(quán)限的控制實現(xiàn)認(rèn)證方案我選了JWT無狀態(tài)方案沒有用Session主要考慮到前后端分離架構(gòu)下Session跨域處理麻煩而JWT天然無狀態(tài)前端存儲token每次請求在請求頭里攜帶即可。流程是這樣用戶登錄成功后后端生成token返回給前端前端后續(xù)請求在請求頭中加入Authorization: Bearer token后端攔截器解析token獲取用戶ID和角色放行或拒絕請求。生成token我用的是hutool工具包的JWTUtil省去手寫JJWT的繁瑣代碼。token里只放user id和role兩個字段過期時間設(shè)置為24小時。public class JwtUtils { private static final String SECRET your-secret-key; public static String generateToken(Long userId, String role) { return JWT.create() .setPayload(userId, userId) .setPayload(role, role) .setExpiresAt(DateUtil.offsetHour(new Date(), 24)) .setKey(SECRET.getBytes()) .sign(); } public static JWTValidator validateToken(String token) { return JWTValidator.of(token).validateAlgorithm(JWTSignerUtil.hs256(SECRET.getBytes())); } }權(quán)限控制通過攔截器實現(xiàn)攔截所有/api/**請求白名單放行登錄接口。攔截器里解析token后把用戶信息放入ThreadLocal后續(xù)Service層就能直接獲取當(dāng)前操作人是誰。說實話JWT的坑也有。最典型的問題是token無法主動失效如果用戶修改了密碼舊token在24小時內(nèi)仍然有效。我的解決方案是引入一個token_version字段用戶修改密碼時版本號加1JWT中攜帶版本號攔截器對比數(shù)據(jù)庫中的版本號不一致就拒絕訪問。這個設(shè)計在文檔里沒有但我覺得對于真實交付系統(tǒng)來說很必要。3.5 核心業(yè)務(wù)狀態(tài)流轉(zhuǎn)的實現(xiàn)隔離人員從登記到解除狀態(tài)流轉(zhuǎn)必須嚴(yán)謹(jǐn)。我的設(shè)計是狀態(tài)字段加上操作時間的聯(lián)動。登記入住時如果房間為空閑就同時執(zhí)行三個操作更新人員狀態(tài)為隔離中更新房間狀態(tài)為占用寫入一條操作日志。這三個操作必須在一個事務(wù)里否則就會出現(xiàn)人員已登記但房間沒被占用的數(shù)據(jù)不一致問題。Transactional(rollbackFor Exception.class) public ResultVoid checkIn(CheckInRequest request) { // 校驗房間狀態(tài) Room room roomMapper.selectById(request.getRoomId()); if (!FREE.equals(room.getStatus())) { return Result.error(該房間當(dāng)前不可用); } // 登記入住 IsolationPerson person new IsolationPerson(); person.setName(request.getName()); person.setRoomNo(room.getRoomNo()); person.setStatus(1); person.setCheckInTime(LocalDateTime.now()); isolationPersonMapper.insert(person); // 占用房間 room.setStatus(OCCUPIED); roomMapper.updateById(room); // 寫日志 OperationLog log new OperationLog(); log.setContent(人員【 person.getName() 】入住房間【 room.getRoomNo() 】); operationLogMapper.insert(log); return Result.success(null); }Transactional注解強(qiáng)調(diào)了事務(wù)邊界。如果這里不加事務(wù)第二步房間更新失敗后第一步已經(jīng)寫入了數(shù)據(jù)庫后面再做解除隔離、統(tǒng)計報表數(shù)據(jù)就會錯亂。這類狀態(tài)型業(yè)務(wù)一定要把事務(wù)放在Service層在Controller層加事務(wù)注解是無效的因為事務(wù)要通過Spring代理生效Controller交給Service調(diào)用的入口在代理對象內(nèi)部多層的調(diào)用鏈容易出現(xiàn)代理失效。解除隔離的流程同理需要同時更新人員狀態(tài)為已解除、房間狀態(tài)為消殺中、生成解除記錄。我把解除邏輯和登記邏輯做了對稱設(shè)計保證狀態(tài)流轉(zhuǎn)閉環(huán)。4. 前端實現(xiàn)Vue3 Element Plus怎么把后臺頁面做順手4.1 Vite初始化與項目目錄劃分前端我用Vite創(chuàng)建Vue3項目命令是npm create vitelatest isolation-admin -- --template vue。選Vite不選webpack的原因很直接Vite的開發(fā)服務(wù)器冷啟動幾乎秒開熱更新速度也快Vue3官方推薦的腳手架就是Vite。項目目錄結(jié)構(gòu)我按后端模塊做了對應(yīng)劃分views下面每個模塊一個文件夾每個文件夾里放index.vue和對應(yīng)的子組件。這樣維護(hù)起來非常直觀后端的接口路徑和前端頁面的目錄結(jié)構(gòu)一一對應(yīng)。src/ ├── api/ # 接口請求封裝 ├── assets/ # 靜態(tài)資源 ├── components/ # 通用組件 ├── router/ # 路由配置 ├── stores/ # Pinia狀態(tài)管理 ├── views/ # 頁面組件 │ ├── login/ │ ├── dashboard/ │ ├── person/ │ ├── room/ │ ├── health/ │ ├── material/ │ └── notice/ └── utils/ # 工具方法4.2 路由守衛(wèi)與權(quán)限控制后臺管理系統(tǒng)的路由不能隨便訪問沒登錄的人直接訪問首頁必須被攔截跳轉(zhuǎn)到登錄頁。這個邏輯放在路由守衛(wèi)里實現(xiàn)。router.beforeEach((to, from, next) { const token localStorage.getItem(token) if (to.path /login) { next() } else if (!token) { next(/login) } else { next() } })除了登錄狀態(tài)角色權(quán)限我用了前端按鈕級控制。比如只有管理員能看系統(tǒng)用戶管理頁面醫(yī)護(hù)人員只能看到健康管理和自己的工作臺。方案是在Pinia的userStore里存當(dāng)前用戶的role然后頁面上通過v-if判斷是否渲染特定按鈕或菜單項。后端的接口也要做同樣的權(quán)限校驗前端控制只是提升體驗真正保證安全的是后端。4.3 Axios封裝與接口管理的設(shè)計思路前端請求必須有統(tǒng)一的攔截器這是我在項目里花時間最多但收益最大的部分。攔截器主要做三件事請求頭注入token、響應(yīng)統(tǒng)一處理、錯誤統(tǒng)一提示。const service axios.create({ baseURL: /api, timeout: 10000 }) service.interceptors.request.use(config { const token localStorage.getItem(token) if (token) { config.headers.Authorization Bearer ${token} } return config }) service.interceptors.response.use(response { const res response.data if (res.code 200) { return res } else { ElMessage.error(res.message) return Promise.reject(new Error(res.message)) } }, error { if (error.response error.response.status 401) { localStorage.removeItem(token) router.push(/login) } else { ElMessage.error(網(wǎng)絡(luò)請求異常請稍后重試) } return Promise.reject(error) })這里重點說下401處理。JWT過期后后端攔截器會返回401狀態(tài)碼前端此時要做的就是清掉本地token并跳回登錄頁。如果不在這個統(tǒng)一攔截器里處理那每個頁面都要單獨判斷登錄失效代碼量會成倍增加。統(tǒng)一攔截器一次性解決這個問題這也是后端返回狀態(tài)碼要統(tǒng)一的原因。接口管理上我把每個接口導(dǎo)出為獨立的函數(shù)頁面上只關(guān)心中間調(diào)用邏輯不關(guān)心URL拼接。這種把接口層、頁面組件層、狀態(tài)管理層分離的做法在系統(tǒng)功能擴(kuò)展時會非常受益。比如以后后端接口地址變了只需要改api目錄下對應(yīng)文件就行頁面代碼完全不用動。4.4 核心頁面的交互設(shè)計以人員登記與健康上報為例人員登記頁面是這個系統(tǒng)里最復(fù)雜的表單。字段有姓名、證件號、手機(jī)號、來源地、房間選擇、計劃解除時間。表單驗證直接用Element Plus的表單校驗規(guī)則手機(jī)上必須符合11位數(shù)字證件號按身份證格式做正則校驗。房間選擇用級聯(lián)選擇器實現(xiàn)先選樓棟再選樓層最后選具體房間。關(guān)鍵點是房間下拉框的數(shù)據(jù)應(yīng)該只顯示空閑狀態(tài)的前端實時請求房間列表根據(jù)status字段過濾。房間列表數(shù)據(jù)量一般不大直接查詢?nèi)吭僭谇岸诉^濾也能接受但更標(biāo)準(zhǔn)的做法是后端提供room/freeList接口只返回空閑房間。健康上報頁面的重點在于連續(xù)記錄。前端做成一個日期選擇器加表單的結(jié)構(gòu)用戶選擇日期填報體溫、是否咳嗽、是否乏力。后端保存時會自動關(guān)聯(lián)當(dāng)前人員和登錄用戶不需要前端傳用戶ID。這個細(xì)節(jié)很重要如果前端能把用戶ID傳給后端攻擊者就能偽造別人的健康記錄。所以后端一定要從token里取用戶信息不能相信前端傳過來的任何用戶標(biāo)識。數(shù)據(jù)統(tǒng)計頁面我用了ECharts繪制體溫趨勢折線圖和每日新增隔離人員柱狀圖。ECharts的Vue3封裝庫叫vue-echarts使用起來非常方便。要注意的是ECharts圖表的容器必須有明確高度否則圖表初始化后高度為0什么都看不到。這個是ECharts最常見的坑比配置項出錯還多。4.5 前端聯(lián)調(diào)的跨域問題處理開發(fā)階段前端跑在5173端口后端跑在8080端口兩者之間跨域。最方便的方案是在Vite的配置文件里配代理而不是在后端開CORS。代理的好處是前端請求的URL是相對路徑后面部署到同一域名下時不需要改任何代碼。server: { proxy: { /api: { target: http://localhost:8080, changeOrigin: true } } }后端也可以配置CorsFilter但我在項目里還是推薦用Vite代理。原因很簡單開發(fā)環(huán)境用代理生產(chǎn)環(huán)境把前端打包后的dist目錄和后端jar包放在一起由SpringBoot統(tǒng)一提供靜態(tài)資源服務(wù)天然就沒有跨域問題。前后端分離部署另說但課程設(shè)計和畢設(shè)項目一般都部署在一臺機(jī)器上代理方案最省心。5. 環(huán)境準(zhǔn)備與部署實測記錄5.1 MySQL8.0安裝與初始化記錄我這次用的是在Docker中安裝MySQL8.0的方式部署起來非常干凈。Docker安裝MySQL8.0的關(guān)鍵參數(shù)是端口映射、root密碼、數(shù)據(jù)目錄掛載。docker run -d \ --name mysql8 \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORDyourpassword \ -e TZAsia/Shanghai \ -v /opt/mysql-data:/var/lib/mysql \ mysql:8.0這個命令有幾個值得注意的地方。-e TZAsia/Shanghai指定時區(qū)不加的話MySQL默認(rèn)使用UTC時區(qū)這樣會導(dǎo)致數(shù)據(jù)庫存儲的當(dāng)前時間和北京時間差8個小時。數(shù)據(jù)目錄掛載到宿主機(jī)是為了容器刪除重建時數(shù)據(jù)不丟失。當(dāng)然如果你本機(jī)已經(jīng)裝了MySQL直接用本機(jī)的也可以。我的建議是裝原生版還是Docker版看你自己情況關(guān)鍵是數(shù)據(jù)庫版本必須是8.0因為MyBatis-Plus的DbType.MYSQL和driver的配置都跟版本強(qiáng)相關(guān)。初始化數(shù)據(jù)庫時執(zhí)行建表腳本然后記得確認(rèn)用戶表權(quán)限。如果用的是root用戶連接一般沒問題但如果新建了專門用戶需要授權(quán)CREATE USER isolation% IDENTIFIED BY isolation123; GRANT ALL PRIVILEGES ON isolation_db.* TO isolation%; FLUSH PRIVILEGES;5.2 后端配置文件實測清單后端配置文件application.yml是項目能跑起來的命脈我把關(guān)鍵配置項逐項列出來。首先是數(shù)據(jù)源配置MySQL8.0的driver-class-name是com.mysql.cj.jdbc.Driver不是老版的com.mysql.jdbc.Driver寫錯就啟動失敗。URL里必須帶serverTimezoneAsia/Shanghai否則連接會報時區(qū)錯誤。server: port: 8080 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/isolation_db?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/ShanghaiuseSSLfalse username: root password: yourpassword jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: Asia/Shanghai mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: logic-delete-field: deleted logic-delete-value: 1 logic-not-delete-value: 0mybatis-plus.configuration.log-impl這里我開了SQL日志打印開發(fā)階段能直觀看到每條執(zhí)行的SQL語句排查問題非常方便。等打包上線前可以注釋掉避免日志刷屏。邏輯刪除配置也很關(guān)鍵deleted字段配合邏輯刪除配置后MyBatis-Plus在執(zhí)行delete操作時會自動轉(zhuǎn)為update語句更新deleted為1查詢時會自動加上deleted0條件。這個機(jī)制避免了物理刪除導(dǎo)致的歷史數(shù)據(jù)無法追溯問題。5.3 前端打包與服務(wù)集成開發(fā)完成后前端需要打包成靜態(tài)資源然后放到后端工程里統(tǒng)一提供服務(wù)這樣整個系統(tǒng)只需要啟動一個Java進(jìn)程就能訪問。npm run build構(gòu)建完成后dist目錄下就是打包產(chǎn)物。把dist目錄里的內(nèi)容復(fù)制到SpringBoot項目的src/main/resources/static目錄下重新打包后端即可。mvn clean package -DskipTests java -jar target/isolation-system.jar啟動成功后訪問http://localhost:8080就能看到登錄頁面。前端靜態(tài)資源交給SpringBoot托管后路由需要做處理。Vue Router默認(rèn)使用history模式直接訪問/person會返回404。我的做法是使用hash模式URL帶#號雖然不太美觀但最大的好處是不需要額外的服務(wù)器配置。畢設(shè)答辯階段演示系統(tǒng)時hash模式是最穩(wěn)妥的選擇。部署過程中實測需要特別留意的就是jar包運(yùn)行時不能直接雙擊打開要用命令行java -jar啟動。如果想在服務(wù)器后臺運(yùn)行用nohup java -jar target/isolation-system.jar app.log 21 把日志輸出到文件中方便排查問題。6. 常見問題與排查技巧實錄6.1 MySQL8.0連接報錯實戰(zhàn)排查我在聯(lián)調(diào)階段遇到最多的問題就是數(shù)據(jù)庫連接失敗??偟膩碚f有三類錯誤最典型。第一類是Public Key Retrieval is not allowed解決方案是連接URL加allowPublicKeyRetrievaltrue另外把useSSLfalse也加上測試環(huán)境能省很多麻煩。第二類是Unknown database isolation_db說明數(shù)據(jù)庫沒創(chuàng)建或名字拼錯在SQL客戶端中執(zhí)行SHOW DATABASES;確認(rèn)。第三類是Access denied for user說明用戶名密碼錯誤或授權(quán)不到位重新授權(quán)即可。時區(qū)錯誤也是高頻問題錯誤信息里包含serverTimezone字樣。出現(xiàn)這個問題說明連接URL里沒帶時區(qū)參數(shù)在上面5.2節(jié)的配置里已經(jīng)解決了。6.2 MyBatis-Plus的常見誤用第一個坑是分頁插件沒配置查出的數(shù)據(jù)不是分頁結(jié)果而是全表數(shù)據(jù)。這屬于配置遺漏加上PaginationInnerInterceptor就好了。第二個坑是邏輯刪除配置了但實體類字段名不匹配提示找不到deleted字段檢查實體類是否標(biāo)注了TableLogic注解或全局配置中l(wèi)ogic-delete-field是否和實體字段名一致。第三個坑是條件構(gòu)造器直接new QueryWrapper后暴露SQL注入風(fēng)險我建議統(tǒng)一使用LambdaQueryWrapper或LambdaUpdateWrapper用方法引用代替字符串列名既安全又能編譯期發(fā)現(xiàn)問題。還有一個小技巧MyBatis-Plus的selectCount方法傳入null參數(shù)表示查詢?nèi)淼珱]人管的話清空表數(shù)據(jù)很危險。我對這個項目中所有統(tǒng)計類操作都顯式傳入條件構(gòu)造器而且加上了deleted0條件避免把邏輯刪除的數(shù)據(jù)也算進(jìn)去。6.3 前后端跨域與鑒權(quán)聯(lián)調(diào)問題前端頁面打開后接口報跨域首選方案就是檢查Vite的proxy配置確認(rèn)target地址是否正確端口是否對應(yīng)后端實際啟動端口其次確認(rèn)后端Controller的RequestMapping前綴是否和proxy的/api前綴一致不一致會導(dǎo)致代理轉(zhuǎn)發(fā)后404。另外還要檢查SpringBoot的context-path設(shè)置如果配置了context-path后端接口的實際訪問路徑會變長代理也要相應(yīng)調(diào)整。登錄接口調(diào)用成功但拿不到用戶信息優(yōu)先檢查后端攔截器排除名單是否寫對。如果攔截器攔截了/api/user/login登錄請求直接401那問題就很明顯。JWT解析報錯通常是密鑰不一致導(dǎo)致的檢查前端拿到的token和后端生成token時用的密鑰是否匹配。6.4 前端開發(fā)調(diào)試的那些坑Vue3開發(fā)過程中最容易出問題的是響應(yīng)式數(shù)據(jù)的誤用。如果你的數(shù)據(jù)在頁面中修改后視圖不更新多半是用普通變量代替了ref或reactive這是Vue3響應(yīng)式原理的基本功。另外在Composition API中直接在setup函數(shù)里寫setTimeout并修改數(shù)據(jù)對象屬性不需要額外處理響應(yīng)式但如果用了解構(gòu)賦值把響應(yīng)式對象拆成普通變量那修改就失效了。表格數(shù)據(jù)加載不出來時先用瀏覽器開發(fā)者工具的Network面板看接口是否返回正常數(shù)據(jù)重點看后端返回的data字段結(jié)構(gòu)是否符合el-table的prop綁定。常見錯誤是后端返回字段名是createTime前端綁定的是create_time兩者不一致導(dǎo)致表格列全空。Element Plus組件庫版本要注意和Vue版本匹配。Element Plus不支持Vue2必須用Vue3項目。如果引入后頁面空白且控制臺報組件未注冊錯誤檢查是否忘記了app.use(ElementPlus)。7. 這套源碼里的隱藏價值與后續(xù)擴(kuò)展建議說實話這套系統(tǒng)最值得研究的部分不是功能有多花哨而是它完整展示了SpringBoot2 Vue3從零搭建一個后端管理系統(tǒng)的標(biāo)準(zhǔn)流程。表結(jié)構(gòu)設(shè)計、統(tǒng)一結(jié)果封裝、通用CRUD抽象、JWT鑒權(quán)、前端路由守衛(wèi)、Axios攔截器這些都是以后不管做什么管理類系統(tǒng)都會反復(fù)用到的技術(shù)點。把這套源碼吃透你就能舉一反三。如果后續(xù)想給這個項目加分我個人建議優(yōu)先擴(kuò)展三個方向。第一個是Excel導(dǎo)入導(dǎo)出功能人員批量登記、健康記錄導(dǎo)出用EasyExcel就能實現(xiàn)這個功能在答辯演示時非常出效果。第二個是ECharts大屏展示把隔離人員趨勢、房間占用率、物資消耗匯總做成可視化看板整個系統(tǒng)的檔次一下就上去了。第三個是Redis緩存優(yōu)化給用戶權(quán)限和房間列表加上緩存提升接口響應(yīng)速度。技術(shù)學(xué)習(xí)這塊做完整個項目之后我的最大感受是一定要自己動手把整個流程走通一遍??磩e人分享的crud封裝、分頁配置、jwt攔截器看的時候覺得很簡單真正動手時才發(fā)現(xiàn)一堆細(xì)節(jié)問題。特別是事務(wù)邊界放在哪一層、Vite代理怎么配、靜態(tài)資源如何統(tǒng)一部署這些問題只有自己操作一次才能真正記住。最后再分享一個小技巧項目開發(fā)過程中每完成一個模塊記得把運(yùn)行效果截圖保存下來。無論是寫課程設(shè)計文檔還是答辯PPT這些截圖都是最有說服力的素材。另外數(shù)據(jù)庫設(shè)計文檔用Navicat或DataGrip導(dǎo)出一份Word版連注釋一起導(dǎo)出這個文檔比你自己重新畫表結(jié)構(gòu)快得多而且格式規(guī)范導(dǎo)師看了也會覺得你做得扎實。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91一区二区三区蜜桃| 久久久久久大| 97久久国产精品女不卡| 99re这里| 日韩99神马视频播放| 一级久久久久久久久久久| 欧美影院一区二区三区| 一区二区视频在看| 骚货 中文字幕 av| 美日韩在线不卡人妻| 99精品无码| 韩国黄片aaaa| 日韩高清黄片| 免费AV中文网在线观看| 伊色久人大在线| 嗯,啊。舔我逼| 91中文精品日韩欧美在线| 欧洲色色| 久久久工口| 亚州国产精品乱| 婷婷AV一区二区三区| 中国一级操逼视频| 亚洲91在线播放影院| 秋霞Av理论一级在线| 人妻铁牛TV| 蜜臀久久99精品久久久久电影| 亚洲国产中文字幕| 欧美综合 站| 亚洲无限观看| 激情文学 亚洲图片| 日韩少妇无吗| 青草园大香蕉| 久久久久久中文| 国产自产22区| 91情色在线| 97美日韩视频| 中文字幕蜜乳av| 日韩兔费看黄片| 国产精品午夜AV完会免费| 人妻久久一区二区三区| 亚洲av综合伊人久久| 69国产对白刺激| 影音先锋每日最新资源在线观看 | 中文字幕天堂在线| 国产强奸乱伦xd| 69少妇一区二区| 免费黄色片。| 色色婷婷五月天| 一区二区三区在线资源| 亚洲污一污二| 99AV| 蜜臀中文字幕| 成 人片 黄色大片| 欧美熟女少妇| 欧美狠狠操| 欧美日韩淫加| 欧美亚洲色的图| 三及片网站| 久久久久国产精品久久久| 一区二区中文| 日韩色欲久久一二三四区| 久久精视频美日韩在线视频| 国产四虎在线| 97超碰超欧美。| 免看60秒涩涩视频| 精品久久久av无码免费| 天天操夜夜嗨| 99在线精品观看99| 久久久久久中文版| 蜜臀久久99精品久久久久久成人小说| 无码人妻精品酒店| 女人喷水视频在线观看| 欧美日日夜夜| 亚洲激情久久久伊人综合| 欧美精品在线观看| 91劲爆| 狠狠干91| 丝袜美腿欧美| 性感美女91影视| 粉嫩av平台| 91天堂色男人的天堂| 三级片大波波| 国产性爱在线视频一区二区| 99色视频| 少妇色欲综合网2| 久久久久久九九九九| 无码WWW免费视频网站| 日韩啪啪啪啪啪| 东京热熟女亚洲视频网站| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 天天干天天中出av| 成人免费性爱视视| 日韩乱码Av| 97超碰欧美手机在线| 26uuu成人影片| 色婷婷狠狠| 91国产美女丝袜足交精品视频| 久久蜜桃一区二区| 333kkkk·亚洲com久久| 欧美激情一区二区| 国产精品麻豆免费视频| 99热色这里只有精品| 亚州,欧美在线| 中文字幕精品一区欧美| 久久精品高清无码一区| 免费观看国产小粉嫩喷水精品午| 九九九久久久久| 日韩一级二级三级免费看完整版| 91亚·色| 在线亚洲欧美| 欧美人妻二区三区| 天天色图| 91女神在线视频| 亚洲性网| 中文字幕人成乱码熟女香港| 白丝AV网站| 日本影视久久免费| 欧美 传媒 麻豆 日韩 偷拍| 放黄片放3级黄片没穿衣服| 啊啊啊不要好疼视频| 另类欧美色| 色色五月天婷婷| 亚洲欧美日韩不卡人妻| 五月天色图影视| 夜夜精品视频| 亚洲国产剧情少妇激情| www.av在线观看| 久久久国产精品亚洲精品| 中国一级操逼视频| 亚洲人妻爽爽爽| 男人天堂2012| 日本视频在线中文字幕| 97超碰天天| 国产美女销魂在线观看不卡| 大香蕉在线SuP| 亚洲精品一区二区三区在线播放| 91久热| 九色婷婷| 永久电影三级在线观看| 神马久久久久久久久| 九九亚洲视频| 亚洲精品人妻在线| 日韩人妻无码不卡网站| 国产免费久久精品99re韩国| 日本99视频| 亚洲有薄码区日本系列中文字幕| 欧美不卡五十路| 又摸又舔在线观看网站| 国产性爱欧美性爱在线| 92午夜免费福利视频| 欲综合网| 377p欧洲日本亚洲大胆| 啊啊在线| 天天躁日日躁AAAXX| 五月天九九日国产精品一区二区三区| 少妇国产不卡| www.久久最新地址| 青青青在线高清视频在线一二三四区| 日本九九久久99播| 少妇高潮对白在线观看| 亚洲精品99999| 一区二区精品更新提醒| 成功精品影院| 岛国激情视频在线观看| 亚洲成人ab| 97一本大道亚洲一区| 十八禁视频网站| 亚洲日韩av专区无码| 久久日本熟女精品一区| 一二三四免费视频| 影音先锋视频在线| 97色97干| 日本在线999| 91新在线欧美| 九九热九九热| 精品国产久热在线观看| 操逼日批| 大香蕉www.超碰| 婷婷爽人人婷婷爽视频| 夜夜国自区| 久久久熟妇熟女国产| 99操99| 精品人妻av在线播放| 久久久久少妇| 精品十八在线观看| 日韩精品影视| 伊人色综合欧美| 插老姨肥穴| 欧美日韩情色一区二区| 激情综合久久| 久久五月婷| aaaa少妇高潮大片| 26uuu国产免费观看| 激情小说图片亚洲首页| 无码久久亚洲高清,| 大鸡巴久久| 深夜激情| 亚洲天天天| 久久久内射良家| 97在线观视频免费观看| 亚洲激情久久久伊人综合| 国产自产22区| 69一区二区三区 | 78久久| 中文字幕人妻丝袜乱一区三区| 操死我了啊啊啊| 久草草一二三四区久久| 蜜桃精品一区二区三区久在线| 香港日本韩国人妇99www.wccm20| 日日黄色三级网站| 国产精品电影推荐| 亚洲在线观看| 精品无码久久| 日韩三级在线观看网站| 天天摸夜夜添无码小视频| 精品无码久久久久久国产浪潮| 爱妃国产亚洲视频中文字幕| 大香蕉强奸乱伦| 精品毛片久久久精品毛片| 午夜精品久久久久久久99蜜桃一| 婷婷色色网| 超碰三级秋霞| 亚洲av热热色| 超碰97在线中文| 九九久久国产精品怡红院| 91中出在线| 91青青草| 91精品女厕偷拍视频| 秋霞免费AV| 99热综合| 日本精品国产视频| 四虎在线观看网站| 美女网站91| 成人精品久久久午夜福利| 亚洲欧美日韩免费电影| 久久HD| 中文字幕乱在线伦视频中文字幕乱码在线| 亚洲综合在线视频| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 亚洲色图第四色| 96国产精品| 亚洲AV无码乱码| 免费啪啪av| 99久久精品国产高潮| 色妹子A V| 亚洲精品欧洲精品| 天天夜夜rb| 乱伦熟女论坛| 大香蕉九九| 99九九久久| 综合网亚洲1| 国产高清自拍视频| 凹凸视频特色日本特黄| 伊人991| 亚洲丨在线| 91天天看| 丁香激情五月| 久久97视频| 国产精品一区二区亚洲人成毛片| 嗯嗯,啊啊,国产精品| 精品成人女人久久| 国产精品成久久久久午夜午夜| 夜嗨影院| 伊人久久亚洲中文字幕不卡| 日韩激情毛片一级久久久| 人妻久久久| 天美一区在线| 国产精品无码成人精品| 色玖玖| 精品女同一区| 强奸乱伦AV网站| 熟妇视频一区二区三区在线观看| 78精品| 亚洲中文日韩欧美大香蕉视频| 天天看片天天爽| 久久久亚洲熟妇资源| 久久精品国内Av熟女高清| 91chinese在线| 操少妞在线视频| 91精品国产91久久福利| 久久女人一区二区三区| 91色夜| 大伊香蕉在线视频免费| 九九九九97| 成人无码在线超碰网| 9九九九九视频在线观看| 日韩精品人妻中文字幕不卡乱码| 国产粉嫩出水在线播放| 97草草| 手机在线播放国产福利| 欧美亚洲涩涩| 强奸乱伦大香蕉| 欧美一区二区传媒| 高清无码一区二区三区| 91综合国产精品| 国产极品精品美女视频| 日韩欧美天天爽爽爽天天爽爽| ,成人免费啪啪视频| 丰满人妻一区二区三区在线| 波多野结衣被操50分钟免费视频| 九九九精品一区二区无码| 尤物网址| 色亚州人久干视频在线观看免费版| 日本成人A片免费看| 精品国产72| 日韩欧美操逼xxx| 欧美中文字幕一区 | 天天操综合网| 国产成人在线观看网址| 97爱亚洲综合色| 成人小说视频在线精品欧美| 丝袜视频网国产90| 大香蕉手机视频| 欧美激情专区| 美女大乳久久久久久久女人18| 74成人在线| 亚洲十八禁止| 久久久中文| 在线综合网| 青青草白白色| 探花精品视频| 无码外流操逼视频| 97在线日韩中文字幕| 久久怡红院| 日韩欧美性吧婷婷乱伦大香蕉| 美女淫穴| 久久麻豆一区二区| 久久天天艹| 久久精品中文字幕女同| 后X久久| 逼操网站| 国产一区在线看| 色 婷97| 亚洲色 国产 欧美 日韩| 亚洲欧美日韩不卡人妻| 少妇三P| 立川理惠无码一区二区| 私人尤物在线精品不卡| 亚洲风情综合网| 中文字幕日产av人| 色爱综合网| 日韩免费中文字幕视频| 久久久久久裸体| 国产欧美伊人| 亚洲精品日日夜夜52| 国产精品不卡高清在线观看| 天干天干天干天天做| 欧美一区二区传媒| 伊人成人中文字幕久久网| 操逼www.| 日欧操屄| 日本视频在线中文字幕| 久热伊人| 亚洲清纯唯美| 色老牛| 欧插网站| 人妻碰碰碰碰碰碰| 天天做天天爱天天高潮| 91天堂色男人的天堂| 夜夜草天天| 欧美97在线欧| 精品人妻一区二区三区不卡断| 日本五十路在线| 爆乳免费黄网站| 日本3级一区二区免费| 国产99精品一区二区三区免费| 啊啊啊啊啊啊好多水| 九九九九一区| 大香蕉伊然在亚洲91| 激情文学欧美| 成人无码专区精品视频| 国产亚洲人妻综合日韩 久久| 久久久99免费| 美国日韩黄片| 国产自制av蜜乳| 欧美综合另类| 亚洲色人| 国产AV色黄看到爽| 成人无遮挡毛片免费看| 最近2018中文字幕在线高清第一页| 97在线免费视频观看| 精品人妻久久久久一区二区三区| 91女日逼| 欧美色图第一页| 久久老熟女| 欧洲亚洲人妻无码高清久久三区四区| 亚洲天天天| 怡红院成人视频| 久草综合网| 黑人性欧美| 亚洲人精品久久久| 综合欧美亚洲| 老司机天天操| 综合网亚| 九九免费影片| 日韩精品 欧美激情| 91精品国产综合久久久蜜臀酒店| 久久少妇| 18禁精品网站在线看| 欧美成人AⅤ大片在线观看| 金莲网址| 国产又爽又黄| 男人天堂站| 成人熟女区| 超碰97久久国| 超碰色97| 亚洲国产一区二区入口| 国产67194| 69人妻人人揉人人躁人人精品| 九九九九九九九九九九九免费国产| 偷拍网站久久男女男| 美女97超碰| 91视频综合在线| 欧美色97| 91人精品妻入口| 啪啪资源网| 99综合视频| 久久色激情一区二区三区| 新97国产超碰| 国产精品另类| 久操操AV电影| 99热超碰| 极品后入免费视频| 超碰九九| 啪啪资源网| 九九在线视频| 中文字幕免费看| 91中文字幕| 国内毛片婷婷六月色| 操操啪| 99久热精品99re6热| 密臀在线视频| 最新中文字幕av| 天天在线91| 国产家庭乱伦表演| 大香蕉伊人久久| 日韩78m视频| 天美传媒婬乱| 色五月婷婷中文字幕| 中文字幕久久精视频久久大全| 天天色综合影视网| 亚洲人妻在线一区| 麻豆性爱视频在线播放| 欧亚日韩中文在线| 天天天天操| 黑人精品久久97| 人妻精品视频一区二区三区| 国产精品青草综合久久| 国产亚洲精品美女| 亚洲精品国产专区在线观看| 日日夜夜青青草母狗| 美欧色综合| 日本一区二区不卡精品| 天天澡天天爽日日av| 色吧 综合| 狠狠操狠狠爱| 欧美同性恋 的搜索结果 - 91n| 色婷婷六月丁香七月婷婷| 无码色| 加勒比海人人操超碰在线| 操操操日本的逼| 大香蕉99热| 丁香九月婷婷| 日韩精品一二三四| 凌辱美少妇久久aV| 狠狠干,狠狠操| 97chaopenrihan| 欧美黑人精品一区二区| 91九色丰满高潮| 夜嗨影院| 国产91丝袜 在线播放| 色综合久久888| 少妇高潮一区二区三区在线| 天天弄天天操| 亚洲啪啪综合?v一区综合精品区| 天天干一区二区| 国产精品白丝| 国产高清不卡视频| 成年女人黄网站| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 日韩精品影视| 91粉嫩萝控精品福利网站_精品影音先锋国 | 无码天天操| 中文字幕人乱码中文字的预防方法| 亚洲自拍天堂| 夜夜精品视频一区二区| 亚洲熟妇自偷自拍另欧美| 91啪啪| 中日韩久久人妻一区二区| 人人做天天爱| 亚洲精品熟妇1区2区3区。| 五月丁香综合网| 日日骚AV| 国产精品天干天干综合网麻豆 | 黑人综合色| 色九区| 欧美男人天堂| 亚州高清av| 操美女高潮抽搐白浆| 亚洲日韩电影| 久草精品一区 | 日本高清一本二本免费不卡| 98一区二区精品| 秋霞一集毛片观看| 日本性一区| 久久久无码国精品无码三区三区| 亚洲熟女精品| 精品九区| 久久久久久久久久久久欧美日| 99ri精品| 美女操逼A A| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 综合少妇网| 亚洲综合影片| 大香蕉九九| 中文字幕日韩精品久久| 欧美天天干| 国产久久一区二区| 禁片 高清 在线观看视频网站| 中文字幕日韩电影人妻| 日本不卡中文| 亚洲伊人久久精品影院| 旡码电影特区| 色区久久| 成人无码影片视频在线| 国产狂喷潮在线精品| 黄色成年| ...日韩成人一区二区三区字幕| 日本曲间由美性生活片| 人人操人人狠狠操| 国产精品女生av| 男人的天堂网页| 爱丝福利| 亚洲综合69| 中文字幕少妇色 | 怡红院久久老司机| 日日干夜夜欢| 日韩久久艹| 欧美黑人猛交春色影视大全| 欧美国产日韩清纯唯美| 欧美日韩操逼嗦吊| 人人摸人人干人人拍97| 少妇无码av专区线| 热久久国产| 日韩三级在线观看网站| 欧美综合另类| 日本精品五区| 亚洲天天操| 亚洲色图一区二区三区| 精精品人妻一区二区三区| 久久久成人免费av电影| 久久骚| 熟女网站最新| 91久久国外网| 日韩色女精品| 久操视频在线| 91精品操美女| 亚州欧美在线| 易易A毛视频| 国产精品一区二区三区在线| 97色欧洲| 精品国产乱码久久| 91一区二区三区蜜桃| 国产精品懂色tv影视免费观看| 亚洲图片欧美色| 麻豆精品一区二区三区四区免费观看| 97亚洲精品| 国产精品青青草| 九九成人精品| 能在线播放的国产三级| 午夜福利国产欧美日韩夜夜| 在线视频亚洲无码| www.av家庭乱伦| 翔田千里A片一区二区| 91肉片| 韩国一级做a久久久久| 尤物av网站免费在线播放| 欧美爱爱97| 日本黄大片在线观看视频| 夜夜草我| 黄片无码在线制服| 久久9视频| 精品一区二区三区蜜桃臀赵总 | 裸体美女久久久| 色香伊人| 欧美天天综合在线| 91精品国产91久久福利| 久草网站免费在线观看| 久热婷婷| 加勒比日本在线| 超碰是碰在线观看| 亚洲熟女av中文字幕| a亚洲欧美色欲| 久久91精品国产9丨久久分亭 | 国产午夜福利合集| 精品视频在线观看| 欧美综合娱乐久久| 91黑丝露脚| 亚洲 欧美 另类 日韩 人妻一区| #NAME?| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 欧美高清91| 青娱乐淫乱1314| 日本护士高潮| 嗯阿好爽好紧| 妇女乱色二区| 免费视频在线一区二区不卡| 男男H黄动漫啪啪无遮挡网站| 欧美极品女人的天堂| 福利天堂| 97亚洲精品| 99精品久久久久久久婷婷蜜桃| 四虎AV无码| 9.1小视频| 欧美性爱日韩高清| 丁香五月婷婷五月| 97爱啪| 日韩黄片影院| 亚洲午夜免费狠狠干| 九一综合网| 国产真实子伦对白| 久碰视频| 玖玖资源视频一区二区三区| 尤物黄色在线观看网站| 女人妻一区| 亚洲图片小说欧洲| 亚洲欧美日韩精品久久久一区二区| 少妇被玩视频二三区| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 探花精品 一区二区| av资源在线观看少妇| 亚州久久9| 日本中文字幕不卡视频| 中文字幕第页| 欧美写真视频一区| 色五月婷婷色| 密臀国产在线| 99啪啪视频| 97亚洲国产| 国产99久久99热这里只有精品15| ai欧美亚洲小说| 99re免费视频精品全部| 亚洲 欧美 另类 综合 偷拍| A 天堂| 97爱欧美| 日韩激情毛片一级久久久| 综合网~91综合网| 激情天天视频| 亚洲精品美女操逼| 日韩国产欧美伦理在线| 欧美论理片| 亚洲第2页| 男人的天堂无码| 婷婷丁香五月天综合东京热| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 男人的天堂无码| 丁香六月东京热| 99这里都是精品| 九九探花视频在线观看| 色婷婷日韩精品一区二区三区| 女人被添高潮免费视频| 伊人宅男大香蕉| 五月激情在线| 欧差乱伦二三| 啊啊啊在线观看免费视频| 色在线亚洲视频www| 天天影视之亚洲综合网| 噜噜噜无码AV一级一级久久影院| 久久精品国产亚洲av水密被窝| 久久麻豆一区二区| 激情小说图片亚洲首页| 神马久久69| 国产成人在线观看综合| 91观看 国产白丝| 毛片17S| 岛国毛片手机在线观看| 亚洲色欧| 歐美一級亂黃99在綫精品| 国产精品无码av嫩草| yazhouzaixian| 大奶啊啊好爽| 中国少妇XXXX做受| 一区二区无码视频| 色女网日韩| 亚洲精品aa久久伊人| 亚洲日韩美女丝袜美腿人妻视频| 欧美 青青草| 女人双腿搬开让男人桶| 亚洲 暴爽 AV人人爽日日碰| 91国内外在线| 中文字暮97| 精品久久久久久中文| 99在线精品视频| 亚州综合图片| 蜜臀av在线播放一区二区三区| 狠狠操官网| 一本色道久久综合精品婷婷| 你草精品在线视频| 亚洲精品亚洲人成人网| 久久透逼视频| 人人妻人人爽一区二区三区| 亚州日韩97| 啊啊啊com| 99久久久无码国产精品性男| 人人操人人插 - 百度 - 百度| 九九热只有精品| 欧美色图下一页| 中文字幕日韩综合| 天天躁日日躁XXXXYY| 国产亚洲精品A在线观看下载| 97鸡把在线视频| 超碰97在线色男人??| 国产精品久久久视频| 日韩无码专区| 午夜福利免费精品视频| 无码137片内射在线影院| 91性情| 97中文综合| 色网1| 神马久久网| 人妻密肉在线观看| 色欧美天天| 五月丁香激情综合网| 亚洲国产精品成人无码久久久| 999精品国产高清一区二区| 亚洲精品少妇| 欧美综合网A| 久久亚洲日韩熟女精品| 操逼无毒无码免费视频| 91AV天堂| 国产亚洲日本| 91天射| 久久国模av| 国产乱弄免费在线视频。| 67194无码不卡| 女同亚洲欧美一二三区久久电影| 情侣开房子拍 日韩无码 女的很漂亮| 色啪网| 大香蕉综合| 日本九九九九| 99热66| 天美传媒国产原创中文字幕亚洲欧美另类 | 2025亚洲男人天堂| 国产人伦精品一区二区三区| 97亚洲一区| 啊嗯好大视频在线观看| 国产午夜福利视频在线| 欧美亚综合色图| 成人网欧美风情| 99啪啪| 高清肉丝中文无码| 精彩久久中文| 激情文学亚洲| 嗯嗯啊啊啊好爽| 国产精品操| 欧美夜夜草视频| 中文字幕一区二区三区字幕| 日本性爰一道本| 少妇一区二区三区高速| 日本在线不卡v二区| 精品亚洲国产成人AV制服丝袜 | 91美女精品| 九九九九九九视频免费| 欧美18 在线观看| 成人无码在线超碰网| 嫩草一区二区在线观看| 久久久中文| 性感女人网页在线观看视频| 亚洲色图国产另类| 性高潮久久久| 精品无码秘 人妻一区二区| 一级AV性爱| 亚洲精品国产精品乱码不99| 日本91白丝| 热久日综合| 麻豆天天躁天天揉揉AV| 久久在线观看免费视频| 一牛影视成人片免费| 激情综合五月| 97 超碰 人人做 人人爱| 综合激情一一91| 神马麻豆福利院| 8x福利精品第一福利视频导航| 国产精品久久久久久久久AV大片| 999狠狠综合| 2026国产精品视频| 狼人狠干| 亚洲日韩美女中文字幕乱| 亚洲 图片 综合91| 青青欧美| 99无码狠狠久久| 亚洲成人美女无吗| 精品熟女一区=区三区| chaopen97久久| a亚洲欧美色欲| 综合一区中亚洲国产成人综合精品| 久久久影院| 精品国产乱码久久久久久久| 美女视频尤物网在线看| 很很干很很操| 久久久精品中文字幕麻豆| 亚洲一区二区三区在线激情| 色婷婷网| 欧美亚州色的图| 亚洲欧美高清无码| 开心五月天激情网| 天天爱综合网| 欧美一二三级精品在线| 校园春色制服丝袜中文字亚洲| 天天操天天7| 无码高清操逼网址| 日夜啪电影| 易易A毛视频| 蜜乳性色无码专日粉嫩骚逼AV| 久久男人网| 日日夜夜摸| www五月| 超碰97人人乐| 国产色呦呦| 精品九九淫乱男| .精品人妻一区二区三| 亚码激情| 中文字幕99999| 天天干一干| 插插综合网天天影视网| 国产一区二区在线电影| 9997se| 日韩Va亚洲va欧美Ⅴa久久| 色婷婷综合久久久久中文一区二区| 97综合在线| 极品色社| 96久久久| 嗯嗯啊啊操死我| 国产粉嫩蜜臀av一区二区三区| 欧美.亚洲.另类.丝袜.制服.诱惑| 久久伊人影院| 在线黄页看毛片| 久久超碰97| 日韩女优中文字幕| 欧美极品美女aaaaaa级黄片| 天天干天天日天天射黄色大片 | 一区| 视频国产精品未满十八禁止在线观看| 人妻在线大香蕉| 伊人久久综合影院| 黑人与人妻| 十八禁成人网站在线观看| 欧美激情久久久久| 白嫩国模丰满一二三区| 日韩欧美天堂| 五月香婷婷| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 搡老女人老91妇女老熟女| 97超碰69| 国产最火爆久久国产网站网站| 中文字幕久久精品一区| 精品国产人成在线| av橘色网站| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 亚洲,欧美,综合网| 丁香五月激情啪啪| 亚洲精品久久久久毛片A片拉屎| 久久精品天美| 久久毛卡| 91A欧美电影网站| 欧美有码亚洲中文字幕一区二区三区四区 | 91free福利| 亚洲欧美日韩激情不卡| 情色五月天久久久| 99久久久er直播网址| 婷婷午夜清品久久久久久久性色视频观| 殴美牲| 曰韩精品视频一区二区| 亚州,欧美在线| 亭亭丁香激情| 亚洲国产高清福利视频| 丝袜美腿av女优在线| 超碰99热中文字幕| 久久久久国产无av| 免费观看成人www精品视频| 91丨精品丨国产丨丝袜| 99免费视频| 蜜乳AV一区| 色婷婷一区二区三区久久| 亚洲黄日韩无码专区| 免费a在线播放v| 26uuu成人影片| 四虎免费在线播放| 欧美亚洲丝袜美女电影| 91性高潮久久久久久久久| 中文字幕国产在线天堂| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 少妇二级| 少妇高潮对白在线观看| 日韩成年人性爱视频| 人妻喷水| oumeizonghese,www| 国产天美欧美| 国产成人精品亚洲日本| A片大香蕉在线| 日本不卡在线二区三区| 亚洲一区制服诱惑| 另类av天堂| 精品女人999| 亚洲AV无码乱码在线观看性色| 成人性爱免费播放| 97色综合中文网| 亚洲一二三四区在线免费看视频| 性色国产东北露脸精品视频| 青青操青娱乐| 91操人视频| 3D污黄视频在线观看| .精品人妻一区二区三| 欧亚日韩一区在线| 91N综合网| 久久9999 | 夜色91| 天天夜夜rb| 天天综合网合集91| 青娱乐手机日韩在线视频| 97一区二区蜜臀| 69精品少妇一区二区三区蜜桃| 日本午夜久久电影| av天堂5| 一个人免费HD91视频| 啪啪AV导航| 老司机天天操| 人人妻人人爽 97人人看碰人免费公开视频| 亚洲图片欧美色| 青草一区二区| 精品一区二区三区18| 亚洲色婷婷综合久久一区二区三区| Julia Annxxxxx| 亚洲综合情色| 超碰97亚洲区| 老熟妇一区二区三区啪啪| 91在线丝袜视频| 中 文字幕一区二区三四 五 区日 日 骚 | 亚洲色图综合网| 成人精品视频| 久久久久国产精品人妻aⅴ天堂| 久久宗合亚洲| 黄色一区三区| 中文字幕av一区二区三区人妻少妇| 中文一区二区| 中文字幕av一区二区三区人妻少妇| 91青青在线视频| 久久精品成人| 97超碰9| 日韩亚洲欧美中文字幕| 欧美成年人性爱视频免费观看| 日韩激情电影中文字幕| 免费黄色片。| 九九成人精品| 日韩精品第3页| 久久综合久色欧美综合狠狠 | 欧美日韩性爱电影在线| 精品少妇人妻av久久免费| 国产精品一级片在线看| 国产精品三级视频网站| 天天添天天干电影| 婷婷色香| 中国黄色特级精品一区二区三区片| 天天综合,91入口| 91欧美综合| 欧美激情性久久久久久| 探花一区在线| 九九热视频在线观看| 青青草在线成人视频| 日本999精品| 97国产精品在线观看| 亚洲天天操| 国产av强奸美女| 99在线精品观看99| 日日干日日操五月天伦理视频| 东京热熟女亚洲视频网站| 99re99在线视频| 一级片视频啪啪| 激情接吻视频久久久久久| 91久久精品国产| av东京热男人的天堂| 天美麻豆一区二区三区| 日韩欧美午夜一区二区| 99综合| 中文幕97| 9丨久久九九九| 中文字幕日韩人妻视频一区二区三区| 欧美激情综合| 97视频900| 九九九精品| 国产精品视频白浆免费| 欧美AB在线观看| 亚洲日韩狠狠撸视频| 精品国产91内射久久| 丁香九月激情| 福利在线视频一区二区| 亚洲少妇在线观看| 亚洲综合精品国产一区| 久久一区,青青青青草视频在线播放| 国产乱码久久久| 天天色黄色影院天天操| 97中文天堂| 视频在线97| 超碰国产精品久| 无码一区二区三区四区五区六区七区八区九区十区视频 | 99 国产丝袜在线| 欧美色图第一页| 91人妻尻屄视频| 日日夜夜草草草| 东京热男人的天堂| 日本99久久| 伊人四虎综合| 人人玩人人添人人澡免费| 日韩pv中文| 大香蕉中文在线| 久操不卡视频| 97丝袜亚洲在线播放| 日韩无码精品综合久久| 久久精品视频久久久| 国产精品久久泡妞网站| 91粉嫩萝控精品福利网站_精品影音先锋国 | 人人操人人摸人| 亚洲91网站| 日韩免费福利在线观看| 亚洲日韩肥臀视频在线观看| 9久热这里只有精品| 亚洲日本韩国在线| 热热色AV| 99日精品欧美国产| 九久久精品| 一级特级aaaa毛片免费观看 | 亚洲av强奸乱伦| 果冻传媒一区二区三区| 免费A V在线播放| 精吧天堂| 日韩丝袜二区| 久久久久久人| 二色av| 精品69网| 熟女丰满人妻一区| 一起草高清无码| 日韩二级| 成人无遮挡毛片免费看| 磁力99AV| 亚洲中文一区二区三区| 中出后入| 成人性爱电影一区二区| 人妻熟女一区二区在线视频| 久久久久久人妻| av中亚| 欧美 青青草| 巨爆乳一区二区爆乳区| 亚洲青青草| 亚洲中文字幕三级在线| 午夜噜噜噜| 射 色综合| 五月天婷婷在线看| 欧美色日本| 国产呦精品一区二区三区下载| 中文字幕第7页| 精品 码产区一区二-1080P高清在线www-B029AV | 国产精品永久免费10000| 裸体美女久久久| 在线观看日韩av不卡| 东京热,男人的天堂| 91狠狠综合久久久久久| 亚洲AV成人无码一二三久久| www.男人天堂| 99精品热| 男人女人18禁片免费看网站| 亚洲性综合| 丁香六月综合激情| 日韩免费簧片| 久久华人网| 蜜臀久久一区二区| 中文字幕精品一区欧美| 青青草影视蜜久久| 国产青一二三| aaaa少妇高潮大片| 精品视频久久| 蜜屁Av| 国产精品交换一区二区| 日本人妻中文字幕精品| 玖色av| 极品内射| 91GD.COM| 国产精品点击进入在线影院| 欧美性色欧美| 日本大香蕉| 欧美极品少妇交| 乳欲人妻办公室奶水| 啊啊啊爽爽| 人妻内射一区二区在线视频| 伊人网av| 美女操逼福利视频| 乱欲视频| 亚洲自拍小说| 一区| 玖玖97综合 | 另类欧美色| 日韩资源网| 人妻在线臀日韩| 亚洲操逼网| 亚洲av综合色| 东北少妇高潮zzzz| 人妻熟女一区二区三区视频| 少妇色综合| 人妻一区二区三区| 亚洲色五月| 欧美日韩香蕉| 18啪啪手机免费性爱| 日日夜夜摸| 伊人欧美大香蕉视频| 欧美精品久久| 60秒试看最爽10分钟网站| 男人兔费天堂| 亚洲夜夜欢无码一区二区| 一区二区三区黄片免费观看| 91精品人妻偷情| 老妇女91| 91女色| 欧美少妇高潮| 欧美综合狠| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 情趣丝袜无码操逼视频| 久久久久婷婷| 国产自产自拍| 亚洲无码超碰免费| 国产一国产一级毛片古装| 欧美在线电影| 亚洲 欧美 日本 国内 首页| 超碰无码五月97| 天天色怡春院| 一区,二区,三区视频| 性欧美天天| 成人女人国产| 乱理日韩中文| 九九十八精品| 蜜臀av中字字幕网站| 亚洲有薄码区日本系列中文字幕| 亚洲国产精品久久久久久久久久| 色婷视频| 99热综合| 激情五月综合网| 五月丁香六月| 国产一区二区三区中文字幕| 骚逼高潮久久精品| 精品久久久久,69国产成人精| 99热精品在线| 亚洲日韩AV视色| 台湾佬激情综合| 婷婷伊人一区| 五月婷婷hd| 天天天天天天天天综合| 久久久久元码视频| 物业黑人 AV一区| 国产精品午夜福利| 高清视频一区| 蜜臀久久99精品久久久| 国产主播福利|