{"_id":"@aklry/elpis","_rev":"3-e7fe45e3f51ece3f2285c4661d31fcf5","name":"@aklry/elpis","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@aklry/elpis","version":"1.0.0","author":{"name":"aklry"},"license":"ISC","_id":"@aklry/elpis@1.0.0","maintainers":[{"name":"aklry","email":"l19854454128@gmail.com"}],"dist":{"shasum":"4120e199ae3f9cc1dc65279cfe485186c9653faf","tarball":"https://registry.npmjs.org/@aklry/elpis/-/elpis-1.0.0.tgz","fileCount":84,"integrity":"sha512-LyLGBYOHJoXAAIoDvrZVz54uTv27hf5FZr3MS1EHhHTJRa7rCQi2Qh9gprYmt6aO+dlW4XLjivrCDyGZSy5xFg==","signatures":[{"sig":"MEUCIQDbeqMy3U8f+X9Kbi7xsjIeA/J1aed8zjXNv+xBwUz+fgIgKsBT9XLIenONTk9mFZh/enVwHlwgoyg5GUHsMRlxspE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":985221},"main":"index.js","config":{"ghooks":{"commit-msg":"validate-commit-msg","pre-commit":"npm run lint"}},"gitHead":"412c207bc9ac845cba89a0ac9bbaddc1a4e54d59","scripts":{"lint":"eslint --quiet --ext js,vue .","test":"cross-env NODE_ENV=local mocha test/**/*.test.js"},"_npmUser":{"name":"aklry","email":"l19854454128@gmail.com"},"repository":{"url":"https://e.coding.net/g-nccv0574/elpis/elpis.git","type":"git"},"_npmVersion":"10.8.2","description":"中后台全栈框架,解决80%的重复开发问题","directories":{},"_nodeVersion":"20.19.1","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":"^3.1.10","webpack":"^5.88.1","consoler":"^0.2.0","prettier":"^3.5.0","cross-env":"^7.0.3","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","swc-loader":"^0.2.6","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","concurrently":"^9.1.2","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","@types/webpack-merge":"^4.1.5","eslint-plugin-import":"^2.28.1","@types/clean-webpack-plugin":"^0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/elpis_1.0.0_1749731901390_0.4198056501531069","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aklry/elpis","version":"1.0.1","author":{"name":"aklry"},"license":"ISC","_id":"@aklry/elpis@1.0.1","maintainers":[{"name":"aklry","email":"l19854454128@gmail.com"}],"dist":{"shasum":"6fec4e7d020848ffb49bdb6667aed205891d1d63","tarball":"https://registry.npmjs.org/@aklry/elpis/-/elpis-1.0.1.tgz","fileCount":83,"integrity":"sha512-RgG+xEG+UOGPJZYhmxMEIz21LYO0xDAJAAT2RrGSPpY3Muu+029IgigagZ5UXsPEpQE6xkjsxfXolRHTRDGrOQ==","signatures":[{"sig":"MEUCIFmTYDu4JhxvC1P6f1pYm9XIItQdR9FjjP0LGZoCiWssAiEAr/ECUbuuxdT/cyphelIYC0SMI+ShlHGWbh+7mz56R5E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":978003},"main":"index.js","config":{"ghooks":{"commit-msg":"validate-commit-msg","pre-commit":"npm run lint"}},"gitHead":"412c207bc9ac845cba89a0ac9bbaddc1a4e54d59","scripts":{"lint":"eslint --quiet --ext js,vue .","test":"cross-env NODE_ENV=local mocha test/**/*.test.js"},"_npmUser":{"name":"aklry","email":"l19854454128@gmail.com"},"repository":{"url":"https://e.coding.net/g-nccv0574/elpis/elpis.git","type":"git"},"_npmVersion":"10.8.2","description":"中后台全栈框架,解决80%的重复开发问题","directories":{},"_nodeVersion":"20.19.1","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":"^3.1.10","webpack":"^5.88.1","consoler":"^0.2.0","prettier":"^3.5.0","cross-env":"^7.0.3","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","swc-loader":"^0.2.6","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","concurrently":"^9.1.2","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","@types/webpack-merge":"^4.1.5","eslint-plugin-import":"^2.28.1","@types/clean-webpack-plugin":"^0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/elpis_1.0.1_1749733906581_0.1260716832804749","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@aklry/elpis","version":"1.0.2","description":"中后台全栈框架,解决80%的重复开发问题","main":"index.js","scripts":{"lint":"eslint --quiet --ext js,vue .","test":"cross-env NODE_ENV=local mocha test/**/*.test.js"},"repository":{"type":"git","url":"https://e.coding.net/g-nccv0574/elpis/elpis.git"},"author":{"name":"aklry"},"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","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","concurrently":"^9.1.2","consoler":"^0.2.0","cross-env":"^7.0.3","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","nodemon":"^3.1.10","prettier":"^3.5.0","style-loader":"^0.14.1","swc-loader":"^0.2.6","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":{"@types/clean-webpack-plugin":"^0.1.2","@types/webpack-merge":"^4.1.5","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":"@aklry/elpis@1.0.2","gitHead":"e24146a1dbb9aaddce26ff7df54db98d41e2c1ef","_nodeVersion":"20.19.1","_npmVersion":"10.8.2","dist":{"integrity":"sha512-MLaJgP8sGb9T0igsKwpFJV2+xi58KXUucNA8w7hrTjZBVKJl16O552k/CxnUogKC6JtT86b3hHSaD7cSqnH34Q==","shasum":"c09e912f4d5d2e2b435ee19284da23c1bebdd293","tarball":"https://registry.npmjs.org/@aklry/elpis/-/elpis-1.0.2.tgz","fileCount":83,"unpackedSize":980410,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIA74dAJBkVnPS71wLKy/MtEE2mTALB1MIFnV3J9PhVEOAiAziBlGEUBctAM0FEcECepGXMvgdFJt/i5sohbORdUUDg=="}]},"_npmUser":{"name":"aklry","email":"l19854454128@gmail.com","actor":{"name":"aklry","email":"l19854454128@gmail.com","type":"user"}},"directories":{},"maintainers":[{"name":"aklry","email":"l19854454128@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/elpis_1.0.2_1750859990162_0.7366426259376837"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-12T12:38:21.272Z","modified":"2025-06-25T13:59:50.564Z","1.0.0":"2025-06-12T12:38:21.648Z","1.0.1":"2025-06-12T13:11:46.809Z","1.0.2":"2025-06-25T13:59:50.401Z"},"author":{"name":"aklry"},"license":"ISC","repository":{"type":"git","url":"https://e.coding.net/g-nccv0574/elpis/elpis.git"},"description":"中后台全栈框架,解决80%的重复开发问题","maintainers":[{"name":"aklry","email":"l19854454128@gmail.com"}],"readme":"# elpis\r\n\r\n## 介绍\r\n\r\n**elpis**是一个全栈框架，旨在解决在开发中后台系统的过程中80%的重复业务，开放给用户20%的定制化需求\r\n\r\n## 主要技术栈\r\n\r\n- Vue\r\n- Koa\r\n- Express\r\n- mocha\r\n- Webpack\r\n- Element Plus\r\n\r\n## 开发文档（模板配置）\r\n\r\n~~~javascript\r\nexport default {\r\n    // 模板类型,不同模板类型对应不一样的模板数据结构\r\n    mode: 'dashboard',\r\n    name: '', // 名称\r\n    desc: '', // 描述\r\n    icon: '', // 图标\r\n    homePage: '', //首页(项目配置)\r\n    // 头部菜单\r\n    menu: [\r\n        {\r\n            key: '', // 菜单唯一描述\r\n            name: '', // 菜单名称\r\n            menuType: '', // 枚举值, group / module\r\n            // 当menuType = group 时, 可填\r\n            subMenu: [\r\n                {\r\n                    // 可以递归menuItem\r\n                }\r\n            ],\r\n            // 当menuType = module 时, 可填\r\n            moduleType: '', // 枚举值 schema/custom/iframe/sider\r\n            // 当moduleType = schema 时, 可填\r\n            schemaConfig: {\r\n                api: '', // 数据源api 遵循RESTful规范\r\n                // 板块数据结构\r\n                schema: {\r\n                    type: 'object',\r\n                    properties: {\r\n                        key: {\r\n                            ...schema, // 标准schema 配置\r\n                            type: '', // 字段类型\r\n                            label: '', // 字段中文名\r\n                            // 字段在table中的相关配置\r\n                            tableOption: {\r\n                                ...elTableColumnConfig, //标准el-table-column 配置\r\n                                visible: true, // 默认为true(false 表示不在表单显示)\r\n                                toFixed: 2 // 保留小数点后几位\r\n                            },\r\n                            // 字段在search-bar中的相关配置\r\n                            searchOption: {\r\n                                ...elComponentConfig, //标准el-component(form 表单组件) 配置\r\n                                comType: '', // 配置控件类型(input/select)\r\n                                default: '', // 默认值\r\n                                // 当comType = select 时, 可填\r\n                                enumList: [],\r\n                                // 当comType = dynamicSelect 时, 可填\r\n                                api: '' // 枚举列表数据源api 遵循RESTful规范\r\n                            },\r\n                            // 字段在不同 component 中的相关配置, 前缀对应componentConfig的键\r\n                            // 例如: componentConfig.createForm = createFormOption\r\n                            // 字段在createForm中的相关配置\r\n                            createFormOption: {\r\n                                ...eleFormConfig, // 标准element-ui form配置\r\n                                comType: '', // 配置控件类型(input/select)\r\n                                visible: true, // 是否展示(true/false),默认为true\r\n                                disabled: false, // 是否禁用(true/false),默认为false\r\n                                default: '', // 默认值\r\n                                // 当comType = select 时, 可填\r\n                                enumList: [] // 枚举列表\r\n                            },\r\n                            // 字段在editForm中的相关配置\r\n                            editFormOption: {\r\n                                ...eleFormConfig, // 标准element-ui form配置\r\n                                comType: '', // 配置控件类型(input/select)\r\n                                visible: true, // 是否展示(true/false),默认为true\r\n                                disabled: false, // 是否禁用(true/false),默认为false\r\n                                default: '', // 默认值\r\n                                // 当comType = select 时, 可填\r\n                                enumList: [] // 枚举列表\r\n                            },\r\n                            detailPanelOption: {\r\n                                ...eleFormConfig, // 标准element-ui form配置\r\n                                disabled: true // 是否禁用(true/false),默认为true\r\n                            }\r\n                        }\r\n                    },\r\n                    required: [] // 标记哪些字段是必填的\r\n                },\r\n                // table相关配置\r\n                tableConfig: {\r\n                    headerButtons: [\r\n                        {\r\n                            label: '', // 按钮中文名\r\n                            eventKey: '', // 按钮事件名\r\n                            // 按钮具体配置\r\n                            eventOption: {\r\n                                // 当eventKey === 'showComponent' 时\r\n                                comName: '' // 组件名称\r\n                            },\r\n                            ...elButtonConfig // 标准el-button配置\r\n                        }\r\n                    ],\r\n                    rowButtons: [\r\n                        {\r\n                            label: '', // 按钮中文名\r\n                            eventKey: '', // 按钮事件名\r\n                            eventOption: {\r\n                                // 当eventKey = remove 时, 可填\r\n                                params: {\r\n                                    // paramKey = 参数的键值\r\n                                    // rowValueKey = 参数值 ,格式为 schema::xxx时，到table中找响应的字段\r\n                                    paramKey: rowValueKey\r\n                                },\r\n                                // 当eventKey === 'showComponent' 时\r\n                                comName: '' // 组件名称\r\n                            }, // 按钮事件具体配置\r\n                            ...elButtonConfig // 标准el-button配置\r\n                        }\r\n                    ]\r\n                },\r\n                searchConfig: {}, // search-bar相关配置\r\n                // 动态组件 相关配置\r\n                componentConfig: {\r\n                    // create-form 相关配置\r\n                    createForm: {\r\n                        title: '', // 表单标题\r\n                        saveBtnText: '' // 保存按钮文本\r\n                    },\r\n                    // edit-form 相关配置\r\n                    editForm: {\r\n                        mainKey: '', // 主键,用于唯一标识要修改的数据对象\r\n                        title: '', // 表单标题\r\n                        saveBtnText: '' // 保存按钮文本\r\n                    },\r\n                    // detail-panel 相关配置\r\n                    detailPanel: {\r\n                        mainKey: '', // 主键,用于唯一标识要修改的数据对象\r\n                        title: ''\r\n                    }\r\n                    // 支持用户动态扩展\r\n                }\r\n            },\r\n            // 当moduleType = custom 时, 可填\r\n            customConfig: {\r\n                path: '' // 自定义路径\r\n            },\r\n            // 当moduleType = iframe 时, 可填\r\n            iframeConfig: {\r\n                path: '' // iframe路径\r\n            },\r\n            // 当moduleType = sider 时, 可填\r\n            siderConfig: {\r\n                menu: [\r\n                    {\r\n                        // 可递归 menuItem(除moduleType = sider)\r\n                    }\r\n                ]\r\n            }\r\n        }\r\n    ]\r\n}\r\n\r\n~~~\r\n\r\n\r\n\r\n## sdk的使用\r\n\r\n### 安装\r\n\r\n~~~shell\r\nnpm i @aklry/elpis\r\n~~~\r\n\r\n### 服务端启动\r\n\r\n~~~js\r\nconst { serverStart } = require('@aklry/elpis')\r\n\r\nconst app = serverStart({\r\n    // 项目名称\r\n    name: 'demo'\r\n})\r\n~~~\r\n\r\n### 自定义服务端\r\n\r\n- router-schema\r\n\r\n  - 表示接口的[jsonschema](https://json-schema.org/)规范\r\n\r\n  - ~~~js\r\n    module.exports = {\r\n        '/api/proj/list': {\r\n            get: {\r\n                query: {\r\n                    type: 'object',\r\n                    properties: {\r\n                        page: {\r\n                            type: 'string'\r\n                        },\r\n                        size: {\r\n                            type: 'string'\r\n                        }\r\n                    },\r\n                    required: ['page', 'size']\r\n                }\r\n            }\r\n        }\r\n    }\r\n    ~~~\r\n\r\n  - \r\n\r\n- router\r\n\r\n- controller\r\n\r\n- service\r\n\r\n遵循MVC规范，接口遵循**restful**规范\r\n\r\n### 前端构建\r\n\r\n#### 项目启动\r\n\r\n```js\r\nconst { frontedBuild } = require('@aklry/elpis')\r\nfrontendBuild(process.env.NODE_ENV)\r\n```\r\n\r\n> 注：`process.env.NODE_ENV`表示环境变量，可取`dev`或`prod`，在执行`node`脚本时附带上\r\n\r\n#### 自定义webpack配置\r\n\r\n- 在`app/webpack.config.js`文件编写额外的配置\r\n\r\n#### 自定义页面扩展\r\n\r\n* 在`app/pages/**`目录下写入口`entry.xxx.js`\r\n\r\n* 在`app/pages/dashboard/**`目录下自定义页面\r\n\r\n* 在`app/pages/dashboard/complex-view/components`目录下写扩展组件\r\n\r\n  * 配置到`app/pages/dashboard/complex-view/components/component-config.js`\r\n\r\n* 在`app/pages/widgets/schema-form/complex-view`目录下写`schema-form`的扩展组件\r\n\r\n  * 配置到`app/pages/widgets/schema-form/form-item-config.js`\r\n\r\n  在`app/pages/widgets/schema-search-bar/complex-view`目录下写`schema-search-bar`的扩展组件\r\n\r\n  * 配置到`app/pages/widgets/schema-search-bar/schema-item-config.js`\r\n\r\n  \r\n","readmeFilename":"README.md"}