{"_id":"@coder-scy/elpis","_rev":"2-e2f1443d4963e91407f1b8e98220411d","name":"@coder-scy/elpis","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.1":{"name":"@coder-scy/elpis","version":"1.0.1","author":{"name":"scy"},"license":"ISC","_id":"@coder-scy/elpis@1.0.1","maintainers":[{"name":"coder-scy","email":"506552936@qq.com"}],"dist":{"shasum":"46b1144528977338cb0653d81f160b39160de802","tarball":"https://registry.npmjs.org/@coder-scy/elpis/-/elpis-1.0.1.tgz","fileCount":80,"integrity":"sha512-NBWys1+FNFQl1H+w+nJjDRiOPRYqL1rchFLk7yAoeXg8LfoC6ZWmZrWTsDGH26xoUnuIe0rojW1RD/0wBWikNw==","signatures":[{"sig":"MEYCIQDdbKXdmNVQjUDdE6Bx4AtL0Kq1K++sc37uDLWySkRVUwIhAOEGCPcxGmR0vD6Ib7F8TgOfBqmvE8sHMeqBJfVM/Cwn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":683786},"main":"index.js","config":{"ghooks":{"commit-msg":"validate-commit-msg","pre-commit":"npm run lint"}},"gitHead":"1e77bf7cd8517fb5a458713bf3a5019b9c822bc4","scripts":{"lint":"eslint --quiet --ext .js,.vue .","test":"_ENV='local' mocha 'test/**/*.js'"},"_npmUser":{"name":"coder-scy","email":"506552936@qq.com"},"repository":{"url":"https://git.code.tencent.com/yuanyuan659/elpis.git","type":"git"},"_npmVersion":"8.19.4","description":"elpis","directories":{},"_nodeVersion":"16.20.2","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","@babel/runtime":"^7.28.6","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","@element-plus/icons-vue":"^2.3.2","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_1772955847654_0.8791599224446611","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@coder-scy/elpis","version":"1.0.2","description":"elpis","main":"index.js","scripts":{"lint":"eslint --quiet --ext .js,.vue .","test":"_ENV='local' mocha 'test/**/*.js'"},"repository":{"type":"git","url":"https://git.code.tencent.com/yuanyuan659/elpis.git"},"author":{"name":"scy"},"license":"ISC","dependencies":{"@babel/core":"^7.24.0","@babel/runtime":"^7.28.6","@element-plus/icons-vue":"^2.3.2","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"}},"gitHead":"c35e3b06abd658116ec61ffcb04a385f9f5d1539","_id":"@coder-scy/elpis@1.0.2","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-wpPs3XezswGkZi5T2aYKbJ+5THg54omJDKyXRsQutKjsbyyEyElbVdZspS2yE5ySPgNcLbnbZJIItcMtJSbwDg==","shasum":"656d488baf208ca6ec6b83e745c85c2e17f2853f","tarball":"https://registry.npmjs.org/@coder-scy/elpis/-/elpis-1.0.2.tgz","fileCount":81,"unpackedSize":683529,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICW4qaT3EwFlDOUb17/rvenFl+i9Nr+B1HTk86+hE6RTAiEAs5sqGlbKA1RHpP4+AbnRcAt6wNPrqu5ZwVhBGxNH5eM="}]},"_npmUser":{"name":"coder-scy","email":"506552936@qq.com"},"directories":{},"maintainers":[{"name":"coder-scy","email":"506552936@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/elpis_1.0.2_1773299146149_0.3181521168477981"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-08T07:44:07.569Z","modified":"2026-03-12T07:05:46.522Z","1.0.1":"2026-03-08T07:44:07.840Z","1.0.2":"2026-03-12T07:05:46.405Z"},"author":{"name":"scy"},"license":"ISC","repository":{"type":"git","url":"https://git.code.tencent.com/yuanyuan659/elpis.git"},"description":"elpis","maintainers":[{"name":"coder-scy","email":"506552936@qq.com"}],"readme":"# elpis\n\n## 一个企业级全栈应用框架\n\n### model配置\n\n```javascript\n{\n  mode: \"dashboard\", //模版类型，不同模版类型对应不一样的模版数据结构\n  name: \"123\",\n  desc: \"\",\n  icon: \"\",\n  homePage: \"\",\n  // 头部菜单\n  menu: [\n    {\n      key: \"\", //菜单唯一描述\n      name: \"\", //菜单名称\n      menuType: \"\", //枚举值：group / module\n      // 当menuType为group时，可填\n      subMenu: [\n        {\n          // 可递归menuItem\n        }\n      ],\n\n      // 当menuType为module时，可填\n      moduleType: \"\", // 枚举值：sider/iframe/custom/schema\n      // 当moduleType为sider时\n      siderConfig: {\n        menu: [\n          {\n            // 可递归 menuItem(除去moduleType === sider)\n          }\n        ]\n      },\n      // 当moduleType为iframe时\n      iframeConfig: {\n        path: \"\" //iframe路径\n      },\n      // 当moduleType为custom时\n      customConfig: {\n        path: \"\" //自定义路由路径\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                  {\n                    label: \"\",\n                    value: \"\"\n                  }\n                ],\n                // 当comType==='dynamicSelect'\n                api: \"\"\n              },\n              // 字段在不同动态 component 中的相关配置，前缀对应 componentConfig中的键值\n              // 如： componentConfig.createForm,这里对应createFormOption\n              // 字段在createForm中的相关配置\n              createFormOption: {\n                ...eleComponentConfig, // 标准 el-component 配置\n                comType: \"\", // 控件类型 input/select/date-range...\n                visible: true, // 是否展示\n                disabled: false, // 是否禁用\n                default: \"\", // 默认值\n\n                // comType === 'select'时生效\n                enumList: [] // 枚举列表\n              },\n              // 字段在editForm中的相关配置\n              editFormOption: {\n                ...eleComponentConfig, // 标准 el-component 配置\n                comType: \"\", // 控件类型 input/select/date-range...\n                visible: true, // 是否展示\n                disabled: false, // 是否禁用\n                default: \"\", // 默认值\n\n                // comType === 'select'时生效\n                enumList: [] // 枚举列表\n              },\n              detailPanelOption: {\n                ...eleComponentConfig // 标准 el-component 配置\n              }\n            },\n            required: [] // 标记哪些字段是必填项\n          }\n        },\n        // table相关配置\n        tableConfig: {\n          headerButtons: [\n            {\n              label: \"\", //按钮中文名\n              eventKey: \"\", // 按钮事件名\n              //按钮事件具体配置\n              eventOption: {\n                // 当eventKey === 'showComponent'\n                comName: \"\" // 组件名称\n              },\n              ...eventButtonConfig //标准el-button配置\n            }\n          ],\n          rowButtons: [\n            {\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              ...eventButtonConfig //标准el-button配置\n            }\n          ]\n        },\n        searchConfig: {}, // search-bar相关配置\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\n```javascript\nconst { serverStart } = require(\"@coder-scy/elpis\");\n\n// 启动elpis服务\nconst app = serverStart({});\n```\n\n### 自定义服务端\n\n- router-schema\n- router\n- controller\n- service\n- extend\n- config\n\n### 前端构建\n\n```javascript\nconst { frontendBuild } = require(\"@coder-scy/elpis\");\n\n// 编译构建前端工程\nfrontendBuild(process.env._ENV);\n```\n\n### 自定义页面扩展\n\n- 在`app/pages` 目录下写入口 entry.xxx.js\n\n### dashboard / custom-view 自定义页面扩展\n\n- 在`app/pages/dashboard/xxxx` 下写页面\n\n### dashboard / schema-view / components 动态组件扩展\n\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 控件扩展\n\n1. 在`app/pages/widgets/schema-form/complex-view` 下写控件\n2. 配置到 `app/pages/widgets/schema-form/form-item-config.js`\n\n### schema-search-bar 控件扩展\n\n1. 在`app/pages/widgets/schema-search-bar/complex-view` 下写控件\n2. 配置到 `app/pages/widgets/schema-search-bar/search-item-config.js`\n","readmeFilename":"README.md"}