[{"data":1,"prerenderedAt":2360},["ShallowReactive",2],{"$f36w0snpoc33ft":3,"\u002Fdocs\u002Fmanual\u002Fpage\u002Fmiddleware":349,"\u002Fdocs\u002Fmanual\u002Fpage\u002Fmiddleware-surround":2355},[4,44,136,204,226,338],{"title":5,"titleTemplate":6,"icon":7,"redirect":8,"path":9,"stem":10,"children":11,"page":28},"起步指南",null,"i-lucide:rocket","\u002Fdocs\u002Fguide\u002Foverview\u002Fintroduction","\u002Fdocs\u002Fguide","docs\u002F1.guide",[12,29],{"title":13,"titleTemplate":6,"icon":14,"defaultOpen":15,"path":16,"stem":17,"children":18,"page":28},"概览","i-lucide:book-open",true,"\u002Fdocs\u002Fguide\u002Foverview","docs\u002F1.guide\u002F1.overview",[19,23],{"title":20,"path":8,"stem":21,"titleTemplate":6,"icon":22},"介绍","docs\u002F1.guide\u002F1.overview\u002F01.introduction","i-lucide:bot",{"title":24,"path":25,"stem":26,"titleTemplate":6,"icon":27},"安装","\u002Fdocs\u002Fguide\u002Foverview\u002Finstallation","docs\u002F1.guide\u002F1.overview\u002F02.installation","i-lucide:download",false,{"title":30,"titleTemplate":6,"icon":22,"path":31,"stem":32,"children":33,"page":28},"Agents","\u002Fdocs\u002Fguide\u002Fagents","docs\u002F1.guide\u002F2.agents",[34,39],{"title":35,"path":36,"stem":37,"titleTemplate":6,"icon":38},"LLMs.txt","\u002Fdocs\u002Fguide\u002Fagents\u002Fllms-txt","docs\u002F1.guide\u002F2.agents\u002F01.llms-txt","i-lucide:file-text",{"title":40,"path":41,"stem":42,"titleTemplate":6,"icon":43},"Skills","\u002Fdocs\u002Fguide\u002Fagents\u002Fskills","docs\u002F1.guide\u002F2.agents\u002F02.skills","i-lucide:sparkles",{"title":45,"path":46,"stem":47,"children":48,"titleTemplate":6,"icon":51},"使用手册","\u002Fdocs\u002Fmanual","docs\u002F2.manual\u002F00.index",[49,52,57,62,78,104,125],{"title":45,"path":46,"stem":47,"titleTemplate":50,"icon":51},"%s | Oiyo","i-lucide:book-open-check",{"title":53,"path":54,"stem":55,"titleTemplate":6,"icon":56},"工程接入","\u002Fdocs\u002Fmanual\u002Fengineering","docs\u002F2.manual\u002F01.engineering","i-lucide:plug",{"title":58,"path":59,"stem":60,"titleTemplate":6,"icon":61},"配置系统","\u002Fdocs\u002Fmanual\u002Fconfiguration","docs\u002F2.manual\u002F02.configuration","i-lucide:sliders-horizontal",{"title":63,"titleTemplate":6,"defaultOpen":15,"icon":64,"path":65,"stem":66,"children":67,"page":28},"扫描导入","i-lucide:scan-line","\u002Fdocs\u002Fmanual\u002Fscan","docs\u002F2.manual\u002F03.scan",[68,73],{"title":69,"path":70,"stem":71,"titleTemplate":6,"icon":72},"API 导入","\u002Fdocs\u002Fmanual\u002Fscan\u002Fapi","docs\u002F2.manual\u002F03.scan\u002F01.api","i-lucide:import",{"title":74,"path":75,"stem":76,"titleTemplate":6,"icon":77},"组件注册","\u002Fdocs\u002Fmanual\u002Fscan\u002Fcomponents","docs\u002F2.manual\u002F03.scan\u002F02.components","i-lucide:blocks",{"title":79,"titleTemplate":6,"defaultOpen":15,"icon":80,"path":81,"stem":82,"children":83,"page":28},"路由系统","i-lucide:map","\u002Fdocs\u002Fmanual\u002Fpage","docs\u002F2.manual\u002F04.page",[84,89,94,99],{"title":85,"path":86,"stem":87,"titleTemplate":6,"icon":88},"页面注册","\u002Fdocs\u002Fmanual\u002Fpage\u002Fregister","docs\u002F2.manual\u002F04.page\u002F01.register","i-lucide:file-box",{"title":90,"path":91,"stem":92,"titleTemplate":6,"icon":93},"页面元信息","\u002Fdocs\u002Fmanual\u002Fpage\u002Fmeta","docs\u002F2.manual\u002F04.page\u002F02.meta","i-lucide:file-cog",{"title":95,"path":96,"stem":97,"titleTemplate":6,"icon":98},"全局页面配置","\u002Fdocs\u002Fmanual\u002Fpage\u002Fconfig","docs\u002F2.manual\u002F04.page\u002F03.config","i-lucide:palette",{"title":100,"path":101,"stem":102,"titleTemplate":6,"icon":103},"页面中间件","\u002Fdocs\u002Fmanual\u002Fpage\u002Fmiddleware","docs\u002F2.manual\u002F04.page\u002F04.middleware","i-lucide:shield-check",{"title":105,"titleTemplate":6,"defaultOpen":15,"icon":106,"path":107,"stem":108,"children":109,"page":28},"视图结构","i-lucide:panels-top-left","\u002Fdocs\u002Fmanual\u002Fshell","docs\u002F2.manual\u002F05.shell",[110,115,120],{"title":111,"path":112,"stem":113,"titleTemplate":6,"icon":114},"应用骨架","\u002Fdocs\u002Fmanual\u002Fshell\u002Fapp-shell","docs\u002F2.manual\u002F05.shell\u002F01.app-shell","i-lucide:app-window",{"title":116,"path":117,"stem":118,"titleTemplate":6,"icon":119},"根上下文","\u002Fdocs\u002Fmanual\u002Fshell\u002Froot-context","docs\u002F2.manual\u002F05.shell\u002F02.root-context","i-lucide:network",{"title":121,"path":122,"stem":123,"titleTemplate":6,"icon":124},"布局系统","\u002Fdocs\u002Fmanual\u002Fshell\u002Flayout","docs\u002F2.manual\u002F05.shell\u002F03.layout","i-lucide:layout-template",{"title":126,"titleTemplate":6,"defaultOpen":15,"icon":127,"path":128,"stem":129,"children":130,"page":28},"数据获取","i-lucide:arrow-down-up","\u002Fdocs\u002Fmanual\u002Fdata","docs\u002F2.manual\u002F06.data",[131],{"title":132,"path":133,"stem":134,"titleTemplate":6,"icon":135},"网络请求","\u002Fdocs\u002Fmanual\u002Fdata\u002Fhttp","docs\u002F2.manual\u002F06.data\u002F01.http","i-lucide:globe",{"title":137,"path":138,"stem":139,"children":140,"titleTemplate":6,"icon":203},"项目结构","\u002Fdocs\u002Fstructure","docs\u002F3.structure\u002F0.index",[141,143,148,189,193,198],{"title":137,"path":138,"stem":139,"titleTemplate":50,"icon":142},"i-lucide-layers",{"title":144,"path":145,"stem":146,"titleTemplate":6,"icon":147},".oiyo","\u002Fdocs\u002Fstructure\u002Foiyo","docs\u002F3.structure\u002F1.oiyo","i-catppuccin:folder-temp",{"title":149,"titleTemplate":6,"defaultOpen":15,"icon":150,"path":151,"stem":152,"children":153,"page":28},"src","i-catppuccin:folder-src","\u002Fdocs\u002Fstructure\u002Fsrc","docs\u002F3.structure\u002F1.src",[154,159,164,169,174,179,184],{"title":155,"path":156,"stem":157,"titleTemplate":6,"icon":158},"components","\u002Fdocs\u002Fstructure\u002Fsrc\u002Fcomponents","docs\u002F3.structure\u002F1.src\u002F1.components","i-catppuccin:folder-components",{"title":160,"path":161,"stem":162,"titleTemplate":6,"icon":163},"composables","\u002Fdocs\u002Fstructure\u002Fsrc\u002Fcomposables","docs\u002F3.structure\u002F1.src\u002F1.composables","i-catppuccin:folder-composables",{"title":165,"path":166,"stem":167,"titleTemplate":6,"icon":168},"layouts","\u002Fdocs\u002Fstructure\u002Fsrc\u002Flayouts","docs\u002F3.structure\u002F1.src\u002F1.layouts","i-catppuccin:folder-layouts",{"title":170,"path":171,"stem":172,"titleTemplate":6,"icon":173},"packages","\u002Fdocs\u002Fstructure\u002Fsrc\u002Fpackages","docs\u002F3.structure\u002F1.src\u002F1.packages","i-catppuccin:folder-packages",{"title":175,"path":176,"stem":177,"titleTemplate":6,"icon":178},"pages","\u002Fdocs\u002Fstructure\u002Fsrc\u002Fpages","docs\u002F3.structure\u002F1.src\u002F1.pages","i-catppuccin:folder-views",{"title":180,"path":181,"stem":182,"titleTemplate":6,"icon":183},"App.vue","\u002Fdocs\u002Fstructure\u002Fsrc\u002Fapp","docs\u002F3.structure\u002F1.src\u002F2.app","i-catppuccin:vue",{"title":185,"path":186,"stem":187,"titleTemplate":6,"icon":188},"pages.config.ts","\u002Fdocs\u002Fstructure\u002Fsrc\u002Fpages-config","docs\u002F3.structure\u002F1.src\u002F3.pages-config","i-catppuccin:typescript",{"title":190,"path":191,"stem":192,"titleTemplate":6,"icon":188},"oiyo.config.ts","\u002Fdocs\u002Fstructure\u002Foiyo-config","docs\u002F3.structure\u002F3.oiyo-config",{"title":194,"path":195,"stem":196,"titleTemplate":6,"icon":197},"package.json","\u002Fdocs\u002Fstructure\u002Fpackage","docs\u002F3.structure\u002F3.package","i-catppuccin:package-json",{"title":199,"path":200,"stem":201,"titleTemplate":6,"icon":202},"tsconfig.json","\u002Fdocs\u002Fstructure\u002Ftsconfig","docs\u002F3.structure\u002F3.tsconfig","i-catppuccin:typescript-config","i-lucide:layers",{"title":205,"titleTemplate":6,"icon":206,"redirect":207,"path":208,"stem":209,"children":210,"page":28},"核心概念","i-lucide:leaf","\u002Fdocs\u002Fconcept\u002Fapp","\u002Fdocs\u002Fconcept","docs\u002F4.concept",[211,215,219,222],{"title":212,"path":207,"stem":213,"titleTemplate":6,"icon":214},"根部视图","docs\u002F4.concept\u002F01.app","i-lucide:route",{"title":216,"path":217,"stem":218,"titleTemplate":6,"icon":80},"自动路由","\u002Fdocs\u002Fconcept\u002Froute","docs\u002F4.concept\u002F02.route",{"title":121,"path":220,"stem":221,"titleTemplate":6,"icon":124},"\u002Fdocs\u002Fconcept\u002Flayout","docs\u002F4.concept\u002F03.layout",{"title":223,"path":224,"stem":225,"titleTemplate":6,"icon":64},"自动导入","\u002Fdocs\u002Fconcept\u002Fauto-imports","docs\u002F4.concept\u002F04.auto-imports",{"title":227,"path":228,"stem":229,"children":230,"titleTemplate":6,"icon":337},"API","\u002Fdocs\u002Fapi","docs\u002F5.api\u002F00.index",[231,233,247,257,287,305,319],{"title":232,"path":228,"stem":229,"titleTemplate":50},"API 参考",{"title":234,"titleTemplate":6,"defaultOpen":15,"icon":235,"path":236,"stem":237,"children":238,"page":28},"配置","i-lucide:settings","\u002Fdocs\u002Fapi\u002Fconfig","docs\u002F5.api\u002F01.config",[239,243],{"title":240,"path":241,"stem":242,"titleTemplate":6},"defineOiyoConfig","\u002Fdocs\u002Fapi\u002Fconfig\u002Fdefine-oiyo-config","docs\u002F5.api\u002F01.config\u002F01.define-oiyo-config",{"title":244,"path":245,"stem":246,"titleTemplate":6},"definePagesConfig","\u002Fdocs\u002Fapi\u002Fconfig\u002Fdefine-pages-config","docs\u002F5.api\u002F01.config\u002F02.define-pages-config",{"title":248,"titleTemplate":6,"defaultOpen":15,"icon":249,"path":250,"stem":251,"children":252,"page":28},"运行时","i-lucide:shrub","\u002Fdocs\u002Fapi\u002Fruntime","docs\u002F5.api\u002F02.runtime",[253],{"title":254,"path":255,"stem":256,"titleTemplate":6},"Vue \u002F UniApp","\u002Fdocs\u002Fapi\u002Fruntime\u002Freference","docs\u002F5.api\u002F02.runtime\u002F01.reference",{"title":258,"titleTemplate":6,"defaultOpen":15,"icon":259,"path":260,"stem":261,"children":262,"page":28},"实用工具","i-lucide:wrench","\u002Fdocs\u002Fapi\u002Futils","docs\u002F5.api\u002F03.utils",[263,267,271,275,279,283],{"title":264,"path":265,"stem":266,"titleTemplate":6},"http","\u002Fdocs\u002Fapi\u002Futils\u002Fhttp","docs\u002F5.api\u002F03.utils\u002F00.http",{"title":268,"path":269,"stem":270,"titleTemplate":6},"createHttp","\u002Fdocs\u002Fapi\u002Futils\u002Fcreate-http","docs\u002F5.api\u002F03.utils\u002F01.create-http",{"title":272,"path":273,"stem":274,"titleTemplate":6},"createHttpAborter","\u002Fdocs\u002Fapi\u002Futils\u002Fcreate-http-aborter","docs\u002F5.api\u002F03.utils\u002F02.create-http-aborter",{"title":276,"path":277,"stem":278,"titleTemplate":6},"defineRouteMiddleware","\u002Fdocs\u002Fapi\u002Futils\u002Fdefine-route-middleware","docs\u002F5.api\u002F03.utils\u002F03.define-route-middleware",{"title":280,"path":281,"stem":282,"titleTemplate":6},"goTo","\u002Fdocs\u002Fapi\u002Futils\u002Fgo-to","docs\u002F5.api\u002F03.utils\u002F04.go-to",{"title":284,"path":285,"stem":286,"titleTemplate":6},"abortNavigation","\u002Fdocs\u002Fapi\u002Futils\u002Fabort-navigation","docs\u002F5.api\u002F03.utils\u002F05.abort-navigation",{"title":288,"titleTemplate":6,"defaultOpen":15,"icon":289,"path":290,"stem":291,"children":292,"page":28},"宏","i-lucide:wand","\u002Fdocs\u002Fapi\u002Fmacro","docs\u002F5.api\u002F04.macro",[293,297,301],{"title":294,"path":295,"stem":296,"titleTemplate":6},"defineRootContext","\u002Fdocs\u002Fapi\u002Fmacro\u002Fdefine-root-context","docs\u002F5.api\u002F04.macro\u002F01.define-root-context",{"title":298,"path":299,"stem":300,"titleTemplate":6},"useRootContext","\u002Fdocs\u002Fapi\u002Fmacro\u002Fuse-root-context","docs\u002F5.api\u002F04.macro\u002F02.use-root-context",{"title":302,"path":303,"stem":304,"titleTemplate":6},"definePageMeta","\u002Fdocs\u002Fapi\u002Fmacro\u002Fdefine-page-meta","docs\u002F5.api\u002F04.macro\u002F03.define-page-meta",{"title":306,"titleTemplate":6,"defaultOpen":15,"icon":307,"path":308,"stem":309,"children":310,"page":28},"组件","i-lucide:component","\u002Fdocs\u002Fapi\u002Fcomponents","docs\u002F5.api\u002F05.components",[311,315],{"title":312,"path":313,"stem":314,"titleTemplate":6},"\u003COiyoPage>","\u002Fdocs\u002Fapi\u002Fcomponents\u002Foiyo-page","docs\u002F5.api\u002F05.components\u002F01.oiyo-page",{"title":316,"path":317,"stem":318,"titleTemplate":6},"\u003COiyoLayout>","\u002Fdocs\u002Fapi\u002Fcomponents\u002Foiyo-layout","docs\u002F5.api\u002F05.components\u002F02.oiyo-layout",{"title":320,"titleTemplate":6,"defaultOpen":15,"icon":321,"path":322,"stem":323,"children":324,"page":28},"命令","i-lucide:command","\u002Fdocs\u002Fapi\u002Fcli","docs\u002F5.api\u002F06.cli",[325,329,333],{"title":326,"path":327,"stem":328,"titleTemplate":6},"oiyo prepare","\u002Fdocs\u002Fapi\u002Fcli\u002Foiyo-prepare","docs\u002F5.api\u002F06.cli\u002F00.oiyo-prepare",{"title":330,"path":331,"stem":332,"titleTemplate":6},"oiyo dev","\u002Fdocs\u002Fapi\u002Fcli\u002Foiyo-dev","docs\u002F5.api\u002F06.cli\u002F01.oiyo-dev",{"title":334,"path":335,"stem":336,"titleTemplate":6},"oiyo build","\u002Fdocs\u002Fapi\u002Fcli\u002Foiyo-build","docs\u002F5.api\u002F06.cli\u002F02.oiyo-build","i-lucide:braces",{"title":339,"titleTemplate":6,"icon":340,"redirect":341,"path":342,"stem":343,"children":344,"page":28},"沟通交流","i-lucide:message-circle-question","\u002Fdocs\u002Fcommunity\u002Fassist","\u002Fdocs\u002Fcommunity","docs\u002F9.community",[345],{"title":346,"path":341,"stem":347,"titleTemplate":6,"icon":348},"加群互助","docs\u002F9.community\u002F01.assist","i-lucide:scan-qr-code",{"id":350,"title":100,"body":351,"description":2349,"extension":2350,"meta":2351,"navigation":2352,"path":101,"seo":2353,"stem":102,"titleTemplate":6,"__hash__":2354},"docs\u002Fdocs\u002F2.manual\u002F04.page\u002F04.middleware.md",{"type":352,"value":353,"toc":2331},"minimark",[354,362,374,378,388,399,410,538,541,555,568,571,575,582,588,799,805,808,814,1012,1018,1092,1095,1162,1173,1176,1179,1194,1197,1200,1207,1242,1245,1256,1355,1369,1373,1455,1458,1464,1467,1481,1523,1527,1533,1556,1560,1607,1613,1631,1634,1637,1648,1721,1724,1753,1764,1767,1770,1939,1942,2115,2118,2184,2187,2190,2297,2300,2314,2317,2327],[355,356,357,358,361],"p",{},"页面中间件用于在进入页面前执行登录校验、权限校验、参数检查、页面重定向等逻辑。它和页面文件、",[359,360,302],"code",{}," 配合使用：中间件负责导航判断，页面负责声明需要哪些中间件。",[363,364,365],"tip",{},[355,366,367,368,373],{},"中间件是页面导航的守卫，不是请求拦截器。需要处理接口请求前后的统一逻辑时，请使用 ",[369,370,371],"a",{"href":133},[359,372,264],{}," 提供的生命周期钩子。",[375,376,377],"h2",{"id":377},"定义中间件",[355,379,380,381,384,385,387],{},"中间件文件放在项目的 ",[359,382,383],{},"src\u002Fmiddlewares"," 目录下，并通过默认导出 ",[359,386,276],{},"。",[389,390,397],"pre",{"className":391,"code":393,"filename":394,"language":395,"meta":396},[392],"language-text","src\n└─ middlewares\n   ├─ auth.global.ts\n   └─ permission.ts\n","目录结构","text","",[359,398,393],{"__ignoreMap":396},[355,400,401,402,405,406,409],{},"中间件接收目标路由 ",[359,403,404],{},"to"," 和来源路由 ",[359,407,408],{},"from","：",[389,411,415],{"className":412,"code":413,"language":414,"meta":396,"style":396},"language-ts shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","export default defineRouteMiddleware((to, from) => {\n  console.log(\"目标页面：\", to.path);\n  console.log(\"当前页面：\", from.path);\n});\n","ts",[359,416,417,459,498,528],{"__ignoreMap":396},[418,419,422,426,429,433,437,440,443,446,449,452,456],"span",{"class":420,"line":421},"line",1,[418,423,425],{"class":424},"s8R28","export",[418,427,428],{"class":424}," default",[418,430,432],{"class":431},"s3cPz"," defineRouteMiddleware",[418,434,436],{"class":435},"sZSNi","(",[418,438,436],{"class":439},"sDfIl",[418,441,404],{"class":442},"s1nJG",[418,444,445],{"class":439},",",[418,447,448],{"class":442}," from",[418,450,451],{"class":439},")",[418,453,455],{"class":454},"smZ93"," =>",[418,457,458],{"class":439}," {\n",[418,460,462,465,468,471,474,477,481,483,485,488,490,493,495],{"class":420,"line":461},2,[418,463,464],{"class":435},"  console",[418,466,467],{"class":439},".",[418,469,470],{"class":431},"log",[418,472,436],{"class":473},"sRlkE",[418,475,476],{"class":439},"\"",[418,478,480],{"class":479},"sGFVr","目标页面：",[418,482,476],{"class":439},[418,484,445],{"class":439},[418,486,487],{"class":435}," to",[418,489,467],{"class":439},[418,491,492],{"class":435},"path",[418,494,451],{"class":473},[418,496,497],{"class":439},";\n",[418,499,501,503,505,507,509,511,514,516,518,520,522,524,526],{"class":420,"line":500},3,[418,502,464],{"class":435},[418,504,467],{"class":439},[418,506,470],{"class":431},[418,508,436],{"class":473},[418,510,476],{"class":439},[418,512,513],{"class":479},"当前页面：",[418,515,476],{"class":439},[418,517,445],{"class":439},[418,519,448],{"class":435},[418,521,467],{"class":439},[418,523,492],{"class":435},[418,525,451],{"class":473},[418,527,497],{"class":439},[418,529,531,534,536],{"class":420,"line":530},4,[418,532,533],{"class":439},"}",[418,535,451],{"class":435},[418,537,497],{"class":439},[355,539,540],{},"其中：",[542,543,544,550],"ul",{},[545,546,547,549],"li",{},[359,548,404],{}," 表示即将进入的目标页面；",[545,551,552,554],{},[359,553,408],{}," 表示当前页面，可用于根据来源页面决定是否放行。",[556,557,559],"callout",{"color":558,"icon":337,"to":277},"neutral",[355,560,561,563,564,567],{},[359,562,276],{}," API 参考：查看 ",[359,565,566],{},"to\u002Ffrom"," 包含的字段",[375,569,570],{"id":570},"中间件类型",[572,573,574],"h3",{"id":574},"全局中间件",[355,576,577,578,581],{},"文件名以 ",[359,579,580],{},".global"," 结尾的中间件会应用到所有页面，不需要在页面中声明：",[389,583,586],{"className":584,"code":585,"language":395,"meta":396},[392],"src\u002Fmiddlewares\u002Fauth.global.ts\n",[359,587,585],{"__ignoreMap":396},[389,589,592],{"className":412,"code":590,"filename":591,"language":414,"meta":396,"style":396},"const WHITE_LIST = [\"\u002Fpages\u002Findex\u002Findex\", \"\u002Fpages\u002Flogin\u002Flogin\"];\n\nexport default defineRouteMiddleware((to, from) => {\n  if (WHITE_LIST.includes(to.path)) {\n    return;\n  }\n\n  if (!uni.getStorageSync(\"token\")) {\n    return goTo(\"\u002Fpages\u002Flogin\u002Flogin\", {\n      replace: true,\n    });\n  }\n});\n","src\u002Fmiddlewares\u002Fauth.global.ts",[359,593,594,630,635,659,689,697,703,708,739,759,775,785,790],{"__ignoreMap":396},[418,595,596,599,602,605,608,610,613,615,617,620,623,625,628],{"class":420,"line":421},[418,597,598],{"class":454},"const",[418,600,601],{"class":435}," WHITE_LIST ",[418,603,604],{"class":439},"=",[418,606,607],{"class":435}," [",[418,609,476],{"class":439},[418,611,612],{"class":479},"\u002Fpages\u002Findex\u002Findex",[418,614,476],{"class":439},[418,616,445],{"class":439},[418,618,619],{"class":439}," \"",[418,621,622],{"class":479},"\u002Fpages\u002Flogin\u002Flogin",[418,624,476],{"class":439},[418,626,627],{"class":435},"]",[418,629,497],{"class":439},[418,631,632],{"class":420,"line":461},[418,633,634],{"emptyLinePlaceholder":15},"\n",[418,636,637,639,641,643,645,647,649,651,653,655,657],{"class":420,"line":500},[418,638,425],{"class":424},[418,640,428],{"class":424},[418,642,432],{"class":431},[418,644,436],{"class":435},[418,646,436],{"class":439},[418,648,404],{"class":442},[418,650,445],{"class":439},[418,652,448],{"class":442},[418,654,451],{"class":439},[418,656,455],{"class":454},[418,658,458],{"class":439},[418,660,661,664,667,670,672,675,677,679,681,683,686],{"class":420,"line":530},[418,662,663],{"class":424},"  if",[418,665,666],{"class":473}," (",[418,668,669],{"class":435},"WHITE_LIST",[418,671,467],{"class":439},[418,673,674],{"class":431},"includes",[418,676,436],{"class":473},[418,678,404],{"class":435},[418,680,467],{"class":439},[418,682,492],{"class":435},[418,684,685],{"class":473},")) ",[418,687,688],{"class":439},"{\n",[418,690,692,695],{"class":420,"line":691},5,[418,693,694],{"class":424},"    return",[418,696,497],{"class":439},[418,698,700],{"class":420,"line":699},6,[418,701,702],{"class":439},"  }\n",[418,704,706],{"class":420,"line":705},7,[418,707,634],{"emptyLinePlaceholder":15},[418,709,711,713,715,718,721,723,726,728,730,733,735,737],{"class":420,"line":710},8,[418,712,663],{"class":424},[418,714,666],{"class":473},[418,716,717],{"class":439},"!",[418,719,720],{"class":435},"uni",[418,722,467],{"class":439},[418,724,725],{"class":431},"getStorageSync",[418,727,436],{"class":473},[418,729,476],{"class":439},[418,731,732],{"class":479},"token",[418,734,476],{"class":439},[418,736,685],{"class":473},[418,738,688],{"class":439},[418,740,742,744,747,749,751,753,755,757],{"class":420,"line":741},9,[418,743,694],{"class":424},[418,745,746],{"class":431}," goTo",[418,748,436],{"class":473},[418,750,476],{"class":439},[418,752,622],{"class":479},[418,754,476],{"class":439},[418,756,445],{"class":439},[418,758,458],{"class":439},[418,760,762,765,768,772],{"class":420,"line":761},10,[418,763,764],{"class":473},"      replace",[418,766,767],{"class":439},":",[418,769,771],{"class":770},"sbKd-"," true",[418,773,774],{"class":439},",\n",[418,776,778,781,783],{"class":420,"line":777},11,[418,779,780],{"class":439},"    }",[418,782,451],{"class":473},[418,784,497],{"class":439},[418,786,788],{"class":420,"line":787},12,[418,789,702],{"class":439},[418,791,793,795,797],{"class":420,"line":792},13,[418,794,533],{"class":439},[418,796,451],{"class":435},[418,798,497],{"class":439},[800,801,802],"note",{},[355,803,804],{},"全局中间件始终先于页面声明的具名中间件执行。",[572,806,807],{"id":807},"具名中间件",[355,809,810,811,409],{},"创建 ",[359,812,813],{},"src\u002Fmiddlewares\u002Fpermission.ts",[389,815,817],{"className":412,"code":816,"filename":813,"language":414,"meta":396,"style":396},"export default defineRouteMiddleware(async (to, from) => {\n  const user = await getCurrentUser();\n\n  if (!user) {\n    return goTo(\"\u002Fpages\u002Flogin\u002Flogin\", { replace: true });\n  }\n\n  if (!user.hasPermission && to.path.startsWith(\"\u002Fpages\u002Fadmin\u002F\")) {\n    return abortNavigation(new Error(\"没有访问权限\"));\n  }\n});\n",[359,818,819,846,868,872,888,921,925,929,971,1000,1004],{"__ignoreMap":396},[418,820,821,823,825,827,829,832,834,836,838,840,842,844],{"class":420,"line":421},[418,822,425],{"class":424},[418,824,428],{"class":424},[418,826,432],{"class":431},[418,828,436],{"class":435},[418,830,831],{"class":454},"async",[418,833,666],{"class":439},[418,835,404],{"class":442},[418,837,445],{"class":439},[418,839,448],{"class":442},[418,841,451],{"class":439},[418,843,455],{"class":454},[418,845,458],{"class":439},[418,847,848,851,854,857,860,863,866],{"class":420,"line":461},[418,849,850],{"class":454},"  const",[418,852,853],{"class":435}," user",[418,855,856],{"class":439}," =",[418,858,859],{"class":424}," await",[418,861,862],{"class":431}," getCurrentUser",[418,864,865],{"class":473},"()",[418,867,497],{"class":439},[418,869,870],{"class":420,"line":500},[418,871,634],{"emptyLinePlaceholder":15},[418,873,874,876,878,880,883,886],{"class":420,"line":530},[418,875,663],{"class":424},[418,877,666],{"class":473},[418,879,717],{"class":439},[418,881,882],{"class":435},"user",[418,884,885],{"class":473},") ",[418,887,688],{"class":439},[418,889,890,892,894,896,898,900,902,904,907,910,912,914,917,919],{"class":420,"line":691},[418,891,694],{"class":424},[418,893,746],{"class":431},[418,895,436],{"class":473},[418,897,476],{"class":439},[418,899,622],{"class":479},[418,901,476],{"class":439},[418,903,445],{"class":439},[418,905,906],{"class":439}," {",[418,908,909],{"class":473}," replace",[418,911,767],{"class":439},[418,913,771],{"class":770},[418,915,916],{"class":439}," }",[418,918,451],{"class":473},[418,920,497],{"class":439},[418,922,923],{"class":420,"line":699},[418,924,702],{"class":439},[418,926,927],{"class":420,"line":705},[418,928,634],{"emptyLinePlaceholder":15},[418,930,931,933,935,937,939,941,944,947,949,951,953,955,958,960,962,965,967,969],{"class":420,"line":710},[418,932,663],{"class":424},[418,934,666],{"class":473},[418,936,717],{"class":439},[418,938,882],{"class":435},[418,940,467],{"class":439},[418,942,943],{"class":435},"hasPermission",[418,945,946],{"class":439}," &&",[418,948,487],{"class":435},[418,950,467],{"class":439},[418,952,492],{"class":435},[418,954,467],{"class":439},[418,956,957],{"class":431},"startsWith",[418,959,436],{"class":473},[418,961,476],{"class":439},[418,963,964],{"class":479},"\u002Fpages\u002Fadmin\u002F",[418,966,476],{"class":439},[418,968,685],{"class":473},[418,970,688],{"class":439},[418,972,973,975,978,980,983,986,988,990,993,995,998],{"class":420,"line":741},[418,974,694],{"class":424},[418,976,977],{"class":431}," abortNavigation",[418,979,436],{"class":473},[418,981,982],{"class":439},"new",[418,984,985],{"class":431}," Error",[418,987,436],{"class":473},[418,989,476],{"class":439},[418,991,992],{"class":479},"没有访问权限",[418,994,476],{"class":439},[418,996,997],{"class":473},"))",[418,999,497],{"class":439},[418,1001,1002],{"class":420,"line":761},[418,1003,702],{"class":439},[418,1005,1006,1008,1010],{"class":420,"line":777},[418,1007,533],{"class":439},[418,1009,451],{"class":435},[418,1011,497],{"class":439},[355,1013,1014,1015,1017],{},"页面模块中通过 ",[359,1016,302],{}," 使用：",[389,1019,1024],{"className":1020,"code":1021,"filename":1022,"language":1023,"meta":396,"style":396},"language-vue shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","\u003Cscript setup lang=\"ts\">\ndefinePageMeta({\n  middleware: \"permission\",\n});\n\u003C\u002Fscript>\n","src\u002Fpages\u002Fdashboard\u002Findex.vue","vue",[359,1025,1026,1051,1059,1075,1083],{"__ignoreMap":396},[418,1027,1028,1031,1034,1037,1040,1042,1044,1046,1048],{"class":420,"line":421},[418,1029,1030],{"class":439},"\u003C",[418,1032,1033],{"class":473},"script",[418,1035,1036],{"class":454}," setup",[418,1038,1039],{"class":454}," lang",[418,1041,604],{"class":439},[418,1043,476],{"class":439},[418,1045,414],{"class":479},[418,1047,476],{"class":439},[418,1049,1050],{"class":439},">\n",[418,1052,1053,1055,1057],{"class":420,"line":461},[418,1054,302],{"class":431},[418,1056,436],{"class":435},[418,1058,688],{"class":439},[418,1060,1061,1064,1066,1068,1071,1073],{"class":420,"line":500},[418,1062,1063],{"class":473},"  middleware",[418,1065,767],{"class":439},[418,1067,619],{"class":439},[418,1069,1070],{"class":479},"permission",[418,1072,476],{"class":439},[418,1074,774],{"class":439},[418,1076,1077,1079,1081],{"class":420,"line":530},[418,1078,533],{"class":439},[418,1080,451],{"class":435},[418,1082,497],{"class":439},[418,1084,1085,1088,1090],{"class":420,"line":691},[418,1086,1087],{"class":439},"\u003C\u002F",[418,1089,1033],{"class":473},[418,1091,1050],{"class":439},[355,1093,1094],{},"多个具名中间件可以使用数组，数组中的中间件会按照声明顺序执行：",[389,1096,1098],{"className":1020,"code":1097,"language":1023,"meta":396,"style":396},"\u003Cscript setup lang=\"ts\">\ndefinePageMeta({\n  middleware: [\"permission\"],\n});\n\u003C\u002Fscript>\n",[359,1099,1100,1120,1128,1146,1154],{"__ignoreMap":396},[418,1101,1102,1104,1106,1108,1110,1112,1114,1116,1118],{"class":420,"line":421},[418,1103,1030],{"class":439},[418,1105,1033],{"class":473},[418,1107,1036],{"class":454},[418,1109,1039],{"class":454},[418,1111,604],{"class":439},[418,1113,476],{"class":439},[418,1115,414],{"class":479},[418,1117,476],{"class":439},[418,1119,1050],{"class":439},[418,1121,1122,1124,1126],{"class":420,"line":461},[418,1123,302],{"class":431},[418,1125,436],{"class":435},[418,1127,688],{"class":439},[418,1129,1130,1132,1134,1136,1138,1140,1142,1144],{"class":420,"line":500},[418,1131,1063],{"class":473},[418,1133,767],{"class":439},[418,1135,607],{"class":435},[418,1137,476],{"class":439},[418,1139,1070],{"class":479},[418,1141,476],{"class":439},[418,1143,627],{"class":435},[418,1145,774],{"class":439},[418,1147,1148,1150,1152],{"class":420,"line":530},[418,1149,533],{"class":439},[418,1151,451],{"class":435},[418,1153,497],{"class":439},[418,1155,1156,1158,1160],{"class":420,"line":691},[418,1157,1087],{"class":439},[418,1159,1033],{"class":473},[418,1161,1050],{"class":439},[800,1163,1164,1167],{},[355,1165,1166],{},"页面中声明的是具名中间件名称；中间件名称由文件路径决定，不包含文件扩展名：",[389,1168,1171],{"className":1169,"code":1170,"language":395,"meta":396},[392],"src\u002Fmiddlewares\u002Fpermission.ts -> permission\nsrc\u002Fmiddlewares\u002Fmember\u002Frequires.ts -> member-requires\n",[359,1172,1170],{"__ignoreMap":396},[375,1174,1175],{"id":1175},"工作方式",[355,1177,1178],{},"请求进入页面时，Oiyo 会按以下顺序执行：",[1180,1181,1182,1185,1191],"ol",{},[545,1183,1184],{},"先执行所有全局中间件；",[545,1186,1187,1188,1190],{},"再按页面 ",[359,1189,302],{}," 中声明的顺序执行具名中间件；",[545,1192,1193],{},"中间件根据返回的行为，引导当前导航放行\u002F重定向\u002F中止；",[375,1195,1196],{"id":1196},"导航行为",[572,1198,1199],{"id":1199},"放行",[355,1201,1202,1203,1206],{},"不返回值或返回 ",[359,1204,1205],{},"true","，继续执行后续中间件：",[389,1208,1210],{"className":412,"code":1209,"language":414,"meta":396,"style":396},"export default defineRouteMiddleware(() => {\n  \u002F\u002F 不返回值，放行导航\n});\n",[359,1211,1212,1228,1234],{"__ignoreMap":396},[418,1213,1214,1216,1218,1220,1222,1224,1226],{"class":420,"line":421},[418,1215,425],{"class":424},[418,1217,428],{"class":424},[418,1219,432],{"class":431},[418,1221,436],{"class":435},[418,1223,865],{"class":439},[418,1225,455],{"class":454},[418,1227,458],{"class":439},[418,1229,1230],{"class":420,"line":461},[418,1231,1233],{"class":1232},"sWuyu","  \u002F\u002F 不返回值，放行导航\n",[418,1235,1236,1238,1240],{"class":420,"line":500},[418,1237,533],{"class":439},[418,1239,451],{"class":435},[418,1241,497],{"class":439},[572,1243,1244],{"id":1244},"重定向",[355,1246,1247,1248,1251,1252,1255],{},"使用 ",[359,1249,1250],{},"goTo()"," 创建重定向结果，并通过 ",[359,1253,1254],{},"return"," 返回：",[389,1257,1259],{"className":412,"code":1258,"language":414,"meta":396,"style":396},"export default defineRouteMiddleware((to) => {\n  if (to.path !== \"\u002Fpages\u002Flogin\u002Flogin\" && !uni.getStorageSync(\"token\")) {\n    return goTo(\"\u002Fpages\u002Flogin\u002Flogin\");\n  }\n});\n",[359,1260,1261,1281,1325,1343,1347],{"__ignoreMap":396},[418,1262,1263,1265,1267,1269,1271,1273,1275,1277,1279],{"class":420,"line":421},[418,1264,425],{"class":424},[418,1266,428],{"class":424},[418,1268,432],{"class":431},[418,1270,436],{"class":435},[418,1272,436],{"class":439},[418,1274,404],{"class":442},[418,1276,451],{"class":439},[418,1278,455],{"class":454},[418,1280,458],{"class":439},[418,1282,1283,1285,1287,1289,1291,1293,1296,1298,1300,1302,1304,1307,1309,1311,1313,1315,1317,1319,1321,1323],{"class":420,"line":461},[418,1284,663],{"class":424},[418,1286,666],{"class":473},[418,1288,404],{"class":435},[418,1290,467],{"class":439},[418,1292,492],{"class":435},[418,1294,1295],{"class":439}," !==",[418,1297,619],{"class":439},[418,1299,622],{"class":479},[418,1301,476],{"class":439},[418,1303,946],{"class":439},[418,1305,1306],{"class":439}," !",[418,1308,720],{"class":435},[418,1310,467],{"class":439},[418,1312,725],{"class":431},[418,1314,436],{"class":473},[418,1316,476],{"class":439},[418,1318,732],{"class":479},[418,1320,476],{"class":439},[418,1322,685],{"class":473},[418,1324,688],{"class":439},[418,1326,1327,1329,1331,1333,1335,1337,1339,1341],{"class":420,"line":500},[418,1328,694],{"class":424},[418,1330,746],{"class":431},[418,1332,436],{"class":473},[418,1334,476],{"class":439},[418,1336,622],{"class":479},[418,1338,476],{"class":439},[418,1340,451],{"class":473},[418,1342,497],{"class":439},[418,1344,1345],{"class":420,"line":530},[418,1346,702],{"class":439},[418,1348,1349,1351,1353],{"class":420,"line":691},[418,1350,533],{"class":439},[418,1352,451],{"class":435},[418,1354,497],{"class":439},[1356,1357,1358],"warning",{},[355,1359,1360,1362,1363,1365,1366,1368],{},[359,1361,1250],{}," 必须通过 ",[359,1364,1254],{}," 返回。仅调用 ",[359,1367,1250],{}," 不会触发重定向。",[1370,1371,1372],"h4",{"id":1372},"携带查询参数",[389,1374,1376],{"className":412,"code":1375,"language":414,"meta":396,"style":396},"return goTo({\n  path: \"\u002Fpages\u002Fsearch\u002Fresult\",\n  query: {\n    keyword: \"uni-app\",\n    page: 1,\n  },\n});\n",[359,1377,1378,1388,1404,1413,1429,1442,1447],{"__ignoreMap":396},[418,1379,1380,1382,1384,1386],{"class":420,"line":421},[418,1381,1254],{"class":424},[418,1383,746],{"class":431},[418,1385,436],{"class":435},[418,1387,688],{"class":439},[418,1389,1390,1393,1395,1397,1400,1402],{"class":420,"line":461},[418,1391,1392],{"class":473},"  path",[418,1394,767],{"class":439},[418,1396,619],{"class":439},[418,1398,1399],{"class":479},"\u002Fpages\u002Fsearch\u002Fresult",[418,1401,476],{"class":439},[418,1403,774],{"class":439},[418,1405,1406,1409,1411],{"class":420,"line":500},[418,1407,1408],{"class":473},"  query",[418,1410,767],{"class":439},[418,1412,458],{"class":439},[418,1414,1415,1418,1420,1422,1425,1427],{"class":420,"line":530},[418,1416,1417],{"class":473},"    keyword",[418,1419,767],{"class":439},[418,1421,619],{"class":439},[418,1423,1424],{"class":479},"uni-app",[418,1426,476],{"class":439},[418,1428,774],{"class":439},[418,1430,1431,1434,1436,1440],{"class":420,"line":691},[418,1432,1433],{"class":473},"    page",[418,1435,767],{"class":439},[418,1437,1439],{"class":1438},"sYRBq"," 1",[418,1441,774],{"class":439},[418,1443,1444],{"class":420,"line":699},[418,1445,1446],{"class":439},"  },\n",[418,1448,1449,1451,1453],{"class":420,"line":705},[418,1450,533],{"class":439},[418,1452,451],{"class":435},[418,1454,497],{"class":439},[355,1456,1457],{},"最终目标地址为：",[389,1459,1462],{"className":1460,"code":1461,"language":395,"meta":396},[392],"\u002Fpages\u002Fsearch\u002Fresult?keyword=uni-app&page=1\n",[359,1463,1461],{"__ignoreMap":396},[1370,1465,1466],{"id":1466},"替换当前页面",[355,1468,1469,1470,1473,1474,1477,1478,409],{},"普通页面默认使用 ",[359,1471,1472],{},"navigateTo","。设置 ",[359,1475,1476],{},"replace: true"," 后使用 ",[359,1479,1480],{},"redirectTo",[389,1482,1484],{"className":412,"code":1483,"language":414,"meta":396,"style":396},"return goTo(\"\u002Fpages\u002Flogin\u002Flogin\", {\n  replace: true,\n});\n",[359,1485,1486,1504,1515],{"__ignoreMap":396},[418,1487,1488,1490,1492,1494,1496,1498,1500,1502],{"class":420,"line":421},[418,1489,1254],{"class":424},[418,1491,746],{"class":431},[418,1493,436],{"class":435},[418,1495,476],{"class":439},[418,1497,622],{"class":479},[418,1499,476],{"class":439},[418,1501,445],{"class":439},[418,1503,458],{"class":439},[418,1505,1506,1509,1511,1513],{"class":420,"line":461},[418,1507,1508],{"class":473},"  replace",[418,1510,767],{"class":439},[418,1512,771],{"class":770},[418,1514,774],{"class":439},[418,1516,1517,1519,1521],{"class":420,"line":500},[418,1518,533],{"class":439},[418,1520,451],{"class":435},[418,1522,497],{"class":439},[1370,1524,1526],{"id":1525},"tabbar-页面","TabBar 页面",[355,1528,1529,1530,409],{},"重定向到 TabBar 页面时会自动使用 ",[359,1531,1532],{},"switchTab",[389,1534,1536],{"className":412,"code":1535,"language":414,"meta":396,"style":396},"return goTo(\"\u002Fpages\u002Findex\u002Findex\");\n",[359,1537,1538],{"__ignoreMap":396},[418,1539,1540,1542,1544,1546,1548,1550,1552,1554],{"class":420,"line":421},[418,1541,1254],{"class":424},[418,1543,746],{"class":431},[418,1545,436],{"class":435},[418,1547,476],{"class":439},[418,1549,612],{"class":479},[418,1551,476],{"class":439},[418,1553,451],{"class":435},[418,1555,497],{"class":439},[1370,1557,1559],{"id":1558},"显式指定导航方式","显式指定导航方式：",[389,1561,1563],{"className":412,"code":1562,"language":414,"meta":396,"style":396},"return goTo(\"\u002Fpages\u002Flogin\u002Flogin\", {\n  type: \"reLaunch\",\n});\n",[359,1564,1565,1583,1599],{"__ignoreMap":396},[418,1566,1567,1569,1571,1573,1575,1577,1579,1581],{"class":420,"line":421},[418,1568,1254],{"class":424},[418,1570,746],{"class":431},[418,1572,436],{"class":435},[418,1574,476],{"class":439},[418,1576,622],{"class":479},[418,1578,476],{"class":439},[418,1580,445],{"class":439},[418,1582,458],{"class":439},[418,1584,1585,1588,1590,1592,1595,1597],{"class":420,"line":461},[418,1586,1587],{"class":473},"  type",[418,1589,767],{"class":439},[418,1591,619],{"class":439},[418,1593,1594],{"class":479},"reLaunch",[418,1596,476],{"class":439},[418,1598,774],{"class":439},[418,1600,1601,1603,1605],{"class":420,"line":500},[418,1602,533],{"class":439},[418,1604,451],{"class":435},[418,1606,497],{"class":439},[355,1608,1609,1612],{},[359,1610,1611],{},"type"," 支持：",[542,1614,1615,1619,1623,1627],{},[545,1616,1617],{},[359,1618,1472],{},[545,1620,1621],{},[359,1622,1480],{},[545,1624,1625],{},[359,1626,1594],{},[545,1628,1629],{},[359,1630,1532],{},[355,1632,1633],{},"重定向目标会重新执行目标页面的中间件。",[572,1635,1636],{"id":1636},"中止",[355,1638,1639,1640,1643,1644,1647],{},"返回 ",[359,1641,1642],{},"false"," 或 ",[359,1645,1646],{},"abortNavigation()","，中止当前导航：",[389,1649,1651],{"className":412,"code":1650,"language":414,"meta":396,"style":396},"export default defineRouteMiddleware((to) => {\n  if (to.path === \"\u002Fpages\u002Fforbidden\u002Findex\") {\n    return abortNavigation();\n  }\n});\n",[359,1652,1653,1673,1699,1709,1713],{"__ignoreMap":396},[418,1654,1655,1657,1659,1661,1663,1665,1667,1669,1671],{"class":420,"line":421},[418,1656,425],{"class":424},[418,1658,428],{"class":424},[418,1660,432],{"class":431},[418,1662,436],{"class":435},[418,1664,436],{"class":439},[418,1666,404],{"class":442},[418,1668,451],{"class":439},[418,1670,455],{"class":454},[418,1672,458],{"class":439},[418,1674,1675,1677,1679,1681,1683,1685,1688,1690,1693,1695,1697],{"class":420,"line":461},[418,1676,663],{"class":424},[418,1678,666],{"class":473},[418,1680,404],{"class":435},[418,1682,467],{"class":439},[418,1684,492],{"class":435},[418,1686,1687],{"class":439}," ===",[418,1689,619],{"class":439},[418,1691,1692],{"class":479},"\u002Fpages\u002Fforbidden\u002Findex",[418,1694,476],{"class":439},[418,1696,885],{"class":473},[418,1698,688],{"class":439},[418,1700,1701,1703,1705,1707],{"class":420,"line":500},[418,1702,694],{"class":424},[418,1704,977],{"class":431},[418,1706,865],{"class":473},[418,1708,497],{"class":439},[418,1710,1711],{"class":420,"line":530},[418,1712,702],{"class":439},[418,1714,1715,1717,1719],{"class":420,"line":691},[418,1716,533],{"class":439},[418,1718,451],{"class":435},[418,1720,497],{"class":439},[355,1722,1723],{},"可以传入中止原因：",[389,1725,1727],{"className":412,"code":1726,"language":414,"meta":396,"style":396},"return abortNavigation(new Error(\"没有访问权限\"));\n",[359,1728,1729],{"__ignoreMap":396},[418,1730,1731,1733,1735,1737,1739,1741,1743,1745,1747,1749,1751],{"class":420,"line":421},[418,1732,1254],{"class":424},[418,1734,977],{"class":431},[418,1736,436],{"class":435},[418,1738,982],{"class":439},[418,1740,985],{"class":431},[418,1742,436],{"class":435},[418,1744,476],{"class":439},[418,1746,992],{"class":479},[418,1748,476],{"class":439},[418,1750,997],{"class":435},[418,1752,497],{"class":439},[355,1754,1755,1756,1759,1760,1763],{},"中止原因会传递给导航调用的 ",[359,1757,1758],{},"fail"," 和 ",[359,1761,1762],{},"complete"," 回调。",[375,1765,1766],{"id":1766},"常见场景",[572,1768,1769],{"id":1769},"登录校验",[389,1771,1773],{"className":412,"code":1772,"filename":591,"language":414,"meta":396,"style":396},"const WHITE_LIST = [\"\u002Fpages\u002Findex\u002Findex\", \"\u002Fpages\u002Flogin\u002Flogin\"];\n\nexport default defineRouteMiddleware((to) => {\n  if (WHITE_LIST.includes(to.path)) {\n    return;\n  }\n\n  if (!uni.getStorageSync(\"token\")) {\n    return goTo(\"\u002Fpages\u002Flogin\u002Flogin\", {\n      replace: true,\n    });\n  }\n});\n",[359,1774,1775,1803,1807,1827,1851,1857,1861,1865,1891,1909,1919,1927,1931],{"__ignoreMap":396},[418,1776,1777,1779,1781,1783,1785,1787,1789,1791,1793,1795,1797,1799,1801],{"class":420,"line":421},[418,1778,598],{"class":454},[418,1780,601],{"class":435},[418,1782,604],{"class":439},[418,1784,607],{"class":435},[418,1786,476],{"class":439},[418,1788,612],{"class":479},[418,1790,476],{"class":439},[418,1792,445],{"class":439},[418,1794,619],{"class":439},[418,1796,622],{"class":479},[418,1798,476],{"class":439},[418,1800,627],{"class":435},[418,1802,497],{"class":439},[418,1804,1805],{"class":420,"line":461},[418,1806,634],{"emptyLinePlaceholder":15},[418,1808,1809,1811,1813,1815,1817,1819,1821,1823,1825],{"class":420,"line":500},[418,1810,425],{"class":424},[418,1812,428],{"class":424},[418,1814,432],{"class":431},[418,1816,436],{"class":435},[418,1818,436],{"class":439},[418,1820,404],{"class":442},[418,1822,451],{"class":439},[418,1824,455],{"class":454},[418,1826,458],{"class":439},[418,1828,1829,1831,1833,1835,1837,1839,1841,1843,1845,1847,1849],{"class":420,"line":530},[418,1830,663],{"class":424},[418,1832,666],{"class":473},[418,1834,669],{"class":435},[418,1836,467],{"class":439},[418,1838,674],{"class":431},[418,1840,436],{"class":473},[418,1842,404],{"class":435},[418,1844,467],{"class":439},[418,1846,492],{"class":435},[418,1848,685],{"class":473},[418,1850,688],{"class":439},[418,1852,1853,1855],{"class":420,"line":691},[418,1854,694],{"class":424},[418,1856,497],{"class":439},[418,1858,1859],{"class":420,"line":699},[418,1860,702],{"class":439},[418,1862,1863],{"class":420,"line":705},[418,1864,634],{"emptyLinePlaceholder":15},[418,1866,1867,1869,1871,1873,1875,1877,1879,1881,1883,1885,1887,1889],{"class":420,"line":710},[418,1868,663],{"class":424},[418,1870,666],{"class":473},[418,1872,717],{"class":439},[418,1874,720],{"class":435},[418,1876,467],{"class":439},[418,1878,725],{"class":431},[418,1880,436],{"class":473},[418,1882,476],{"class":439},[418,1884,732],{"class":479},[418,1886,476],{"class":439},[418,1888,685],{"class":473},[418,1890,688],{"class":439},[418,1892,1893,1895,1897,1899,1901,1903,1905,1907],{"class":420,"line":741},[418,1894,694],{"class":424},[418,1896,746],{"class":431},[418,1898,436],{"class":473},[418,1900,476],{"class":439},[418,1902,622],{"class":479},[418,1904,476],{"class":439},[418,1906,445],{"class":439},[418,1908,458],{"class":439},[418,1910,1911,1913,1915,1917],{"class":420,"line":761},[418,1912,764],{"class":473},[418,1914,767],{"class":439},[418,1916,771],{"class":770},[418,1918,774],{"class":439},[418,1920,1921,1923,1925],{"class":420,"line":777},[418,1922,780],{"class":439},[418,1924,451],{"class":473},[418,1926,497],{"class":439},[418,1928,1929],{"class":420,"line":787},[418,1930,702],{"class":439},[418,1932,1933,1935,1937],{"class":420,"line":792},[418,1934,533],{"class":439},[418,1936,451],{"class":435},[418,1938,497],{"class":439},[572,1940,1941],{"id":1941},"权限校验",[389,1943,1945],{"className":412,"code":1944,"filename":813,"language":414,"meta":396,"style":396},"export default defineRouteMiddleware(async (to) => {\n  const user = await getCurrentUser();\n\n  if (!user) {\n    return goTo(\"\u002Fpages\u002Flogin\u002Flogin\", { replace: true });\n  }\n\n  if (!user.hasPermission && to.path.startsWith(\"\u002Fpages\u002Fadmin\u002F\")) {\n    return abortNavigation(new Error(\"没有访问权限\"));\n  }\n});\n",[359,1946,1947,1969,1985,1989,2003,2033,2037,2041,2079,2103,2107],{"__ignoreMap":396},[418,1948,1949,1951,1953,1955,1957,1959,1961,1963,1965,1967],{"class":420,"line":421},[418,1950,425],{"class":424},[418,1952,428],{"class":424},[418,1954,432],{"class":431},[418,1956,436],{"class":435},[418,1958,831],{"class":454},[418,1960,666],{"class":439},[418,1962,404],{"class":442},[418,1964,451],{"class":439},[418,1966,455],{"class":454},[418,1968,458],{"class":439},[418,1970,1971,1973,1975,1977,1979,1981,1983],{"class":420,"line":461},[418,1972,850],{"class":454},[418,1974,853],{"class":435},[418,1976,856],{"class":439},[418,1978,859],{"class":424},[418,1980,862],{"class":431},[418,1982,865],{"class":473},[418,1984,497],{"class":439},[418,1986,1987],{"class":420,"line":500},[418,1988,634],{"emptyLinePlaceholder":15},[418,1990,1991,1993,1995,1997,1999,2001],{"class":420,"line":530},[418,1992,663],{"class":424},[418,1994,666],{"class":473},[418,1996,717],{"class":439},[418,1998,882],{"class":435},[418,2000,885],{"class":473},[418,2002,688],{"class":439},[418,2004,2005,2007,2009,2011,2013,2015,2017,2019,2021,2023,2025,2027,2029,2031],{"class":420,"line":691},[418,2006,694],{"class":424},[418,2008,746],{"class":431},[418,2010,436],{"class":473},[418,2012,476],{"class":439},[418,2014,622],{"class":479},[418,2016,476],{"class":439},[418,2018,445],{"class":439},[418,2020,906],{"class":439},[418,2022,909],{"class":473},[418,2024,767],{"class":439},[418,2026,771],{"class":770},[418,2028,916],{"class":439},[418,2030,451],{"class":473},[418,2032,497],{"class":439},[418,2034,2035],{"class":420,"line":699},[418,2036,702],{"class":439},[418,2038,2039],{"class":420,"line":705},[418,2040,634],{"emptyLinePlaceholder":15},[418,2042,2043,2045,2047,2049,2051,2053,2055,2057,2059,2061,2063,2065,2067,2069,2071,2073,2075,2077],{"class":420,"line":710},[418,2044,663],{"class":424},[418,2046,666],{"class":473},[418,2048,717],{"class":439},[418,2050,882],{"class":435},[418,2052,467],{"class":439},[418,2054,943],{"class":435},[418,2056,946],{"class":439},[418,2058,487],{"class":435},[418,2060,467],{"class":439},[418,2062,492],{"class":435},[418,2064,467],{"class":439},[418,2066,957],{"class":431},[418,2068,436],{"class":473},[418,2070,476],{"class":439},[418,2072,964],{"class":479},[418,2074,476],{"class":439},[418,2076,685],{"class":473},[418,2078,688],{"class":439},[418,2080,2081,2083,2085,2087,2089,2091,2093,2095,2097,2099,2101],{"class":420,"line":741},[418,2082,694],{"class":424},[418,2084,977],{"class":431},[418,2086,436],{"class":473},[418,2088,982],{"class":439},[418,2090,985],{"class":431},[418,2092,436],{"class":473},[418,2094,476],{"class":439},[418,2096,992],{"class":479},[418,2098,476],{"class":439},[418,2100,997],{"class":473},[418,2102,497],{"class":439},[418,2104,2105],{"class":420,"line":761},[418,2106,702],{"class":439},[418,2108,2109,2111,2113],{"class":420,"line":777},[418,2110,533],{"class":439},[418,2112,451],{"class":435},[418,2114,497],{"class":439},[355,2116,2117],{},"页面中使用：",[389,2119,2120],{"className":1020,"code":1097,"language":1023,"meta":396,"style":396},[359,2121,2122,2142,2150,2168,2176],{"__ignoreMap":396},[418,2123,2124,2126,2128,2130,2132,2134,2136,2138,2140],{"class":420,"line":421},[418,2125,1030],{"class":439},[418,2127,1033],{"class":473},[418,2129,1036],{"class":454},[418,2131,1039],{"class":454},[418,2133,604],{"class":439},[418,2135,476],{"class":439},[418,2137,414],{"class":479},[418,2139,476],{"class":439},[418,2141,1050],{"class":439},[418,2143,2144,2146,2148],{"class":420,"line":461},[418,2145,302],{"class":431},[418,2147,436],{"class":435},[418,2149,688],{"class":439},[418,2151,2152,2154,2156,2158,2160,2162,2164,2166],{"class":420,"line":500},[418,2153,1063],{"class":473},[418,2155,767],{"class":439},[418,2157,607],{"class":435},[418,2159,476],{"class":439},[418,2161,1070],{"class":479},[418,2163,476],{"class":439},[418,2165,627],{"class":435},[418,2167,774],{"class":439},[418,2169,2170,2172,2174],{"class":420,"line":530},[418,2171,533],{"class":439},[418,2173,451],{"class":435},[418,2175,497],{"class":439},[418,2177,2178,2180,2182],{"class":420,"line":691},[418,2179,1087],{"class":439},[418,2181,1033],{"class":473},[418,2183,1050],{"class":439},[572,2185,2186],{"id":2186},"异步中间件",[355,2188,2189],{},"中间件支持异步函数：",[389,2191,2193],{"className":412,"code":2192,"language":414,"meta":396,"style":396},"export default defineRouteMiddleware(async (to) => {\n  const user = await getCurrentUser();\n\n  if (!user && to.path !== \"\u002Fpages\u002Flogin\u002Flogin\") {\n    return goTo(\"\u002Fpages\u002Flogin\u002Flogin\");\n  }\n});\n",[359,2194,2195,2217,2233,2237,2267,2285,2289],{"__ignoreMap":396},[418,2196,2197,2199,2201,2203,2205,2207,2209,2211,2213,2215],{"class":420,"line":421},[418,2198,425],{"class":424},[418,2200,428],{"class":424},[418,2202,432],{"class":431},[418,2204,436],{"class":435},[418,2206,831],{"class":454},[418,2208,666],{"class":439},[418,2210,404],{"class":442},[418,2212,451],{"class":439},[418,2214,455],{"class":454},[418,2216,458],{"class":439},[418,2218,2219,2221,2223,2225,2227,2229,2231],{"class":420,"line":461},[418,2220,850],{"class":454},[418,2222,853],{"class":435},[418,2224,856],{"class":439},[418,2226,859],{"class":424},[418,2228,862],{"class":431},[418,2230,865],{"class":473},[418,2232,497],{"class":439},[418,2234,2235],{"class":420,"line":500},[418,2236,634],{"emptyLinePlaceholder":15},[418,2238,2239,2241,2243,2245,2247,2249,2251,2253,2255,2257,2259,2261,2263,2265],{"class":420,"line":530},[418,2240,663],{"class":424},[418,2242,666],{"class":473},[418,2244,717],{"class":439},[418,2246,882],{"class":435},[418,2248,946],{"class":439},[418,2250,487],{"class":435},[418,2252,467],{"class":439},[418,2254,492],{"class":435},[418,2256,1295],{"class":439},[418,2258,619],{"class":439},[418,2260,622],{"class":479},[418,2262,476],{"class":439},[418,2264,885],{"class":473},[418,2266,688],{"class":439},[418,2268,2269,2271,2273,2275,2277,2279,2281,2283],{"class":420,"line":691},[418,2270,694],{"class":424},[418,2272,746],{"class":431},[418,2274,436],{"class":473},[418,2276,476],{"class":439},[418,2278,622],{"class":479},[418,2280,476],{"class":439},[418,2282,451],{"class":473},[418,2284,497],{"class":439},[418,2286,2287],{"class":420,"line":699},[418,2288,702],{"class":439},[418,2290,2291,2293,2295],{"class":420,"line":705},[418,2292,533],{"class":439},[418,2294,451],{"class":435},[418,2296,497],{"class":439},[355,2298,2299],{},"常见用途包括：",[542,2301,2302,2305,2308,2311],{},[545,2303,2304],{},"获取当前用户信息；",[545,2306,2307],{},"查询用户权限；",[545,2309,2310],{},"校验页面访问条件；",[545,2312,2313],{},"获取页面进入前所需的配置。",[2315,2316],"hr",{},[556,2318,2319],{"color":558,"icon":337,"to":303},[355,2320,2321,563,2323,2326],{},[359,2322,302],{},[359,2324,2325],{},"middleware"," 字段",[2328,2329,2330],"style",{},"html pre.shiki code .s8R28, html code.shiki .s8R28{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#39ADB5;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s3cPz, html code.shiki .s3cPz{--shiki-light:#6182B8;--shiki-default:#6182B8;--shiki-dark:#82AAFF}html pre.shiki code .sZSNi, html code.shiki .sZSNi{--shiki-light:#90A4AE;--shiki-default:#90A4AE;--shiki-dark:#BABED8}html pre.shiki code .sDfIl, html code.shiki .sDfIl{--shiki-light:#39ADB5;--shiki-default:#39ADB5;--shiki-dark:#89DDFF}html pre.shiki code .s1nJG, html code.shiki .s1nJG{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#90A4AE;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .smZ93, html code.shiki .smZ93{--shiki-light:#9C3EDA;--shiki-default:#9C3EDA;--shiki-dark:#C792EA}html pre.shiki code .sRlkE, html code.shiki .sRlkE{--shiki-light:#E53935;--shiki-default:#E53935;--shiki-dark:#F07178}html pre.shiki code .sGFVr, html code.shiki .sGFVr{--shiki-light:#91B859;--shiki-default:#91B859;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbKd-, html code.shiki .sbKd-{--shiki-light:#FF5370;--shiki-default:#FF5370;--shiki-dark:#FF9CAC}html pre.shiki code .sWuyu, html code.shiki .sWuyu{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#90A4AE;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sYRBq, html code.shiki .sYRBq{--shiki-light:#F76D47;--shiki-default:#F76D47;--shiki-dark:#F78C6C}",{"title":396,"searchDepth":461,"depth":461,"links":2332},[2333,2334,2338,2339,2344],{"id":377,"depth":461,"text":377},{"id":570,"depth":461,"text":570,"children":2335},[2336,2337],{"id":574,"depth":500,"text":574},{"id":807,"depth":500,"text":807},{"id":1175,"depth":461,"text":1175},{"id":1196,"depth":461,"text":1196,"children":2340},[2341,2342,2343],{"id":1199,"depth":500,"text":1199},{"id":1244,"depth":500,"text":1244},{"id":1636,"depth":500,"text":1636},{"id":1766,"depth":461,"text":1766,"children":2345},[2346,2347,2348],{"id":1769,"depth":500,"text":1769},{"id":1941,"depth":500,"text":1941},{"id":2186,"depth":500,"text":2186},"在页面进入前执行校验、重定向与导航控制","md",{},{"icon":103},{"title":100,"description":2349},"nZma5Ra57rLrWdzXD3_xQdZxDLjN_qcEceDodFb-yxA",[2356,2358],{"title":95,"path":96,"stem":97,"description":2357,"icon":98,"children":-1},"用 definePagesConfig 维护 pages.json 全局性的页面默认配置",{"title":111,"path":112,"stem":113,"description":2359,"icon":114,"children":-1},"在 App.vue 中组织应用外壳、布局入口和页面渲染入口",1788755361567]