{"_id":"@0xyy/elpis","_rev":"3-98bc4fe922b87e718720062c803e99b6","name":"@0xyy/elpis","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@0xyy/elpis","version":"1.0.0","author":{"name":"yy"},"license":"ISC","_id":"@0xyy/elpis@1.0.0","maintainers":[{"name":"0xyy","email":"webylong@gmail.com"}],"dist":{"shasum":"16c60b78360d54468fcfe1953c7cd67f11ff39fb","tarball":"https://registry.npmjs.org/@0xyy/elpis/-/elpis-1.0.0.tgz","fileCount":87,"integrity":"sha512-G3CJZtS7ifARK2qJB83U4E+PVf6VfMxjt8sAYNz0jrymkSvkc35s1sQSPyfauWjmQWVIA41iJueWx/RcZuXpsA==","signatures":[{"sig":"MEYCIQCNik2oJWdyWjkCAiPlMuYPCkpRQ3h0s9J0LM2OhU8I9gIhAIW3rUljvqmyu6b8FFy4ZHHDjIQvABResiD/hlm3EHg6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":372383},"main":"index.js","config":{"ghooks":{"commit-msg":"validate-commit-msg","pre-commit":"npm run lint"}},"gitHead":"d2805f1ebf0acf5b69f4a57e74d640066f3bf468","scripts":{"dev":"_ENV=local nodemon ./index.js","beta":"_ENV=beta node ./index.js","lint":"eslint --quiet --ext js,vue","prod":"_ENV=production node ./index.js","test":"_ENV=local mocha test/**/*.js","build:dev":"node --max_old_space_size=4096 ./app/webpack/dev.js","build:prod":"node ./app/webpack/prod.js"},"_npmUser":{"name":"0xyy","email":"webylong@gmail.com"},"repository":{"url":"https://e.coding.net/g-jdrx9252/elpis/elpis.git","type":"git"},"_npmVersion":"10.8.2","description":"### model 配置 ````javascript {   model: 'dashboard', // 模板类型，不同模板类型对应不一样的模板数据结构   name: '', // 名称   desc: '', // 描述   icon: '', // 图标   homePage: '', // 首页(项目配置)   // 头部菜单   menu: [     {       key: '', // 菜单唯一描述       name: '', // 菜单名称       menuType: '',","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ajv":"^6.10.2","koa":"2.7.0","md5":"^2.2.1","vue":"^3.3.4","glob":"^7.1.4","knex":"^0.19.0","less":"^3.8.1","path":"^0.12.7","vuex":"^4.1.0","axios":"^0.19.2","mysql":"^2.18.1","pinia":"^2.1.6","lodash":"^4.17.21","log4js":"^6.9.1","moment":"^2.29.4","echarts":"^5.5.0","express":"^4.18.2","nodemon":"^1.19.2","webpack":"^5.88.1","consoler":"^0.2.0","happypack":"^5.0.1","koa2-cors":"^2.0.6","css-loader":"^0.23.1","koa-router":"^7.4.0","koa-static":"^5.0.0","superagent":"^8.1.2","url-loader":"^4.1.1","vue-loader":"^17.2.2","vue-router":"^4.2.4","@babel/core":"^7.24.0","file-loader":"^6.2.0","less-loader":"^11.1.3","babel-loader":"^8.0.4","element-plus":"^2.3.7","jsonwebtoken":"^9.0.2","style-loader":"^0.14.1","koa-useragent":"2.0.0","node-schedule":"^2.1.1","webpack-merge":"^4.2.1","koa-bodyparser":"^4.2.1","koa-nunjucks-2":"^3.0.2","vue-json-viewer":"^3.0.4","vue-style-loader":"^4.1.2","@babel/preset-env":"^7.4.5","generate-password":"^1.7.1","html-webpack-plugin":"^5.5.3","clean-webpack-plugin":"^0.1.19","terser-webpack-plugin":"^2.3.5","webpack-dev-middleware":"^6.1.1","webpack-hot-middleware":"^2.25.4","mini-css-extract-plugin":"^2.7.6","css-minimizer-webpack-plugin":"^5.0.1","directory-named-webpack-plugin":"^4.0.1","@babel/plugin-transform-runtime":"^7.1.0","html-webpack-inject-attributes-plugin":"^1.0.1"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^6.1.4","assert":"^2.0.0","eslint":"^7.32.0","ghooks":"~1.0.3","supertest":"^4.0.2","babel-eslint":"^10.0.2","eslint-plugin-vue":"^9.17.0","validate-commit-msg":"~2.14.0","eslint-plugin-import":"^2.28.1"},"_npmOperationalInternal":{"tmp":"tmp/elpis_1.0.0_1744773253210_0.11951724557629251","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@0xyy/elpis","version":"1.0.1","author":{"name":"yy"},"license":"ISC","_id":"@0xyy/elpis@1.0.1","maintainers":[{"name":"0xyy","email":"webylong@gmail.com"}],"dist":{"shasum":"6525eb48c1c0138d310a539a32fbcca506210def","tarball":"https://registry.npmjs.org/@0xyy/elpis/-/elpis-1.0.1.tgz","fileCount":87,"integrity":"sha512-OCmOETehefZcjRGweVidaiNgQQWj/WNVgD5O59Jqz27wW0snkXwdOdCPTDOS0M6CWJI3G0s0xuy94XN+ASJeHA==","signatures":[{"sig":"MEUCIGeKCi89+708Ser+coBn2X33frRj9pu0tVry8mN72bUYAiEAzBzjzIyrE+uJ+4uivvZAxE7TBPI0IxVSi3xumVgkfWE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":372384},"main":"index.js","config":{"ghooks":{"commit-msg":"validate-commit-msg","pre-commit":"npm run lint"}},"gitHead":"d2805f1ebf0acf5b69f4a57e74d640066f3bf468","scripts":{"dev":"_ENV=local nodemon ./index.js","beta":"_ENV=beta node ./index.js","lint":"eslint --quiet --ext js,vue","prod":"_ENV=production node ./index.js","test":"_ENV=local mocha test/**/*.js","build:dev":"node --max_old_space_size=4096 ./app/webpack/dev.js","build:prod":"node ./app/webpack/prod.js"},"_npmUser":{"name":"0xyy","email":"webylong@gmail.com"},"repository":{"url":"https://e.coding.net/g-jdrx9252/elpis/elpis.git","type":"git"},"_npmVersion":"10.8.2","description":"### model 配置 ````javascript {   model: 'dashboard', // 模板类型，不同模板类型对应不一样的模板数据结构   name: '', // 名称   desc: '', // 描述   icon: '', // 图标   homePage: '', // 首页(项目配置)   // 头部菜单   menu: [     {       key: '', // 菜单唯一描述       name: '', // 菜单名称       menuType: '',","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ajv":"^6.10.2","koa":"2.7.0","md5":"^2.2.1","vue":"^3.3.4","glob":"^7.1.4","knex":"^0.19.0","less":"^3.8.1","path":"^0.12.7","vuex":"^4.1.0","axios":"^0.19.2","mysql":"^2.18.1","pinia":"^2.1.6","lodash":"^4.17.21","log4js":"^6.9.1","moment":"^2.29.4","echarts":"^5.5.0","express":"^4.18.2","nodemon":"^1.19.2","webpack":"^5.88.1","consoler":"^0.2.0","happypack":"^5.0.1","koa2-cors":"^2.0.6","css-loader":"^0.23.1","koa-router":"^7.4.0","koa-static":"^5.0.0","superagent":"^8.1.2","url-loader":"^4.1.1","vue-loader":"^17.2.2","vue-router":"^4.2.4","@babel/core":"^7.24.0","file-loader":"^6.2.0","less-loader":"^11.1.3","babel-loader":"^8.0.4","element-plus":"^2.3.7","jsonwebtoken":"^9.0.2","style-loader":"^0.14.1","koa-useragent":"2.0.0","node-schedule":"^2.1.1","webpack-merge":"^4.2.1","koa-bodyparser":"^4.2.1","koa-nunjucks-2":"^3.0.2","vue-json-viewer":"^3.0.4","vue-style-loader":"^4.1.2","@babel/preset-env":"^7.4.5","generate-password":"^1.7.1","html-webpack-plugin":"^5.5.3","clean-webpack-plugin":"^0.1.19","terser-webpack-plugin":"^2.3.5","webpack-dev-middleware":"^6.1.1","webpack-hot-middleware":"^2.25.4","mini-css-extract-plugin":"^2.7.6","css-minimizer-webpack-plugin":"^5.0.1","directory-named-webpack-plugin":"^4.0.1","@babel/plugin-transform-runtime":"^7.1.0","html-webpack-inject-attributes-plugin":"^1.0.1"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^6.1.4","assert":"^2.0.0","eslint":"^7.32.0","ghooks":"~1.0.3","supertest":"^4.0.2","babel-eslint":"^10.0.2","eslint-plugin-vue":"^9.17.0","validate-commit-msg":"~2.14.0","eslint-plugin-import":"^2.28.1"},"_npmOperationalInternal":{"tmp":"tmp/elpis_1.0.1_1744773347685_0.6268750961202654","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@0xyy/elpis","version":"1.0.2","description":"### model 配置 ````javascript {   model: 'dashboard', // 模板类型，不同模板类型对应不一样的模板数据结构   name: '', // 名称   desc: '', // 描述   icon: '', // 图标   homePage: '', // 首页(项目配置)   // 头部菜单   menu: [     {       key: '', // 菜单唯一描述       name: '', // 菜单名称       menuType: '',","main":"index.js","scripts":{"lint":"eslint --quiet --ext js,vue","dev":"_ENV=local nodemon ./index.js","test":"_ENV=local mocha test/**/*.js","beta":"_ENV=beta node ./index.js","prod":"_ENV=production node ./index.js","build:dev":"node --max_old_space_size=4096 ./app/webpack/dev.js","build:prod":"node ./app/webpack/prod.js"},"repository":{"type":"git","url":"https://e.coding.net/g-jdrx9252/elpis/elpis.git"},"author":{"name":"yy"},"license":"ISC","dependencies":{"@babel/core":"^7.24.0","ajv":"^6.10.2","axios":"^0.19.2","echarts":"^5.5.0","element-plus":"^2.3.7","generate-password":"^1.7.1","glob":"^7.1.4","jsonwebtoken":"^9.0.2","knex":"^0.19.0","koa":"2.7.0","koa-bodyparser":"^4.2.1","koa-nunjucks-2":"^3.0.2","koa-router":"^7.4.0","koa-static":"^5.0.0","koa-useragent":"2.0.0","koa2-cors":"^2.0.6","less":"^3.8.1","lodash":"^4.17.21","log4js":"^6.9.1","md5":"^2.2.1","moment":"^2.29.4","mysql":"^2.18.1","node-schedule":"^2.1.1","nodemon":"^1.19.2","path":"^0.12.7","pinia":"^2.1.6","superagent":"^8.1.2","vue":"^3.3.4","vue-json-viewer":"^3.0.4","vue-router":"^4.2.4","vuex":"^4.1.0","@babel/plugin-transform-runtime":"^7.1.0","@babel/preset-env":"^7.4.5","babel-loader":"^8.0.4","clean-webpack-plugin":"^0.1.19","consoler":"^0.2.0","css-loader":"^0.23.1","css-minimizer-webpack-plugin":"^5.0.1","directory-named-webpack-plugin":"^4.0.1","express":"^4.18.2","file-loader":"^6.2.0","happypack":"^5.0.1","html-webpack-inject-attributes-plugin":"^1.0.1","html-webpack-plugin":"^5.5.3","less-loader":"^11.1.3","mini-css-extract-plugin":"^2.7.6","style-loader":"^0.14.1","terser-webpack-plugin":"^2.3.5","url-loader":"^4.1.1","vue-loader":"^17.2.2","vue-style-loader":"^4.1.2","webpack":"^5.88.1","webpack-dev-middleware":"^6.1.1","webpack-hot-middleware":"^2.25.4","webpack-merge":"^4.2.1"},"devDependencies":{"assert":"^2.0.0","babel-eslint":"^10.0.2","eslint":"^7.32.0","eslint-plugin-import":"^2.28.1","eslint-plugin-vue":"^9.17.0","ghooks":"~1.0.3","mocha":"^6.1.4","supertest":"^4.0.2","validate-commit-msg":"~2.14.0"},"config":{"ghooks":{"commit-msg":"validate-commit-msg","pre-commit":"npm run lint"}},"_id":"@0xyy/elpis@1.0.2","gitHead":"49aadf1d8d463d5f357dcedbdc18f2580f938483","_nodeVersion":"20.18.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-6KcPLw29GrSFGWA+K0GPXEk4g2gRl8QuIWQ16AIUAD1no8q3MmHDJh+nv2CZPOjFKROeJ/qESFcXjdShrDlbhg==","shasum":"e54383f2403500976ff57bbefe9ed908bffe5e68","tarball":"https://registry.npmjs.org/@0xyy/elpis/-/elpis-1.0.2.tgz","fileCount":87,"unpackedSize":372529,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD7n1mj3dQ+pto+tiM6mdKYzUqbsa5U6OvPYBBMejm91AIhAMlV5vBr82M9HbhYzt9/iXTXTMx9U5yQlPfhLA8JNLBe"}]},"_npmUser":{"name":"0xyy","email":"webylong@gmail.com"},"directories":{},"maintainers":[{"name":"0xyy","email":"webylong@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/elpis_1.0.2_1744787182886_0.6864373495926244"},"_hasShrinkwrap":false}},"time":{"created":"2025-04-16T03:14:13.157Z","modified":"2025-04-16T07:06:23.291Z","1.0.0":"2025-04-16T03:14:13.492Z","1.0.1":"2025-04-16T03:15:48.114Z","1.0.2":"2025-04-16T07:06:23.112Z"},"author":{"name":"yy"},"license":"ISC","repository":{"type":"git","url":"https://e.coding.net/g-jdrx9252/elpis/elpis.git"},"description":"### model 配置 ````javascript {   model: 'dashboard', // 模板类型，不同模板类型对应不一样的模板数据结构   name: '', // 名称   desc: '', // 描述   icon: '', // 图标   homePage: '', // 首页(项目配置)   // 头部菜单   menu: [     {       key: '', // 菜单唯一描述       name: '', // 菜单名称       menuType: '',","maintainers":[{"name":"0xyy","email":"webylong@gmail.com"}],"readme":"# elpis\n## 一个企业级全栈应用框架\n\n### model 配置\n````javascript\n{\n  model: 'dashboard', // 模板类型，不同模板类型对应不一样的模板数据结构\n  name: '', // 名称\n  desc: '', // 描述\n  icon: '', // 图标\n  homePage: '', // 首页(项目配置)\n  // 头部菜单\n  menu: [\n    {\n      key: '', // 菜单唯一描述\n      name: '', // 菜单名称\n      menuType: '', // 枚举值：group / module\n     \n     // 当 menuType === group 时，可填\n     subMenu:[{\n      // 可递归 menuItem\n     },...]\n\n      // 当 menuType === module 时，可填\n      moduleType: '', // slider / iframe / custom / schema\n\n      // 当 moduleType === slider 时，可填\n     sliderConfig: {\n      menu:[{\n        // 可以递归 menuItem(除 moduleType === slider)\n      },...]\n     }\n\n      // 当 moduleType === iframe 时，可填\n      iframeConfig: {\n       path: '', // iframe 路径\n      }\n\n      // 当 moduleType === custom 时，可填\n      customConfig: {\n        path: '' // 自定义路由路径\n      }\n\n      // 当 moduleType === schema 时，可填\n      schemaConfig: {\n        api: '', // 数据源API (遵循 RESTFUL 规范)\n        schema: {\n          // 模板数据结构\n          type: 'object',\n          properties: {\n            key: {\n              ...schema, // 标准 schema 配置\n              type: '', // 字段类型\n              label: '', // 字段的中文名\n              // 字段在 table 中的相关配置\n              tableOption: {\n                ...elTableColumnConfig, // 标准 el-table-column 配置\n                toFixed: 0, // 保留小数点后几位\n                visible: true, // 默认为true (false 时，表示不在表单中显示)\n              },\n              // 字段在 search-bar 中的相关配置\n              searchOption: {\n                ...elComponentConfig, // 标准 el-component-column 配置\n                comType: '', // 配置组件类型 input / select / ...\n                default: '', // 默认值\n                \n                // comType === 'select' 时，可填\n                enumList: [], // 下拉框可选项\n\n                // comType ==='dynamicSelect' 时，可填\n                api: ''\n              },\n              // 字段在不同动态 component 中的相关配置，前缀对应 componentConfig 中的键值\n              // 如：componentConfig.createForm, 这里对应 createFormOption\n              // 字段在 createForm 中的相关配置\n              createFormOption: {\n                ...elComponentConfig, // 标准 el-component 配置\n                comType: '', // 控件类型 input / select / ...\n                visible: true, // 是否展示 (true / false), 默认 true\n                disabled: false, // 是否禁用 (true / false), 默认 false\n                default: '', // 默认值\n\n                // comType ==='select' 时，可填\n                enumList: [], // 枚举列表\n              },\n              // 字段在 editForm 中的相关配置\n              editFormOption: {\n                ...elComponentConfig, // 标准 el-component 配置\n                comType: '', // 控件类型 input / select /...\n                visible: true, // 是否展示 (true / false), 默认 true\n                disabled: false, // 是否禁用 (true / false), 默认 false\n                default: '', // 默认值\n\n                // comType ==='select' 时，可填\n                enumList: [], // 枚举列表\n              },\n              // detailPanelOption 的相关配置\n              detailPanelOption: {\n               ...elComponentConfig, // 标准 el-component 配置\n              }\n            },\n            ...\n          }\n        },\n        required: [], // 标记哪些字段是必填项\n      },\n      // table 相关配置\n      tableConfig: {\n        headerButtons: [{\n          label: '', // 按钮名称\n          eventKey: '', // 按钮事件名\n          // 按钮事件具体配置\n          eventOption: {\n            // 当 eventKey === 'showComponent' 时，可填\n            comName: '', // 组件名称\n          },\n          ...elButtonConfig, // 标准 el-button 配置\n        }, ...]\n      },\n      rowButtons: [{\n        label: '', // 按钮名称\n        eventKey: '', // 按钮事件名\n        // 按钮事件具体配置\n        eventOption: {\n          // 当 eventKey ==='showComponent' 时，可填\n          comName: '', // 组件名称\n          // 当 eventKey ==='remove' 时，可填\n          params: {\n            // paramKey = 参数的键值\n            // rowValueKey = 参数值, 格式为 schema::tableKey, 到 table 中找相应的字段\n            paramKey: rowValueKey,\n          }\n        },\n         // 按钮事件具体配置\n        ...elButtonConfig, // 标准 el-button 配置\n      }, ...]\n    },\n    // search-bar 相关配置\n    searchBarConfig: {},\n    // 动态组件 相关配置\n    componentConfig: {\n      // create-form 表单相关配置\n      createForm: {\n        title: '', // 表单标题\n        saveBtnText: '', // 保存按钮文本\n      },\n      // edit-form 表单相关配置\n      editForm: {\n        mainKey: '', // 主字段, 用于唯一标识要编辑的数据对象\n        title: '', // 表单标题\n        saveBtnText: '', // 保存按钮文本\n      },\n      // detail-panel 详情面板相关配置\n      detailPanel: {\n        mainKey: '', // 主字段, 用于唯一标识要查看详情的数据对象\n        title: '', // 详情面板标题\n      },\n      ... // 支持用户动态扩展\n    },\n    ...\n  ]\n}\n````\n\n### 服务端启动\n````javascript\nconst {\n  serverStart\n} = require('@0xyy/elpis');\n\n// 启动 elpis 服务\nconst app = serverStart({});\n````\n\n### 自定义服务器\n- router-schema\n- router\n- controller\n- service\n- extend\n- config\n\n### 前端构建\n````javascript\nconst { frontendBuild } = require('@0xyy/elpis');\n\n// 编译构建前端工程\nfrontendBuild({process.env._ENV})\n````\n\n### 自定义页面扩展\n* 在 `app/pages` 目录下写入口 `entry.xxx.js`\n\n### dashboard / custom-view 自定义页面扩展\n* 在 `app/pages/dashboard/xxx` 下写页面\n\n### dashboard / schema-view / component 动态组件扩展\n1. 在 `app/pages/dashboard/complex-view/schema-view/components` 下写组件\n2. 配置到 `app/pages/dashboard/complex-view/schema-view/components/component.config.js`\n\n### schema-form 控件扩展\n1. 在 `app/widgets/schema-form/complex-view` 下写控件\n2. 配置到 `app/widgets/schema-form/form-item-config.js`\n\n### schema-search-bar 控件扩展\n1. 在 `app/widgets/schema-search-bar/complex-view` 下写控件\n2. 配置到 `app/widgets/schema-search-bar/search-item-config.js`","readmeFilename":"README.md"}