[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-config":3,"approved-friend-links":32,"project-slug-cinema-ticket-system":33},{"code":4,"msg":5,"data":6},0,"操作成功",{"police_number":7,"login_password_enabled":8,"copyright":9,"wechat_pay_api_key":7,"admin_login_wechat_enabled":8,"wechat_pay_public_key_id":10,"member_price":11,"police_link":7,"payment_enabled":12,"contact_email":13,"wechat_pay_serial_no":14,"member_discount":15,"wechat_pay_mch_id":16,"alipay_return_url":7,"alipay_private_key":17,"admin_login_password_enabled":8,"wechat_id":18,"wechat_pay_app_id":19,"owner_name":20,"site_domain":21,"site_desc":22,"login_wechat_qr_enabled":8,"alipay_public_key":23,"wechat_pay_private_key":24,"site_name":25,"icp_number":26,"alipay_notify_url":7,"wechat_pay_public_key":27,"payment_alipay_enabled":8,"icp_link":28,"wechat_pay_api_v3_key":29,"login_email_enabled":12,"alipay_app_id":30,"member_enabled":12,"wechat_pay_notify_url":31,"admin_login_email_enabled":12},"","false","© 2026 makexu.com 版权所有","PUB_KEY_ID_0117465997412026060900182334001401","168","true","370663537@qq.com","38039BC91B0D03B6C7DDDBAEAB823D1201FDA789","0.70","1746599741","MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCJKx4pNlM6dJN10cqHxscvHhyBOu7KY6+23rmnIs1GtIvd8bu09I1mCyzWUDM26VxLz2l55I44gmK+\u002FnIhxqzsl0znvbZh5r3fj8CYbQRcDM7L9I7hOr9k5vWc\u002FAQy2jb9AmNuV3xa8F1bVkve00nN2U6Oap2aoNdDhSsSA1NeC0WwtVLaq2wkqqKBY\u002FUrfNLR3xr0iP0YRQy+paY6jta4Tz88KHE+x3ZRfxben+tejAsYVpjVTpcfDKzzKSTqDcY1vbPjApCsN66kKmEwD4HmPRNphksLiIOqyWc+zaJE39JM620Br6NuxvMiR0dmbncE3UaztvvXUSL0kDKnYKKhAgMBAAECggEAfO9U7VyZuehsVyfaPIkE6xmWBO7UiGr7pKiAmIbOSdQwgNqoiU0lbQhIsnsh6qXqdvJXs7pE\u002F5tirWu8MJ9w6Z11Yq4c7FbqIjIgzbSd\u002F+l6gbIiYWrM4O6sT2wLtvWimBgQ0HPGxF2h6otTV4VC98cyEe1x12EgMFOewy1cRY7QP68VBaGpOS6twrCJtLw9PvOPfeY6Fkur65ESAp1N7ELgJRHE0vtQljY01EYM30BwesDIZpUaGqmepzRhFKOkfiQDtgXM3GZOUXJHWR06j2T9PYcmDEFRkPPtLABI42UJPwtIb75kiXjv6uysob0vo746WtdIGRkuQNRjyyh\u002FsQKBgQDLxUCWAexSrrbnr5UITlMwocY0Fuo1U9pjABfB5MnrWoQPWsJgAOgiXt\u002FsNRtdZDMpo7fTku2rhDueiUHWY7aLUbvvvzbuBLfNXIX7wy2qNEPMmRpn9KkzLeB0MYwMvTXgT+zD\u002Fr6lIO3RYQE9JYaojBMuykDu+2Y9C9yRGTGjbwKBgQCsU6gc8cODXKHSCovZO8M6fbOpSoc6GezozvMvD\u002Fg1sOwNwovZ4VJwIFyGTyssbjjEp\u002F5B5B\u002FDg+HGygaPubuzTyc0\u002FfZ5uxgDfMjzExMhJiol0JdgSX+m3pC\u002Fc189pcvkSAKXQrGApXN3i95OrGOj\u002FiRr1AuGH8sYk0+vWYjS7wKBgGSEAL\u002F+YtzGYmMXMaTPPioXIvY+93kmy+tZ+F4kxZXbKJmKY6eHyvppYnvaFo2TB8nagKtVJvgcWmxxuJBQz5MZ1mMFJ8txeFlM8qqmNLho36jlPSlafrxIPRgT+Mmv7AuiYWCtIM3D2IwYFcxb3nj13+CM1EsOp\u002FglCcBpdRrxAoGAFLL3voJLubumtFQP+Ef1a1EuA2ewVopGqrAxBbYlWk2mDQERS1qFTHKWqotX5D5ZE0YahE+igRmWRQp\u002FP0RQB3m6e+MFeBnBCKo0eP4RjinHZkNn62jorGKPgG+bQQxpMUJ1DTY1m\u002F5DoFhsm4aZcVlVhp4xxCqNeqY3LBjVFoECgYEAmOxK+rzVnF83wfTE65lMXqN8UWTOWSDsbiGzx6YSg02X67MfDk2asD\u002FyciUiCCE25lRxwm0SuaetOTMbZO5mD8ZZEq7GQSt9L+r1LFjkB\u002FwmX6tbAJI3rpAWpD0ntcASCN8QfaWh3liFMaSjkn1OmhCCrV\u002FbS+aOJ1wZwJK4jeg=","dajiang8070","wxebc91c29d4bd3fe8","码客徐","www.makexu.com","分享优质开发工具、项目实战、编程教程、AI开发、源码项目和技术资源，帮助程序员快速成长，让开发更高效。","MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApUboIRwnBzMLC+hFy+b1Fhsy4xacSBoMfasdqMicCrK70hj+mCrUqJ2hGUn2gClNvMGyO+90p9UNhrDGCzpact8CCZCs6t7vQCrnD4PEmEKl62XcCwngrPEKP5gP6sSWDL\u002Fm8cHabF\u002FVn9HlayaS0nePd89XRgSi8gd0oh5qyUbt2s27zY3fpIsd66naVwMLn7CBwDLFKDINnFeRu\u002FsAN3SKYcwl7T1yhpPb99yoSCKA+yYaPaT85UKLOqESk6kUabPsUDDmpkZn6nHHXUQa3\u002FSJUSnn7a\u002F+YOZsSveZg4ei1AMSmXTZH\u002FnB9MuHgyZ0pnI2Bw3LR1YpNcyUoKtZfQIDAQAB","-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDnmf8oIN9HbAUi\nuaNZwKB\u002F3pDPtavwOLpF6PpKJsLts3fOeXHUwbNJzcjrxTe5DKKMNOk5t3cFXPtb\nBH18pEFNi1zHWkN5aZ1BrViCwYpo7FRucie7Dc9sGFeaRZMsRH+piHUkCh5I3QJM\nYCXIbsiTeavWiRCSLsmcQ2KfStSw8NO9+Tio6dTQb7lmSCBEK51zlge8tgvEyoWm\nsXCAlAz0GgzxTrIWo4saJ2ooIkX0ljvmPyTxyZ2+nXzI8RYKA1DZ38yoy4Pa+xXv\nxOa0VV5kidl8s+6F8rk7133boU+44gmKOE8lK5+a3FBkrI1D3rSxFGnQ0WIYC\u002F\u002F0\nB+TRUVFTAgMBAAECggEBAIAN+bKqWkoXQ8+rbNJXW2bYHKF8BZFRDE1TP\u002FB39heP\nv5J+O54za3pHOeyCowjCH63+I2YyNrDUdHYiyW99Mk453BatpdkfuD90JRhHAsx4\nv0ZCAA3A2QsfenBmP7WeOif2ty4yGgSXjonEL5\u002FfAS\u002FpekWoi20ISZkI+SKyMV+S\n+2+aoInmX9KcK1E\u002FM8vA6\u002FaNUOYmGM5hk1342ezQ131\u002FlwrksN4i1cuUdGaXJ8SI\nlmXTavDC1ypQKXtyigorOCW2Y\u002FAzNVjL04Pb\u002FiSsB0yjagSHU69veSLJTf+XCGFt\ne3YfScQDhLblq142RnKVfMQvePaAI3dQ1tOqgUrHuaECgYEA+DzzcmiyxOSicu37\n+Nvwc5d8DETyxBDqF\u002F1GJ6bZLwflZvBOx67K\u002FNlT9Z3L2yNGjrL0w0oQJnOWH0hb\nyW7piXXqnQ2\u002FNkNLzks0goY6zjyI3FHMvDEvdxiyz4PD6H+JeMUSANLnGztR9aFh\nAO1mgtH+TF95mUenytEYcTde4JUCgYEA7tfgcWm8SsctkahZOwbClWPDy69wxUh5\nlLDgwj1+XJ7Pa5MaACUvQV8E6LFA7HHZZCIf2JGOgzXW0UEym46Z6v2OiXOasLKN\nBwtnFytKbzOK7nkkr+U6ympW1eZXJN5A4MZRLQl2gKA8teZL8Gz+F2i0+uVlR0cb\nK7G\u002FdfAS6EcCgYEAoc8hJR9n\u002F\u002F3EgkPsbe\u002F3kXFZ86lx0SnxXYfDlg8lHIn6F5pm\nz7R5Lk3\u002Fc2fTPNmGoXe3IiEB2\u002F6WCXgiFHBOnEKXlp4iWJ2PKT5OURJr\u002FIjq8SoE\n2Vr6RJh93dRW\u002FBM+KdHThWP0LwUAzKrPz0nv+zAkoeXOHoLdtc+MLihYmO0CgYEA\nrp8glmqy4o0rMOI\u002FkttHaoeNQB8duO9bDK4hNYJWH4twpPrguJh3Kzk4UpQ9nmFC\nimY0mFcbNa0oSMd9I6QnvlnxW2ctAuEYIL1ietsIybKKcf4aJ4vV5uXGZQ7KScdA\n8dWsxdu0SyhcGrWscbSONTk1kHYlDO7c255SF\u002F0VJcMCgYB0v6C3bNIPkbAlvFlo\nBTgccv3dBUa2Zo\u002FOJa8xGW\u002FVz3RuL6qTjFRVEYJILVmrSR2fT1w44EET2fGW6cb4\nb5a\u002FDGz9scZwUBwhhMleBPUu2LL6\u002FFkuP2amFFr5uRK8GwbZ5TvrtpNgdBoMhvPb\n1+z709LIwIzFbq5WLW3OEao7MA==\n-----END PRIVATE KEY-----","码客徐的小栈","皖ICP备2024065487号-6","-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAymOTDu1kxxydfrQEgKbe\nne0+i+Bq55TY+BWkkev\u002Ffy9NtSS0Fpbz4g7rscQg6W+4CmYz4VSD6GrC3pXwjRhK\nUGZDHhUnUV9Hf6SLWepxfh8SihdqDbBu6mRKRwyQw7RBYhxLZV+udagchCtSBut1\niQ6H+ozn+3jVUdX\u002F2rGuXBt1WIWbFomPj1MIQuolSORM85nr8cqWyimgECm70imE\nTlRR0s9WkksWoF0WwFdoWWAjxo4LVNdf9\u002FEySIu5I5NuYslwWjb+T87D\u002FNkIoI92\ne1jjAOsPgl5oJ10wLjNjbOMy9+\u002FrzDDz6yAyuKMKj\u002Flhu2D35Cx8ZJDC798vTbZS\nfQIDAQAB\n-----END PUBLIC KEY-----","https:\u002F\u002Fbeian.miit.gov.cn\u002F","K8mX2pQ7vN4rT9yL6cD1wH5sJ3eF0aZB","9021000164659589","https:\u002F\u002Fwww.makexu.com\u002Fapi\u002Forder\u002Fnotify\u002Fwechat",[],{"project":34,"introHtml":155,"deployHtml":7,"tocIntro":156,"tocDeploy":157},{"id":35,"title":36,"projectCode":37,"slug":38,"summary":39,"hot":40,"sortNum":4,"status":41,"price":42,"originalPrice":43,"salesCount":44,"categoryId":45,"categoryName":46,"viewCount":46,"tagIds":47,"tagList":54,"images":72,"resources":142,"videos":148,"createTime":154,"publishTime":154,"isNew":40},"11","电影院购票系统","SV001","cinema-ticket-system","采用前后端分离架构，覆盖从用户浏览电影、在线选座、下单支付到退票评价的完整业务流程。系统同时提供后台管理端，支持电影排片、影厅座位配置、订单管理和数据统计。",false,3,99,200,2,"1",null,[48,49,50,51,52,53],"2063897838560788481","2063897893363564545","2063898057671229442","2087124519350472705","2087124519581159426","2087742574703235074",[55,58,61,64,67,70],{"id":48,"name":56,"color":57,"sortNum":46,"status":46},"SpringBoot","#22c55e",{"id":49,"name":59,"color":60,"sortNum":46,"status":46},"Vue","#f59e0b",{"id":50,"name":62,"color":63,"sortNum":46,"status":46},"MySQL","#06b6d4",{"id":51,"name":65,"color":66,"sortNum":46,"status":46},"MybatisPlus","#B216E6FF",{"id":52,"name":68,"color":69,"sortNum":46,"status":46},"ElementPlus","#84cc16",{"id":53,"name":71,"color":60,"sortNum":46,"status":46},"ECharts",[73,78,84,89,94,100,106,112,118,124,130,136],{"id":74,"projectId":35,"resourceType":46,"name":75,"url":76,"sortNum":4,"fileId":77},"2089980578297585665","ScreenShot_2026-08-19_153326_047.png","https:\u002F\u002Fthomas-coding-pub.oss-cn-hangzhou.aliyuncs.com\u002Fimage\u002F6761e498da054c9da68d0c61d5753567.png","2089980286910898177",{"id":79,"projectId":35,"resourceType":46,"name":80,"url":81,"sortNum":82,"fileId":83},"2089980578498912257","ScreenShot_2026-08-19_153350_913.png","https:\u002F\u002Fthomas-coding-pub.oss-cn-hangzhou.aliyuncs.com\u002Fimage\u002F534813e6696448daace3ac55c32a6a3c.png",1,"2089980317403488257",{"id":85,"projectId":35,"resourceType":46,"name":86,"url":87,"sortNum":44,"fileId":88},"2089980578683461633","ScreenShot_2026-08-19_153428_192.png","https:\u002F\u002Fthomas-coding-pub.oss-cn-hangzhou.aliyuncs.com\u002Fimage\u002F255735705de84e92ab4bdf61c013038c.png","2089980331630567426",{"id":90,"projectId":35,"resourceType":46,"name":91,"url":92,"sortNum":41,"fileId":93},"2089980578863816705","ScreenShot_2026-08-19_153440_863.png","https:\u002F\u002Fthomas-coding-pub.oss-cn-hangzhou.aliyuncs.com\u002Fimage\u002Fe760ec64fd6e41b3930f52cb1f752b28.png","2089980348265177089",{"id":95,"projectId":35,"resourceType":46,"name":96,"url":97,"sortNum":98,"fileId":99},"2089980579044171777","ScreenShot_2026-08-19_153507_748.png","https:\u002F\u002Fthomas-coding-pub.oss-cn-hangzhou.aliyuncs.com\u002Fimage\u002F0bf9a3e407474ac5b46ef10678f4b87e.png",4,"2089980366170660866",{"id":101,"projectId":35,"resourceType":46,"name":102,"url":103,"sortNum":104,"fileId":105},"2089980579224526849","ScreenShot_2026-08-19_153530_919.png","https:\u002F\u002Fthomas-coding-pub.oss-cn-hangzhou.aliyuncs.com\u002Fimage\u002F2746eda7ed764cdc9511f592e2b6cefb.png",5,"2089980400324878337",{"id":107,"projectId":35,"resourceType":46,"name":108,"url":109,"sortNum":110,"fileId":111},"2089980579404881921","ScreenShot_2026-08-19_153552_603.png","https:\u002F\u002Fthomas-coding-pub.oss-cn-hangzhou.aliyuncs.com\u002Fimage\u002F97f4bd3c97ef4ad7a230a765e70d2515.png",6,"2089980424425349122",{"id":113,"projectId":35,"resourceType":46,"name":114,"url":115,"sortNum":116,"fileId":117},"2089980579589431298","ScreenShot_2026-08-19_153624_510.png","https:\u002F\u002Fthomas-coding-pub.oss-cn-hangzhou.aliyuncs.com\u002Fimage\u002F24a714277367410a8e93eb9ecc127cc1.png",7,"2089980443517820930",{"id":119,"projectId":35,"resourceType":46,"name":120,"url":121,"sortNum":122,"fileId":123},"2089980579773980674","ScreenShot_2026-08-19_153632_019.png","https:\u002F\u002Fthomas-coding-pub.oss-cn-hangzhou.aliyuncs.com\u002Fimage\u002F20b2def2b99944fe974bf34a33b3433b.png",8,"2089980465600831490",{"id":125,"projectId":35,"resourceType":46,"name":126,"url":127,"sortNum":128,"fileId":129},"2089980579954335746","ScreenShot_2026-08-19_153659_873.png","https:\u002F\u002Fthomas-coding-pub.oss-cn-hangzhou.aliyuncs.com\u002Fimage\u002F84d66cfba04a487ebbf610751bd52e7e.png",9,"2089980524887318529",{"id":131,"projectId":35,"resourceType":46,"name":132,"url":133,"sortNum":134,"fileId":135},"2089980580138885122","ScreenShot_2026-08-19_153721_120.png","https:\u002F\u002Fthomas-coding-pub.oss-cn-hangzhou.aliyuncs.com\u002Fimage\u002Ffaa9c16b59d84fa99de4f77493a9d05c.png",10,"2089980548232814593",{"id":137,"projectId":35,"resourceType":46,"name":138,"url":139,"sortNum":140,"fileId":141},"2089980580319240194","ScreenShot_2026-08-19_153739_322.png","https:\u002F\u002Fthomas-coding-pub.oss-cn-hangzhou.aliyuncs.com\u002Fimage\u002F699eae8f0bc24bf0a5d1797f4faff992.png",11,"2089980566771638274",[143],{"id":144,"projectId":35,"resourceType":145,"name":146,"url":46,"sortNum":4,"fileId":147},"2093289820626714626","source","完整源码+SQL文件","2090027136397385730",[149],{"id":150,"projectId":35,"title":151,"videoUrl":152,"platform":153,"description":7,"sortNum":4,"status":82},"2090029552127746049","项目介绍视频","https:\u002F\u002Fwww.bilibili.com\u002Fvideo\u002FBV1Zq8n6YEzc\u002F?share_source=copy_web&vd_source=611c5c18fb4b550a4d24d80364d15e98","bilibili","2026-06-08 10:27:24","\u003Ch1 id=\"%E7%94%B5%E5%BD%B1%E9%99%A2%E8%B4%AD%E7%A5%A8%E7%B3%BB%E7%BB%9F-%E2%80%94-%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D%E6%96%87%E6%A1%A3\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#%E7%94%B5%E5%BD%B1%E9%99%A2%E8%B4%AD%E7%A5%A8%E7%B3%BB%E7%BB%9F-%E2%80%94-%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D%E6%96%87%E6%A1%A3\" aria-hidden=\"true\">\u003C\u002Fa> 电影院购票系统 — 项目介绍文档\u003C\u002Fh1>\n\u003Ch2 id=\"%E4%B8%80%E3%80%81%E9%A1%B9%E7%9B%AE%E6%A6%82%E8%BF%B0\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#%E4%B8%80%E3%80%81%E9%A1%B9%E7%9B%AE%E6%A6%82%E8%BF%B0\" aria-hidden=\"true\">\u003C\u002Fa> 一、项目概述\u003C\u002Fh2>\n\u003Cp>本项目是一套\u003Cstrong>电影院在线购票系统\u003C\u002Fstrong>，采用前后端分离架构，覆盖从用户浏览电影、在线选座、下单支付到退票评价的完整业务流程。系统同时提供后台管理端，支持电影排片、影厅座位配置、订单管理和数据统计。\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>属性\u003C\u002Fth>\n\u003Cth>说明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>项目名称\u003C\u002Ftd>\n\u003Ctd>电影院购票系统（Cinema Ticket System）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>架构模式\u003C\u002Ftd>\n\u003Ctd>B\u002FS 前后端分离\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>后端技术\u003C\u002Ftd>\n\u003Ctd>Spring Boot 3.2 \u002F MyBatis-Plus 3.5 \u002F MySQL 8.0 \u002F JWT\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>前端技术\u003C\u002Ftd>\n\u003Ctd>Vue 3 \u002F Element Plus \u002F Pinia \u002F Axios \u002F ECharts \u002F Vite\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>开发语言\u003C\u002Ftd>\n\u003Ctd>Java 21 \u002F JavaScript（ES6+）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>适用场景\u003C\u002Ftd>\n\u003Ctd>计算机毕设、课程设计、源码学习与二次开发\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2 id=\"%E4%BA%8C%E3%80%81%E6%8A%80%E6%9C%AF%E6%9E%B6%E6%9E%84\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#%E4%BA%8C%E3%80%81%E6%8A%80%E6%9C%AF%E6%9E%B6%E6%9E%84\" aria-hidden=\"true\">\u003C\u002Fa> 二、技术架构\u003C\u002Fh2>\n\u003Ch3 id=\"2.1-%E5%90%8E%E7%AB%AF%E6%8A%80%E6%9C%AF%E6%A0%88\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#2.1-%E5%90%8E%E7%AB%AF%E6%8A%80%E6%9C%AF%E6%A0%88\" aria-hidden=\"true\">\u003C\u002Fa> 2.1 后端技术栈\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>类别\u003C\u002Fth>\n\u003Cth>技术选型\u003C\u002Fth>\n\u003Cth>版本\u003C\u002Fth>\n\u003Cth>说明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>核心框架\u003C\u002Ftd>\n\u003Ctd>Spring Boot\u003C\u002Ftd>\n\u003Ctd>3.2.3\u003C\u002Ftd>\n\u003Ctd>Java 企业级开发框架\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>ORM 框架\u003C\u002Ftd>\n\u003Ctd>MyBatis-Plus\u003C\u002Ftd>\n\u003Ctd>3.5.5\u003C\u002Ftd>\n\u003Ctd>增强版 MyBatis，简化 CRUD\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>数据库\u003C\u002Ftd>\n\u003Ctd>MySQL\u003C\u002Ftd>\n\u003Ctd>8.0+\u003C\u002Ftd>\n\u003Ctd>关系型数据库\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>安全认证\u003C\u002Ftd>\n\u003Ctd>jjwt（JWT）\u003C\u002Ftd>\n\u003Ctd>0.12.3\u003C\u002Ftd>\n\u003Ctd>无状态 Token 认证\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>密码加密\u003C\u002Ftd>\n\u003Ctd>BCrypt（Hutool）\u003C\u002Ftd>\n\u003Ctd>5.8.26\u003C\u002Ftd>\n\u003Ctd>慢哈希 + 随机盐值\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>API 文档\u003C\u002Ftd>\n\u003Ctd>Knife4j（OpenAPI 3）\u003C\u002Ftd>\n\u003Ctd>4.4.0\u003C\u002Ftd>\n\u003Ctd>Swagger 增强 UI\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>工具库\u003C\u002Ftd>\n\u003Ctd>Hutool\u003C\u002Ftd>\n\u003Ctd>5.8.26\u003C\u002Ftd>\n\u003Ctd>Java 通用工具集\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>构建工具\u003C\u002Ftd>\n\u003Ctd>Maven\u003C\u002Ftd>\n\u003Ctd>3.8+\u003C\u002Ftd>\n\u003Ctd>依赖管理与项目构建\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch3 id=\"2.2-%E5%89%8D%E7%AB%AF%E6%8A%80%E6%9C%AF%E6%A0%88\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#2.2-%E5%89%8D%E7%AB%AF%E6%8A%80%E6%9C%AF%E6%A0%88\" aria-hidden=\"true\">\u003C\u002Fa> 2.2 前端技术栈\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>类别\u003C\u002Fth>\n\u003Cth>技术选型\u003C\u002Fth>\n\u003Cth>版本\u003C\u002Fth>\n\u003Cth>说明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>核心框架\u003C\u002Ftd>\n\u003Ctd>Vue 3（Composition API）\u003C\u002Ftd>\n\u003Ctd>3.4.21\u003C\u002Ftd>\n\u003Ctd>渐进式前端框架\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>UI 组件库\u003C\u002Ftd>\n\u003Ctd>Element Plus\u003C\u002Ftd>\n\u003Ctd>2.6.3\u003C\u002Ftd>\n\u003Ctd>企业级桌面端组件库\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>路由\u003C\u002Ftd>\n\u003Ctd>Vue Router\u003C\u002Ftd>\n\u003Ctd>4.3.0\u003C\u002Ftd>\n\u003Ctd>单页应用路由管理\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>状态管理\u003C\u002Ftd>\n\u003Ctd>Pinia\u003C\u002Ftd>\n\u003Ctd>2.1.7\u003C\u002Ftd>\n\u003Ctd>Vue 官方状态管理库\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>HTTP 客户端\u003C\u002Ftd>\n\u003Ctd>Axios\u003C\u002Ftd>\n\u003Ctd>1.15.2\u003C\u002Ftd>\n\u003Ctd>基于 Promise 的 HTTP 库\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>图表\u003C\u002Ftd>\n\u003Ctd>ECharts\u003C\u002Ftd>\n\u003Ctd>5.5.0\u003C\u002Ftd>\n\u003Ctd>数据可视化图表库\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>构建工具\u003C\u002Ftd>\n\u003Ctd>Vite\u003C\u002Ftd>\n\u003Ctd>5.2.0\u003C\u002Ftd>\n\u003Ctd>下一代前端构建工具\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch3 id=\"2.3-%E6%9E%B6%E6%9E%84%E5%9B%BE\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#2.3-%E6%9E%B6%E6%9E%84%E5%9B%BE\" aria-hidden=\"true\">\u003C\u002Fa> 2.3 架构图\u003C\u002Fh3>\n\u003Cdiv class=\"code-block-wrapper\">\u003Cdiv class=\"code-block-header\">\u003Cbutton class=\"code-copy-btn\" data-code=\"┌─────────────────────────────────────────────────────────┐\n│                      浏览器（Browser）                    │\n├───────────────────────┬─────────────────────────────────┤\n│   前台页面（Portal）     │     后台管理（Admin）             │\n│   localhost:5173       │     localhost:5173\u002Fadmin       │\n│   · 首页\u002F电影浏览       │     · 仪表盘\u002F数据统计              │\n│   · 选座购票\u002F支付       │     · 电影\u002F排片 CRUD              │\n│   · 我的订单\u002F评论       │     · 影厅\u002F座位配置                │\n│   · 个人中心            │     · 用户\u002F订单管理               │\n└───────────────────────┴─────────────────────────────────┘\n                          │  HTTP \u002Fapi\u002F*\n                          ▼\n┌─────────────────────────────────────────────────────────┐\n│              Spring Boot 后端（localhost:8080）            │\n├─────────────┬──────────────┬──────────────┬──────────────┤\n│  Interceptor │  Controller  │   Service    │   Mapper     │\n│  JWT认证     │  portal\u002F 前台  │   业务逻辑    │  MyBatis-Plus│\n│  管理员鉴权   │  admin\u002F 后台  │   事务管理    │  XML 自定义SQL│\n└─────────────┴──────────────┴──────────────┴──────────────┘\n                          │\n                          ▼\n┌─────────────────────────────────────────────────────────┐\n│                        MySQL 8.0                        │\n└─────────────────────────────────────────────────────────┘\n\" title=\"复制代码\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\u003Crect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"\u002F>\u003Cpath d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\u002F>\u003C\u002Fsvg>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e\" tabindex=\"0\">\u003Ccode class=\"language-text\">\u003Cspan class=\"line\">\u003Cspan>┌─────────────────────────────────────────────────────────┐\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│                      浏览器（Browser）                    │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>├───────────────────────┬─────────────────────────────────┤\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   前台页面（Portal）     │     后台管理（Admin）             │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   localhost:5173       │     localhost:5173\u002Fadmin       │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   · 首页\u002F电影浏览       │     · 仪表盘\u002F数据统计              │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   · 选座购票\u002F支付       │     · 电影\u002F排片 CRUD              │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   · 我的订单\u002F评论       │     · 影厅\u002F座位配置                │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   · 个人中心            │     · 用户\u002F订单管理               │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>└───────────────────────┴─────────────────────────────────┘\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                          │  HTTP \u002Fapi\u002F*\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                          ▼\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>┌─────────────────────────────────────────────────────────┐\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│              Spring Boot 后端（localhost:8080）            │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>├─────────────┬──────────────┬──────────────┬──────────────┤\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│  Interceptor │  Controller  │   Service    │   Mapper     │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│  JWT认证     │  portal\u002F 前台  │   业务逻辑    │  MyBatis-Plus│\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│  管理员鉴权   │  admin\u002F 后台  │   事务管理    │  XML 自定义SQL│\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>└─────────────┴──────────────┴──────────────┴──────────────┘\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                          │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                          ▼\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>┌─────────────────────────────────────────────────────────┐\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│                        MySQL 8.0                        │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>└─────────────────────────────────────────────────────────┘\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"2.4-%E5%AE%89%E5%85%A8%E8%AE%BE%E8%AE%A1\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#2.4-%E5%AE%89%E5%85%A8%E8%AE%BE%E8%AE%A1\" aria-hidden=\"true\">\u003C\u002Fa> 2.4 安全设计\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>JWT 双拦截器\u003C\u002Fstrong>：\u003Ccode>JwtAuthInterceptor\u003C\u002Fcode>（认证）+ \u003Ccode>AdminAuthInterceptor\u003C\u002Fcode>（鉴权），按路径和执行顺序分层控制\u003C\u002Fli>\n\u003Cli>\u003Cstrong>密码 BCrypt 加密\u003C\u002Fstrong>：使用慢哈希算法加随机盐值，有效抵御彩虹表攻击\u003C\u002Fli>\n\u003Cli>\u003Cstrong>\u003Ccode>@Anonymous\u003C\u002Fcode> 注解\u003C\u002Fstrong>：标注公开接口（如注册、登录、电影查询），无需额外维护白名单\u003C\u002Fli>\n\u003Cli>\u003Cstrong>同源代理\u003C\u002Fstrong>：开发环境由 Vite proxy 将 \u003Ccode>\u002Fapi\u003C\u002Fcode> 转发到后端，避免跨域问题；生产环境建议 Nginx 反向代理\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"%E4%B8%89%E3%80%81%E5%8A%9F%E8%83%BD%E6%A8%A1%E5%9D%97\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#%E4%B8%89%E3%80%81%E5%8A%9F%E8%83%BD%E6%A8%A1%E5%9D%97\" aria-hidden=\"true\">\u003C\u002Fa> 三、功能模块\u003C\u002Fh2>\n\u003Ch3 id=\"3.1-%E5%89%8D%E5%8F%B0%E5%8A%9F%E8%83%BD%EF%BC%88%E6%99%AE%E9%80%9A%E7%94%A8%E6%88%B7%EF%BC%89\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#3.1-%E5%89%8D%E5%8F%B0%E5%8A%9F%E8%83%BD%EF%BC%88%E6%99%AE%E9%80%9A%E7%94%A8%E6%88%B7%EF%BC%89\" aria-hidden=\"true\">\u003C\u002Fa> 3.1 前台功能（普通用户）\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>模块\u003C\u002Fth>\n\u003Cth>功能点\u003C\u002Fth>\n\u003Cth>说明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>首页\u003C\u002Ftd>\n\u003Ctd>热映轮播、分类快捷入口、搜索\u003C\u002Ftd>\n\u003Ctd>展示海报轮播、电影分类导航、全局搜索框\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>电影浏览\u003C\u002Ftd>\n\u003Ctd>热映列表、即将上映、分类筛选、关键词搜索、排序\u003C\u002Ftd>\n\u003Ctd>多维度筛选，支持按评分\u002F热度\u002F上映日期排序\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>电影详情\u003C\u002Ftd>\n\u003Ctd>基本信息、评分评论、场次列表\u003C\u002Ftd>\n\u003Ctd>展示电影详情和当日排片\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>选座购票\u003C\u002Ftd>\n\u003Ctd>实时座位图、多选座位、下单锁定\u003C\u002Ftd>\n\u003Ctd>行级悲观锁+乐观双检，防并发超卖\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>支付\u003C\u002Ftd>\n\u003Ctd>模拟支付宝\u002F微信支付\u003C\u002Ftd>\n\u003Ctd>15分钟倒计时，超时自动取消\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>我的订单\u003C\u002Ftd>\n\u003Ctd>订单列表、状态筛选、订单详情\u003C\u002Ftd>\n\u003Ctd>支持待支付\u002F已支付\u002F已退票\u002F已完成\u002F已取消筛选项\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>退票\u003C\u002Ftd>\n\u003Ctd>开场前退票、自动退款\u003C\u002Ftd>\n\u003Ctd>开场前30分钟可退，自动释放座位\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>评论\u003C\u002Ftd>\n\u003Ctd>评分+文字评论、删除自己的评论\u003C\u002Ftd>\n\u003Ctd>每人每部电影限评一次\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>个人中心\u003C\u002Ftd>\n\u003Ctd>修改资料、头像上传、修改密码\u003C\u002Ftd>\n\u003Ctd>昵称\u002F邮箱\u002F手机号\u002F头像可编辑\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch3 id=\"3.2-%E5%90%8E%E5%8F%B0%E5%8A%9F%E8%83%BD%EF%BC%88%E7%AE%A1%E7%90%86%E5%91%98%EF%BC%89\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#3.2-%E5%90%8E%E5%8F%B0%E5%8A%9F%E8%83%BD%EF%BC%88%E7%AE%A1%E7%90%86%E5%91%98%EF%BC%89\" aria-hidden=\"true\">\u003C\u002Fa> 3.2 后台功能（管理员）\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>模块\u003C\u002Fth>\n\u003Cth>功能点\u003C\u002Fth>\n\u003Cth>说明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>仪表盘\u003C\u002Ftd>\n\u003Ctd>今日\u002F累计收入、订单数、用户数、票房趋势图、电影排行、上座率\u003C\u002Ftd>\n\u003Ctd>ECharts 可视化图表\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>电影管理\u003C\u002Ftd>\n\u003Ctd>新增\u002F编辑\u002F删除\u002F搜索\u002F状态筛选、海报上传\u003C\u002Ftd>\n\u003Ctd>逻辑删除，支持上下架\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>分类管理\u003C\u002Ftd>\n\u003Ctd>分类增删改查\u003C\u002Ftd>\n\u003Ctd>前端首页分类导航\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>影厅管理\u003C\u002Ftd>\n\u003Ctd>创建\u002F删除影厅、可视化座位图配置\u003C\u002Ftd>\n\u003Ctd>支持通道\u002F普通\u002F情侣\u002FVIP座位类型\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>排片管理\u003C\u002Ftd>\n\u003Ctd>创建\u002F取消场次、时间段冲突检测\u003C\u002Ftd>\n\u003Ctd>自动计算散场时间（含清场间隔）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>用户管理\u003C\u002Ftd>\n\u003Ctd>用户列表、启用\u002F禁用、搜索\u003C\u002Ftd>\n\u003Ctd>模糊搜索用户名\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>评论管理\u003C\u002Ftd>\n\u003Ctd>评论列表、隐藏\u002F显示切换\u003C\u002Ftd>\n\u003Ctd>违规评论可隐藏。\u003Cstrong>注：目前仅有后端接口（\u003Ccode>\u002Fadmin\u002Fcomments\u003C\u002Fcode>），后台管理页面尚未实现\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>订单管理\u003C\u002Ftd>\n\u003Ctd>全部订单查询、按状态筛选、详情查看\u003C\u002Ftd>\n\u003Ctd>管理端只读，不干预用户操作\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2 id=\"%E5%9B%9B%E3%80%81%E9%A1%B9%E7%9B%AE%E4%BA%AE%E7%82%B9\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#%E5%9B%9B%E3%80%81%E9%A1%B9%E7%9B%AE%E4%BA%AE%E7%82%B9\" aria-hidden=\"true\">\u003C\u002Fa> 四、项目亮点\u003C\u002Fh2>\n\u003Ch3 id=\"4.1-%E5%B9%B6%E5%8F%91%E5%AE%89%E5%85%A8%EF%BC%9A%E9%80%89%E5%BA%A7%E9%98%B2%E8%B6%85%E5%8D%96\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#4.1-%E5%B9%B6%E5%8F%91%E5%AE%89%E5%85%A8%EF%BC%9A%E9%80%89%E5%BA%A7%E9%98%B2%E8%B6%85%E5%8D%96\" aria-hidden=\"true\">\u003C\u002Fa> 4.1 并发安全：选座防超卖\u003C\u002Fh3>\n\u003Cp>创建订单时采用 \u003Cstrong>三层并发控制\u003C\u002Fstrong>：\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cstrong>SELECT FOR UPDATE\u003C\u002Fstrong>（行级悲观锁）：锁定目标座位行，防止其他事务同时读取\u003C\u002Fli>\n\u003Cli>\u003Cstrong>乐观双检\u003C\u002Fstrong>：\u003Ccode>UPDATE WHERE status=0\u003C\u002Fcode> 原子操作，更新时再次校验状态\u003C\u002Fli>\n\u003Cli>\u003Cstrong>乐观锁版本号\u003C\u002Fstrong>：\u003Ccode>schedule_seat.version\u003C\u002Fcode> 字段，MyBatis-Plus \u003Ccode>@Version\u003C\u002Fcode> 自动管理\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3 id=\"4.2-%E8%AE%A2%E5%8D%95%E8%BF%87%E6%9C%9F%E8%87%AA%E5%8A%A8%E5%A4%84%E7%90%86\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#4.2-%E8%AE%A2%E5%8D%95%E8%BF%87%E6%9C%9F%E8%87%AA%E5%8A%A8%E5%A4%84%E7%90%86\" aria-hidden=\"true\">\u003C\u002Fa> 4.2 订单过期自动处理\u003C\u002Fh3>\n\u003Cp>\u003Ccode>@Scheduled\u003C\u002Fcode> 定时任务每分钟执行：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>释放超时未支付的锁定座位\u003C\u002Fli>\n\u003Cli>将超时待支付订单标记为已过期\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"4.3-%E6%8E%92%E7%89%87%E6%97%B6%E9%97%B4%E5%86%B2%E7%AA%81%E6%A3%80%E6%B5%8B\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#4.3-%E6%8E%92%E7%89%87%E6%97%B6%E9%97%B4%E5%86%B2%E7%AA%81%E6%A3%80%E6%B5%8B\" aria-hidden=\"true\">\u003C\u002Fa> 4.3 排片时间冲突检测\u003C\u002Fh3>\n\u003Cp>创建排片时自动检测影厅时段占用，防止同一影厅同一时段重复排片（使用时间段重叠检测算法）。\u003C\u002Fp>\n\u003Ch3 id=\"4.4-%E5%BA%A7%E4%BD%8D%E5%9B%BE%E5%8F%AF%E8%A7%86%E5%8C%96%E9%85%8D%E7%BD%AE\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#4.4-%E5%BA%A7%E4%BD%8D%E5%9B%BE%E5%8F%AF%E8%A7%86%E5%8C%96%E9%85%8D%E7%BD%AE\" aria-hidden=\"true\">\u003C\u002Fa> 4.4 座位图可视化配置\u003C\u002Fh3>\n\u003Cp>管理员可自定义影厅行列数，支持四种座位类型（通道\u002F普通\u002F情侣\u002FVIP），前端实时渲染可视化座位图，色块区分不同类型和售卖状态。\u003C\u002Fp>\n\u003Ch3 id=\"4.5-%E5%88%86%E7%B1%BB%E4%B8%8E%E6%8E%92%E5%BA%8F\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#4.5-%E5%88%86%E7%B1%BB%E4%B8%8E%E6%8E%92%E5%BA%8F\" aria-hidden=\"true\">\u003C\u002Fa> 4.5 分类与排序\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>电影分类使用逗号分隔字符串存储，SQL 层 \u003Ccode>FIND_IN_SET\u003C\u002Fcode> 函数直接过滤，保证分页准确\u003C\u002Fli>\n\u003Cli>支持多维度排序：评分、热度、上映日期\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"4.6-restful-api-%E8%AE%BE%E8%AE%A1\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#4.6-restful-api-%E8%AE%BE%E8%AE%A1\" aria-hidden=\"true\">\u003C\u002Fa> 4.6 RESTful API 设计\u003C\u002Fh3>\n\u003Cp>严格遵循 RESTful 规范，前后台接口清晰分离（前台 \u003Ccode>\u002Fmovies\u003C\u002Fcode>、\u003Ccode>\u002Forders\u003C\u002Fcode> 等，后台 \u003Ccode>\u002Fadmin\u002F**\u003C\u002Fcode>）。前端通过 axios \u003Ccode>baseURL=\u002Fapi\u003C\u002Fcode> + Vite 代理将 \u003Ccode>\u002Fapi\u003C\u002Fcode> 前缀剥离后转发到后端，配合 Knife4j 生成在线 API 文档。\u003C\u002Fp>\n\u003Ch3 id=\"4.7-%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83%E6%80%A7\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#4.7-%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83%E6%80%A7\" aria-hidden=\"true\">\u003C\u002Fa> 4.7 代码规范性\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>全局统一异常处理（\u003Ccode>GlobalExceptionHandler\u003C\u002Fcode>），错误码枚举化管理\u003C\u002Fli>\n\u003Cli>分页统一返回结构（\u003Ccode>PageResult\u003C\u002Fcode>），前端无需适配不同接口\u003C\u002Fli>\n\u003Cli>所有数据库操作使用 Lambda 表达式构建条件，避免字段名硬编码\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"%E4%BA%94%E3%80%81%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#%E4%BA%94%E3%80%81%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84\" aria-hidden=\"true\">\u003C\u002Fa> 五、项目结构\u003C\u002Fh2>\n\u003Cdiv class=\"code-block-wrapper\">\u003Cdiv class=\"code-block-header\">\u003Cbutton class=\"code-copy-btn\" data-code=\"cinema-ticket-system\u002F\n├── db\u002F                                  # 数据库脚本\n│   ├── init.sql                         # 初始化：建库建表 + 基础数据（管理员账号、电影分类）\n│   └── demo.sql                         # 演示数据：用户\u002F电影\u002F影厅\u002F场次\u002F订单\u002F支付\u002F评论（可反复执行）\n├── springboot\u002F                          # 后端 Spring Boot 项目\n│   ├── src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002F\n│   │   ├── common\u002F                      # 公共模块\n│   │   │   ├── annotation\u002F             # @Anonymous、@RequireRole 注解\n│   │   │   ├── constant\u002F               # 业务常量\n│   │   │   ├── enums\u002F                  # 13 个枚举类\n│   │   │   ├── exception\u002F             # 全局异常处理 + 错误码\n│   │   │   ├── BaseEntity.java         # 基础实体（id + 时间戳）\n│   │   │   ├── LogicDeleteEntity.java  # 逻辑删除实体\n│   │   │   ├── PageResult.java         # 统一分页结果\n│   │   │   ├── Result.java             # 统一响应体\n│   │   │   └── UserContext.java        # 用户上下文工具\n│   │   ├── config\u002F                      # 配置类\n│   │   │   ├── CorsConfig.java         # 跨域配置\n│   │   │   ├── MybatisPlusConfig.java  # MP 分页+乐观锁+自动填充\n│   │   │   └── WebMvcConfig.java       # 拦截器注册 + 静态资源\n│   │   ├── controller\u002F\n│   │   │   ├── admin\u002F                  # 8 个后台控制器\n│   │   │   ├── portal\u002F                 # 6 个前台控制器\n│   │   │   └── FileController.java     # 文件上传\n│   │   ├── dto\u002F                         # 数据传输对象（7 个模块）\n│   │   ├── entity\u002F                      # 11 个实体类\n│   │   ├── mapper\u002F                      # 12 个 Mapper 接口\n│   │   ├── security\u002F                    # JWT + 拦截器\n│   │   │   ├── JwtUtils.java           # Token 生成\u002F解析\n│   │   │   ├── JwtAuthInterceptor.java # 认证拦截器\n│   │   │   └── AdminAuthInterceptor.java # 鉴权拦截器\n│   │   ├── service\u002F                     # 10 个业务服务类\n│   │   ├── task\u002F                        # 定时任务\n│   │   ├── utils\u002F                       # 工具类\n│   │   ├── vo\u002F                          # 视图对象（7 个模块）\n│   │   └── MainApplication.java         # 启动类\n│   └── src\u002Fmain\u002Fresources\u002F\n│       ├── mapper\u002F                      # 3 个 XML 自定义 SQL\n│       └── application.yml              # 主配置文件\n├── vue\u002F                                 # 前端 Vue 3 项目\n│   └── src\u002F\n│       ├── api\u002F                         # API 封装\n│       │   ├── admin\u002F                   # 后台接口（7 个模块 + index.js 汇总）\n│       │   ├── portal\u002F                  # 前台接口（4 个模块）\n│       │   └── request.js               # Axios 拦截器（认证+错误处理）\n│       ├── components\u002F\n│       │   └── common\u002FMovieCard.vue     # 电影卡片组件\n│       ├── layouts\u002F\n│       │   ├── PortalLayout.vue         # 前台布局（导航+页脚）\n│       │   └── AdminLayout.vue          # 后台布局（侧边栏+顶栏）\n│       ├── router\u002Findex.js              # 路由配置（28 条路由）\n│       ├── stores\u002FuseUserStore.js       # Pinia 用户状态\n│       ├── utils\u002FfileUrl.js             # 文件路径工具\n│       ├── views\u002F\n│       │   ├── portal\u002F                  # 前台页面（7 个模块 12 页）\n│       │   └── admin\u002F                   # 后台页面（7 个模块 9 页）\n│       └── main.js                      # 入口文件\n└── uploads\u002F                             # 文件上传目录\n    └── demo\u002F                            # 演示图片（随仓库提交，供 init.sql \u002F demo.sql 引用）\n        ├── admin.webp                   # 默认头像（admin 及演示账号共用）\n        ├── goat.png                     # 电影《奇迹梦之队》海报\n        ├── pegasus.jpeg                 # 电影《飞驰人生3》海报\n        ├── blades.jpg                   # 电影《镖人：风起大漠》海报\n        ├── avatar3.jpg                  # 电影《阿凡达3》海报\n        └── test-poster-1~8.*            # 测试海报\n\" title=\"复制代码\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\u003Crect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"\u002F>\u003Cpath d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\u002F>\u003C\u002Fsvg>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e\" tabindex=\"0\">\u003Ccode class=\"language-text\">\u003Cspan class=\"line\">\u003Cspan>cinema-ticket-system\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>├── db\u002F                                  # 数据库脚本\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   ├── init.sql                         # 初始化：建库建表 + 基础数据（管理员账号、电影分类）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   └── demo.sql                         # 演示数据：用户\u002F电影\u002F影厅\u002F场次\u002F订单\u002F支付\u002F评论（可反复执行）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>├── springboot\u002F                          # 后端 Spring Boot 项目\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   ├── src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   ├── common\u002F                      # 公共模块\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   │   ├── annotation\u002F             # @Anonymous、@RequireRole 注解\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   │   ├── constant\u002F               # 业务常量\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   │   ├── enums\u002F                  # 13 个枚举类\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   │   ├── exception\u002F             # 全局异常处理 + 错误码\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   │   ├── BaseEntity.java         # 基础实体（id + 时间戳）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   │   ├── LogicDeleteEntity.java  # 逻辑删除实体\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   │   ├── PageResult.java         # 统一分页结果\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   │   ├── Result.java             # 统一响应体\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   │   └── UserContext.java        # 用户上下文工具\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   ├── config\u002F                      # 配置类\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   │   ├── CorsConfig.java         # 跨域配置\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   │   ├── MybatisPlusConfig.java  # MP 分页+乐观锁+自动填充\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   │   └── WebMvcConfig.java       # 拦截器注册 + 静态资源\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   ├── controller\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   │   ├── admin\u002F                  # 8 个后台控制器\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   │   ├── portal\u002F                 # 6 个前台控制器\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   │   └── FileController.java     # 文件上传\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   ├── dto\u002F                         # 数据传输对象（7 个模块）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   ├── entity\u002F                      # 11 个实体类\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   ├── mapper\u002F                      # 12 个 Mapper 接口\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   ├── security\u002F                    # JWT + 拦截器\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   │   ├── JwtUtils.java           # Token 生成\u002F解析\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   │   ├── JwtAuthInterceptor.java # 认证拦截器\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   │   └── AdminAuthInterceptor.java # 鉴权拦截器\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   ├── service\u002F                     # 10 个业务服务类\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   ├── task\u002F                        # 定时任务\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   ├── utils\u002F                       # 工具类\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   ├── vo\u002F                          # 视图对象（7 个模块）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   │   └── MainApplication.java         # 启动类\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   └── src\u002Fmain\u002Fresources\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       ├── mapper\u002F                      # 3 个 XML 自定义 SQL\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       └── application.yml              # 主配置文件\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>├── vue\u002F                                 # 前端 Vue 3 项目\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   └── src\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       ├── api\u002F                         # API 封装\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   ├── admin\u002F                   # 后台接口（7 个模块 + index.js 汇总）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   ├── portal\u002F                  # 前台接口（4 个模块）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   └── request.js               # Axios 拦截器（认证+错误处理）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       ├── components\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   └── common\u002FMovieCard.vue     # 电影卡片组件\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       ├── layouts\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   ├── PortalLayout.vue         # 前台布局（导航+页脚）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   └── AdminLayout.vue          # 后台布局（侧边栏+顶栏）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       ├── router\u002Findex.js              # 路由配置（28 条路由）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       ├── stores\u002FuseUserStore.js       # Pinia 用户状态\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       ├── utils\u002FfileUrl.js             # 文件路径工具\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       ├── views\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   ├── portal\u002F                  # 前台页面（7 个模块 12 页）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   └── admin\u002F                   # 后台页面（7 个模块 9 页）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       └── main.js                      # 入口文件\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>└── uploads\u002F                             # 文件上传目录\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    └── demo\u002F                            # 演示图片（随仓库提交，供 init.sql \u002F demo.sql 引用）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        ├── admin.webp                   # 默认头像（admin 及演示账号共用）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        ├── goat.png                     # 电影《奇迹梦之队》海报\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        ├── pegasus.jpeg                 # 电影《飞驰人生3》海报\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        ├── blades.jpg                   # 电影《镖人：风起大漠》海报\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        ├── avatar3.jpg                  # 电影《阿凡达3》海报\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        └── test-poster-1~8.*            # 测试海报\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>",[],[]]