[{"data":1,"prerenderedAt":4043},["ShallowReactive",2],{"nav-docs-zh":3,"page-/zh/docs/webspace/examples/my-own-system":1157,"surround-/zh/docs/webspace/examples/my-own-system":4037,"raw-/zh/docs/webspace/examples/my-own-system":4040},[4,67,374,775,903,1075,1085,1110],{"title":5,"tags":6,"slug":6,"path":7,"stem":8,"children":9,"page":66,"sourcePath":7},"SpaceBuilder 入门",null,"/getting-started","00.getting-started",[10,15,20,27,34,39,45,50,55,60],{"title":11,"path":12,"stem":13,"tags":6,"slug":14,"sourcePath":12},"SpaceBuilder 简介","/getting-started/overview","00.getting-started/00.overview","/getting-started/overview/",{"title":16,"path":17,"stem":18,"tags":6,"slug":19,"sourcePath":17},"创建 SetFN 账户","/getting-started/create-setfn-account","00.getting-started/05.create-setfn-account","/getting-started/create-setfn-account/",{"title":21,"path":22,"stem":23,"tags":24,"slug":26,"sourcePath":22},"在 Linux 上安装","/getting-started/install-linux","00.getting-started/10.install-linux",[25],"recommended","/getting-started/install-linux/",{"title":28,"path":29,"stem":30,"tags":31,"slug":33,"sourcePath":29},"使用 Docker 安装","/getting-started/install-docker","00.getting-started/12.install-docker",[32],"preparing","/getting-started/install-docker/",{"title":35,"path":36,"stem":37,"tags":6,"slug":38,"sourcePath":36},"在 Windows 上安装","/getting-started/install-windows","00.getting-started/14.install-windows","/getting-started/install-windows/",{"title":40,"path":41,"stem":42,"tags":43,"slug":44,"sourcePath":41},"在 macOS 上安装","/getting-started/install-macos","00.getting-started/16.install-macos",[32],"/getting-started/install-macos/",{"title":46,"path":47,"stem":48,"tags":6,"slug":49,"sourcePath":47},"初始设置","/getting-started/initial-setup","00.getting-started/20.initial-setup","/getting-started/initial-setup/",{"title":51,"path":52,"stem":53,"tags":6,"slug":54,"sourcePath":52},"许可证激活","/getting-started/license-activation","00.getting-started/30.license-activation","/getting-started/license-activation/",{"title":56,"path":57,"stem":58,"tags":6,"slug":59,"sourcePath":57},"查看访问地址（本地/内网）","/getting-started/access-url","00.getting-started/35.access-url","/getting-started/access-url/",{"title":61,"path":62,"stem":63,"tags":64,"slug":65,"sourcePath":62},"选择外部访问方式","/getting-started/access-domain","00.getting-started/40.access-domain",[25],"/getting-started/access-domain/",false,{"title":68,"tags":6,"slug":6,"path":69,"stem":70,"children":71,"page":66,"sourcePath":69},"管理空间","/admin","10.admin",[72,92,162,197,249,274,289,299,339],{"title":73,"tags":6,"slug":6,"path":74,"stem":75,"children":76,"page":66,"sourcePath":74},"管理员首页","/admin/home","10.admin/00.home",[77,82,87],{"title":78,"path":79,"stem":80,"tags":6,"slug":81,"sourcePath":79},"访问管理员页面","/admin/home/admin-page-access","10.admin/00.home/00.admin-page-access","/admin/home/admin-page-access/",{"title":83,"path":69,"stem":84,"tags":6,"slug":85,"sourcePath":86},"管理员菜单导览","10.admin/00.home/00.overview","/admin/","/admin/home/overview",{"title":88,"path":89,"stem":90,"tags":6,"slug":91,"sourcePath":89},"许可证管理","/admin/home/license","10.admin/00.home/20.license","/admin/home/license/",{"title":93,"tags":6,"slug":6,"path":94,"stem":95,"children":96,"page":66,"sourcePath":94},"用户管理","/admin/user-management","10.admin/10.user-management",[97,102,107,112,117,122,127,132,137,142,147,152,157],{"title":98,"path":99,"stem":100,"tags":6,"slug":101,"sourcePath":99},"设置注册策略和默认权限","/admin/user-management/signup-policy","10.admin/10.user-management/02.signup-policy","/admin/user-management/signup-policy/",{"title":103,"path":104,"stem":105,"tags":6,"slug":106,"sourcePath":104},"登记注册条款","/admin/user-management/signup-terms","10.admin/10.user-management/04.signup-terms","/admin/user-management/signup-terms/",{"title":108,"path":109,"stem":110,"tags":6,"slug":111,"sourcePath":109},"创建用户账户","/admin/user-management/invite-new-member","10.admin/10.user-management/10.invite-new-member","/admin/user-management/invite-new-member/",{"title":113,"path":114,"stem":115,"tags":6,"slug":116,"sourcePath":114},"修改用户账户","/admin/user-management/edit-member","10.admin/10.user-management/11.edit-member","/admin/user-management/edit-member/",{"title":118,"path":119,"stem":120,"tags":6,"slug":121,"sourcePath":119},"添加管理员","/admin/user-management/add-new-admin","10.admin/10.user-management/12.add-new-admin","/admin/user-management/add-new-admin/",{"title":123,"path":124,"stem":125,"tags":6,"slug":126,"sourcePath":124},"团队管理","/admin/user-management/team","10.admin/10.user-management/22.team","/admin/user-management/team/",{"title":128,"path":129,"stem":130,"tags":6,"slug":131,"sourcePath":129},"等级管理","/admin/user-management/level","10.admin/10.user-management/24.level","/admin/user-management/level/",{"title":133,"path":134,"stem":135,"tags":6,"slug":136,"sourcePath":134},"查看访问日志","/admin/user-management/access-log","10.admin/10.user-management/30.access-log","/admin/user-management/access-log/",{"title":138,"path":139,"stem":140,"tags":6,"slug":141,"sourcePath":139},"管理活跃设备","/admin/user-management/active-devices","10.admin/10.user-management/31.active-devices","/admin/user-management/active-devices/",{"title":143,"path":144,"stem":145,"tags":6,"slug":146,"sourcePath":144},"设置账户与安全策略","/admin/user-management/account-security","10.admin/10.user-management/32.account-security","/admin/user-management/account-security/",{"title":148,"path":149,"stem":150,"tags":6,"slug":151,"sourcePath":149},"设置人机验证（CAPTCHA）","/admin/user-management/captcha","10.admin/10.user-management/33.captcha","/admin/user-management/captcha/",{"title":153,"path":154,"stem":155,"tags":6,"slug":156,"sourcePath":154},"设置通知发送","/admin/user-management/notice-settings","10.admin/10.user-management/34.notice-settings","/admin/user-management/notice-settings/",{"title":158,"path":159,"stem":160,"tags":6,"slug":161,"sourcePath":159},"向成员群发通知邮件","/admin/user-management/bulk-mail","10.admin/10.user-management/36.bulk-mail","/admin/user-management/bulk-mail/",{"title":163,"tags":6,"slug":6,"path":164,"stem":165,"children":166,"page":66,"sourcePath":164},"服务配置","/admin/service-config","10.admin/20.service-config",[167,172,177,182,187,192],{"title":168,"path":169,"stem":170,"tags":6,"slug":171,"sourcePath":169},"文件区域设置","/admin/service-config/file-area","10.admin/20.service-config/10.file-area","/admin/service-config/file-area/",{"title":173,"path":174,"stem":175,"tags":6,"slug":176,"sourcePath":174},"Webhook 设置","/admin/service-config/webhook-settings","10.admin/20.service-config/16.webhook-settings","/admin/service-config/webhook-settings/",{"title":178,"path":179,"stem":180,"tags":6,"slug":181,"sourcePath":179},"社区设置","/admin/service-config/community-space","10.admin/20.service-config/22.community-space","/admin/service-config/community-space/",{"title":183,"path":184,"stem":185,"tags":6,"slug":186,"sourcePath":184},"AI 聊天机器人策略设置","/admin/service-config/community-ai-chatbot","10.admin/20.service-config/24.community-ai-chatbot","/admin/service-config/community-ai-chatbot/",{"title":188,"path":189,"stem":190,"tags":6,"slug":191,"sourcePath":189},"邮件设置","/admin/service-config/email-settings","10.admin/20.service-config/30.email-settings","/admin/service-config/email-settings/",{"title":193,"path":194,"stem":195,"tags":6,"slug":196,"sourcePath":194},"品牌设置","/admin/service-config/brand","10.admin/20.service-config/40.brand","/admin/service-config/brand/",{"title":198,"tags":6,"slug":6,"path":199,"stem":200,"children":201,"page":66,"sourcePath":199},"知识服务","/admin/knowledge","10.admin/30.knowledge",[202,207,214,219,224,229,234,239,244],{"title":203,"path":199,"stem":204,"tags":6,"slug":205,"sourcePath":206},"了解知识服务","10.admin/30.knowledge/00.overview","/admin/knowledge/","/admin/knowledge/overview",{"title":208,"path":209,"stem":210,"children":211,"tags":6,"slug":213,"sourcePath":209},"采集与索引","/admin/knowledge/indexing","10.admin/30.knowledge/10.indexing",[212],{"title":208,"path":209,"stem":210,"tags":6,"slug":213,"sourcePath":209},"/admin/knowledge/indexing/",{"title":215,"path":216,"stem":217,"tags":6,"slug":218,"sourcePath":216},"搜索质量与语言","/admin/knowledge/search","10.admin/30.knowledge/20.search","/admin/knowledge/search/",{"title":220,"path":221,"stem":222,"tags":6,"slug":223,"sourcePath":221},"知识存储","/admin/knowledge/storage","10.admin/30.knowledge/30.storage","/admin/knowledge/storage/",{"title":225,"path":226,"stem":227,"tags":6,"slug":228,"sourcePath":226},"知识存储运维","/admin/knowledge/storage-operations","10.admin/30.knowledge/32.storage-operations","/admin/knowledge/storage-operations/",{"title":230,"path":231,"stem":232,"tags":6,"slug":233,"sourcePath":231},"连接 Qdrant","/admin/knowledge/qdrant","10.admin/30.knowledge/34.qdrant","/admin/knowledge/qdrant/",{"title":235,"path":236,"stem":237,"tags":6,"slug":238,"sourcePath":236},"准备 Qdrant 服务器","/admin/knowledge/qdrant-server-setup","10.admin/30.knowledge/35.qdrant-server-setup","/admin/knowledge/qdrant-server-setup/",{"title":240,"path":241,"stem":242,"tags":6,"slug":243,"sourcePath":241},"连接 Milvus","/admin/knowledge/milvus","10.admin/30.knowledge/36.milvus","/admin/knowledge/milvus/",{"title":245,"path":246,"stem":247,"tags":6,"slug":248,"sourcePath":246},"外部搜索与依据","/admin/knowledge/web-search","10.admin/30.knowledge/40.web-search","/admin/knowledge/web-search/",{"title":250,"tags":6,"slug":6,"path":251,"stem":252,"children":253,"page":66,"sourcePath":251},"AI 服务","/admin/ai","10.admin/35.ai",[254,259,264,269],{"title":255,"path":251,"stem":256,"tags":6,"slug":257,"sourcePath":258},"管理 AI 服务","10.admin/35.ai/00.overview","/admin/ai/","/admin/ai/overview",{"title":260,"path":261,"stem":262,"tags":6,"slug":263,"sourcePath":261},"设置模型与运行时","/admin/ai/models","10.admin/35.ai/10.models","/admin/ai/models/",{"title":265,"path":266,"stem":267,"tags":6,"slug":268,"sourcePath":266},"设置工具与集成","/admin/ai/integrations","10.admin/35.ai/20.integrations","/admin/ai/integrations/",{"title":270,"path":271,"stem":272,"tags":6,"slug":273,"sourcePath":271},"管理 MCP 服务器","/admin/ai/mcp","10.admin/35.ai/30.mcp","/admin/ai/mcp/",{"title":275,"tags":6,"slug":6,"path":276,"stem":277,"children":278,"page":66,"sourcePath":276},"插件","/admin/plugin","10.admin/40.plugin",[279,284],{"title":280,"path":281,"stem":282,"tags":6,"slug":283,"sourcePath":281},"管理插件","/admin/plugin/overview","10.admin/40.plugin/00.overview","/admin/plugin/overview/",{"title":285,"path":286,"stem":287,"tags":6,"slug":288,"sourcePath":286},"扩展插件设置","/admin/plugin/settings","10.admin/40.plugin/10.settings","/admin/plugin/settings/",{"title":290,"path":291,"stem":292,"children":293,"page":66,"sourcePath":291},"Operations","/admin/operations","10.admin/45.operations",[294],{"title":295,"path":291,"stem":296,"tags":6,"slug":297,"sourcePath":298},"查看运维与审计记录","10.admin/45.operations/00.overview","/admin/operations/","/admin/operations/overview",{"title":300,"tags":6,"slug":6,"path":301,"stem":302,"children":303,"page":66,"sourcePath":301},"安全管理","/admin/security","10.admin/50.security",[304,309,314,319,324,329,334],{"title":305,"path":306,"stem":307,"tags":6,"slug":308,"sourcePath":306},"安全概览","/admin/security/overview","10.admin/50.security/00.overview","/admin/security/overview/",{"title":310,"path":311,"stem":312,"tags":6,"slug":313,"sourcePath":311},"查看审计日志","/admin/security/audit-log","10.admin/50.security/05.audit-log","/admin/security/audit-log/",{"title":315,"path":316,"stem":317,"tags":6,"slug":318,"sourcePath":316},"屏蔽管理","/admin/security/block-management","10.admin/50.security/10.block-management","/admin/security/block-management/",{"title":320,"path":321,"stem":322,"tags":6,"slug":323,"sourcePath":321},"安全设置","/admin/security/security-setting","10.admin/50.security/12.security-setting","/admin/security/security-setting/",{"title":325,"path":326,"stem":327,"tags":6,"slug":328,"sourcePath":326},"处理待批准设备","/admin/security/device-approvals","10.admin/50.security/14.device-approvals","/admin/security/device-approvals/",{"title":330,"path":331,"stem":332,"tags":6,"slug":333,"sourcePath":331},"IP 访问限制","/admin/security/ip-restriction","10.admin/50.security/16.ip-restriction","/admin/security/ip-restriction/",{"title":335,"path":336,"stem":337,"tags":6,"slug":338,"sourcePath":336},"设置管理员两步验证","/admin/security/two-factor-auth","10.admin/50.security/18.two-factor-auth","/admin/security/two-factor-auth/",{"title":340,"tags":6,"slug":6,"path":341,"stem":342,"children":343,"page":66,"sourcePath":341},"系统管理","/admin/system-admin","10.admin/60.system-admin",[344,349,354,359,364,369],{"title":345,"path":346,"stem":347,"tags":6,"slug":348,"sourcePath":346},"设备信息","/admin/system-admin/device-info","10.admin/60.system-admin/10.device-info","/admin/system-admin/device-info/",{"title":350,"path":351,"stem":352,"tags":6,"slug":353,"sourcePath":351},"服务器重启与系统维护","/admin/system-admin/server-restart","10.admin/60.system-admin/12.server-restart","/admin/system-admin/server-restart/",{"title":355,"path":356,"stem":357,"tags":6,"slug":358,"sourcePath":356},"后台服务","/admin/system-admin/background-service","10.admin/60.system-admin/14.background-service","/admin/system-admin/background-service/",{"title":360,"path":361,"stem":362,"tags":6,"slug":363,"sourcePath":361},"更新 SpaceBuilder","/admin/system-admin/update","10.admin/60.system-admin/16.update","/admin/system-admin/update/",{"title":365,"path":366,"stem":367,"tags":6,"slug":368,"sourcePath":366},"卸载 SpaceBuilder","/admin/system-admin/uninstall","10.admin/60.system-admin/18.uninstall","/admin/system-admin/uninstall/",{"title":370,"path":371,"stem":372,"tags":6,"slug":373,"sourcePath":371},"迁移服务器","/admin/system-admin/server-migration","10.admin/60.system-admin/20.server-migration","/admin/system-admin/server-migration/",{"title":375,"tags":6,"slug":6,"path":376,"stem":377,"children":378,"page":66,"sourcePath":376},"使用工作空间","/workspace","20.workspace",[379,419,439,523,662,718,754],{"title":380,"tags":6,"slug":6,"path":381,"stem":382,"children":383,"page":66,"sourcePath":381},"菜单","/workspace/menu","20.workspace/05.menu",[384,389,394,399,404,409,414],{"title":385,"path":386,"stem":387,"tags":6,"slug":388,"sourcePath":386},"工作空间简介","/workspace/menu/overview","20.workspace/05.menu/00.overview","/workspace/menu/overview/",{"title":390,"path":391,"stem":392,"tags":6,"slug":393,"sourcePath":391},"团队空间","/workspace/menu/team-space","20.workspace/05.menu/05.team-space","/workspace/menu/team-space/",{"title":395,"path":396,"stem":397,"tags":6,"slug":398,"sourcePath":396},"客户端空间","/workspace/menu/client-space","20.workspace/05.menu/06.client-space","/workspace/menu/client-space/",{"title":400,"path":401,"stem":402,"tags":6,"slug":403,"sourcePath":401},"收藏夹","/workspace/menu/favorites","20.workspace/05.menu/10.favorites","/workspace/menu/favorites/",{"title":405,"path":406,"stem":407,"tags":6,"slug":408,"sourcePath":406},"最近文档","/workspace/menu/recent","20.workspace/05.menu/20.recent","/workspace/menu/recent/",{"title":410,"path":411,"stem":412,"tags":6,"slug":413,"sourcePath":411},"外部共享","/workspace/menu/external-share","20.workspace/05.menu/30.external-share","/workspace/menu/external-share/",{"title":415,"path":416,"stem":417,"tags":6,"slug":418,"sourcePath":416},"回收站","/workspace/menu/trash","20.workspace/05.menu/40.trash","/workspace/menu/trash/",{"title":420,"tags":6,"slug":6,"path":421,"stem":422,"children":423,"page":66,"sourcePath":421},"账户","/workspace/account","20.workspace/10.account",[424,429,434],{"title":425,"path":426,"stem":427,"tags":6,"slug":428,"sourcePath":426},"注册与登录","/workspace/account/signup","20.workspace/10.account/10.signup","/workspace/account/signup/",{"title":430,"path":431,"stem":432,"tags":6,"slug":433,"sourcePath":431},"重置密码","/workspace/account/reset-password","20.workspace/10.account/20.reset-password","/workspace/account/reset-password/",{"title":435,"path":436,"stem":437,"tags":6,"slug":438,"sourcePath":436},"账户设置","/workspace/account/account-settings","20.workspace/10.account/30.account-settings","/workspace/account/account-settings/",{"title":440,"tags":6,"slug":6,"path":441,"stem":442,"children":443,"page":66,"sourcePath":441},"文件夹","/workspace/folder","20.workspace/20.folder",[444,449,454,459,464,471,476,481,486,491,496,501,506,511,518],{"title":445,"path":446,"stem":447,"tags":6,"slug":448,"sourcePath":446},"文件夹基本功能","/workspace/folder/basic","20.workspace/20.folder/10.basic","/workspace/folder/basic/",{"title":450,"path":451,"stem":452,"tags":6,"slug":453,"sourcePath":451},"一次创建多个文件夹","/workspace/folder/bulk-folder-creation","20.workspace/20.folder/12.bulk-folder-creation","/workspace/folder/bulk-folder-creation/",{"title":455,"path":456,"stem":457,"tags":6,"slug":458,"sourcePath":456},"筛选","/workspace/folder/filter","20.workspace/20.folder/13.filter","/workspace/folder/filter/",{"title":460,"path":461,"stem":462,"tags":6,"slug":463,"sourcePath":461},"文件夹视图选项设置","/workspace/folder/folder-view-options","20.workspace/20.folder/14.folder-view-options","/workspace/folder/folder-view-options/",{"title":465,"path":466,"stem":467,"tags":468,"slug":470,"sourcePath":466},"将文件夹用作公告板","/workspace/folder/board-view","20.workspace/20.folder/15.board-view",[469],"hot","/workspace/folder/board-view/",{"title":472,"path":473,"stem":474,"tags":6,"slug":475,"sourcePath":473},"文件夹网页视图","/workspace/folder/folder-web-view","20.workspace/20.folder/16.folder-web-view","/workspace/folder/folder-web-view/",{"title":477,"path":478,"stem":479,"tags":6,"slug":480,"sourcePath":478},"整理文件夹","/workspace/folder/folder-organize","20.workspace/20.folder/17.folder-organize","/workspace/folder/folder-organize/",{"title":482,"path":483,"stem":484,"tags":6,"slug":485,"sourcePath":483},"文件夹公告（README）","/workspace/folder/folder-readme","20.workspace/20.folder/18.folder-readme","/workspace/folder/folder-readme/",{"title":487,"path":488,"stem":489,"tags":6,"slug":490,"sourcePath":488},"导出文件夹/文件列表","/workspace/folder/folder-export","20.workspace/20.folder/20.folder-export","/workspace/folder/folder-export/",{"title":492,"path":493,"stem":494,"tags":6,"slug":495,"sourcePath":493},"按等级设置访问权限","/workspace/folder/level-access-permissions","20.workspace/20.folder/24.level-access-permissions","/workspace/folder/level-access-permissions/",{"title":497,"path":498,"stem":499,"tags":6,"slug":500,"sourcePath":498},"按团队设置访问权限","/workspace/folder/team-access-permissions","20.workspace/20.folder/26.team-access-permissions","/workspace/folder/team-access-permissions/",{"title":502,"path":503,"stem":504,"tags":6,"slug":505,"sourcePath":503},"设置文件规则","/workspace/folder/file-rules","20.workspace/20.folder/28.file-rules","/workspace/folder/file-rules/",{"title":507,"path":508,"stem":509,"tags":6,"slug":510,"sourcePath":508},"文件夹 Webhook","/workspace/folder/webhook","20.workspace/20.folder/30.webhook","/workspace/folder/webhook/",{"title":512,"path":513,"stem":514,"children":515,"tags":6,"slug":517,"sourcePath":513},"设置文件夹知识索引","/workspace/folder/knowledge-index","20.workspace/20.folder/32.knowledge-index",[516],{"title":512,"path":513,"stem":514,"tags":6,"slug":517,"sourcePath":513},"/workspace/folder/knowledge-index/",{"title":519,"path":520,"stem":521,"tags":6,"slug":522,"sourcePath":520},"业务自动化文件夹","/workspace/folder/automation","20.workspace/20.folder/40.automation","/workspace/folder/automation/",{"title":524,"tags":6,"slug":6,"path":525,"stem":526,"children":527,"page":66,"sourcePath":525},"文件","/workspace/file","20.workspace/30.file",[528,533,538,543,548,553,558,563,568,573,578,583,588,593,598,603,608,613,618,623,628,633,637,642,647,652,657],{"title":529,"path":530,"stem":531,"tags":6,"slug":532,"sourcePath":530},"文件管理基本功能","/workspace/file/overview","20.workspace/30.file/00.overview","/workspace/file/overview/",{"title":534,"path":535,"stem":536,"tags":6,"slug":537,"sourcePath":535},"边看文件边查看列表","/workspace/file/list-in-file","20.workspace/30.file/05.list-in-file","/workspace/file/list-in-file/",{"title":539,"path":540,"stem":541,"tags":6,"slug":542,"sourcePath":540},"查看和编辑 Markdown、文本文件","/workspace/file/text-file-viewer","20.workspace/30.file/10.text-file-viewer","/workspace/file/text-file-viewer/",{"title":544,"path":545,"stem":546,"tags":6,"slug":547,"sourcePath":545},"查看 HTML 文件","/workspace/file/html-viewer","20.workspace/30.file/11.html-viewer","/workspace/file/html-viewer/",{"title":549,"path":550,"stem":551,"tags":6,"slug":552,"sourcePath":550},"查看和编辑 CSV 文件","/workspace/file/csv-viewer","20.workspace/30.file/12.csv-viewer","/workspace/file/csv-viewer/",{"title":554,"path":555,"stem":556,"tags":6,"slug":557,"sourcePath":555},"查看图片/视频文件","/workspace/file/image-file-viewer","20.workspace/30.file/13.image-file-viewer","/workspace/file/image-file-viewer/",{"title":559,"path":560,"stem":561,"tags":6,"slug":562,"sourcePath":560},"查看 Office/PDF 文件","/workspace/file/office-viewer","20.workspace/30.file/14.office-viewer","/workspace/file/office-viewer/",{"title":564,"path":565,"stem":566,"tags":6,"slug":567,"sourcePath":565},"粘贴网页 (HTML)","/workspace/file/paste-html","20.workspace/30.file/20.paste-html","/workspace/file/paste-html/",{"title":569,"path":570,"stem":571,"tags":6,"slug":572,"sourcePath":570},"粘贴截图","/workspace/file/paste-screenshot","20.workspace/30.file/21.paste-screenshot","/workspace/file/paste-screenshot/",{"title":574,"path":575,"stem":576,"tags":6,"slug":577,"sourcePath":575},"粘贴 Markdown (MD)","/workspace/file/paste-md","20.workspace/30.file/22.paste-md","/workspace/file/paste-md/",{"title":579,"path":580,"stem":581,"tags":6,"slug":582,"sourcePath":580},"屏幕录制","/workspace/file/screen-recording","20.workspace/30.file/23.screen-recording","/workspace/file/screen-recording/",{"title":584,"path":585,"stem":586,"tags":6,"slug":587,"sourcePath":585},"快捷笔记","/workspace/file/quick-note","20.workspace/30.file/24.quick-note","/workspace/file/quick-note/",{"title":589,"path":590,"stem":591,"tags":6,"slug":592,"sourcePath":590},"文件标签","/workspace/file/file-tag","20.workspace/30.file/33.file-tag","/workspace/file/file-tag/",{"title":594,"path":595,"stem":596,"tags":6,"slug":597,"sourcePath":595},"批量重命名文件","/workspace/file/bulk-name-revise","20.workspace/30.file/34.bulk-name-revise","/workspace/file/bulk-name-revise/",{"title":599,"path":600,"stem":601,"tags":6,"slug":602,"sourcePath":600},"文件转换","/workspace/file/file-convert-overview","20.workspace/30.file/40.file-convert-overview","/workspace/file/file-convert-overview/",{"title":604,"path":605,"stem":606,"tags":6,"slug":607,"sourcePath":605},"模板文件","/workspace/file/templates","20.workspace/30.file/41.templates","/workspace/file/templates/",{"title":609,"path":610,"stem":611,"tags":6,"slug":612,"sourcePath":610},"待办列表 (Todo)","/workspace/file/template-todo","20.workspace/30.file/42.template-todo","/workspace/file/template-todo/",{"title":614,"path":615,"stem":616,"tags":6,"slug":617,"sourcePath":615},"审批表单","/workspace/file/template-approval","20.workspace/30.file/43.template-approval","/workspace/file/template-approval/",{"title":619,"path":620,"stem":621,"tags":6,"slug":622,"sourcePath":620},"看板 (Kanban)","/workspace/file/template-kanban","20.workspace/30.file/44.template-kanban","/workspace/file/template-kanban/",{"title":624,"path":625,"stem":626,"tags":6,"slug":627,"sourcePath":625},"时间线","/workspace/file/template-timeline","20.workspace/30.file/45.template-timeline","/workspace/file/template-timeline/",{"title":629,"path":630,"stem":631,"tags":6,"slug":632,"sourcePath":630},"记事本","/workspace/file/template-memo","20.workspace/30.file/46.template-memo","/workspace/file/template-memo/",{"title":634,"path":635,"stem":636,"tags":6,"slug":635,"sourcePath":635},"AI 聊天文件","/workspace/file/ai-chat-file","20.workspace/30.file/47.ai-chat-file",{"title":638,"path":639,"stem":640,"tags":6,"slug":641,"sourcePath":639},"查看文件更改记录","/workspace/file/audit-trail","20.workspace/30.file/50.audit-trail","/workspace/file/audit-trail/",{"title":643,"path":644,"stem":645,"tags":6,"slug":646,"sourcePath":644},"文件版本管理","/workspace/file/version-trail","20.workspace/30.file/51.version-trail","/workspace/file/version-trail/",{"title":648,"path":649,"stem":650,"tags":6,"slug":651,"sourcePath":649},"编辑锁定","/workspace/file/file-lock","20.workspace/30.file/52.file-lock","/workspace/file/file-lock/",{"title":653,"path":654,"stem":655,"tags":6,"slug":656,"sourcePath":654},"文件加密","/workspace/file/file-encrypt","20.workspace/30.file/53.file-encrypt","/workspace/file/file-encrypt/",{"title":658,"path":659,"stem":660,"tags":6,"slug":661,"sourcePath":659},"注册磁盘文件","/workspace/file/disk-file-registration","20.workspace/30.file/60.disk-file-registration","/workspace/file/disk-file-registration/",{"title":663,"tags":6,"slug":6,"path":664,"stem":665,"children":666,"page":66,"sourcePath":664},"协作","/workspace/cooperation","20.workspace/35.cooperation",[667,672,677,682,687,692,697,702,707,713],{"title":668,"path":669,"stem":670,"tags":6,"slug":671,"sourcePath":669},"文件与文件夹评论","/workspace/cooperation/file-comments","20.workspace/35.cooperation/00.file-comments","/workspace/cooperation/file-comments/",{"title":673,"path":674,"stem":675,"tags":6,"slug":676,"sourcePath":674},"聊天","/workspace/cooperation/chat","20.workspace/35.cooperation/10.chat","/workspace/cooperation/chat/",{"title":678,"path":679,"stem":680,"tags":6,"slug":681,"sourcePath":679},"协作聊天与编辑锁定","/workspace/cooperation/collaboration-chat","20.workspace/35.cooperation/11.collaboration-chat","/workspace/cooperation/collaboration-chat/",{"title":683,"path":684,"stem":685,"tags":6,"slug":686,"sourcePath":684},"跟随团队成员的工作位置","/workspace/cooperation/follow-team-location","20.workspace/35.cooperation/12.follow-team-location","/workspace/cooperation/follow-team-location/",{"title":688,"path":689,"stem":690,"tags":6,"slug":691,"sourcePath":689},"提及","/workspace/cooperation/mention","20.workspace/35.cooperation/14.mention","/workspace/cooperation/mention/",{"title":693,"path":694,"stem":695,"tags":6,"slug":696,"sourcePath":694},"私信","/workspace/cooperation/dm","20.workspace/35.cooperation/16.dm","/workspace/cooperation/dm/",{"title":698,"path":699,"stem":700,"tags":6,"slug":701,"sourcePath":699},"通知存档","/workspace/cooperation/notification-inbox","20.workspace/35.cooperation/18.notification-inbox","/workspace/cooperation/notification-inbox/",{"title":703,"path":704,"stem":705,"tags":6,"slug":706,"sourcePath":704},"查看团队动态","/workspace/cooperation/file-activity","20.workspace/35.cooperation/30.file-activity","/workspace/cooperation/file-activity/",{"title":708,"path":709,"stem":710,"tags":711,"slug":712,"sourcePath":709},"创建外部共享链接","/workspace/cooperation/share-link-creation","20.workspace/35.cooperation/40.share-link-creation",[469],"/workspace/cooperation/share-link-creation/",{"title":714,"path":715,"stem":716,"tags":6,"slug":717,"sourcePath":715},"通过电子邮件发送外部共享链接","/workspace/cooperation/share-link-email","20.workspace/35.cooperation/42.share-link-email","/workspace/cooperation/share-link-email/",{"title":719,"tags":6,"slug":6,"path":720,"stem":721,"children":722,"page":66,"sourcePath":720},"搜索","/workspace/search","20.workspace/40.search",[723,728,734,739,744,749],{"title":724,"path":725,"stem":726,"tags":6,"slug":727,"sourcePath":725},"文件搜索","/workspace/search/search","20.workspace/40.search/00.search","/workspace/search/search/",{"title":729,"path":730,"stem":731,"tags":732,"slug":733,"sourcePath":730},"上下文搜索（AI 搜索）","/workspace/search/context-search","20.workspace/40.search/10.context-search",[469],"/workspace/search/context-search/",{"title":735,"path":736,"stem":737,"tags":6,"slug":738,"sourcePath":736},"图片搜索","/workspace/search/image-search","20.workspace/40.search/20.image-search","/workspace/search/image-search/",{"title":740,"path":741,"stem":742,"tags":6,"slug":743,"sourcePath":741},"聊天搜索","/workspace/search/chat-search","20.workspace/40.search/30.chat-search","/workspace/search/chat-search/",{"title":745,"path":746,"stem":747,"tags":6,"slug":748,"sourcePath":746},"评论搜索","/workspace/search/comment-search","20.workspace/40.search/40.comment-search","/workspace/search/comment-search/",{"title":750,"path":751,"stem":752,"tags":6,"slug":753,"sourcePath":751},"同义词搜索","/workspace/search/synonym-search","20.workspace/40.search/50.synonym-search","/workspace/search/synonym-search/",{"title":755,"tags":6,"slug":6,"path":756,"stem":757,"children":758,"page":66,"sourcePath":756},"AI","/workspace/ai","20.workspace/50.ai",[759,764,770],{"title":760,"path":761,"stem":762,"tags":6,"slug":763,"sourcePath":761},"AI 功能概览","/workspace/ai/overview","20.workspace/50.ai/00.overview","/workspace/ai/overview/",{"title":765,"path":766,"stem":767,"tags":768,"slug":769,"sourcePath":766},"向本地 AI 委托工作","/workspace/ai/ai-work","20.workspace/50.ai/10.ai-work",[469],"/workspace/ai/ai-work/",{"title":771,"path":772,"stem":773,"tags":6,"slug":774,"sourcePath":772},"使用外部 AI","/workspace/ai/external-ai","20.workspace/50.ai/20.external-ai","/workspace/ai/external-ai/",{"title":776,"tags":6,"slug":6,"path":777,"stem":778,"children":779,"page":66,"sourcePath":777},"Webspace","/webspace","40.webspace",[780,785,790,795,800,805,811,816,821,826,831,866],{"title":781,"path":782,"stem":783,"tags":6,"slug":784,"sourcePath":782},"什么是 Webspace？","/webspace/overview","40.webspace/00.overview","/webspace/overview/",{"title":786,"path":787,"stem":788,"tags":6,"slug":789,"sourcePath":787},"部署网站","/webspace/website-release","40.webspace/10.website-release","/webspace/website-release/",{"title":791,"path":792,"stem":793,"tags":6,"slug":794,"sourcePath":792},"创建架构文件（.sfn）","/webspace/create-database","40.webspace/20.create-database","/webspace/create-database/",{"title":796,"path":797,"stem":798,"tags":6,"slug":799,"sourcePath":797},"构建 API 并部署数据库","/webspace/api-overview","40.webspace/24.api-overview","/webspace/api-overview/",{"title":801,"path":802,"stem":803,"tags":6,"slug":804,"sourcePath":802},"查看前端示例","/webspace/frontend-example","40.webspace/26.frontend-example","/webspace/frontend-example/",{"title":806,"path":807,"stem":808,"tags":809,"slug":810,"sourcePath":807},"创建团队内部 Web 服务","/webspace/internal-webservice","40.webspace/32.internal-webservice",[469],"/webspace/internal-webservice/",{"title":812,"path":813,"stem":814,"tags":6,"slug":815,"sourcePath":813},"创建对外公开的 Web 服务","/webspace/external-webservice","40.webspace/34.external-webservice","/webspace/external-webservice/",{"title":817,"path":818,"stem":819,"tags":6,"slug":820,"sourcePath":818},"SQL 导入与导出","/webspace/sql-converter","40.webspace/42.sql-converter","/webspace/sql-converter/",{"title":822,"path":823,"stem":824,"tags":6,"slug":825,"sourcePath":823},"将架构转换为代码","/webspace/code-converter","40.webspace/44.code-converter","/webspace/code-converter/",{"title":827,"path":828,"stem":829,"tags":6,"slug":830,"sourcePath":828},"性能与扩展","/webspace/performance","40.webspace/48.performance","/webspace/performance/",{"title":832,"tags":6,"slug":6,"path":833,"stem":834,"children":835,"page":66,"sourcePath":833},"Webspace 管理","/webspace/admin","40.webspace/50.admin",[836,841,846,851,856,861],{"title":837,"path":838,"stem":839,"tags":6,"slug":840,"sourcePath":838},"开始使用 Webspace 管理","/webspace/admin/overview","40.webspace/50.admin/00.overview","/webspace/admin/overview/",{"title":842,"path":843,"stem":844,"tags":6,"slug":845,"sourcePath":843},"运营概览","/webspace/admin/operations","40.webspace/50.admin/10.operations","/webspace/admin/operations/",{"title":847,"path":848,"stem":849,"tags":6,"slug":850,"sourcePath":848},"工作空间访问","/webspace/admin/workspace-access","40.webspace/50.admin/20.workspace-access","/webspace/admin/workspace-access/",{"title":852,"path":853,"stem":854,"tags":6,"slug":855,"sourcePath":853},"API · 站点安全","/webspace/admin/api-site-security","40.webspace/50.admin/30.api-site-security","/webspace/admin/api-site-security/",{"title":857,"path":858,"stem":859,"tags":6,"slug":860,"sourcePath":858},"服务与容量","/webspace/admin/service-capacity","40.webspace/50.admin/40.service-capacity","/webspace/admin/service-capacity/",{"title":862,"path":863,"stem":864,"tags":6,"slug":865,"sourcePath":863},"部署管理与前端发布","/webspace/admin/deployments","40.webspace/50.admin/50.deployments","/webspace/admin/deployments/",{"title":867,"tags":868,"slug":6,"path":869,"stem":870,"children":871,"page":66,"sourcePath":869},"Webspace 实操教程",[469],"/webspace/examples","40.webspace/60.examples",[872,877,882,888,893,898],{"title":873,"path":869,"stem":874,"tags":6,"slug":875,"sourcePath":876},"Webspace 应用篇","40.webspace/60.examples/00.overview","/webspace/examples/","/webspace/examples/overview",{"title":878,"path":879,"stem":880,"tags":6,"slug":881,"sourcePath":879},"打造自己的业务系统","/webspace/examples/my-own-system","40.webspace/60.examples/10.my-own-system","/webspace/examples/my-own-system/",{"title":883,"path":884,"stem":885,"tags":886,"slug":887,"sourcePath":884},"制作实时五子棋游戏","/webspace/examples/realtime-gomoku","40.webspace/60.examples/20.realtime-gomoku",[469],"/webspace/examples/realtime-gomoku/",{"title":889,"path":890,"stem":891,"tags":6,"slug":892,"sourcePath":890},"用文件夹文件搭建资料公告板","/webspace/examples/folder-board","40.webspace/60.examples/30.folder-board","/webspace/examples/folder-board/",{"title":894,"path":895,"stem":896,"tags":6,"slug":897,"sourcePath":895},"搭建多人协同怪物讨伐","/webspace/examples/monster-raid","40.webspace/60.examples/40.monster-raid","/webspace/examples/monster-raid/",{"title":899,"path":900,"stem":901,"tags":6,"slug":902,"sourcePath":900},"部署 AI 咨询聊天示例","/webspace/examples/ai-support-chat","40.webspace/60.examples/50.ai-support-chat","/webspace/examples/ai-support-chat/",{"title":904,"tags":6,"slug":6,"path":905,"stem":906,"children":907,"page":66,"sourcePath":905},"使用插件","/plugin","50.plugin",[908,913,933,994,1015,1050],{"title":909,"path":910,"stem":911,"tags":6,"slug":912,"sourcePath":910},"插件概述","/plugin/overview","50.plugin/00.overview","/plugin/overview/",{"title":914,"tags":6,"slug":6,"path":915,"stem":916,"children":917,"page":66,"sourcePath":915},"日历","/plugin/calendar","50.plugin/10.calendar",[918,923,928],{"title":919,"path":920,"stem":921,"tags":6,"slug":922,"sourcePath":920},"日历介绍","/plugin/calendar/overview","50.plugin/10.calendar/00.overview","/plugin/calendar/overview/",{"title":924,"path":925,"stem":926,"tags":6,"slug":927,"sourcePath":925},"创建、修改和删除日程","/plugin/calendar/create-event","50.plugin/10.calendar/10.create-event","/plugin/calendar/create-event/",{"title":929,"path":930,"stem":931,"tags":6,"slug":932,"sourcePath":930},"查看活动记录","/plugin/calendar/file-activity","50.plugin/10.calendar/40.file-activity","/plugin/calendar/file-activity/",{"title":934,"tags":6,"slug":6,"path":935,"stem":936,"children":937,"page":66,"sourcePath":935},"电子邮件","/plugin/email","50.plugin/20.email",[938,943,948,953,958,964,969,974,979,984,989],{"title":939,"path":940,"stem":941,"tags":6,"slug":942,"sourcePath":940},"电子邮件介绍","/plugin/email/overview","50.plugin/20.email/00.overview","/plugin/email/overview/",{"title":944,"path":945,"stem":946,"tags":6,"slug":947,"sourcePath":945},"电子邮件设置","/plugin/email/setfn-email-setting","50.plugin/20.email/05.setfn-email-setting","/plugin/email/setfn-email-setting/",{"title":949,"path":950,"stem":951,"tags":6,"slug":952,"sourcePath":950},"连接外部电子邮件","/plugin/email/external-email","50.plugin/20.email/07.external-email","/plugin/email/external-email/",{"title":954,"path":955,"stem":956,"tags":6,"slug":957,"sourcePath":955},"电子邮件基本功能","/plugin/email/email-basic","50.plugin/20.email/10.email-basic","/plugin/email/email-basic/",{"title":959,"path":960,"stem":961,"tags":6,"slug":962,"sourcePath":963},"使用邮件 AI 助手","/plugin/email/ai-assistant","50.plugin/20.email/15.email-ai-assistant","/plugin/email/ai-assistant/","/plugin/email/email-ai-assistant",{"title":965,"path":966,"stem":967,"tags":6,"slug":968,"sourcePath":966},"撰写和发送电子邮件","/plugin/email/email-compose","50.plugin/20.email/20.email-compose","/plugin/email/email-compose/",{"title":970,"path":971,"stem":972,"tags":6,"slug":973,"sourcePath":971},"附加文件","/plugin/email/email-attachment","50.plugin/20.email/30.email-attachment","/plugin/email/email-attachment/",{"title":975,"path":976,"stem":977,"tags":6,"slug":978,"sourcePath":976},"电子邮件文件夹管理","/plugin/email/email-folders","50.plugin/20.email/40.email-folders","/plugin/email/email-folders/",{"title":980,"path":981,"stem":982,"tags":6,"slug":983,"sourcePath":981},"自动分类电子邮件","/plugin/email/email-auto-classify","50.plugin/20.email/50.email-auto-classify","/plugin/email/email-auto-classify/",{"title":985,"path":986,"stem":987,"tags":6,"slug":988,"sourcePath":986},"电子邮件文件的保管与共享","/plugin/email/email-open-in-space","50.plugin/20.email/60.email-open-in-space","/plugin/email/email-open-in-space/",{"title":990,"path":991,"stem":992,"tags":6,"slug":993,"sourcePath":991},"电子邮件安全","/plugin/email/email-security","50.plugin/20.email/70.email-security","/plugin/email/email-security/",{"title":995,"tags":6,"slug":6,"path":996,"stem":997,"children":998,"page":66,"sourcePath":996},"工作流（业务自动化）","/plugin/workflow","50.plugin/30.workflow",[999,1004,1010],{"title":1000,"path":1001,"stem":1002,"tags":6,"slug":1003,"sourcePath":1001},"工作流简介","/plugin/workflow/overview","50.plugin/30.workflow/00.overview","/plugin/workflow/overview/",{"title":1005,"path":1006,"stem":1007,"tags":1008,"slug":1009,"sourcePath":1006},"创建新工作流","/plugin/workflow/new-workflow","50.plugin/30.workflow/10.new-workflow",[469],"/plugin/workflow/new-workflow/",{"title":1011,"path":1012,"stem":1013,"tags":6,"slug":1014,"sourcePath":1012},"查看执行记录","/plugin/workflow/execution-history","50.plugin/30.workflow/20.execution-history","/plugin/workflow/execution-history/",{"title":1016,"tags":6,"slug":6,"path":1017,"stem":1018,"children":1019,"page":66,"sourcePath":1017},"微调（AI 训练）","/plugin/fine-tuning","50.plugin/40.fine-tuning",[1020,1025,1030,1035,1040,1045],{"title":1021,"path":1022,"stem":1023,"tags":6,"slug":1024,"sourcePath":1022},"微调简介","/plugin/fine-tuning/overview","50.plugin/40.fine-tuning/00.overview","/plugin/fine-tuning/overview/",{"title":1026,"path":1027,"stem":1028,"tags":6,"slug":1029,"sourcePath":1027},"训练数据预处理","/plugin/fine-tuning/pre-processing","50.plugin/40.fine-tuning/10.pre-processing","/plugin/fine-tuning/pre-processing/",{"title":1031,"path":1032,"stem":1033,"tags":6,"slug":1034,"sourcePath":1032},"训练","/plugin/fine-tuning/training","50.plugin/40.fine-tuning/20.training","/plugin/fine-tuning/training/",{"title":1036,"path":1037,"stem":1038,"tags":6,"slug":1039,"sourcePath":1037},"评估","/plugin/fine-tuning/evaluation","50.plugin/40.fine-tuning/30.evaluation","/plugin/fine-tuning/evaluation/",{"title":1041,"path":1042,"stem":1043,"tags":6,"slug":1044,"sourcePath":1042},"聊天测试","/plugin/fine-tuning/chat-test","50.plugin/40.fine-tuning/40.chat-test","/plugin/fine-tuning/chat-test/",{"title":1046,"path":1047,"stem":1048,"tags":6,"slug":1049,"sourcePath":1047},"导出","/plugin/fine-tuning/export","50.plugin/40.fine-tuning/50.export","/plugin/fine-tuning/export/",{"title":1051,"tags":6,"slug":6,"path":1052,"stem":1053,"children":1054,"page":66,"sourcePath":1052},"EDC（数据收集）","/plugin/edc","50.plugin/50.edc",[1055,1060,1065,1070],{"title":1056,"path":1057,"stem":1058,"tags":6,"slug":1059,"sourcePath":1057},"EDC 简介","/plugin/edc/overview","50.plugin/50.edc/00.overview","/plugin/edc/overview/",{"title":1061,"path":1062,"stem":1063,"tags":6,"slug":1064,"sourcePath":1062},"数据录入、Audit Trail","/plugin/edc/data-entry","50.plugin/50.edc/10.data-entry","/plugin/edc/data-entry/",{"title":1066,"path":1067,"stem":1068,"tags":6,"slug":1069,"sourcePath":1067},"构建器","/plugin/edc/builder","50.plugin/50.edc/20.builder","/plugin/edc/builder/",{"title":1071,"path":1072,"stem":1073,"tags":6,"slug":1074,"sourcePath":1072},"用户/机构设置","/plugin/edc/account","50.plugin/50.edc/30.account","/plugin/edc/account/",{"title":1076,"tags":6,"slug":6,"path":1077,"stem":1078,"children":1079,"page":66,"sourcePath":1077},"命令行工具","/cli","90.cli",[1080],{"title":1081,"path":1082,"stem":1083,"tags":6,"slug":1084,"sourcePath":1082},"使用命令管理服务器","/cli/commands","90.cli/10.commands","/cli/commands/",{"title":1086,"tags":6,"slug":6,"path":1087,"stem":1088,"children":1089,"page":66,"sourcePath":1087},"安全更新","/security-updates","95.security-updates",[1090,1095,1100,1105],{"title":1091,"path":1092,"stem":1093,"tags":6,"slug":1094,"sourcePath":1092},"了解安全检查与更新方式","/security-updates/overview","95.security-updates/00.overview","/security-updates/overview/",{"title":1096,"path":1097,"stem":1098,"tags":6,"slug":1099,"sourcePath":1097},"安全检查记录","/security-updates/review-log","95.security-updates/10.review-log","/security-updates/review-log/",{"title":1101,"path":1102,"stem":1103,"tags":6,"slug":1104,"sourcePath":1102},"主要漏洞检查状态","/security-updates/vulnerability-status","95.security-updates/20.vulnerability-status","/security-updates/vulnerability-status/",{"title":1106,"path":1107,"stem":1108,"tags":6,"slug":1109,"sourcePath":1107},"检查服务器安全更新","/security-updates/server-checklist","95.security-updates/30.server-checklist","/security-updates/server-checklist/",{"title":1111,"tags":6,"slug":6,"path":1112,"stem":1113,"children":1114,"page":66,"sourcePath":1112},"FAQ","/faq","99.FAQ",[1115,1121,1127,1133,1139,1145,1151],{"title":1116,"path":1117,"stem":1118,"tags":6,"slug":1119,"sourcePath":1120},"SetFN 与云服务对比","/FAQ/comparison-cloud","99.FAQ/10.comparison-cloud","/FAQ/comparison-cloud/","/faq/comparison-cloud",{"title":1122,"path":1123,"stem":1124,"tags":6,"slug":1125,"sourcePath":1126},"SetFN 与 NAS 对比","/FAQ/comparison-nas","99.FAQ/20.comparison-nas","/FAQ/comparison-nas/","/faq/comparison-nas",{"title":1128,"path":1129,"stem":1130,"tags":6,"slug":1131,"sourcePath":1132},"安全政策","/FAQ/security-policy","99.FAQ/30.security-policy","/FAQ/security-policy/","/faq/security-policy",{"title":1134,"path":1135,"stem":1136,"tags":6,"slug":1137,"sourcePath":1138},"SetFN 为什么这么快","/FAQ/why-fast","99.FAQ/40.why-fast","/FAQ/why-fast/","/faq/why-fast",{"title":1140,"path":1141,"stem":1142,"tags":6,"slug":1143,"sourcePath":1144},"许可证 FAQ","/FAQ/license-faq","99.FAQ/50.license-faq","/FAQ/license-faq/","/faq/license-faq",{"title":1146,"path":1147,"stem":1148,"tags":6,"slug":1149,"sourcePath":1150},"AI 功能 FAQ","/FAQ/ai-faq","99.FAQ/60.ai-faq","/FAQ/ai-faq/","/faq/ai-faq",{"title":1152,"path":1153,"stem":1154,"tags":6,"slug":1155,"sourcePath":1156},"问题排查指南","/FAQ/troubleshooting","99.FAQ/70.troubleshooting","/FAQ/troubleshooting/","/faq/troubleshooting",{"id":1158,"title":878,"body":1159,"cover":6,"description":4022,"extension":4023,"image":6,"meta":4024,"navigation":4025,"path":879,"reviewSummary":6,"reviewedAt":6,"seo":4026,"slug":881,"stem":880,"tags":6,"thumbnail":6,"thumbnailPosition":6,"thumbnailScale":6,"__hash__":4036},"docs_zh/40.webspace/60.examples/10.my-own-system.md",{"type":1160,"value":1161,"toc":4016},"minimal",[1162,1165,1169,1187,1190,1195,1205,1208,1218,1229,3801,3814,3821,3824,3830,3837,3843,3850,3856,3875,3879,3885,3901,3904,3910,3913,3918,3921,3925,3928,3934,3937,3940,3943,3949,3955,3961,3967,3971,3974,4007,4009,4012],[1163,1164,878],"h1",{"id":878},[1166,1167,1168],"p",{},"在 SetFN 工作空间中，可以亲手打造公司专属的群件、ERP 之类的系统。\n把数据库结构设计和页面制作交给 AI，我们只需把生成的结果上传到工作空间即可。\n需要制作的文件只有 2 个。要做的事只是上传和点击“部署”按钮。\n下面以“制造现场的库存管理程序”为例来制作。",[1166,1170,1171,1172,1177,1178,1182,1183,1186],{},"如果想跳过 AI 提示词，直接使用已完成的文件，可以在",[1173,1174,1176],"a",{"href":1175},"/examples/webspace/inventory-management/setfn-inventory-management-sample.zip","下载完整示例 ZIP","一次性获取架构、",[1179,1180,1181],"code",{},"index.html","、",[1179,1184,1185],{},"mock-db-upload.html"," 和 README。",[1188,1189],"hr",{},[1191,1192,1194],"h2",{"id":1193},"_1-创建用于生成数据库的-sfn-文件","1. 创建用于生成数据库的 .sfn 文件",[1166,1196,1197,1198,1201,1202,1204],{},"在 SetFN 工作空间中，可以用名为 ",[1179,1199,1200],{},".sfn"," 的文件创建 DB。把 ",[1179,1203,1200],{}," 文件的示例复制给 Claude、GPT、Gemini 之类的 AI，并像“我想管理零件和产品的库存”这样说明需求，AI 就会生成文件。",[1166,1206,1207],{},"复制下面的内容，修改下方的需求设计部分，然后发给 AI 试试。",[1209,1210,1215],"pre",{"className":1211,"code":1213,"language":1214},[1212],"language-text","你是为名为 SetFN 的无代码后端平台设计架构文件（.sfn）的工程师。\n.sfn 是具有以下结构的 JSON 文件。 \n\n{\n  \"content-type\": \"application/setfn-schema\",\n  \"dbType\": \"sqlite3\",\n  \"apiBuild\": {\n    \"dbName\": \"英文_小写_下划线_db名称\",\n    \"dbEngine\": \"sqlite\",\n    \"includeClient\": false,\n    \"features\": {\n      \"realtime\": { \"enabled\": false },\n      \"upload\": { \"enabled\": false },\n      \"ai-chat\": { \"enabled\": false }\n    }\n  },\n  \"data\": [\n    {\n      \"table\": { \"name\": \"表名\", \"cmt\": \"此表的说明\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"列名\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"列说明\" },\n        { \"name\": \"数字列\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\" },\n        { \"name\": \"_created_at\", \"type\": \"timestamp\", \"default\": \"now()\" }\n      ],\n      \"permissions\": {\n        \"security\": { \"login\": true },\n        \"ops\": {\n          \"list\": { \"login\": true },\n          \"view\": { \"login\": true },\n          \"create\": { \"login\": true },\n          \"update\": { \"login\": true },\n          \"delete\": { \"login\": true, \"roles\": [\"admin\"] }\n        }\n      }\n    }\n  ]\n}\n\n列的 type 只能使用 serial4（自增 PK）/ text / int4（整数）/ timestamp。\n根据需要为列加上 notnull、default、unique、index、cmt。\n\n现在请用这种格式，为制造企业设计一个“库存管理系统”DB。需求如下。\n\n- 登记零件，并按零件管理当前库存数量。\n- 登记产品，并按产品管理当前库存数量。\n- 一个产品由多个零件组装而成。需要管理每个产品需要哪些零件、各需要多少个（BOM，物料清单）。\n- 记录零件/产品的入库·出库历史。特别是当发生“组装零件生产产品”的事件时，当时使用的零件和生产的产品数量必须作为同一个事件一起追踪（以便日后能够查询“制造这个产品用了多少零件”）。\n\nDB 名称（dbName）请设为 \"inventory_management\"。\n请控制在 4 张表以内，设计得足够实用，可以直接在实际工作中使用。\n不要附加其他说明，只输出完成的 .sfn JSON 代码。\n","text",[1179,1216,1213],{"__ignoreMap":1217},"",[1166,1219,1220,1221,1224,1225,1228],{},"下面是这样生成的 AI 回复示例。实际结果可能因 AI 和每次运行而略有不同——不必与此内容完全一致，只要是类似的结构即可。不过，必须是没有其他说明、以 ",[1179,1222,1223],{},"{"," 开头并以 ",[1179,1226,1227],{},"}"," 结尾的格式，才能把输出结果原样粘贴到编辑器中。",[1209,1230,1234],{"className":1231,"code":1232,"language":1233,"meta":1217,"style":1217},"language-json shiki shiki-themes github-light github-dark monokai","{\n  \"content-type\": \"application/setfn-schema\",\n  \"dbType\": \"sqlite3\",\n  \"apiBuild\": {\n    \"dbName\": \"inventory_management\",\n    \"dbEngine\": \"sqlite\",\n    \"includeClient\": false,\n    \"features\": {\n      \"realtime\": { \"enabled\": false },\n      \"upload\": { \"enabled\": false },\n      \"ai-chat\": { \"enabled\": false }\n    }\n  },\n  \"data\": [\n    {\n      \"table\": { \"name\": \"parts\", \"cmt\": \"零件主数据。任何成员都可以查看/登记/修改，只有管理员可以删除\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"part_code\", \"type\": \"text\", \"notnull\": true, \"unique\": true, \"cmt\": \"零件代码\" },\n        { \"name\": \"name\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"零件名称\" },\n        { \"name\": \"spec\", \"type\": \"text\", \"cmt\": \"规格（例：M2、220V/50Hz）。即使名称相同，规格不同也要登记为单独的 part_code\" },\n        { \"name\": \"category\", \"type\": \"text\", \"cmt\": \"零件分类（电子零件/机构零件/包装材料等）\" },\n        { \"name\": \"unit\", \"type\": \"text\", \"notnull\": true, \"default\": \"EA\", \"cmt\": \"单位\" },\n        { \"name\": \"unit_cost\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"单价\" },\n        { \"name\": \"current_stock\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"当前库存\" },\n        { \"name\": \"safety_stock\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"安全库存（再订货点）\" },\n        { \"name\": \"supplier\", \"type\": \"text\", \"cmt\": \"供应商\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"最后登记/修改的成员的显示名称\" },\n        { \"name\": \"_created_at\", \"type\": \"timestamp\", \"default\": \"now()\" }\n      ],\n      \"permissions\": {\n        \"security\": { \"login\": true, \"ownerColumn\": \"_user_id\" },\n        \"ops\": {\n          \"list\": { \"login\": true },\n          \"view\": { \"login\": true },\n          \"create\": { \"login\": true },\n          \"update\": { \"login\": true },\n          \"delete\": { \"login\": true, \"roles\": [\"admin\"] }\n        }\n      }\n    },\n    {\n      \"table\": { \"name\": \"products\", \"cmt\": \"产品主数据。任何成员都可以查看/登记/修改，只有管理员可以删除\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"product_code\", \"type\": \"text\", \"notnull\": true, \"unique\": true, \"cmt\": \"产品代码\" },\n        { \"name\": \"name\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"产品名称\" },\n        { \"name\": \"category\", \"type\": \"text\", \"cmt\": \"产品分类\" },\n        { \"name\": \"unit\", \"type\": \"text\", \"notnull\": true, \"default\": \"EA\", \"cmt\": \"单位\" },\n        { \"name\": \"price\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"销售价\" },\n        { \"name\": \"current_stock\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"当前库存\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"最后登记/修改的成员的显示名称\" },\n        { \"name\": \"_created_at\", \"type\": \"timestamp\", \"default\": \"now()\" }\n      ],\n      \"permissions\": {\n        \"security\": { \"login\": true, \"ownerColumn\": \"_user_id\" },\n        \"ops\": {\n          \"list\": { \"login\": true },\n          \"view\": { \"login\": true },\n          \"create\": { \"login\": true },\n          \"update\": { \"login\": true },\n          \"delete\": { \"login\": true, \"roles\": [\"admin\"] }\n        }\n      }\n    },\n    {\n      \"table\": { \"name\": \"bom\", \"cmt\": \"各产品的零件构成表（单层）。对 bom_key（product_id:part_id）加 unique 约束，防止同一产品重复登记同一零件\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"product_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"part_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"qty_per_unit\", \"type\": \"int4\", \"notnull\": true, \"default\": \"1\", \"cmt\": \"制造 1 个产品所需的零件数量\" },\n        { \"name\": \"bom_key\", \"type\": \"text\", \"notnull\": true, \"unique\": true, \"cmt\": \"product_id:part_id 的组合。用于防止重复登记\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"登记成员的显示名称\" },\n        { \"name\": \"_created_at\", \"type\": \"timestamp\", \"default\": \"now()\" }\n      ],\n      \"permissions\": {\n        \"security\": { \"login\": true, \"ownerColumn\": \"_user_id\" },\n        \"ops\": {\n          \"list\": { \"login\": true },\n          \"view\": { \"login\": true },\n          \"create\": { \"login\": true },\n          \"update\": { \"login\": true },\n          \"delete\": { \"login\": true, \"roles\": [\"admin\"] }\n        }\n      }\n    },\n    {\n      \"table\": { \"name\": \"stock_transactions\", \"cmt\": \"入出库/组装的统一历史。item_type=part|product，tx_type=입고|출고|조립사용|조립생산（入库|出库|组装使用|组装生产）。一次组装生产事件由共享同一 batch_id 的多条组装使用（零件消耗）记录 + 1 条组装生产（产品增加）记录构成，因此可以追踪某个产品使用了哪些零件、用了多少\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"item_type\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"part | product\" },\n        { \"name\": \"item_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true, \"cmt\": \"parts.id 或 products.id\" },\n        { \"name\": \"item_name\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"登记时的品目名称快照\" },\n        { \"name\": \"tx_type\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"입고（入库）| 출고（出库）| 조립사용（组装使用）| 조립생산（组装生产）\" },\n        { \"name\": \"reason\", \"type\": \"text\", \"cmt\": \"入出库原因。组装使用/组装生产的 tx_type 本身即为原因，因此留空\" },\n        { \"name\": \"qty\", \"type\": \"int4\", \"notnull\": true, \"cmt\": \"始终为正数。方向由 tx_type 判断\" },\n        { \"name\": \"batch_id\", \"type\": \"text\", \"index\": true, \"cmt\": \"组装生产事件的分组 id。单纯入出库时为空\" },\n        { \"name\": \"note\", \"type\": \"text\", \"cmt\": \"备注\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"登记成员的显示名称\" },\n        { \"name\": \"_created_at\", \"type\": \"timestamp\", \"default\": \"now()\" }\n      ],\n      \"permissions\": {\n        \"security\": { \"login\": true, \"ownerColumn\": \"_user_id\" },\n        \"ops\": {\n          \"list\": { \"login\": true },\n          \"view\": { \"login\": true },\n          \"create\": { \"login\": true },\n          \"update\": { \"login\": true, \"roles\": [\"admin\"] },\n          \"delete\": { \"login\": true, \"roles\": [\"admin\"] }\n        }\n      }\n    }\n  ]\n}\n","json",[1179,1235,1236,1245,1262,1275,1284,1297,1310,1324,1332,1351,1367,1384,1390,1396,1405,1411,1440,1448,1493,1543,1581,1612,1643,1691,1740,1787,1834,1865,1904,1935,1967,1973,1981,2007,2015,2031,2047,2063,2079,2107,2113,2119,2125,2130,2155,2162,2199,2246,2284,2314,2359,2406,2451,2488,2517,2546,2551,2558,2581,2588,2603,2618,2633,2648,2671,2676,2681,2686,2691,2716,2723,2760,2798,2836,2884,2931,2968,2998,3027,3032,3039,3062,3069,3084,3099,3114,3129,3152,3157,3162,3167,3172,3197,3204,3241,3280,3327,3366,3405,3436,3475,3514,3545,3582,3611,3640,3645,3652,3675,3682,3697,3712,3727,3751,3774,3779,3784,3789,3795],{"__ignoreMap":1217},[1237,1238,1241],"span",{"class":1239,"line":1240},"line",1,[1237,1242,1244],{"class":1243},"sMOD_","{\n",[1237,1246,1248,1252,1255,1259],{"class":1239,"line":1247},2,[1237,1249,1251],{"class":1250},"s-m8C","  \"content-type\"",[1237,1253,1254],{"class":1243},": ",[1237,1256,1258],{"class":1257},"sCZoN","\"application/setfn-schema\"",[1237,1260,1261],{"class":1243},",\n",[1237,1263,1265,1268,1270,1273],{"class":1239,"line":1264},3,[1237,1266,1267],{"class":1250},"  \"dbType\"",[1237,1269,1254],{"class":1243},[1237,1271,1272],{"class":1257},"\"sqlite3\"",[1237,1274,1261],{"class":1243},[1237,1276,1278,1281],{"class":1239,"line":1277},4,[1237,1279,1280],{"class":1250},"  \"apiBuild\"",[1237,1282,1283],{"class":1243},": {\n",[1237,1285,1287,1290,1292,1295],{"class":1239,"line":1286},5,[1237,1288,1289],{"class":1250},"    \"dbName\"",[1237,1291,1254],{"class":1243},[1237,1293,1294],{"class":1257},"\"inventory_management\"",[1237,1296,1261],{"class":1243},[1237,1298,1300,1303,1305,1308],{"class":1239,"line":1299},6,[1237,1301,1302],{"class":1250},"    \"dbEngine\"",[1237,1304,1254],{"class":1243},[1237,1306,1307],{"class":1257},"\"sqlite\"",[1237,1309,1261],{"class":1243},[1237,1311,1313,1316,1318,1322],{"class":1239,"line":1312},7,[1237,1314,1315],{"class":1250},"    \"includeClient\"",[1237,1317,1254],{"class":1243},[1237,1319,1321],{"class":1320},"s7F3e","false",[1237,1323,1261],{"class":1243},[1237,1325,1327,1330],{"class":1239,"line":1326},8,[1237,1328,1329],{"class":1250},"    \"features\"",[1237,1331,1283],{"class":1243},[1237,1333,1335,1338,1341,1344,1346,1348],{"class":1239,"line":1334},9,[1237,1336,1337],{"class":1250},"      \"realtime\"",[1237,1339,1340],{"class":1243},": { ",[1237,1342,1343],{"class":1250},"\"enabled\"",[1237,1345,1254],{"class":1243},[1237,1347,1321],{"class":1320},[1237,1349,1350],{"class":1243}," },\n",[1237,1352,1354,1357,1359,1361,1363,1365],{"class":1239,"line":1353},10,[1237,1355,1356],{"class":1250},"      \"upload\"",[1237,1358,1340],{"class":1243},[1237,1360,1343],{"class":1250},[1237,1362,1254],{"class":1243},[1237,1364,1321],{"class":1320},[1237,1366,1350],{"class":1243},[1237,1368,1370,1373,1375,1377,1379,1381],{"class":1239,"line":1369},11,[1237,1371,1372],{"class":1250},"      \"ai-chat\"",[1237,1374,1340],{"class":1243},[1237,1376,1343],{"class":1250},[1237,1378,1254],{"class":1243},[1237,1380,1321],{"class":1320},[1237,1382,1383],{"class":1243}," }\n",[1237,1385,1387],{"class":1239,"line":1386},12,[1237,1388,1389],{"class":1243},"    }\n",[1237,1391,1393],{"class":1239,"line":1392},13,[1237,1394,1395],{"class":1243},"  },\n",[1237,1397,1399,1402],{"class":1239,"line":1398},14,[1237,1400,1401],{"class":1250},"  \"data\"",[1237,1403,1404],{"class":1243},": [\n",[1237,1406,1408],{"class":1239,"line":1407},15,[1237,1409,1410],{"class":1243},"    {\n",[1237,1412,1414,1417,1419,1422,1424,1427,1430,1433,1435,1438],{"class":1239,"line":1413},16,[1237,1415,1416],{"class":1250},"      \"table\"",[1237,1418,1340],{"class":1243},[1237,1420,1421],{"class":1250},"\"name\"",[1237,1423,1254],{"class":1243},[1237,1425,1426],{"class":1257},"\"parts\"",[1237,1428,1429],{"class":1243},", ",[1237,1431,1432],{"class":1250},"\"cmt\"",[1237,1434,1254],{"class":1243},[1237,1436,1437],{"class":1257},"\"零件主数据。任何成员都可以查看/登记/修改，只有管理员可以删除\"",[1237,1439,1350],{"class":1243},[1237,1441,1443,1446],{"class":1239,"line":1442},17,[1237,1444,1445],{"class":1250},"      \"columns\"",[1237,1447,1404],{"class":1243},[1237,1449,1451,1454,1456,1458,1461,1463,1466,1468,1471,1473,1476,1478,1481,1483,1486,1488,1491],{"class":1239,"line":1450},18,[1237,1452,1453],{"class":1243},"        { ",[1237,1455,1421],{"class":1250},[1237,1457,1254],{"class":1243},[1237,1459,1460],{"class":1257},"\"id\"",[1237,1462,1429],{"class":1243},[1237,1464,1465],{"class":1250},"\"type\"",[1237,1467,1254],{"class":1243},[1237,1469,1470],{"class":1257},"\"serial4\"",[1237,1472,1429],{"class":1243},[1237,1474,1475],{"class":1250},"\"primary\"",[1237,1477,1254],{"class":1243},[1237,1479,1480],{"class":1320},"true",[1237,1482,1429],{"class":1243},[1237,1484,1485],{"class":1250},"\"default\"",[1237,1487,1254],{"class":1243},[1237,1489,1490],{"class":1257},"\"auto_increment\"",[1237,1492,1350],{"class":1243},[1237,1494,1496,1498,1500,1502,1505,1507,1509,1511,1514,1516,1519,1521,1523,1525,1528,1530,1532,1534,1536,1538,1541],{"class":1239,"line":1495},19,[1237,1497,1453],{"class":1243},[1237,1499,1421],{"class":1250},[1237,1501,1254],{"class":1243},[1237,1503,1504],{"class":1257},"\"part_code\"",[1237,1506,1429],{"class":1243},[1237,1508,1465],{"class":1250},[1237,1510,1254],{"class":1243},[1237,1512,1513],{"class":1257},"\"text\"",[1237,1515,1429],{"class":1243},[1237,1517,1518],{"class":1250},"\"notnull\"",[1237,1520,1254],{"class":1243},[1237,1522,1480],{"class":1320},[1237,1524,1429],{"class":1243},[1237,1526,1527],{"class":1250},"\"unique\"",[1237,1529,1254],{"class":1243},[1237,1531,1480],{"class":1320},[1237,1533,1429],{"class":1243},[1237,1535,1432],{"class":1250},[1237,1537,1254],{"class":1243},[1237,1539,1540],{"class":1257},"\"零件代码\"",[1237,1542,1350],{"class":1243},[1237,1544,1546,1548,1550,1552,1554,1556,1558,1560,1562,1564,1566,1568,1570,1572,1574,1576,1579],{"class":1239,"line":1545},20,[1237,1547,1453],{"class":1243},[1237,1549,1421],{"class":1250},[1237,1551,1254],{"class":1243},[1237,1553,1421],{"class":1257},[1237,1555,1429],{"class":1243},[1237,1557,1465],{"class":1250},[1237,1559,1254],{"class":1243},[1237,1561,1513],{"class":1257},[1237,1563,1429],{"class":1243},[1237,1565,1518],{"class":1250},[1237,1567,1254],{"class":1243},[1237,1569,1480],{"class":1320},[1237,1571,1429],{"class":1243},[1237,1573,1432],{"class":1250},[1237,1575,1254],{"class":1243},[1237,1577,1578],{"class":1257},"\"零件名称\"",[1237,1580,1350],{"class":1243},[1237,1582,1584,1586,1588,1590,1593,1595,1597,1599,1601,1603,1605,1607,1610],{"class":1239,"line":1583},21,[1237,1585,1453],{"class":1243},[1237,1587,1421],{"class":1250},[1237,1589,1254],{"class":1243},[1237,1591,1592],{"class":1257},"\"spec\"",[1237,1594,1429],{"class":1243},[1237,1596,1465],{"class":1250},[1237,1598,1254],{"class":1243},[1237,1600,1513],{"class":1257},[1237,1602,1429],{"class":1243},[1237,1604,1432],{"class":1250},[1237,1606,1254],{"class":1243},[1237,1608,1609],{"class":1257},"\"规格（例：M2、220V/50Hz）。即使名称相同，规格不同也要登记为单独的 part_code\"",[1237,1611,1350],{"class":1243},[1237,1613,1615,1617,1619,1621,1624,1626,1628,1630,1632,1634,1636,1638,1641],{"class":1239,"line":1614},22,[1237,1616,1453],{"class":1243},[1237,1618,1421],{"class":1250},[1237,1620,1254],{"class":1243},[1237,1622,1623],{"class":1257},"\"category\"",[1237,1625,1429],{"class":1243},[1237,1627,1465],{"class":1250},[1237,1629,1254],{"class":1243},[1237,1631,1513],{"class":1257},[1237,1633,1429],{"class":1243},[1237,1635,1432],{"class":1250},[1237,1637,1254],{"class":1243},[1237,1639,1640],{"class":1257},"\"零件分类（电子零件/机构零件/包装材料等）\"",[1237,1642,1350],{"class":1243},[1237,1644,1646,1648,1650,1652,1655,1657,1659,1661,1663,1665,1667,1669,1671,1673,1675,1677,1680,1682,1684,1686,1689],{"class":1239,"line":1645},23,[1237,1647,1453],{"class":1243},[1237,1649,1421],{"class":1250},[1237,1651,1254],{"class":1243},[1237,1653,1654],{"class":1257},"\"unit\"",[1237,1656,1429],{"class":1243},[1237,1658,1465],{"class":1250},[1237,1660,1254],{"class":1243},[1237,1662,1513],{"class":1257},[1237,1664,1429],{"class":1243},[1237,1666,1518],{"class":1250},[1237,1668,1254],{"class":1243},[1237,1670,1480],{"class":1320},[1237,1672,1429],{"class":1243},[1237,1674,1485],{"class":1250},[1237,1676,1254],{"class":1243},[1237,1678,1679],{"class":1257},"\"EA\"",[1237,1681,1429],{"class":1243},[1237,1683,1432],{"class":1250},[1237,1685,1254],{"class":1243},[1237,1687,1688],{"class":1257},"\"单位\"",[1237,1690,1350],{"class":1243},[1237,1692,1694,1696,1698,1700,1703,1705,1707,1709,1712,1714,1716,1718,1720,1722,1724,1726,1729,1731,1733,1735,1738],{"class":1239,"line":1693},24,[1237,1695,1453],{"class":1243},[1237,1697,1421],{"class":1250},[1237,1699,1254],{"class":1243},[1237,1701,1702],{"class":1257},"\"unit_cost\"",[1237,1704,1429],{"class":1243},[1237,1706,1465],{"class":1250},[1237,1708,1254],{"class":1243},[1237,1710,1711],{"class":1257},"\"int4\"",[1237,1713,1429],{"class":1243},[1237,1715,1518],{"class":1250},[1237,1717,1254],{"class":1243},[1237,1719,1480],{"class":1320},[1237,1721,1429],{"class":1243},[1237,1723,1485],{"class":1250},[1237,1725,1254],{"class":1243},[1237,1727,1728],{"class":1257},"\"0\"",[1237,1730,1429],{"class":1243},[1237,1732,1432],{"class":1250},[1237,1734,1254],{"class":1243},[1237,1736,1737],{"class":1257},"\"单价\"",[1237,1739,1350],{"class":1243},[1237,1741,1743,1745,1747,1749,1752,1754,1756,1758,1760,1762,1764,1766,1768,1770,1772,1774,1776,1778,1780,1782,1785],{"class":1239,"line":1742},25,[1237,1744,1453],{"class":1243},[1237,1746,1421],{"class":1250},[1237,1748,1254],{"class":1243},[1237,1750,1751],{"class":1257},"\"current_stock\"",[1237,1753,1429],{"class":1243},[1237,1755,1465],{"class":1250},[1237,1757,1254],{"class":1243},[1237,1759,1711],{"class":1257},[1237,1761,1429],{"class":1243},[1237,1763,1518],{"class":1250},[1237,1765,1254],{"class":1243},[1237,1767,1480],{"class":1320},[1237,1769,1429],{"class":1243},[1237,1771,1485],{"class":1250},[1237,1773,1254],{"class":1243},[1237,1775,1728],{"class":1257},[1237,1777,1429],{"class":1243},[1237,1779,1432],{"class":1250},[1237,1781,1254],{"class":1243},[1237,1783,1784],{"class":1257},"\"当前库存\"",[1237,1786,1350],{"class":1243},[1237,1788,1790,1792,1794,1796,1799,1801,1803,1805,1807,1809,1811,1813,1815,1817,1819,1821,1823,1825,1827,1829,1832],{"class":1239,"line":1789},26,[1237,1791,1453],{"class":1243},[1237,1793,1421],{"class":1250},[1237,1795,1254],{"class":1243},[1237,1797,1798],{"class":1257},"\"safety_stock\"",[1237,1800,1429],{"class":1243},[1237,1802,1465],{"class":1250},[1237,1804,1254],{"class":1243},[1237,1806,1711],{"class":1257},[1237,1808,1429],{"class":1243},[1237,1810,1518],{"class":1250},[1237,1812,1254],{"class":1243},[1237,1814,1480],{"class":1320},[1237,1816,1429],{"class":1243},[1237,1818,1485],{"class":1250},[1237,1820,1254],{"class":1243},[1237,1822,1728],{"class":1257},[1237,1824,1429],{"class":1243},[1237,1826,1432],{"class":1250},[1237,1828,1254],{"class":1243},[1237,1830,1831],{"class":1257},"\"安全库存（再订货点）\"",[1237,1833,1350],{"class":1243},[1237,1835,1837,1839,1841,1843,1846,1848,1850,1852,1854,1856,1858,1860,1863],{"class":1239,"line":1836},27,[1237,1838,1453],{"class":1243},[1237,1840,1421],{"class":1250},[1237,1842,1254],{"class":1243},[1237,1844,1845],{"class":1257},"\"supplier\"",[1237,1847,1429],{"class":1243},[1237,1849,1465],{"class":1250},[1237,1851,1254],{"class":1243},[1237,1853,1513],{"class":1257},[1237,1855,1429],{"class":1243},[1237,1857,1432],{"class":1250},[1237,1859,1254],{"class":1243},[1237,1861,1862],{"class":1257},"\"供应商\"",[1237,1864,1350],{"class":1243},[1237,1866,1868,1870,1872,1874,1877,1879,1881,1883,1885,1887,1889,1891,1893,1895,1898,1900,1902],{"class":1239,"line":1867},28,[1237,1869,1453],{"class":1243},[1237,1871,1421],{"class":1250},[1237,1873,1254],{"class":1243},[1237,1875,1876],{"class":1257},"\"_user_id\"",[1237,1878,1429],{"class":1243},[1237,1880,1465],{"class":1250},[1237,1882,1254],{"class":1243},[1237,1884,1711],{"class":1257},[1237,1886,1429],{"class":1243},[1237,1888,1518],{"class":1250},[1237,1890,1254],{"class":1243},[1237,1892,1480],{"class":1320},[1237,1894,1429],{"class":1243},[1237,1896,1897],{"class":1250},"\"index\"",[1237,1899,1254],{"class":1243},[1237,1901,1480],{"class":1320},[1237,1903,1350],{"class":1243},[1237,1905,1907,1909,1911,1913,1916,1918,1920,1922,1924,1926,1928,1930,1933],{"class":1239,"line":1906},29,[1237,1908,1453],{"class":1243},[1237,1910,1421],{"class":1250},[1237,1912,1254],{"class":1243},[1237,1914,1915],{"class":1257},"\"_nick\"",[1237,1917,1429],{"class":1243},[1237,1919,1465],{"class":1250},[1237,1921,1254],{"class":1243},[1237,1923,1513],{"class":1257},[1237,1925,1429],{"class":1243},[1237,1927,1432],{"class":1250},[1237,1929,1254],{"class":1243},[1237,1931,1932],{"class":1257},"\"最后登记/修改的成员的显示名称\"",[1237,1934,1350],{"class":1243},[1237,1936,1938,1940,1942,1944,1947,1949,1951,1953,1956,1958,1960,1962,1965],{"class":1239,"line":1937},30,[1237,1939,1453],{"class":1243},[1237,1941,1421],{"class":1250},[1237,1943,1254],{"class":1243},[1237,1945,1946],{"class":1257},"\"_created_at\"",[1237,1948,1429],{"class":1243},[1237,1950,1465],{"class":1250},[1237,1952,1254],{"class":1243},[1237,1954,1955],{"class":1257},"\"timestamp\"",[1237,1957,1429],{"class":1243},[1237,1959,1485],{"class":1250},[1237,1961,1254],{"class":1243},[1237,1963,1964],{"class":1257},"\"now()\"",[1237,1966,1383],{"class":1243},[1237,1968,1970],{"class":1239,"line":1969},31,[1237,1971,1972],{"class":1243},"      ],\n",[1237,1974,1976,1979],{"class":1239,"line":1975},32,[1237,1977,1978],{"class":1250},"      \"permissions\"",[1237,1980,1283],{"class":1243},[1237,1982,1984,1987,1989,1992,1994,1996,1998,2001,2003,2005],{"class":1239,"line":1983},33,[1237,1985,1986],{"class":1250},"        \"security\"",[1237,1988,1340],{"class":1243},[1237,1990,1991],{"class":1250},"\"login\"",[1237,1993,1254],{"class":1243},[1237,1995,1480],{"class":1320},[1237,1997,1429],{"class":1243},[1237,1999,2000],{"class":1250},"\"ownerColumn\"",[1237,2002,1254],{"class":1243},[1237,2004,1876],{"class":1257},[1237,2006,1350],{"class":1243},[1237,2008,2010,2013],{"class":1239,"line":2009},34,[1237,2011,2012],{"class":1250},"        \"ops\"",[1237,2014,1283],{"class":1243},[1237,2016,2018,2021,2023,2025,2027,2029],{"class":1239,"line":2017},35,[1237,2019,2020],{"class":1250},"          \"list\"",[1237,2022,1340],{"class":1243},[1237,2024,1991],{"class":1250},[1237,2026,1254],{"class":1243},[1237,2028,1480],{"class":1320},[1237,2030,1350],{"class":1243},[1237,2032,2034,2037,2039,2041,2043,2045],{"class":1239,"line":2033},36,[1237,2035,2036],{"class":1250},"          \"view\"",[1237,2038,1340],{"class":1243},[1237,2040,1991],{"class":1250},[1237,2042,1254],{"class":1243},[1237,2044,1480],{"class":1320},[1237,2046,1350],{"class":1243},[1237,2048,2050,2053,2055,2057,2059,2061],{"class":1239,"line":2049},37,[1237,2051,2052],{"class":1250},"          \"create\"",[1237,2054,1340],{"class":1243},[1237,2056,1991],{"class":1250},[1237,2058,1254],{"class":1243},[1237,2060,1480],{"class":1320},[1237,2062,1350],{"class":1243},[1237,2064,2066,2069,2071,2073,2075,2077],{"class":1239,"line":2065},38,[1237,2067,2068],{"class":1250},"          \"update\"",[1237,2070,1340],{"class":1243},[1237,2072,1991],{"class":1250},[1237,2074,1254],{"class":1243},[1237,2076,1480],{"class":1320},[1237,2078,1350],{"class":1243},[1237,2080,2082,2085,2087,2089,2091,2093,2095,2098,2101,2104],{"class":1239,"line":2081},39,[1237,2083,2084],{"class":1250},"          \"delete\"",[1237,2086,1340],{"class":1243},[1237,2088,1991],{"class":1250},[1237,2090,1254],{"class":1243},[1237,2092,1480],{"class":1320},[1237,2094,1429],{"class":1243},[1237,2096,2097],{"class":1250},"\"roles\"",[1237,2099,2100],{"class":1243},": [",[1237,2102,2103],{"class":1257},"\"admin\"",[1237,2105,2106],{"class":1243},"] }\n",[1237,2108,2110],{"class":1239,"line":2109},40,[1237,2111,2112],{"class":1243},"        }\n",[1237,2114,2116],{"class":1239,"line":2115},41,[1237,2117,2118],{"class":1243},"      }\n",[1237,2120,2122],{"class":1239,"line":2121},42,[1237,2123,2124],{"class":1243},"    },\n",[1237,2126,2128],{"class":1239,"line":2127},43,[1237,2129,1410],{"class":1243},[1237,2131,2133,2135,2137,2139,2141,2144,2146,2148,2150,2153],{"class":1239,"line":2132},44,[1237,2134,1416],{"class":1250},[1237,2136,1340],{"class":1243},[1237,2138,1421],{"class":1250},[1237,2140,1254],{"class":1243},[1237,2142,2143],{"class":1257},"\"products\"",[1237,2145,1429],{"class":1243},[1237,2147,1432],{"class":1250},[1237,2149,1254],{"class":1243},[1237,2151,2152],{"class":1257},"\"产品主数据。任何成员都可以查看/登记/修改，只有管理员可以删除\"",[1237,2154,1350],{"class":1243},[1237,2156,2158,2160],{"class":1239,"line":2157},45,[1237,2159,1445],{"class":1250},[1237,2161,1404],{"class":1243},[1237,2163,2165,2167,2169,2171,2173,2175,2177,2179,2181,2183,2185,2187,2189,2191,2193,2195,2197],{"class":1239,"line":2164},46,[1237,2166,1453],{"class":1243},[1237,2168,1421],{"class":1250},[1237,2170,1254],{"class":1243},[1237,2172,1460],{"class":1257},[1237,2174,1429],{"class":1243},[1237,2176,1465],{"class":1250},[1237,2178,1254],{"class":1243},[1237,2180,1470],{"class":1257},[1237,2182,1429],{"class":1243},[1237,2184,1475],{"class":1250},[1237,2186,1254],{"class":1243},[1237,2188,1480],{"class":1320},[1237,2190,1429],{"class":1243},[1237,2192,1485],{"class":1250},[1237,2194,1254],{"class":1243},[1237,2196,1490],{"class":1257},[1237,2198,1350],{"class":1243},[1237,2200,2202,2204,2206,2208,2211,2213,2215,2217,2219,2221,2223,2225,2227,2229,2231,2233,2235,2237,2239,2241,2244],{"class":1239,"line":2201},47,[1237,2203,1453],{"class":1243},[1237,2205,1421],{"class":1250},[1237,2207,1254],{"class":1243},[1237,2209,2210],{"class":1257},"\"product_code\"",[1237,2212,1429],{"class":1243},[1237,2214,1465],{"class":1250},[1237,2216,1254],{"class":1243},[1237,2218,1513],{"class":1257},[1237,2220,1429],{"class":1243},[1237,2222,1518],{"class":1250},[1237,2224,1254],{"class":1243},[1237,2226,1480],{"class":1320},[1237,2228,1429],{"class":1243},[1237,2230,1527],{"class":1250},[1237,2232,1254],{"class":1243},[1237,2234,1480],{"class":1320},[1237,2236,1429],{"class":1243},[1237,2238,1432],{"class":1250},[1237,2240,1254],{"class":1243},[1237,2242,2243],{"class":1257},"\"产品代码\"",[1237,2245,1350],{"class":1243},[1237,2247,2249,2251,2253,2255,2257,2259,2261,2263,2265,2267,2269,2271,2273,2275,2277,2279,2282],{"class":1239,"line":2248},48,[1237,2250,1453],{"class":1243},[1237,2252,1421],{"class":1250},[1237,2254,1254],{"class":1243},[1237,2256,1421],{"class":1257},[1237,2258,1429],{"class":1243},[1237,2260,1465],{"class":1250},[1237,2262,1254],{"class":1243},[1237,2264,1513],{"class":1257},[1237,2266,1429],{"class":1243},[1237,2268,1518],{"class":1250},[1237,2270,1254],{"class":1243},[1237,2272,1480],{"class":1320},[1237,2274,1429],{"class":1243},[1237,2276,1432],{"class":1250},[1237,2278,1254],{"class":1243},[1237,2280,2281],{"class":1257},"\"产品名称\"",[1237,2283,1350],{"class":1243},[1237,2285,2287,2289,2291,2293,2295,2297,2299,2301,2303,2305,2307,2309,2312],{"class":1239,"line":2286},49,[1237,2288,1453],{"class":1243},[1237,2290,1421],{"class":1250},[1237,2292,1254],{"class":1243},[1237,2294,1623],{"class":1257},[1237,2296,1429],{"class":1243},[1237,2298,1465],{"class":1250},[1237,2300,1254],{"class":1243},[1237,2302,1513],{"class":1257},[1237,2304,1429],{"class":1243},[1237,2306,1432],{"class":1250},[1237,2308,1254],{"class":1243},[1237,2310,2311],{"class":1257},"\"产品分类\"",[1237,2313,1350],{"class":1243},[1237,2315,2317,2319,2321,2323,2325,2327,2329,2331,2333,2335,2337,2339,2341,2343,2345,2347,2349,2351,2353,2355,2357],{"class":1239,"line":2316},50,[1237,2318,1453],{"class":1243},[1237,2320,1421],{"class":1250},[1237,2322,1254],{"class":1243},[1237,2324,1654],{"class":1257},[1237,2326,1429],{"class":1243},[1237,2328,1465],{"class":1250},[1237,2330,1254],{"class":1243},[1237,2332,1513],{"class":1257},[1237,2334,1429],{"class":1243},[1237,2336,1518],{"class":1250},[1237,2338,1254],{"class":1243},[1237,2340,1480],{"class":1320},[1237,2342,1429],{"class":1243},[1237,2344,1485],{"class":1250},[1237,2346,1254],{"class":1243},[1237,2348,1679],{"class":1257},[1237,2350,1429],{"class":1243},[1237,2352,1432],{"class":1250},[1237,2354,1254],{"class":1243},[1237,2356,1688],{"class":1257},[1237,2358,1350],{"class":1243},[1237,2360,2362,2364,2366,2368,2371,2373,2375,2377,2379,2381,2383,2385,2387,2389,2391,2393,2395,2397,2399,2401,2404],{"class":1239,"line":2361},51,[1237,2363,1453],{"class":1243},[1237,2365,1421],{"class":1250},[1237,2367,1254],{"class":1243},[1237,2369,2370],{"class":1257},"\"price\"",[1237,2372,1429],{"class":1243},[1237,2374,1465],{"class":1250},[1237,2376,1254],{"class":1243},[1237,2378,1711],{"class":1257},[1237,2380,1429],{"class":1243},[1237,2382,1518],{"class":1250},[1237,2384,1254],{"class":1243},[1237,2386,1480],{"class":1320},[1237,2388,1429],{"class":1243},[1237,2390,1485],{"class":1250},[1237,2392,1254],{"class":1243},[1237,2394,1728],{"class":1257},[1237,2396,1429],{"class":1243},[1237,2398,1432],{"class":1250},[1237,2400,1254],{"class":1243},[1237,2402,2403],{"class":1257},"\"销售价\"",[1237,2405,1350],{"class":1243},[1237,2407,2409,2411,2413,2415,2417,2419,2421,2423,2425,2427,2429,2431,2433,2435,2437,2439,2441,2443,2445,2447,2449],{"class":1239,"line":2408},52,[1237,2410,1453],{"class":1243},[1237,2412,1421],{"class":1250},[1237,2414,1254],{"class":1243},[1237,2416,1751],{"class":1257},[1237,2418,1429],{"class":1243},[1237,2420,1465],{"class":1250},[1237,2422,1254],{"class":1243},[1237,2424,1711],{"class":1257},[1237,2426,1429],{"class":1243},[1237,2428,1518],{"class":1250},[1237,2430,1254],{"class":1243},[1237,2432,1480],{"class":1320},[1237,2434,1429],{"class":1243},[1237,2436,1485],{"class":1250},[1237,2438,1254],{"class":1243},[1237,2440,1728],{"class":1257},[1237,2442,1429],{"class":1243},[1237,2444,1432],{"class":1250},[1237,2446,1254],{"class":1243},[1237,2448,1784],{"class":1257},[1237,2450,1350],{"class":1243},[1237,2452,2454,2456,2458,2460,2462,2464,2466,2468,2470,2472,2474,2476,2478,2480,2482,2484,2486],{"class":1239,"line":2453},53,[1237,2455,1453],{"class":1243},[1237,2457,1421],{"class":1250},[1237,2459,1254],{"class":1243},[1237,2461,1876],{"class":1257},[1237,2463,1429],{"class":1243},[1237,2465,1465],{"class":1250},[1237,2467,1254],{"class":1243},[1237,2469,1711],{"class":1257},[1237,2471,1429],{"class":1243},[1237,2473,1518],{"class":1250},[1237,2475,1254],{"class":1243},[1237,2477,1480],{"class":1320},[1237,2479,1429],{"class":1243},[1237,2481,1897],{"class":1250},[1237,2483,1254],{"class":1243},[1237,2485,1480],{"class":1320},[1237,2487,1350],{"class":1243},[1237,2489,2491,2493,2495,2497,2499,2501,2503,2505,2507,2509,2511,2513,2515],{"class":1239,"line":2490},54,[1237,2492,1453],{"class":1243},[1237,2494,1421],{"class":1250},[1237,2496,1254],{"class":1243},[1237,2498,1915],{"class":1257},[1237,2500,1429],{"class":1243},[1237,2502,1465],{"class":1250},[1237,2504,1254],{"class":1243},[1237,2506,1513],{"class":1257},[1237,2508,1429],{"class":1243},[1237,2510,1432],{"class":1250},[1237,2512,1254],{"class":1243},[1237,2514,1932],{"class":1257},[1237,2516,1350],{"class":1243},[1237,2518,2520,2522,2524,2526,2528,2530,2532,2534,2536,2538,2540,2542,2544],{"class":1239,"line":2519},55,[1237,2521,1453],{"class":1243},[1237,2523,1421],{"class":1250},[1237,2525,1254],{"class":1243},[1237,2527,1946],{"class":1257},[1237,2529,1429],{"class":1243},[1237,2531,1465],{"class":1250},[1237,2533,1254],{"class":1243},[1237,2535,1955],{"class":1257},[1237,2537,1429],{"class":1243},[1237,2539,1485],{"class":1250},[1237,2541,1254],{"class":1243},[1237,2543,1964],{"class":1257},[1237,2545,1383],{"class":1243},[1237,2547,2549],{"class":1239,"line":2548},56,[1237,2550,1972],{"class":1243},[1237,2552,2554,2556],{"class":1239,"line":2553},57,[1237,2555,1978],{"class":1250},[1237,2557,1283],{"class":1243},[1237,2559,2561,2563,2565,2567,2569,2571,2573,2575,2577,2579],{"class":1239,"line":2560},58,[1237,2562,1986],{"class":1250},[1237,2564,1340],{"class":1243},[1237,2566,1991],{"class":1250},[1237,2568,1254],{"class":1243},[1237,2570,1480],{"class":1320},[1237,2572,1429],{"class":1243},[1237,2574,2000],{"class":1250},[1237,2576,1254],{"class":1243},[1237,2578,1876],{"class":1257},[1237,2580,1350],{"class":1243},[1237,2582,2584,2586],{"class":1239,"line":2583},59,[1237,2585,2012],{"class":1250},[1237,2587,1283],{"class":1243},[1237,2589,2591,2593,2595,2597,2599,2601],{"class":1239,"line":2590},60,[1237,2592,2020],{"class":1250},[1237,2594,1340],{"class":1243},[1237,2596,1991],{"class":1250},[1237,2598,1254],{"class":1243},[1237,2600,1480],{"class":1320},[1237,2602,1350],{"class":1243},[1237,2604,2606,2608,2610,2612,2614,2616],{"class":1239,"line":2605},61,[1237,2607,2036],{"class":1250},[1237,2609,1340],{"class":1243},[1237,2611,1991],{"class":1250},[1237,2613,1254],{"class":1243},[1237,2615,1480],{"class":1320},[1237,2617,1350],{"class":1243},[1237,2619,2621,2623,2625,2627,2629,2631],{"class":1239,"line":2620},62,[1237,2622,2052],{"class":1250},[1237,2624,1340],{"class":1243},[1237,2626,1991],{"class":1250},[1237,2628,1254],{"class":1243},[1237,2630,1480],{"class":1320},[1237,2632,1350],{"class":1243},[1237,2634,2636,2638,2640,2642,2644,2646],{"class":1239,"line":2635},63,[1237,2637,2068],{"class":1250},[1237,2639,1340],{"class":1243},[1237,2641,1991],{"class":1250},[1237,2643,1254],{"class":1243},[1237,2645,1480],{"class":1320},[1237,2647,1350],{"class":1243},[1237,2649,2651,2653,2655,2657,2659,2661,2663,2665,2667,2669],{"class":1239,"line":2650},64,[1237,2652,2084],{"class":1250},[1237,2654,1340],{"class":1243},[1237,2656,1991],{"class":1250},[1237,2658,1254],{"class":1243},[1237,2660,1480],{"class":1320},[1237,2662,1429],{"class":1243},[1237,2664,2097],{"class":1250},[1237,2666,2100],{"class":1243},[1237,2668,2103],{"class":1257},[1237,2670,2106],{"class":1243},[1237,2672,2674],{"class":1239,"line":2673},65,[1237,2675,2112],{"class":1243},[1237,2677,2679],{"class":1239,"line":2678},66,[1237,2680,2118],{"class":1243},[1237,2682,2684],{"class":1239,"line":2683},67,[1237,2685,2124],{"class":1243},[1237,2687,2689],{"class":1239,"line":2688},68,[1237,2690,1410],{"class":1243},[1237,2692,2694,2696,2698,2700,2702,2705,2707,2709,2711,2714],{"class":1239,"line":2693},69,[1237,2695,1416],{"class":1250},[1237,2697,1340],{"class":1243},[1237,2699,1421],{"class":1250},[1237,2701,1254],{"class":1243},[1237,2703,2704],{"class":1257},"\"bom\"",[1237,2706,1429],{"class":1243},[1237,2708,1432],{"class":1250},[1237,2710,1254],{"class":1243},[1237,2712,2713],{"class":1257},"\"各产品的零件构成表（单层）。对 bom_key（product_id:part_id）加 unique 约束，防止同一产品重复登记同一零件\"",[1237,2715,1350],{"class":1243},[1237,2717,2719,2721],{"class":1239,"line":2718},70,[1237,2720,1445],{"class":1250},[1237,2722,1404],{"class":1243},[1237,2724,2726,2728,2730,2732,2734,2736,2738,2740,2742,2744,2746,2748,2750,2752,2754,2756,2758],{"class":1239,"line":2725},71,[1237,2727,1453],{"class":1243},[1237,2729,1421],{"class":1250},[1237,2731,1254],{"class":1243},[1237,2733,1460],{"class":1257},[1237,2735,1429],{"class":1243},[1237,2737,1465],{"class":1250},[1237,2739,1254],{"class":1243},[1237,2741,1470],{"class":1257},[1237,2743,1429],{"class":1243},[1237,2745,1475],{"class":1250},[1237,2747,1254],{"class":1243},[1237,2749,1480],{"class":1320},[1237,2751,1429],{"class":1243},[1237,2753,1485],{"class":1250},[1237,2755,1254],{"class":1243},[1237,2757,1490],{"class":1257},[1237,2759,1350],{"class":1243},[1237,2761,2763,2765,2767,2769,2772,2774,2776,2778,2780,2782,2784,2786,2788,2790,2792,2794,2796],{"class":1239,"line":2762},72,[1237,2764,1453],{"class":1243},[1237,2766,1421],{"class":1250},[1237,2768,1254],{"class":1243},[1237,2770,2771],{"class":1257},"\"product_id\"",[1237,2773,1429],{"class":1243},[1237,2775,1465],{"class":1250},[1237,2777,1254],{"class":1243},[1237,2779,1711],{"class":1257},[1237,2781,1429],{"class":1243},[1237,2783,1518],{"class":1250},[1237,2785,1254],{"class":1243},[1237,2787,1480],{"class":1320},[1237,2789,1429],{"class":1243},[1237,2791,1897],{"class":1250},[1237,2793,1254],{"class":1243},[1237,2795,1480],{"class":1320},[1237,2797,1350],{"class":1243},[1237,2799,2801,2803,2805,2807,2810,2812,2814,2816,2818,2820,2822,2824,2826,2828,2830,2832,2834],{"class":1239,"line":2800},73,[1237,2802,1453],{"class":1243},[1237,2804,1421],{"class":1250},[1237,2806,1254],{"class":1243},[1237,2808,2809],{"class":1257},"\"part_id\"",[1237,2811,1429],{"class":1243},[1237,2813,1465],{"class":1250},[1237,2815,1254],{"class":1243},[1237,2817,1711],{"class":1257},[1237,2819,1429],{"class":1243},[1237,2821,1518],{"class":1250},[1237,2823,1254],{"class":1243},[1237,2825,1480],{"class":1320},[1237,2827,1429],{"class":1243},[1237,2829,1897],{"class":1250},[1237,2831,1254],{"class":1243},[1237,2833,1480],{"class":1320},[1237,2835,1350],{"class":1243},[1237,2837,2839,2841,2843,2845,2848,2850,2852,2854,2856,2858,2860,2862,2864,2866,2868,2870,2873,2875,2877,2879,2882],{"class":1239,"line":2838},74,[1237,2840,1453],{"class":1243},[1237,2842,1421],{"class":1250},[1237,2844,1254],{"class":1243},[1237,2846,2847],{"class":1257},"\"qty_per_unit\"",[1237,2849,1429],{"class":1243},[1237,2851,1465],{"class":1250},[1237,2853,1254],{"class":1243},[1237,2855,1711],{"class":1257},[1237,2857,1429],{"class":1243},[1237,2859,1518],{"class":1250},[1237,2861,1254],{"class":1243},[1237,2863,1480],{"class":1320},[1237,2865,1429],{"class":1243},[1237,2867,1485],{"class":1250},[1237,2869,1254],{"class":1243},[1237,2871,2872],{"class":1257},"\"1\"",[1237,2874,1429],{"class":1243},[1237,2876,1432],{"class":1250},[1237,2878,1254],{"class":1243},[1237,2880,2881],{"class":1257},"\"制造 1 个产品所需的零件数量\"",[1237,2883,1350],{"class":1243},[1237,2885,2887,2889,2891,2893,2896,2898,2900,2902,2904,2906,2908,2910,2912,2914,2916,2918,2920,2922,2924,2926,2929],{"class":1239,"line":2886},75,[1237,2888,1453],{"class":1243},[1237,2890,1421],{"class":1250},[1237,2892,1254],{"class":1243},[1237,2894,2895],{"class":1257},"\"bom_key\"",[1237,2897,1429],{"class":1243},[1237,2899,1465],{"class":1250},[1237,2901,1254],{"class":1243},[1237,2903,1513],{"class":1257},[1237,2905,1429],{"class":1243},[1237,2907,1518],{"class":1250},[1237,2909,1254],{"class":1243},[1237,2911,1480],{"class":1320},[1237,2913,1429],{"class":1243},[1237,2915,1527],{"class":1250},[1237,2917,1254],{"class":1243},[1237,2919,1480],{"class":1320},[1237,2921,1429],{"class":1243},[1237,2923,1432],{"class":1250},[1237,2925,1254],{"class":1243},[1237,2927,2928],{"class":1257},"\"product_id:part_id 的组合。用于防止重复登记\"",[1237,2930,1350],{"class":1243},[1237,2932,2934,2936,2938,2940,2942,2944,2946,2948,2950,2952,2954,2956,2958,2960,2962,2964,2966],{"class":1239,"line":2933},76,[1237,2935,1453],{"class":1243},[1237,2937,1421],{"class":1250},[1237,2939,1254],{"class":1243},[1237,2941,1876],{"class":1257},[1237,2943,1429],{"class":1243},[1237,2945,1465],{"class":1250},[1237,2947,1254],{"class":1243},[1237,2949,1711],{"class":1257},[1237,2951,1429],{"class":1243},[1237,2953,1518],{"class":1250},[1237,2955,1254],{"class":1243},[1237,2957,1480],{"class":1320},[1237,2959,1429],{"class":1243},[1237,2961,1897],{"class":1250},[1237,2963,1254],{"class":1243},[1237,2965,1480],{"class":1320},[1237,2967,1350],{"class":1243},[1237,2969,2971,2973,2975,2977,2979,2981,2983,2985,2987,2989,2991,2993,2996],{"class":1239,"line":2970},77,[1237,2972,1453],{"class":1243},[1237,2974,1421],{"class":1250},[1237,2976,1254],{"class":1243},[1237,2978,1915],{"class":1257},[1237,2980,1429],{"class":1243},[1237,2982,1465],{"class":1250},[1237,2984,1254],{"class":1243},[1237,2986,1513],{"class":1257},[1237,2988,1429],{"class":1243},[1237,2990,1432],{"class":1250},[1237,2992,1254],{"class":1243},[1237,2994,2995],{"class":1257},"\"登记成员的显示名称\"",[1237,2997,1350],{"class":1243},[1237,2999,3001,3003,3005,3007,3009,3011,3013,3015,3017,3019,3021,3023,3025],{"class":1239,"line":3000},78,[1237,3002,1453],{"class":1243},[1237,3004,1421],{"class":1250},[1237,3006,1254],{"class":1243},[1237,3008,1946],{"class":1257},[1237,3010,1429],{"class":1243},[1237,3012,1465],{"class":1250},[1237,3014,1254],{"class":1243},[1237,3016,1955],{"class":1257},[1237,3018,1429],{"class":1243},[1237,3020,1485],{"class":1250},[1237,3022,1254],{"class":1243},[1237,3024,1964],{"class":1257},[1237,3026,1383],{"class":1243},[1237,3028,3030],{"class":1239,"line":3029},79,[1237,3031,1972],{"class":1243},[1237,3033,3035,3037],{"class":1239,"line":3034},80,[1237,3036,1978],{"class":1250},[1237,3038,1283],{"class":1243},[1237,3040,3042,3044,3046,3048,3050,3052,3054,3056,3058,3060],{"class":1239,"line":3041},81,[1237,3043,1986],{"class":1250},[1237,3045,1340],{"class":1243},[1237,3047,1991],{"class":1250},[1237,3049,1254],{"class":1243},[1237,3051,1480],{"class":1320},[1237,3053,1429],{"class":1243},[1237,3055,2000],{"class":1250},[1237,3057,1254],{"class":1243},[1237,3059,1876],{"class":1257},[1237,3061,1350],{"class":1243},[1237,3063,3065,3067],{"class":1239,"line":3064},82,[1237,3066,2012],{"class":1250},[1237,3068,1283],{"class":1243},[1237,3070,3072,3074,3076,3078,3080,3082],{"class":1239,"line":3071},83,[1237,3073,2020],{"class":1250},[1237,3075,1340],{"class":1243},[1237,3077,1991],{"class":1250},[1237,3079,1254],{"class":1243},[1237,3081,1480],{"class":1320},[1237,3083,1350],{"class":1243},[1237,3085,3087,3089,3091,3093,3095,3097],{"class":1239,"line":3086},84,[1237,3088,2036],{"class":1250},[1237,3090,1340],{"class":1243},[1237,3092,1991],{"class":1250},[1237,3094,1254],{"class":1243},[1237,3096,1480],{"class":1320},[1237,3098,1350],{"class":1243},[1237,3100,3102,3104,3106,3108,3110,3112],{"class":1239,"line":3101},85,[1237,3103,2052],{"class":1250},[1237,3105,1340],{"class":1243},[1237,3107,1991],{"class":1250},[1237,3109,1254],{"class":1243},[1237,3111,1480],{"class":1320},[1237,3113,1350],{"class":1243},[1237,3115,3117,3119,3121,3123,3125,3127],{"class":1239,"line":3116},86,[1237,3118,2068],{"class":1250},[1237,3120,1340],{"class":1243},[1237,3122,1991],{"class":1250},[1237,3124,1254],{"class":1243},[1237,3126,1480],{"class":1320},[1237,3128,1350],{"class":1243},[1237,3130,3132,3134,3136,3138,3140,3142,3144,3146,3148,3150],{"class":1239,"line":3131},87,[1237,3133,2084],{"class":1250},[1237,3135,1340],{"class":1243},[1237,3137,1991],{"class":1250},[1237,3139,1254],{"class":1243},[1237,3141,1480],{"class":1320},[1237,3143,1429],{"class":1243},[1237,3145,2097],{"class":1250},[1237,3147,2100],{"class":1243},[1237,3149,2103],{"class":1257},[1237,3151,2106],{"class":1243},[1237,3153,3155],{"class":1239,"line":3154},88,[1237,3156,2112],{"class":1243},[1237,3158,3160],{"class":1239,"line":3159},89,[1237,3161,2118],{"class":1243},[1237,3163,3165],{"class":1239,"line":3164},90,[1237,3166,2124],{"class":1243},[1237,3168,3170],{"class":1239,"line":3169},91,[1237,3171,1410],{"class":1243},[1237,3173,3175,3177,3179,3181,3183,3186,3188,3190,3192,3195],{"class":1239,"line":3174},92,[1237,3176,1416],{"class":1250},[1237,3178,1340],{"class":1243},[1237,3180,1421],{"class":1250},[1237,3182,1254],{"class":1243},[1237,3184,3185],{"class":1257},"\"stock_transactions\"",[1237,3187,1429],{"class":1243},[1237,3189,1432],{"class":1250},[1237,3191,1254],{"class":1243},[1237,3193,3194],{"class":1257},"\"入出库/组装的统一历史。item_type=part|product，tx_type=입고|출고|조립사용|조립생산（入库|出库|组装使用|组装生产）。一次组装生产事件由共享同一 batch_id 的多条组装使用（零件消耗）记录 + 1 条组装生产（产品增加）记录构成，因此可以追踪某个产品使用了哪些零件、用了多少\"",[1237,3196,1350],{"class":1243},[1237,3198,3200,3202],{"class":1239,"line":3199},93,[1237,3201,1445],{"class":1250},[1237,3203,1404],{"class":1243},[1237,3205,3207,3209,3211,3213,3215,3217,3219,3221,3223,3225,3227,3229,3231,3233,3235,3237,3239],{"class":1239,"line":3206},94,[1237,3208,1453],{"class":1243},[1237,3210,1421],{"class":1250},[1237,3212,1254],{"class":1243},[1237,3214,1460],{"class":1257},[1237,3216,1429],{"class":1243},[1237,3218,1465],{"class":1250},[1237,3220,1254],{"class":1243},[1237,3222,1470],{"class":1257},[1237,3224,1429],{"class":1243},[1237,3226,1475],{"class":1250},[1237,3228,1254],{"class":1243},[1237,3230,1480],{"class":1320},[1237,3232,1429],{"class":1243},[1237,3234,1485],{"class":1250},[1237,3236,1254],{"class":1243},[1237,3238,1490],{"class":1257},[1237,3240,1350],{"class":1243},[1237,3242,3244,3246,3248,3250,3253,3255,3257,3259,3261,3263,3265,3267,3269,3271,3273,3275,3278],{"class":1239,"line":3243},95,[1237,3245,1453],{"class":1243},[1237,3247,1421],{"class":1250},[1237,3249,1254],{"class":1243},[1237,3251,3252],{"class":1257},"\"item_type\"",[1237,3254,1429],{"class":1243},[1237,3256,1465],{"class":1250},[1237,3258,1254],{"class":1243},[1237,3260,1513],{"class":1257},[1237,3262,1429],{"class":1243},[1237,3264,1518],{"class":1250},[1237,3266,1254],{"class":1243},[1237,3268,1480],{"class":1320},[1237,3270,1429],{"class":1243},[1237,3272,1432],{"class":1250},[1237,3274,1254],{"class":1243},[1237,3276,3277],{"class":1257},"\"part | product\"",[1237,3279,1350],{"class":1243},[1237,3281,3283,3285,3287,3289,3292,3294,3296,3298,3300,3302,3304,3306,3308,3310,3312,3314,3316,3318,3320,3322,3325],{"class":1239,"line":3282},96,[1237,3284,1453],{"class":1243},[1237,3286,1421],{"class":1250},[1237,3288,1254],{"class":1243},[1237,3290,3291],{"class":1257},"\"item_id\"",[1237,3293,1429],{"class":1243},[1237,3295,1465],{"class":1250},[1237,3297,1254],{"class":1243},[1237,3299,1711],{"class":1257},[1237,3301,1429],{"class":1243},[1237,3303,1518],{"class":1250},[1237,3305,1254],{"class":1243},[1237,3307,1480],{"class":1320},[1237,3309,1429],{"class":1243},[1237,3311,1897],{"class":1250},[1237,3313,1254],{"class":1243},[1237,3315,1480],{"class":1320},[1237,3317,1429],{"class":1243},[1237,3319,1432],{"class":1250},[1237,3321,1254],{"class":1243},[1237,3323,3324],{"class":1257},"\"parts.id 或 products.id\"",[1237,3326,1350],{"class":1243},[1237,3328,3330,3332,3334,3336,3339,3341,3343,3345,3347,3349,3351,3353,3355,3357,3359,3361,3364],{"class":1239,"line":3329},97,[1237,3331,1453],{"class":1243},[1237,3333,1421],{"class":1250},[1237,3335,1254],{"class":1243},[1237,3337,3338],{"class":1257},"\"item_name\"",[1237,3340,1429],{"class":1243},[1237,3342,1465],{"class":1250},[1237,3344,1254],{"class":1243},[1237,3346,1513],{"class":1257},[1237,3348,1429],{"class":1243},[1237,3350,1518],{"class":1250},[1237,3352,1254],{"class":1243},[1237,3354,1480],{"class":1320},[1237,3356,1429],{"class":1243},[1237,3358,1432],{"class":1250},[1237,3360,1254],{"class":1243},[1237,3362,3363],{"class":1257},"\"登记时的品目名称快照\"",[1237,3365,1350],{"class":1243},[1237,3367,3369,3371,3373,3375,3378,3380,3382,3384,3386,3388,3390,3392,3394,3396,3398,3400,3403],{"class":1239,"line":3368},98,[1237,3370,1453],{"class":1243},[1237,3372,1421],{"class":1250},[1237,3374,1254],{"class":1243},[1237,3376,3377],{"class":1257},"\"tx_type\"",[1237,3379,1429],{"class":1243},[1237,3381,1465],{"class":1250},[1237,3383,1254],{"class":1243},[1237,3385,1513],{"class":1257},[1237,3387,1429],{"class":1243},[1237,3389,1518],{"class":1250},[1237,3391,1254],{"class":1243},[1237,3393,1480],{"class":1320},[1237,3395,1429],{"class":1243},[1237,3397,1432],{"class":1250},[1237,3399,1254],{"class":1243},[1237,3401,3402],{"class":1257},"\"입고（入库）| 출고（出库）| 조립사용（组装使用）| 조립생산（组装生产）\"",[1237,3404,1350],{"class":1243},[1237,3406,3408,3410,3412,3414,3417,3419,3421,3423,3425,3427,3429,3431,3434],{"class":1239,"line":3407},99,[1237,3409,1453],{"class":1243},[1237,3411,1421],{"class":1250},[1237,3413,1254],{"class":1243},[1237,3415,3416],{"class":1257},"\"reason\"",[1237,3418,1429],{"class":1243},[1237,3420,1465],{"class":1250},[1237,3422,1254],{"class":1243},[1237,3424,1513],{"class":1257},[1237,3426,1429],{"class":1243},[1237,3428,1432],{"class":1250},[1237,3430,1254],{"class":1243},[1237,3432,3433],{"class":1257},"\"入出库原因。组装使用/组装生产的 tx_type 本身即为原因，因此留空\"",[1237,3435,1350],{"class":1243},[1237,3437,3439,3441,3443,3445,3448,3450,3452,3454,3456,3458,3460,3462,3464,3466,3468,3470,3473],{"class":1239,"line":3438},100,[1237,3440,1453],{"class":1243},[1237,3442,1421],{"class":1250},[1237,3444,1254],{"class":1243},[1237,3446,3447],{"class":1257},"\"qty\"",[1237,3449,1429],{"class":1243},[1237,3451,1465],{"class":1250},[1237,3453,1254],{"class":1243},[1237,3455,1711],{"class":1257},[1237,3457,1429],{"class":1243},[1237,3459,1518],{"class":1250},[1237,3461,1254],{"class":1243},[1237,3463,1480],{"class":1320},[1237,3465,1429],{"class":1243},[1237,3467,1432],{"class":1250},[1237,3469,1254],{"class":1243},[1237,3471,3472],{"class":1257},"\"始终为正数。方向由 tx_type 判断\"",[1237,3474,1350],{"class":1243},[1237,3476,3478,3480,3482,3484,3487,3489,3491,3493,3495,3497,3499,3501,3503,3505,3507,3509,3512],{"class":1239,"line":3477},101,[1237,3479,1453],{"class":1243},[1237,3481,1421],{"class":1250},[1237,3483,1254],{"class":1243},[1237,3485,3486],{"class":1257},"\"batch_id\"",[1237,3488,1429],{"class":1243},[1237,3490,1465],{"class":1250},[1237,3492,1254],{"class":1243},[1237,3494,1513],{"class":1257},[1237,3496,1429],{"class":1243},[1237,3498,1897],{"class":1250},[1237,3500,1254],{"class":1243},[1237,3502,1480],{"class":1320},[1237,3504,1429],{"class":1243},[1237,3506,1432],{"class":1250},[1237,3508,1254],{"class":1243},[1237,3510,3511],{"class":1257},"\"组装生产事件的分组 id。单纯入出库时为空\"",[1237,3513,1350],{"class":1243},[1237,3515,3517,3519,3521,3523,3526,3528,3530,3532,3534,3536,3538,3540,3543],{"class":1239,"line":3516},102,[1237,3518,1453],{"class":1243},[1237,3520,1421],{"class":1250},[1237,3522,1254],{"class":1243},[1237,3524,3525],{"class":1257},"\"note\"",[1237,3527,1429],{"class":1243},[1237,3529,1465],{"class":1250},[1237,3531,1254],{"class":1243},[1237,3533,1513],{"class":1257},[1237,3535,1429],{"class":1243},[1237,3537,1432],{"class":1250},[1237,3539,1254],{"class":1243},[1237,3541,3542],{"class":1257},"\"备注\"",[1237,3544,1350],{"class":1243},[1237,3546,3548,3550,3552,3554,3556,3558,3560,3562,3564,3566,3568,3570,3572,3574,3576,3578,3580],{"class":1239,"line":3547},103,[1237,3549,1453],{"class":1243},[1237,3551,1421],{"class":1250},[1237,3553,1254],{"class":1243},[1237,3555,1876],{"class":1257},[1237,3557,1429],{"class":1243},[1237,3559,1465],{"class":1250},[1237,3561,1254],{"class":1243},[1237,3563,1711],{"class":1257},[1237,3565,1429],{"class":1243},[1237,3567,1518],{"class":1250},[1237,3569,1254],{"class":1243},[1237,3571,1480],{"class":1320},[1237,3573,1429],{"class":1243},[1237,3575,1897],{"class":1250},[1237,3577,1254],{"class":1243},[1237,3579,1480],{"class":1320},[1237,3581,1350],{"class":1243},[1237,3583,3585,3587,3589,3591,3593,3595,3597,3599,3601,3603,3605,3607,3609],{"class":1239,"line":3584},104,[1237,3586,1453],{"class":1243},[1237,3588,1421],{"class":1250},[1237,3590,1254],{"class":1243},[1237,3592,1915],{"class":1257},[1237,3594,1429],{"class":1243},[1237,3596,1465],{"class":1250},[1237,3598,1254],{"class":1243},[1237,3600,1513],{"class":1257},[1237,3602,1429],{"class":1243},[1237,3604,1432],{"class":1250},[1237,3606,1254],{"class":1243},[1237,3608,2995],{"class":1257},[1237,3610,1350],{"class":1243},[1237,3612,3614,3616,3618,3620,3622,3624,3626,3628,3630,3632,3634,3636,3638],{"class":1239,"line":3613},105,[1237,3615,1453],{"class":1243},[1237,3617,1421],{"class":1250},[1237,3619,1254],{"class":1243},[1237,3621,1946],{"class":1257},[1237,3623,1429],{"class":1243},[1237,3625,1465],{"class":1250},[1237,3627,1254],{"class":1243},[1237,3629,1955],{"class":1257},[1237,3631,1429],{"class":1243},[1237,3633,1485],{"class":1250},[1237,3635,1254],{"class":1243},[1237,3637,1964],{"class":1257},[1237,3639,1383],{"class":1243},[1237,3641,3643],{"class":1239,"line":3642},106,[1237,3644,1972],{"class":1243},[1237,3646,3648,3650],{"class":1239,"line":3647},107,[1237,3649,1978],{"class":1250},[1237,3651,1283],{"class":1243},[1237,3653,3655,3657,3659,3661,3663,3665,3667,3669,3671,3673],{"class":1239,"line":3654},108,[1237,3656,1986],{"class":1250},[1237,3658,1340],{"class":1243},[1237,3660,1991],{"class":1250},[1237,3662,1254],{"class":1243},[1237,3664,1480],{"class":1320},[1237,3666,1429],{"class":1243},[1237,3668,2000],{"class":1250},[1237,3670,1254],{"class":1243},[1237,3672,1876],{"class":1257},[1237,3674,1350],{"class":1243},[1237,3676,3678,3680],{"class":1239,"line":3677},109,[1237,3679,2012],{"class":1250},[1237,3681,1283],{"class":1243},[1237,3683,3685,3687,3689,3691,3693,3695],{"class":1239,"line":3684},110,[1237,3686,2020],{"class":1250},[1237,3688,1340],{"class":1243},[1237,3690,1991],{"class":1250},[1237,3692,1254],{"class":1243},[1237,3694,1480],{"class":1320},[1237,3696,1350],{"class":1243},[1237,3698,3700,3702,3704,3706,3708,3710],{"class":1239,"line":3699},111,[1237,3701,2036],{"class":1250},[1237,3703,1340],{"class":1243},[1237,3705,1991],{"class":1250},[1237,3707,1254],{"class":1243},[1237,3709,1480],{"class":1320},[1237,3711,1350],{"class":1243},[1237,3713,3715,3717,3719,3721,3723,3725],{"class":1239,"line":3714},112,[1237,3716,2052],{"class":1250},[1237,3718,1340],{"class":1243},[1237,3720,1991],{"class":1250},[1237,3722,1254],{"class":1243},[1237,3724,1480],{"class":1320},[1237,3726,1350],{"class":1243},[1237,3728,3730,3732,3734,3736,3738,3740,3742,3744,3746,3748],{"class":1239,"line":3729},113,[1237,3731,2068],{"class":1250},[1237,3733,1340],{"class":1243},[1237,3735,1991],{"class":1250},[1237,3737,1254],{"class":1243},[1237,3739,1480],{"class":1320},[1237,3741,1429],{"class":1243},[1237,3743,2097],{"class":1250},[1237,3745,2100],{"class":1243},[1237,3747,2103],{"class":1257},[1237,3749,3750],{"class":1243},"] },\n",[1237,3752,3754,3756,3758,3760,3762,3764,3766,3768,3770,3772],{"class":1239,"line":3753},114,[1237,3755,2084],{"class":1250},[1237,3757,1340],{"class":1243},[1237,3759,1991],{"class":1250},[1237,3761,1254],{"class":1243},[1237,3763,1480],{"class":1320},[1237,3765,1429],{"class":1243},[1237,3767,2097],{"class":1250},[1237,3769,2100],{"class":1243},[1237,3771,2103],{"class":1257},[1237,3773,2106],{"class":1243},[1237,3775,3777],{"class":1239,"line":3776},115,[1237,3778,2112],{"class":1243},[1237,3780,3782],{"class":1239,"line":3781},116,[1237,3783,2118],{"class":1243},[1237,3785,3787],{"class":1239,"line":3786},117,[1237,3788,1389],{"class":1243},[1237,3790,3792],{"class":1239,"line":3791},118,[1237,3793,3794],{"class":1243},"  ]\n",[1237,3796,3798],{"class":1239,"line":3797},119,[1237,3799,3800],{"class":1243},"}\n",[1166,3802,3803,3804,3807,3808,3807,3810,3813],{},"复制这个结果，在工作空间中通过",[1179,3805,3806],{},"创建"," → ",[1179,3809,604],{},[1179,3811,3812],{},"新建架构（DB）","创建一个空的架构文件。",[1166,3815,3816],{},[3817,3818],"img",{"alt":3819,"src":3820},"选择创建 > 模板文件 > 新建架构（DB）的页面","./_screenshots/new-schema_en.png",[1166,3822,3823],{},"输入文件名并保存后，就会创建一个空的架构文件。",[1166,3825,3826],{},[3817,3827],{"alt":3828,"src":3829},"新创建的空架构文件","./_screenshots/schema-file-first_en.png",[1166,3831,3832,3833,3836],{},"点击右上角的",[1179,3834,3835],{},"编辑器","标签页，然后原样粘贴刚才 AI 的回复。",[1166,3838,3839],{},[3817,3840],{"alt":3841,"src":3842},"架构编辑器页面","./_screenshots/schema-editor_en.png",[1166,3844,3845,3846,3849],{},"保存后移动到顶部的",[1179,3847,3848],{},"API 构建","标签页，就能看到按表自动生成的 API 列表。",[1166,3851,3852],{},[3817,3853],{"alt":3854,"src":3855},"API 构建页面","./_screenshots/schema-api-build_zh.png",[1166,3857,3858,3859,3862,3863,3866,3867,3869,3870,3874],{},"点击",[1179,3860,3861],{},"部署","展开设置，确认",[1179,3864,3865],{},"数据库标识符","后再次点击",[1179,3868,3861],{},"。等待几秒钟后会出现“部署完成！”消息。最后，点击顶部的软盘按钮保存。",[3871,3872,3873],"strong",{},"到这里，DB 构成就完成了","——零件/产品/构成表/入出库历史 4 张表，以及操作这些表的 REST API 都已实际创建，处于可以立即使用的状态。接下来该制作与这个 DB 连接的页面了。",[1191,3876,3878],{"id":3877},"_2-创建用于构成页面的-html-文件","2. 创建用于构成页面的 .html 文件",[1166,3880,3881,3882,3884],{},"这次同样向 AI 提出请求。规划并整理想要制作的内容后传达给 AI。此时可以把刚才创建的 ",[1179,3883,1200],{}," 文件内容也一起作为参考资料提供。",[3886,3887,3888,3892,3895,3898],"ul",{},[3889,3890,3891],"li",{},"登记零件·产品的输入表单",[3889,3893,3894],{},"登记入库·出库的表单",[3889,3896,3897],{},"登记“生产了多少个这个产品”后，自动计算所需零件数量并反映到库存",[3889,3899,3900],{},"用表格显示当前库存状态，并可直接在表格中修改值并保存",[1166,3902,3903],{},"接着把下面的内容粘贴到 AI 聊天中。（最上方一并粘贴第 1 步生成的结果。）",[1209,3905,3908],{"className":3906,"code":3907,"language":1214},[1212],"[在此粘贴第 1 步的结果]\n\n上面的架构已经部署好了。请制作一个使用这个架构的网页页面（index.html）。\n\n页面加载和保存数据时，按照以下规则向服务器发送请求。\n\n1. 获取已登录用户的 API 令牌：\n   POST /api/auth/bootstrap  (credentials: \"include\")\n   响应: { data: { access_token, user: { id, nick } } }\n\n2. 之后的所有请求都附加此标头: Authorization: Bearer \u003Caccess_token>\n\n3. 表 CRUD:\n   查询   GET  /api/web/{dbName}/{table}/list?列=值   → 响应 { rows: [...] }（没有结果时 rows 可能为 null，因此始终按 rows || [] 处理）\n   创建   POST /api/web/{dbName}/{table}/create          → body: JSON，响应 { lastInsertId }\n   修改   PUT  /api/web/{dbName}/{table}/update/{id}     → body: JSON（只发送更改的列也可以）\n   删除   DELETE /api/web/{dbName}/{table}/delete/{id}\n\n页面需要的功能如下。\n\n- 可以新登记零件和产品的输入表单\n- 可以登记零件/产品入库·出库的表单（登记后同时更新当前库存数量）\n- 登记“生产了多少个这个产品”后，根据已登记的构成表自动计算所需零件数量，扣减零件库存并增加产品库存的功能。如果零件库存不足，则阻止登记并提示。\n- 用表格显示当前零件/产品库存状态的页面。点击表格单元格即可就地修改值并保存。\n- 按时间顺序显示入库/出库/组装历史的列表。\n\n请把 HTML/CSS/JS 全部放在一个文件里。做成干净的白色背景、卡片式布局。\n不要附加其他说明，只输出完成的 index.html 代码。\n",[1179,3909,3907],{"__ignoreMap":1217},[1166,3911,3912],{},"下面是这样生成的 html 文件示例。实际结果可能因 AI 而略有不同。",[3914,3915],"html-sandbox",{"height":3916,"src":3917},"640px","/examples/webspace/inventory-management/index.html",[1166,3919,3920],{},"把这个文件上传到工作空间后，团队成员实际可用的页面就完成了。",[1191,3922,3924],{"id":3923},"_3-填充测试数据","3. 填充测试数据",[1166,3926,3927],{},"要亲眼看到实际运行效果，就需要有数据。也可以直接让 AI 制作一个按一下按钮就能填入示例数据的页面。",[1209,3929,3932],{"className":3930,"code":3931,"language":1214},[1212],"[在此粘贴第 1 步的结果]\n\n上面的架构已经部署好了，使用这个架构的 index.html 也已经做好了。\n请制作一个按一下按钮就能自动填入测试数据的页面（mock-db-upload.html）。\n\n数据请用与第 2 步页面相同的方式（通过 POST /api/auth/bootstrap 获取令牌，通过 POST /api/web/{dbName}/{table}/create 创建）写入实际服务器。\n\n- 请实际创建并写入 10~15 个零件、3~5 个产品、每个产品的零件构成，以及几条入出库历史。\n- 零件/产品的名称和数量请填入制造现场实际可能使用的值。\n- 如果已经存在相同代码的数据，则只跳过该项并继续执行。\n- 在页面上逐行以日志形式显示进度，结束后显示“完成”。\n不要附加其他说明，只输出完成的 mock-db-upload.html 代码。\n",[1179,3933,3931],{"__ignoreMap":1217},[1166,3935,3936],{},"下面是这样生成的 html 文件示例。实际结果可能因 AI 而略有不同。这个页面不部署，只在需要准备演示时打开使用。",[3914,3938],{"height":3916,"src":3939},"/examples/webspace/inventory-management/mock-db-upload.html",[1166,3941,3942],{},"实际填入数据并使用后，运行效果如下。",[1166,3944,3945],{},[3817,3946],{"alt":3947,"src":3948},"零件状态——双击单元格即可直接修改·保存","./_screenshots/inventory-parts-status_en.jpg",[1166,3950,3951],{},[3817,3952],{"alt":3953,"src":3954},"BOM 登记——把右侧的零件卡片拖到左侧即可添加到构成中","./_screenshots/inventory-bom-dnd_en.jpg",[1166,3956,3957],{},[3817,3958],{"alt":3959,"src":3960},"组装生产登记——确定产品和生产数量后，会自动显示所需零件数量和当前库存","./_screenshots/inventory-assembly-production_en.jpg",[1166,3962,3963],{},[3817,3964],{"alt":3965,"src":3966},"交易历史——按批次号一并保留组装生产·组装使用明细","./_screenshots/inventory-transaction-history_en.jpg",[1191,3968,3970],{"id":3969},"_4-反复修改","4. 反复修改",[1166,3972,3973],{},"不必一次做到完美。在使用页面的过程中，如果发现功能不足或想要修改的地方，继续向 AI 提出请求即可。不过，根据修改的内容不同，接下来要做的事情也不同。",[3886,3975,3976,3991,4000],{},[3889,3977,3978,3981,3982,3984,3985,3987,3988,3990],{},[3871,3979,3980],{},"会改变 DB 结构（表·列）的修改","——例如：添加新列、添加新表——需要重新获取修改后的 ",[1179,3983,1200],{},"，粘贴到",[1179,3986,3835],{},"中，并在",[1179,3989,3848],{},"中重新部署。",[3889,3992,3993,3996,3997,3999],{},[3871,3994,3995],{},"保持 DB 结构不变、只修改页面的修改","——例如：设计、文案、按钮位置——只需重新获取 ",[1179,3998,1181],{}," 并覆盖现有文件即可。不需要重新部署 API。",[3889,4001,4002,4003,4006],{},"更改已有数据的表的结构时，请确认部署设置中的",[1179,4004,4005],{},"覆盖现有数据","。启用覆盖后，现有数据将被永久删除。",[1188,4008],{},[1166,4010,4011],{},"仅凭这四个步骤，数据库设计、实际页面、测试数据，以及之后的修改，全部都由 AI 来完成。之后只需按照自己的想法继续打磨页面的设计或细节项目即可。",[4013,4014,4015],"style",{},"html pre.shiki code .sMOD_, html code.shiki .sMOD_{--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .s-m8C, html code.shiki .s-m8C{--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .sCZoN, html code.shiki .sCZoN{--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#CFCFC2}html pre.shiki code .s7F3e, html code.shiki .s7F3e{--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":1217,"searchDepth":1247,"depth":1264,"links":4017},[4018,4019,4020,4021],{"id":1193,"depth":1247,"text":1194},{"id":3877,"depth":1247,"text":3878},{"id":3923,"depth":1247,"text":3924},{"id":3969,"depth":1247,"text":3970},"以库存管理系统为例，展示只要向 AI 说明需求，就能从数据库设计到实际页面全部生成的过程。","md",{},true,{"title":4027,"description":4022,"ogType":4028,"twitterCard":4029,"keywords":4030},"打造自己的业务系统 | WebSpace 应用篇","article","summary_large_image",[4031,4032,4033,4034,4035],"自己的业务系统","库存管理系统","DB 构成","AI 提示词","SetFN 工作空间","0oh5kP_h1-o4vyAOxXOhSb69LG3NDwcxz04vnnijdn0",[4038,4039],{"title":873,"path":876,"stem":874,"slug":875,"children":-1},{"title":883,"path":884,"stem":885,"slug":887,"children":-1},{"title":878,"filename":4041,"content":4042},"my-own-system","# 打造自己的业务系统\n\n在 SetFN 工作空间中，可以亲手打造公司专属的群件、ERP 之类的系统。\n把数据库结构设计和页面制作交给 AI，我们只需把生成的结果上传到工作空间即可。\n需要制作的文件只有 2 个。要做的事只是上传和点击“部署”按钮。\n下面以“制造现场的库存管理程序”为例来制作。\n\n如果想跳过 AI 提示词，直接使用已完成的文件，可以在[下载完整示例 ZIP](/examples/webspace/inventory-management/setfn-inventory-management-sample.zip)一次性获取架构、`index.html`、`mock-db-upload.html` 和 README。\n\n---\n\n## 1. 创建用于生成数据库的 .sfn 文件\n\n在 SetFN 工作空间中，可以用名为 `.sfn` 的文件创建 DB。把 `.sfn` 文件的示例复制给 Claude、GPT、Gemini 之类的 AI，并像“我想管理零件和产品的库存”这样说明需求，AI 就会生成文件。\n\n复制下面的内容，修改下方的需求设计部分，然后发给 AI 试试。\n\n```\n你是为名为 SetFN 的无代码后端平台设计架构文件（.sfn）的工程师。\n.sfn 是具有以下结构的 JSON 文件。 \n\n{\n  \"content-type\": \"application/setfn-schema\",\n  \"dbType\": \"sqlite3\",\n  \"apiBuild\": {\n    \"dbName\": \"英文_小写_下划线_db名称\",\n    \"dbEngine\": \"sqlite\",\n    \"includeClient\": false,\n    \"features\": {\n      \"realtime\": { \"enabled\": false },\n      \"upload\": { \"enabled\": false },\n      \"ai-chat\": { \"enabled\": false }\n    }\n  },\n  \"data\": [\n    {\n      \"table\": { \"name\": \"表名\", \"cmt\": \"此表的说明\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"列名\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"列说明\" },\n        { \"name\": \"数字列\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\" },\n        { \"name\": \"_created_at\", \"type\": \"timestamp\", \"default\": \"now()\" }\n      ],\n      \"permissions\": {\n        \"security\": { \"login\": true },\n        \"ops\": {\n          \"list\": { \"login\": true },\n          \"view\": { \"login\": true },\n          \"create\": { \"login\": true },\n          \"update\": { \"login\": true },\n          \"delete\": { \"login\": true, \"roles\": [\"admin\"] }\n        }\n      }\n    }\n  ]\n}\n\n列的 type 只能使用 serial4（自增 PK）/ text / int4（整数）/ timestamp。\n根据需要为列加上 notnull、default、unique、index、cmt。\n\n现在请用这种格式，为制造企业设计一个“库存管理系统”DB。需求如下。\n\n- 登记零件，并按零件管理当前库存数量。\n- 登记产品，并按产品管理当前库存数量。\n- 一个产品由多个零件组装而成。需要管理每个产品需要哪些零件、各需要多少个（BOM，物料清单）。\n- 记录零件/产品的入库·出库历史。特别是当发生“组装零件生产产品”的事件时，当时使用的零件和生产的产品数量必须作为同一个事件一起追踪（以便日后能够查询“制造这个产品用了多少零件”）。\n\nDB 名称（dbName）请设为 \"inventory_management\"。\n请控制在 4 张表以内，设计得足够实用，可以直接在实际工作中使用。\n不要附加其他说明，只输出完成的 .sfn JSON 代码。\n```\n\n下面是这样生成的 AI 回复示例。实际结果可能因 AI 和每次运行而略有不同——不必与此内容完全一致，只要是类似的结构即可。不过，必须是没有其他说明、以 `{` 开头并以 `}` 结尾的格式，才能把输出结果原样粘贴到编辑器中。\n\n```json\n{\n  \"content-type\": \"application/setfn-schema\",\n  \"dbType\": \"sqlite3\",\n  \"apiBuild\": {\n    \"dbName\": \"inventory_management\",\n    \"dbEngine\": \"sqlite\",\n    \"includeClient\": false,\n    \"features\": {\n      \"realtime\": { \"enabled\": false },\n      \"upload\": { \"enabled\": false },\n      \"ai-chat\": { \"enabled\": false }\n    }\n  },\n  \"data\": [\n    {\n      \"table\": { \"name\": \"parts\", \"cmt\": \"零件主数据。任何成员都可以查看/登记/修改，只有管理员可以删除\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"part_code\", \"type\": \"text\", \"notnull\": true, \"unique\": true, \"cmt\": \"零件代码\" },\n        { \"name\": \"name\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"零件名称\" },\n        { \"name\": \"spec\", \"type\": \"text\", \"cmt\": \"规格（例：M2、220V/50Hz）。即使名称相同，规格不同也要登记为单独的 part_code\" },\n        { \"name\": \"category\", \"type\": \"text\", \"cmt\": \"零件分类（电子零件/机构零件/包装材料等）\" },\n        { \"name\": \"unit\", \"type\": \"text\", \"notnull\": true, \"default\": \"EA\", \"cmt\": \"单位\" },\n        { \"name\": \"unit_cost\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"单价\" },\n        { \"name\": \"current_stock\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"当前库存\" },\n        { \"name\": \"safety_stock\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"安全库存（再订货点）\" },\n        { \"name\": \"supplier\", \"type\": \"text\", \"cmt\": \"供应商\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"最后登记/修改的成员的显示名称\" },\n        { \"name\": \"_created_at\", \"type\": \"timestamp\", \"default\": \"now()\" }\n      ],\n      \"permissions\": {\n        \"security\": { \"login\": true, \"ownerColumn\": \"_user_id\" },\n        \"ops\": {\n          \"list\": { \"login\": true },\n          \"view\": { \"login\": true },\n          \"create\": { \"login\": true },\n          \"update\": { \"login\": true },\n          \"delete\": { \"login\": true, \"roles\": [\"admin\"] }\n        }\n      }\n    },\n    {\n      \"table\": { \"name\": \"products\", \"cmt\": \"产品主数据。任何成员都可以查看/登记/修改，只有管理员可以删除\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"product_code\", \"type\": \"text\", \"notnull\": true, \"unique\": true, \"cmt\": \"产品代码\" },\n        { \"name\": \"name\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"产品名称\" },\n        { \"name\": \"category\", \"type\": \"text\", \"cmt\": \"产品分类\" },\n        { \"name\": \"unit\", \"type\": \"text\", \"notnull\": true, \"default\": \"EA\", \"cmt\": \"单位\" },\n        { \"name\": \"price\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"销售价\" },\n        { \"name\": \"current_stock\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"当前库存\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"最后登记/修改的成员的显示名称\" },\n        { \"name\": \"_created_at\", \"type\": \"timestamp\", \"default\": \"now()\" }\n      ],\n      \"permissions\": {\n        \"security\": { \"login\": true, \"ownerColumn\": \"_user_id\" },\n        \"ops\": {\n          \"list\": { \"login\": true },\n          \"view\": { \"login\": true },\n          \"create\": { \"login\": true },\n          \"update\": { \"login\": true },\n          \"delete\": { \"login\": true, \"roles\": [\"admin\"] }\n        }\n      }\n    },\n    {\n      \"table\": { \"name\": \"bom\", \"cmt\": \"各产品的零件构成表（单层）。对 bom_key（product_id:part_id）加 unique 约束，防止同一产品重复登记同一零件\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"product_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"part_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"qty_per_unit\", \"type\": \"int4\", \"notnull\": true, \"default\": \"1\", \"cmt\": \"制造 1 个产品所需的零件数量\" },\n        { \"name\": \"bom_key\", \"type\": \"text\", \"notnull\": true, \"unique\": true, \"cmt\": \"product_id:part_id 的组合。用于防止重复登记\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"登记成员的显示名称\" },\n        { \"name\": \"_created_at\", \"type\": \"timestamp\", \"default\": \"now()\" }\n      ],\n      \"permissions\": {\n        \"security\": { \"login\": true, \"ownerColumn\": \"_user_id\" },\n        \"ops\": {\n          \"list\": { \"login\": true },\n          \"view\": { \"login\": true },\n          \"create\": { \"login\": true },\n          \"update\": { \"login\": true },\n          \"delete\": { \"login\": true, \"roles\": [\"admin\"] }\n        }\n      }\n    },\n    {\n      \"table\": { \"name\": \"stock_transactions\", \"cmt\": \"入出库/组装的统一历史。item_type=part|product，tx_type=입고|출고|조립사용|조립생산（入库|出库|组装使用|组装生产）。一次组装生产事件由共享同一 batch_id 的多条组装使用（零件消耗）记录 + 1 条组装生产（产品增加）记录构成，因此可以追踪某个产品使用了哪些零件、用了多少\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"item_type\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"part | product\" },\n        { \"name\": \"item_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true, \"cmt\": \"parts.id 或 products.id\" },\n        { \"name\": \"item_name\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"登记时的品目名称快照\" },\n        { \"name\": \"tx_type\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"입고（入库）| 출고（出库）| 조립사용（组装使用）| 조립생산（组装生产）\" },\n        { \"name\": \"reason\", \"type\": \"text\", \"cmt\": \"入出库原因。组装使用/组装生产的 tx_type 本身即为原因，因此留空\" },\n        { \"name\": \"qty\", \"type\": \"int4\", \"notnull\": true, \"cmt\": \"始终为正数。方向由 tx_type 判断\" },\n        { \"name\": \"batch_id\", \"type\": \"text\", \"index\": true, \"cmt\": \"组装生产事件的分组 id。单纯入出库时为空\" },\n        { \"name\": \"note\", \"type\": \"text\", \"cmt\": \"备注\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"登记成员的显示名称\" },\n        { \"name\": \"_created_at\", \"type\": \"timestamp\", \"default\": \"now()\" }\n      ],\n      \"permissions\": {\n        \"security\": { \"login\": true, \"ownerColumn\": \"_user_id\" },\n        \"ops\": {\n          \"list\": { \"login\": true },\n          \"view\": { \"login\": true },\n          \"create\": { \"login\": true },\n          \"update\": { \"login\": true, \"roles\": [\"admin\"] },\n          \"delete\": { \"login\": true, \"roles\": [\"admin\"] }\n        }\n      }\n    }\n  ]\n}\n```\n\n复制这个结果，在工作空间中通过`创建` → `模板文件` → `新建架构（DB）`创建一个空的架构文件。\n\n![选择创建 > 模板文件 > 新建架构（DB）的页面](./_screenshots/new-schema_en.png)\n\n输入文件名并保存后，就会创建一个空的架构文件。\n\n![新创建的空架构文件](./_screenshots/schema-file-first_en.png)\n\n点击右上角的`编辑器`标签页，然后原样粘贴刚才 AI 的回复。\n\n![架构编辑器页面](./_screenshots/schema-editor_en.png)\n\n保存后移动到顶部的`API 构建`标签页，就能看到按表自动生成的 API 列表。\n\n![API 构建页面](./_screenshots/schema-api-build_zh.png)\n\n点击`部署`展开设置，确认`数据库标识符`后再次点击`部署`。等待几秒钟后会出现“部署完成！”消息。最后，点击顶部的软盘按钮保存。**到这里，DB 构成就完成了**——零件/产品/构成表/入出库历史 4 张表，以及操作这些表的 REST API 都已实际创建，处于可以立即使用的状态。接下来该制作与这个 DB 连接的页面了。\n\n## 2. 创建用于构成页面的 .html 文件\n\n这次同样向 AI 提出请求。规划并整理想要制作的内容后传达给 AI。此时可以把刚才创建的 `.sfn` 文件内容也一起作为参考资料提供。\n\n- 登记零件·产品的输入表单\n- 登记入库·出库的表单\n- 登记“生产了多少个这个产品”后，自动计算所需零件数量并反映到库存\n- 用表格显示当前库存状态，并可直接在表格中修改值并保存\n\n接着把下面的内容粘贴到 AI 聊天中。（最上方一并粘贴第 1 步生成的结果。）\n\n```\n[在此粘贴第 1 步的结果]\n\n上面的架构已经部署好了。请制作一个使用这个架构的网页页面（index.html）。\n\n页面加载和保存数据时，按照以下规则向服务器发送请求。\n\n1. 获取已登录用户的 API 令牌：\n   POST /api/auth/bootstrap  (credentials: \"include\")\n   响应: { data: { access_token, user: { id, nick } } }\n\n2. 之后的所有请求都附加此标头: Authorization: Bearer \u003Caccess_token>\n\n3. 表 CRUD:\n   查询   GET  /api/web/{dbName}/{table}/list?列=值   → 响应 { rows: [...] }（没有结果时 rows 可能为 null，因此始终按 rows || [] 处理）\n   创建   POST /api/web/{dbName}/{table}/create          → body: JSON，响应 { lastInsertId }\n   修改   PUT  /api/web/{dbName}/{table}/update/{id}     → body: JSON（只发送更改的列也可以）\n   删除   DELETE /api/web/{dbName}/{table}/delete/{id}\n\n页面需要的功能如下。\n\n- 可以新登记零件和产品的输入表单\n- 可以登记零件/产品入库·出库的表单（登记后同时更新当前库存数量）\n- 登记“生产了多少个这个产品”后，根据已登记的构成表自动计算所需零件数量，扣减零件库存并增加产品库存的功能。如果零件库存不足，则阻止登记并提示。\n- 用表格显示当前零件/产品库存状态的页面。点击表格单元格即可就地修改值并保存。\n- 按时间顺序显示入库/出库/组装历史的列表。\n\n请把 HTML/CSS/JS 全部放在一个文件里。做成干净的白色背景、卡片式布局。\n不要附加其他说明，只输出完成的 index.html 代码。\n```\n\n下面是这样生成的 html 文件示例。实际结果可能因 AI 而略有不同。\n\n::html-sandbox{src=\"/examples/webspace/inventory-management/index.html\" height=\"640px\"}\n::\n\n把这个文件上传到工作空间后，团队成员实际可用的页面就完成了。\n\n## 3. 填充测试数据\n\n要亲眼看到实际运行效果，就需要有数据。也可以直接让 AI 制作一个按一下按钮就能填入示例数据的页面。\n\n```\n[在此粘贴第 1 步的结果]\n\n上面的架构已经部署好了，使用这个架构的 index.html 也已经做好了。\n请制作一个按一下按钮就能自动填入测试数据的页面（mock-db-upload.html）。\n\n数据请用与第 2 步页面相同的方式（通过 POST /api/auth/bootstrap 获取令牌，通过 POST /api/web/{dbName}/{table}/create 创建）写入实际服务器。\n\n- 请实际创建并写入 10~15 个零件、3~5 个产品、每个产品的零件构成，以及几条入出库历史。\n- 零件/产品的名称和数量请填入制造现场实际可能使用的值。\n- 如果已经存在相同代码的数据，则只跳过该项并继续执行。\n- 在页面上逐行以日志形式显示进度，结束后显示“完成”。\n不要附加其他说明，只输出完成的 mock-db-upload.html 代码。\n```\n\n下面是这样生成的 html 文件示例。实际结果可能因 AI 而略有不同。这个页面不部署，只在需要准备演示时打开使用。\n\n::html-sandbox{src=\"/examples/webspace/inventory-management/mock-db-upload.html\" height=\"640px\"}\n::\n\n实际填入数据并使用后，运行效果如下。\n\n![零件状态——双击单元格即可直接修改·保存](./_screenshots/inventory-parts-status_en.jpg)\n\n![BOM 登记——把右侧的零件卡片拖到左侧即可添加到构成中](./_screenshots/inventory-bom-dnd_en.jpg)\n\n![组装生产登记——确定产品和生产数量后，会自动显示所需零件数量和当前库存](./_screenshots/inventory-assembly-production_en.jpg)\n\n![交易历史——按批次号一并保留组装生产·组装使用明细](./_screenshots/inventory-transaction-history_en.jpg)\n\n## 4. 反复修改\n\n不必一次做到完美。在使用页面的过程中，如果发现功能不足或想要修改的地方，继续向 AI 提出请求即可。不过，根据修改的内容不同，接下来要做的事情也不同。\n\n- **会改变 DB 结构（表·列）的修改**——例如：添加新列、添加新表——需要重新获取修改后的 `.sfn`，粘贴到`编辑器`中，并在`API 构建`中重新部署。\n- **保持 DB 结构不变、只修改页面的修改**——例如：设计、文案、按钮位置——只需重新获取 `index.html` 并覆盖现有文件即可。不需要重新部署 API。\n- 更改已有数据的表的结构时，请确认部署设置中的`覆盖现有数据`。启用覆盖后，现有数据将被永久删除。\n\n---\n\n仅凭这四个步骤，数据库设计、实际页面、测试数据，以及之后的修改，全部都由 AI 来完成。之后只需按照自己的想法继续打磨页面的设计或细节项目即可。\n",1793056635687]