{"_rev":"19-2108a342c2d60601a91310a61a34a4a6","time":{"created":"2026-05-22T02:12:18.878Z","modified":"2026-05-22T02:12:19.852Z","1.0.0":"2026-05-21T07:47:32.633Z","1.0.1":"2026-05-21T08:47:58.141Z","1.0.2":"2026-05-21T09:01:22.448Z","1.0.3":"2026-05-21T09:14:36.962Z","1.0.4":"2026-05-21T09:23:58.908Z","1.0.5":"2026-05-21T09:42:09.365Z","1.0.6":"2026-05-21T09:52:30.806Z","1.0.7":"2026-05-21T10:15:45.395Z","1.0.8":"2026-05-22T02:12:19.597Z"},"_id":"@dongkz/bp-app-platform","name":"@dongkz/bp-app-platform","dist-tags":{"latest":"1.0.8"},"versions":{"1.0.8":{"name":"@dongkz/bp-app-platform","version":"1.0.8","description":"BP 应用前端管理系统骨架（基于 Vue 2 + Element UI）","main":"./entry.js","module":"./entry.js","bin":{"bp-app-platform-cli":"bin/bp-app-platform-cli.js"},"peerDependencies":{"element-ui":"^2.15.0","vue":"^2.7.0","vue-router":"^3.6.0","vuex":"^3.6.0"},"peerDependenciesMeta":{"vue-router":{"optional":true},"vuex":{"optional":true}},"scripts":{"prebuild":"patch-package && SET NODE_OPTIONS=--openssl-legacy-provider --max-old-space-size=8192 && node ./src/_base/bin/prebuild.js","clean":"rimraf dist","build":"npm run prebuild && vue-cli-service build","build:lib":"npm-run-all clean build:copy","serve":"npm run prebuild && vue-cli-service serve","dev":"npm run prebuild && vue-cli-service serve","lint":"vue-cli-service lint","lint-fix":"vue-cli-service lint --fix"},"exports":{".":"./entry.js","./package.json":"./package.json","./vue.config.js":"./vue.config.js","./components":"./_base/components/index.js","./router":"./_base/core/router.js","./store":"./_base/core/store.js","./i18n":"./_base/core/i18n.js","./api":"./api/bp/Api.js","./assets/*":"./assets/*","./prebuild/*":"./prebuild/*","./patches/*":"./patches/*","./public/*":"./public/*"},"sideEffects":["*.css","*.scss","*.less","*.vue","./_base/assets/**/*","./assets/**/*","./src/pages/**/*"],"dependencies":{"@icon-park/vue":"^1.4.2","@monaco-editor/loader":"^1.4.0","awe-dnd":"^0.3.4","axios":"^0.24.0","clipboard":"^2.0.11","codepage":"^1.15.0","crypto-js":"^4.1.1","echarts":"^4.9.0","element-resize-detector":"^1.2.4","element-ui":"^2.15.0","file-saver":"^1.3.8","font-awesome":"^4.7.0","glob":"^7.2.3","highlight.js":"^11.6.0","html2canvas":"^1.4.1","jquery":"^3.6.1","js-beautify":"^1.14.6","js-cookie":"^3.0.1","js-xlsx":"^0.8.22","jsencrypt":"^3.3.2","jspdf":"^2.5.1","jszip":"^3.10.1","lockr":"^0.8.4","marked":"^4.1.1","material-design-icons-iconfont":"^6.7.0","monaco-editor":"^0.31.1","pinyin-pro":"^3.11.0","pl-table":"^2.7.5","prettier":"^2.7.1","query-string":"^7.1.1","relation-graph":"^1.1.0","rimraf":"^6.1.3","svg.js":"^2.6.5","umy-ui":"^1.1.6","vue":"^2.7.0","vue-clipboard2":"^0.3.3","vue-codemirror":"^4.0.3","vue-i18n":"^7.8.1","vue-json-viewer":"^2.2.22","vue-print-nb":"^1.7.5","vue-router":"^3.6.0","vue-splitpane":"^1.0.2","vue2-org-tree":"^1.3.6","vue3-sfc-loader":"^0.8.4","vuedraggable":"^2.24.3","vuex":"^3.6.0","x-data-spreadsheet":"^1.1.9","xlsx":"^0.18.5","@vue/cli-plugin-babel":"^4.5.19","@vue/cli-plugin-eslint":"^4.5.19","@vue/cli-plugin-router":"^4.5.19","@vue/cli-plugin-vuex":"^4.5.19","@vue/cli-service":"^4.5.19","@vue/runtime-dom":"^3.2.39","babel-core":"^6.26.3","babel-eslint":"^10.1.0","babel-plugin-transform-remove-console":"^6.9.4","cache-loader":"^4.1.0","core-js":"^3.25.1","eslint":"^5.16.0","eslint-plugin-vue":"^5.0.0","html-loader":"^1.3.2","ignore-loader":"^0.1.2","json5-loader":"^4.0.1","less":"^3.13.1","less-loader":"^6.2.0","patch-package":"^6.5.1","postcss-scss":"^2.1.1","raw-loader":"^4.0.2","sass":"~1.32.0","sass-loader":"^8.0.2","vue-template-compiler":"^2.7.10","webpack":"^4.47.0","webpack-cli":"^3.3.12"},"devDependencies":{"npm-run-all":"^4.1.5","sass-migrator":"^2.3.1"},"author":{"name":"dongkz"},"license":"GPL-3.0","repository":{"type":"git","url":"https://gitee.com/isbool/bp-app-cli.git"},"bugs":{"url":"https://gitee.com/isbool/bp-app-cli/issues"},"homepage":"https://gitee.com/isbool/bp-app-cli#readme","_id":"@dongkz/bp-app-platform@1.0.8","gitHead":"484d8367732e0a70de3646983145e8bdde79b9c5","_nodeVersion":"22.12.0","_npmVersion":"11.0.0","dist":{"integrity":"sha512-yFEnsZfKVG7ms8jCwv/6LFblYoqJ6wzQuX3ztPPFndmies9DTFzsSdAYP2aOiCxmoFbjPCgJ071vSLbOed+B1A==","shasum":"5da90c99e9df25e39e9b3921d1af0df032710820","tarball":"https://registry.npmjs.org/@dongkz/bp-app-platform/-/bp-app-platform-1.0.8.tgz","fileCount":667,"unpackedSize":10318303,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIE+59v0TziEcRt7hBgQ26YqrzMXXOmgwQKlLl8vXqY4EAiA+AV3QNJIXBZyHzhhwHHO9Ydt5sJXtXWkzWI77crKm7w=="}]},"_npmUser":{"name":"dongkz","email":"610924161@qq.com"},"directories":{},"maintainers":[{"name":"dongkz","email":"610924161@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/bp-app-platform_1.0.8_1779415939384_0.9287471817601827"},"_hasShrinkwrap":false}},"maintainers":[{"name":"dongkz","email":"610924161@qq.com"}],"description":"BP 应用前端管理系统骨架（基于 Vue 2 + Element UI）","homepage":"https://gitee.com/isbool/bp-app-cli#readme","repository":{"type":"git","url":"https://gitee.com/isbool/bp-app-cli.git"},"author":{"name":"dongkz"},"bugs":{"url":"https://gitee.com/isbool/bp-app-cli/issues"},"license":"GPL-3.0","readme":"# bp-app-platform\n\nBP 应用前端管理系统骨架（基于 Vue 2 + Element UI）\n\n## 简介\n\nbp-app-platform 是一个完整的管理系统前端骨架，包含：\n\n- 预配置的 Vue Router + Vuex\n- Element UI 组件库集成\n- 40+ 通用业务组件\n- 权限管理、国际化支持\n- 文件上传/下载、Excel 导入导出\n- 富文本编辑器（TinyMCE 定制版）\n\n## 环境要求\n\n- Node.js >= 14.0.0\n- npm >= 6.0.0\n\n## 快速开始\n\n### 1. 安装 CLI 工具\n\n```bash\nnpm install -g @dongkz/create-bp-app\n```\n\n### 2. 创建项目\n\n```bash\ncd your_workspace  # 进入你的项目工作区\ncreate-bp-app      # 回车后按照向导提示创建项目\n```\n\n### 3. 运行项目\n\n```bash\ncd bp-app-xxx # 进入创建项目路径\nnpm run dev    # 启动项目\n```\n\n## 项目命名规范\n\n本项目遵循以下命名规范：\n\n| 项目类型 | 命名格式          | 示例               |\n| -------- | ----------------- | ------------------ |\n| 前端项目 | bp-app-xxx        | bp-app-user        |\n| 后端项目 | bp-app-xxx-server | bp-app-user-server |\n\n前后端项目一一对应，便于管理和维护。\n\n## 目录结构\n\n```\nbp-app-platform/\n├── src/\n│   ├── _base/             # 核心框架\n│   │   ├── assets/        # 静态资源\n│   │   ├── bin/           # 构建脚本\n│   │   ├── components/    # 通用组件\n│   │   ├── core/          # 核心配置\n│   │   └── directives/    # 自定义指令\n│   ├── pages/             # 业务页面\n│   │   ├── _example/      # 示例模块（参考用）\n│   │   ├── sys/           # 系统管理\n│   │   ├── pub/           # 公共模块\n│   │   └── ...\n│   ├── api/               # API 接口\n│   └── config/            # 环境配置\n├── public/                # 静态资源\n├── patches/               # 依赖补丁\n├── package.json\n└── README.md\n```\n\n## 模块结构\n\n### \\r 目录说明\n\n`r` 是 **Resource**（资源）的缩写，表示模块的资源目录。\n\n每个业务模块下可以包含 `r` 目录，用于存放该模块的：\n\n```\nsrc/pages/user/           # 用户管理模块\n├── r/                   # 模块资源目录\n│   ├── route/            # 路由配置\n│   │   └── index.js      # 路由定义\n│   ├── store/            # 状态管理（Vuex）\n│   │   ├── index.js      # Store 定义\n│   │   ├── action.js     # Actions\n│   │   ├── getters.js    # Getters\n│   │   ├── mutations.js  # Mutations\n│   │   ├── state.js      # State\n│   │   └── storedState.json  # 持久化状态配置（需存入localStorage的state属性名列表）\n│   ├── locale/           # 国际化资源\n│   │   ├── en/           # 英文\n│   │   │   └── index.json\n│   │   ├── zh_sim/       # 简体中文\n│   │   │   └── index.json\n│   │   └── zh_tra/       # 繁体中文\n│   │       └── index.json\n│   └── css/              # 样式文件（自动预编译引入）\n│       ├── *.css\n│       ├── *.scss\n│       └── *.less\n├── index.vue             # 模块主页面\n└── ...                   # 其他页面\n```\n\n> **注意**：样式文件放在 `r/css` 目录下会自动被预编译引入到系统中，无需手动在 Vue 组件中 import。\n>\n> 预编译生成的 `prebuild/import_glob.scss` 用于引入所有模块 `r/css` 目录下的**全局样式文件**。该文件使用 `@import \"~pages/...\"` 路径格式（`~` 前缀用于 webpack 解析 alias），请勿手动修改此文件。\n\n### 预编译机制\n\n项目启动前会运行预构建脚本（`prebuild.js`），自动扫描所有模块的 `r` 目录：\n\n1. **路由扫描**：扫描 `src/pages/**/r/route/*.js`，生成 `prebuild/routesls.json`\n2. **Store 扫描**：扫描 `src/pages/**/r/store/index.js`，生成 `prebuild/storesls.json`\n3. **国际化扫描**：扫描 `src/pages/**/r/locale/*/*.json`，生成 `prebuild/langsls.json`\n4. **样式扫描**：扫描 `src/pages/**/r/css/*.{css,scss,less}`，生成 `prebuild/import_glob.scss`（全局样式文件统一引入）\n\n启动时动态加载这些配置，实现模块的自动注册。\n\n### 优势\n\n- **模块化**：每个模块的路由、状态、国际化资源集中管理\n- **自动化**：无需手动配置路由和 Store，预编译自动扫描\n- **可扩展**：添加新模块只需创建对应的 `r` 目录结构\n\n## 核心功能\n\n### 1. 通用组件\n\n- BpAutoform: 自动表单\n- BpTablelist: 列表表格\n- BpRefbox: 引用选择框\n- BpSearchbox: 搜索框\n- BpExcelImport/Export: Excel 导入导出\n- ... (40+ 组件)\n\n### 2. 核心功能\n\n- 权限管理\n- 国际化支持\n- 主题定制\n- 文件上传/下载\n- 富文本编辑\n- 代码编辑器\n\n### 3. API 封装\n\nBpApi 提供了封装完善的 HTTP 通信方法：\n\n```javascript\nimport BpApi from \"bp-app-platform/api\";\n\nconst api = new BpApi({\n  requestMapping: \"/user\",\n});\n\napi.$get(\"/list\");\napi.$post(\"/save\", data);\n```\n\n## 开发指南\n\n### 添加新模块\n\n1. 在 `src/pages/` 下创建模块目录\n2. 创建 `r/route/` 路由配置\n3. 创建 `r/store/` 状态管理\n4. 创建 `r/locale/` 国际化资源\n5. 创建 `r/css/` 页面样式\n\n### 添加新页面\n\n在模块目录下创建 `.vue` 文件即可。\n\n### 添加新 API\n\n在 `src/api/` 下创建对应的 API 文件。\n\n## 配置说明\n\n### 环境配置\n\n- `src/config/dev.env.json5` - 开发环境配置\n- `src/config/prod.env.json5` - 生产环境配置\n\n### 开发环境配置项\n\n- `DEV_CLIENT_HOST`: 前端 Host（默认：localhost）\n- `DEV_CLIENT_PORT`: 前端端口（默认：8099）\n- `API_HOST_PROXY_TARGET`: 后端服务地址（默认：http://localhost:8091）\n- `WS_HOST`: WebSocket 地址（默认：ws://localhost:8091）\n\n## 常见问题\n\n### 1. 启动失败\n\n检查 Node.js 版本是否 >= 14.0.0。\n\n### 2. 跨域问题\n\n确保 `dev.env.json5` 中的 `API_HOST_PROXY_TARGET` 配置正确。\n\n### 3. 样式不生效\n\n清除浏览器缓存或重启项目。\n\n### 4. xlsx 相关报错\n\n运行 `npm run patch-xlsx` 应用补丁。\n\n### 5. 路由冲突\n\n预构建时会检测路由冲突并报错，修改路由路径即可。\n\n\n## 作者\n\ndongkz\n\n## 相关链接\n\n- [Vue 2 文档](https://v2.vuejs.org/)\n- [Element UI 文档](https://element.eleme.io/)\n","readmeFilename":"README.md"}