[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"knowledge-\u002Fapi\u002Fknowledge\u002Fteam-documents\u002F12":3,"knowledge-related-\u002Fknowledge\u002Fteam-documents\u002F12":715,"knowledge-series-\u002Fknowledge\u002Fteam-documents\u002F12":739},{"source":4,"connector":5,"page":6},"sqlite","better-sqlite3",{"path":7,"title":8,"description":9,"category":10,"tags":11,"date":15,"pinned":16,"draft":16,"body":17,"seo":711,"stem":712,"id":713,"extension":714},"\u002Fknowledge\u002Fteam-documents\u002F12","系统自动更新说明","对比商家系统与 BOSS 系统在发版后的更新体验差异，说明两者共用的离线缓存\u002FPWA 插件的自动更新与手动提示更新两种模式，并结合知识库《网站更新（一）（二）》给出统一策略建议。","团队文档",[12,13,14],"team","pwa","performance","2025-05-26",false,{"type":18,"value":19,"toc":696},"minimark",[20,23,27,40,44,135,138,141,157,160,177,181,188,232,235,249,267,276,279,282,394,407,526,532,535,578,581,627,630,657,660,671,674,692],[21,22,8],"h1",{"id":8},[24,25,26],"h2",{"id":26},"背景",[28,29,30,31,35,36,39],"p",{},"前端项目发版后，浏览器标签页中运行的仍是发版前加载的旧资源，若不做处理，用户可能长时间停留在旧版本页面，甚至因新旧接口不兼容出现异常。公司内部主要有两套系统承载这一能力：",[32,33,34],"strong",{},"商家系统","（对外，商家使用）与 ",[32,37,38],{},"BOSS 系统","（对内，运营\u002F客服使用），二者的更新体验目前并不一致，因此整理本说明统一认知，避免排查问题时被“为什么商家系统有提示、BOSS 系统没有”这类差异干扰。",[24,41,43],{"id":42},"商家系统-vs-boss-系统对比","商家系统 vs BOSS 系统对比",[45,46,47,61],"table",{},[48,49,50],"thead",{},[51,52,53,57,59],"tr",{},[54,55,56],"th",{},"维度",[54,58,34],{},[54,60,38],{},[62,63,64,76,91,102,113,124],"tbody",{},[51,65,66,70,73],{},[67,68,69],"td",{},"更新检测方式",[67,71,72],{},"轮询检测首页版本变化",[67,74,75],{},"依赖静态资源拉取完成后自动刷新",[51,77,78,81,88],{},[67,79,80],{},"更新提示框",[67,82,83,84,87],{},"有，",[85,86,80],"code",{}," 提醒用户执行更新",[67,89,90],{},"无",[51,92,93,96,99],{},[67,94,95],{},"用户操作",[67,97,98],{},"可选择「立即更新」或「稍后更新」",[67,100,101],{},"无需操作，等待自动刷新",[51,103,104,107,110],{},[67,105,106],{},"感知新版本速度",[67,108,109],{},"较快，通常不需要长时间等待",[67,111,112],{},"相对较慢，需等待静态资源拉取完成",[51,114,115,118,121],{},[67,116,117],{},"是否规划过统一体验",[67,119,120],{},"—",[67,122,123],{},"曾规划增加提示框，因优先级调整暂未落地",[51,125,126,129,132],{},[67,127,128],{},"依赖底层能力",[67,130,131],{},"离线缓存\u002FPWA 插件（手动更新模式）",[67,133,134],{},"离线缓存\u002FPWA 插件（自动更新模式）",[24,136,137],{"id":137},"系统自动更新现状",[139,140,34],"h3",{"id":34},[142,143,144,151,154],"ul",{},[145,146,147,148,150],"li",{},"通过轮询检测首页版本变化，触发 ",[85,149,80],{},"，提醒用户执行更新；",[145,152,153],{},"新版本发布后通常可较快感知，不需要长时间等待；",[145,155,156],{},"用户可选择「立即更新」或「稍后更新」，减少因强制刷新导致的表单数据丢失风险，减少手动刷新操作。",[139,158,38],{"id":159},"boss-系统",[142,161,162,165,171,174],{},[145,163,164],{},"新版本发布后，需等待静态资源拉取完成后才会自动刷新，等待时间相对较长；",[145,166,167,168,170],{},"当前没有 ",[85,169,80],{},"；",[145,172,173],{},"该提示能力曾有规划，但因优先级调整暂未落地；",[145,175,176],{},"若要与商家系统体验一致，需同步更新策略与缓存策略，并补充「稍后更新」这类不打断用户操作的交互。",[24,178,180],{"id":179},"pwa-模式说明","PWA 模式说明",[28,182,183,184,187],{},"两个系统均依赖",[32,185,186],{},"离线缓存\u002FPWA 插件","，该插件基于 Service Worker 管理静态资源缓存，支持两种更新模式：",[45,189,190,203],{},[48,191,192],{},[51,193,194,197,200],{},[54,195,196],{},"模式",[54,198,199],{},"采用系统",[54,201,202],{},"行为",[62,204,205,219],{},[51,206,207,214,216],{},[67,208,209,210,213],{},"自动更新（",[85,211,212],{},"autoUpdate","）",[67,215,38],{},[67,217,218],{},"新版本资源缓存完成后自动完成版本切换并刷新页面，无需用户确认",[51,220,221,227,229],{},[67,222,223,224,213],{},"手动提示更新（",[85,225,226],{},"prompt",[67,228,34],{},[67,230,231],{},"检测到新版本后先弹出提示，由用户确认后再触发更新流程并清理旧缓存资源",[28,233,234],{},"两种模式的取舍本质上是「打断用户操作 vs 及时更新」之间的权衡：",[142,236,237,243],{},[145,238,239,242],{},[32,240,241],{},"自动更新","适合无长表单、操作链路短的场景（如 BOSS 系统的管理类操作页面通常可重新进入不丢数据）；",[145,244,245,248],{},[32,246,247],{},"手动提示更新","适合有长表单、长流程的场景（如商家系统下单、编辑类页面），避免用户正在填表时被强制刷新导致数据丢失。",[28,250,251,252,255,256,258,259,262,263,266],{},"关于两种模式的技术实现细节（Service Worker 注册、",[85,253,254],{},"registerType: 'prompt'"," 与 ",[85,257,212],{}," 的选型依据、",[85,260,261],{},"needRefresh","\u002F",[85,264,265],{},"updateServiceWorker"," 用法等），可参考知识库中的专题文章：",[142,268,269],{},[145,270,271],{},[272,273,275],"a",{"href":274},"\u002Fknowledge\u002Fservice-notes\u002Fresearch\u002Fweb-update\u002Fweb-update","网站更新：发版后提示用户刷新（轮询与 PWA）",[24,277,278],{"id":278},"技术实现示意",[28,280,281],{},"两种更新模式在 Service Worker 层的核心差异，可以用下面的配置示意来说明（具体字段以实际使用的 PWA 插件版本为准）：",[283,284,289],"pre",{"className":285,"code":286,"language":287,"meta":288,"style":288},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","\u002F\u002F vite.config.ts（示意）\nVitePWA({\n  registerType: \"autoUpdate\", \u002F\u002F BOSS 系统：新版本资源就位后自动切换\n  \u002F\u002F registerType: \"prompt\", \u002F\u002F 商家系统：需用户确认后再切换\n  workbox: {\n    cleanupOutdatedCaches: true,\n  },\n});\n","ts","",[85,290,291,300,315,341,350,361,376,382],{"__ignoreMap":288},[292,293,296],"span",{"class":294,"line":295},"line",1,[292,297,299],{"class":298},"sutJx","\u002F\u002F vite.config.ts（示意）\n",[292,301,303,307,311],{"class":294,"line":302},2,[292,304,306],{"class":305},"sGLFI","VitePWA",[292,308,310],{"class":309},"su5hD","(",[292,312,314],{"class":313},"sP7_E","{\n",[292,316,318,322,325,329,332,335,338],{"class":294,"line":317},3,[292,319,321],{"class":320},"skxfh","  registerType",[292,323,324],{"class":313},":",[292,326,328],{"class":327},"sjJ54"," \"",[292,330,212],{"class":331},"s_sjI",[292,333,334],{"class":327},"\"",[292,336,337],{"class":313},",",[292,339,340],{"class":298}," \u002F\u002F BOSS 系统：新版本资源就位后自动切换\n",[292,342,344,347],{"class":294,"line":343},4,[292,345,346],{"class":298},"  \u002F\u002F registerType: \"prompt\",",[292,348,349],{"class":298}," \u002F\u002F 商家系统：需用户确认后再切换\n",[292,351,353,356,358],{"class":294,"line":352},5,[292,354,355],{"class":320},"  workbox",[292,357,324],{"class":313},[292,359,360],{"class":313}," {\n",[292,362,364,367,369,373],{"class":294,"line":363},6,[292,365,366],{"class":320},"    cleanupOutdatedCaches",[292,368,324],{"class":313},[292,370,372],{"class":371},"syTEX"," true",[292,374,375],{"class":313},",\n",[292,377,379],{"class":294,"line":378},7,[292,380,381],{"class":313},"  },\n",[292,383,385,388,391],{"class":294,"line":384},8,[292,386,387],{"class":313},"}",[292,389,390],{"class":309},")",[292,392,393],{"class":313},";\n",[28,395,396,397,399,400,402,403,406],{},"商家系统在 ",[85,398,226],{}," 模式下，前端通常需要监听 ",[85,401,261],{}," 状态并手动触发 ",[85,404,405],{},"updateServiceWorker()","：",[283,408,410],{"className":285,"code":409,"language":287,"meta":288,"style":288},"const needRefresh = ref(false);\n\n\u002F\u002F 由 PWA 插件注册回调触发\nfunction onNeedRefresh() {\n  needRefresh.value = true; \u002F\u002F 驱动更新提示框展示\n}\n\nfunction confirmUpdate() {\n  updateServiceWorker(true); \u002F\u002F 用户点击「立即更新」后执行\n}\n",[85,411,412,438,444,449,462,483,488,492,503,521],{"__ignoreMap":288},[292,413,414,418,422,426,429,431,434,436],{"class":294,"line":295},[292,415,417],{"class":416},"sbsja","const",[292,419,421],{"class":420},"s_hVV"," needRefresh",[292,423,425],{"class":424},"smGrS"," =",[292,427,428],{"class":305}," ref",[292,430,310],{"class":309},[292,432,433],{"class":371},"false",[292,435,390],{"class":309},[292,437,393],{"class":313},[292,439,440],{"class":294,"line":302},[292,441,443],{"emptyLinePlaceholder":442},true,"\n",[292,445,446],{"class":294,"line":317},[292,447,448],{"class":298},"\u002F\u002F 由 PWA 插件注册回调触发\n",[292,450,451,454,457,460],{"class":294,"line":343},[292,452,453],{"class":416},"function",[292,455,456],{"class":305}," onNeedRefresh",[292,458,459],{"class":313},"()",[292,461,360],{"class":313},[292,463,464,467,470,473,475,477,480],{"class":294,"line":352},[292,465,466],{"class":309},"  needRefresh",[292,468,469],{"class":313},".",[292,471,472],{"class":309},"value",[292,474,425],{"class":424},[292,476,372],{"class":371},[292,478,479],{"class":313},";",[292,481,482],{"class":298}," \u002F\u002F 驱动更新提示框展示\n",[292,484,485],{"class":294,"line":363},[292,486,487],{"class":313},"}\n",[292,489,490],{"class":294,"line":378},[292,491,443],{"emptyLinePlaceholder":442},[292,493,494,496,499,501],{"class":294,"line":384},[292,495,453],{"class":416},[292,497,498],{"class":305}," confirmUpdate",[292,500,459],{"class":313},[292,502,360],{"class":313},[292,504,506,509,511,514,516,518],{"class":294,"line":505},9,[292,507,508],{"class":305},"  updateServiceWorker",[292,510,310],{"class":320},[292,512,513],{"class":371},"true",[292,515,390],{"class":320},[292,517,479],{"class":313},[292,519,520],{"class":298}," \u002F\u002F 用户点击「立即更新」后执行\n",[292,522,524],{"class":294,"line":523},10,[292,525,487],{"class":313},[28,527,528,529,531],{},"BOSS 系统在 ",[85,530,212],{}," 模式下无需上述交互层代码，新资源缓存完成后由插件自动完成切换与刷新。",[24,533,534],{"id":534},"推荐策略",[536,537,538,550,560,566,572],"ol",{},[145,539,540,543,544,546,547,549],{},[32,541,542],{},"两端更新模式应与页面操作风险匹配","：长表单\u002F长流程页面优先用 ",[85,545,226],{}," 手动确认；纯查看\u002F短操作页面可考虑 ",[85,548,212],{},"，但仍建议保留最基础的用户感知（如提示条），避免用户完全无感知地被刷新；",[145,551,552,555,556,559],{},[32,553,554],{},"同一项目不要叠加两套检测方案","（如轮询版本号 + PWA Service Worker 同时启用），否则会出现重复弹窗，参考 ",[272,557,558],{"href":274},"网站更新：发版后提示用户刷新"," 中的实践检查清单；",[145,561,562,565],{},[32,563,564],{},"BOSS 系统若要补齐提示框","，建议直接复用商家系统已验证的手动提示更新模式，保持两个系统更新体验一致，降低内部用户的认知负担；",[145,567,568,571],{},[32,569,570],{},"发版流程中应明确旧 chunk 的保留策略","：发版后短期内保留旧的静态资源，减少已打开页面的用户遇到 404 或加载失败的概率；",[145,573,574,577],{},[32,575,576],{},"不使用离线缓存\u002FPWA 插件的场景","，版本发布后用户可能需要手动清理缓存或强制刷新页面，应在发版公告中明确提示，作为兜底说明。",[24,579,580],{"id":580},"回归检查清单",[142,582,585,597,603,609,615,621],{"className":583},[584],"contains-task-list",[145,586,589,593,594,596],{"className":587},[588],"task-list-item",[590,591],"input",{"disabled":442,"type":592},"checkbox"," 商家系统发布新版本后，",[85,595,80],{}," 能正常弹出，点击「立即更新」后页面刷新至新版本；",[145,598,600,602],{"className":599},[588],[590,601],{"disabled":442,"type":592}," 商家系统点击「稍后更新」后，提示框可正常关闭，且不影响当前表单内容与操作流程；",[145,604,606,608],{"className":605},[588],[590,607],{"disabled":442,"type":592}," BOSS 系统发布新版本后，静态资源拉取完成能自动刷新到新版本，刷新时机在可接受等待范围内；",[145,610,612,614],{"className":611},[588],[590,613],{"disabled":442,"type":592}," 两套系统均不存在「轮询版本号 + PWA 自动检测」同时启用导致重复弹窗\u002F重复刷新的情况；",[145,616,618,620],{"className":617},[588],[590,619],{"disabled":442,"type":592}," 发版后短期内旧 chunk 仍可访问，已打开页面的用户切换路由或提交表单时不出现 404 或资源加载失败；",[145,622,624,626],{"className":623},[588],[590,625],{"disabled":442,"type":592}," 弱网环境下验证更新提示框展示与「立即更新」按钮响应正常，不出现长时间卡死。",[24,628,629],{"id":629},"常见疑问",[536,631,632,641,649],{},[145,633,634,637,640],{},[32,635,636],{},"为什么不直接把 BOSS 系统也改成手动提示更新？",[638,639],"br",{},"\nBOSS 系统页面大多为内部管理操作，多数场景下重新进入不会丢失用户数据，采用自动更新可以让内部用户始终使用最新版本，减少「用旧版本反馈问题」的沟通成本；改为手动提示反而会增加内部用户的多余操作。",[145,642,643,646,648],{},[32,644,645],{},"两套更新机制会不会导致内部用户使用体验割裂？",[638,647],{},"\n目前确实存在体验差异，这也是文中建议 BOSS 系统补齐提示框的原因；在补齐之前，建议在内部培训或帮助文档中说明两者差异，避免用户误以为 BOSS 系统「有 bug 不提示更新」。",[145,650,651,654,656],{},[32,652,653],{},"发版后多久可以下线旧版本的静态资源？",[638,655],{},"\n建议至少保留一个观察周期（如覆盖到公司作息的完整一到两个工作日），确保绝大多数已打开页面的用户已完成一次自然刷新或主动更新后，再考虑清理旧资源。",[24,658,659],{"id":659},"总结",[536,661,662,665,668],{},[145,663,664],{},"两套系统的更新能力都建立在离线缓存\u002FPWA 插件基础之上，商家系统采用手动提示更新，BOSS 系统采用自动更新，二者机制不同源于业务操作风险的差异；",[145,666,667],{},"若要统一体验，优先方向是让 BOSS 系统补齐更新提示框，而不是让商家系统改为自动更新（因其存在长表单场景，强刷风险更高）；",[145,669,670],{},"具体的技术方案选型与实现细节，请参考知识库《网站更新（一）（二）》两篇专题文章，避免重复摸索已验证过的方案。",[24,672,673],{"id":673},"相关链接",[142,675,676,680,686],{},[145,677,678],{},[272,679,275],{"href":274},[145,681,682],{},[272,683,685],{"href":684},"\u002Fknowledge\u002Fteam-documents\u002F13","新商家系统性能优化实践",[145,687,688],{},[272,689,691],{"href":690},"\u002Fknowledge\u002Fteam-documents\u002F09","同业主重复单提醒规则",[693,694,695],"style",{},"html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .syTEX, html code.shiki .syTEX{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":288,"searchDepth":302,"depth":302,"links":697},[698,699,700,704,705,706,707,708,709,710],{"id":26,"depth":302,"text":26},{"id":42,"depth":302,"text":43},{"id":137,"depth":302,"text":137,"children":701},[702,703],{"id":34,"depth":317,"text":34},{"id":159,"depth":317,"text":38},{"id":179,"depth":302,"text":180},{"id":278,"depth":302,"text":278},{"id":534,"depth":302,"text":534},{"id":580,"depth":302,"text":580},{"id":629,"depth":302,"text":629},{"id":659,"depth":302,"text":659},{"id":673,"depth":302,"text":673},{"title":8,"description":9},"knowledge\u002Fteam-documents\u002F12","knowledge\u002Fknowledge\u002Fteam-documents\u002F12.md","md",{"items":716},[717,721,725,727,731,735],{"path":718,"title":719,"description":720,"category":10,"score":505},"\u002Fknowledge\u002Fteam-documents\u002F19","GridView 宫格加载渲染优化","系统首页 GridView 宫格模块接口耗时不高，但首次进入总耗时接近 22s。复盘耗时分层定位过程、代码层面的瓶颈（约 2000 行、100 个 tab 重复节点）、优化手段与最终指标对比。",{"path":722,"title":723,"description":724,"category":10,"score":505},"\u002Fknowledge\u002Fteam-documents\u002F06","企业微信与小程序工单问题","企微师傅端与商家小程序端长期共用一套代码，页面与组件嵌套边界不清晰、引入规范缺失、公共代码与端侧代码耦合度高，导致维护成本持续上升。本文给出拆分为两套独立项目的架构建议，并说明边界划分、迁移注意事项与性能优化方向。",{"path":684,"title":685,"description":726,"category":10,"score":505},"商家系统新版本上线后，团队持续针对构建效率与用户体验做了一轮系统性优化。本文记录核心方案与落地结果，供后续版本复用。",{"path":728,"title":729,"description":730,"category":10,"score":505},"\u002Fknowledge\u002Fteam-documents\u002F04","老系统升级与兼容改造实践","公司原有业务系统采用 Node + jQuery 架构，长期运行后暴露出典型遗留系统问题：",{"path":732,"title":733,"description":734,"category":10,"score":505},"\u002Fknowledge\u002Fteam-documents\u002F02","防篡改水印","在各类管理后台、SaaS 平台或内部系统中，页面水印已经是非常常见的能力：一方面在截图时携带账号、姓名、时间等信息，降低截图外传的风险；另一方面在上传图片或文档预览时，通过水印标记上传者与时间，满足审计和合规需求。",{"path":736,"title":737,"description":738,"category":10,"score":505},"\u002Fknowledge\u002Fteam-documents\u002F22","企业微信 uni-app H5：OAuth 回退白屏与列表缓存","第三方 BI 报表项目，企业微信内嵌 H5，uni-app 编译，history 模式。主页面 BiLink 同时承担静默授权和列表展示，上线后碰到两个问题：授权完清掉 URL 参数，iOS 侧滑返回还是白屏；列表加了缓存以后，刷新行…",{"series":740,"title":741,"items":742,"index":814,"prev":815,"next":816},"team-documents","team documents",[743,747,749,753,755,759,761,765,769,771,775,779,780,782,786,790,794,798,802,804,808,812],{"path":744,"title":745,"date":746,"pinned":16},"\u002Fknowledge\u002Fteam-documents\u002F01","执行价格弹窗：表头 \u002F 表体合并与可配置表格","2024-07-27",{"path":732,"title":733,"date":748,"pinned":16},"2024-01-09",{"path":750,"title":751,"date":752,"pinned":16},"\u002Fknowledge\u002Fteam-documents\u002F03","键盘弹起导致底部被顶起问题（H5 适配）","2024-09-17",{"path":728,"title":729,"date":754,"pinned":16},"2024-12-12",{"path":756,"title":757,"date":758,"pinned":16},"\u002Fknowledge\u002Fteam-documents\u002F05","内部插件 \u002F 工具库开发实践","2021-08-19",{"path":722,"title":723,"date":760,"pinned":16},"2025-10-01",{"path":762,"title":763,"date":764,"pinned":16},"\u002Fknowledge\u002Fteam-documents\u002F07","企业微信群工具打开缓慢原因分析","2020-04-12",{"path":766,"title":767,"date":768,"pinned":16},"\u002Fknowledge\u002Fteam-documents\u002F08","属性排序需求","2024-06-16",{"path":690,"title":691,"date":770,"pinned":16},"2020-06-07",{"path":772,"title":773,"date":774,"pinned":16},"\u002Fknowledge\u002Fteam-documents\u002F10","图片上传前的自定义水印实践","2021-06-10",{"path":776,"title":777,"date":778,"pinned":16},"\u002Fknowledge\u002Fteam-documents\u002F11","系统下单（重复单提示框）异常复盘","2023-11-21",{"path":7,"title":8,"date":15,"pinned":16},{"path":684,"title":685,"date":781,"pinned":16},"2025-04-08",{"path":783,"title":784,"date":785,"pinned":16},"\u002Fknowledge\u002Fteam-documents\u002F14","选项卡切换与 Loading 状态封装","2019-11-03",{"path":787,"title":788,"date":789,"pinned":16},"\u002Fknowledge\u002Fteam-documents\u002F15","移动端返回事件触发两次问题复盘","2021-03-09",{"path":791,"title":792,"date":793,"pinned":16},"\u002Fknowledge\u002Fteam-documents\u002F16","在线协作表格接入实践","2023-10-27",{"path":795,"title":796,"date":797,"pinned":16},"\u002Fknowledge\u002Fteam-documents\u002F17","支付中转页面升级实践","2022-10-15",{"path":799,"title":800,"date":801,"pinned":16},"\u002Fknowledge\u002Fteam-documents\u002F18","中英文输入法下搜索触发冲突复盘","2024-09-01",{"path":718,"title":719,"date":803,"pinned":16},"2026-03-17",{"path":805,"title":806,"date":807,"pinned":16},"\u002Fknowledge\u002Fteam-documents\u002F20","H5 GPS 定位问题说明","2023-08-31",{"path":809,"title":810,"date":811,"pinned":16},"\u002Fknowledge\u002Fteam-documents\u002F21","vxe-table 行 Hover 联动高亮","2024-08-31",{"path":736,"title":737,"date":813,"pinned":16},"2023-08-17",11,{"path":776,"title":777,"date":778,"pinned":16},{"path":684,"title":685,"date":781,"pinned":16}]