Files
dashboard/.qoder/repowiki/zh/meta/repowiki-metadata.json
T
2026-07-01 11:26:23 +08:00

1 line
316 KiB
JSON

{"code_snippets":[{"id":"2ba6ee170718db40d0a0c1e0e271ab8c","path":"frontend/src/views/ota/index.vue","line_range":"1-1003","gmt_create":"2026-06-30T18:39:29.609311+08:00","gmt_modified":"2026-06-30T18:39:29.609311+08:00"},{"id":"3e935f654a28968186e9260f2c5035c7","path":"frontend/src/api/ota.js","line_range":"1-68","gmt_create":"2026-06-30T18:39:29.609615+08:00","gmt_modified":"2026-06-30T18:39:29.609615+08:00"},{"id":"edbb69e747bbcd76dd1bc3a361ebf7c0","path":"frontend/src/api/blacklist.js","line_range":"1-57","gmt_create":"2026-06-30T18:39:29.609775+08:00","gmt_modified":"2026-06-30T18:39:29.609775+08:00"},{"id":"4e817a7f3bd90bb9e57c6a2e9009380f","path":"frontend/src/api/otaTargetDevice.js","line_range":"1-57","gmt_create":"2026-06-30T18:39:29.609938+08:00","gmt_modified":"2026-06-30T18:39:29.609938+08:00"},{"id":"72de55f3f022487777e9ad301c9d942b","path":"backend/src/routes/blacklist.js","line_range":"1-223","gmt_create":"2026-06-30T18:39:29.610091+08:00","gmt_modified":"2026-06-30T18:39:29.610091+08:00"},{"id":"ba9810388706ac5ffb0156f74ada8b88","path":"backend/src/routes/otaTargetDevice.js","line_range":"1-248","gmt_create":"2026-06-30T18:39:29.610237+08:00","gmt_modified":"2026-06-30T18:39:29.610237+08:00"},{"id":"f3b38dfd34a76e0d2e62a863fca301a8","path":"frontend/src/views/ota/index.vue","line_range":"420-831","gmt_create":"2026-06-30T18:39:29.611431+08:00","gmt_modified":"2026-06-30T18:39:29.611431+08:00"},{"id":"ae7ce676a4f649c15d0490bbb2954cfe","path":"frontend/src/api/ota.js","line_range":"13-67","gmt_create":"2026-06-30T18:39:29.611582+08:00","gmt_modified":"2026-06-30T18:39:29.611583+08:00"},{"id":"859ba4011a4720ad0ad431545e144986","path":"frontend/src/api/blacklist.js","line_range":"12-56","gmt_create":"2026-06-30T18:39:29.611724+08:00","gmt_modified":"2026-06-30T18:39:29.611724+08:00"},{"id":"c910f65a89648ecf30c84b77b136ad70","path":"frontend/src/api/otaTargetDevice.js","line_range":"12-55","gmt_create":"2026-06-30T18:39:29.611869+08:00","gmt_modified":"2026-06-30T18:39:29.611869+08:00"},{"id":"c042223cf0aa5b2e59be1747923b4baf","path":"frontend/src/api/ota.js","line_range":"13-49","gmt_create":"2026-06-30T18:39:29.612183+08:00","gmt_modified":"2026-06-30T18:39:29.612183+08:00"},{"id":"b1e9d90908a2a5e3d545ca0cf2c86769","path":"backend/src/routes/ota.js","line_range":"24-268","gmt_create":"2026-06-30T18:39:29.612679+08:00","gmt_modified":"2026-06-30T18:39:29.612679+08:00"},{"id":"aae8712924efab58e019d0c963576781","path":"backend/src/routes/blacklist.js","line_range":"96-139","gmt_create":"2026-06-30T18:39:29.612821+08:00","gmt_modified":"2026-06-30T18:39:29.612821+08:00"},{"id":"fb9daf52780951bc4b93f14b1fcfa8f1","path":"backend/src/routes/otaTargetDevice.js","line_range":"96-139","gmt_create":"2026-06-30T18:39:29.612979+08:00","gmt_modified":"2026-06-30T18:39:29.612979+08:00"},{"id":"23aa29b61d1387fca0530a0a1e57e27f","path":"backend/src/routes/ota.js","line_range":"1-292","gmt_create":"2026-06-30T18:39:29.613104+08:00","gmt_modified":"2026-06-30T18:39:29.613104+08:00"},{"id":"e6f541a0af8390b3610d1e380a8d3236","path":"backend/src/models/Ota.js","line_range":"4-94","gmt_create":"2026-06-30T18:39:29.61355+08:00","gmt_modified":"2026-06-30T18:39:29.61355+08:00"},{"id":"4aad83e3e76ccc16e5b91d801ab1b278","path":"backend/src/models/BlackList.js","line_range":"5-36","gmt_create":"2026-06-30T18:39:29.613684+08:00","gmt_modified":"2026-06-30T18:39:29.613684+08:00"},{"id":"54c99704b8bcabdfe63adda9c4392452","path":"backend/src/models/OtaTargetDevice.js","line_range":"5-37","gmt_create":"2026-06-30T18:39:29.613824+08:00","gmt_modified":"2026-06-30T18:39:29.613824+08:00"},{"id":"b7c66d1bc7887a6132dc3acbf6421a5d","path":"backend/src/models/Ota.js","line_range":"1-97","gmt_create":"2026-06-30T18:39:29.613982+08:00","gmt_modified":"2026-06-30T18:39:29.613982+08:00"},{"id":"058bc5c3e018c854b5cf42905abd45d7","path":"backend/src/models/BlackList.js","line_range":"1-36","gmt_create":"2026-06-30T18:39:29.614129+08:00","gmt_modified":"2026-06-30T18:39:29.614129+08:00"},{"id":"3830639d0b7444aa8a1cf3c80d4eef7e","path":"backend/src/models/OtaTargetDevice.js","line_range":"1-37","gmt_create":"2026-06-30T18:39:29.614371+08:00","gmt_modified":"2026-06-30T18:39:29.614371+08:00"},{"id":"be497152bcedca75299e4c2521c11859","path":"backend/src/services/otaStorage.js","line_range":"46-103","gmt_create":"2026-06-30T18:39:29.614741+08:00","gmt_modified":"2026-06-30T18:39:29.614741+08:00"},{"id":"af76fcd4277eeb577f573e21de923bbf","path":"backend/src/config/env.js","line_range":"1-13","gmt_create":"2026-06-30T18:39:29.614989+08:00","gmt_modified":"2026-06-30T18:39:29.614989+08:00"},{"id":"b8c21c93e526039c96f1df526ebdcafe","path":"backend/src/services/otaStorage.js","line_range":"1-113","gmt_create":"2026-06-30T18:39:29.615206+08:00","gmt_modified":"2026-06-30T18:39:29.615206+08:00"},{"id":"424dfd038ca84be6195b08d7032a1235","path":"backend/src/routes/ota.js","line_range":"68-102","gmt_create":"2026-06-30T18:39:29.61565+08:00","gmt_modified":"2026-06-30T18:39:29.61565+08:00"},{"id":"2fc67d9140f7c12759a5188eb6f9b204","path":"frontend/src/views/ota/index.vue","line_range":"305-338","gmt_create":"2026-06-30T18:39:29.615816+08:00","gmt_modified":"2026-06-30T18:39:29.615816+08:00"},{"id":"e3a6003c52bf8b8487bb1b8709da6b4b","path":"backend/src/utils/response.js","line_range":"1-25","gmt_create":"2026-06-30T18:39:29.615973+08:00","gmt_modified":"2026-06-30T18:39:29.615973+08:00"},{"id":"cabe1728acba4dab25a86b5788412e46","path":"backend/src/routes/ota.js","line_range":"25-66","gmt_create":"2026-06-30T18:39:29.616135+08:00","gmt_modified":"2026-06-30T18:39:29.616135+08:00"},{"id":"45f0756fae3928b75883500a5006f7f0","path":"frontend/src/views/ota/index.vue","line_range":"645-734","gmt_create":"2026-06-30T18:39:29.616292+08:00","gmt_modified":"2026-06-30T18:39:29.616292+08:00"},{"id":"f2e521eddcaa25c62a309d5b0af997fa","path":"backend/src/routes/blacklist.js","line_range":"96-204","gmt_create":"2026-06-30T18:39:29.616595+08:00","gmt_modified":"2026-06-30T18:39:29.616595+08:00"},{"id":"6b7ea701575cf98b6ee3431f68ad5649","path":"frontend/src/views/ota/index.vue","line_range":"736-817","gmt_create":"2026-06-30T18:39:29.61672+08:00","gmt_modified":"2026-06-30T18:39:29.61672+08:00"},{"id":"506ecfb839ed7fb3f4199ade7e4b6a64","path":"backend/src/routes/otaTargetDevice.js","line_range":"96-208","gmt_create":"2026-06-30T18:39:29.617009+08:00","gmt_modified":"2026-06-30T18:39:29.617009+08:00"},{"id":"7a5ae98472bdc4806472d50e6b88c997","path":"frontend/src/utils/request.js","line_range":"1-72","gmt_create":"2026-06-30T18:39:29.617154+08:00","gmt_modified":"2026-06-30T18:39:29.617154+08:00"},{"id":"69c930f997042246d4e17369ede6f826","path":"frontend/src/router/index.js","line_range":"1-91","gmt_create":"2026-06-30T18:39:29.617278+08:00","gmt_modified":"2026-06-30T18:39:29.617278+08:00"},{"id":"6b61c60063d41432a3cc1ac4d1699181","path":"frontend/src/utils/request.js","line_range":"44-69","gmt_create":"2026-06-30T18:39:29.619097+08:00","gmt_modified":"2026-06-30T18:39:29.619097+08:00"},{"id":"752be7590bb954b39e5a8f41ce8811eb","path":"backend/src/routes/blacklist.js","line_range":"159-183","gmt_create":"2026-06-30T18:39:29.619239+08:00","gmt_modified":"2026-06-30T18:39:29.619239+08:00"},{"id":"4daa6ac2900ccb8c9fd7142d0ecdd298","path":"backend/src/routes/otaTargetDevice.js","line_range":"142-208","gmt_create":"2026-06-30T18:39:29.619362+08:00","gmt_modified":"2026-06-30T18:39:29.619362+08:00"},{"id":"e22545d86c6efa26c57aea0e355a57f6","path":"DEPLOY.md","line_range":"226-256","gmt_create":"2026-06-30T18:39:29.619502+08:00","gmt_modified":"2026-06-30T18:39:29.619502+08:00"},{"id":"05900505c40339d0cc93870281600479","path":"backend/src/models/BlackList.js","line_range":"1-37","gmt_create":"2026-06-30T18:39:56.520893+08:00","gmt_modified":"2026-06-30T18:39:56.520893+08:00"},{"id":"921d509d2d71df1e2bace1390640482a","path":"backend/src/models/OtaTargetDevice.js","line_range":"1-38","gmt_create":"2026-06-30T18:39:56.521018+08:00","gmt_modified":"2026-06-30T18:39:56.521018+08:00"},{"id":"149a41cdd5807ad4f666e9eb2463fa68","path":"frontend/src/views/ota/index.vue","line_range":"1-628","gmt_create":"2026-06-30T18:39:56.521152+08:00","gmt_modified":"2026-06-30T18:39:56.521152+08:00"},{"id":"771e33c2a04ba5eb1a504cf7aa1e9c36","path":"frontend/src/views/blacklist/index.vue","line_range":"1-381","gmt_create":"2026-06-30T18:39:56.521272+08:00","gmt_modified":"2026-06-30T18:39:56.521272+08:00"},{"id":"f23242497ee4dc9ed490a1d09d0d3d91","path":"frontend/src/views/ota-target-device/index.vue","line_range":"1-386","gmt_create":"2026-06-30T18:39:56.521399+08:00","gmt_modified":"2026-06-30T18:39:56.521399+08:00"},{"id":"0c0ca507fcaf2164af19adf77eaf72e8","path":"backend/src/validators/ota.js","line_range":"1-36","gmt_create":"2026-06-30T18:39:56.523127+08:00","gmt_modified":"2026-06-30T18:39:56.523127+08:00"},{"id":"420851439a300cff8b7fa324589ce87a","path":"backend/src/validators/blacklist.js","line_range":"1-14","gmt_create":"2026-06-30T18:39:56.52326+08:00","gmt_modified":"2026-06-30T18:39:56.52326+08:00"},{"id":"e92ce9787ed66ea4dd0821e0c8f28d8a","path":"backend/src/validators/otaTargetDevice.js","line_range":"1-14","gmt_create":"2026-06-30T18:39:56.523384+08:00","gmt_modified":"2026-06-30T18:39:56.523384+08:00"},{"id":"0696a947e8ffd03fd403809f77673c55","path":"backend/src/routes/ota.js","line_range":"24-66","gmt_create":"2026-06-30T18:39:56.523678+08:00","gmt_modified":"2026-06-30T18:39:56.523678+08:00"},{"id":"0f5328f2be7159ab2f533662f8992b10","path":"frontend/src/views/ota/index.vue","line_range":"384-412","gmt_create":"2026-06-30T18:39:56.524074+08:00","gmt_modified":"2026-06-30T18:39:56.524075+08:00"},{"id":"b6918b1988464553531aec983ea27b7d","path":"backend/src/models/BlackList.js","line_range":"5-32","gmt_create":"2026-06-30T18:39:56.524325+08:00","gmt_modified":"2026-06-30T18:39:56.524326+08:00"},{"id":"59e0c0eb304ea8fbb7145bc038c8fdf6","path":"backend/src/models/OtaTargetDevice.js","line_range":"5-33","gmt_create":"2026-06-30T18:39:56.524448+08:00","gmt_modified":"2026-06-30T18:39:56.524448+08:00"},{"id":"0991eb53c8fe806cf46decab5e748f75","path":"backend/src/services/otaStorage.js","line_range":"72-103","gmt_create":"2026-06-30T18:39:56.525119+08:00","gmt_modified":"2026-06-30T18:39:56.525119+08:00"},{"id":"a826e77f133d3db11e600f30b88f4e9a","path":"backend/src/validators/ota.js","line_range":"3-35","gmt_create":"2026-06-30T18:39:56.525629+08:00","gmt_modified":"2026-06-30T18:39:56.525629+08:00"},{"id":"4a33d32c1578fd612d900aa17246d8c2","path":"backend/src/validators/blacklist.js","line_range":"3-11","gmt_create":"2026-06-30T18:39:56.525734+08:00","gmt_modified":"2026-06-30T18:39:56.525734+08:00"},{"id":"4660c7ce6daeb3f765d39856dcf95f6f","path":"backend/src/validators/otaTargetDevice.js","line_range":"3-11","gmt_create":"2026-06-30T18:39:56.525836+08:00","gmt_modified":"2026-06-30T18:39:56.525836+08:00"},{"id":"7467dc2e2d22c93c63fa6342b2e08541","path":"frontend/src/views/ota/index.vue","line_range":"420-579","gmt_create":"2026-06-30T18:39:56.526564+08:00","gmt_modified":"2026-06-30T18:39:56.526564+08:00"},{"id":"4b5baf2b8dcd8468722cd31868c794b2","path":"frontend/src/views/ota/index.vue","line_range":"645-683","gmt_create":"2026-06-30T18:39:56.526669+08:00","gmt_modified":"2026-06-30T18:39:56.526669+08:00"},{"id":"20e79ab592f63eb9d23c0d563d5f5202","path":"backend/src/routes/blacklist.js","line_range":"16-71","gmt_create":"2026-06-30T18:39:56.527902+08:00","gmt_modified":"2026-06-30T18:39:56.527902+08:00"},{"id":"07afcaa71195b3d86386dcde14973a8d","path":"backend/src/routes/blacklist.js","line_range":"96-131","gmt_create":"2026-06-30T18:39:56.527997+08:00","gmt_modified":"2026-06-30T18:39:56.527997+08:00"},{"id":"2a5364613dbf0723f2e2a64affabb065","path":"frontend/src/views/blacklist/index.vue","line_range":"144-346","gmt_create":"2026-06-30T18:39:56.528097+08:00","gmt_modified":"2026-06-30T18:39:56.528097+08:00"},{"id":"12ad7a8b54f39c0717843220f341d59e","path":"backend/src/routes/otaTargetDevice.js","line_range":"16-71","gmt_create":"2026-06-30T18:39:56.528805+08:00","gmt_modified":"2026-06-30T18:39:56.528805+08:00"},{"id":"585261a6626a815d8f5f83b91a086eb9","path":"frontend/src/views/ota-target-device/index.vue","line_range":"144-351","gmt_create":"2026-06-30T18:39:56.529026+08:00","gmt_modified":"2026-06-30T18:39:56.529026+08:00"},{"id":"2a0437737a8daf4655f00caae7549a06","path":"backend/package.json","line_range":"11-24","gmt_create":"2026-06-30T18:39:56.529846+08:00","gmt_modified":"2026-06-30T18:39:56.529846+08:00"},{"id":"f0cfbce84fd69ea625e215367d5da707","path":"backend/package.json","line_range":"1-29","gmt_create":"2026-06-30T18:39:56.529954+08:00","gmt_modified":"2026-06-30T18:39:56.529954+08:00"},{"id":"fad5c52b0517044faace96133c6e570c","path":"backend/src/routes/ota.js","line_range":"174-181","gmt_create":"2026-06-30T18:39:56.530168+08:00","gmt_modified":"2026-06-30T18:39:56.530168+08:00"},{"id":"f62834891fb8675fbb1dcb6654b186e9","path":"backend/src/services/otaStorage.js","line_range":"95-98","gmt_create":"2026-06-30T18:39:56.530261+08:00","gmt_modified":"2026-06-30T18:39:56.530261+08:00"},{"id":"0c387969b601239a31cb0c672ef3c116","path":"backend/src/routes/blacklist.js","line_range":"108-112","gmt_create":"2026-06-30T18:39:56.530365+08:00","gmt_modified":"2026-06-30T18:39:56.530365+08:00"},{"id":"406e308cbdb4112d67f61a82a8118e9f","path":"backend/src/routes/otaTargetDevice.js","line_range":"108-112","gmt_create":"2026-06-30T18:39:56.530464+08:00","gmt_modified":"2026-06-30T18:39:56.530464+08:00"}],"knowledge_relations":[{"id":2781,"source_id":"2b5fd78d-2407-4ccc-8807-9bb05c0a687e","target_id":"6b28e060-0be3-411e-8a94-3777d165d10e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 2b5fd78d-2407-4ccc-8807-9bb05c0a687e -\u003e 6b28e060-0be3-411e-8a94-3777d165d10e","gmt_create":"2026-06-30T14:40:47.271887+08:00","gmt_modified":"2026-06-30T14:40:47.271887+08:00"},{"id":2782,"source_id":"2b5fd78d-2407-4ccc-8807-9bb05c0a687e","target_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 2b5fd78d-2407-4ccc-8807-9bb05c0a687e -\u003e 941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","gmt_create":"2026-06-30T14:40:47.272516+08:00","gmt_modified":"2026-06-30T14:40:47.272516+08:00"},{"id":2783,"source_id":"2b5fd78d-2407-4ccc-8807-9bb05c0a687e","target_id":"c6f2cb24-ff10-4ae7-87c2-b23b9bbee033","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 2b5fd78d-2407-4ccc-8807-9bb05c0a687e -\u003e c6f2cb24-ff10-4ae7-87c2-b23b9bbee033","gmt_create":"2026-06-30T14:40:47.272798+08:00","gmt_modified":"2026-06-30T14:40:47.272798+08:00"},{"id":2784,"source_id":"2b5fd78d-2407-4ccc-8807-9bb05c0a687e","target_id":"4619dc3e-419f-435b-ba7c-e600e188743a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 2b5fd78d-2407-4ccc-8807-9bb05c0a687e -\u003e 4619dc3e-419f-435b-ba7c-e600e188743a","gmt_create":"2026-06-30T14:40:47.272953+08:00","gmt_modified":"2026-06-30T14:40:47.272953+08:00"},{"id":2785,"source_id":"1f4b6f57-25c5-444e-a943-d162d896dc21","target_id":"7f894188-cf72-40a2-af95-f13ef3dd1f6e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 1f4b6f57-25c5-444e-a943-d162d896dc21 -\u003e 7f894188-cf72-40a2-af95-f13ef3dd1f6e","gmt_create":"2026-06-30T14:40:47.273394+08:00","gmt_modified":"2026-06-30T14:40:47.273394+08:00"},{"id":2786,"source_id":"1f4b6f57-25c5-444e-a943-d162d896dc21","target_id":"b66da3f2-6889-45dc-a824-2591d2f5f0f3","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 1f4b6f57-25c5-444e-a943-d162d896dc21 -\u003e b66da3f2-6889-45dc-a824-2591d2f5f0f3","gmt_create":"2026-06-30T14:40:47.273688+08:00","gmt_modified":"2026-06-30T14:40:47.273688+08:00"},{"id":2787,"source_id":"1f4b6f57-25c5-444e-a943-d162d896dc21","target_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 1f4b6f57-25c5-444e-a943-d162d896dc21 -\u003e 799e02d2-8358-41a1-9f8e-114f8ac00eae","gmt_create":"2026-06-30T14:40:47.273951+08:00","gmt_modified":"2026-06-30T14:40:47.273952+08:00"},{"id":2788,"source_id":"1f4b6f57-25c5-444e-a943-d162d896dc21","target_id":"be7e1733-8c9e-4849-99b0-bab40fdf271e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 1f4b6f57-25c5-444e-a943-d162d896dc21 -\u003e be7e1733-8c9e-4849-99b0-bab40fdf271e","gmt_create":"2026-06-30T14:40:47.274328+08:00","gmt_modified":"2026-06-30T14:40:47.274328+08:00"},{"id":2789,"source_id":"1f4b6f57-25c5-444e-a943-d162d896dc21","target_id":"8f464fc9-6537-45fa-a0dd-eacdf742b5a1","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 1f4b6f57-25c5-444e-a943-d162d896dc21 -\u003e 8f464fc9-6537-45fa-a0dd-eacdf742b5a1","gmt_create":"2026-06-30T14:40:47.274458+08:00","gmt_modified":"2026-06-30T14:40:47.274458+08:00"},{"id":2790,"source_id":"1f4b6f57-25c5-444e-a943-d162d896dc21","target_id":"77bc73e0-8709-4209-96e0-5522f9356b06","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 1f4b6f57-25c5-444e-a943-d162d896dc21 -\u003e 77bc73e0-8709-4209-96e0-5522f9356b06","gmt_create":"2026-06-30T14:40:47.274632+08:00","gmt_modified":"2026-06-30T14:40:47.274632+08:00"},{"id":2791,"source_id":"1f4b6f57-25c5-444e-a943-d162d896dc21","target_id":"799ec9fc-088e-456c-8f93-72516adac3ac","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 1f4b6f57-25c5-444e-a943-d162d896dc21 -\u003e 799ec9fc-088e-456c-8f93-72516adac3ac","gmt_create":"2026-06-30T14:40:47.274784+08:00","gmt_modified":"2026-06-30T14:40:47.274784+08:00"},{"id":2792,"source_id":"4553d9a4-e0e6-4bc3-b285-ecc6df9dc822","target_id":"0efcac71-9db4-49c9-a660-690dcb97cd54","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 4553d9a4-e0e6-4bc3-b285-ecc6df9dc822 -\u003e 0efcac71-9db4-49c9-a660-690dcb97cd54","gmt_create":"2026-06-30T14:40:47.275136+08:00","gmt_modified":"2026-06-30T14:40:47.275136+08:00"},{"id":2793,"source_id":"4553d9a4-e0e6-4bc3-b285-ecc6df9dc822","target_id":"ef11f60f-47aa-41bf-8884-6d51bc9ae8ef","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 4553d9a4-e0e6-4bc3-b285-ecc6df9dc822 -\u003e ef11f60f-47aa-41bf-8884-6d51bc9ae8ef","gmt_create":"2026-06-30T14:40:47.275339+08:00","gmt_modified":"2026-06-30T14:40:47.275339+08:00"},{"id":2794,"source_id":"4553d9a4-e0e6-4bc3-b285-ecc6df9dc822","target_id":"edd1d813-70d4-49de-9f9e-e3ebf7a68678","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 4553d9a4-e0e6-4bc3-b285-ecc6df9dc822 -\u003e edd1d813-70d4-49de-9f9e-e3ebf7a68678","gmt_create":"2026-06-30T14:40:47.27546+08:00","gmt_modified":"2026-06-30T14:40:47.27546+08:00"},{"id":2795,"source_id":"4553d9a4-e0e6-4bc3-b285-ecc6df9dc822","target_id":"b2376dbd-002b-4469-8e6e-71748e46e7c2","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 4553d9a4-e0e6-4bc3-b285-ecc6df9dc822 -\u003e b2376dbd-002b-4469-8e6e-71748e46e7c2","gmt_create":"2026-06-30T14:40:47.275789+08:00","gmt_modified":"2026-06-30T14:40:47.275789+08:00"},{"id":2796,"source_id":"4553d9a4-e0e6-4bc3-b285-ecc6df9dc822","target_id":"b5718a44-f452-496d-83c3-4e89b844c709","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 4553d9a4-e0e6-4bc3-b285-ecc6df9dc822 -\u003e b5718a44-f452-496d-83c3-4e89b844c709","gmt_create":"2026-06-30T14:40:47.276097+08:00","gmt_modified":"2026-06-30T14:40:47.276097+08:00"},{"id":2797,"source_id":"4553d9a4-e0e6-4bc3-b285-ecc6df9dc822","target_id":"539729a8-aa4b-40c6-bf3b-ec9f467f7717","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 4553d9a4-e0e6-4bc3-b285-ecc6df9dc822 -\u003e 539729a8-aa4b-40c6-bf3b-ec9f467f7717","gmt_create":"2026-06-30T14:40:47.276606+08:00","gmt_modified":"2026-06-30T14:40:47.276606+08:00"},{"id":2798,"source_id":"ed153077-3827-4586-8838-812707189c14","target_id":"b6857b45-a960-4168-92dd-1edcf6567e47","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: ed153077-3827-4586-8838-812707189c14 -\u003e b6857b45-a960-4168-92dd-1edcf6567e47","gmt_create":"2026-06-30T14:40:47.277101+08:00","gmt_modified":"2026-06-30T14:40:47.277101+08:00"},{"id":2799,"source_id":"ed153077-3827-4586-8838-812707189c14","target_id":"2971fa4f-335a-4294-9668-0967b9047d66","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: ed153077-3827-4586-8838-812707189c14 -\u003e 2971fa4f-335a-4294-9668-0967b9047d66","gmt_create":"2026-06-30T14:40:47.277268+08:00","gmt_modified":"2026-06-30T14:40:47.277268+08:00"},{"id":2800,"source_id":"ed153077-3827-4586-8838-812707189c14","target_id":"f0978b42-6f98-470e-922f-22dec2fac24d","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: ed153077-3827-4586-8838-812707189c14 -\u003e f0978b42-6f98-470e-922f-22dec2fac24d","gmt_create":"2026-06-30T14:40:47.277627+08:00","gmt_modified":"2026-06-30T14:40:47.277627+08:00"},{"id":2801,"source_id":"c45b2f5f-49f8-4c8d-b489-44b4c6800e99","target_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c45b2f5f-49f8-4c8d-b489-44b4c6800e99 -\u003e 5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","gmt_create":"2026-06-30T14:40:47.277787+08:00","gmt_modified":"2026-06-30T14:40:47.277787+08:00"},{"id":2802,"source_id":"c45b2f5f-49f8-4c8d-b489-44b4c6800e99","target_id":"62bcda0f-7c78-4109-9649-58bbf9fd68ae","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c45b2f5f-49f8-4c8d-b489-44b4c6800e99 -\u003e 62bcda0f-7c78-4109-9649-58bbf9fd68ae","gmt_create":"2026-06-30T14:40:47.27822+08:00","gmt_modified":"2026-06-30T14:40:47.27822+08:00"},{"id":2803,"source_id":"c45b2f5f-49f8-4c8d-b489-44b4c6800e99","target_id":"86f882d7-9e64-4c38-85e7-4782fd55fed2","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c45b2f5f-49f8-4c8d-b489-44b4c6800e99 -\u003e 86f882d7-9e64-4c38-85e7-4782fd55fed2","gmt_create":"2026-06-30T14:40:47.278376+08:00","gmt_modified":"2026-06-30T14:40:47.278376+08:00"},{"id":2804,"source_id":"c45b2f5f-49f8-4c8d-b489-44b4c6800e99","target_id":"ff04bd0e-99c4-481c-ac8c-3c1a6cae1fb5","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c45b2f5f-49f8-4c8d-b489-44b4c6800e99 -\u003e ff04bd0e-99c4-481c-ac8c-3c1a6cae1fb5","gmt_create":"2026-06-30T14:40:47.278503+08:00","gmt_modified":"2026-06-30T14:40:47.278503+08:00"},{"id":2805,"source_id":"d4cb0c3c-97e9-449f-8918-f1c01e7e3561","target_id":"772c69b5-886e-48f6-bd11-faf8ca2155e8","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: d4cb0c3c-97e9-449f-8918-f1c01e7e3561 -\u003e 772c69b5-886e-48f6-bd11-faf8ca2155e8","gmt_create":"2026-06-30T14:40:47.278654+08:00","gmt_modified":"2026-06-30T14:40:47.278654+08:00"},{"id":2806,"source_id":"d4cb0c3c-97e9-449f-8918-f1c01e7e3561","target_id":"babe3ec0-01cb-43c3-93db-7e59cdccce68","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: d4cb0c3c-97e9-449f-8918-f1c01e7e3561 -\u003e babe3ec0-01cb-43c3-93db-7e59cdccce68","gmt_create":"2026-06-30T14:40:47.278828+08:00","gmt_modified":"2026-06-30T14:40:47.278828+08:00"},{"id":2807,"source_id":"d4cb0c3c-97e9-449f-8918-f1c01e7e3561","target_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: d4cb0c3c-97e9-449f-8918-f1c01e7e3561 -\u003e 8d4422fd-bd93-431d-a97c-70b75f370f82","gmt_create":"2026-06-30T14:40:47.278985+08:00","gmt_modified":"2026-06-30T14:40:47.278985+08:00"},{"id":2809,"source_id":"d4cb0c3c-97e9-449f-8918-f1c01e7e3561","target_id":"100cbee2-f7a5-4cc9-83a3-900a4aacac7e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: d4cb0c3c-97e9-449f-8918-f1c01e7e3561 -\u003e 100cbee2-f7a5-4cc9-83a3-900a4aacac7e","gmt_create":"2026-06-30T14:40:47.279419+08:00","gmt_modified":"2026-06-30T14:40:47.279419+08:00"},{"id":2810,"source_id":"d4cb0c3c-97e9-449f-8918-f1c01e7e3561","target_id":"cf1f3ceb-e3b1-4d5c-8353-f0ea4345414c","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: d4cb0c3c-97e9-449f-8918-f1c01e7e3561 -\u003e cf1f3ceb-e3b1-4d5c-8353-f0ea4345414c","gmt_create":"2026-06-30T14:40:47.279584+08:00","gmt_modified":"2026-06-30T14:40:47.279584+08:00"},{"id":2811,"source_id":"2971fa4f-335a-4294-9668-0967b9047d66","target_id":"0e003133-7d1a-4708-8599-fc71707070d6","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 2971fa4f-335a-4294-9668-0967b9047d66 -\u003e 0e003133-7d1a-4708-8599-fc71707070d6","gmt_create":"2026-06-30T14:40:47.280345+08:00","gmt_modified":"2026-06-30T14:40:47.280346+08:00"},{"id":2812,"source_id":"2971fa4f-335a-4294-9668-0967b9047d66","target_id":"4b6d6abc-bfd2-48a5-9c5e-de89f278f887","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 2971fa4f-335a-4294-9668-0967b9047d66 -\u003e 4b6d6abc-bfd2-48a5-9c5e-de89f278f887","gmt_create":"2026-06-30T14:40:47.280628+08:00","gmt_modified":"2026-06-30T14:40:47.280628+08:00"},{"id":2813,"source_id":"2971fa4f-335a-4294-9668-0967b9047d66","target_id":"5b84c784-85d8-46e0-8972-e7816f6bd687","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 2971fa4f-335a-4294-9668-0967b9047d66 -\u003e 5b84c784-85d8-46e0-8972-e7816f6bd687","gmt_create":"2026-06-30T14:40:47.280745+08:00","gmt_modified":"2026-06-30T14:40:47.280745+08:00"},{"id":2814,"source_id":"f0978b42-6f98-470e-922f-22dec2fac24d","target_id":"ad988472-7d0b-4076-86c8-f14661c5923d","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f0978b42-6f98-470e-922f-22dec2fac24d -\u003e ad988472-7d0b-4076-86c8-f14661c5923d","gmt_create":"2026-06-30T14:40:47.281057+08:00","gmt_modified":"2026-06-30T14:40:47.281057+08:00"},{"id":2815,"source_id":"f0978b42-6f98-470e-922f-22dec2fac24d","target_id":"7eee30c6-7725-456b-8b43-35b5e4df7e99","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f0978b42-6f98-470e-922f-22dec2fac24d -\u003e 7eee30c6-7725-456b-8b43-35b5e4df7e99","gmt_create":"2026-06-30T14:40:47.281191+08:00","gmt_modified":"2026-06-30T14:40:47.281191+08:00"},{"id":2816,"source_id":"f0978b42-6f98-470e-922f-22dec2fac24d","target_id":"791c01a2-dea1-407b-948d-3e2da8cbebed","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f0978b42-6f98-470e-922f-22dec2fac24d -\u003e 791c01a2-dea1-407b-948d-3e2da8cbebed","gmt_create":"2026-06-30T14:40:47.281365+08:00","gmt_modified":"2026-06-30T14:40:47.281365+08:00"},{"id":2817,"source_id":"f0978b42-6f98-470e-922f-22dec2fac24d","target_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f0978b42-6f98-470e-922f-22dec2fac24d -\u003e 9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","gmt_create":"2026-06-30T14:40:47.281523+08:00","gmt_modified":"2026-06-30T14:40:47.281523+08:00"},{"id":2818,"source_id":"f0978b42-6f98-470e-922f-22dec2fac24d","target_id":"6003d293-f2aa-4c49-817a-c7fa652890ed","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f0978b42-6f98-470e-922f-22dec2fac24d -\u003e 6003d293-f2aa-4c49-817a-c7fa652890ed","gmt_create":"2026-06-30T14:40:47.28164+08:00","gmt_modified":"2026-06-30T14:40:47.28164+08:00"},{"id":2820,"source_id":"f0978b42-6f98-470e-922f-22dec2fac24d","target_id":"73336201-a22f-4329-afc6-40fb5f00f4f1","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f0978b42-6f98-470e-922f-22dec2fac24d -\u003e 73336201-a22f-4329-afc6-40fb5f00f4f1","gmt_create":"2026-06-30T14:40:47.281894+08:00","gmt_modified":"2026-06-30T14:40:47.281894+08:00"},{"id":3274,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"fc2d0cc85e5f2565c3105cbe0584903a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/Ota.js","gmt_create":"2026-06-30T18:39:29.619553+08:00","gmt_modified":"2026-06-30T18:39:29.619553+08:00"},{"id":3275,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"ba84445ce5118798ce7d0da4ecb4d5e2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/ota.js","gmt_create":"2026-06-30T18:39:29.62003+08:00","gmt_modified":"2026-06-30T18:39:29.62003+08:00"},{"id":3276,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"a15b46bcf0be7bfbc82e57adca5be630","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/otaStorage.js","gmt_create":"2026-06-30T18:39:29.620188+08:00","gmt_modified":"2026-06-30T18:39:29.620188+08:00"},{"id":3277,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"4bb9a8c7ac3763db0746ff90788525b6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/ota/index.vue","gmt_create":"2026-06-30T18:39:29.620355+08:00","gmt_modified":"2026-06-30T18:39:29.620355+08:00"},{"id":3278,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"29e96dbf4d3d8f6e116ec620bbf504ad","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/ota.js","gmt_create":"2026-06-30T18:39:29.620492+08:00","gmt_modified":"2026-06-30T18:39:29.620492+08:00"},{"id":3279,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"5ceb781f55bf90055f3005880d06ee2a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/blacklist.js","gmt_create":"2026-06-30T18:39:29.620631+08:00","gmt_modified":"2026-06-30T18:39:29.620631+08:00"},{"id":3280,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"5973b5959029669ade01898821960785","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/otaTargetDevice.js","gmt_create":"2026-06-30T18:39:29.62078+08:00","gmt_modified":"2026-06-30T18:39:29.62078+08:00"},{"id":3281,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"a84967d9d3088fba02de385738e7ca27","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/BlackList.js","gmt_create":"2026-06-30T18:39:29.620917+08:00","gmt_modified":"2026-06-30T18:39:29.620918+08:00"},{"id":3282,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"4ca379f147f6f1da710371999e08dc24","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/OtaTargetDevice.js","gmt_create":"2026-06-30T18:39:29.621051+08:00","gmt_modified":"2026-06-30T18:39:29.621051+08:00"},{"id":3283,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"71a563f23b46da0255a6400402bbfa05","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/blacklist.js","gmt_create":"2026-06-30T18:39:29.62129+08:00","gmt_modified":"2026-06-30T18:39:29.62129+08:00"},{"id":3284,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"ea6e178b2f0bdcefe2ae8800166453d5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/otaTargetDevice.js","gmt_create":"2026-06-30T18:39:29.621469+08:00","gmt_modified":"2026-06-30T18:39:29.621469+08:00"},{"id":3285,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"30f836e18a6bf9cbcf650e5884375a93","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/utils/response.js","gmt_create":"2026-06-30T18:39:29.621631+08:00","gmt_modified":"2026-06-30T18:39:29.621631+08:00"},{"id":3286,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"2a04b070bd67fc5059bb504232687d64","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/config/env.js","gmt_create":"2026-06-30T18:39:29.621776+08:00","gmt_modified":"2026-06-30T18:39:29.621776+08:00"},{"id":3287,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"34fcf7aeb55a9c0224c554fc48545063","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/utils/request.js","gmt_create":"2026-06-30T18:39:29.621971+08:00","gmt_modified":"2026-06-30T18:39:29.621971+08:00"},{"id":3288,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"08b8d17e3c09b326687a7bca6789507a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/router/index.js","gmt_create":"2026-06-30T18:39:29.622133+08:00","gmt_modified":"2026-06-30T18:39:29.622133+08:00"},{"id":3289,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"0c25a991664c34b2b36ce3aeed80f4da","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: DEPLOY.md","gmt_create":"2026-06-30T18:39:29.622343+08:00","gmt_modified":"2026-06-30T18:39:29.622343+08:00"},{"id":3290,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"2ba6ee170718db40d0a0c1e0e271ab8c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#1-1003","gmt_create":"2026-06-30T18:39:29.622527+08:00","gmt_modified":"2026-06-30T18:39:29.622528+08:00"},{"id":3291,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"2ba6ee170718db40d0a0c1e0e271ab8c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-1003","gmt_create":"2026-06-30T18:39:29.622724+08:00","gmt_modified":"2026-06-30T18:39:29.622724+08:00"},{"id":3292,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"3e935f654a28968186e9260f2c5035c7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/ota.js#1-68","gmt_create":"2026-06-30T18:39:29.622902+08:00","gmt_modified":"2026-06-30T18:39:29.622902+08:00"},{"id":3293,"source_id":"29e96dbf4d3d8f6e116ec620bbf504ad","target_id":"3e935f654a28968186e9260f2c5035c7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-68","gmt_create":"2026-06-30T18:39:29.623031+08:00","gmt_modified":"2026-06-30T18:39:29.623031+08:00"},{"id":3294,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"edbb69e747bbcd76dd1bc3a361ebf7c0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/blacklist.js#1-57","gmt_create":"2026-06-30T18:39:29.623251+08:00","gmt_modified":"2026-06-30T18:39:29.623251+08:00"},{"id":3295,"source_id":"5ceb781f55bf90055f3005880d06ee2a","target_id":"edbb69e747bbcd76dd1bc3a361ebf7c0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-57","gmt_create":"2026-06-30T18:39:29.623384+08:00","gmt_modified":"2026-06-30T18:39:29.623384+08:00"},{"id":3296,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"4e817a7f3bd90bb9e57c6a2e9009380f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/otaTargetDevice.js#1-57","gmt_create":"2026-06-30T18:39:29.623559+08:00","gmt_modified":"2026-06-30T18:39:29.623559+08:00"},{"id":3297,"source_id":"5973b5959029669ade01898821960785","target_id":"4e817a7f3bd90bb9e57c6a2e9009380f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-57","gmt_create":"2026-06-30T18:39:29.623688+08:00","gmt_modified":"2026-06-30T18:39:29.623688+08:00"},{"id":3298,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"72de55f3f022487777e9ad301c9d942b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#1-223","gmt_create":"2026-06-30T18:39:29.623918+08:00","gmt_modified":"2026-06-30T18:39:29.623918+08:00"},{"id":3299,"source_id":"71a563f23b46da0255a6400402bbfa05","target_id":"72de55f3f022487777e9ad301c9d942b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-223","gmt_create":"2026-06-30T18:39:29.624048+08:00","gmt_modified":"2026-06-30T18:39:29.624048+08:00"},{"id":3300,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"ba9810388706ac5ffb0156f74ada8b88","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#1-248","gmt_create":"2026-06-30T18:39:29.624221+08:00","gmt_modified":"2026-06-30T18:39:29.624221+08:00"},{"id":3301,"source_id":"ea6e178b2f0bdcefe2ae8800166453d5","target_id":"ba9810388706ac5ffb0156f74ada8b88","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-248","gmt_create":"2026-06-30T18:39:29.62434+08:00","gmt_modified":"2026-06-30T18:39:29.62434+08:00"},{"id":3302,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"f3b38dfd34a76e0d2e62a863fca301a8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#420-831","gmt_create":"2026-06-30T18:39:29.625105+08:00","gmt_modified":"2026-06-30T18:39:29.625105+08:00"},{"id":3303,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"f3b38dfd34a76e0d2e62a863fca301a8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 420-831","gmt_create":"2026-06-30T18:39:29.625218+08:00","gmt_modified":"2026-06-30T18:39:29.625218+08:00"},{"id":3304,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"ae7ce676a4f649c15d0490bbb2954cfe","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/ota.js#13-67","gmt_create":"2026-06-30T18:39:29.625427+08:00","gmt_modified":"2026-06-30T18:39:29.625427+08:00"},{"id":3305,"source_id":"29e96dbf4d3d8f6e116ec620bbf504ad","target_id":"ae7ce676a4f649c15d0490bbb2954cfe","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-67","gmt_create":"2026-06-30T18:39:29.625541+08:00","gmt_modified":"2026-06-30T18:39:29.625541+08:00"},{"id":3306,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"859ba4011a4720ad0ad431545e144986","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/blacklist.js#12-56","gmt_create":"2026-06-30T18:39:29.625693+08:00","gmt_modified":"2026-06-30T18:39:29.625693+08:00"},{"id":3307,"source_id":"5ceb781f55bf90055f3005880d06ee2a","target_id":"859ba4011a4720ad0ad431545e144986","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-56","gmt_create":"2026-06-30T18:39:29.625828+08:00","gmt_modified":"2026-06-30T18:39:29.625828+08:00"},{"id":3308,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"c910f65a89648ecf30c84b77b136ad70","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/otaTargetDevice.js#12-55","gmt_create":"2026-06-30T18:39:29.625982+08:00","gmt_modified":"2026-06-30T18:39:29.625982+08:00"},{"id":3309,"source_id":"5973b5959029669ade01898821960785","target_id":"c910f65a89648ecf30c84b77b136ad70","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-55","gmt_create":"2026-06-30T18:39:29.626098+08:00","gmt_modified":"2026-06-30T18:39:29.626098+08:00"},{"id":3310,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"c042223cf0aa5b2e59be1747923b4baf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/ota.js#13-49","gmt_create":"2026-06-30T18:39:29.626374+08:00","gmt_modified":"2026-06-30T18:39:29.626374+08:00"},{"id":3311,"source_id":"29e96dbf4d3d8f6e116ec620bbf504ad","target_id":"c042223cf0aa5b2e59be1747923b4baf","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-49","gmt_create":"2026-06-30T18:39:29.626551+08:00","gmt_modified":"2026-06-30T18:39:29.626551+08:00"},{"id":3312,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"b1e9d90908a2a5e3d545ca0cf2c86769","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#24-268","gmt_create":"2026-06-30T18:39:29.626904+08:00","gmt_modified":"2026-06-30T18:39:29.626904+08:00"},{"id":3313,"source_id":"ba84445ce5118798ce7d0da4ecb4d5e2","target_id":"b1e9d90908a2a5e3d545ca0cf2c86769","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-268","gmt_create":"2026-06-30T18:39:29.627017+08:00","gmt_modified":"2026-06-30T18:39:29.627017+08:00"},{"id":3314,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"aae8712924efab58e019d0c963576781","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#96-139","gmt_create":"2026-06-30T18:39:29.627222+08:00","gmt_modified":"2026-06-30T18:39:29.627222+08:00"},{"id":3315,"source_id":"71a563f23b46da0255a6400402bbfa05","target_id":"aae8712924efab58e019d0c963576781","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 96-139","gmt_create":"2026-06-30T18:39:29.627488+08:00","gmt_modified":"2026-06-30T18:39:29.627488+08:00"},{"id":3316,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"fb9daf52780951bc4b93f14b1fcfa8f1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#96-139","gmt_create":"2026-06-30T18:39:29.627693+08:00","gmt_modified":"2026-06-30T18:39:29.627693+08:00"},{"id":3317,"source_id":"ea6e178b2f0bdcefe2ae8800166453d5","target_id":"fb9daf52780951bc4b93f14b1fcfa8f1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 96-139","gmt_create":"2026-06-30T18:39:29.627822+08:00","gmt_modified":"2026-06-30T18:39:29.627822+08:00"},{"id":3318,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"23aa29b61d1387fca0530a0a1e57e27f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#1-292","gmt_create":"2026-06-30T18:39:29.628032+08:00","gmt_modified":"2026-06-30T18:39:29.628032+08:00"},{"id":3319,"source_id":"ba84445ce5118798ce7d0da4ecb4d5e2","target_id":"23aa29b61d1387fca0530a0a1e57e27f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-292","gmt_create":"2026-06-30T18:39:29.628183+08:00","gmt_modified":"2026-06-30T18:39:29.628183+08:00"},{"id":3320,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"e6f541a0af8390b3610d1e380a8d3236","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Ota.js#4-94","gmt_create":"2026-06-30T18:39:29.628646+08:00","gmt_modified":"2026-06-30T18:39:29.628646+08:00"},{"id":3321,"source_id":"fc2d0cc85e5f2565c3105cbe0584903a","target_id":"e6f541a0af8390b3610d1e380a8d3236","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 4-94","gmt_create":"2026-06-30T18:39:29.628773+08:00","gmt_modified":"2026-06-30T18:39:29.628773+08:00"},{"id":3322,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"4aad83e3e76ccc16e5b91d801ab1b278","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/BlackList.js#5-36","gmt_create":"2026-06-30T18:39:29.628938+08:00","gmt_modified":"2026-06-30T18:39:29.628938+08:00"},{"id":3323,"source_id":"a84967d9d3088fba02de385738e7ca27","target_id":"4aad83e3e76ccc16e5b91d801ab1b278","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 5-36","gmt_create":"2026-06-30T18:39:29.629078+08:00","gmt_modified":"2026-06-30T18:39:29.629078+08:00"},{"id":3324,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"54c99704b8bcabdfe63adda9c4392452","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/OtaTargetDevice.js#5-37","gmt_create":"2026-06-30T18:39:29.62924+08:00","gmt_modified":"2026-06-30T18:39:29.62924+08:00"},{"id":3325,"source_id":"4ca379f147f6f1da710371999e08dc24","target_id":"54c99704b8bcabdfe63adda9c4392452","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 5-37","gmt_create":"2026-06-30T18:39:29.629354+08:00","gmt_modified":"2026-06-30T18:39:29.629354+08:00"},{"id":3326,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"b7c66d1bc7887a6132dc3acbf6421a5d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Ota.js#1-97","gmt_create":"2026-06-30T18:39:29.629506+08:00","gmt_modified":"2026-06-30T18:39:29.629506+08:00"},{"id":3327,"source_id":"fc2d0cc85e5f2565c3105cbe0584903a","target_id":"b7c66d1bc7887a6132dc3acbf6421a5d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-97","gmt_create":"2026-06-30T18:39:29.629647+08:00","gmt_modified":"2026-06-30T18:39:29.629647+08:00"},{"id":3328,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"058bc5c3e018c854b5cf42905abd45d7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/BlackList.js#1-36","gmt_create":"2026-06-30T18:39:29.629815+08:00","gmt_modified":"2026-06-30T18:39:29.629815+08:00"},{"id":3329,"source_id":"a84967d9d3088fba02de385738e7ca27","target_id":"058bc5c3e018c854b5cf42905abd45d7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-36","gmt_create":"2026-06-30T18:39:29.629939+08:00","gmt_modified":"2026-06-30T18:39:29.629939+08:00"},{"id":3330,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"3830639d0b7444aa8a1cf3c80d4eef7e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/OtaTargetDevice.js#1-37","gmt_create":"2026-06-30T18:39:29.630118+08:00","gmt_modified":"2026-06-30T18:39:29.630118+08:00"},{"id":3331,"source_id":"4ca379f147f6f1da710371999e08dc24","target_id":"3830639d0b7444aa8a1cf3c80d4eef7e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-37","gmt_create":"2026-06-30T18:39:29.633252+08:00","gmt_modified":"2026-06-30T18:39:29.633252+08:00"},{"id":3332,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"be497152bcedca75299e4c2521c11859","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/otaStorage.js#46-103","gmt_create":"2026-06-30T18:39:29.633431+08:00","gmt_modified":"2026-06-30T18:39:29.633431+08:00"},{"id":3333,"source_id":"a15b46bcf0be7bfbc82e57adca5be630","target_id":"be497152bcedca75299e4c2521c11859","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 46-103","gmt_create":"2026-06-30T18:39:29.633531+08:00","gmt_modified":"2026-06-30T18:39:29.633531+08:00"},{"id":3334,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"af76fcd4277eeb577f573e21de923bbf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/config/env.js#1-13","gmt_create":"2026-06-30T18:39:29.633724+08:00","gmt_modified":"2026-06-30T18:39:29.633724+08:00"},{"id":3335,"source_id":"2a04b070bd67fc5059bb504232687d64","target_id":"af76fcd4277eeb577f573e21de923bbf","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-13","gmt_create":"2026-06-30T18:39:29.633843+08:00","gmt_modified":"2026-06-30T18:39:29.633843+08:00"},{"id":3336,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"b8c21c93e526039c96f1df526ebdcafe","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/otaStorage.js#1-113","gmt_create":"2026-06-30T18:39:29.633998+08:00","gmt_modified":"2026-06-30T18:39:29.633998+08:00"},{"id":3337,"source_id":"a15b46bcf0be7bfbc82e57adca5be630","target_id":"b8c21c93e526039c96f1df526ebdcafe","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-113","gmt_create":"2026-06-30T18:39:29.634119+08:00","gmt_modified":"2026-06-30T18:39:29.634119+08:00"},{"id":3338,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"424dfd038ca84be6195b08d7032a1235","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#68-102","gmt_create":"2026-06-30T18:39:29.634371+08:00","gmt_modified":"2026-06-30T18:39:29.634371+08:00"},{"id":3339,"source_id":"ba84445ce5118798ce7d0da4ecb4d5e2","target_id":"424dfd038ca84be6195b08d7032a1235","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 68-102","gmt_create":"2026-06-30T18:39:29.63449+08:00","gmt_modified":"2026-06-30T18:39:29.63449+08:00"},{"id":3340,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"2fc67d9140f7c12759a5188eb6f9b204","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#305-338","gmt_create":"2026-06-30T18:39:29.634627+08:00","gmt_modified":"2026-06-30T18:39:29.634627+08:00"},{"id":3341,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"2fc67d9140f7c12759a5188eb6f9b204","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 305-338","gmt_create":"2026-06-30T18:39:29.634747+08:00","gmt_modified":"2026-06-30T18:39:29.634747+08:00"},{"id":3342,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"e3a6003c52bf8b8487bb1b8709da6b4b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/utils/response.js#1-25","gmt_create":"2026-06-30T18:39:29.63491+08:00","gmt_modified":"2026-06-30T18:39:29.63491+08:00"},{"id":3343,"source_id":"30f836e18a6bf9cbcf650e5884375a93","target_id":"e3a6003c52bf8b8487bb1b8709da6b4b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-25","gmt_create":"2026-06-30T18:39:29.635031+08:00","gmt_modified":"2026-06-30T18:39:29.635031+08:00"},{"id":3344,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"cabe1728acba4dab25a86b5788412e46","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#25-66","gmt_create":"2026-06-30T18:39:29.635187+08:00","gmt_modified":"2026-06-30T18:39:29.635187+08:00"},{"id":3345,"source_id":"ba84445ce5118798ce7d0da4ecb4d5e2","target_id":"cabe1728acba4dab25a86b5788412e46","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 25-66","gmt_create":"2026-06-30T18:39:29.635325+08:00","gmt_modified":"2026-06-30T18:39:29.635325+08:00"},{"id":3346,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"45f0756fae3928b75883500a5006f7f0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#645-734","gmt_create":"2026-06-30T18:39:29.635489+08:00","gmt_modified":"2026-06-30T18:39:29.635489+08:00"},{"id":3347,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"45f0756fae3928b75883500a5006f7f0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 645-734","gmt_create":"2026-06-30T18:39:29.635587+08:00","gmt_modified":"2026-06-30T18:39:29.635587+08:00"},{"id":3348,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"f2e521eddcaa25c62a309d5b0af997fa","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#96-204","gmt_create":"2026-06-30T18:39:29.635812+08:00","gmt_modified":"2026-06-30T18:39:29.635812+08:00"},{"id":3349,"source_id":"71a563f23b46da0255a6400402bbfa05","target_id":"f2e521eddcaa25c62a309d5b0af997fa","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 96-204","gmt_create":"2026-06-30T18:39:29.635929+08:00","gmt_modified":"2026-06-30T18:39:29.635929+08:00"},{"id":3350,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"6b7ea701575cf98b6ee3431f68ad5649","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#736-817","gmt_create":"2026-06-30T18:39:29.636087+08:00","gmt_modified":"2026-06-30T18:39:29.636087+08:00"},{"id":3351,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"6b7ea701575cf98b6ee3431f68ad5649","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 736-817","gmt_create":"2026-06-30T18:39:29.636205+08:00","gmt_modified":"2026-06-30T18:39:29.636205+08:00"},{"id":3352,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"506ecfb839ed7fb3f4199ade7e4b6a64","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#96-208","gmt_create":"2026-06-30T18:39:29.636418+08:00","gmt_modified":"2026-06-30T18:39:29.636418+08:00"},{"id":3353,"source_id":"ea6e178b2f0bdcefe2ae8800166453d5","target_id":"506ecfb839ed7fb3f4199ade7e4b6a64","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 96-208","gmt_create":"2026-06-30T18:39:29.636531+08:00","gmt_modified":"2026-06-30T18:39:29.636531+08:00"},{"id":3354,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"7a5ae98472bdc4806472d50e6b88c997","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/utils/request.js#1-72","gmt_create":"2026-06-30T18:39:29.636691+08:00","gmt_modified":"2026-06-30T18:39:29.636691+08:00"},{"id":3355,"source_id":"34fcf7aeb55a9c0224c554fc48545063","target_id":"7a5ae98472bdc4806472d50e6b88c997","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-72","gmt_create":"2026-06-30T18:39:29.636799+08:00","gmt_modified":"2026-06-30T18:39:29.6368+08:00"},{"id":3356,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"69c930f997042246d4e17369ede6f826","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/router/index.js#1-91","gmt_create":"2026-06-30T18:39:29.636927+08:00","gmt_modified":"2026-06-30T18:39:29.636927+08:00"},{"id":3357,"source_id":"08b8d17e3c09b326687a7bca6789507a","target_id":"69c930f997042246d4e17369ede6f826","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-91","gmt_create":"2026-06-30T18:39:29.637036+08:00","gmt_modified":"2026-06-30T18:39:29.637036+08:00"},{"id":3358,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"6b61c60063d41432a3cc1ac4d1699181","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/utils/request.js#44-69","gmt_create":"2026-06-30T18:39:29.638051+08:00","gmt_modified":"2026-06-30T18:39:29.638051+08:00"},{"id":3359,"source_id":"34fcf7aeb55a9c0224c554fc48545063","target_id":"6b61c60063d41432a3cc1ac4d1699181","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 44-69","gmt_create":"2026-06-30T18:39:29.638209+08:00","gmt_modified":"2026-06-30T18:39:29.638209+08:00"},{"id":3360,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"752be7590bb954b39e5a8f41ce8811eb","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#159-183","gmt_create":"2026-06-30T18:39:29.638353+08:00","gmt_modified":"2026-06-30T18:39:29.638353+08:00"},{"id":3361,"source_id":"71a563f23b46da0255a6400402bbfa05","target_id":"752be7590bb954b39e5a8f41ce8811eb","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 159-183","gmt_create":"2026-06-30T18:39:29.638443+08:00","gmt_modified":"2026-06-30T18:39:29.638443+08:00"},{"id":3362,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"4daa6ac2900ccb8c9fd7142d0ecdd298","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#142-208","gmt_create":"2026-06-30T18:39:29.638592+08:00","gmt_modified":"2026-06-30T18:39:29.638592+08:00"},{"id":3363,"source_id":"ea6e178b2f0bdcefe2ae8800166453d5","target_id":"4daa6ac2900ccb8c9fd7142d0ecdd298","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 142-208","gmt_create":"2026-06-30T18:39:29.638702+08:00","gmt_modified":"2026-06-30T18:39:29.638702+08:00"},{"id":3364,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"e22545d86c6efa26c57aea0e355a57f6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: DEPLOY.md#226-256","gmt_create":"2026-06-30T18:39:29.638841+08:00","gmt_modified":"2026-06-30T18:39:29.638841+08:00"},{"id":3365,"source_id":"0c25a991664c34b2b36ce3aeed80f4da","target_id":"e22545d86c6efa26c57aea0e355a57f6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 226-256","gmt_create":"2026-06-30T18:39:29.638935+08:00","gmt_modified":"2026-06-30T18:39:29.638935+08:00"},{"id":3366,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"fc2d0cc85e5f2565c3105cbe0584903a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/Ota.js","gmt_create":"2026-06-30T18:39:56.530513+08:00","gmt_modified":"2026-06-30T18:39:56.530513+08:00"},{"id":3367,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"a84967d9d3088fba02de385738e7ca27","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/BlackList.js","gmt_create":"2026-06-30T18:39:56.530752+08:00","gmt_modified":"2026-06-30T18:39:56.530752+08:00"},{"id":3368,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"4ca379f147f6f1da710371999e08dc24","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/OtaTargetDevice.js","gmt_create":"2026-06-30T18:39:56.530901+08:00","gmt_modified":"2026-06-30T18:39:56.530901+08:00"},{"id":3369,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"ba84445ce5118798ce7d0da4ecb4d5e2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/ota.js","gmt_create":"2026-06-30T18:39:56.531051+08:00","gmt_modified":"2026-06-30T18:39:56.531051+08:00"},{"id":3370,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"71a563f23b46da0255a6400402bbfa05","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/blacklist.js","gmt_create":"2026-06-30T18:39:56.531158+08:00","gmt_modified":"2026-06-30T18:39:56.531158+08:00"},{"id":3371,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"ea6e178b2f0bdcefe2ae8800166453d5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/otaTargetDevice.js","gmt_create":"2026-06-30T18:39:56.531315+08:00","gmt_modified":"2026-06-30T18:39:56.531315+08:00"},{"id":3372,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"a15b46bcf0be7bfbc82e57adca5be630","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/otaStorage.js","gmt_create":"2026-06-30T18:39:56.531436+08:00","gmt_modified":"2026-06-30T18:39:56.531436+08:00"},{"id":3373,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"99aa92df5b8c8412119e9b3cb015f8c4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/validators/ota.js","gmt_create":"2026-06-30T18:39:56.531564+08:00","gmt_modified":"2026-06-30T18:39:56.531564+08:00"},{"id":3374,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"0d26d3961441eb708b69c96f1ed1f7b7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/validators/blacklist.js","gmt_create":"2026-06-30T18:39:56.531677+08:00","gmt_modified":"2026-06-30T18:39:56.531677+08:00"},{"id":3375,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"8a4e619bfb6be9c463274f96a2dcb5a0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/validators/otaTargetDevice.js","gmt_create":"2026-06-30T18:39:56.531828+08:00","gmt_modified":"2026-06-30T18:39:56.531828+08:00"},{"id":3376,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"30f836e18a6bf9cbcf650e5884375a93","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/utils/response.js","gmt_create":"2026-06-30T18:39:56.531932+08:00","gmt_modified":"2026-06-30T18:39:56.531932+08:00"},{"id":3377,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"2a04b070bd67fc5059bb504232687d64","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/config/env.js","gmt_create":"2026-06-30T18:39:56.53205+08:00","gmt_modified":"2026-06-30T18:39:56.53205+08:00"},{"id":3378,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"cb4575c8c79b7b9f6ffdac43c2369b95","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/config/database.js","gmt_create":"2026-06-30T18:39:56.532162+08:00","gmt_modified":"2026-06-30T18:39:56.532162+08:00"},{"id":3379,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"4bb9a8c7ac3763db0746ff90788525b6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/ota/index.vue","gmt_create":"2026-06-30T18:39:56.532265+08:00","gmt_modified":"2026-06-30T18:39:56.532265+08:00"},{"id":3380,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"0eb021ef791f4679788fe98caea23e31","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/blacklist/index.vue","gmt_create":"2026-06-30T18:39:56.532386+08:00","gmt_modified":"2026-06-30T18:39:56.532386+08:00"},{"id":3381,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"cc4227daf4f2b37377be96fcc492e509","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/ota-target-device/index.vue","gmt_create":"2026-06-30T18:39:56.532524+08:00","gmt_modified":"2026-06-30T18:39:56.532524+08:00"},{"id":3382,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"29e96dbf4d3d8f6e116ec620bbf504ad","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/ota.js","gmt_create":"2026-06-30T18:39:56.53265+08:00","gmt_modified":"2026-06-30T18:39:56.53265+08:00"},{"id":3383,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"5ceb781f55bf90055f3005880d06ee2a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/blacklist.js","gmt_create":"2026-06-30T18:39:56.532804+08:00","gmt_modified":"2026-06-30T18:39:56.532804+08:00"},{"id":3384,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"5973b5959029669ade01898821960785","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/otaTargetDevice.js","gmt_create":"2026-06-30T18:39:56.532906+08:00","gmt_modified":"2026-06-30T18:39:56.532906+08:00"},{"id":3385,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"23aa29b61d1387fca0530a0a1e57e27f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#1-292","gmt_create":"2026-06-30T18:39:56.53307+08:00","gmt_modified":"2026-06-30T18:39:56.53307+08:00"},{"id":3386,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"72de55f3f022487777e9ad301c9d942b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#1-223","gmt_create":"2026-06-30T18:39:56.533275+08:00","gmt_modified":"2026-06-30T18:39:56.533275+08:00"},{"id":3387,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"ba9810388706ac5ffb0156f74ada8b88","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#1-248","gmt_create":"2026-06-30T18:39:56.533479+08:00","gmt_modified":"2026-06-30T18:39:56.533479+08:00"},{"id":3388,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"b7c66d1bc7887a6132dc3acbf6421a5d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Ota.js#1-97","gmt_create":"2026-06-30T18:39:56.533642+08:00","gmt_modified":"2026-06-30T18:39:56.533642+08:00"},{"id":3389,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"05900505c40339d0cc93870281600479","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/BlackList.js#1-37","gmt_create":"2026-06-30T18:39:56.533836+08:00","gmt_modified":"2026-06-30T18:39:56.533836+08:00"},{"id":3390,"source_id":"a84967d9d3088fba02de385738e7ca27","target_id":"05900505c40339d0cc93870281600479","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-37","gmt_create":"2026-06-30T18:39:56.533939+08:00","gmt_modified":"2026-06-30T18:39:56.533939+08:00"},{"id":3391,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"921d509d2d71df1e2bace1390640482a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/OtaTargetDevice.js#1-38","gmt_create":"2026-06-30T18:39:56.534096+08:00","gmt_modified":"2026-06-30T18:39:56.534096+08:00"},{"id":3392,"source_id":"4ca379f147f6f1da710371999e08dc24","target_id":"921d509d2d71df1e2bace1390640482a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-38","gmt_create":"2026-06-30T18:39:56.534213+08:00","gmt_modified":"2026-06-30T18:39:56.534213+08:00"},{"id":3393,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"149a41cdd5807ad4f666e9eb2463fa68","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#1-628","gmt_create":"2026-06-30T18:39:56.534352+08:00","gmt_modified":"2026-06-30T18:39:56.534352+08:00"},{"id":3394,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"149a41cdd5807ad4f666e9eb2463fa68","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-628","gmt_create":"2026-06-30T18:39:56.534456+08:00","gmt_modified":"2026-06-30T18:39:56.534456+08:00"},{"id":3395,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"771e33c2a04ba5eb1a504cf7aa1e9c36","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/blacklist/index.vue#1-381","gmt_create":"2026-06-30T18:39:56.53458+08:00","gmt_modified":"2026-06-30T18:39:56.53458+08:00"},{"id":3396,"source_id":"0eb021ef791f4679788fe98caea23e31","target_id":"771e33c2a04ba5eb1a504cf7aa1e9c36","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-381","gmt_create":"2026-06-30T18:39:56.534732+08:00","gmt_modified":"2026-06-30T18:39:56.534732+08:00"},{"id":3397,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"f23242497ee4dc9ed490a1d09d0d3d91","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota-target-device/index.vue#1-386","gmt_create":"2026-06-30T18:39:56.534886+08:00","gmt_modified":"2026-06-30T18:39:56.534886+08:00"},{"id":3398,"source_id":"cc4227daf4f2b37377be96fcc492e509","target_id":"f23242497ee4dc9ed490a1d09d0d3d91","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-386","gmt_create":"2026-06-30T18:39:56.535014+08:00","gmt_modified":"2026-06-30T18:39:56.535014+08:00"},{"id":3399,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"b8c21c93e526039c96f1df526ebdcafe","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/otaStorage.js#1-113","gmt_create":"2026-06-30T18:39:56.535896+08:00","gmt_modified":"2026-06-30T18:39:56.535896+08:00"},{"id":3400,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"0c0ca507fcaf2164af19adf77eaf72e8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/ota.js#1-36","gmt_create":"2026-06-30T18:39:56.53607+08:00","gmt_modified":"2026-06-30T18:39:56.53607+08:00"},{"id":3401,"source_id":"99aa92df5b8c8412119e9b3cb015f8c4","target_id":"0c0ca507fcaf2164af19adf77eaf72e8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-36","gmt_create":"2026-06-30T18:39:56.536174+08:00","gmt_modified":"2026-06-30T18:39:56.536174+08:00"},{"id":3402,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"420851439a300cff8b7fa324589ce87a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/blacklist.js#1-14","gmt_create":"2026-06-30T18:39:56.536294+08:00","gmt_modified":"2026-06-30T18:39:56.536294+08:00"},{"id":3403,"source_id":"0d26d3961441eb708b69c96f1ed1f7b7","target_id":"420851439a300cff8b7fa324589ce87a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-14","gmt_create":"2026-06-30T18:39:56.536388+08:00","gmt_modified":"2026-06-30T18:39:56.536388+08:00"},{"id":3404,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"e92ce9787ed66ea4dd0821e0c8f28d8a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/otaTargetDevice.js#1-14","gmt_create":"2026-06-30T18:39:56.536524+08:00","gmt_modified":"2026-06-30T18:39:56.536524+08:00"},{"id":3405,"source_id":"8a4e619bfb6be9c463274f96a2dcb5a0","target_id":"e92ce9787ed66ea4dd0821e0c8f28d8a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-14","gmt_create":"2026-06-30T18:39:56.536607+08:00","gmt_modified":"2026-06-30T18:39:56.536607+08:00"},{"id":3406,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"0696a947e8ffd03fd403809f77673c55","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#24-66","gmt_create":"2026-06-30T18:39:56.536822+08:00","gmt_modified":"2026-06-30T18:39:56.536822+08:00"},{"id":3407,"source_id":"ba84445ce5118798ce7d0da4ecb4d5e2","target_id":"0696a947e8ffd03fd403809f77673c55","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-66","gmt_create":"2026-06-30T18:39:56.536933+08:00","gmt_modified":"2026-06-30T18:39:56.536933+08:00"},{"id":3408,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"424dfd038ca84be6195b08d7032a1235","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#68-102","gmt_create":"2026-06-30T18:39:56.537069+08:00","gmt_modified":"2026-06-30T18:39:56.53707+08:00"},{"id":3409,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"be497152bcedca75299e4c2521c11859","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/otaStorage.js#46-103","gmt_create":"2026-06-30T18:39:56.537221+08:00","gmt_modified":"2026-06-30T18:39:56.537221+08:00"},{"id":3410,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"0f5328f2be7159ab2f533662f8992b10","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#384-412","gmt_create":"2026-06-30T18:39:56.537364+08:00","gmt_modified":"2026-06-30T18:39:56.537364+08:00"},{"id":3411,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"0f5328f2be7159ab2f533662f8992b10","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 384-412","gmt_create":"2026-06-30T18:39:56.537465+08:00","gmt_modified":"2026-06-30T18:39:56.537465+08:00"},{"id":3412,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"e6f541a0af8390b3610d1e380a8d3236","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Ota.js#4-94","gmt_create":"2026-06-30T18:39:56.537604+08:00","gmt_modified":"2026-06-30T18:39:56.537604+08:00"},{"id":3413,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"b6918b1988464553531aec983ea27b7d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/BlackList.js#5-32","gmt_create":"2026-06-30T18:39:56.537774+08:00","gmt_modified":"2026-06-30T18:39:56.537774+08:00"},{"id":3414,"source_id":"a84967d9d3088fba02de385738e7ca27","target_id":"b6918b1988464553531aec983ea27b7d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 5-32","gmt_create":"2026-06-30T18:39:56.537912+08:00","gmt_modified":"2026-06-30T18:39:56.537912+08:00"},{"id":3415,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"59e0c0eb304ea8fbb7145bc038c8fdf6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/OtaTargetDevice.js#5-33","gmt_create":"2026-06-30T18:39:56.538023+08:00","gmt_modified":"2026-06-30T18:39:56.538023+08:00"},{"id":3416,"source_id":"4ca379f147f6f1da710371999e08dc24","target_id":"59e0c0eb304ea8fbb7145bc038c8fdf6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 5-33","gmt_create":"2026-06-30T18:39:56.538117+08:00","gmt_modified":"2026-06-30T18:39:56.538117+08:00"},{"id":3417,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"0991eb53c8fe806cf46decab5e748f75","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/otaStorage.js#72-103","gmt_create":"2026-06-30T18:39:56.538566+08:00","gmt_modified":"2026-06-30T18:39:56.538566+08:00"},{"id":3418,"source_id":"a15b46bcf0be7bfbc82e57adca5be630","target_id":"0991eb53c8fe806cf46decab5e748f75","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 72-103","gmt_create":"2026-06-30T18:39:56.538694+08:00","gmt_modified":"2026-06-30T18:39:56.538694+08:00"},{"id":3419,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"a826e77f133d3db11e600f30b88f4e9a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/ota.js#3-35","gmt_create":"2026-06-30T18:39:56.539109+08:00","gmt_modified":"2026-06-30T18:39:56.539109+08:00"},{"id":3420,"source_id":"99aa92df5b8c8412119e9b3cb015f8c4","target_id":"a826e77f133d3db11e600f30b88f4e9a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 3-35","gmt_create":"2026-06-30T18:39:56.53922+08:00","gmt_modified":"2026-06-30T18:39:56.53922+08:00"},{"id":3421,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"4a33d32c1578fd612d900aa17246d8c2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/blacklist.js#3-11","gmt_create":"2026-06-30T18:39:56.539329+08:00","gmt_modified":"2026-06-30T18:39:56.539329+08:00"},{"id":3422,"source_id":"0d26d3961441eb708b69c96f1ed1f7b7","target_id":"4a33d32c1578fd612d900aa17246d8c2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 3-11","gmt_create":"2026-06-30T18:39:56.539438+08:00","gmt_modified":"2026-06-30T18:39:56.539438+08:00"},{"id":3423,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"4660c7ce6daeb3f765d39856dcf95f6f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/otaTargetDevice.js#3-11","gmt_create":"2026-06-30T18:39:56.539551+08:00","gmt_modified":"2026-06-30T18:39:56.539551+08:00"},{"id":3424,"source_id":"8a4e619bfb6be9c463274f96a2dcb5a0","target_id":"4660c7ce6daeb3f765d39856dcf95f6f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 3-11","gmt_create":"2026-06-30T18:39:56.53963+08:00","gmt_modified":"2026-06-30T18:39:56.53963+08:00"},{"id":3425,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"e3a6003c52bf8b8487bb1b8709da6b4b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/utils/response.js#1-25","gmt_create":"2026-06-30T18:39:56.539736+08:00","gmt_modified":"2026-06-30T18:39:56.539736+08:00"},{"id":3426,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"7467dc2e2d22c93c63fa6342b2e08541","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#420-579","gmt_create":"2026-06-30T18:39:56.540181+08:00","gmt_modified":"2026-06-30T18:39:56.540181+08:00"},{"id":3427,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"7467dc2e2d22c93c63fa6342b2e08541","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 420-579","gmt_create":"2026-06-30T18:39:56.540259+08:00","gmt_modified":"2026-06-30T18:39:56.540259+08:00"},{"id":3428,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"4b5baf2b8dcd8468722cd31868c794b2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#645-683","gmt_create":"2026-06-30T18:39:56.540384+08:00","gmt_modified":"2026-06-30T18:39:56.540384+08:00"},{"id":3429,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"4b5baf2b8dcd8468722cd31868c794b2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 645-683","gmt_create":"2026-06-30T18:39:56.540462+08:00","gmt_modified":"2026-06-30T18:39:56.540462+08:00"},{"id":3430,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"3e935f654a28968186e9260f2c5035c7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/ota.js#1-68","gmt_create":"2026-06-30T18:39:56.540837+08:00","gmt_modified":"2026-06-30T18:39:56.540837+08:00"},{"id":3431,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"edbb69e747bbcd76dd1bc3a361ebf7c0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/blacklist.js#1-57","gmt_create":"2026-06-30T18:39:56.540981+08:00","gmt_modified":"2026-06-30T18:39:56.540981+08:00"},{"id":3432,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"4e817a7f3bd90bb9e57c6a2e9009380f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/otaTargetDevice.js#1-57","gmt_create":"2026-06-30T18:39:56.541105+08:00","gmt_modified":"2026-06-30T18:39:56.541105+08:00"},{"id":3433,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"20e79ab592f63eb9d23c0d563d5f5202","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#16-71","gmt_create":"2026-06-30T18:39:56.541459+08:00","gmt_modified":"2026-06-30T18:39:56.541459+08:00"},{"id":3434,"source_id":"71a563f23b46da0255a6400402bbfa05","target_id":"20e79ab592f63eb9d23c0d563d5f5202","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-71","gmt_create":"2026-06-30T18:39:56.541542+08:00","gmt_modified":"2026-06-30T18:39:56.541542+08:00"},{"id":3435,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"07afcaa71195b3d86386dcde14973a8d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#96-131","gmt_create":"2026-06-30T18:39:56.541674+08:00","gmt_modified":"2026-06-30T18:39:56.541674+08:00"},{"id":3436,"source_id":"71a563f23b46da0255a6400402bbfa05","target_id":"07afcaa71195b3d86386dcde14973a8d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 96-131","gmt_create":"2026-06-30T18:39:56.541757+08:00","gmt_modified":"2026-06-30T18:39:56.541757+08:00"},{"id":3437,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"2a5364613dbf0723f2e2a64affabb065","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/blacklist/index.vue#144-346","gmt_create":"2026-06-30T18:39:56.543701+08:00","gmt_modified":"2026-06-30T18:39:56.543701+08:00"},{"id":3438,"source_id":"0eb021ef791f4679788fe98caea23e31","target_id":"2a5364613dbf0723f2e2a64affabb065","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 144-346","gmt_create":"2026-06-30T18:39:56.54385+08:00","gmt_modified":"2026-06-30T18:39:56.54385+08:00"},{"id":3439,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"12ad7a8b54f39c0717843220f341d59e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#16-71","gmt_create":"2026-06-30T18:39:56.544322+08:00","gmt_modified":"2026-06-30T18:39:56.544322+08:00"},{"id":3440,"source_id":"ea6e178b2f0bdcefe2ae8800166453d5","target_id":"12ad7a8b54f39c0717843220f341d59e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-71","gmt_create":"2026-06-30T18:39:56.544408+08:00","gmt_modified":"2026-06-30T18:39:56.544408+08:00"},{"id":3441,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"fb9daf52780951bc4b93f14b1fcfa8f1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#96-139","gmt_create":"2026-06-30T18:39:56.544514+08:00","gmt_modified":"2026-06-30T18:39:56.544514+08:00"},{"id":3442,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"585261a6626a815d8f5f83b91a086eb9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota-target-device/index.vue#144-351","gmt_create":"2026-06-30T18:39:56.544644+08:00","gmt_modified":"2026-06-30T18:39:56.544644+08:00"},{"id":3443,"source_id":"cc4227daf4f2b37377be96fcc492e509","target_id":"585261a6626a815d8f5f83b91a086eb9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 144-351","gmt_create":"2026-06-30T18:39:56.54475+08:00","gmt_modified":"2026-06-30T18:39:56.54475+08:00"},{"id":3444,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"e6564dcd4fbbe8e0f9673967ec4ce3a7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/package.json","gmt_create":"2026-06-30T18:39:56.545256+08:00","gmt_modified":"2026-06-30T18:39:56.545256+08:00"},{"id":3445,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"2a0437737a8daf4655f00caae7549a06","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/package.json#11-24","gmt_create":"2026-06-30T18:39:56.545352+08:00","gmt_modified":"2026-06-30T18:39:56.545352+08:00"},{"id":3446,"source_id":"e6564dcd4fbbe8e0f9673967ec4ce3a7","target_id":"2a0437737a8daf4655f00caae7549a06","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-24","gmt_create":"2026-06-30T18:39:56.545472+08:00","gmt_modified":"2026-06-30T18:39:56.545472+08:00"},{"id":3447,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"f0cfbce84fd69ea625e215367d5da707","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/package.json#1-29","gmt_create":"2026-06-30T18:39:56.545601+08:00","gmt_modified":"2026-06-30T18:39:56.545601+08:00"},{"id":3448,"source_id":"e6564dcd4fbbe8e0f9673967ec4ce3a7","target_id":"f0cfbce84fd69ea625e215367d5da707","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-29","gmt_create":"2026-06-30T18:39:56.545688+08:00","gmt_modified":"2026-06-30T18:39:56.545688+08:00"},{"id":3449,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"af76fcd4277eeb577f573e21de923bbf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/config/env.js#1-13","gmt_create":"2026-06-30T18:39:56.545882+08:00","gmt_modified":"2026-06-30T18:39:56.545882+08:00"},{"id":3450,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"fad5c52b0517044faace96133c6e570c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#174-181","gmt_create":"2026-06-30T18:39:56.546044+08:00","gmt_modified":"2026-06-30T18:39:56.546044+08:00"},{"id":3451,"source_id":"ba84445ce5118798ce7d0da4ecb4d5e2","target_id":"fad5c52b0517044faace96133c6e570c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 174-181","gmt_create":"2026-06-30T18:39:56.546129+08:00","gmt_modified":"2026-06-30T18:39:56.546129+08:00"},{"id":3452,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"f62834891fb8675fbb1dcb6654b186e9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/otaStorage.js#95-98","gmt_create":"2026-06-30T18:39:56.546273+08:00","gmt_modified":"2026-06-30T18:39:56.546273+08:00"},{"id":3453,"source_id":"a15b46bcf0be7bfbc82e57adca5be630","target_id":"f62834891fb8675fbb1dcb6654b186e9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 95-98","gmt_create":"2026-06-30T18:39:56.546352+08:00","gmt_modified":"2026-06-30T18:39:56.546353+08:00"},{"id":3454,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"0c387969b601239a31cb0c672ef3c116","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#108-112","gmt_create":"2026-06-30T18:39:56.546458+08:00","gmt_modified":"2026-06-30T18:39:56.546458+08:00"},{"id":3455,"source_id":"71a563f23b46da0255a6400402bbfa05","target_id":"0c387969b601239a31cb0c672ef3c116","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 108-112","gmt_create":"2026-06-30T18:39:56.546538+08:00","gmt_modified":"2026-06-30T18:39:56.546538+08:00"},{"id":3456,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"406e308cbdb4112d67f61a82a8118e9f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#108-112","gmt_create":"2026-06-30T18:39:56.546662+08:00","gmt_modified":"2026-06-30T18:39:56.546662+08:00"},{"id":3457,"source_id":"ea6e178b2f0bdcefe2ae8800166453d5","target_id":"406e308cbdb4112d67f61a82a8118e9f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 108-112","gmt_create":"2026-06-30T18:39:56.546751+08:00","gmt_modified":"2026-06-30T18:39:56.546751+08:00"},{"id":3458,"source_id":"d4cb0c3c-97e9-449f-8918-f1c01e7e3561","target_id":"da7627b0-17b7-42c7-a029-e357bc889416","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: d4cb0c3c-97e9-449f-8918-f1c01e7e3561 -\u003e da7627b0-17b7-42c7-a029-e357bc889416","gmt_create":"2026-06-30T18:39:57.127914+08:00","gmt_modified":"2026-06-30T18:39:57.127915+08:00"},{"id":3459,"source_id":"f0978b42-6f98-470e-922f-22dec2fac24d","target_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f0978b42-6f98-470e-922f-22dec2fac24d -\u003e 7d8f2ef6-290d-4952-b59c-a1d95af0d438","gmt_create":"2026-06-30T18:39:57.129556+08:00","gmt_modified":"2026-06-30T18:39:57.129556+08:00"}],"source_files":[{"id":"fc2d0cc85e5f2565c3105cbe0584903a","path":"backend/src/models/Ota.js","filename":"Ota.js","gmt_create":"2026-06-30T18:39:29.607957+08:00","gmt_modified":"2026-06-30T18:39:29.607957+08:00"},{"id":"ba84445ce5118798ce7d0da4ecb4d5e2","path":"backend/src/routes/ota.js","filename":"ota.js","gmt_create":"2026-06-30T18:39:29.608112+08:00","gmt_modified":"2026-06-30T18:39:29.608112+08:00"},{"id":"a15b46bcf0be7bfbc82e57adca5be630","path":"backend/src/services/otaStorage.js","filename":"otaStorage.js","gmt_create":"2026-06-30T18:39:29.608175+08:00","gmt_modified":"2026-06-30T18:39:29.608175+08:00"},{"id":"4bb9a8c7ac3763db0746ff90788525b6","path":"frontend/src/views/ota/index.vue","filename":"index.vue","gmt_create":"2026-06-30T18:39:29.608241+08:00","gmt_modified":"2026-06-30T18:39:29.608241+08:00"},{"id":"29e96dbf4d3d8f6e116ec620bbf504ad","path":"frontend/src/api/ota.js","filename":"ota.js","gmt_create":"2026-06-30T18:39:29.608321+08:00","gmt_modified":"2026-06-30T18:39:29.608321+08:00"},{"id":"5ceb781f55bf90055f3005880d06ee2a","path":"frontend/src/api/blacklist.js","filename":"blacklist.js","gmt_create":"2026-06-30T18:39:29.608385+08:00","gmt_modified":"2026-06-30T18:39:29.608385+08:00"},{"id":"5973b5959029669ade01898821960785","path":"frontend/src/api/otaTargetDevice.js","filename":"otaTargetDevice.js","gmt_create":"2026-06-30T18:39:29.608452+08:00","gmt_modified":"2026-06-30T18:39:29.608452+08:00"},{"id":"a84967d9d3088fba02de385738e7ca27","path":"backend/src/models/BlackList.js","filename":"BlackList.js","gmt_create":"2026-06-30T18:39:29.60851+08:00","gmt_modified":"2026-06-30T18:39:29.60851+08:00"},{"id":"4ca379f147f6f1da710371999e08dc24","path":"backend/src/models/OtaTargetDevice.js","filename":"OtaTargetDevice.js","gmt_create":"2026-06-30T18:39:29.608568+08:00","gmt_modified":"2026-06-30T18:39:29.608568+08:00"},{"id":"71a563f23b46da0255a6400402bbfa05","path":"backend/src/routes/blacklist.js","filename":"blacklist.js","gmt_create":"2026-06-30T18:39:29.608628+08:00","gmt_modified":"2026-06-30T18:39:29.608628+08:00"},{"id":"ea6e178b2f0bdcefe2ae8800166453d5","path":"backend/src/routes/otaTargetDevice.js","filename":"otaTargetDevice.js","gmt_create":"2026-06-30T18:39:29.608683+08:00","gmt_modified":"2026-06-30T18:39:29.608683+08:00"},{"id":"30f836e18a6bf9cbcf650e5884375a93","path":"backend/src/utils/response.js","filename":"response.js","gmt_create":"2026-06-30T18:39:29.60874+08:00","gmt_modified":"2026-06-30T18:39:29.608741+08:00"},{"id":"2a04b070bd67fc5059bb504232687d64","path":"backend/src/config/env.js","filename":"env.js","gmt_create":"2026-06-30T18:39:29.60883+08:00","gmt_modified":"2026-06-30T18:39:29.60883+08:00"},{"id":"34fcf7aeb55a9c0224c554fc48545063","path":"frontend/src/utils/request.js","filename":"request.js","gmt_create":"2026-06-30T18:39:29.608908+08:00","gmt_modified":"2026-06-30T18:39:29.608908+08:00"},{"id":"08b8d17e3c09b326687a7bca6789507a","path":"frontend/src/router/index.js","filename":"index.js","gmt_create":"2026-06-30T18:39:29.608963+08:00","gmt_modified":"2026-06-30T18:39:29.608963+08:00"},{"id":"0c25a991664c34b2b36ce3aeed80f4da","path":"DEPLOY.md","filename":"DEPLOY.md","gmt_create":"2026-06-30T18:39:29.60902+08:00","gmt_modified":"2026-06-30T18:39:29.60902+08:00"},{"id":"99aa92df5b8c8412119e9b3cb015f8c4","path":"backend/src/validators/ota.js","filename":"ota.js","gmt_create":"2026-06-30T18:39:56.519241+08:00","gmt_modified":"2026-06-30T18:39:56.519241+08:00"},{"id":"0d26d3961441eb708b69c96f1ed1f7b7","path":"backend/src/validators/blacklist.js","filename":"blacklist.js","gmt_create":"2026-06-30T18:39:56.519295+08:00","gmt_modified":"2026-06-30T18:39:56.519295+08:00"},{"id":"8a4e619bfb6be9c463274f96a2dcb5a0","path":"backend/src/validators/otaTargetDevice.js","filename":"otaTargetDevice.js","gmt_create":"2026-06-30T18:39:56.519437+08:00","gmt_modified":"2026-06-30T18:39:56.519437+08:00"},{"id":"cb4575c8c79b7b9f6ffdac43c2369b95","path":"backend/src/config/database.js","filename":"database.js","gmt_create":"2026-06-30T18:39:56.519757+08:00","gmt_modified":"2026-06-30T18:39:56.519757+08:00"},{"id":"0eb021ef791f4679788fe98caea23e31","path":"frontend/src/views/blacklist/index.vue","filename":"index.vue","gmt_create":"2026-06-30T18:39:56.519888+08:00","gmt_modified":"2026-06-30T18:39:56.519889+08:00"},{"id":"cc4227daf4f2b37377be96fcc492e509","path":"frontend/src/views/ota-target-device/index.vue","filename":"index.vue","gmt_create":"2026-06-30T18:39:56.519934+08:00","gmt_modified":"2026-06-30T18:39:56.519934+08:00"},{"id":"e6564dcd4fbbe8e0f9673967ec4ce3a7","path":"backend/package.json","filename":"package.json","gmt_create":"2026-06-30T18:39:56.529813+08:00","gmt_modified":"2026-06-30T18:39:56.529813+08:00"}],"wiki_catalogs":[{"id":"dd61923f-65f8-4e98-85f4-0e0a0a649a27","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"项目概述","description":"project-overview","prompt":"为耳机品牌与型号管理平台创建全面的项目概述内容。详细介绍项目的目标、核心功能和技术架构。解释系统的主要用途:品牌管理、型号配置、OTA固件升级、用户权限管理和分享码日志追踪。描述前后端分离架构,包括Vue 3前端和Express后端的技术组合。说明项目的业务价值和应用场景。提供快速开始指南,包括系统要求、安装步骤和基本使用方法。使用与代码库一致的术语,为初学者提供概念性概述,同时为有经验的开发者提供技术细节。","progress_status":"completed","dependent_files":"README.md,DEPLOY.md,docker-compose.yml","gmt_create":"2026-06-30T14:04:20.633103+08:00","gmt_modified":"2026-06-30T14:09:11.174236+08:00","raw_data":"WikiEncrypted:0MI1/XkBoMl0lTbK6t0Cn/+8FdvqrJ62ianMLvZj02elJtBUgH0Ns0veIx1WPtM9wwkxI+/XAqHLxJLlHB8wV7ojrH0+b4JMz5OewwhBN1ELEwwkQElYbXolx+YIQM0o2FbBtwH/qJtog2gIHchdNwll6Nf1h+JmY9opyg7JsQs/7cTSSrfUmluAQwFCDAvmu/tGmL3XeCzrrmkOI88h7pvsgL2niGJR0xRh4Lglcxbrr0NK4gOQ45RwQchyzpGTB8IiO3XRTcNftONnEzDiJzVODyKOjZe52ws6XblEwu77xu3aef4IAzXLIbyoTb10Z/ue/QVjfqwkoEB9u5ciW4cJImri5dT+xVeLMwEADbmq8MbYy3QkUi4lCv+02P52HSrp5PmR0p110l5NRD3wnUyJ4H3excBt4DYq/WkTlWRnu7SL4FLbChfDRXox0FZjbrSrmstSyjrqOQs0i+3DWG1cAoapA34zEKMkiP2oxZKPn+7VEJ/X8+B7JhsqroKmAs/NykYkyA78uoY/rRIZzhCoDGERQV+E21xUWuvlE/M6M9LjVSnEkBww9yRnijToD6+usihE9d0zbv3MzXNqNqaye4++Ko+2iPoV2eV7lIQXwMto7c2DhmZGyJ5OEE45X826wBdjL/sO1X1QPuglr4HEFXnds8hBA4bPAqVmgptC8bfkf03XDZOL4nlmljZN+Kip5CAYgR9K5mKRD8ZS9gGT6ieJ0jbcHoo6kysaXa+jBICwzeAEQzmvxq2JqEukLdcKXOrZ0CgeeU8SADva7E+gvKzvS/4Zrbv5UEM8NkYcqeX4k9ERuVUjy5J96C0S2GCNR5OPStfW2tKkrorTKngImbE1l0f1/FI2ZhI5sSjUkzAZIKFeXBJpA1hZSNME+E+UIJ+RvcsprmVx62wG1PlwMBeEhu/9cGBj+i+qI6uAlGdhybWAqGSSxsLwdqCiwQEcylelO7fNlSrnz7amb1JuqBfUynCEzpnlNkv6l9jioHXV/fnJIOihiNh7v6/AMwtMvmSnr/j1oUAuJQuDAW149PMRpTre8XUtulayHzPj4ZY7R+4VpHR5kmYcTNmUnCf7Q26XVU6NLlv9Qu/gvQ2TPuGOKCs579fz3jbJC6rn+mQXlkz+vQFu2x4MrUvomEqqCVV9lv7ORQqVPJuJCH5onWcX84PFxIMq38bqGCQ="},{"id":"bcc45977-c058-4033-b0b1-9fd4cd7f4443","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"前端架构","description":"frontend-architecture","prompt":"创建前端架构文档,详细说明Vue 3单页应用的整体架构设计。解释Composition API的使用模式、组件层次结构、路由配置和状态管理策略。文档化Vite构建工具的配置和优化方案。说明前端与后端API的交互模式、错误处理机制和性能优化策略。包含组件通信模式、依赖管理和打包部署流程。提供前端开发环境配置和调试指南。","parent_id":"70ba09ee-60a3-41f9-bdda-3cb904cb26de","progress_status":"completed","dependent_files":"frontend/src/main.js,frontend/src/App.vue,frontend/src/router/index.js,frontend/vite.config.js","gmt_create":"2026-06-30T14:04:44.763098+08:00","gmt_modified":"2026-06-30T14:14:52.87794+08:00","raw_data":"WikiEncrypted:rJ/rIw0gVau8jPGqKFBAsMR2XDSFypkKHZQ6YBOgiEB18etPNKW/AKXxDO5P260N8cfR8zM/FPLMKEziA2ENAEHVfReiRH5pH+fgWYT+2jYTA7RQlp0TufhpU942Hkc/ujxUhYq+V3QzFALbuwWzvx0UL8Xl+TN5xmZ1UNdZO71Qogp53zx2hXdFdKaPDrr4z+LIar4k3xztnrU6feh8nqiV6INc8alIAN875sC2qpjIyq5wlayKyIdU0M+5DXjHjuV+3QmKO4f+JccdKivcFYhs66YKXadO78U+Sx6jpT0RqNqSmB5SNJLPpp6YbwEYtig2YvqVxHgh+FtviAJo+3aiePQw/TkCYVV02sx3HchcKY17yohkf/cGQMfHWKjBC7ZyuuD2WOHobXyyVuIuHVDKntJ2SjXdR7GaQPDZaxSWpeHYcn0+Z1hICSDDP4TfjuXCKtOx01urOs4lYqZsN2SPy3LljUhl9H5uWpEV3VH/LPqTWQ6MdLG8aye4mMcCsw57e+goYu3oRkRf7qvVOAVztMhQTkCgcUPkiPfB+YdqPMMp430Bqr55/AYFsFD2GmYltN+8OgBqLdislp5mudOEF8uE6Awfn0xbNJNePcUD1+Esx+V+RGIXYVMeRXcagKyoftiqtJy7zjwWBmr/oTG428St7QGB+Yha7dSK7y6WiOZjdDUs5Jm354mpkojurMNDW9Pw3s7Rt24W3JHN+Z8iSUq9+Cr2kaQyNT4G8XaqIe0s8pFYoGeAeYcZvyolp+0ZZ6pAH3tyuVe8hrE+3+/x/dOKV5WsDc7Jul/RY0qtkjt39mvXPzbxtMbwGhahGz0xRVYJMlhMkcN/dqJI4Jj0QtNULaonjkU/joC8aUC2Vfa8MFrpfwSTVytGIrfPAvxbxMYgPvqi8KSjqjV5lpDGUcYA+DMgqLOv7mPVrPBosl5m0J5Fitt9KmR1j2OOr77AyteAWJcBvK/idJN48LdNVtAYqErjTGb16luVO1yW9sDX8VXCKzUPBQ8boXaJ","layer_level":1},{"id":"d34906db-4455-4481-9512-b29115655378","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"认证系统API","description":"auth-api","prompt":"为认证系统API创建详细的RESTful API文档。记录用户登录、登出、密码修改等认证相关接口的HTTP方法、URL模式、请求/响应模式和认证方法。包含JWT令牌生成、验证和刷新机制的详细说明。提供认证中间件的使用示例和错误处理策略。文档化密码加密、令牌过期处理和安全最佳实践。包含常见的认证场景、客户端实现指南和调试技巧。","parent_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","progress_status":"completed","dependent_files":"backend/src/routes/auth.js,backend/src/middleware/auth.js,backend/src/utils/jwt.js,backend/src/utils/password.js","gmt_create":"2026-06-30T14:04:55.151403+08:00","gmt_modified":"2026-06-30T14:15:47.981318+08:00","raw_data":"WikiEncrypted:I6KYYMxpAemyHFwJy5bny+FhLrJAxcHi9isgLCIR7jKgk+RtRRSImYeiedSZDcwnIMYAtWgsiGag9xYiTBcpIby59MhEIf69Ge8Ey272sEwv4rLKoaCbet71KAMUN4denOOfuaKbrwbXK0Y6FbehkE+pCWtq6ubo7or5Tl+PIwwX3Vha0M9C0aYlIBIXgML+2LymHuPdeYf/f+yy7ivDCl4nIRTcM9C82jpKialSDtNyDOeJKcvnuY7WboeTuADzL6A5fX/baERJkVBnSdbIynmMfReneVt5JAopJ+2NyT22CaFtr2L3C+DKZ74FDaU6iC/85eg42OZ2JgeBZXiffstckEhj2B8H2dLfxGDmQUebrfF6cqty5biCE3zW8cU1QI3+bPdfGaoUhj5xFzd437cjGI+IAkNffhuBei52tU9+6Uyp/Ym7bEGnUpxwS1OOijeLKUstO9d9z5MAs5Ip5+HVcliUeAVujyIwd76cvmbhnuaspCX23T55qAvLoTJKWmDBZaKzPE6hCpNAHPfq9b7tOLID4W0tvfFPZnzGWsZK4LhJHC3i/qAGdXsXDc/JijZ7xvhJMYqJMxcoZ4hdtAdv1YjL98AOd++9n9H0hDplAqDf638QwPeaKC6ogkEw5LCWjJFC3FbT+FvpZTxN7RRHFPVNndBrtwSEJR/6/EfA6+9lpuWMXHNhL2Hl4GsMybpXzg4+AihB6Xy9GPv5kkG1enLqgCaaQJ1blr2eb9rUYLvCkQMW+DRqPPQxfniLGGB5WuUkzxn/NzDZ++XhFvmvW6s0+TPiCNMxhx55Jd+O1ta0CeYAptKYmjSJmlT2XDRO/aqedoSZyzYc3L9gtYD4V6FRBsTtOKLyB22oei614ORfyRcALpx0q5/EeyLHYVN0UM2Xsh5n08o9+mCzjkPjSVfG9NIIBhGUTEj1i4dKxB4vM4hLk3x9i8HdfoZ6f4+3iHGqQtHSFId685Izyli748sL55omKo8e0lizEKTrYd5W2vZUviHInfD/D2cIfwRtRBEksNW/6ycVp+dc33cqX6BIN1uwL7uMBhCJyrLl9TbEaEDKPHaGmi4jx9W+","layer_level":1},{"id":"0f657e8b-77cb-4604-81cd-d3e921d28e21","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"布局组件","description":"layout-components","prompt":"创建布局组件的详细文档,重点描述主布局组件的设计架构和实现细节。详细说明布局组件如何组织页面结构,包括侧边栏、头部导航、内容区域的布局方式。记录布局组件的props配置、插槽使用和响应式设计实现。提供布局切换、主题适配和移动端适配的具体示例。解释布局组件与其他页面组件的集成方式和数据流向。包含布局定制化选项和样式覆盖方法。","parent_id":"aa2583bf-2c6e-4792-b794-1563db547d08","progress_status":"completed","dependent_files":"frontend/src/layout/index.vue","gmt_create":"2026-06-30T14:05:00.056535+08:00","gmt_modified":"2026-06-30T14:15:24.296404+08:00","raw_data":"WikiEncrypted:x3LcpLCzT0KOPxd1xeYY3c7iq48qz+WPAPm3x7MWgVl9Ka0y39BYIpkYIXIwXtcEkjLNRqcKoI34Ay7VLfvIoeNd0L9KiPW38nGEktOH2kdRoWStqgftHHDZZMeM3wTiHozP2mtq/BrgXkFbslneMaOqL0jcIeyYsEzK3XOf2IWybFopdsfudEA64erTFyD7rwb4i8M4/OQlv/7phzTi6ud+DXkigQ4QxPbXoU8Pb60EBp1eZghvTXVMFb5rlp+3kbG8uerYS+ciu/fjCScjFieZOug+uuHKkFaFYBj8Za7rmsWg02byP4r8E5yKIzSPDy+NZcyXTRKFGHYtNCtj4aueEWW2oLGYR0/nYHoeMgwdpaKxBg9Ye0gbrAr9gQvUxrzpwdRrUEUmPdp4oTmO1+y7PWruf0IGT+IA7KRfCxZ03rVNE1s6b72zwuUdEps8hXGWIMTqoYJYcYh57cVQj9l1O153yZRu3x4+GhgBW3fblpCW+bEz14xJrftnR/Qve4y83EkfHuQurRD/YlwaAXS6/Wd0aG06MsRzr2xJPgKjLVxTtAsdz5BI8ksED+Rpxs+vKy/CDOvvIUhAx1A0xnzRxDB+ZCR+u/EilCFFyqqqZyWB90BOY5jlYG9Ci2wONLki4Vjgwz6irpTnjyAwev4wTO/8aLJVBupWUqU5MB6mAreomYWt8GYTQqybbkozb5cbV5rNhZTZql0EV7u9+K4mxe4913Os4q+mI5AbzsqzM16xKoV94kRhPaiubGHpXhh9bVmMFx1DyDRVXPlu1zbbRnGMgbH1bIp5FdYRH38HFuxpXMeHfBmyWq2CIVOuMgJQZ+WFbqZPfHN+LjcAOYmhW/MnaBS3TKjqR/3lHriai1eaX6gHyHcqjUCh/6/IwJ311KB5KiG74iE+EWk1a16r+k5oTkTOUMNGX7YnwoVLs+kVHv1fnD14Rwf3OBrXEKFkNyWE9mPL5SV18Yedhg==","layer_level":1},{"id":"7f36202b-af69-4fc0-b62b-a57e415deb69","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"部署指南","description":"deployment-guide","prompt":"创建详细的部署指南文档,涵盖首次部署、本地构建上传、更新部署等完整流程。详细说明服务器准备工作、目录结构创建、环境变量配置步骤。包含Docker Compose配置说明、服务端口映射和网络设置。提供上传脚本使用方法、手动rsync上传方式和构建启动命令。文档化健康检查、服务验证和常见部署问题解决方案。包含生产环境安全配置建议和最佳实践。","parent_id":"a3ddc4e4-116f-4781-ba9f-17c85c85396e","progress_status":"completed","dependent_files":"DEPLOY.md,docker-compose.yml,scripts/upload.sh","gmt_create":"2026-06-30T14:05:12.310696+08:00","gmt_modified":"2026-06-30T14:16:33.828055+08:00","raw_data":"WikiEncrypted:0IKfLNOWe9mZfG1jVts3wxq1Ie83+Lf6EMuycQSN7s3NFV5ooa3Scq2B9C67gTKq2J61WmIo8uwzopEI3o+rxz7q0fBEeW1pmj3Z5yCZzfN7Q3gteOOQtgoQ9YkE4gpYcO2aDGkpGrIWWNjjQ7GyOJYn8FGR2f/tSJ7yy/HcDn5d2NMrcqrwu4CX5Gvyd5xJmIYcuVjpKRByATlNCS1zM5hEwvlL73AQR2eSztdK0b5QNmGctlhqTgf/bfJABgos38mVZQzbH7O9ocFFyJUbFu6uhqIefp9TJkdsbvU1uMF0d4ZiOsIuQb0iFW9suvsoVwvoTRh4P2mAHkIgDv1aQoO66lJ5hTpWGKjuTRoBV+UETV62ofFoNftmlPOqxy+OikSbYqZh3VfJHAM/gj/ehoEfHSCQXl+YPs6HmF0O72rArAXK0t95ls3PNrQO9l0dAP9L1/TwQrroJcZP2FGM7uiesHanN3jdTNXwgBD3l9gUOzOGl/15A7bXkqFfom4mPjqe6+/6cyxTQzxI7oAwU5654D+GtFcAXw7zvEMq0cOeDIeMUocxBNVpRf8SIpWDCB5fuZth/RVBCE29a0lazqZfhtrvKoROmw9go1mbNtfu0GYtrWHuz3BkMaVCGKKYV2TENB8j91AHzomcbKh1sWaWOVzi2XZUHTcZNhOW7Ob8mCxLNxbYWc+goUyiGyu6fI8rJcq69+Eq6MdAlDb8H23H7TSYkPWwvoiI4SRihEX+kEcVRlZgcxYloixMRqcfAirLSbzDrUxdyL+A636HqHK5wbrXT01hUSqhqmuXcDl1jUYIcSZaaS2GdN5sPNr/tfAEvV/QuZx8OV18PJa1uc0WRgGiX/0qbXAJL9l9rZEPkjjNf1X4S/9PNYbQ7y4YCSa1ug33vS9PYtl3eNOvb8aXrgcYnFnrkCIa/XOtmTrizRBLEyjVMUkRb20GAfpUamYhWVOkVmvOU+OtWeD85PtY9aYy61msYID323pMp14=","layer_level":1},{"id":"dbe5d77f-6f4d-476c-88cf-797b80a11a11","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"实体关系设计","description":"entity-relationships","prompt":"创建详细的实体关系设计文档,说明Brand、Model、Ota之间的关联关系和映射策略。文档化一对一、一对多关系的实现方式,包括外键约束、级联操作和数据完整性保证。解释ORM模型间的关联定义,包括hasMany、belongsTo、hasOne等关系映射。提供实体关系图和实际的数据流向示例。说明关系查询的最佳实践和性能优化策略。","parent_id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","progress_status":"completed","dependent_files":"backend/src/models/index.js,backend/src/models/Brand.js,backend/src/models/Model.js,backend/src/models/Ota.js","gmt_create":"2026-06-30T14:05:22.620322+08:00","gmt_modified":"2026-06-30T14:18:01.587347+08:00","raw_data":"WikiEncrypted:WnER6MhWFG6N6U3R1m3zi9/PE7USWRBJSA4m5rdVd0roBuaFoWjKznz76Q8kOGO4tNwaCSIDcUIRQho0AHAeCEii3WPT3hVXrhQQYjEzvKo6SYnxMHFyoqyC8KkItViNO7QMqwUXCOqIqkKYJbtN9Sajekq73kPvPqvY8BHSNnqfwmaK1orPvHIjh8Q37172/jp+exIQ+FflmU+mfYsQJ0KuorznohYsQIf3qlfg8KiwSW0u0L8K99eblOKDbNN7MYtC9qf0iFzdGSOSwR4u5r4gtdCB7SAZCvwuy+HaSOgXF4oQDX+STWKFSq2xGuZf3y54WkpwBnQtNhvzIQLDsBrIlz9tHbHjMaQwU3a8HTu8JTO3mYJ3BTiKKC+jsgxGTxRRRTQ9PhQo1waFlJnCSVsR+m30u2zHgq9G3gwORjBImo9vcEDistxC+xSWMBsfJzWlXUhx5EjJYrZ1oHpgxmUGyLoTlfCJvJoNqs+vQLDuVZ6jd6juOPkJ7sanKd4TlWRy4lLmetztJb8ZAKPP6R4RV0YcU4IV3Lr/Tm0KzcHdb84aWPsI0EgbfUkJAWjCOieqWTHBE3qfwchsJYJqR3RrOuH+/OgRl1A6P/5XR2tG4/LwC5N356o2YR38E4icxdWGirKniBpii3TVWrqGEkWMsUbRenNq6PCyT/kcGEb1Mn+/c4b1Rb80dNweaNWDSOLmHQFMvwtgxh48I7NXGBAprbcEP+kwn8U6cf+oo+LDgHKyTDMssoP+fUOnruX6Eq9vx3pklQUfost9b2918rL+L5N9/tKoCpCmXHMgjuEE94T77bU7dXpcCRjh6dza/rLHJfo9rcOESul7Y0UthoahAetOF8CRzabuRNfSA3+/EgpkViiYcAqUOfJO9prMaKspC6udBaqAb8GX20oPvVBnGdehFhjW6ZNUKwhOOyBRpudc+qhvrCn14VSOV60QyhfWkkOtqy6adpmbqDfDn/boGiahg8EgnrKUin0NLy9vZH/v3RdDSgNXAhCHJng3as9wGB02Lo7l/LIlX0/+Pw==","layer_level":1},{"id":"1af0f0e8-0c53-41d7-a894-47d9cc19d4f9","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"用户认证系统","description":"authentication-system","prompt":"为用户认证系统创建详细内容,深入解释JWT认证机制、密码加密解密、中间件验证流程的实现细节。包含来自实际代码库的具体示例,展示用户登录、令牌生成、权限验证、超级管理员权限检查等功能。文档化认证中间件的配置选项、参数和返回值。解释与路由系统、前端认证状态管理的关系。解决常见的认证问题如令牌过期、权限不足等场景。使内容对初学者易于理解,同时为有经验的开发者提供足够的技术深度。","parent_id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","progress_status":"completed","dependent_files":"backend/src/middleware/auth.js,backend/src/utils/jwt.js,backend/src/utils/password.js,backend/src/routes/auth.js,frontend/src/views/login/index.vue,frontend/src/utils/auth.js","gmt_create":"2026-06-30T14:05:25.89264+08:00","gmt_modified":"2026-06-30T14:17:38.563207+08:00","raw_data":"WikiEncrypted:uxAckj1IXK2TQH//kEdeBLXlO/kfAAqZjShpoDF/LwxjObF9jWClg1BjbeyHIZSgS1kW1/rwYWDBEsAU51nyKaMjqaYMMCeAu0tGWpZIc0izGBmzwh6bfOUHboVu8bTGN57x7Ig4dNdDghiUoJkJKQX4Ys9KTK8TqI3fswjZz8hglaQGl4NeRcIcMv/X6D2PrvWe1qVFdZ0SPTExOhFw3RHcXIB6SwncZI+aMeqX09v6wHL4Cp5stm7AWL+txJygRSaQYujDcE62s9wfDJweKf/BQ/zTEigEdc5GbzkMnf5NFxmbi8jVDO7wUEofR5O+0G7fH1Wf3oAZBMkevD8TNGju735s+O957j0f4XKsnnX9lsLIvYZtW3hwTKNBeBoujNYJuApW03clJesocX3Wf8ww8m1IO2jArAjxNy5Kz5feFkFhHiCG8MEacgHT8kg3E7ZzxyNGQ9qNkHcWapTIQs0bhq055rPjXYps6gxDBnOgFKy8B8vJf6NOsu03pfZ3uD3dNNqpYwGSW0z6lGvHkDJd2fJxAFHPmnmL4angdyPotlYsK94FpYGrRt1S9x1phZ9rGSahcTUMsqDcT9Yf+KRzNIDRSVSA32KNeKkIlJ7KkS/Wm0jraxDEOETgabNiprZu9IQc2rO+qgL11sXS2ztPP5P+se2fpoWR4kk1uiZ47ZmEOozxu4PiysCNnQaMA8ANHI+wEeZnkX2tQbrDymKi+ns1ZC695WMnYfGVqqzW7ztwv6hcCxyg1h0cCTV85FVN56EYr/FayPkYHDGEZZVV5ZUDvhVDpwyR3SbeAFQjsbJ0kKXLG89LTiuNzGgRwI4aA6bxge2JglaT1f+mtyXbZSnfdajBzphQGhsXB18VE2IXqwfYJigbP5F/u+e6mB7sN63cqVRQ1ydNmvawS0ojJpoUdPJp746BGGnKgHcDOaskuD4puwZFDNJVLFQql+zdoIL74vkQKXIqKhlm4hvnkOFZ06ODxcJWJqQNMT4gzixw0eo6Edc3t7Gz3J/XGJn+Lm4JoYBdAk0PmDWtQqqAjKqm9ftEqhlBb/nAlZxetLWvyg1railkNORM+louiBsqTKmMqeuxFGvIMxTWvlU0z1uFTBuzUgVEKqUJRQL7XYgPhEQngiJN01Bm3XHt2zKUINah98fqoWiyyAHyX0v/dIbaMiyXnzSIZLIBWZDZL/N1ypvWw8ffozNBXfZhGhoE0OUp+tItqNmnVsYGvwtU1dFJK3ZuLGGkiqACmSRg+oIqURaokDzn4B10iFNXdloxmOHr7bgSoCjlSjyXfECCg+t9GlrWtFGusJSHzWiRdg6rJ9Rd1iTeSafPGd1AD2mZ1bTOdXmS6IT2utJkj4CIc2gIkIpnlTql1NbuOfDA4NTL+t/649wrNxdl/tfq2+8LlsB48ND80XGMdAuipGWEYynvogLDZguqmDXtxMo=","layer_level":1},{"id":"8f0760f5-ef8b-43ef-8fd0-7c6d1f693193","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"侧边栏Logo组件","description":"sidebar-logo-component","prompt":"创建侧边栏Logo组件的详细文档。深入解释SVG图形设计的实现原理,包括渐变色定义、阴影效果和动画过渡。详细说明collapsed属性的作用机制和响应式布局适配。记录组件的CSS样式体系,包括Flex布局、动画过渡和响应式断点。提供在不同侧边栏状态下的使用示例,包括展开和折叠两种模式的视觉差异。解释无障碍访问设计,如aria-hidden属性的使用。包含性能优化建议和自定义样式的扩展方法。","parent_id":"eb78ed75-b786-4b43-ba43-58a5ea8a23a6","progress_status":"completed","dependent_files":"frontend/src/components/SidebarLogo.vue","gmt_create":"2026-06-30T14:05:28.622668+08:00","gmt_modified":"2026-06-30T14:34:09.996181+08:00","raw_data":"WikiEncrypted:fV4HuQ/J1++1YCiBadzlA/Ad9WGt57Xw0P0O4e1aWBZ8j7ewAMLGa30PoRyFOz3WPxWhYzFV771iPkiUIngbYLg/7p5O4HeDzmBW51nlwAWF6h03zUwo1BVzYo/fjr3K/vHHffvWiWcvf6+/Pi/zO1p95ifW1RHBzkGDc4cbtCFnI4TExB7L8RgFPd4xt6LWCmL98hBAGxxSmeVmm2WQY1xGJjqXhRpxokLo77b3Ez1EWub03MklHAlEi4JLgZCXeG0AZMzGl2EApA0orVb+k1nPHohU/sYPxOP1g77oqTo0L6eRrJYqLVzXM4dPj6cJPfoiL1VO/2KqEXmJqEEcvA8tI8Vv7fNcUxexyGaVLP6NrOdFw7GfunFw5t/QC4hNv3P7MI8EUJYJ/PidrenCXzv2FJL9zWw9IsaJbDglurckMqQQka4/AwPlhiPqUP3v9KzvsSqKogDiv94Gx6K87tIpDsodProyn5dx5GKnJIQRuNQYX1lpPTVqMQ2OlAD5KvAnp1VHGyVMPixJgwRLl/SX/Y/mmbAA3QAZC3s3LJSW/Hh6OogBVuThelQoKNB2/rPZ/yEgXcFUj+H9At4yNojzuBdqqMakOsrfs/1WsYmEsUXZ/HgLkCJR2T6jL0BiRhXisXcj5fbzxADw26kbKBhW/suo/JwIzITcMgr+B+vwdmIYlROk2zRWQTcSVdtpdouiZLy50KNTRIQYgqiiE7nEL/p885dM13alTVH7cRjdXV993ONl6tRfBQnS9o2VAa9B/IoHSXQjblj73awUecvCir7Ougv3SPoE8GPBJakIDBiVOGlcooQQjVelDtXjn5zyuz6cLPIZF9rqakHJT7KHTZrM2+Wi+TKoGF4IR0mEcinmwEe+JNRIkItConCqwWx3Ekz+kabb7E1CpVm1yA8794xHHJtDSak71A7IL0KO7cUUC0tFTuy+c5W/vuZfoZX4oiO0lX2SvlQGYkguIQWABQjuuCjerUkGgiScVohUoSA1vJVnraaSNsC3edoxL+W4+juGOZytBN0HGZS0U6a1asEka7fODrK/yhDNJ2XKz7+pcu4DwgRtUHUM26FEG84uR2EBgZRiuI2c7YA9Ag==","layer_level":2},{"id":"105cfe1d-aeeb-44c1-ac3b-6550f2c7a307","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"首页仪表板","description":"home-page","prompt":"创建首页仪表板页面的详细文档。全面介绍首页的功能布局和数据展示机制,包括欢迎信息显示、快捷入口卡片、今日新增统计等核心组件。详细说明首页的数据获取流程,包括getTodayStats API调用、数据格式解析和状态管理。记录首页的响应式布局设计、样式定制和用户体验优化。解释快捷入口的配置方式、路由跳转机制和用户交互行为。提供首页组件的生命周期管理、错误处理和性能优化的最佳实践。","parent_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","progress_status":"completed","dependent_files":"frontend/src/views/home/index.vue,frontend/src/api/dashboard.js","gmt_create":"2026-06-30T14:05:55.602204+08:00","gmt_modified":"2026-06-30T14:35:15.434226+08:00","raw_data":"WikiEncrypted:l84AvQDvM6QBXs3c27I7iRN2eqIKPqqnLN0fpl6W1NXbpSYLO1ugdN9q3vfdxcOimx9t9/zu6SUc26bwQ+elEbS+I0PRYDRL4shhpb72Ma/Ng8alFtrqEXILpNlDWRs9AoWzQ2KDmoixk2jOewMEH3JllHtJ8DUYUZNp06dby1l7BRtvY2mOkugkoAohYAjj4QyuCm4GXiALmsr7NFR3LC3O0kqbZE21xaDZXflITmtjSkBHJVQtkVH23ciBJVtJx7Co85atOo33DVRVlrOhEJtgP3suOSOLawlRAo6EcizG7y3pDIU5ypo7B8YRrtllA0l35kDhk3pyDTN1sj7bajT9y2fIinJVq2T/AOLyueKRKMFNLrzr1chgaXuxLhiVRpeHk7C325h3AGYYJ9+6Xtr9kmA5H4Ebjk+2sk2YLVBogzJelsdYQqCiBDGzCxN0BAVpEtw7J50eZ+XDVbOY7JUC16j0oiXukJycIku1pthhJUplqc3HiyebwYVuxfxWdM+2IV0+/ic+3NzpGhu19jpGFUZnSD4NLtTW6QCHZMn4FcScTwzn3/5byoDiy6M6RaM3JFXc1XjuZySnsFKAO/Bo/PgZMmoaNUj+gHQTBOhFflMX2DlPEpj+q5NpHNyY11SKV61o7RWYW8r4F9r22VlfvDnLPI2PEvkX4bjKEBeR3vYrx7FpVdNWkqK9JpVWewynEwDS7csRjVfkc43fe6xYto8zEDV1/AjQdPOhSQHP3UOztX3pS7sBLJq/2N8sWJqG+YrGE6N8mVAmjm4/i1jR1vP9HaW3cqoo4fYDacBXqFkEIyqDicgLUVe2+pCWp5Lek0ENTV1TmLovw2a8dsooOU6GQMozpayiXhtI+WzwZxtXAFHTaVyHFJiWYMOOH1xDFV/IfD54CHmfO9/W/bjOZnxKeS/jSJygbW1/5U3jX84UX1n/gqGOsSnO4SKJDEQbdK6PB4+9ounpuIITKPmk7KMn27m//tj8HPjx3W9lenipUy68iqVbiEUqz+/Ty0SFO87eWJGkvXE/HqepzBh5V7XvutH4Y3F0V+GKn9MYQrquYT8PrsUhfk8cZdXdsq28aDUYUl+B4Q35nG0gew==","layer_level":2},{"id":"de69fb0c-330e-4831-813d-94fb958688da","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"快速开始","description":"getting-started","prompt":"创建详细的快速开始指南,帮助开发者快速搭建和运行项目。包含完整的环境要求说明(Node.js、MySQL、Redis等)、依赖安装步骤、数据库初始化过程、环境变量配置和启动命令。提供Docker容器化部署的完整流程,包括镜像构建和容器启动。包含常见安装问题的解决方案和故障排除提示。提供基本的使用示例,展示如何添加第一个品牌、创建型号和进行OTA更新。确保内容对初学者友好,同时提供足够的技术细节。","order":1,"progress_status":"completed","dependent_files":"backend/package.json,frontend/package.json,backend/start.sh,frontend/install.bat,docker-compose.yml","gmt_create":"2026-06-30T14:04:20.637065+08:00","gmt_modified":"2026-06-30T14:07:37.615397+08:00","raw_data":"WikiEncrypted:qfgbutC7oyxR6nMxrwk1ODnNMBEQ3/sG78fQT1yXWju83LC7H/jAM8CEAvWT8huE5OClmQiIfNYNxHQ9s7RRS4I2JpxuOJTz8eCWMUZ1Uyzl3ct5rsyIFu8fuwdbAeggGoVlXxfRcT82rVraC1rlaQRGO5kgcNTJgIeZDa7KIJzJReW1AF2gOcg85NxmyD2QBPU20jUQG8tQZgyOekDGEvFa7bKU1UDQLDNO4yVWuGIsKgfV/whNAizKl0ZZaZ+9iWM2XXBDA9sLrXZQD7fyzUl3elNmWx830Y5ju+KudGoo33Kt/Zp5fVC96xUUwKGcGwH9ptvzXwJy6/w/sF3x8vbGuLrEvc3DHTShxmj7sNOi9NQlkBUDWrQbl44wQC9NfLJYbEHG5mWaT3bFotTFxn/bxdbAce7P9osAkl9SDqVly0X70YjXY4Axe0EdO80cCfQwynIN+uONKc2K+DcTIjJYXIK+dE5l1LUWXxSAWbsgxjnTgTeRqS/RJ7U/LwV6x3M+O42mw7d57H8byAPhaALheFipMQM2Xxemr8LmrCaU/OyB1Zt7NSjO9icOjS7ce0KBJMehTWPQn27B6NBZIwT5MvbL+9Y57TJzYRoPUaywWNeNl20CsE3D7BPdkNz7cT3NEYSTghAfeU0vF120Z/28Pq15ZxBRmIDF6obYSk8NJLSGbOIxYm6QWdJ5c/NnktUQ5V+LKFEgPFSF3HFzIEpolqTpuA30n3Ok0tdZgrCKqqreZOg8uMZPai73OsMcEfntY83IyMpmxd6KNmaZW06B/uk7VOvC6T0wpPksXFRSXonlh0fgnFt4o3fusophHFTQTcpWeBSacU8y2fSx8X6q2zYQj4H/czf/7ijEyOhGFRdm08Eir3Y7kYYFI8hQBfVdDOZ6gFQ5HkQME0ktc5JOWoaqNYrVpVidXpLQ5YMhsh4lHao/nOxWraq/zC3qxrIikrUW0zchTI/h3Jd0fDHMhC2t+Lkbztk3oZ2oCcejCqLBcLrv9ZfkdOxCD+Z4bOao7gjk7dTngaflTdhV8wLJ2RV5IeB0U5YTPVdBfo2VZ3Z5lwdr2Uul/0kxsFfvLfAHgvs+X4oxWle5XW5cu8PoSaCj/pLYjR+/CZ7mtEZLCWj4gas0xmYzqylOaFjIk5cGaAQiW9aRrb4nL6YWK0IH8tum/o61yMkXp4rm6cC3lDsToPthqlHlAoziWtZLPsvc9z6zXUwW38sIA9pz1Q=="},{"id":"5a3639b1-98bc-4bc7-a346-91ed56edd2af","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"后端架构","description":"backend-architecture","prompt":"创建后端架构文档,详细说明Express应用的架构设计和实现。解释MVC模式的具体实现、中间件体系和路由组织结构。文档化数据库连接管理、Redis缓存策略和日志系统配置。说明认证授权机制、错误处理和请求限制策略。包含API版本管理、安全防护和性能优化方案。提供后端服务的启动流程、健康检查和监控配置。","parent_id":"70ba09ee-60a3-41f9-bdda-3cb904cb26de","order":1,"progress_status":"completed","dependent_files":"backend/src/app.js,backend/src/config/database.js,backend/src/config/redis.js,backend/src/middleware/auth.js","gmt_create":"2026-06-30T14:04:44.765806+08:00","gmt_modified":"2026-06-30T14:19:05.642968+08:00","raw_data":"WikiEncrypted:N3UbzwGjCC3xD6BrTM0cq8Y9ccVoDb9n1FwE8c3MNy31fwp7itn1eN/9SBNHQuzqn4Z/E95mV5akFaXhbd+x3Hbeb8Lp+QkTMOKfZNQyKojFvMb3nIaA+mV48tDXDWEqxrlhh4JpRydgTIGrd8n1WR3CjiMs1OtPA6kBQSdqoDuuhqzpLQF8idz+njTnv94/o/48fQBsI6bG1frzakIYWOtViLMUk+plRMY5j0337M+sVWAzgVAFVqgiBfjrTGY6V5DqUqCh8xE5q7CAvBRDT1Jmo2M8F60+ejp31MVUAg6xRp6POj/W3ik2qnAYOVweqNiTiYyns3uz+8l5xceif6+1JZOepuVFsY2Temglybru9Gz2+d+3AJpuvKT5LjJnJ+BMF0P3sGW2ATh6rsJJIu6u7uWn4yr6rsZZYNqdEQW+qWwkT97SWLMa1xtsuNiR3+QKu13kqysVkXG4H/394AJwDoljAoFMTzOsbUlUkY6QrOsx6LagWGbhXIqFrRfDWnSMkE81wWy3pcgFETEzQIaN+xAjV/skriEvn2clKJ6c4DNKTiS/iLu+5T3UPOXO2kbKzPwVqlxhU0xGZ1Pq2RodxcdD2f0abxDz3g0Wx97q+SQUyHL/KmFznoAq7YvBwKc0bWAQXkc1FvmZ6XGHyxoO2JyrbzZOMumcj3gZ6Zxc4nUPXKPoKXDL7unysWj4JDOcJhSB+hGDKjckKvvLLeDFShiGN/JjptjQMBiU39yfOom3FOP/vM/S9QSF3WNTopdDHkSmlh7dZWtHUE/z4TL3fYmzT3iFsTj4yjeoP3+Yx51P+Hz/3jrBPpT92jRo66eNc3GuySe1DeaXPT1YWdIr7S3r5T1r/ojXI4tcYdNj/LkmB+pLLsIvvosu/ETHXLP4L+Brr+mJWjJGSSz7IzsH4UlQFwh0nY8tbkO6UsTnmZY7PQhOHvuLVCOQ3qaLfKU2LxfMTm8oDj/lbOxS9/1KKy/W99UmrkMvhardyA1Y8SqsnkPCXZqFkn7POOgOaIY2vWUs+L4PKd829ZApvZMyukooOwm4NhCvWOp33xo=","layer_level":1},{"id":"779d6806-96dc-4c97-8cfb-15a3d7855bd1","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"品牌管理API","description":"brands-api","prompt":"为品牌管理API创建完整的RESTful API文档。记录品牌CRUD操作的HTTP方法、URL模式、请求/响应模式和数据验证规则。包含品牌列表查询、单个品牌获取、品牌创建、更新和删除接口的详细说明。提供Zod验证器的使用示例和自定义验证规则。文档化品牌与型号的一对一关联关系和数据完整性约束。包含批量操作、分页查询和排序选项的实现指南。","parent_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","order":1,"progress_status":"completed","dependent_files":"backend/src/routes/brands.js,backend/src/validators/brand.js,backend/src/models/Brand.js","gmt_create":"2026-06-30T14:04:55.154207+08:00","gmt_modified":"2026-06-30T14:19:07.600812+08:00","raw_data":"WikiEncrypted:hJ5e919a6La3vBIeYsDd9H+qoMODEBAlmCzG+cWkGRu78NaFDIi9qITlXW3zUicltUTnty1k0aVuLDmUbWYsq2DQkP84kMUHXEpA6OcQtQQW2b0L3hPiCNJb4ZQrqvo1LXEBjkme7wbSkleJI63o/kaE8846oeYE4AMgjWxEbV54Z95lxWs7OlwO2sCsNbqRc5wR/o7amP61MJ/lKWn8nNLrexqAUu50qeYGngpuqV3zogarV6D9+HK54itBZ/ncQ/+9a/lhzLkb54iR5IcRDOqaVetAPcB7FKWOIWyMYRgn/APHz0vu/Ow/jvrk2IP5VdQBYSzAFPe3odHJBhc53XJToyo3J/RoBJdKTAdLlVolDpTzg9VKOFbCd0ua1syW8RDmRR8CDnzPdnm2/KJn2+vYfnnvQvdbENcsjaVhdZ5GPJSf43fyJOJLXx8L2QjtqQdv69AtBDyTBsnmFqRUG6WKDHnA3WtZJZQ796EgvORbPOAecIhV0hLlvUyUJBOrM4v2ZMmc5RZ+ukl5ruR2PxQRNJRVk5f8BDNoylYtTWow9gb4r9ii7/TP7NjRI37TxCOkatlA10cnKD/24jXu6MRyocnYPVbHAT72NR7srRVXBcqMwlwiK2LCPVG71hlvmt7NiIB+pNCWB8s+qWHNpfV4kmmg9+458bGJdycQgVa4Mb42lqASsqANfZRC0xMGO4JM+Gns7T3vtPmAqjDJB8tZrkZ2p0dnvSBGpkYiLm68HLUpIXD2YldMCbY9ymtkJB6gBWWBUutBXeTQ++SyBn+qRICWqKCnVWYK0rfrYWa76HfOU0xfjpR9sVWFqXvhtkMBd67yy00PkaTUrvIFUq769fpn6KWDb99I8cHWnLIj556iiITHC7TpEqPSdbdkvssbuU0oj7RqG+UAFQWmP5fu2c2dBkaPoaqTfzdrJ4EufHQc+W2V0jZLzdrztAbbrXMIlcSdnIVZcM/yV5kGv89D64a9AfWx3h+b4uVFgMRhqFlACt0/36RwQeI2ZJTp","layer_level":1},{"id":"eb78ed75-b786-4b43-ba43-58a5ea8a23a6","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"业务组件","description":"business-components","prompt":"创建业务组件的综合文档,详细说明通用业务组件的设计理念和实现方式。重点介绍侧边栏Logo组件的品牌展示功能、标签页视图组件的页面导航能力、密码修改对话框的安全交互设计。记录每个组件的props接口、事件回调、插槽配置和样式定制选项。提供组件在不同场景下的使用示例和最佳实践。解释组件间的协作关系和状态管理。包含组件的可访问性设计和性能优化建议。","parent_id":"aa2583bf-2c6e-4792-b794-1563db547d08","order":1,"progress_status":"completed","dependent_files":"frontend/src/components/SidebarLogo.vue,frontend/src/components/TabsView.vue,frontend/src/components/ChangePasswordDialog.vue","gmt_create":"2026-06-30T14:05:00.059997+08:00","gmt_modified":"2026-06-30T14:19:27.855603+08:00","raw_data":"WikiEncrypted:mHLzoBKW/ak+KVdbda4A2f7qh44idx3e5sYOKq4y/WJWBVlKxvfsgrfR5kwEoK+5YZtxFpGvHzwX4IOH+DawEmhTwQMjQgMBCcPS53RmGaHOSgU0nKq03Su0/WZVgYDJfX5EkUz6h2rTPEOvq5PXUInOMgSH6UvRdohktfTAFkzFd7S1FTK58sVzdGQozq7wI1koDtSWO/SNpO4Ee8fMt6DTqQ90rTnMbEPKLcOrCDgBxPksoF4AwVmDiOWy6KkShCEKg5p6r82/HoJV2qfYNRVng+LVbIRQN/zKlyM4YEjleh+mVPfQG9melNixR3cJRG3orSswQpSogfZRK8Bo+TO29dCbmXI9Mg5k9sGaNAq2jbK1UKrydX+oZeXgh1B5BSCmOo6BWUzJqDsP9IX3WZ4YYVL08TTVYxPFyLEuNn34DiKMnez9L3SfJSnMIoqN7ClMC6kQ9CccZ6/1deguTXM4M/nzN1SSJuOFkMC4DjWRStbyZPfqHkfhcEG+DW7eaIurD4brX7qVwpAIDEp+HrF4YB/rpvFHpbpqob5nWRmQN6HzhmXSIBVTDNlvO7PuFOz5bARPKE7RKFrgOc2cFBVLCny0niJuaZXDcspCDEjkKMe/W6KijLPgVdFJ319wQi6WwIpUYQEwwRICmXrDU8UXRluSrnbmkI46ju45vwGnf4ZkUgPQhrtrxxqbDjr3wHgQtU9m0G4JzNonUKrVsTmom54Hx2VWzLxdXVlK1T8uszT0ZI2wtEAFmM+maRys0ZM/v6yzw7S4lK6LI76u9HmAWuPDpalJjO66kRoPPqFHGP12HnREYBCpiyzVDOsMKLP+nC9RJxVJyDqINcMIEQ/cvMqQYtNOCoV8uC4xqdOLLw69jWdiOw30qNnb3DwC64POHfTIjLTuZLWorchvBthVfmMzwqrolaR3VHUVgR/m5h9XEGlzXTqA6znkpkA1TjOTmf6YAAGAQ+Zt0IuWfA18ulyPt6eyriUUPdL4oJqBk5XXy45O8tb73hyaJ09bw6OBSdGlDdIsNotjVXwyfFkMEutcpmMT0v9MKTugGcSfEHSUwMnJkFKSB/PL+vn4zUky0vkjG6dUA1kerjwmjSaNZ7vkhCbbP8OFylL15gHQfCdOMb0AOCZTdEob06yof4MSnaXqMF6dufxLdbwOuqCfJUkhi2qwT7TxlBIB+CQ=","layer_level":1},{"id":"f96081f7-f508-41e2-bd45-a5b36a1ea114","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"环境配置","description":"environment-config","prompt":"创建环境配置文档,详细说明所有环境变量的作用和配置方法。包含数据库连接配置、JWT认证配置、Redis缓存配置、S3存储配置、Meilisearch搜索引擎配置等。提供不同环境(开发、测试、生产)的配置差异说明。文档化敏感信息的安全存储方式、配置文件的版本控制策略。包含配置验证方法、常见配置错误和解决办法。提供配置模板和示例文件说明。","parent_id":"a3ddc4e4-116f-4781-ba9f-17c85c85396e","order":1,"progress_status":"completed","dependent_files":"backend/src/config/env.js,backend/src/config/loadEnv.js,.env.example","gmt_create":"2026-06-30T14:05:12.313659+08:00","gmt_modified":"2026-06-30T14:21:11.825296+08:00","raw_data":"WikiEncrypted:mJFb0eo+82adP8NAeq7d4IIa0ji7BfhWd+tPu7r6OpR4X+XfqeclnD20MHCexQtgFzeY+udCFgwSLYPDydN5R8BNpcJBbveVhePMQWOVKGSx4DICe20Yr3Mg9nlLB9FGlGjUc9Y2pTff0xrwHFSfFG9wRb0k2bAg/j1gbq1g3pZxabmYCBYxTPF026U732n/Ksmolpy1y/q6x9P2vurlaRpr34CvTfVkEYogh6YTLfmAhzHfbr4sP+eShuvQDEHYmhRjzMwhYz18NBjgpMKUbE/pndwBftVShR24efIAv/BElGFzh4ocX9Ye4v5tKSBg10FekOLemFoJ8pOCG+BGhsRKs9n51fBFLOmmhXaTFC3SHhG9AITLshuN0sb92me0NMFI7NrhNuNKzc2UHDUgDyF4Vafg9YZgHju8PxlEwOs1BaPCOk0xYsp3DW0oVsG+AwBQvlvriYibLy7tghBmipp4c6l/pSiJCmGjW0JwUul9lVwbeyMAjsVBJp2ZXwzI9IKB/NXvEH/JyDft3X6uxO5VqdujNwKyJ8t8zvrApsSX4vMXO5+2SnxXAGudlLDTLmP6ozej4/197Za0ickFHWFjLPGNZDXv3dGVJfV+YiyL6wDXurvpHfhX09eVn4DP5NLwrzRsggp5XJR9ojLxzMggtxIbLdbx4xTBkRXRiJflCuRSm12Jrt6+U42gs8umQx0/uQSOJX44A0jxVep0MZK5QMIH7oq4jDqBV685QyNKxM4+IDM/E7zWDh9V8U92lhe3mOm4mqolgFJPfEzZaFsi9hOqp+9ZaAPAlXj3DJCXdSDfa8hNtfgjKJ4UgqP/2ESnAZhrUisYaQnfAMUBQKau+qwn+CnUsXOKcJkQNSoaXdvyBbAr18gNn3wK7A0viPPO1OCMf9E0Za9ghsyaTQ0q5kZuNukjWX1iQbG9QZ3TTkxZOzgSpuC9sndRmv6DY9AWL3TaupI10Ec52w4hOZe9TAcM1iN38mHBSSAf8r1qp1rGeo4bV3v8ONIokVkJP/lLXskyXy8PWwyNyN6yE1CfFAh5xxnrjnHNHYgYz9c=","layer_level":1},{"id":"92f94141-482e-499c-bbc3-6101e70206ff","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"品牌模型","description":"brand-model","prompt":"创建Brand模型的详细文档,包括字段定义、数据类型、验证规则和业务含义。说明品牌名称、描述、创建时间等字段的设计考虑。文档化品牌数据的增删改查操作和相关业务逻辑。提供品牌数据的示例和使用场景。解释品牌模型在系统中的作用和与其他模型的关系。","parent_id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","order":1,"progress_status":"completed","dependent_files":"backend/src/models/Brand.js","gmt_create":"2026-06-30T14:05:22.62391+08:00","gmt_modified":"2026-06-30T14:21:29.097262+08:00","raw_data":"WikiEncrypted:MpYke5d2PXdqtxI+drCrLlbJ7FPFod4dQS4C2jIEy1Vi+RWBmbRp3cvvlClyElpjY248hN/8uxj/oZc1cBilbx0tRCgx4EXGhbWT0bKPV9CClQk3EyAIvWkjw2qBl1GwoIZaoQbh/lDf7iSv+CjumSc5MqVDv7FeDuoB4BYvqSFuX6/sw/v3wTqRwaKX6wLQyS1j8HSrt/0T9Q28vNhc5WBAPNUs3PzlHBfFfWZpG8H8gVCRsqX5tOhfgNie/doVHGT9Gl74pC4sOjSrm4gseL4GAP1i/34P2j8wpFWOK0PHIrEDdLFB/nl4AmiN3z3GOflyzR8heQlB3L74kyUKX3oVFyL8nei3KJoV9pUbYJJztTdKAUC4USkpOWF2LYTf166CAIIyLuvpGUJmRkxZ9T6fpTbIZ0tWkizC09RvdiaDW1+cjDQhj6Ij23KebNfpMuYYTUkiKJPqASQ9/+A7uNZ43ntzVnopgTzXzDun3QBC7j4m+iF5DLSWdqS3XyRpanF50CvdYz5Px9oLvusDbKohVWQ6zxGf+ZZTXOL5+eTO/qQ3TKNuJA3mkzSqU/zzIodqLG3oFObroU6JLMHgFwXp2OggflULj5njivqDgj90U47CQExGFS8JnCl0dPuxiblN18wZf2ANfUg0IvnU5rAmQ/gz+dtummkOEouqZxCglWdsNKdTIkRWEkDBecIe9oGWuMX8RiWHLnL/Y3EvgSPRu8DkD/n6hbQQPpIrGV7Jf7CIPfqWg8/6VZose+vNR+n9JFdOEU7Q6X9OK8lAsw==","layer_level":1},{"id":"1e3d40bc-a833-4f35-891c-9dd96f09a1a3","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"品牌管理","description":"brand-management","prompt":"为品牌管理功能创建详细内容,深入解释品牌CRUD操作、数据验证规则、缓存策略的实现细节。包含来自实际代码库的具体示例,展示品牌列表查询、新增编辑、删除操作等功能。文档化品牌验证器的配置选项、参数和返回值。解释与型号模型的关联关系、缓存存储的使用场景。解决常见的品牌管理问题如重复品牌、关联删除等。使内容对初学者易于理解,同时为有经验的开发者提供足够的技术深度。","parent_id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","order":1,"progress_status":"completed","dependent_files":"backend/src/routes/brands.js,backend/src/validators/brand.js,backend/src/models/Brand.js,frontend/src/views/brand/index.vue,backend/src/services/eqCacheStorage.js","gmt_create":"2026-06-30T14:05:25.896897+08:00","gmt_modified":"2026-06-30T14:21:25.623188+08:00","raw_data":"WikiEncrypted:MpYke5d2PXdqtxI+drCrLid0YsRsuFzxrKFl1UH2EDILD+4NmryAJ+q2oYZ42eaiz44GIk6X8OFlUAZ3K10FBvMN69Ne06Y6iVCy+4xZdAsUGmydXuI9LOupHeDUaC3pvkOjqp3EZ4xOBXToKexD3sJwOHDJUYBWddck1pKB+BpUmpIGWGulvtKNd7rUuuNXGGexSoT2k/+fD8cfS96290Who+jupUypdef/VVLQ+SMm9fS7HoCYxsUJ9tvcR9HLpcihb2gc09v40WXl2RSPF2VOKqtBB6T3R/UTcCJV4p8ISn8geesslxEYyvMaCyHxZrZvjir3/r7oVAAh3KAOE+Nx4JTX1AQd1M8iUlzVaup2ZB8XvjcIj9/TKMdIL3PhNerpdIgsAQ8lwCNMPriXoMoZx0MzlaX5d0D7vEbujs1W/0zu4BgcnCjJtUdvCB+34DyEDjZVd5vEPpMDJyN4KZq0V2zz6XEIXr/SWlY7yRweOhgMAw/2UmV15PZmnHQQIsspcBtED/4LZY8sngC1o50KUM+1PQNQamViqAlGCHXBAR7Cj3E+QvjOBSfAVtc7OPeHToJFTO7XdM8xdMMjkRCdrmB8zJ6XSDish3MLo+tv5fNdSlOF8ZFqklGbV+DaphtWW1k3t13oFWP+IjkbW3xwsA8akuLoG+cXEctO4Uq0VFfoiwI8sfioOV/hJo6y06miVzTDvjdjk2vZ50V8j2qsw3eXt2N4bX4b2I/BjLZzItZdmHID3ExYBmo+VjPOmBXQGuZdhG3wTGSRtD7Phhsd0G6umdHsRVF74ih8xOWkjG4+8dj9F6mnmWm7nn84+bv+Es0fsCjoeqagYkgvIU63p9y/FEcjSTEEdHqZ/0qKXA8S1xyEHzPMmW4LjN8jwyNryVJPl2LOI75aXNvdeoMbfPs9qH5u6SeX8rw6TvD6XwAb28N8ehKfUVwJFEY7PkCn3ROnsjFquwaBd+DjPpH3CY7TdpGqGBuP5a+0z72JVUfnjXKn2oKTR35QRVAhdnXk/st1N3eu8SXBHgx2XHzEB4JAnu1nWqNOr0d5Mn9OVFDqOJ6GD37xh0oQvgefNcxCxgURt08010ZPDFx0TvUMLh2g+plGTyUqDgekPLtY93lC9TEtV4x92OjUub4JRNaGBlHVTUaC/pi2JUS/QYcfOPvjYMa7TgyxylESgrt7jf4+lZOJzAOmJSKScT22E+S1o0omg1Imd7YyAt5QFJwBS8Zm25xjGROuORqURPWRYfToJMKQYjB905rLMlW7JS8VHBVaqUp6R+S4827muvsDVj/opXiMkSLPllSH2AwfVfT8AASFSzz66kvjkmYy","layer_level":1},{"id":"727c25ac-db22-4b34-9486-6fd6946f64f3","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"标签页视图组件","description":"tabs-view-component","prompt":"创建标签页视图组件的综合文档。详细说明标签页的状态管理机制,包括激活状态、关闭操作和重新加载功能。解释标签页的数据结构设计,包括标题、路由信息和缓存策略。记录组件的事件处理系统,包括标签点击、右键菜单和拖拽重排序功能。提供标签页的生命周期管理,包括组件缓存、内存优化和性能监控。包含标签页主题定制、图标配置和动态内容渲染的最佳实践。解释与路由系统的集成方式和状态同步机制。","parent_id":"eb78ed75-b786-4b43-ba43-58a5ea8a23a6","order":1,"progress_status":"completed","dependent_files":"frontend/src/components/TabsView.vue","gmt_create":"2026-06-30T14:05:28.623089+08:00","gmt_modified":"2026-06-30T14:35:27.886573+08:00","raw_data":"WikiEncrypted:IBinykhefIyOgdnJDAiniV5kOUee0Xx6UXvrXwmKcQxxhEd32Oxf4/sXerzkozjdwLiRd78FiQyVCsTFnq2ZoJjCPvvphk/28Fyp6jERf6Sd62RGVBf+T/ddf1qyYMGlXTIT63FLUN8lGKH7HE33fo//zcEAInyKuCfcAnUKtGhK/6GYF5OQOK8iu3hTREMVLLGnL+nviHGzi/OieF9xzRK6Q7v1xKhCFPVw7G7pKGvEqIAXkIuI+gtduk+6amkK8DTLEeFc7kADsRYiiGxbnbCwDskX4qqKASfyrXfwkcH6erxtW03zOc0xXxRooa98xza6bb0a8AuGRLxpr39QpjXFHHSkoQOfBajABJjr8Dc2g4/Owp/iz3w2DmuHDD3n/B/iWYgr6mvt3RyCN7WugYmLcAHydpYFY03KrqgMoG6Z++VclV/+iLE/hhCWVXZwOvZExFa1/Nm3L/kQ+lvH/Ok4DwK2s2mjZIJfjmMEbvvPBDip57GwOAh/DEUOz8xDHSc/z3kHBhO8c2gfI+QxQTDodO1T3sDQNvDzNXnOsiGHEa8MFXwnRqOOJdjXpI/V0SeRqH+VF2QLUL0H0zkIRmUfKDToJpYdryAc+g8C/437bvmIINo0hk9dNxyk6OJDyil3WbGVKZty2trCmX+SSkvThP1sjhsXb3A4lCaln+NxaFM2pwSzOI2FrAI/3udagiuCFzkHXVAbL3kW/sByyca+mxh2x0XmZnIacn1rN3mzAbZQw0GomBv3D9BdLhokGDFcRbw0wBF8/CKZIQ2LXwJSliiHSUIxZBPFwOlfuDQLwPZwafFjFgx/iVezVLOrtprdilrMg1icikSwQ2uomd5k/4o4X2RhtHBwVEBnng/I2OnKpp7hx9jW6qnRgl73qL/weon9zfXHb5cIhwqTENIhOakxfLNkPuVZUK+yV5j8hhnf4TSFJur40kvfWrFH8ooRZjxZLVRGEqph6t49E53tpiLKAnc7PCkGqlVdBstHvud1Mi9WyXlP8CHOoDFinYsPol2IYws0Wz58mTUZesjH7Ovtl/r7VUGNRE+V5VOhW3H2ws00vNLRzrCQfstfuwZt7dDBHlJziXNvdgav+pfU3tAHaonl7W+6IJAygI7B1LZ7oTRxEV4fl7vl2G8suLJXZO7UsiezZ0gxqvkzvWkebI3amABggi6vI+xrlr0=","layer_level":2},{"id":"c8151791-2f8d-4e1e-8139-b0cf921ef002","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"登录页面","description":"login-page","prompt":"创建登录页面的详细文档。全面介绍用户身份验证的实现机制,包括登录表单设计、字段验证、提交处理和响应处理。详细说明JWT令牌的获取、存储和刷新机制,以及登录状态的持久化管理。记录登录页面的安全措施,包括密码加密传输、防暴力破解和会话管理。解释登录成功后的路由跳转、权限检查和用户信息初始化流程。提供登录页面的错误处理、用户体验优化和移动端适配的实现细节。","parent_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","order":1,"progress_status":"completed","dependent_files":"frontend/src/views/login/index.vue,frontend/src/api/auth.js,frontend/src/utils/auth.js","gmt_create":"2026-06-30T14:05:55.602587+08:00","gmt_modified":"2026-06-30T14:36:20.147272+08:00","raw_data":"WikiEncrypted:gVtFIob7WtU/DhLIhhPauHe+OU+v+Wmk6re9yMmllcXpiZ1pp7hfIQRNzw2djMi3kdxg1YOiyCoxBtvZze4FF6edaCgUjs2MTu+j6AA0Iy0cXORNHgcTdEiY29qq3iIiQbohHFi2yVwhY/RbmzBe7lwJOZe9tZJo+9aBXmZXSPQue+eGhVi8nfNwLBVZ8kr2w+IM0Le/0DzLcsNPWWHKW9gEnqOL9qJ2uRnJOeBfYIQm/RFJj6Arc9HTRD2rHKpLgeXT0/7uDlcrcVOeMQgI0MN4e5IsSMOS4i0V8i0QeaOnTMFe1e4ITmzsKBkTM3HbZ1l9Tud2Kc9vwBSxc71qfQSzN6PU2Lg3Aey6Hyu91q0cx/QlQLD9hjPLUl+/LeHHG0eHqrgL7KtiH7e32lisXRG1TYhCgOaOHWCL/heEb3WzujrCLosb3D7MsF/wENRWQGAQTgULpo9tmTHO5PQYppvv0bzI29cZtI53vlNiklobVJr7tvhTy/Ogd57XQ8bYMtnir8CxJnzDZcTSiyutWBKqV1X1lZOAyG+kC+aaRW/C7OYV4ek9b4dwf0XRsWvwr9GNgjIKC4IvOT+MYq8f+lbUllzOJdecNYg/6EvBmc3lESxNAVHxcKCYkpsfwV1pkQKTA8mk0s+6LysznP0NCo0/Wkd7s6eyrR5hNxhX1dI/D3SFOxC18N7Jb1XQTy2olb3oNn3HdurobkjeMAngSA7nxtsFpdVcdX3SqxyouWIMYKCNmLQjxKTUrx7OWx4ylXm4zZnlvaCsuj7hDBp/zdcCNQpVDN0sTMyI3rzj3Xnd9ULyRuTFS7dJzarbaHqSuN4ZVx3pRYSNWmOrrCKKAy2lG2ee8ojCkWtwcykJh9uC6Isdq+OzIY86g6fwtww3sF0b0tl7sLw81MfyakQfpqI09OHCiDHPtmwU1xVSJzriX6latrVG0pN2XqZ5MRWQy7nrzoCg8M6UHar+01QHp7FtE1F8IB7RTjIWNmVxfhgG5GBHk0+X39/mt+u9MCzS/DFWBVoXj2BXOJaos4NKYh8BDbTHC+HrYNlkD0wHs/yly/mlHyPrzMrv6n19GedMYDqebhvi0p2vS83tSPxoFf9tVJ3/0yZN3JuwAPQdGls=","layer_level":2},{"id":"70ba09ee-60a3-41f9-bdda-3cb904cb26de","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"系统架构","description":"architecture-design","prompt":"创建系统架构文档,描述高层设计和架构模式。详细说明前后端分离架构、MVC设计模式的应用、分层架构的实现。解释组件交互关系、数据流向和集成模式。文档化技术决策、权衡考虑和约束条件。包含基础设施需求、可扩展性考虑和部署拓扑。提供系统上下文图和组件分解图。解决横切关注点如安全性、监控和灾难恢复。记录技术栈、第三方依赖和版本兼容性。说明架构演进路线图和未来规划。","order":2,"progress_status":"completed","dependent_files":"backend/src/app.js,frontend/src/main.js,frontend/src/App.vue,backend/src/config/database.js,backend/src/config/redis.js","gmt_create":"2026-06-30T14:04:20.637577+08:00","gmt_modified":"2026-06-30T14:08:09.130141+08:00","raw_data":"WikiEncrypted:EPw1VhZSv2AMLpYzHbCG5QXmatSKh1iukhkKRz99kcWlEvnOwuqXvA4ZgQ6tN+ytovQp8yiqJicl84VZMQ0QFUpSuhdDKqqegwHVHT8m5Qe+hOlpJtwBJv6Gyfd5UzsnMpeYFRNXR8wbkeFBADir/QMuE5xA4w5GwYNyc4GbpnELQTPwTHgWWbWNxlgq3I5D9TCdlGhsRmZA6sOK//txRwki0pH+W5zMNr6nOdulmNq6y7jVc1uB2cnWdogeOMuaAeFHEES4nLloLAu6fZBcuZViwy6PppTyAmckkNr4DBsfUDF8AWA7Tc7/u9k2CUPbxxXn6EzWZLxfzJ8g2+MS5AGoHvdi1/l6Obw5LKcFw4fMrrziZ69qX8Y00Nb4OGTY7Ba9x8nTUpZR+ZQr8C2+b3ian2p5M/jX68T2veatBUXJdORnAdwyu+gsMTlFms2BIWpmJja/SPELEIIsiw02D+YpsgCBoWJwJytlJH/lNURd5C7p6eNTpZ8Ueot4a9kE3/6KkmeteZgfTGCtJVjgtLW3hCuAyhA5zfsNbKDGxNKwkAHaDmWR8R4jKKhAC0JCdk6GSYSbiXLYZG0yPMpDooJP8w3qo5IHgaintV0p4Y+wYwdLe0UJ74U9gCWnfTrlo2R93/rrWiZqe7Wwovt7bAEMnTmtbaWINVb+tXkN3kLfbyjbTHDxjIOc2AAOnFVRGIJpMt50+QEi5TYhA684wr1/vQOBZas07D/sUPjcvl/msZ4kjlgE+YwYMbKPSf9j302dqERpSJODBX9TN2I+B3pRvT8ziUFXF/xr6AsE4DXdyvCy/cCKvmIEp6gyrY78oSE+YwHefC0Cx0ltAwzDpm12AcAoA3YD0TwNDY8zH4cwXHu79zttcgTjZQaebPwhD8L8PbozbJ0lQWo8Tl5Onvbp8hOw6U57Z1U2W/ge1JupnAJt0tMnHek6EpKqkt0z/J2d4/Z5B1JNppZlK1nG+pnKNEfNY4h2m0ydoCRJCad5ccnFJYXhF9XP9vsx0RtqQoedeyfH7X8//4Iv3nVza2b7PZ184/TnYNqUmxItz3yos0ir0gAc+54SDzg0aJlzBs86JFQ9fSep6OJ44sUHkauivK0vBs8Wij0TSI8wUf43PFgjey+c54DZcvXNfsD1hh3PNHe0CRN/oMidSjGTPv6WOJIzp0KnAOn8GXb0kkhk7bpk8eYfe/8luyjlDyaA8QOxpZLfUtQWXtGv9+W4bxOtq8JG3gDpTI/PJ9UxhamLc3zHEgUg2FD0maAM+FBCVu51P66sXPu+fY+bIxalyw=="},{"id":"b47d7f83-5401-4a63-ade2-f087a2f61987","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"数据流设计","description":"data-flow-design","prompt":"创建数据流设计文档,详细说明系统中数据的流转过程和处理机制。解释从前端用户交互到后端数据持久化的完整数据路径。文档化API请求响应模式、数据验证流程和错误传播机制。说明缓存策略、数据同步和一致性保证方案。包含数据安全传输、加密存储和隐私保护措施。提供数据流监控、性能分析和故障排查指南。","parent_id":"70ba09ee-60a3-41f9-bdda-3cb904cb26de","order":2,"progress_status":"completed","dependent_files":"backend/src/models/index.js,frontend/src/api/auth.js,backend/src/services/measurementStorage.js","gmt_create":"2026-06-30T14:04:44.766251+08:00","gmt_modified":"2026-06-30T14:23:25.133463+08:00","raw_data":"WikiEncrypted:PGdHQOrMWxh6s6galmzx6wcoMdYGcfWJlB+MVcSBUNBNKtizTGYmn04CYqWTHq18bpIkVhxruGAwYTOr3jZ71eCHIhmHK7mDbe3H2F258BwPHLGOZJH4+7MFqH3W33roxV3A0mBu2oaH8IeI2N8avzXHaJJypIkSAx9hq3JuRVRCDIeKY3X4NKu/U9NptL74JQm6A7p7Li2mkZiBFKle+4PW/yzuWaITp6kplQfvEI/KpRhmnMRsG3jGv9iyUUFWAGQatGlcpMa3GH4QFw3sBvBajjhTtLtzUczf5Spz1O9WdUbgYOPCpDQ77+Bihsdcy9JfQp4lINGc9Qyfb5uB4DQlnqYiPlbr9a3dDGb/dU073dMLOTbly0p8fq9pG4W7N4v/Qh8PKhHj3MylSLdIGBJUnAVMl5qxvwzxjojm6CXeNAkwfimh+yqf454XGxOTZIAU9k2R2h8YV42MLqjA33Hx50dU7ywv/LpeoPO+YkHYLdJWVag51oeU0dV76GEofIYoyk36dpcxNf9tYMnzovlJz1d32pHkZiEtsRL0hfFpnpiBClN9Eb2M7eXf3h8covZFJVsAMVZ9mruy2FWZoE+Vy70yUrtgKhd+OG9WissVZfI/yqj0Yt2Wsrr1loH4IN2vTs2O8PRfGR+udMBY1TGPS+H1IyXIEa9Q8MGdAQ6PdO/m+9Mecxv3VDjgAPF0c6iiLgP6TWteu3Z/Q9X08FkR307C0YSiy1/W+edhxIveTqz9IG72msKc9KnHpMPW+i/DnIp8sMz0xDt1HKJeWnmP8rVDjGddCRuMdlYI1JTCfO4D+UnLhjf5mrmxD4Oto9HiMMdaM7vcYGorb90OikVE7+bXXS7QBK1eDyLElOaFNMH+fXRZY7dX05PCWloKC0wLxKcyNwDyheNdKuQfCQW/N9u3S+jQqInJWi+fLqqQk1kZ9a8UaYcnCudScV6lmAOswt3fe/4VQQn6BPnOBma0DHTIh046TrqUeM+vxlM=","layer_level":1},{"id":"94ec54d4-0aa0-4e58-8e63-5ad6ddb6edbe","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"型号管理API","description":"models-api","prompt":"为型号管理API创建详细的RESTful API文档。记录型号CRUD操作的HTTP方法、URL模式、请求/响应模式和数据验证规则。包含型号列表查询、型号详情获取、型号创建、更新和删除接口的详细说明。提供型号参数配置的数据结构和验证规则。文档化型号与OTA固件的一对多关联关系和级联操作。包含型号搜索、过滤和排序功能的实现指南。","parent_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","order":2,"progress_status":"completed","dependent_files":"backend/src/routes/models.js,backend/src/validators/model.js,backend/src/models/Model.js","gmt_create":"2026-06-30T14:04:55.155975+08:00","gmt_modified":"2026-06-30T14:23:05.599822+08:00","raw_data":"WikiEncrypted:bcjkcAe0RFiHL2SPRK7/uu85puYZIX+C2ex4+pzpdOn7cc1yaAAdUNe+7jLI7NvrHR5bm/2WUlZK6ZPtqzIQ5h0MnUhqrqNYJO2n9dYhyGDiNiCLvP7MtADJJoOS9141vtPVyHqN4otRLlyIifGGezJM1vWbuvIjzT3531HuZlQza3qam5PnHzCRxHpdpyS3eiqsaeCSEchsiEDJbUFvYr1KBaXa2ps4E3o7ic8vIuM/9QG22EqqaHhAY0z6biOMmr75iziBVtp1hd5dj+3s51Ve4h3Usic4VsaoBiWRXOdsvNvW/MOlXNkPJEW16bJHBbDpRUxnRtDnllNoDKyIQFv8JCEStTRG2IvVh2idTbw+IeD4K5s/j01K2awd6rxr+fctkw7X7fZhmmSgSrjT83he4gEUIomoKQeB3aFuNkb48nK2QwsvwuSOJ0hxMjItOlEALvBSS67btN8JKIx21hTuR7Mz1TKqrl4m0CuW9B+7j5Q4tjVckzV2Oe3SJkk35c9cay8fZMJyaia1kh3EzZYXlT/w5nSoPQTG0DCVTBHYEp1lzav7p3SLsENxTA8VO7WAwZNLCodOsbVRaxbZiys///S7wbk4U9Qu9CqxOnRaQnmzEgCcrtOtfPyGA5rgUFlnp8GNwGIpn+jn5KCwd/vNLDqxqpWWTPrirGgxvSfXcm8dT8PbNoJMLR0L+rzQGlTayzJq7FQcQBa8Dap8Jl04FxuJy7DupYAQKWdOd2Rh5LNLGErdQjv/vyVLIMsYvWYF+PtkNdSiES22Kx++X2TJyE28/tWA2ovQ/TV0iT3e0NK2YEyPEHpyobJAZo7XI3ItEM+ng22yzxz558FmLg3RTcVuI4OQ3b35JTeQtNU3Pg46YkBj1UWCHavm2CJPKcqi62KcsnHNWMb42y3EGVmaUdnFNOqZz/0JQvTftxV+pjzGj6CdxyaAneGCOUzKjMtvJJIRvc65DB4bOt5s62Aobzi4SlR4LUmmDeZky54cwkMcwrpNdCrvvGWdLoq+","layer_level":1},{"id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"页面组件","description":"page-components","prompt":"创建页面组件的详细文档,全面介绍各个功能页面的设计和实现。详细说明首页仪表板的数据展示、登录页面的身份验证、品牌管理页面的数据维护、型号管理页面的技术配置、OTA固件页面的版本控制、系统用户页面的权限管理、分享码日志页面的数据追踪等功能页面。记录每个页面的路由配置、数据获取方式、表单验证和用户交互流程。提供页面组件的状态管理、错误处理和加载状态的实现示例。解释页面间的导航关系和数据传递机制。","parent_id":"aa2583bf-2c6e-4792-b794-1563db547d08","order":2,"progress_status":"completed","dependent_files":"frontend/src/views/home/index.vue,frontend/src/views/login/index.vue,frontend/src/views/brand/index.vue,frontend/src/views/model/index.vue,frontend/src/views/ota/index.vue,frontend/src/views/system/users/index.vue,frontend/src/views/share-code/log.vue","gmt_create":"2026-06-30T14:05:00.060248+08:00","gmt_modified":"2026-06-30T14:24:27.142952+08:00","raw_data":"WikiEncrypted:olK3r0l78uP98ua79qDx7UWSmXb2E1v0sVKrAVzGYuIJHPAueEFJ7X5N2BSDrAuja5b8BTuELO8ubSNrSkgP/Z6rORQB8Z8doMfIZES0MEg18aBljdAOxOLzrDB089hOQpIseNeWKR8TXhStfC7+I83ha5LZRaJMoo3SuuqIzp3RkRQ7Do5v9wPCFg1iCbQYxnjwxm6zBRiSnHN3K9VmnziSCPrAqvYi0G80OkTVJZxFtRGsHzRduLx92WHhDfqsUqydlWWiPmv8K5I43pyYLMEgtXwCTysGp1UWrivekxLpUEkNAc506Rv8F3ZlL0VFyZUPT7bbz9ya0HADXvlAL2I0bLkJFkjPSUFTni2S4GtLHqH4cWROJC9y1Q9blmamNoYY1jJmJyU/NTSMC98Zqe86Efc6uTBDtHxQQX7u47icPzu9gG2J8JodxRFiQ+sVBNhbDm9gZUjKy+a9zXMBxeUGEi/CKi1o9KLgT7+q0gYw+vPb4NHgptzD95TSruRKHAi54z7oxcpJxKyvK170w75cV1bNR1nPVFvWJRzAVB/KKwlo3aLH5aXe4a27+tlLxjJ+pJyZxAv3WxfYqBc7yQQ1sROcMgpuAY+idES+OB+qeRzI2tSm39VjWsmEaq8xxLzlTEgOr7lyZnZ7jpasuYj/ZreCaq6541xuVsJoho8ADkSi8GB7Q/aWZl+UxNj0y4S/8MV8O68/sTSPREEN/QU6DMQsEYODNvz/U0qrzaIU+PBXXbfCJnxqAxYmvhELHwuy9/CUrSSaKC8ZciV+gtAlaV3Yvkfwx+855UxirdWJnEuk4lGX49tVCQG7VYE71gimwTKSsYviOMgmsyzZpUe+UN7UVNjGdW7ttWNYVtnaYua5cmOjtLBUGOrMwvlSeoxkJ5KRXf5Oa/COdfpa4d0fW0dVAtp1T0dTZWSbOk/lswh1YQUqgXj6DDw2qvpyIj2M3OzlFScFjbYizbh3JWD1vz9XxoQZ4C/G3nyi4PLVynnzu8hJrbBYcCb3Vsug5907YxaxmHr6zx+B2O+KaeiBw3vRa+EuQO4lJBH/diEjB1IKlCxZu8j3jcHMP+NLdTEKoAHodIpqhq9SOBjnvrWxzScLZDoU38ngtUQ2H7mSOif6BesJIxuGgMu8L/FRZr3+dLA6odcCvQLRAMXJAtmqmMPVEwJMQufl6WYvE4ZiIZ9sHvMxRAU7vS5cchHtzFte9/luCpsFv3X4xHw5hOmicjsJXCXIH2gXRoD32ZFbnorAo6WQ78LcrZU7jezn9PshnFoSmHH9FkYpd0Udn5J+uubjgRFNeF7inWmeH559LGe5OPLj1eZuQAcbWOy5WCMfC4GshplBJBu06rqv4nfGiMgtpER1L0lXIkxO06qqYWbcHRP4vaOSvprxHyh9iSL99YknTBb32b+dngtSCQ4Y+uxBZ2BOgLbu7KtS2wrf+611BYlSy3j9p7bpPZOxoZYQkvn4roAPOBpPa++5ezB6xMugHAWqPH2kkxrL+fc=","layer_level":1},{"id":"00a9d595-dc79-4ca4-8264-1c3f4a200a28","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"监控运维","description":"monitoring-operations","prompt":"创建监控运维文档,说明系统监控指标、日志管理和性能调优方法。包含Docker容器监控、服务健康检查、日志轮转配置和日志分析方法。提供性能监控指标定义、资源使用情况跟踪和异常告警设置。文档化服务重启、停止和重新部署的操作流程。包含备份策略、数据恢复方案和灾难恢复计划。提供运维脚本使用说明和自动化运维工具配置。","parent_id":"a3ddc4e4-116f-4781-ba9f-17c85c85396e","order":2,"progress_status":"completed","dependent_files":"backend/src/config/logger.js,backend/restart.sh,backend/stop.sh","gmt_create":"2026-06-30T14:05:12.313816+08:00","gmt_modified":"2026-06-30T14:25:08.613907+08:00","raw_data":"WikiEncrypted:HL3VqGjXq8A3aGeLxAjVPqmSWC8Q8z+JISjcpFTl3Rl0A9XVAWpupiaS7EM/Upd2tazZmC4eQGSkervuf1jbMC7w061CAmhFQqOU+czssHD24JzzCW/dzhPQh4OdveHL1lgCBXcR5/EbIuduJDuUmEwJx8aPYEp49Cq2bRpWZ2xXxQ9geEW929vQ0xrspQFu0M2MJkvVnbxR/C1ZA/D+1XfRFtbxiW0x31u8IH0d8nAhLDViHT9HOYnEHPGBjRiTyLhwVlOqUTDNsooW+CtVaXaVamj+Zsvm1Qzfw2XF6Iwkggg0GMA3YkqEB9DFwhzkplZ9FS408azxIS7d4fS0fFXf5diJya6pNlSuA8Iq6y7g4uAB2AiIZJvG94W2dwa7z5qIY979LwHB4DepnmSDztn7ZiE5nt52n+/HGNVea+cOJHee4MvbrnaM3omg7CWLoZG/dawr+mNCxykZ1vRzxrqBbNIvQRMJ+HpOfKUKEho5u+FPTs3ukPlfGiElxzlSrtsP1WAcQFFsET8OsCEk5x6IUkuh1g4u0mqPQxFDojZEl0/RjIoOigi3cHQ14MLApz44bkfadHqnpAuoznkln9hllqFREbHcGqNbIgHnQHRzz4Be2IM/7wIIJIiGbHebHoTXQV+aHxHOWNV8sCBn9aUZRBa8BvZ3UNFtcqEZD+wrKlf8XoKsc1fvfavpnUQ5viCSMfPMK7jwDTGIrqLhf6PL3ibkfDqDFVvIx/FNNdYFfkX/8Cxs8zF79FyeiYx98Yx3rItEZJit0mVmV0SQziiDqTyirtN07F7kZBFSUjWFi/WfFDBGMw+60Qn5WjMW9AipX0KdrVuf85oZIeT3udpIrRencXCwvchZRJU+NJpAqr/6K675EVQ7ybxH7XNUGXCYyCdxqP3nqDQkRqxHZxWsWginc3n4kvhE+zpfTUOp6m5HsO64XllZ+wohWPyjrqJSkEw26JhJIH+eAL29MliX6XBYjvlgT/Vl+dlQMn69VEgVXBBA3BXTV7KzWDUKEtEOMqP6WNKauLQTYqHt53vRnAZvBL+x4IQlA2rXWIk=","layer_level":1},{"id":"72a24a80-f221-49da-88a8-83c0f49f4e9d","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"型号模型","description":"model-model","prompt":"创建Model模型的详细文档,包括型号基本信息、技术规格、参数配置等字段定义。说明型号与品牌的关联关系和数据验证规则。文档化型号的完整生命周期管理,包括创建、更新、删除操作。提供型号数据结构示例和实际应用场景。解释型号模型在OTA升级和固件管理中的作用。","parent_id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","order":2,"progress_status":"completed","dependent_files":"backend/src/models/Model.js","gmt_create":"2026-06-30T14:05:22.624097+08:00","gmt_modified":"2026-06-30T14:24:50.789071+08:00","raw_data":"WikiEncrypted:o5cr6Bo4m333A3G+lRdTTxRACU8j2qQjGF3ZvWCBRJVg4ygFbHKJwjRB8JHwTktUDQXcECHhFbmE4gRs0t+1cAwN3sdIm9MktHpIRSSYNyl8It7CS8c7Kbko+KOWDiia/4OYzPp1+Ghybtt7VK0zyBQN81qZaR1/UW5X18q6Nd78fsI04PQzw6oOqgto+wxHPnrvKDggDY8SsvvZmncwmrzbsOP2VtJJcNhQMXg1u+soPYJPOBoZxHDWrDPjf0okt1vMMWF5R0WFQv+iUbzBJ8PErbw3ZK+lbHsFncbKAvyI5B3bNirWYLw+0rZkmGJFY1RqV8iitjYAx76OS6oCAYwl4rX538I0xqWuH1+rXHMZIE5YXahUiRCB/5a1f4dUO4hJj4DEeogkMGOhOjR9xYWKVFWpSaTMS5Yu2gt/9XRhRwTypJiHS8yXXsr18QOa+8Z3GlwtXVkca7zVxoDQBL+zxQqUvgAwmCfI/W4+30Diu6dAy8DD1t9TipBisUO/u/LCDNc8k7jxtqnktibaTrSNLQ5aCiRVMFO3S9qwK2gARGh/+/G4ja0DMwD92UpaDcbdghx95nsPmFLkYUNLQCPdANbyN9Em639BakRdlQ4BSEJ5hNgAv246ePTEWXdfRdqUyT0m3gSZWa5Mq32ZA7AH9Go029LdBNBnzy4uJ5sSSoCfIRhPWpD2NHqQrjZEv3tfeWG5i/sx676ZFqNKV2NW2upQSmBHwYVyYDDDoQLCcYEH4WmrHvFqb7nXYmv5zeJu9YvYEf1kdEAmrfV2yg==","layer_level":1},{"id":"93c96675-6099-4ed5-8f40-6a47b3050712","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"型号管理","description":"model-management","prompt":"为型号管理功能创建详细内容,深入解释型号CRUD操作、技术规格管理、测量数据存储的实现细节。包含来自实际代码库的具体示例,展示型号列表查询、详情查看、参数配置等功能。文档化型号验证器的配置选项、参数和返回值。解释与品牌模型的一对一关联、测量存储的使用场景。解决常见的型号管理问题如参数验证、数据一致性等。使内容对初学者易于理解,同时为有经验的开发者提供足够的技术深度。","parent_id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","order":2,"progress_status":"completed","dependent_files":"backend/src/routes/models.js,backend/src/validators/model.js,backend/src/models/Model.js,frontend/src/views/model/index.vue,backend/src/services/measurementStorage.js","gmt_create":"2026-06-30T14:05:25.897162+08:00","gmt_modified":"2026-06-30T14:26:44.046302+08:00","raw_data":"WikiEncrypted:o5cr6Bo4m333A3G+lRdTTxAyrO2oPW5FnBLfa9j0/NKm3J3s2Q3nFpNDceHQchIAJJY+Esm+kwKbYzPD7sJYvxwkqnm8241LNbU4VUDyMUdH7d6r03XfoF+3X6h0i/nYLsTYAwxBGsip7N4hLZ8pmSKbp3BnXji6UgQjF7/CgfgpNuHgBcS6Ttlr+r0mIQUQWfypIa7BMnm/b+kbCZ6KAxJE2lrnh/B54tDedeqh5AIcFVUgPEE1HfI+I2BKDbbUP6mr7xpRmRgRiKXp8Yu67KEi0BUQ+FZwLXrY1wGjxxfqx9SkDYvu86roCAryofG1eVaY0h4ewMz4SCGkf/SdMml462bXR/sV1zeIIVj1LYEgFOyzujC8mo24XFEyhSI/kPjejVr15vOSotQURQl0xlE2IFjLAFkHMaFQt2fOoF6BqtTfUng2T1ylI0/yJsicbJ9ClK7kiT5d07qaeITW47Lz+/vpzl4Z9SdPAz1tmpazg1IvId5r5npSaoHBeruslMdPktamlToVWKIFh8cao9LDql/Ac0A6n4bvp/Timq79TU8jI1ywBPc4iksAq/WvJllEhreDIo9ooiVo8TN9MarWoxp3sekBzpDLmM59ezqD5cSaL6NZ1GGoB2VInXcOD6FE5RVlRm8v95nL5c9dAh359XB0d2XQt0qL9kk2BTvzCvYluwMux4Q6uODwl4KOTA8wzsnduv4NBrs+0GVI0Lpe6Jzis4IhfbBlkw+qu4kA09IBnhW+VONArqmbMJdXC0ApM9coizPwpgT68V+vhd7yfAOKEdSVNdHU9vZq0CIyW6CNfpfS+jKHimw2Kzhaor0uLsTJi4cQQxXe7L7C4Yp0BcouZC/Ho+SuVmpF3lncKMdA8FsoA9mWEXfucDdM8kZXhQiOb5hDwuNrbj2WLnP6KdtzgeHwIDIaEItLgyf20R5Tczg4vLl/EpWHdC2xfURLEYcZQnSMyvicHCoWScmahBPG7V/Z7HAVdM7WVHJJ/Ie8TPLPx9jFbbPmFEhFLKlLIGFzlv+2FNk0dnPbSUE9JN1qXuzPPIZWqiKnaqMPNkBQF4ff2AZ8zr9rE1un4AAJyKw3CN/Bulad6OBAgA8tQ8OQauG4iPGQftBkGgmTrtpE4lAyxTxOlTgs6vAbglfBzjEp5MFc7o7BKyRcsp1dEZGj/ZhwMT0fyPYTjhoIfXV4r2YKMA23EhKXjVAsJmATLtBTrw5UDJ2Ge4PRxWFvsAT2G+8nsNh2NUvNG6TruybUm8Y5o8ifHmhHRgUDKUvjv5ksLTcv0TKEmwIWg8G37ovmuo0FAwOr1bvXK9utPucmZCGtPMxjLJPBmNpCDTAyc5AZONp3fMeWOU5cWG+DSiMlLU9llTtmGaseWrFc3JWp+lbkwzfLj4WmRElyxO8XHDw8f4TvpO/qeAqwig==","layer_level":1},{"id":"32dbace3-24e6-4a2d-9f87-83f2ec825b71","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"密码修改对话框","description":"change-password-dialog","prompt":"创建密码修改对话框的安全交互文档。详细说明密码强度验证规则,包括长度要求、字符类型和复杂度检查。解释表单验证流程,包括实时验证、错误提示和提交状态管理。记录密码修改的API调用流程,包括旧密码验证、新密码设置和错误处理机制。提供安全最佳实践,包括密码加密传输、防重放攻击和会话管理。包含用户体验优化,如密码可见性切换、自动完成和键盘导航支持。解释与认证系统的集成方式和权限验证机制。","parent_id":"eb78ed75-b786-4b43-ba43-58a5ea8a23a6","order":2,"progress_status":"completed","dependent_files":"frontend/src/components/ChangePasswordDialog.vue","gmt_create":"2026-06-30T14:05:28.623391+08:00","gmt_modified":"2026-06-30T14:36:50.062236+08:00","raw_data":"WikiEncrypted:MTGOV8yMPpR4TI1lgrJ8xG2DJaIBmdXRwPCl7oRCvXmCW21g6Vjoc2Fgt6nmmENvVQk6mZ+b48v5x7n1+0vaA7CHuGOaSKT1JpGPpRS/S04l+JJRC+zDXrImACBhSN+bAa09cBwSvWPWb3abEYtmKZTzRsib/uzjiZZSf1sPa82YEOr2t72Zm1OMMiqS8XA+qsZEzYiwLmiPLYFL+guO/3HaXe46Do0MMkKmltG7SdeWQpg0oka5yh6krSsT/W287f9JlYbkuaKE1DuvTnJQP+AnABLGN4UgZkrNvRu7pkJDAaUqmT59pSsjsT36NdrgsH/M1TPaMUk7joUnZc1IdIj085VEilPnS5PxTJEGHREbxVqxKR30C/5r6GnnzdXr/jrRhHs+UhBMOTdxtXGexuVx3aVzvCeBi3sRmGGNEzB7g7VsMJhc2HjCLYbeoIc2RP4XbivYLI4jkL908EQple4la3X3ggTZmmIRB8tzgdn2H/zDbaJ2ZCuI5cpzFamtwC2X6eLW2I90WLydSARo13ACzls4tu24apN25mQi0O/72z+V7bdoohJxqP+HlYsJ7MW2YFHCc18sKduLVLZsdqma8YQsXwV5EgYIhKAl3Mn0jCJvMHHA1q54m4MpedfXtyxUaV3Z/QbzKZiNGylMaUcTqeSxrwmB2Us4VdoHw89a2hUjp9fpAneq1lii4WlWygpjsZ/xGZPeEZNS2sLZLu2iV9btxVdJtjr14fDw8t817dq71safFgmrfgWmIwy4tBuQt+sUoYEHPBA/8RNuqyzxybwdhwFDxW8nUeyILFVyC0NFnS+jYQiYM4ffGs10mGWaO4Hw5gQWNFE0V2rXXTfx6xSF0eq/KXLoMuB8Pvey/AELPNiW8oveBlR903q+smsgrLd96oVR4kol5YN914XfzjM3kZBz/muAYVbsDBMKbEbczayPubwLm5zMFOuShES9MqJH/Jbzr9kcOugPx6sl3T8EMJGTuzlEnCi0Fc3Xukfm0wRx6j1iRYvbuyk51s+osNojspt1+OlIMIZDXtjf9XdL0wfoUql5ZRzDh3jNfbGv8VRxV6cKWIrlEiYphQre0T838CYjw4UVA3KOwWuvhCXU/fl0llYLZCCmfsyliuUVex+HGMwN4Djvkus4COjxzp4f2DByyquV0del9JCQZJ7XM1H0vW81c70BJuxUZjpLeZK0B46qiiAu1d+7","layer_level":2},{"id":"af7f747a-9be6-41c3-b091-4ee5901d8cc7","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"品牌管理页面","description":"brand-management","prompt":"创建品牌管理页面的详细文档。全面介绍品牌数据的增删改查功能实现,包括品牌列表展示、搜索过滤、分页处理和批量操作。详细说明品牌表单的验证规则、数据绑定和提交流程,以及图片上传和预览功能。记录品牌管理的权限控制、数据同步和缓存策略。解释品牌关联数据的处理方式、级联删除和数据完整性保证。提供品牌管理页面的性能优化、用户体验改进和错误处理的最佳实践。","parent_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","order":2,"progress_status":"completed","dependent_files":"frontend/src/views/brand/index.vue,frontend/src/api/brand.js","gmt_create":"2026-06-30T14:05:55.602772+08:00","gmt_modified":"2026-06-30T14:37:33.764923+08:00","raw_data":"WikiEncrypted:MpYke5d2PXdqtxI+drCrLid0YsRsuFzxrKFl1UH2EDILD+4NmryAJ+q2oYZ42eaiuwvs0ff3fJrcmeJphvg6shRr3y/1Z6QIqf0SdVu8YJToiL52I9yI/YQ9QmrCLTmSJK1Xn0gikJy/Ur1L6mQ4487hhJQ5ETrEyG74ClVaJFLbUcjoZnico/zSQru9m462u4XEGzLdVl3wBitgKCowMgtQp8iOkg6zYEOvq+vQd5ZMUpRGtPDuGd5LGl/sCyJboNraB5fpHqavDpi5YE7ArXMWdq74EgB0tuJXFndniw/KReaPlNuLs4cZb5MnMb/Zk/FpXzVwYB4qeCuD7TTz94PbPh5lQUUSV1nN7I2Nl7KrP7WCumRo51Bsp0EgDTJ6Lv1FBBouTAIk6SOJy7c7pHKI2bVjdbYhok8sqJoO1zP8R0kKkzlWVqR1eqx3c7vZlMT4qGOrIZltbmw3MS0LlfxkOwLOAeA1wiOuMsyxRh0rW05bslECO6N6C5nvuooj2pIx4UaPhTHmavcOt1kHG9pMEPh2Fb6VZOpYFKDG2zyCIfnU3fVAoD7n68yLyuJHSMnM+EsWqLHsaBCFBaVOUW1k8eMzltfozTQzFUlpASncW1hCZDkH9eAByXunfMzj3cRR5ij6yv+rlMx6Kc8OJtIHMXfY5Uug4RoC41bw1Q5ApjCy7rRFRC3MXbXBQKnufuVAvtk6ldQ64s34dZG6Fs7AuX3T1VWSDjReGTa3JKhARtr2k1xtruRq5ugRY0wrRTCkAiW7nE3grXMt4101VFK4QE1jqRxjkRPVCz8B5lL5TUqxK8KFltj2NZEC24YU36Zz74rntRYqZwbl/pRQk6uP5TGiH3pw7xActW1I6ySnBBrJsUONt01juQ4Tqr7+S/JJbR/vkryj65Kc00zCRsbkeH0dXxmKUKB59e915AlLc0aQRlXRhTlfKUr7/IMAd0n9HGSSaKcRr69ijbll3opHfyRpZF/uF0kmh03HjEredmCzrYx9fGQUTANJX2HqoONB4ms4Qm0j2am+UjAvbBHU++SpwlZBkP1aR9KuMN4uKpX4tUjL8tDJRGW7ZU7W","layer_level":2},{"id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"数据库设计","description":"database-schema","prompt":"创建全面的数据模型文档,详细说明实体关系、字段定义和数据类型。文档化主键/外键、索引和约束条件。解释数据验证规则和业务规则。包含数据库模式图和示例数据。文档化数据访问模式、缓存策略和性能考虑。指定数据生命周期、保留策略和归档规则。包含数据迁移路径和版本管理。解决数据安全、隐私要求和访问控制。详细说明Brand、Model、Ota、DashboardUser、ShareCodeLog等核心实体的设计理念和关系映射。","order":3,"progress_status":"completed","dependent_files":"backend/src/models/index.js,backend/src/models/Brand.js,backend/src/models/Model.js,backend/src/models/Ota.js,backend/src/models/DashboardUser.js,backend/src/models/ShareCodeLog.js","gmt_create":"2026-06-30T14:04:20.637975+08:00","gmt_modified":"2026-06-30T14:10:45.950286+08:00","raw_data":"WikiEncrypted:veTYwq2y4io5qXerCTrkkKY19u2QVJ1rg3+MIy4jIV1T7LGtk0NNZTeyhAbQ+Kw6nKL19/84a+4Ky8TPQGUBAMv+/6dJGLjO+JY3ZnbVJix+JXTUe92A0fyeezyoI6zxn0BCAAx7GKkFkl72yB7LDQCZmuLQu265aq1IM9ARxC5hoRrKFrUfmial9RptFqCk8tXMOwlttvntP9DLL0Toiim2N8rxuTj3PZ3Sfi2OoqyGs9QmcT5sZkFv2MzdkRWxlRj+lggrQgwwCEi7PAKwJUu8fAL6D0HFdfQ/zGBjnr5HmJCLcdnczST1lLXFTpVqg2yA7ejV2oYI07mzPC8wxSIMZ3razM55hNHeD7TIu0h+AASYH/fMFx+BavsWSWVibAj0+GY3nVB1XGEdf8tKUxCt2tLkzmNC0ONaFrb1sH+u3/NACyBWp1XT485tAbYK8nfQIKYCsxMN3A/5DrVsuo/qHfopngN0j9+Ezecg/k9Tpmt1WNL6Q3XGKE+SH88eF9LePghhx2s0Cyeh8dtxlqwb3KvkFwy/T8YuSy4I5txe2e3KV4B+65RBbbnRPp9CU+X/MAW0EEPjUDUcpVTF1RrZp3uD2ugvmRoN4WNDuXqn+O+o02Vm53g6xy0ZAjX2BiUHbtGhP08k5nBf+6vc6Qw11ko3WnqZtpqJrpu2/pJm40NX/r3Gxcwc0lhxO3Q3EgDEQUNhM6kykwBc5roxz1NZn9gecFJ/vOtO/a9ekqeknKCjw+PYmE7nimMApPoaSzADSa7ZF41I10SWY3CWWqNFfZ8fs1kpjew0mcbEAcyHSEB6Lkt1zJclVbuowc/XC5n6bv4fqkK2/qfT4i/h1zQwLReqBxHagDNUFMA/qXsFwWWSsqOnBtOJV0SnMYqryPf8/tcUVYavxmkBnmXvABNj45AhkJX7xs9fc4CPoEHcxa3AyPkvXSy9v+LTqOitEoO4BOyQ+5o9KELKxVwWW6rA6wTuJK0VnDMTCO+sJoy15gNLfTN1KZORVVwPly7IRW7yO+mCCazqFfoXR477Kif4qeBnWPClMQFLaFJ+pEgvIJWYRUNfKcw4vc/EkyYYeA+Hd1FFr+O5DC0HXhUctk8lYt9MKtZH31RCBZFL95fvmg6+hlxpcnqGgPyYX3RhgESPLtQRADQH9MeBW9GkS7EJElfVnVsfTOAdmSos2AMVYslDP3x1z69CIk+639BSGgJNNyprE87PTRKUxY4eHCuVmALZYeo53/n0ryOP+Pm0RrLO2OoEdwDukBlzJqujjYntHapPf+BV9MDdrQJhuaaDPw+aEW6SkitZwp5cGi5x743nW5gBNH/3CtrEysupQXlFxxgAhYXnXVB7ruWNWK7EuH+8oIfmNMJ4080SwxT6REnUV87E1DChQd20pT7L"},{"id":"6cd96b12-bb94-4748-94a8-9ef9bf21aee0","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"集成模式","description":"integration-patterns","prompt":"创建集成模式文档,详细说明系统与外部服务和组件的集成策略。解释日志系统集成、文件上传服务和第三方API调用模式。文档化微服务间的通信协议、消息队列和事件驱动架构。说明缓存层集成、数据库连接池和资源管理策略。包含集成测试、监控告警和故障转移机制。提供集成点的配置管理、版本兼容性和升级策略。","parent_id":"70ba09ee-60a3-41f9-bdda-3cb904cb26de","order":3,"progress_status":"completed","dependent_files":"backend/src/config/logger.js,backend/src/services/curveClient.js,scripts/upload.sh","gmt_create":"2026-06-30T14:04:44.766596+08:00","gmt_modified":"2026-06-30T14:27:35.809057+08:00","raw_data":"WikiEncrypted:0j4RRfWJQdenLQLpT+DwLY9h0ctWLZwu8+2HoqcoTgcS/p644+VTtfXH7/YdC+18sAix7E/U+9fJqjMUaBv3jH3dXtuWslLxziQhE0mAM6KzXiDK+XHdsDX+pH5TGGreF1MypynKLMokPfyvDKXXvDb/K/htq5rDIK7wn4efMGrpYrHlk26HkWjVSHgXWa8mSvCzhzivdxiPFSzM+bFHKmAil3znEHtkwMtneqShT9/7CHzIwjUUkq4PtBv4zoyd87sLPzIHBxV584WgWr+H9HiHl/rgXIpGmmyxvut6aE6Mc2v5WhKYnBXayO803+sO3YHI6rRIuv/B17E6Q0lLwA+1x9YcSWrwXv0cmDijT/4f8uMl7RC7jSivX0mlv6dFtsZu7V/TF5vyEVrzfMMxsr4VQjceTo4zW+y7QufDdnvlGRr+S0DFgAlt8IpDnp49wmm2oomoTmIRf3OkwdMZEIGJxUmtNR0zcvCIdBh1KA4TQxHOKFZFOt0qaC9wAFXB2mUD/v6im0DNwlC9lxd0YSEHf0ZvG7AFzBTCSu0s4BrXMKjBlQmvbYHIztwKEe+eQLwn+egVBK3fWzCesFrLhQolEWHZge33dHIVt/jl/VAu8cuAjZerwX5ma+nYjVDSkJpDBLFeII5+/XG1QGVnFeHRw8iHrmbFjioXBvDGm3JGK35cJYmKDpCNswcTS4czKP4q6iapCga0KZHCA25UqbmW7fFBBJBnLXJSnap5wZL2/cXVzzrMHq0DwVin4TCmhatx25HzI6WSkier3jGKtRxCBPDJy1i6AaUNVTQNQmf5WXG/3+KTgWXojmRlUQcRPCxOO+jVRiuENVql2W2CFOHb4PNkmO2ybwjNkuLawNXMRTVnDlyGmKOj6/8+1qv7NkG2VU3x7q5QRh4EOn1Xx5OL8wK3ZIo6YDtZQMJ6fAt1a/Q1V1P+xtU7nXtJrP94p+lh+S8as938vJI0ks+Th12f9lM8x2O0q3crMtXpfTiY5KECIAVrHQBXIgP9mDzicaW90vw0PhTRJL3zNVMp1g==","layer_level":1},{"id":"41e8823b-fa7a-4a80-809d-cf21088bdba2","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"OTA固件API","description":"ota-api","prompt":"为OTA固件管理API创建完整的RESTful API文档。记录固件版本管理的HTTP方法、URL模式、请求/响应模式和文件上传处理。包含固件版本列表查询、固件详情获取、固件上传、更新和删除接口的详细说明。提供文件存储服务的配置和使用示例。文档化固件版本比较、强制更新策略和兼容性检查机制。包含固件下载、版本升级通知和错误处理的实现指南。","parent_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","order":3,"progress_status":"completed","dependent_files":"backend/src/routes/ota.js,backend/src/validators/ota.js,backend/src/services/otaStorage.js","gmt_create":"2026-06-30T14:04:55.156101+08:00","gmt_modified":"2026-06-30T14:26:52.749254+08:00","raw_data":"WikiEncrypted:E/YLj/vjaxHA5L3+/DbcM/RrsyTj+zs2iY0gxO9VwkrctdJ181Ln0L3ooRB4LTne4VfMGKZQ6wlTj5N/X2kXcEukZ9Fut02Bs5XkjPHI+2fVI4RjZN0XzwIQaHtBgl8tPykchP+BDkn7x21JPxM4faRabHD4SQ8f5w6ZTPuozmHMS8B+EHb2T7KjC4DoC1RunkTRgUzQ00ZOlbAQ417Nl5iSzdfmRxQ4xxXxBHxg7QRNmHyXXkYgUat/sYwewRJ7vWadFGMWhqvlypgVFw2ueYVxtwoTgfWRW3xSbHeuJMn7RF/FWundtS5a3WwlcFzvmkpGXhXanm6EBmi/g1nlkr1I62+iPGsBnn/mYzTCs9N0yzg8pjYlkjWLhoYnWzFCcwNjWuOis5TkACe4F3Enn5/lHPaUacKkjRUmCsmyIV+YCfcShFNlf15kqHmAJzFnwpzDTA7n2GDkXwAcTZVUsDiGIo9HcXj42Nj+gmNBocNtwCrq1apaus8+xrRBA1usRtf2XK+beNgVY8HakOY03Q88Yn6RceXtZURlft7w094WixUJXMU2VtwSJLIC/MnKfNzse1s3D/QatR22ivu1UxhLoQwKTdXiOCyrSysBf5CmHP+PJmWexDMBbgw2op1BNhxGV8ENxuFPoq/jJ6AciXYGnhe0HLsQZu3DGhtOKX6bhA/ylWSAqpKAn9MxTvI3s8M/gDD7dKZnrafvi3SyEI58q46R6EEAayRfg7w8pX3mpdDt+O0t2eN96w52Fhh3VFn9jdhnWBnEVhm8E4C2cUIrmVa1SYlBUaC+2Fuf171p3d2LjtzevaIzC3KDVOtX8VCAJVzeLbpOrxd7bo2He6Tj1qG1ElYp329PfO5BbMt+FDxZXT89pJQbxxz6faNUwaVjAWzvfB2RGDuugJFagSKpW/HMZJWgQwWRdG1GJnqI2xu7KnVfTb+VK+QPbH+TOkLtxvZ34sq+Fe9xRTH6ffAgL3GVhFx17Byd1mIyFtAcAr8SadVmB18dr4jmgbxbP2EptnohyUwoYMfihQqTaA==","layer_level":1},{"id":"02f97459-8352-4fff-9216-8fcabb128d77","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"故障排除","description":"troubleshooting-faq","prompt":"创建故障排除和FAQ文档,收集和整理常见问题及其解决方案。包含前端页面空白、API请求失败、后端构建失败等典型问题的诊断步骤和修复方法。提供Docker相关问题、网络连接问题、数据库连接问题的排查指南。文档化日志分析方法、错误代码含义和调试技巧。包含性能问题诊断、内存泄漏检测和系统瓶颈分析。提供紧急情况下的快速恢复流程和回滚策略。","parent_id":"a3ddc4e4-116f-4781-ba9f-17c85c85396e","order":3,"progress_status":"completed","dependent_files":"DEPLOY.md,backend/src/config/logger.js","gmt_create":"2026-06-30T14:05:12.313976+08:00","gmt_modified":"2026-06-30T14:28:16.989136+08:00","raw_data":"WikiEncrypted:CaKOW8OSSWs4aEYk06Hu0tuZET5JxbVXxA/4vFailoRiq8l6SCRMdp2PbHfZPheZsOCEHlBpUkVcsULRxIpKUNxtyrd+LvcQjieQsOib7J2aYZb0jdq6DIsuIi9OwAqdeUo2sZ7WFYO0MjrDHQbEi0Fshph1GHL9lpk4FW6QGVpOX6LlZSlzzcg12dQ/7lfGLDNbZmC+kujhPKYB8y+Qg9DI/RBQ2izmG4m7XYoA9vhnY3btZQDjWIgS571TStZN+2zXE5D5wxyq1xW8sfVZ5aoLYIpOUkLMXsZXRuxThU9QEIsRrWxkIjNZ+DYovCzw6LfTUmjulPUu6g1fGUvjvcoT/wPnkWfZ3G6dkEdl2FNK4YiCrP5dIB4B3Ce5xXB04QOtueqxEA0ky3S10aN1HSYiNKLbR870IYZ5PIh7MQS6IVZ/xNU59dvYs1yYgWQzaTkW6h/wP9Qn9DJK6QJ5DVvqn7nn7UX9cmZTZdcT+EZvg3leLG3nUxl+rMg5moRbt3A+XJT1dR13DsgLjPbPKZ4+nDWJghDjUIQZ99/91AZrw0kPKbFba8YYIeLw3/nhshLooOLS8HHpn1RIwSI5C4biKcdxCPRgDq7LZn0X1aDqrw96+lKqgEm6PjrwBIpvhmWlr49hWd9rom2ohJAa1vkvUioWyGjsohChizidHzag+5Yf0ktjenGomBjPQc0ENMHZVtWmb0PwqR/Aj9IYfdLU9XmIH5NXLlNKtnDGFvqJOmCkUY2CjoQ1zLqXwcQc5CIXmeV/dew+CZh+lzcp19HqYDyuRJJeUuBxtHHC1E2fNZWXAgpNogDVGUEEGAFCS75/yAGV+eZWApwi7P8EYbT8bEi+lkDzWOMRG3R7uHZ012uwytQCgcEAx89CPTQRdvwzuHQCehVV5of8lW29MsJcCKWqYEUbKm9xGdGHMMcALiJh3Iijn108J7RBXVDNLIpQWWYIP3jAufqY8lz7wi06ibX8LgPQdR69b+ZWDEJ9b7RGOf9xsem9kNHlcHExDfpPlIUeYCTnQ+UAvW3BnA==","layer_level":1},{"id":"92ff3472-40b9-4adf-82b2-faf5a4d4b158","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"OTA固件模型","description":"ota-model","prompt":"创建Ota模型的详细文档,包括固件版本号、文件路径、强制更新标志、发布状态等关键字段。说明OTA升级的版本管理和发布策略。文档化固件文件的存储和访问机制。解释强制更新、可选更新等不同升级类型的实现方式。提供OTA升级流程的示例和错误处理机制。","parent_id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","order":3,"progress_status":"completed","dependent_files":"backend/src/models/Ota.js","gmt_create":"2026-06-30T14:05:22.6246+08:00","gmt_modified":"2026-06-30T14:28:22.050373+08:00","raw_data":"WikiEncrypted:M3g6T5zNL2wYgwI+v2g1k9TI04v1ugoF7zKt9xQvyuZqaGjJRFmBqKV8Wmwm/3SJ9Qv4rq4MrNZm9Mosti7r0obMj+m4wfrTq8co2+WGKMrYflsRbFhqYh3bwnRVAtBUG+oE0xiunIHCkbP/vnG9SBSl9YG0F5IlWVZTiJo4o240+pE9i40J+V8UwXtMXUWVIsQrA45pmgpTn3LfGupDTWIZ32ZD7WlYT4iTdOOe4azDCok4I1Yvh5kjTJYmR6+IggUUDFRxpFqxUyRHUCPAOM+CBB2O8JGPXOsn3M+0GhQ745lCytF2fTMIBwfB95CvsjNL+uIdYn68JkatRsH7lCOQBVWlNM3zJLvpllaYyA0NAYmiDZ9v48O25B6goFiZqSRDq+5ZFHPYhtmEGQvhr6vG3K6UKm1/8MM+Vhj2ys55M2serDCbPBieNvEsFp96ehe/Hg11TRDvaRr+b/cBcNmtD9NulFxM9jS5RmzGOpHtlF0RiurSmlao+eaveVPhKnTINLe0tTYSBtsYc4K2uriWVijJ8XYIvSE/5W9k7yhooovbDmKhWzS1eY1LMTR6uVCGXR6QPj60pNUVRKuuLQYtR5Kir4n5gJLT4VyoOPy5ZfSx2zGEKDHVGxrqdHKxP17z6R3L4wh/TNCj0rYBxmsjekn63MFHY9+xRbzKwuqYjsBjp7MogvotIrInX1awMAsoaZ56ODV1c6oNA+DtlKfy4CHExNfu0v5zbz2siffwiRcjzPcLH03x81xKluRNRjtmC7uzOo6qUnRwlYOHLg==","layer_level":1},{"id":"6dc54635-13f8-4ae3-b3a7-54c65dea2997","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"OTA固件管理","description":"ota-firmware-management","prompt":"为OTA固件管理功能创建详细内容,深入解释固件版本管理、文件上传下载、强制更新配置的实现细节。包含来自实际代码库的具体示例,展示固件版本列表、上传新版本、配置更新策略等功能。文档化OTA验证器的配置选项、参数和返回值。解释与型号模型的一对多关联、文件存储的使用场景。解决常见的OTA管理问题如版本冲突、文件完整性验证等。使内容对初学者易于理解,同时为有经验的开发者提供足够的技术深度。","parent_id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","order":3,"progress_status":"completed","dependent_files":"backend/src/models/BlackList.js,backend/src/routes/blacklist.js,frontend/src/views/blacklist/index.vue,backend/src/models/OtaTargetDevice.js,backend/src/routes/otaTargetDevice.js,frontend/src/views/ota-target-device/index.vue,frontend/src/views/ota/index.vue,backend/src/routes/ota.js,backend/src/validators/ota.js,backend/src/models/Ota.js,backend/src/services/otaStorage.js","gmt_create":"2026-06-30T14:05:25.897556+08:00","gmt_modified":"2026-06-30T18:39:56.546904+08:00","raw_data":"WikiEncrypted:xd9L+Z9CK+rU9nPZV+aXHWAC+ITudx4Vmx0ZKTalqXJh9lrnWNCrJ6gjfeCs+3xXwLzs23BTL7qcVvNIUwEHxkOC+w2ZMrQ1yevYg2/xv43z1QKbxDHD+DfzVy2ip3HR1VE9OTicG8Y/HrwMuTMoN01llNhSTwVedKRFFHYLaQputwV4j1HV3mE2NM0kpMMJn1mGpOGgHYkTKOf6tqPWkfrJftkYGx1L9B8VAvh2tDHYxfKVUf+kxMc+AJ6e8nWV0nJsF8w6NDE4XPlsgB8PrDcXB4ASY0z1XuH6EW9nukhO2d54uVAXQBHVvqMC52nn5dvSjoOBVkoPIfIQZPBNcjWk+QLBqGgywdvJ9GvCILSorIgIUwe7Ty7UysVETKO+/91YlQ8g3OsTfZrRfCBCzwFPOOevT8PB1+s7rRgEcoOXVJDID2u/DO0CxO8TwhloI164hCOS7Bh4vPIob5fjB7W8huW9amUvUHXZ/6WgYtLUCzryhX3j16thLsy1HpDNrrEsxvCsPF540QoEZOFeroPtzI+GmlQKrSXS3ZnK8JbSCDmIZXNldzQiCRKRrnTg6+H/CyxpFCwNE44a7aBwSEryvtFRCCkAu690Xxc41bR+0IdguhXyL2yKS05K/VaocMmau3zZdsEv9Trwv+7BiQsxDp+RYxV4krfwGfcMwovPo1wRrQx+e/CTjhudQ36biNfUOSLnANYK5dJX+lIojP8LoBeGchUcYSM0wC8WvzRyJ8LbsFdaMJpRJ++Eam+wCC4IlpEGGVD4zn26u+OgfVBG1us2bm3RtlXYiAgi1b147VL1clma7bxzYt+GggXoZ9uZ3acqLztxrQWMFbK5NHpavUjTA2IbEQnxiAnvarLySz7A5g7ZnvaGqScK0PXek5ReiM8Brhpl9VcOLbuPHdqdpOI2JRyKb4u5dvw3iFYey7NdMBbuoLCLn5kZ3RiOz0xPZhazE/nE0YYVGlLU/igXken5QeqmfFIeE5PsudWa4GmfsIyuDCj9uOsJd3dY8Dg6sdSc9bhGkO5HHtM+fuFI0mWS6jCPQBCcFbnHp/uRwOL+6HFcpDYLmSzPKRFbVqAIVLuk2dezAieYDmZEo51vbYm+IqAeA9I261+3vpU9mg76oCMnWHwHlW9tSWweGNXaYU6IIA8N6Ad7Enpw+tz9BKC491F/JmJMROXqeetf0Yvhj9MtizDZ2vxfMthqEFmqDh9qgCrzlx5bIWa5gWbzhOG3B9kUf0GuXPbPraZ0cAk1oS4dihI+/TIFsdVjG6QQE4q7qgi9I+y+TV0HFkbe1MDk1k6mV7KDnUCgDXqjlQqcW2XncgtpSDIlOgXoCP4aghJql8zJmkDf4JcaXJmvrcT5S0ZJw9awJbVtc9d/JraydK/GH1FbkzQ+cP3hDtu4AIQ1/CqUwGVLRfFuGAM6G7lb79gGQ5mGYPVUAsDu4Iz7A3l87Ed6u5WGgkryavn2WdkdqKC6Di06NnbvZ1MvGPjLQmR7Af/gfcsx1ggxM/fjEeeTcevJLcvJeI1VC8Bgz6qitzCpBuwZITivl19J8MdjQNcVNKdhnmhOph1ZKvh1NC0tc2dDH5hVwtR6XrHM3GG1bZqOsofFj202PPff2oIiyh2xhk1Xxttm97WNoHFfPQquJTLNnNutWO+weSGUezVbSAIHc15G2bGpUkBUZwILvadH67980GOkpZim35NFITgGV1Iu3/oAb4lV","layer_level":1},{"id":"748c8db9-9197-4c3b-ae1d-a6e51d058342","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"型号管理页面","description":"model-management","prompt":"创建型号管理页面的详细文档。全面介绍耳机型号的技术参数管理功能,包括型号列表、详细信息展示、参数配置和品牌关联。详细说明型号表单的数据结构、字段验证和复杂表单处理。记录型号与品牌的关联关系、级联数据管理和外键约束处理。解释型号参数的动态配置、数据格式验证和存储优化。提供型号管理页面的搜索过滤、排序功能和批量操作的实现方案。","parent_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","order":3,"progress_status":"completed","dependent_files":"frontend/src/views/model/index.vue,frontend/src/api/model.js","gmt_create":"2026-06-30T14:05:55.602966+08:00","gmt_modified":"2026-06-30T14:38:54.075872+08:00","raw_data":"WikiEncrypted:o5cr6Bo4m333A3G+lRdTTxAyrO2oPW5FnBLfa9j0/NKm3J3s2Q3nFpNDceHQchIA7qn1xYiWgntWVEgz+AljimoZFfM3LVrNE3kMQpRlr2skTY6uMKWNkql4Ag3cC0UTnPNlQvkWJwYOEmU10Jn89d7l77rUg8Nwxyqzn2zoYbPoCpCLqpS8KxOTLbtRa2QLL8voH5tzFwVkGGH+5a+agk+PV3DL5DT+IAFNnknZsll3MPRW5gOtSgjc/uNcO9KnUZqA7DVC9jnEKxUlUMLTAA6jEn4/+ouQ3rC1ZG9Myu9b6C5HXybXVNf8hq8XWA+JEhitA+WW+GMX7Wsdwuha6x2PffjCctS+KLLThiy9R5cyhREhzW5QP3dj3wPa2CF9RpqxSDa7oto2W4XCr9a4zPrHL6z0HaFwjqvDmtC8FrJRfW8EEDJA/ZHv9hFD2dZLrqt+gwCJljcCEMGoVFxUB9oAxAkSn9URKXY4E7NUB4cMSpv/FwDDziT6+nl5ES8Sgvp6nasY6IDTdCzghLBLPhde/EfQAM0So8dNb8+qG7cwAtM/HgHnwVd9Oze1BXt8OD/Vx/Ejew+SzBNnhiyKBp8cStpfDtRH8Q3aoAzcORSMIquP3z0lTGPcwCXthaosYwARfgY2rchDag8FYVyfX19M9NMXAIN6asqgomUyQJYWCU7FFB4R2EYF4IBwFnBqb242GVwsiJS+tyNEaDZr/y/BdFm4dhND8qqHybXRKA1yHa/1gQwU54HejhF7CdUEE6z0mAbJ+Jaxc9jQiG7MLTLoQHMOWW4DrqWrTvN2vSlFAn7ZGBMV7MGPwFJjEdNSd7Sflql7/BA9UoJr3HUjthBTJdSqLmF6lJMII5X1IyH6VzHYU93xrnUFqHrwuHymszjb/RAE/pC0kHfuCVSozcEUmusUI/7f2u14x9pbL2phEYOlWC6vHlp/7bhURZAnNr7HGk8hNmSqYv282J4g+i9F2R67Z+c/O85cA70RIWoL1dojsAOun+2qVy90nbbujCeG9BPmjEXI6DKaUC10VQ==","layer_level":2},{"id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"后端API文档","description":"backend-api","prompt":"为RESTful API创建完整的API文档。对于每个API端点,记录HTTP方法、URL模式、请求/响应模式和认证方法。包含认证系统API、品牌管理API、型号管理API、OTA固件API、用户管理API和分享码日志API的详细说明。提供协议特定示例、错误处理策略、安全考虑、速率限制和版本信息。文档化常见用例、客户端实现指南和性能优化技巧。包含API调用示例、参数说明和返回值格式。提供调试工具和监控方法。包含已弃用功能的迁移指南和向后兼容性说明。","order":4,"progress_status":"completed","dependent_files":"backend/src/routes/index.js,backend/src/routes/auth.js,backend/src/routes/brands.js,backend/src/routes/models.js,backend/src/routes/ota.js,backend/src/routes/users.js,backend/src/routes/shareCodeLogs.js","gmt_create":"2026-06-30T14:04:20.638264+08:00","gmt_modified":"2026-06-30T14:10:41.230618+08:00","raw_data":"WikiEncrypted:N3UbzwGjCC3xD6BrTM0cq1j04iiCHEqviOrAoLLUfGDtCxYctzqR2At1GtmCrwAkNRcHgUzXC/oU+pquLUAJyJG4QbY4uH8HShHwsSaBVDFWOUg5Yt9aKSem2W6e8/XsvBH+yP21CSU0WyXIunvAbMDWN2E2tdW6Wzy85z2Q/R5uQyWZgy2mpBkGdGtFA8tnpiTWGrll3lHHu51hSPp8fubLI6JOYB7Pcw5m81DnxNYl30Rt/HNSOzY2hn6YlxZZe6LYmbGYTHJFaQ+1mi9pLEDLwyAsd2NXDHCvcH5PyODvHQQiWusTZ2CJRbKqnQ29hlTXhH7vxfD6JA4CJLUr1IQO4O+sNaKIJM2yqvq9AtsVFlDiSbBbx0hHeupPxyxoyJrkbQ0YEnJYE8vcEVwUMFYBaA73AgBMVIgg7EIO6aoO1qtVQOCj8O6WC/bpRRG0VsKJKCG0cWJF2x1R0da2454d/mYk0E3sNIdLAYefmKn5znpcSVxPYUmIasm7sRHIngjfBQy3oRnj8iMwUo4jJVzUnK7+SXmAFMGJnkGsPff2MYZK1ziPEV2jaUxxsuLG+ZJVOkkPArausPuO+h0DzRYrD5rtNlQHj/M+VdBjK/fZjUHU1VYdsOAE1Owe/XiTW736BtdVxEahqzEy4KjCuHnbdYOecFSzuuJBu8+IlaAIS12uC5MPrhIyhcgnimmvjDGib+IlTsmikIQS8yj/M1+iuWVwDonBYGcgL/M4fnP9tsUdLa0iICT02XF5rsFc0k3qg8BcCd1qTG1LzSDn0OGKkrowiNxsp7if26Sm14qjk/kMrLV35NzhCrv6AE1YQGMD/Dw9P+dhQT+6f+GNG7vvKDnkf14/8gSVoiZsVqvGFSRbn+uscXceS5KZOfRVqzG+beWC5lBGoBu9NDft5xzAlWLF3xkgw3v7JBOOs53KoXfRuWlF4MjpF/L9Pi0K8Zdy4N1kOcHDKfzZTX19J7qHEHGfaKEhLP+EJzuy2zgGMtSYa9GSR8ku/SMuX6kyUbmmBRECqXb4ohzFJZVKEysRjplQzr9b6kLmHq3DOFdeYpQjJVFbehRbFgziE66TVVVeSbE7EuqOl3E7mVe0w7GgLODvHmOCTJFVMvcc3Ci5Fe9jWyomiNykvjfxv5+iLlDrwAGoXHYeu0dvl32TPy2yen6q+hOAxVtrIQh2efNFU7L9NmApvpdARKuQC9oYmvDtTYb3ifOXMRtdWJNUVz8DQCf8jo9QF/5mlamAcnhWOR/muhUCtnB+WZbireNw26SGG5yt5NZLrMJRjNxWgM/mQ/K47LoKgPimdSfBDApR6MRTXyI/wKP5Lxg+UYUGLapLKqHrfamPFlWtyAMER1HR+wzMaIU/5E66GbWmR2s9oQgJpWfELjIUlODtmHh8trWp1yzOUXksZH/Kooshmmse4XmZ9upGxeADqhi9sY2ReO9DJZcGZzy04R570EuL/pWLoXP7E9b406rBlQ+pGAtw/Lj+/nK1LkZFclvYsH4="},{"id":"b4054b83-f0cb-4b7e-9b3d-effc904a5686","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"用户管理API","description":"users-api","prompt":"为系统用户管理API创建详细的RESTful API文档。记录用户CRUD操作的HTTP方法、URL模式、请求/响应模式和权限控制机制。包含用户列表查询、用户详情获取、用户创建、更新和删除接口的详细说明。提供用户权限验证、角色管理和状态控制的实现指南。文档化用户密码重置、账户激活和权限分配的功能。包含批量用户操作和导入导出的实现示例。","parent_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","order":4,"progress_status":"completed","dependent_files":"backend/src/routes/users.js,backend/src/models/DashboardUser.js,backend/src/services/userBootstrap.js","gmt_create":"2026-06-30T14:04:55.156387+08:00","gmt_modified":"2026-06-30T14:30:22.110712+08:00","raw_data":"WikiEncrypted:pOan1y/G3TzMEng6wi54Vc5wz1mwLua9oaQGTUm9cssalr5g1toTPIfYljFY5WaWYpIfvMfcOIPjVC5YrZe6T0ZeXnIn6qFUeNFA9VkQiOd+eP8PI9TknxwVIlnH8jIbIwUHH+P6UkkSNKkoEQ1Dgy4tQyZQ/BwhCdLqQABUIXBPU5meJ+X6w0MX1tiAe3bz/ckrWZcMva22ulspZnMMC1Wk3aVoZim2mC/orMFko2LdLZbXjVX8uNiFeB8UyaHHY0eGKN3MEHmSchfVJBXzLJAuJlUXl365b+bzfvnnzO1j6LwNYJMluGW/Bm8YNNXxv/nIBbzYwvWGjn/7eXoSDSP8c2D1QpN1Vtejf68ju2Xll64t71U4ToaQ6nUYw5uqsUgZDj9zsGfOjV52J2RWSeXnUQ7cUo+WLL/4N/5+3+KBlnUUuc5rvgZ/SdfIBzoYoyeDi+IU/K8j1B2CXPKNjSY7YV929LeSJGbcYxEdA7eH0c0zY7gNqyy/28oMx0Drkn/jYuCiMnKuQHF05L3581zmgFITJkAamXJV087BZCHex0iiYzrB2yS3QXrUCRMa5YfiO3mhv7u6C5A1bzqtY1b2pX30yhhKw71FwAuA172/tw63XUnOXjQ3M38mTt5hhxI+Z27ySXPk7jZs6OQosySBxga+SW59BdQWICrvO0/Jr8CqbIQ4usht8J3plxZpAOasjahz4ung4eJEzGEngpdQmNouctQvHBWOSXzbubhIGXplonmBfLNDPRk81plmJsV/vS9cNjIOPCmHJxQAXdEExTKuqASOCeD02Q7iDS3H8lUuIkNaF2mqaGwJXYsGwglkH2PtJIPpV7OLPmu7BT1QM3Vx/EK6EgWK4AkX8njheLaiGDxuJ1ZboRwInEgTcPY7PBX/x6jg4JI0TnG7jozxFYvNGlQR8xCJZ4SXSGF5mUM2MerylFlNh4SvGysXSDbMoo9tzYOFrwN7HD8ao7wuyTqK5EauHRjJiy7DQ1xhkAR+8xbFglSPmyzymu4KVhXnBy+ad2/UhT1vc3j5G2I+My/soGEHQUDr4q6/0Jk=","layer_level":1},{"id":"7a728623-5bd2-48eb-80d9-0f253bc74123","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"用户模型","description":"user-model","prompt":"创建DashboardUser模型的详细文档,包括用户名、密码哈希、角色权限、状态管理等字段定义。说明用户认证和授权机制的实现。文档化密码加密、JWT令牌管理和会话控制。解释超级管理员和普通用户的权限差异。提供用户管理的完整操作流程和安全考虑。","parent_id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","order":4,"progress_status":"completed","dependent_files":"backend/src/models/DashboardUser.js","gmt_create":"2026-06-30T14:05:22.624965+08:00","gmt_modified":"2026-06-30T14:30:58.467643+08:00","raw_data":"WikiEncrypted:piKNT601qxwAxFbFc+bbNzJoKRWjVA24DZgSuXUMKeYDI+Vpob6SIDpceCgG+l/ARXk22LQbqNrJSpxaw3lYcwfCs/ysy8OCLL5SJdUHJVrbRwBO9VCr7EM1ykzkC72RNFstSYAcnBFNhGMXw+lvldpEXlEqZE9WwOHqS96NXNWqbxrN5aNChpOr2Rclp1ATRSAz2nUS+IeeSx64uQOVL3aSyP9BxlRPnARz3KagI4h5xFbrFRmGOu+2fHjVv4mfGuyBi2m7BOAvsQRAReO4aLFcrb4Q4d/YoU05hkkDJCsF+uw1h2wLNYqLbKVPnnQ+vXJsPReY5PN1qLbXnK4SYp2DGFm9mcWTWJYYzE3plH87IhZQUyYfFFWSWzNA+oWacGaaij336n0rQ1emfUynmp20c5H12gaAdeJnKNtilwuveESCgjV+cpQeQFNPuSBymzN2EYIYg9aAesv2HK1H3PBo1BRPR8jsYXLLErgqgfSevZLVZGasl1cVMkdzhHd3jXywieDpMk0OiXw2TzVbfD/R59mDLQ/8RFFCxIY4Seg7wwXx+w9Nk4zHDmIGcT2ciMFdmomMHsiK9TT5/bl0pCM8PpQi8V/abMOyhNZqK2NO8mgxpys8XDLzN2vunY5DWeD1FwI9Do09XWWByBmvOhSAQnZp5IvO+Yc1FEzRSo4NHjxKOXDmFE6f4WRlmoKnttDNUMGRnE0MXXnbj33ztpBqhSkH2IHqEDWAYGb03f12CEM2q4RcTHO1fbB3ZAECoyGOC3pmIqTyin9JECRtDQ==","layer_level":1},{"id":"4d08f4ca-84f9-4f9c-8d9a-0983f78a7005","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"用户权限管理","description":"user-permission-management","prompt":"为用户权限管理功能创建详细内容,深入解释系统用户管理、权限分配、状态控制的实现细节。包含来自实际代码库的具体示例,展示用户列表管理、权限分配、用户状态控制等功能。文档化用户模型的配置选项、参数和返回值。解释超级管理员权限验证、用户引导初始化的使用场景。解决常见的权限管理问题如权限继承、状态同步等。使内容对初学者易于理解,同时为有经验的开发者提供足够的技术深度。","parent_id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","order":4,"progress_status":"completed","dependent_files":"backend/src/routes/users.js,backend/src/models/DashboardUser.js,backend/src/services/userBootstrap.js,frontend/src/views/system/users/index.vue","gmt_create":"2026-06-30T14:05:25.898001+08:00","gmt_modified":"2026-06-30T14:30:59.497744+08:00","raw_data":"WikiEncrypted:A2q6dsB1G5KaNgPAwP2ZpD/NNAqdMxLD500dNl3wstxRlsTO1UAX3pxjxaiFL3z0As1vXXbkbHu4vNUGPLAL5aQdvyDy/rpc97235R5NBNTdhWQsZBMstzLADK9pZc2FHGxl73wo/dEkASQtxoZ8c/HAPRkbzM7NeoD9dIYUm8IACZdB7XsWNk9eYgM1s+F7EamxXZeo9LRcbb/Y/YFKbxweyfSjWzXvXjvoJz8YZ3tGNPnZgwl5qgSc7Iqd/zEcwe9suFPVJyoHFnfJNUH/kaeWu8f/cHWsyJGasZNAaAwZBBs3yTizjbbGBQE3c3I9OoTx3e45q++1SKXw87o4e/05qmBvNeVZolDT9qztewrGf8fDjB1GqNNK4z78df0HVIaQFZhhhIFgSY47aR+4kMu5z6cAMD04SbGH/sGtdnmsA6r40hK+TgrjJ7YJEn5YDMV6ULhMS2AGgCAgoOoOaQAYdtp00rHL6DqxWP7Ayw/PrS1EGjonvJDwqy2YY4Wu06Ti9Sv/p3stKU6l6v600sAU/HYdfnDB8XXCaiCnr1aOXNMMzow2YRdFlIzdIuCnb20FmdM6scyabPlKwJ+Q0bqI1kP3t1AzsMWzBOu/hSduzKJtqJdugcKam/IQ9dK5dNWVHOLXVwDMONyaqpurXeP0qrftDRCgr7tfAe7T1F17lX6F8vAAFXSSGlwuyU3jsLTxYLSnIBOiSsa8RpX4QosLNkYfmULBdd3rabnHteIWLCeywBzzAZwJL9/1WtaxYZ6upIjMsLu6LvNaXz7d7tfg2XqQT5SckfhVnsfs7251aj+Xj1CmFmER0EUEKiMtS1VlphUcRYaWP3cwRjPgIItB7hTHnDqlj4l8pW6pQm9DFy4luQ83CJlsw/FEjW6lloK8XYhGAiGN0PR8dTYL0LzjOi7h9MbZ3uCqrW4Sus9kHxcVPN1Ubt6Pl3KOadbrS5pfUae8rpFVss4Dx4K00tLXLycXKmVHa5Ctl1Z5EhAHn6/G+a2oo9L9ymOTVHWuMrH7peksW83s4aykHZ+cX5kVMOf4+wmVmLlrnYNHZ/erqFhdMHJjX3WoWzfJ9JbFm6j3AL0Rr/+/gY0h2U5dGO/ioG+M11sSM0TnmIHFSvQ5BMA7LQKYm734RsnlDaNiR5GUtVCC4ZGa0Z8ijU4iHI2N9XnTa3R1UEQAqMMGE8eAg7Mhy+eieZyElZFJTkhPbbPE/T/rMkbtaGNqMan3KohQvlP8qX0Mtb4UOYnI8fd0RwahU3KVQYEEtwhMvf7LRH6zLOVlQjtT56TgSAPCkla0Co4fMEDZpLDuSPD972VDq5r4NnMIk0ZaPfNHWcTgD+pAIL7IDmO04KLJV0h9lEguVWpMWskakEkbQsD28FQ=","layer_level":1},{"id":"f23cd2ae-fcf4-445f-b8e9-b3382f277ae0","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"OTA固件管理页面","description":"ota-management","prompt":"创建OTA固件管理页面的详细文档。全面介绍固件版本管理功能,包括固件上传、版本控制、强制更新配置和发布状态管理。详细说明固件文件的上传流程、格式验证、大小限制和存储策略。记录OTA版本的兼容性检查、更新策略配置和用户通知机制。解释固件下载统计、版本历史和回滚功能的实现。提供OTA管理页面的进度监控、错误处理和用户体验优化方案。","parent_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","order":4,"progress_status":"completed","dependent_files":"frontend/src/views/ota/index.vue,frontend/src/api/blacklist.js,frontend/src/api/otaTargetDevice.js,frontend/src/api/ota.js","gmt_create":"2026-06-30T14:05:55.603184+08:00","gmt_modified":"2026-06-30T18:39:29.639151+08:00","raw_data":"WikiEncrypted:xd9L+Z9CK+rU9nPZV+aXHWN/UvyEHGWdvdi/wL/SLAtsxjcusIK0geuW0ev94vFm/+ZZNy+ieVfnAfHGqmL17rwVengK5U+HuyndLcsd+vU8WWUYAcbMeIuhajT2ueakLuWMAOBjC7Qjnk00go13X96EUYEuiWmkoDFEuFYCUNlYB8K85tvNFMpVCY2Qqrx9nomuigjf1WFHD0TrRVrhs1NHGRazgaJy8rA9ZCQXZkYfZ1sQWyMvR2zhRCZmZQ1P+Ay/sZmld3IJZ1uHwC0AOC62fyj0Y1CRG00+FjGRJYmzRiiT1ovJN0FMKEQ4+ReupsiHFpHZwkDERurHDlQ13YRkt4OKVRbYHan2yeZ/pF8DmJl3lk4ibWGBVa/AktLpQH/cUYiwk1NNG954l10fIGdxJOmE9R5Pi8JImO5MVH/3QHkAqJa/MCaS9oCtKu7kTXs2P9M0FSG30V8RfUHetYe3HaVCRL4FaCWm8r4erR9/3gp/e6yyuYA0CbY7j3tlp+/1/Qvqix1yzELc5MNkA4qG9J8EJ9SuSeN/9+R8qgOGZGbVnV2pC2dDbJZPfqMV1V/gcaZi/XRILpuz+Wo4BeKwxqmOTBX1yXOjLGxipXmUgGC0BOGAhldPX6VRTqlAqgl69qQ6tDSa0NgINVjg4K/h87ey+LGxhLZd7rbOMhCivmOOOvoJQAIsUIqVDWOfr19PDz/w89QxoGa1I2HaQacuwqfN+/eZ9b6ipHhWRy8Z0HpwlxllW2H+GUfdUewZEsd9hxIcilDCkSqwTRsdHRksuOEht3C6AoEO6az767HSveBe9SkKa+U3nf2mOcXCYjN6ISB5WE1ClRdOJd0a39T4zLVebVbEAGGzWtGHNr5Zc0GN7UftAiggZrjBJtDnIDCqSnwlc9Oq8jUS+4jZVkVz264OhepVcchT8JSgeeQ/2KDCw34q3sZ6q1TAfhZRhL6vKdM3gz+/IABj7p7OUv8iC1Im5i7hS4CXHlicAxg9tl8507psv1ePxbDNRCoS6+OM2+od+U3ma8RFAWzdBsvaXF2GWl6SxLmvRUvfavdwCmxUBmqxscgH8Kim1FZfW4EARHkIl5QYIm19a4Y2B7iKW3iDH7pBzbJ3uyozZUk=","layer_level":2},{"id":"aa2583bf-2c6e-4792-b794-1563db547d08","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"前端组件","description":"frontend-components","prompt":"创建详细的UI组件文档,描述组件的视觉外观、行为和用户交互模式。记录props/属性、事件、插槽和自定义选项。包含使用示例和代码片段。提供响应式设计和无障碍访问合规性指南。记录组件状态、动画和过渡效果。包含样式自定义选项和主题支持。解决跨浏览器兼容性和性能优化。记录组件组合模式和与其他UI元素的集成。详细说明侧边栏Logo、标签页视图、布局组件和各个功能页面组件的设计和实现。","order":5,"progress_status":"completed","dependent_files":"frontend/src/components/SidebarLogo.vue,frontend/src/components/TabsView.vue,frontend/src/layout/index.vue,frontend/src/views/home/index.vue,frontend/src/views/login/index.vue,frontend/src/views/brand/index.vue,frontend/src/views/model/index.vue,frontend/src/views/ota/index.vue,frontend/src/views/system/users/index.vue,frontend/src/views/share-code/log.vue","gmt_create":"2026-06-30T14:04:20.638638+08:00","gmt_modified":"2026-06-30T14:11:17.430176+08:00","raw_data":"WikiEncrypted:rJ/rIw0gVau8jPGqKFBAsBQkxmdK9VEWEB6rlQ8V+1n3+8ehC1YI3uvDR9AKl6JkUxV+3U9CRiifnSLpQnnLCcDHafY0ujJqoG3mrKKLwcRefLIG97HCvpjj9xp4OJcObEYBvlH2pirjv5kfcD3coj+uej2+6It4OTgW2/0oKQer4Q7Jd3Xj3CROmzgzm1LeW9oHFyhqH7niUp8ounxYBAbQB6XdHwIaefNnUgBxo1FjRY5CB1LpLxEjRSkY9CBNS2Dfpl69BuhxVtiLlOBNsl22N9tUH0iPTEXk6TAQLd4Vb7QtJ8CCyPAtkpYnKU5QcfIO0Bcvp3MjVk52MPrRkpqhDzgLNq/58gj0RreavkJSyaecu5m5ingaM2ajsfwmWctlEFTbw7A7cpt15Z1RrVcJLo5T/4M0EFp2moBm1frk6hoO/SHg+ZmmZaSeN0CvbCvOu4VnNuh25cYO5dfRb5bD7aInrtFDRIEFVioUhtHbToaLmNbDxgYKC8jX0WO/lCgsNRyAqBMOVG9YywTcUyCao4ULaOYmT7bGHur1f7MHzT3Hcx7v+f5YDgtl7gIF3c37iMffA16fAhftd84iZA7DCWaR+x6ijSk6EVit7zN4bWFerdddsjBKgaNBH8WGTtsw4GmTfKcQ4lOr6kHuWwzvyJNbUAxVswCW7Kl7ofivxTaQwWtkjD8l6roq19h8uSRl7hqI2NFmLS/Mxuw5m9PNBlo3vptugDd5TAmLgLPkXnnPAHW5GBqe29HdNyEhU1vWTlQJu6TWrfVmeJrgLD7o4ciYSWBNzEJ0CMY19O60jiToNgpa2eBMrM6zgdhA9AdCdyk0sCCEGrNB18vMHFvtY96o/H+sVIVQsAsOoTx5sxOH0A2SJQX0NWZ270aO/huXZgV1r6rJV+iSPSpCAC4cXQ0EfI2bDDSzzWOSWezC2pwi8hfePFC64jC55cf1K03jW/4TH/MRixvP7PzBgDJ9WFTF5wLqV0IL6Rs/SDHnWnsbJ3+k2MGhSaMOncA89PGFNupdNbrk4x5luggzyTcc84zOUmn60WPhUrJZMAZfkkE4tKS1XRLUkHoxR/1WwL+VDZlaseEEFKZLWyNFBuGAscN09RzwicXS0WVW8CGZaAxZ8oMaydUMrZSqZMjVh7rFciLtXlbV2udQvIWE9dLuZVEGazVv+8BwkERKAXlPfl7VKo4Jpave0m0QS3JnRoK9RpQwsDXspauvY7XhvO4HvSwxXI1MFGjZBaqWEJCoEDzioluPgZ59mP+Zcf5AOw8qx+xLBLYVuJimxSmpplLeIcpRAD6GXIgXIpAQ0ZW629iB40UUtegO6jlZZMjEBNfW2h+7tArd5TmsR1GjBW04FHckaxFGn2sd8WOF1DbTN5g0lAkAKy/cGNjvEE1ZWKAKCGgv4IkAnme5huEBC2w9jqVDA6/cxoVNI1PqCHuZXtfmBqsygXhLj977b7lhgSMLm+ZyOl0F6tiopYxNMXhWjy1wCRXMPU7hHtqjeBok3Sb25XahZAuSPqzZ3MYjV4+PJHTejHONP9ch60/4uTU1ZmPSbYxlP3W91KjEOUHl4J79bUda7/K9+Fa84mMZvhiy1EOrsjAANGlQFE4+GAMHNdiLb69Zhc/CH0q2EaU="},{"id":"a6304333-66ad-4b0c-834f-a6a514069e3f","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"分享码日志API","description":"share-code-logs-api","prompt":"为分享码日志API创建完整的RESTful API文档。记录分享码使用记录查询的HTTP方法、URL模式、请求/响应模式和数据统计功能。包含日志列表查询、日志详情获取、日志筛选和统计分析接口的详细说明。提供时间范围查询、用户筛选和设备类型的过滤条件。文档化日志数据的存储格式、查询优化和大数据量处理方案。包含日志导出、报表生成和趋势分析的实现指南。","parent_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","order":5,"progress_status":"completed","dependent_files":"backend/src/routes/shareCodeLogs.js,backend/src/models/ShareCodeLog.js","gmt_create":"2026-06-30T14:04:55.156497+08:00","gmt_modified":"2026-06-30T14:32:04.002947+08:00","raw_data":"WikiEncrypted:Vv0H16AayoBzPxX7ZlaOUGyGBdIMK4cf0QP9R1E4ivY78WzOdR/wvtMHeKsZOPO0asW2W/MvDKc2jNyZQ+LHngb47F7NF4YJSkCgZxByRVJgj10T4wWac0DckADW5AH88CZpVx4BBCtuW5KRlakkySQXJ0Vhm+mv0KwUrtthQTb+hq/5FeNYbS+kOr5euCqYQ6wwEmLbt10MSZp1WKWdfCf7X9KcgY2Io011J6+JnBsJnbbWDcnhkvMDFUdGk4GwKyEMiedTBkgb+39rNaRYcnJAsprHfzqiWCLqNoVAWgXLhDwpQo+Rj9Bju4u0x7yWdcWAVxIhjtS1HTrpnn7SF1fT+zQ9CwvBC1jdBr6zPv2EEfd9aDeDmF9fusxmxrz6O9t8G8p8DZU+16l6SzrO24RGp0ljE2hnue5SjY7K50OQ+9U35K/w+G/qOjEOt/Xm9AhDSALYcylw0X+3TFn0Dw17GvH6f/i4Rkt7qMYvBGYUby2TfoOMz8t6dGm1c9yflUtfXDVmMEwmVvMHLCRtuD5TyA5dQ/ZMntXUjliHSeS+A6CWlqs3JxRZ1RzMhrWSMPoLaP7KkI0jtFbNfasJ0Og/s0lvoq5QfTYeaB3SPAVOrEJCTUAk1WJBefCXaJLQJWM5BL41nZaNCLL5xFdD7vrcFofJoqf8rJdD76QntawCuPNY82NOq776fFPBqp80R5e0OAsB0SDbQ8ij7hs892TDLCAZD/uQpah7kDXRz3wpPMv5Fvw1Vx5dqBUU1Ft8O6oV36Svb9q7kzHN4uEsXSGmQqxigR/bDvMFj9wUMlwgWUOgeKVG3mvewBOFOO553ePEGez98IygIUSyEQH9u0EEnfXlX8Ctc1L/advVhMuLFfDBj9GSPmfqkcpEekoG2IhmUo15MFwKOmoR6YpBqaOeGU3M+ulhTXCdC/XVY/mQ+Tbruxlx4wSxvEVLqggywoVkMab3NqXnh2yrndnibentA5ka4iDfLNAT2NAPvzDWenmrtjYrZNRTiDoH4ZjahTBysR+ESqmTOnYPQcmU9ilGcP7Kf8y8xEndb3tWlBE=","layer_level":1},{"id":"e1d1f354-edc2-4c91-8d91-63d256dced21","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"分享码日志模型","description":"share-code-log-model","prompt":"创建ShareCodeLog模型的详细文档,包括分享码生成、使用记录、时间戳、用户信息等字段设计。说明分享码的生成算法和唯一性保证。文档化日志记录的完整流程和数据追踪机制。解释分享码的生命周期管理和过期策略。提供日志查询和统计分析的功能说明。","parent_id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","order":5,"progress_status":"completed","dependent_files":"backend/src/models/ShareCodeLog.js","gmt_create":"2026-06-30T14:05:22.625325+08:00","gmt_modified":"2026-06-30T14:32:46.410606+08:00","raw_data":"WikiEncrypted:Vv0H16AayoBzPxX7ZlaOUGlhYbZc4czqT8CWfnD/TT0eAt7tg/OAA6mgsocPcmsvG2PVtH5KfyjJ18P9rTMPxOEyjU1Gec605uXe0T2Yc9Mio8lwWTXlLiR9CHDgdmESC5j1t2aKR8fRd/OqASPFvLiR0grE99PCeoM7ob/y5BtcgxZWjzfCnfZNCwnjfkkosGhR45PqgoCyAC2Bvm0kMJCqP4lVPKf04wOTjSbr4eSl32wo9TqavhtHLUKJhoU1BhZbZ6uV7Gmzaq1mQWqsX71L36aDcvYYmopGt7DE2LJksbYCFrrNBgRhFv+N43uZbN5WL7wVhpvK8O4TVwd0FOwp+aZ7iAbUL7tgjCR8xtXJS5q57NTemsro4PJNWVbllR6P5VHcrSDBmtHsa6L1bXDOBei3zTdzkwRq37T3c3mujEECBZ/+Mz/9ujMM0yIhcbbPT/YGEGDAiU/BRLBAOMuV3WWC2MQhqRkoipHvCj8loLpu05az/NRT/cd/X5gfi0y7vJvNz1FLlIiiUEZfQro7D7k5gwTCP6/FBmDYgfPSOCN8xZdyb7gHNanf1+Cqj69JaEgpM8cJM/v7a47fURXAUR+wy+lsKH+YapUusdACBBPvzGrGTJGzBX9gZVLFdPZFt35TATN0bywZa5At1ySd8SIj2B3St+GopTloe/mXlC4w6a5oi4MsUi1aQNJUFynSnhmsvMHTFxp20vLRYRzH2gO2ReFyg+ErSFjXFKLsd7zrW/lMF0PFW90/eb7fGWQwoQT/GJ8bv50VRjO84z4xEz6cvM/y2o4LjMcbv2elQDtp6lJ6TC2Z9jG61tVu","layer_level":1},{"id":"c6207e0a-6059-40f8-a27d-367356363cbf","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"分享码日志管理","description":"share-code-log-management","prompt":"为分享码日志管理功能创建详细内容,深入解释分享码使用记录追踪、日志查询统计的实现细节。包含来自实际代码库的具体示例,展示日志列表查询、统计分析等功能。文档化分享码日志模型的配置选项、参数和返回值。解释日志记录的触发条件、查询过滤的使用场景。解决常见的日志管理问题如性能优化、数据清理等。使内容对初学者易于理解,同时为有经验的开发者提供足够的技术深度。","parent_id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","order":5,"progress_status":"completed","dependent_files":"backend/src/routes/shareCodeLogs.js,backend/src/models/ShareCodeLog.js,frontend/src/views/share-code/log.vue","gmt_create":"2026-06-30T14:05:25.898159+08:00","gmt_modified":"2026-06-30T14:33:14.029388+08:00","raw_data":"WikiEncrypted:Vv0H16AayoBzPxX7ZlaOULG3Baig8xCTbO2Ahhfn4705w5gj8ZRYmh46RDQMtCZDcT2ci8E8rsm8C/ie07Z01SjriTUMDr+8A42/BBZb/vivf/I1Ur0WP4FZh/48LAYVnwRQ0GNifiKYZ6r/iL/jguQ3fWxzUE0M/+R6HIELC8yJAbp7rcQIITL2AxtPIlU2pCBK/DCcqQD+ZybcLujwZWxLN3sOZv7I9hqca2d8RAp0ZUgYqh+tSW9DGD0yS9XHY1QrXl7hsXfIgSTvVprJ8RT5HOeKTMeBxcM288vxkz1ghLqaMTAik+OQN0BzR56crsJmaCilWkrOAX9R2xm8hLfGTGTwdwv0P6fYaXu6VwOHBRDHoIHfGrImp4IIqNl/qAQnBVEIF90ZUdARF/K4lVsKi5QByQzHd4xlLllAAhTWwK9S7HsZZ7T9HP6og6LjL0bhFAv7f4lX1gq2+EcdF4EC/sLc6w4D+SdCSFgVU0xdT56IyK2HCqk+Oa3x3yOT6iwe5gfFarTyyXSrSV3RDHIGxTQjw5ZLgrseB4w/uQSPLjoDkZLP8d/jXwMcNr4bqp8w9PxWyrUNViTfQB/UvF0DUtxSE2j6+nUvqGdl8Ix1VA62otvJvJFAikk9gVFtOHg+3qSjX3bq++/RQqakUc0NNE5MChQJYL/ZUX+MsmET7zMf7f8n+x8AWQTkhv433TAIPxZDEO7EVVshX752wWI5rwX+6dwESN5VijNJl/emYmtP7TslKL6O12aJ/nVMD0zmRsBl2iHy0RZkN9eLWDa/pklLR/Oqz4Pm2r2Dd1lh8gU5sHdMMVYjz/g/hdk4KVkvOKz7kAFP0wHLPPzNiplQ18EUANo91+uz1Y5VdeODz9dktzaFqMjD1octmfT4pX5YAT/zhIQc9MsKjbHTAueD6bqZxj3x0qiZ9gh05gFbrskmk5q2ogQ/HzE3E4lrM6f2tYMv8KzXjP7yKEHcMOBJpO9dQZd5i7it8/RiUAHSb7Vti8AKU8Vw+TOV55DcDhFbK5P9y2qvuxqUldoMQK17B9wEx2nncwPjOJP5wXEELVSCNDm9Z29WK5LjvNExjGy7E61ilKE+rLRV8OMZoA5ighPPFXalAtu7mLH9y8P8lhjNfSKFoGWqPz0GeSGHgYiYIJ2uAMIsp8PabUEf93feQ4gaKPupXFYXWZQFV+XZOLHbet0vp6KH5TBD2X2fQHG4FVe4IHTI4T5kGOpx+ZDv3WPjRDrHHl+CCVCwlkaovZU1dGMSoUsss8uXaSH63mv5fUu9tAM01OquwkJLbg==","layer_level":1},{"id":"ff078afb-bb04-4600-b51d-5af48a6a6f06","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"系统用户管理页面","description":"system-users","prompt":"创建系统用户管理页面的详细文档。全面介绍用户权限管理功能,包括用户列表展示、角色分配、权限控制和状态管理。详细说明用户的增删改查操作、密码重置和权限验证机制。记录用户角色的定义、权限矩阵和访问控制策略。解释用户登录日志、活动监控和安全审计功能。提供用户管理页面的批量操作、搜索过滤和数据导出的实现方案。","parent_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","order":5,"progress_status":"completed","dependent_files":"frontend/src/views/system/users/index.vue,frontend/src/api/user.js","gmt_create":"2026-06-30T14:05:55.603342+08:00","gmt_modified":"2026-06-30T14:39:03.429018+08:00","raw_data":"WikiEncrypted:gWB8HBj+8+/15rQhXgtMjBvJUaTQCtYwqrk1rWKWMXJ2ByhuPeDEe4J4aaVwd0GgkvyTIoPxLy0LzUPY8r27d/l3kXaZv/WIKLhXGNj4yqu/L9TGNhQd7PzwpK1IySbUybplyf6amFlUaZuCaMERjNdevMyzFYtpxg6ayafgmP7QZecNCYUUM3UDhFO+jU77Y3eONzUMc7vXH/eCT/Dc8cixl5LBJezboIymPfUKgJeIdetGX7IbiD8pL9tqiP3VV20ENuC361bvx5BHKgEgEz8r0ZRf+9GIa42eaVqFk9oS/OowsTalFP/WZp8IvsoQDgbxWtLfVja9CdwkAVvNFFoL92QsKVmMWwH4lC52GOFGmDtwWsWbsAQ7SC3FGCM9JqnaqrBk9L4OpLg7pbEGasp9n9YM4uL0i51ofbrskfLA7c5Ic8YWcfSq+YpP2Jfq2SfzWhkv6/69JsVm+ZeGECDYz/0BGLtJxuOHkE/X64/lMwm31m7RCbzrAT8s4fv70FYcrJ/e8ZTbBJJZ3nT1xOeu7NNolSYaUNRMKjj1f5XkM/bMio6syjKv3/sgDYeom2Z7KNC6qSiTtHSnUhR42TA/gepnPqFc654KQYnEbgtAxassS1rRCPSzZImnQue+Fm/xTdC7aQoeH7W9EGQhx9d/VKgE3DtmwgFfod4b9BL2E8Y+tjinaohB3LFSs0ywB30qKQeXZ0P5O00PShkYvMrnbrMgSYl9v1ikd2ca0x7UQMeS/9tanT+Nifwq7peDxs+vuwD8itOpOhe9lmEGyaunK3mOmMNU2qUP/IsFh7AG+0RI+ia2YOGLXRp/DAbZQOeiJotMpzzCetWsU2C7tkh4up/34yJu+PlIernbNrohRmq012Vk43bJsJuE/ozXHeWh2abw++XRn0rdJUXv4oHuxv/x/ou4BNRGgqxxLsK2sH44gu1qYF38dnjvjwos07VT3aeLuJQHfsrl3acgM+AniQul0Xzht3gFgcf88x++sScG3dMcqdCzRdr2YrFR","layer_level":2},{"id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"核心功能模块","description":"core-features","prompt":"为核心功能模块创建详细内容,深入解释实现细节、调用关系、接口、领域模型和使用模式。包含来自实际代码库的具体示例。文档化配置选项、参数和返回值。解释与其他组件的关系。解决常见问题及其解决方案。使内容对初学者易于理解,同时为有经验的开发者提供足够的技术深度。详细说明用户认证系统、品牌管理、型号管理、OTA固件管理、用户权限管理和分享码日志管理等核心功能的实现原理和使用方法。","order":6,"progress_status":"completed","dependent_files":"backend/src/middleware/auth.js,backend/src/services/userBootstrap.js,backend/src/validators/brand.js,backend/src/validators/model.js,backend/src/validators/ota.js,backend/src/utils/jwt.js,backend/src/utils/password.js","gmt_create":"2026-06-30T14:04:20.638906+08:00","gmt_modified":"2026-06-30T14:13:04.758812+08:00","raw_data":"WikiEncrypted:luoNp8LvFa7zGThvIT9T4gfD6KbzJyTAydbcRfVv0b71O04CYqWd+mhwOAKx5JsjRdElm0elYpXWbl1GcuBvfF0k/N/rYqIOGrNDyuFsYrr3vrPVHqwKfwIO8ii5FyJ9G2/CDKYKxfMvL5/eI5LLiI4dLJtQQ/EdXK+jGK6/3zTIZqdWj6UWzEW0mzY+65TLZKIQZsNDvuMmW4V+typo30j85XSOUpwUwj+/2P69d0p3/7KOTGhpxkQJpKwSS+Ou5oR7kyDTwjuBkFTeJYqyV4VYROOqBypa7dwYKe6Knr1LT+azHmTqixb1zXUPJQ6p979figgTjll32+b/GM+0T95z9Ds7J33B5KOsO0LOJ2cNLWiB+C528YQV0AHDkFf1mTE6bKTBGolo1fT4KVvufyT4JAn0aYmpJDe7tiniUE6tbKy3fen2CQn9ieLIOKFMeUBmDsDefoy1030Wnd5JzFcKgRtb87NRHcsiF5I+V+X2E2TlZUoJoBh2+PIAZYkxWcpXMD8Zpcfv17FAZo34dTydLS3wYxVC1tKcqor5qPs+woQNYAnvSCdaK3H0Hd9zIb2V13Yw4TRtaGR93SOAPzmuaylTjsqmJkhkPpPdL9RfBPI0NWsglIj0e7zkEcku4zGa6Hs0rFAUnvrmhf0fWTCe2cSQGsKT/x/At4Bbv1VXx/iJB5IG9L92sH9auvd3zPQzrXgvmZtIf5veeHTENNsFXlRqyHIlznBprPM1GVkTnIUQw7mmC+4Q/6jSl1Fv7xI6EG/1udBu/KeaPO67Hp8A1YNTf1ZspoQoSGsV4deaNlmJgBEN8AIyClPwel1TmRAOmWv+F7NI9qVhpN4XyaOA5Z3wLMRdd1TAxRzRXgbQWvO74iEk524UaIecqPr3oFFsE3HHj52svrYNQ4mHfD37w2y52cOqC/kcS+4oPBgecVMRLNK8zQe6TeyZZHyFxLrnPE3yPqPlVq908l/SlqwcGa2igXYfFHCVeaXwT6cPl+MscEbagyBiX4x1QnH/S6eX2dvxx0XY+44nhTYGW1tTBXetozbFeMqqAtV0XePJizOGsP3Lj2vFRJAHZ0N4cgNkiQhJ3KlyCoakiATQXJ/Ff/3M4frqDjOKNgpcGoZJVi8mS1gxHRzr2RdQoq+7KSMhmyGjVSrCbNN1TYIcbahutqBg+nR3vJ99qFoP53jpWwT8PrBP9LqIgRxcpoRf37MTX5j/d86fQw49ZGESGNenE5At8gBSjU2xnAIjZ+F33NfP8+Gz0UQ55JvwG8CjDXbe2noRsLFhkX2mEpZZURkUCUwgViZJht+EkhmoJGdb20nl7nQcUCRyeyH6+kS2RDlqP0MbMuZC3N8E2Cb6QEXiCy8cJTjg8OWpIOvFGO7W1FPwPDXlYJsM09Oo/VhFPx5ImU84OMMy2ku3T1pdBwi8FjXr1WPwwNmRTK4aqj4wrLgLiW5u7UXyrUQBDbS8o3sc5W2z0P8oFWcBaUYRtKmdryx/ogHWLuINkyfSUHAgkWx/keTw6SlEAPYdQGXbal3G4vO3aEnA4oCPhflkrg=="},{"id":"7272429b-c7fb-4bd8-9bd1-0093025d68b4","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"仪表板API","description":"dashboard-api","prompt":"为仪表板API创建详细的RESTful API文档。记录系统统计数据查询的HTTP方法、URL模式、请求/响应模式和数据聚合功能。包含品牌数量统计、型号分布情况、OTA更新状态和用户活跃度等指标的查询接口。提供数据聚合查询、时间序列分析和图表数据格式的实现指南。文档化缓存策略、性能优化和实时数据更新机制。包含自定义统计维度和数据导出功能的使用示例。","parent_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","order":6,"progress_status":"completed","dependent_files":"backend/src/routes/dashboard.js","gmt_create":"2026-06-30T14:04:55.156596+08:00","gmt_modified":"2026-06-30T14:34:26.686007+08:00","raw_data":"WikiEncrypted:rL6JaAWnwczCsZW+uBgt2MaU2Sf5hn65RLINj/MhHZqs/HaL1M/vKzdpRke4FGDeaqlgIkX0Vsq6pgMDhS1PLtsNQBQbbup3R7hfDCWHR7czvQfTQrqQOghuXOCS5RshiZIhSV5UutgR3IhtdYwYuC1cGrxnqubBTLaiNlwSkSCBwNnKv5wnHnP/kSTtGschyyeMxsR0xgLm93y19LUJxzQ35x+o+JHgNt7L1clDn1f2Q/ndGER8N5G6D30Ca4ktQc/XzBkD73s6Y6ATaZU4fF9lJjkb7Xouo6VBeWM/AWnZDx7lOLLIfGHZwEixsbqfV3DPFQnQ5ouP8ITf9zPIvOLqXdiBK/eE4w9o+KnoarDckNX5GdOib9xHogvsjnppRV6HPQAkLwj79jVPVWMDFLLrOA7s4nnSkQ2unS6yWJOH41xes7IM36ZsyWIWGoF/ZfncMR2vb1d6KRd6jKE7U1rWCkhwBMRCtJWteXsXljdFTmntEBDtsnylR8gDBvxw3yX85/iRQE3fgUnx1bzG1Csq7hyeTpYLzKCJGgsoGmXQcuPQy3kvG53RM8x3PLEYSYlDCNn77yDInY9vGLH3AEhP8HfRR/ZpbZtEbTEenKBq3Lpp9JNVMypx8WTiGDNr7Uox6UrnQJn77vaDePXLU9RL2zqzb/ft4ghSWgWkGdxcVZuueg+R6jh5VidCS/2lM4RB6CLZx8B4fjDo0lPC5qjbZfKjw3oBNOXus90NdOMlDs9sK5B5bdAy+xI12Ku3TaX9pvbhun/UkHYHxw/izxoU5pEPmr5H4iOsOOjz723tH+aqaoOA3SfDR3E9vWvd1I8qWQrmf409xaZfuoDpga88y+qC2speLpfqP5XDm76K0m5hvzZI5F54vflZN5TXb6GFYN7/9nNbsPZ4oBgYfPy3GhtEe/eoit9VkApe/PFsqnJ/5EEdU8SvT1wjGsczIvpTY4dSR5q8YpQL6lNH2Q==","layer_level":1},{"id":"830433a7-7370-479c-aa05-c21ff47b059e","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"分享码日志页面","description":"share-code-log","prompt":"创建分享码日志页面的详细文档。全面介绍分享码使用记录的查询和分析功能,包括日志列表展示、时间筛选、用户搜索和统计分析。详细说明日志数据的格式化显示、分页加载和实时更新机制。记录分享码的生成规则、有效期管理和使用状态跟踪。解释日志查询的高级功能,包括条件筛选、数据导出和报表生成。提供分享码日志页面的性能优化、数据可视化和用户体验改进方案。","parent_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","order":6,"progress_status":"completed","dependent_files":"frontend/src/views/share-code/log.vue,frontend/src/api/shareCodeLog.js","gmt_create":"2026-06-30T14:05:55.603485+08:00","gmt_modified":"2026-06-30T14:40:47.220384+08:00","raw_data":"WikiEncrypted:Vv0H16AayoBzPxX7ZlaOUKj5ui7aJNjWR2KaITM+ncU6ladAgr1aX4O1zoYG4BKYxYSLSuvZ2LqnWBJ2QqydzLeyBat1iN9bTXVMqMkgeJtkcSlNEEEBOpwdoKxUJii0pBbTaTPljEgvGCJAdvtM6yaGorC0QzbypPecbpVh3DAjgPtWtUIfgnh/GYXu7HMfEOLjMMyQuJypBLnNAvdE2xXmS/QoHf10Z8jKuZHUEbhw3ognUK++ZjIED7IEMXsM2HoDIWWy2lZE539AcsA9nkIOFMRa34TlykOLVIWGhN+H7uZGRqff0XX8Lwt5hNvL1a/3ZPm/zZJtFJRzY1PmfxyaUjEbF7KQMiGdKNAX1ycQenLZ/ynZX1xiEakxuX4S5qxospfzPGG27gDX8bJKL+3QoqYMxU/6AdnQ3DIox9pP4fapR3p3RYlpJRtSqqFEeeU0AUWmUNHPyBCPgHccE+XNZpISolk2Hln2oVX4yMeI9psNaMz1DpxYj4xlswa92pmvtFEAcryIpMdytbdeAPC2p6O1fyHRkNXdSzu513mdblf+dxvTQs9AEKnzH5IISdpT3oqa0TxsQIonzIXjfyPDQ23xC74ZjI+olJBdCnklVb77alqfTKijeVHqhz8E/oBRslPIuRrBTmbr4MUfnnGv4ABxmqo/MJdG1aSWK+VLXi2S9P5Yi5E/Wwu8H8cYl86z0TdwDM5Hl0l+X0abPVyDJOcHyVvz80tpUlxcC6G9Xz4/vjCq0xfqYtDV4NM2ClDyMsuxq67I9S6UOCBAZbHH5N3WOzgPrZNyfbeFUpydMKmMOgBh5GjkQ3Pz2D+83z+wBDSk8PV0mzk0Re6AqwtuTJtZLBFtavN7E0GJp1Bq+B9fOhkW73CxJvwqIx6freEb2JUkKP8CUVULlLyar8uKaRA6QH9uFiT1SJZkH1fc9CMBH3H/RzAhtB21FP4KFAVk/ha2CsflO9bdZVM3OkChSKQ3qPNzib6+R66ZevkbT7skK19HcLJO3Rr1NOP9tTy0Hy9THr5msllCLl7NDMQi1yiK5GSaztoHJr7ZWuX4FV7iAHww5fyqzLeaVFXK","layer_level":2},{"id":"a3ddc4e4-116f-4781-ba9f-17c85c85396e","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"部署与运维","description":"deployment-operations","prompt":"创建部署与运维文档,详细说明Docker容器化部署、环境配置和生产部署流程。包含容器编排配置、服务依赖关系和网络设置。提供部署脚本的使用说明和自动化部署流程。文档化环境变量配置、数据库连接设置和缓存配置。包含监控指标、日志管理和性能调优建议。提供故障排除指南、备份恢复策略和灾难恢复计划。说明CI/CD流程、版本发布和回滚策略。包含安全配置、防火墙设置和访问控制。","order":7,"progress_status":"completed","dependent_files":"backend/Dockerfile,frontend/Dockerfile,scripts/upload.sh,backend/restart.sh,backend/stop.sh,DEPLOY.md","gmt_create":"2026-06-30T14:04:20.639263+08:00","gmt_modified":"2026-06-30T14:12:37.808551+08:00","raw_data":"WikiEncrypted:0IKfLNOWe9mZfG1jVts3w2XbjO+yyEmY3ONOjrL5GjA8+3c0QEcD9OcCVHu+1BW/N5NkoQV86wegqQ9ShX8iSQ2xYIaslcmoc/Kv5OAnUwWV3nuAw37SIDSnlfEVjxgdWIfKDpMe9ANqqSg43yyyS0j6a1ZNPv/lWSKJTBIXQlfQxEh97cKf/j/LT7ms4fDbTvmHrdkW/jEQefQD7MAtQ00jFlMbUkoCaGNftGOahpB8DxiKjvXF2XHkIBSB+ljy8IAN480duozYW3EHkn9BG5DRSK26AvZUAJe48qfnGYdQfTAGEglE/1Hn6EV/Nm/Lb8UvgmdnuBaKTUiZRNooEwAeDN9FVwpQ7worjnl8Wzo8Ngbl2o07Zf9fN+KcjkIURxsPmfGu9sD6V9l1RLWZ6dtbz4WoDiQPm5pDkI0VaVo0KZrYJVqQnyYHiGLgYtwhQ7nukY+LoRhX7Hvp89YdV9IhrLTE1jsDAeCRw579FnnAzgvBLN6zixDwRCyr3c/VerMICukg17xUZBvIhgXPW2oB8aKCvEWd1DoVOOwTTeSRGaBc3YL768bwg/fgb5nMcpkKKEG8oFTiD0WQgV1WrAWmdgqLUic6njl7DH/nPwtU4kvstO6ylEWrBJh8WjjnuFdwsNYNFOXm0yLRUDPlwltGbjmmrB5+TUJes5jh7PSvyD1XFtM0grPtQpYdIM5GZtNYa172rLsqEbW9ZLMORo0XYf0lxg0pNCmBI7/OgcsUnosbnfqoLleFwHsBwIR6IWox1cSj2a8ZP2DdIF1EkS1STU4kcntPhJg/MU6IAHZByl9NaNnPAT9fbjHNYrjgvAocunW1h/GGjsi8yIsr/MYBKQRMHt0Ebx6FyjCoTdVyEZBmj1Ln8n53VqlQUaTLOTlY/+PLW72ayeVV1dbw6nODIElixkXST6BfiyyzGX4NcPjHvrMEj0x7iuPn5XqyNW9cCnIYaLK1POgQXVHvC78pjRvPdQcV2ofQwNXhiUd3OqejjZKYOiXsozbPI2ZmCy/R1XmqKiDotFyd9coZZagRFDm+CP5hAAYjGnqmUIWlnx031QhinbQ19YgTQyPe91UfMnBMYE4piy3j0ar6hKLZHqUrpDdEZc5IhsPiIpVEuUWChMcy/y5JR+jvcKVuXqaFmjA9MVUhyp8t4AslTb+B3O4g1WLlMBmUN1HYwc9S1io68uObIzwvIOg0IF1WiR4jj+F6m4Pqw+Zd+Bvs8HEJ0br7bBtr39YNX1ya0Us="},{"id":"0545bd33-f65c-4e1f-b2cb-04bea825925d","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"开发指南","description":"development-guide","prompt":"创建开发指南,提供代码规范、开发流程和测试策略。包含项目结构说明、命名约定和编码标准。文档化开发环境配置、调试技巧和性能优化方法。提供Git工作流程、分支策略和代码审查指南。包含单元测试、集成测试和端到端测试的实施方法。说明依赖管理、版本控制和发布流程。提供常见开发问题的解决方案和最佳实践。包含团队协作规范和文档维护指南。","order":8,"progress_status":"completed","dependent_files":"frontend/vite.config.js,backend/src/config/env.js,backend/src/config/loadEnv.js,.gitignore,frontend/package.json,backend/package.json","gmt_create":"2026-06-30T14:04:20.639515+08:00","gmt_modified":"2026-06-30T14:13:05.375027+08:00","raw_data":"WikiEncrypted:F3QgleoEfoy16cQggYe9C/ucQxiwh0okVA48AmODs5RKNS8ZgNngqmnHSFcG/1UaJxx+3dUn+EkMTpYUsOg40oH68Nx1IqebKqiC8fCVx8Z5dT3AgUInNoQcVloeb4yQhs1Oufr9wTZo7fZfd2EizXXbLOV05/YLO/Bja3sQV4rbFZH21TOR2bzMC4+Bvh1azFozPC/ma5QkwfbGmawutVaO402XGO+5xnrsGCsVAQr2M8O409R1wh77/5lzca6ZD0OFo1iagqoMSEXyVx6XsW38aoy3TPa93+p8MSYGEXZKUGuo0U8H/GetcXMJ21wi60fPOQhiVg9ePRXxG8wnT9Q0YxxUIb7JWiGkDgtE0n5qcCo7xcA3FzYOZ2CH4OR+2LjRjmTWUU2SbXJ9jXKWnXP8HREN4oERnOXLRcGVAA7zHN3BIkCz7pscIxGQ+sNh+xZdhrgSBP4BqoZEnRQQlyDrqA29kJpJXZs60se4zqy3SRe8xpB8DiB6puJqsECj+osTyJFPENV14Gb/ixpNzHho1UY3Ohpt+Eabp6RG572PwSRkBaegUf5Y5MXeueFRfD4XghD+p9yS8u6aohyV378+hS80kvZnTWd2eiveVL7Q90v5DiOSQLApGbIV2G44IxEw2uIKsuWvffHT8JHO2RxJkitMMfOC+OSLMwph76bCPS+0hYM8kFgEl4xFyTGggt/JE3njsBxW49xeYZfnUYUDndPRxIWDFVT2WqUKup7aZQ4gUFcycaEH97G5lD1JgGQVGN5jGL2XjksL8EL2WrkZkj7Mkwlo03MFQYETI/wPTEqUdcsgFdXOCGMw34z5Pz2VlnNXn3faJcb/EmO700V9FtLl4sedrhQFfq8oyBIwwycQNtQGBdx2pfCJhjeLMKSeQ+BYoUxddVIpPoBdo0d4G4rrlK2BREXPCuyeH4dmB3rCPyTcWheDZtVLdid/MJwCujHV9jJVj3W5UTW5+pwkcBenKNyb/A0yYUqFDaylhA4Ff6dgxMUqeZiNfxGXORFKuNgQwd/4941XXqA/U0pX1uyPm8Z+ydGBmtScMw2cLtmWLFtUYA04OsqUWVaaX63Dvyr0OuohK8gSIX2m89KrHPV5hcCaH32WycKCi3zgSG+RfFLX9+I+LG0YQ2dcyRU5VVK4h1mkv4MRIqphyEjifJBweXHgmS8nP8kbRuPQfeM++y+1VPvUYwiTlHK48YW/H0Q/FLkXfQA6l3gVZA2jHJ5zPTJcbfY+3fRJr2g="}],"wiki_items":[{"catalog_id":"de69fb0c-330e-4831-813d-94fb958688da","title":"快速开始","description":"getting-started","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"817d80e4-81ba-4f8a-b0e2-85e99d8a73ef","gmt_create":"2026-06-30T14:07:37.609842+08:00","gmt_modified":"2026-06-30T14:07:37.615532+08:00"},{"catalog_id":"70ba09ee-60a3-41f9-bdda-3cb904cb26de","title":"系统架构","description":"architecture-design","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"2b5fd78d-2407-4ccc-8807-9bb05c0a687e","gmt_create":"2026-06-30T14:08:09.125669+08:00","gmt_modified":"2026-06-30T14:08:09.130252+08:00"},{"catalog_id":"dd61923f-65f8-4e98-85f4-0e0a0a649a27","title":"项目概述","description":"project-overview","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"190d3cad-a28e-4cf2-a8c7-64d953415cca","gmt_create":"2026-06-30T14:09:11.170718+08:00","gmt_modified":"2026-06-30T14:09:11.17433+08:00"},{"catalog_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","title":"后端API文档","description":"backend-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"1f4b6f57-25c5-444e-a943-d162d896dc21","gmt_create":"2026-06-30T14:10:41.226897+08:00","gmt_modified":"2026-06-30T14:10:41.230722+08:00"},{"catalog_id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","title":"数据库设计","description":"database-schema","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"4553d9a4-e0e6-4bc3-b285-ecc6df9dc822","gmt_create":"2026-06-30T14:10:45.945099+08:00","gmt_modified":"2026-06-30T14:10:45.95039+08:00"},{"catalog_id":"aa2583bf-2c6e-4792-b794-1563db547d08","title":"前端组件","description":"frontend-components","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"ed153077-3827-4586-8838-812707189c14","gmt_create":"2026-06-30T14:11:17.426266+08:00","gmt_modified":"2026-06-30T14:11:17.430273+08:00"},{"catalog_id":"a3ddc4e4-116f-4781-ba9f-17c85c85396e","title":"部署与运维","description":"deployment-operations","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"c45b2f5f-49f8-4c8d-b489-44b4c6800e99","gmt_create":"2026-06-30T14:12:37.804986+08:00","gmt_modified":"2026-06-30T14:12:37.808728+08:00"},{"catalog_id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","title":"核心功能模块","description":"core-features","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"d4cb0c3c-97e9-449f-8918-f1c01e7e3561","gmt_create":"2026-06-30T14:13:04.754131+08:00","gmt_modified":"2026-06-30T14:13:04.758965+08:00"},{"catalog_id":"0545bd33-f65c-4e1f-b2cb-04bea825925d","title":"开发指南","description":"development-guide","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"d7d400d2-aa83-47a2-b61a-55a62369b426","gmt_create":"2026-06-30T14:13:05.373036+08:00","gmt_modified":"2026-06-30T14:13:05.375096+08:00"},{"catalog_id":"bcc45977-c058-4033-b0b1-9fd4cd7f4443","title":"前端架构","description":"frontend-architecture","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"6b28e060-0be3-411e-8a94-3777d165d10e","gmt_create":"2026-06-30T14:14:52.873609+08:00","gmt_modified":"2026-06-30T14:14:52.878043+08:00"},{"catalog_id":"0f657e8b-77cb-4604-81cd-d3e921d28e21","title":"布局组件","description":"layout-components","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"b6857b45-a960-4168-92dd-1edcf6567e47","gmt_create":"2026-06-30T14:15:24.293181+08:00","gmt_modified":"2026-06-30T14:15:24.2965+08:00"},{"catalog_id":"d34906db-4455-4481-9512-b29115655378","title":"认证系统API","description":"auth-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"7f894188-cf72-40a2-af95-f13ef3dd1f6e","gmt_create":"2026-06-30T14:15:47.975759+08:00","gmt_modified":"2026-06-30T14:15:47.98224+08:00"},{"catalog_id":"7f36202b-af69-4fc0-b62b-a57e415deb69","title":"部署指南","description":"deployment-guide","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","gmt_create":"2026-06-30T14:16:33.823992+08:00","gmt_modified":"2026-06-30T14:16:33.828188+08:00"},{"catalog_id":"1af0f0e8-0c53-41d7-a894-47d9cc19d4f9","title":"用户认证系统","description":"authentication-system","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"772c69b5-886e-48f6-bd11-faf8ca2155e8","gmt_create":"2026-06-30T14:17:38.562007+08:00","gmt_modified":"2026-06-30T14:17:38.563255+08:00"},{"catalog_id":"dbe5d77f-6f4d-476c-88cf-797b80a11a11","title":"实体关系设计","description":"entity-relationships","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"0efcac71-9db4-49c9-a660-690dcb97cd54","gmt_create":"2026-06-30T14:18:01.58459+08:00","gmt_modified":"2026-06-30T14:18:01.58743+08:00"},{"catalog_id":"5a3639b1-98bc-4bc7-a346-91ed56edd2af","title":"后端架构","description":"backend-architecture","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","gmt_create":"2026-06-30T14:19:05.640846+08:00","gmt_modified":"2026-06-30T14:19:05.643035+08:00"},{"catalog_id":"779d6806-96dc-4c97-8cfb-15a3d7855bd1","title":"品牌管理API","description":"brands-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"b66da3f2-6889-45dc-a824-2591d2f5f0f3","gmt_create":"2026-06-30T14:19:07.598117+08:00","gmt_modified":"2026-06-30T14:19:07.600914+08:00"},{"catalog_id":"eb78ed75-b786-4b43-ba43-58a5ea8a23a6","title":"业务组件","description":"business-components","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"2971fa4f-335a-4294-9668-0967b9047d66","gmt_create":"2026-06-30T14:19:27.851755+08:00","gmt_modified":"2026-06-30T14:19:27.855695+08:00"},{"catalog_id":"f96081f7-f508-41e2-bd45-a5b36a1ea114","title":"环境配置","description":"environment-config","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"62bcda0f-7c78-4109-9649-58bbf9fd68ae","gmt_create":"2026-06-30T14:21:11.821343+08:00","gmt_modified":"2026-06-30T14:21:11.825384+08:00"},{"catalog_id":"1e3d40bc-a833-4f35-891c-9dd96f09a1a3","title":"品牌管理","description":"brand-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"babe3ec0-01cb-43c3-93db-7e59cdccce68","gmt_create":"2026-06-30T14:21:25.618321+08:00","gmt_modified":"2026-06-30T14:21:25.623289+08:00"},{"catalog_id":"92f94141-482e-499c-bbc3-6101e70206ff","title":"品牌模型","description":"brand-model","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"ef11f60f-47aa-41bf-8884-6d51bc9ae8ef","gmt_create":"2026-06-30T14:21:29.093976+08:00","gmt_modified":"2026-06-30T14:21:29.097382+08:00"},{"catalog_id":"94ec54d4-0aa0-4e58-8e63-5ad6ddb6edbe","title":"型号管理API","description":"models-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","gmt_create":"2026-06-30T14:23:05.595716+08:00","gmt_modified":"2026-06-30T14:23:05.599954+08:00"},{"catalog_id":"b47d7f83-5401-4a63-ade2-f087a2f61987","title":"数据流设计","description":"data-flow-design","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"c6f2cb24-ff10-4ae7-87c2-b23b9bbee033","gmt_create":"2026-06-30T14:23:25.129255+08:00","gmt_modified":"2026-06-30T14:23:25.133578+08:00"},{"catalog_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","title":"页面组件","description":"page-components","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"f0978b42-6f98-470e-922f-22dec2fac24d","gmt_create":"2026-06-30T14:24:27.13852+08:00","gmt_modified":"2026-06-30T14:24:27.143035+08:00"},{"catalog_id":"72a24a80-f221-49da-88a8-83c0f49f4e9d","title":"型号模型","description":"model-model","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"edd1d813-70d4-49de-9f9e-e3ebf7a68678","gmt_create":"2026-06-30T14:24:50.785915+08:00","gmt_modified":"2026-06-30T14:24:50.78921+08:00"},{"catalog_id":"00a9d595-dc79-4ca4-8264-1c3f4a200a28","title":"监控运维","description":"monitoring-operations","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"86f882d7-9e64-4c38-85e7-4782fd55fed2","gmt_create":"2026-06-30T14:25:08.609638+08:00","gmt_modified":"2026-06-30T14:25:08.61406+08:00"},{"catalog_id":"93c96675-6099-4ed5-8f40-6a47b3050712","title":"型号管理","description":"model-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"8d4422fd-bd93-431d-a97c-70b75f370f82","gmt_create":"2026-06-30T14:26:44.041445+08:00","gmt_modified":"2026-06-30T14:26:44.046413+08:00"},{"catalog_id":"41e8823b-fa7a-4a80-809d-cf21088bdba2","title":"OTA固件API","description":"ota-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"be7e1733-8c9e-4849-99b0-bab40fdf271e","gmt_create":"2026-06-30T14:26:52.74545+08:00","gmt_modified":"2026-06-30T14:26:52.749367+08:00"},{"catalog_id":"6cd96b12-bb94-4748-94a8-9ef9bf21aee0","title":"集成模式","description":"integration-patterns","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"4619dc3e-419f-435b-ba7c-e600e188743a","gmt_create":"2026-06-30T14:27:35.804293+08:00","gmt_modified":"2026-06-30T14:27:35.809224+08:00"},{"catalog_id":"02f97459-8352-4fff-9216-8fcabb128d77","title":"故障排除","description":"troubleshooting-faq","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"ff04bd0e-99c4-481c-ac8c-3c1a6cae1fb5","gmt_create":"2026-06-30T14:28:16.984682+08:00","gmt_modified":"2026-06-30T14:28:16.989286+08:00"},{"catalog_id":"92ff3472-40b9-4adf-82b2-faf5a4d4b158","title":"OTA固件模型","description":"ota-model","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"b2376dbd-002b-4469-8e6e-71748e46e7c2","gmt_create":"2026-06-30T14:28:22.047078+08:00","gmt_modified":"2026-06-30T14:28:22.050489+08:00"},{"catalog_id":"6dc54635-13f8-4ae3-b3a7-54c65dea2997","title":"OTA固件管理","description":"ota-firmware-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"da7627b0-17b7-42c7-a029-e357bc889416","gmt_create":"2026-06-30T14:29:32.814324+08:00","gmt_modified":"2026-06-30T18:39:56.546951+08:00"},{"catalog_id":"b4054b83-f0cb-4b7e-9b3d-effc904a5686","title":"用户管理API","description":"users-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"8f464fc9-6537-45fa-a0dd-eacdf742b5a1","gmt_create":"2026-06-30T14:30:22.103174+08:00","gmt_modified":"2026-06-30T14:30:22.110852+08:00"},{"catalog_id":"7a728623-5bd2-48eb-80d9-0f253bc74123","title":"用户模型","description":"user-model","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"b5718a44-f452-496d-83c3-4e89b844c709","gmt_create":"2026-06-30T14:30:58.462691+08:00","gmt_modified":"2026-06-30T14:30:58.467737+08:00"},{"catalog_id":"4d08f4ca-84f9-4f9c-8d9a-0983f78a7005","title":"用户权限管理","description":"user-permission-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"100cbee2-f7a5-4cc9-83a3-900a4aacac7e","gmt_create":"2026-06-30T14:30:59.491588+08:00","gmt_modified":"2026-06-30T14:30:59.497862+08:00"},{"catalog_id":"a6304333-66ad-4b0c-834f-a6a514069e3f","title":"分享码日志API","description":"share-code-logs-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"77bc73e0-8709-4209-96e0-5522f9356b06","gmt_create":"2026-06-30T14:32:03.999307+08:00","gmt_modified":"2026-06-30T14:32:04.003175+08:00"},{"catalog_id":"e1d1f354-edc2-4c91-8d91-63d256dced21","title":"分享码日志模型","description":"share-code-log-model","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"539729a8-aa4b-40c6-bf3b-ec9f467f7717","gmt_create":"2026-06-30T14:32:46.405942+08:00","gmt_modified":"2026-06-30T14:32:46.410705+08:00"},{"catalog_id":"c6207e0a-6059-40f8-a27d-367356363cbf","title":"分享码日志管理","description":"share-code-log-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"cf1f3ceb-e3b1-4d5c-8353-f0ea4345414c","gmt_create":"2026-06-30T14:33:14.023031+08:00","gmt_modified":"2026-06-30T14:33:14.02952+08:00"},{"catalog_id":"8f0760f5-ef8b-43ef-8fd0-7c6d1f693193","title":"侧边栏Logo组件","description":"sidebar-logo-component","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"0e003133-7d1a-4708-8599-fc71707070d6","gmt_create":"2026-06-30T14:34:09.992825+08:00","gmt_modified":"2026-06-30T14:34:09.99631+08:00"},{"catalog_id":"7272429b-c7fb-4bd8-9bd1-0093025d68b4","title":"仪表板API","description":"dashboard-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"799ec9fc-088e-456c-8f93-72516adac3ac","gmt_create":"2026-06-30T14:34:26.68183+08:00","gmt_modified":"2026-06-30T14:34:26.686097+08:00"},{"catalog_id":"105cfe1d-aeeb-44c1-ac3b-6550f2c7a307","title":"首页仪表板","description":"home-page","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"ad988472-7d0b-4076-86c8-f14661c5923d","gmt_create":"2026-06-30T14:35:15.427082+08:00","gmt_modified":"2026-06-30T14:35:15.43438+08:00"},{"catalog_id":"727c25ac-db22-4b34-9486-6fd6946f64f3","title":"标签页视图组件","description":"tabs-view-component","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"4b6d6abc-bfd2-48a5-9c5e-de89f278f887","gmt_create":"2026-06-30T14:35:27.880644+08:00","gmt_modified":"2026-06-30T14:35:27.886677+08:00"},{"catalog_id":"c8151791-2f8d-4e1e-8139-b0cf921ef002","title":"登录页面","description":"login-page","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"7eee30c6-7725-456b-8b43-35b5e4df7e99","gmt_create":"2026-06-30T14:36:20.14068+08:00","gmt_modified":"2026-06-30T14:36:20.14737+08:00"},{"catalog_id":"32dbace3-24e6-4a2d-9f87-83f2ec825b71","title":"密码修改对话框","description":"change-password-dialog","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"5b84c784-85d8-46e0-8972-e7816f6bd687","gmt_create":"2026-06-30T14:36:50.047707+08:00","gmt_modified":"2026-06-30T14:36:50.062351+08:00"},{"catalog_id":"af7f747a-9be6-41c3-b091-4ee5901d8cc7","title":"品牌管理页面","description":"brand-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"791c01a2-dea1-407b-948d-3e2da8cbebed","gmt_create":"2026-06-30T14:37:33.758372+08:00","gmt_modified":"2026-06-30T14:37:33.76504+08:00"},{"catalog_id":"748c8db9-9197-4c3b-ae1d-a6e51d058342","title":"型号管理页面","description":"model-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","gmt_create":"2026-06-30T14:38:54.071337+08:00","gmt_modified":"2026-06-30T14:38:54.075977+08:00"},{"catalog_id":"ff078afb-bb04-4600-b51d-5af48a6a6f06","title":"系统用户管理页面","description":"system-users","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"6003d293-f2aa-4c49-817a-c7fa652890ed","gmt_create":"2026-06-30T14:39:03.424765+08:00","gmt_modified":"2026-06-30T14:39:03.42914+08:00"},{"catalog_id":"f23cd2ae-fcf4-445f-b8e9-b3382f277ae0","title":"OTA固件管理页面","description":"ota-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","gmt_create":"2026-06-30T14:40:01.702004+08:00","gmt_modified":"2026-06-30T18:39:29.639208+08:00"},{"catalog_id":"830433a7-7370-479c-aa05-c21ff47b059e","title":"分享码日志页面","description":"share-code-log","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"73336201-a22f-4329-afc6-40fb5f00f4f1","gmt_create":"2026-06-30T14:40:47.216934+08:00","gmt_modified":"2026-06-30T14:40:47.220483+08:00"}],"wiki_overview":{"content":"\u003cblog\u003e\n\n# 耳机品牌与型号管理平台项目概述\n\n## 1. 项目介绍\n\n### 项目目的\n这是一个基于Vue 3 + Express的耳机品牌与型号管理平台,旨在为音频设备制造商和经销商提供完整的品牌、型号、OTA固件更新以及用户权限管理功能。\n\n### 核心目标\n- 提供统一的品牌和型号数据管理界面\n- 支持OTA固件升级管理和版本控制\n- 实现多用户权限体系和访问控制\n- 提供分享码日志追踪功能\n- 构建现代化的前后端分离架构\n\n### 目标用户\n- 音频设备厂商管理员\n- 技术支持人员\n- 系统维护人员\n\n## 2. 技术架构\n\n### 整体架构设计\n\n```mermaid\ngraph TB\n subgraph \"前端层 (Frontend)\"\n FE_Vue[Vue 3 应用]\n FE_Router[Vue Router]\n FE_API[API 请求封装]\n FE_Components[组件库]\n end\n \n subgraph \"后端层 (Backend)\"\n BE_Express[Express 框架]\n BE_Routes[路由模块]\n BE_Middleware[中间件]\n BE_Services[业务服务]\n end\n \n subgraph \"数据层 (Data Layer)\"\n DB_MySQL[MySQL 数据库]\n DB_Sequelize[Sequelize ORM]\n Cache_Redis[Redis 缓存]\n end\n \n subgraph \"基础设施\"\n Docker[Docker 容器化]\n Nginx[Nginx 反向代理]\n Env[环境配置]\n end\n \n FE_Vue --\u003e FE_Router\n FE_Vue --\u003e FE_API\n FE_API --\u003e BE_Express\n BE_Express --\u003e BE_Routes\n BE_Express --\u003e BE_Middleware\n BE_Routes --\u003e BE_Services\n BE_Services --\u003e DB_Sequelize\n DB_Sequelize --\u003e DB_MySQL\n BE_Services --\u003e Cache_Redis\n BE_Express --\u003e Nginx\n Nginx --\u003e FE_Vue\n Docker --\u003e BE_Express\n Docker --\u003e FE_Vue\n```\n\n### 核心设计模式\n- **MVC架构**: 后端采用经典的模型-视图-控制器模式\n- **分层架构**: 清晰的业务逻辑分层,便于维护和扩展\n- **中间件模式**: 统一的请求处理流程\n- **依赖注入**: 通过模块化设计实现松耦合\n\n## 3. 关键实现\n\n### 主要入口点\n\n#### 后端入口\n- **入口文件**: `backend/src/app.js` - 应用程序主入口,配置中间件、路由和数据库连接\n- **配置文件**: `backend/src/config/database.js` - 数据库连接配置,支持环境变量\n- **路由聚合**: `backend/src/routes/index.js` - 所有路由模块的统一导入和导出\n\n#### 前端入口 \n- **应用入口**: `frontend/src/main.js` - Vue应用初始化,配置Element Plus和路由\n- **应用根组件**: `frontend/src/App.vue` - 根组件模板\n- **路由配置**: `frontend/src/router/index.js` - 路由定义和导航守卫\n\n### 核心模块\n\n#### 数据模型 (Models)\n```mermaid\nerDiagram\n BRAND ||--o{ MODEL : \"包含\"\n MODEL ||--o{ OTA : \"支持\"\n BRAND ||--|| DASHBOARD_USER : \"管理\"\n \n BRAND {\n int id PK\n string name\n }\n \n MODEL {\n int id PK\n int brand_id FK\n string name\n string description\n }\n \n OTA {\n int id PK\n int model_id FK\n string version\n string file_path\n datetime create_time\n }\n \n DASHBOARD_USER {\n int id PK\n string username\n string password_hash\n boolean is_super_admin\n int status\n }\n```\n\n#### API 路由结构\n```mermaid\ngraph TD\n Auth[认证路由] --\u003e Login[用户登录]\n Auth --\u003e Profile[用户信息]\n Auth --\u003e Password[修改密码]\n \n Brands[品牌路由] --\u003e BrandList[品牌列表]\n Brands --\u003e BrandCRUD[品牌增删改查]\n \n Models[型号路由] --\u003e ModelList[型号列表]\n Models --\u003e ModelCRUD[型号增删改查]\n \n OTA[OTA路由] --\u003e OTAList[OTA列表]\n OTA --\u003e OTACRUD[OTA增删改查]\n \n Users[用户路由] --\u003e UserList[用户列表]\n Users --\u003e UserCRUD[用户增删改查]\n \n Dashboard[仪表板路由] --\u003e Stats[统计信息]\n Dashboard --\u003e Reports[报表生成]\n```\n\n### 配置管理\n\n#### 环境配置\n- **Docker Compose**: `docker-compose.yml` - 容器化部署配置,包含前后端服务和网络设置\n- **开发配置**: `frontend/vite.config.js` - Vite构建工具配置,支持代理和别名\n- **包管理**: 使用pnpm作为包管理器,支持工作空间\n\n#### 数据库配置\n- **ORM配置**: `backend/src/config/database.js` - Sequelize ORM配置\n- **Redis缓存**: `backend/src/config/redis.js` - Redis连接配置\n- **日志系统**: `backend/src/config/logger.js` - Winston日志配置\n\n### 外部依赖\n\n#### 后端依赖\n```mermaid\ngraph LR\n Express[Express 4.21] --\u003e Middleware[中间件生态]\n Sequelize[Sequelize 6.37] --\u003e MySQL[MySQL2 3.11]\n JWT[jsonwebtoken 9.0] --\u003e Auth[认证系统]\n Axios[Axios 1.7] --\u003e HTTP[HTTP客户端]\n Zod[3.23] --\u003e Validation[数据验证]\n AWS[aws-sdk 3.650] --\u003e S3[对象存储]\n Redis[ioredis 5.6] --\u003e Cache[缓存系统]\n```\n\n#### 前端依赖\n```mermaid\ngraph LR\n Vue[Vu3 3.3.4] --\u003e Composition[组合式API]\n Router[Vue Router 4.2.4] --\u003e Navigation[路由导航]\n ElementPlus[Element Plus 2.3.14] --\u003e UI[UI组件库]\n Axios[Axios 1.5.0] --\u003e HTTP[HTTP通信]\n Icons[图标库] --\u003e Components[图标组件]\n```\n\n### 集成点\n\n#### API 接口设计\n```mermaid\nsequenceDiagram\n participant Client as 前端客户端\n participant Auth as 认证接口\n participant User as 用户接口\n participant Data as 数据接口\n \n Client-\u003e\u003e+Auth: POST /api/auth/login\n Auth--\u003e\u003e-Client: 返回JWT令牌\n \n Client-\u003e\u003e+User: GET /api/auth/me\n User--\u003e\u003e-Client: 返回用户信息\n \n Client-\u003e\u003e+Data: GET /api/brands\n Data--\u003e\u003e-Client: 返回品牌数据\n \n Client-\u003e\u003e+Data: POST /api/models\n Data--\u003e\u003e-Client: 返回创建结果\n```\n\n## 4. 核心功能\n\n### 功能概览\n\n#### 用户认证系统\n- **登录认证**: 基于JWT的无状态认证\n- **权限控制**: 支持超级管理员和普通用户的权限区分\n- **密码安全**: 密码哈希存储和验证\n\n#### 品牌管理系统\n- **品牌维护**: 品牌的增删改查操作\n- **品牌关联**: 与型号的多对一关系管理\n- **数据验证**: 基于Zod的输入验证\n\n#### 型号管理功能\n- **型号列表**: 支持分页和搜索\n- **型号详情**: 包含详细的技术规格\n- **OTA关联**: 与固件更新的关联管理\n\n#### OTA固件管理\n- **版本控制**: 固件版本管理和发布\n- **文件上传**: 支持固件文件的上传和存储\n- **更新推送**: 向设备推送固件更新\n\n### 功能架构图\n\n```mermaid\nstateDiagram-v2\n [*] --\u003e 未登录\n 未登录 --\u003e 登录中: 用户输入凭据\n 登录中 --\u003e 已登录: 认证成功\n 登录中 --\u003e 未登录: 认证失败\n \n 已登录 --\u003e 品牌管理: 管理员权限\n 已登录 --\u003e 型号管理: 普通用户权限\n 已登录 --\u003e OTA管理: 技术支持权限\n \n 品牌管理 --\u003e 数据库操作: CRUD操作\n 型号管理 --\u003e 数据库操作: CRUD操作\n OTA管理 --\u003e 文件上传: 固件上传\n \n 已登录 --\u003e 修改密码: 用户操作\n 修改密码 --\u003e 已登录: 更新成功\n \n 已登录 --\u003e 退出登录: 用户操作\n 退出登录 --\u003e 未登录: 清除会话\n```\n\n### 实现亮点\n\n#### 响应式设计\n- **组件化开发**: 基于Vue 3 Composition API的组件化架构\n- **状态管理**: 结合Vue Router实现的单页应用体验\n- **主题系统**: 支持暗色主题切换\n\n#### 开发体验\n- **热重载**: Vite提供的快速开发服务器\n- **TypeScript支持**: 良好的类型安全保障\n- **代码分割**: 按需加载优化性能\n\n#### 生产部署\n- **容器化**: Docker支持一键部署\n- **反向代理**: Nginx配置优化静态资源服务\n- **环境隔离**: 支持开发、测试、生产多环境配置\n\n## 5. 总结与建议\n\n### 项目优势\n1. **架构清晰**: 前后端分离,职责明确\n2. **技术栈现代**: Vue 3 + Express + MySQL的成熟技术组合\n3. **可扩展性强**: 模块化设计便于功能扩展\n4. **部署友好**: Docker化部署简化运维\n\n### 改进建议\n1. **增加单元测试**: 补充前端和后端的测试覆盖率\n2. **完善文档**: 添加详细的API文档和开发指南\n3. **监控告警**: 集成应用性能监控和错误追踪\n4. **安全加固**: 增强CSRF防护和API限流机制\n\n### 下一步计划\n1. 实现完整的用户权限管理\n2. 添加数据导入导出功能\n3. 优化移动端适配\n4. 集成自动化测试和CI/CD流水线\n\n---\n\n**Sources:**\n- [README.md](README.md)\n- [backend/package.json](backend/package.json)\n- [frontend/package.json](frontend/package.json)\n- [backend/src/app.js](backend/src/app.js)\n- [backend/src/config/database.js](backend/src/config/database.js)\n- [backend/src/models/index.js](backend/src/models/index.js)\n- [backend/src/routes/index.js](backend/src/routes/index.js)\n- [frontend/src/main.js](frontend/src/main.js)\n- [frontend/src/App.vue](frontend/src/App.vue)\n- [docker-compose.yml](docker-compose.yml)\n- [frontend/vite.config.js](frontend/vite.config.js)\n- [backend/src/models/Brand.js](backend/src/models/Brand.js)\n- [backend/src/routes/auth.js](backend/src/routes/auth.js)\n- [frontend/src/router/index.js](frontend/src/router/index.js)\n- [frontend/src/api/auth.js](frontend/src/api/auth.js)\n\n\u003c/blog\u003e","gmt_create":"2026-06-30T14:01:22.420851+08:00","gmt_modified":"2026-06-30T14:01:22.420851+08:00","id":"f0295b72-1b14-4146-868c-8a0c307045c3","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414"},"wiki_readme":{"content":"No readme file","gmt_create":"2026-06-30T13:59:47.635503+08:00","gmt_modified":"2026-06-30T13:59:47.635503+08:00","id":"60f4194d-74f4-49d9-ae65-220e9f5829cc","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414"},"wiki_repo":{"id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"dashboard","progress_status":"completed","wiki_present_status":"COMPLETED","optimized_catalog":"\".\\n├── .pnpm-store/v11/\\n│ ├── files/\\n│ │ ├── 00/\\n│ │ ├── 01/\\n│ │ ├── 02/\\n│ │ ├── 03/\\n│ │ ├── 04/\\n│ │ ├── 05/\\n│ │ ├── 06/\\n│ │ ├── 07/\\n│ │ ├── 08/\\n│ │ ├── 09/\\n│ │ ├── 0a/\\n│ │ ├── 0b/\\n│ │ ├── 0c/\\n│ │ ├── 0d/\\n│ │ ├── 0e/\\n│ │ ├── 0f/\\n│ │ ├── 10/\\n│ │ ├── 11/\\n│ │ ├── 12/\\n│ │ ├── 13/\\n│ │ ├── 14/\\n│ │ ├── 15/\\n│ │ ├── 16/\\n│ │ ├── 17/\\n│ │ ├── 18/\\n│ │ ├── 19/\\n│ │ ├── 1a/\\n│ │ ├── 1b/\\n│ │ ├── 1c/\\n│ │ ├── 1d/\\n│ │ ├── 1e/\\n│ │ ├── 1f/\\n│ │ ├── 20/\\n│ │ ├── 21/\\n│ │ ├── 22/\\n│ │ ├── 23/\\n│ │ ├── 24/\\n│ │ ├── 25/\\n│ │ ├── 26/\\n│ │ ├── 27/\\n│ │ ├── 28/\\n│ │ ├── 29/\\n│ │ ├── 2a/\\n│ │ ├── 2b/\\n│ │ ├── 2c/\\n│ │ ├── 2d/\\n│ │ ├── 2e/\\n│ │ ├── 2f/\\n│ │ ├── 30/\\n│ │ ├── 31/\\n│ │ ├── 32/\\n│ │ ├── 33/\\n│ │ ├── 34/\\n│ │ ├── 35/\\n│ │ ├── 36/\\n│ │ ├── 37/\\n│ │ ├── 38/\\n│ │ ├── 39/\\n│ │ ├── 3a/\\n│ │ ├── 3b/\\n│ │ ├── 3c/\\n│ │ ├── 3d/\\n│ │ ├── 3e/\\n│ │ ├── 3f/\\n│ │ ├── 40/\\n│ │ ├── 41/\\n│ │ ├── 42/\\n│ │ ├── 43/\\n│ │ ├── 44/\\n│ │ ├── 45/\\n│ │ ├── 46/\\n│ │ ├── 47/\\n│ │ ├── 48/\\n│ │ ├── 49/\\n│ │ ├── 4a/\\n│ │ ├── 4b/\\n│ │ ├── 4c/\\n│ │ ├── 4d/\\n│ │ ├── 4e/\\n│ │ ├── 4f/\\n│ │ ├── 50/\\n│ │ ├── 51/\\n│ │ ├── 52/\\n│ │ ├── 53/\\n│ │ ├── 54/\\n│ │ ├── 55/\\n│ │ ├── 56/\\n│ │ ├── 57/\\n│ │ ├── 58/\\n│ │ ├── 59/\\n│ │ ├── 5a/\\n│ │ ├── 5b/\\n│ │ ├── 5c/\\n│ │ ├── 5d/\\n│ │ ├── 5e/\\n│ │ ├── 5f/\\n│ │ ├── 60/\\n│ │ ├── 61/\\n│ │ ├── 62/\\n│ │ ├── 63/\\n│ │ ├── 64/\\n│ │ ├── 65/\\n│ │ ├── 66/\\n│ │ ├── 67/\\n│ │ ├── 68/\\n│ │ ├── 69/\\n│ │ ├── 6a/\\n│ │ ├── 6b/\\n│ │ ├── 6c/\\n│ │ ├── 6d/\\n│ │ ├── 6e/\\n│ │ ├── 6f/\\n│ │ ├── 70/\\n│ │ ├── 71/\\n│ │ ├── 72/\\n│ │ ├── 73/\\n│ │ ├── 74/\\n│ │ ├── 75/\\n│ │ ├── 76/\\n│ │ ├── 77/\\n│ │ ├── 78/\\n│ │ ├── 79/\\n│ │ ├── 7a/\\n│ │ ├── 7b/\\n│ │ ├── 7c/\\n│ │ ├── 7d/\\n│ │ ├── 7e/\\n│ │ ├── 7f/\\n│ │ ├── 80/\\n│ │ ├── 81/\\n│ │ ├── 82/\\n│ │ ├── 83/\\n│ │ ├── 84/\\n│ │ ├── 85/\\n│ │ ├── 86/\\n│ │ ├── 87/\\n│ │ ├── 88/\\n│ │ ├── 89/\\n│ │ ├── 8a/\\n│ │ ├── 8b/\\n│ │ ├── 8c/\\n│ │ ├── 8d/\\n│ │ ├── 8e/\\n│ │ ├── 8f/\\n│ │ ├── 90/\\n│ │ ├── 91/\\n│ │ ├── 92/\\n│ │ ├── 93/\\n│ │ ├── 94/\\n│ │ ├── 95/\\n│ │ ├── 96/\\n│ │ ├── 97/\\n│ │ ├── 98/\\n│ │ ├── 99/\\n│ │ ├── 9a/\\n│ │ ├── 9b/\\n│ │ ├── 9c/\\n│ │ ├── 9d/\\n│ │ ├── 9e/\\n│ │ ├── 9f/\\n│ │ ├── a0/\\n│ │ ├── a1/\\n│ │ ├── a2/\\n│ │ ├── a3/\\n│ │ ├── a4/\\n│ │ ├── a5/\\n│ │ ├── a6/\\n│ │ ├── a7/\\n│ │ ├── a8/\\n│ │ ├── a9/\\n│ │ ├── aa/\\n│ │ ├── ab/\\n│ │ ├── ac/\\n│ │ ├── ad/\\n│ │ ├── ae/\\n│ │ ├── af/\\n│ │ ├── b0/\\n│ │ ├── b1/\\n│ │ ├── b2/\\n│ │ ├── b3/\\n│ │ ├── b4/\\n│ │ ├── b5/\\n│ │ ├── b6/\\n│ │ ├── b7/\\n│ │ ├── b8/\\n│ │ ├── b9/\\n│ │ ├── ba/\\n│ │ ├── bb/\\n│ │ ├── bc/\\n│ │ ├── bd/\\n│ │ ├── be/\\n│ │ ├── bf/\\n│ │ ├── c0/\\n│ │ ├── c1/\\n│ │ ├── c2/\\n│ │ ├── c3/\\n│ │ ├── c4/\\n│ │ ├── c5/\\n│ │ ├── c6/\\n│ │ ├── c7/\\n│ │ ├── c8/\\n│ │ ├── c9/\\n│ │ ├── ca/\\n│ │ ├── cb/\\n│ │ ├── cc/\\n│ │ ├── cd/\\n│ │ ├── ce/\\n│ │ ├── cf/\\n│ │ ├── d0/\\n│ │ ├── d1/\\n│ │ ├── d2/\\n│ │ ├── d3/\\n│ │ ├── d4/\\n│ │ ├── d5/\\n│ │ ├── d6/\\n│ │ ├── d7/\\n│ │ ├── d8/\\n│ │ ├── d9/\\n│ │ ├── da/\\n│ │ ├── db/\\n│ │ ├── dc/\\n│ │ ├── dd/\\n│ │ ├── de/\\n│ │ ├── df/\\n│ │ ├── e0/\\n│ │ ├── e1/\\n│ │ ├── e2/\\n│ │ ├── e3/\\n│ │ ├── e4/\\n│ │ ├── e5/\\n│ │ ├── e6/\\n│ │ ├── e7/\\n│ │ ├── e8/\\n│ │ ├── e9/\\n│ │ ├── ea/\\n│ │ ├── eb/\\n│ │ ├── ec/\\n│ │ ├── ed/\\n│ │ ├── ee/\\n│ │ ├── ef/\\n│ │ ├── f0/\\n│ │ ├── f1/\\n│ │ ├── f2/\\n│ │ ├── f3/\\n│ │ ├── f4/\\n│ │ ├── f5/\\n│ │ ├── f6/\\n│ │ ├── f7/\\n│ │ ├── f8/\\n│ │ ├── f9/\\n│ │ ├── fa/\\n│ │ ├── fb/\\n│ │ ├── fc/\\n│ │ ├── fd/\\n│ │ ├── fe/\\n│ │ └── ff/\\n│ └── projects/7abbab685605e7ae627cb6fc4a2315b1/\\n│ └── package.json\\n├── backend/\\n│ ├── src/\\n│ │ ├── config/\\n│ │ │ ├── database.js\\n│ │ │ ├── env.js\\n│ │ │ ├── loadEnv.js\\n│ │ │ ├── logger.js\\n│ │ │ └── redis.js\\n│ │ ├── middleware/\\n│ │ │ ├── auth.js\\n│ │ │ └── bodyLimit.js\\n│ │ ├── models/\\n│ │ │ ├── Brand.js\\n│ │ │ ├── DashboardUser.js\\n│ │ │ ├── Model.js\\n│ │ │ ├── Ota.js\\n│ │ │ ├── ShareCodeLog.js\\n│ │ │ └── index.js\\n│ │ ├── routes/\\n│ │ │ ├── auth.js\\n│ │ │ ├── brands.js\\n│ │ │ ├── dashboard.js\\n│ │ │ ├── index.js\\n│ │ │ ├── models.js\\n│ │ │ ├── ota.js\\n│ │ │ ├── shareCodeLogs.js\\n│ │ │ └── users.js\\n│ │ ├── services/\\n│ │ │ ├── curveClient.js\\n│ │ │ ├── eqCacheStorage.js\\n│ │ │ ├── measurementStorage.js\\n│ │ │ ├── otaStorage.js\\n│ │ │ └── userBootstrap.js\\n│ │ ├── utils/\\n│ │ │ ├── jwt.js\\n│ │ │ ├── password.js\\n│ │ │ └── response.js\\n│ │ ├── validators/\\n│ │ │ ├── brand.js\\n│ │ │ ├── model.js\\n│ │ │ └── ota.js\\n│ │ └── app.js\\n│ ├── .gitignore\\n│ ├── Dockerfile\\n│ ├── README.md\\n│ ├── package.json\\n│ ├── pnpm-lock.yaml\\n│ ├── restart.sh\\n│ ├── start.sh\\n│ └── stop.sh\\n├── frontend/\\n│ ├── public/\\n│ ├── src/\\n│ │ ├── api/\\n│ │ │ ├── auth.js\\n│ │ │ ├── brand.js\\n│ │ │ ├── dashboard.js\\n│ │ │ ├── model.js\\n│ │ │ ├── ota.js\\n│ │ │ ├── shareCodeLog.js\\n│ │ │ └── user.js\\n│ │ ├── components/\\n│ │ │ ├── ChangePasswordDialog.vue\\n│ │ │ ├── SidebarLogo.vue\\n│ │ │ └── TabsView.vue\\n│ │ ├── layout/\\n│ │ │ └── index.vue\\n│ │ ├── router/\\n│ │ │ └── index.js\\n│ │ ├── styles/\\n│ │ │ └── lux-theme.css\\n│ │ ├── utils/\\n│ │ │ ├── auth.js\\n│ │ │ ├── request.js\\n│ │ │ └── tabs.js\\n│ │ ├── views/\\n│ │ │ ├── brand/\\n│ │ │ │ └── index.vue\\n│ │ │ ├── home/\\n│ │ │ │ └── index.vue\\n│ │ │ ├── login/\\n│ │ │ │ └── index.vue\\n│ │ │ ├── model/\\n│ │ │ │ └── index.vue\\n│ │ │ ├── ota/\\n│ │ │ │ └── index.vue\\n│ │ │ ├── share-code/\\n│ │ │ │ └── log.vue\\n│ │ │ └── system/users/\\n│ │ │ └── index.vue\\n│ │ ├── App.vue\\n│ │ └── main.js\\n│ ├── .gitignore\\n│ ├── Dockerfile\\n│ ├── README.md\\n│ ├── build-and-deploy.bat\\n│ ├── index.html\\n│ ├── install.bat\\n│ ├── nginx.conf\\n│ ├── package-lock.json\\n│ ├── package.json\\n│ ├── pnpm-lock.yaml\\n│ ├── pnpm-workspace.yaml\\n│ ├── start.bat\\n│ └── vite.config.js\\n├── scripts/\\n│ └── upload.sh\\n├── .gitignore\\n├── DEPLOY.md\\n├── README.md\\n└── docker-compose.yml\\n\"","current_document_structure":"WikiEncrypted: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","catalogue_think_content":"WikiEncrypted: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","recovery_checkpoint":"wiki_generation_completed","last_commit_id":"864040f45b60387fcdbf9439e8922c639da1a093","last_commit_update":"2026-06-30T18:39:57.135847+08:00","gmt_create":"2026-06-02T14:43:54.575428+08:00","gmt_modified":"2026-06-30T18:39:57.135847+08:00","extend_info":"{\"language\":\"zh\",\"active\":true,\"branch\":\"main\",\"shareStatus\":\"\",\"server_error_code\":\"\",\"cosy_version\":\"1.4.0\"}"}}