{"_id":"@cyouliang/elpis","_rev":"4-c3a9b0c8910493d75fad8ee081d3a9bb","name":"@cyouliang/elpis","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.1":{"name":"@cyouliang/elpis","version":"1.0.1","author":{"name":"Chen_cc"},"license":"ISC","_id":"@cyouliang/elpis@1.0.1","maintainers":[{"name":"cyouliang","email":"c17854952472@163.com"}],"homepage":"https://github.com/shturl.cc/g8xZO2CLazc1WO7r8QzNRGQOICPHWTW7M#readme","bugs":{"url":"https://github.com/shturl.cc/g8xZO2CLazc1WO7r8QzNRGQOICPHWTW7M/issues"},"dist":{"shasum":"d14e489eb493c0db5c5e4e9aea68c2529c7ba2da","tarball":"https://registry.npmjs.org/@cyouliang/elpis/-/elpis-1.0.1.tgz","fileCount":80,"integrity":"sha512-A2UE1bnde6DPuX6Kssy9FSUFC3fcnRvul64DNSLwEEuveOLz7YLAHulC+A+YDbhp5amiJKbS92LfGcpdYS/79w==","signatures":[{"sig":"MEUCIEc03fr7vtOAg1yne3RnQufpJWyjXJxEpngFKn8bmbC2AiEA66v8iC+MzURf9PxMI+9146sbTys6WS5E84cqrKbk2uI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":978412},"main":"index.js","config":{"ghooks":{"commit-msg":"validate-commit-msg","pre-commit":"npm run lint"}},"gitHead":"f80a1854fc63ba5a101cadb1efaf2639424a1f75","scripts":{"dev":"set _ENV='local' && nodemon ./index.js","beta":"set _ENV='beta' && node ./index.js","lint":"eslint --quiet --ext js,vue .","prod":"set _ENV='prod' && node ./index.js","test":"_ENV='local' mocha test/**/*.test.js","build:dev":"set OPTION=--max-old-space-size=4096 && node ./app/webpack/dev.js","build:prod":"node ./app/webpack/prod.js"},"_npmUser":{"name":"cyouliang","email":"c17854952472@163.com"},"repository":{"url":"git+https://github.com/shturl.cc/g8xZO2CLazc1WO7r8QzNRGQOICPHWTW7M.git","type":"git"},"_npmVersion":"10.9.3","description":"---","directories":{},"_nodeVersion":"22.20.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","thread-loader":"^4.0.4","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","@element-plus/icons-vue":"^2.3.1","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_1788171181228_0.7589475489818855","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@cyouliang/elpis","version":"1.0.2","description":"---","main":"index.js","scripts":{"lint":"eslint --quiet --ext js,vue .","test":"_ENV='local' mocha test/**/*.test.js","dev":"set _ENV='local' && nodemon ./index.js","prod":"set _ENV='prod' && node ./index.js","beta":"set _ENV='beta' && node ./index.js","build:dev":"set OPTION=--max-old-space-size=4096 && node ./app/webpack/dev.js","build:prod":"node ./app/webpack/prod.js"},"repository":{"type":"git","url":"https://git.code.tencent.com/c17854952472/elpis-demo1.git"},"author":{"name":"Chen_cc"},"license":"ISC","dependencies":{"@babel/core":"^7.24.0","@element-plus/icons-vue":"^2.3.1","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","thread-loader":"^4.0.4","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":"@cyouliang/elpis@1.0.2","gitHead":"846413fbcff1d017b07f53b1c6284d8e286d2629","_nodeVersion":"22.20.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-Yz4pVzrQj+LfHhrm+mtZ+CLTpEcHRZ6by/mYO+BNY4ZKNtOzdZw93e2WCGalnpfs37W2rHEi74gMH83b7+zhlA==","shasum":"3c48cda11ad221fd4f9001711e3e789320b42c62","tarball":"https://registry.npmjs.org/@cyouliang/elpis/-/elpis-1.0.2.tgz","fileCount":80,"unpackedSize":978426,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEZohETsu7T8keoLjqQdEiiZpiHi9UiHG3nbBFcKbmTRAiEA61mUW8bFRTI06Rx0GtnhQ5Tkm5lbxPu4xfSgx+ACmbQ="}]},"_npmUser":{"name":"cyouliang","email":"c17854952472@163.com"},"directories":{},"maintainers":[{"name":"cyouliang","email":"c17854952472@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/elpis_1.0.2_1788171521611_0.3197478094820667"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-31T10:13:01.098Z","modified":"2026-08-31T10:18:42.015Z","1.0.0":"2026-08-31T09:45:48.223Z","1.0.1":"2026-08-31T10:13:01.394Z","1.0.2":"2026-08-31T10:18:41.855Z"},"author":{"name":"Chen_cc"},"license":"ISC","repository":{"type":"git","url":"https://git.code.tencent.com/c17854952472/elpis-demo1.git"},"description":"---","maintainers":[{"name":"cyouliang","email":"c17854952472@163.com"}],"readme":"#elpis\n\n## 一个企业级应用框架，通过全栈实现\n\n---\n\n### model 配置\n\n```javascript\n{\n    mode: '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                {\n                    // 可递归...\n                },\n                ...\n            ],\n\n            // 当 menuType === module 时，可填\n            moduleType: '', // 枚举值：sider/iframe/custom/schema\n\n            // 当 moduleType === sider 时\n            siderConfig: {\n                menu: [\n                    {\n                        // 可递归 menuItem（除 moduleType === sider)\n\n                    },\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                    type: 'object',\n                    properties: {\n                        key: {\n                            ...schema, // 标准 schema 配置\n                            type: '', // 字段类型\n                            label: '', // 字段中文名\n                            // 字段在 table 中的相关配置\n                            tableOption: {\n                                ...elTableColumnConfig, // 标准的 el-table-column\n                                visible: true, // 默认为 true（false 或不配置时，不在表单中展示）\n                            },\n                            // 字段在 search-bar 中的相关配置\n                            searchOption: {\n                                ...eleComponentConfig, // 标准的 el-component-column 配置\n                                comType: '', // 配置组件类型 input/Select...\n                                default: '', // 默认值\n                                // comType === 'select'时，可配置\n                                enumList: [], // 枚举列表\n                                // comType === 'dynamicSelect'时，可配置\n                                api: '', // 数据源 API (遵循 RESTFUL 规范)\n                            },\n                            // 字段在不同动态 component 中的相关配置，前缀对应 componentConfig 中的键值\n                            // 如： componentConfig.createForm 对应 createFormOption\n                            // 字段在 createForm 中相关配置\n                            createFormOption: {\n                                ...eleComponentConfig, // 标准的 el-component 配置\n                                comType: '', // 控件类型 input/select/date-picker/...\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                                ...eleComponentConfig, // 标准的 el-component 配置\n                                comType: '', // 控件类型 input/select/date-picker/...\n                                visible: true, // 是否展示,(true/false) 默认为true\n                                disabled: false, // 是否禁用 (true/false) 默认为false\n                                default: '', // 默认值\n                                // comType === 'select'时，可配置\n                                enumList: [], // 枚举列表\n                            },\n                            // 字段在 detail-panel 中相关配置\n                            detailPanelOption: {\n                                ...eleComponentConfig, // 标准的 el-component 配置\n                            }\n                        }\n                    },\n                    required: [] // 标记哪些字段为必填字段\n                },\n                tableConfig: {\n                    headerButtons: [\n                        {\n                            label: '', // 按钮中文名\n                            eventKey: '', // 按钮事件名\n                            ...elButtonConfig, // 标准 el-button 配置\n                             // 按钮具体配置\n                            eventOption: {\n                                // 当 eventKey === 'showComponent' 时\n                                comName: '', // 组件名称\n                            },\n                        },\n                        ...\n                    ],\n                    rowButtons: [\n                        {\n                            label: '', // 按钮中文名\n                            eventKey: '', // 按钮事件名\n                            eventOption: {\n                                // 当 eventKey === 'remove'\n                                params: {\n                                    // paramKey = 参数的键值 当格式为 schema::tableKey 的时候，到 table 中找到相应的字段\n                                    paramKey: rowValueKey\n                                }\n                            }, // 按钮具体配置\n                            ...elButtonConfig // 标准 el-button 配置\n                        },\n                        ...\n                    ]\n                }, // table 相关配置\n                searchConfig: {}, // search-bar 相关配置\n                // 动态组件相关配置\n                componentConfig: {\n                    // create-form 表单相关配置\n                    createForm: {\n                        title: '', // 表单标题\n                        saveBtnText: '', // 保存按钮文案\n                    },\n                    // edit-from 表单相关配置\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---\n\n### 服务端启动\n\n```javascript\nconst { serverStart } = require('@inlaid/elpis');\n\n// 启动 elpis 服务\nconst app = serverStart({});\n```\n\n---\n\n### 自定义服务端\n\n-   router-schema\n-   router\n-   controller\n-   service\n-   extend\n-   config\n\n---\n\n### 前端构建\n\n```javascript\nconst { frontendBuild } = require('@inlaid/elpis');\n\n// 编译构建前端工程\nfrontendBuild(process.env._ENV);\n```\n\n---\n\n### 自定义页面扩展\n\n-   在 `app/pages` 目录下写入口 entry.xxx.js\n\n---\n\n### dashboard / custom-view 自定义页面扩展\n\n-   在 `app/pages/dashboard/xxx` 下写页面\n\n---\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---\n\n### schema-form 控件扩展\n\n1. 在 `app/widgets/schema-form/complex-view` 下写控件\n2. 配置到 `app/widgets/schema-form/form-item-config.js`\n\n---\n\n### schema-search-bar 控件扩展\n\n1. 在 `app/widgets/schema-search-bar/complex-view` 下写控件\n2. 配置到 `app/widgets/schema-search-bar/search-item-config.js`\n","readmeFilename":"README.md"}