{"_id":"@acky/elpis","_rev":"2-ac65c6c1e06170d5ba04c2daf85440f8","name":"@acky/elpis","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@acky/elpis","version":"1.0.0","author":{"name":"Acky"},"license":"ISC","_id":"@acky/elpis@1.0.0","maintainers":[{"name":"acky","email":"yaquandu@gmail.com"}],"dist":{"shasum":"e6dbbcd3892ee67f83c989b88159808b486bc05d","tarball":"https://registry.npmjs.org/@acky/elpis/-/elpis-1.0.0.tgz","fileCount":90,"integrity":"sha512-KzsIj1/nCTsj2oCRc4xFTiSrdtSIUMYUnw1sUDNASKe9dqsI+jVBr3CcgMxtTTxJKQZjl1giWRz/7erqk2C8Fg==","signatures":[{"sig":"MEQCICswWMb0p5aim4iLfe94/s25QscWo/Tz2ZwvpCP+OaOMAiABW/AvAjhsuIUEWKW18Anzz5ABlo7Qb0WHDfcD7OPguw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":651822},"main":"index.js","config":{"ghooks":{"commit-msg":"validate-commit-msg","pre-commit":"npm run lint"}},"gitHead":"8a33858464e2545c025e53473e6427051f08061b","scripts":{"lint":"eslint --quiet --ext js,vue .","test":"cross-env _ENV=local mocha 'test/**/*.js'"},"_npmUser":{"name":"acky","actor":{"name":"acky","type":"user","email":"yaquandu@gmail.com"},"email":"yaquandu@gmail.com"},"repository":{"url":"https://e.coding.net/g-nnzg8724/elpis/elpis.git","type":"git"},"_npmVersion":"8.6.0","description":"```javascript\r  const config = {\r     mode: 'dashboard',// 模板类型，不同模板类型对应不一样的模板要求\r     name: '',// 名称\r     desc: '',// 描述\r     icon: '',// 图标\r     homePage: '',// 首页（项目配置）\r     // 头部菜单\r     menu: [{\r         key: '',// 菜单唯一描述\r         name: '',// 菜单名称\r    ","directories":{},"_nodeVersion":"18.0.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","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","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-eslint":"^10.0.2","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","@element-plus/icons-vue":"^2.3.1","mini-css-extract-plugin":"^2.7.6","webpack-bundle-analyzer":"^4.10.2","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","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_1751596255418_0.2285976583852869","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@acky/elpis","version":"1.0.1","description":"```javascript\r  const config = {\r     mode: 'dashboard',// 模板类型，不同模板类型对应不一样的模板要求\r     name: '',// 名称\r     desc: '',// 描述\r     icon: '',// 图标\r     homePage: '',// 首页（项目配置）\r     // 头部菜单\r     menu: [{\r         key: '',// 菜单唯一描述\r         name: '',// 菜单名称\r    ","main":"index.js","scripts":{"lint":"eslint --quiet --ext js,vue .","test":"cross-env _ENV=local mocha 'test/**/*.js'"},"repository":{"type":"git","url":"https://e.coding.net/g-nnzg8724/elpis/elpis.git"},"author":{"name":"Acky"},"license":"ISC","dependencies":{"@babel/core":"^7.24.0","@babel/runtime":"^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-eslint":"^10.0.2","babel-loader":"^8.0.4","clean-webpack-plugin":"^0.1.19","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","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-bundle-analyzer":"^4.10.2","webpack-dev-middleware":"^6.1.1","webpack-hot-middleware":"^2.25.4","webpack-merge":"^4.2.1"},"devDependencies":{"assert":"^2.0.0","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":"8a33858464e2545c025e53473e6427051f08061b","_id":"@acky/elpis@1.0.1","_nodeVersion":"18.0.0","_npmVersion":"8.6.0","dist":{"integrity":"sha512-tT1o+Fb4eFkuWmvcwtnxkJfnwN1xkdqAciNlccjDZsYt08/9uf/m3tM1GmtGHJF+WlSt6k/llTPPvIllANDeIw==","shasum":"59e2bbd497149b0ad09e66b3bc0f1aaef2cdc77d","tarball":"https://registry.npmjs.org/@acky/elpis/-/elpis-1.0.1.tgz","fileCount":90,"unpackedSize":651856,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDKukRW7irr+AWCtO8KIXiqnv5oG5UcK5LmiFGrC4K+aAIgdsWWS5h2DuYj6y5YhSvxcSmu8NK0RjvaM/AEW/KBs2w="}]},"_npmUser":{"name":"acky","email":"yaquandu@gmail.com","actor":{"name":"acky","email":"yaquandu@gmail.com","type":"user"}},"directories":{},"maintainers":[{"name":"acky","email":"yaquandu@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/elpis_1.0.1_1751598572190_0.018237841140765543"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-04T02:30:55.304Z","modified":"2025-07-04T03:09:32.632Z","1.0.0":"2025-07-04T02:30:55.604Z","1.0.1":"2025-07-04T03:09:32.384Z"},"author":{"name":"Acky"},"license":"ISC","repository":{"type":"git","url":"https://e.coding.net/g-nnzg8724/elpis/elpis.git"},"description":"```javascript\r  const config = {\r     mode: 'dashboard',// 模板类型，不同模板类型对应不一样的模板要求\r     name: '',// 名称\r     desc: '',// 描述\r     icon: '',// 图标\r     homePage: '',// 首页（项目配置）\r     // 头部菜单\r     menu: [{\r         key: '',// 菜单唯一描述\r         name: '',// 菜单名称\r    ","maintainers":[{"name":"acky","email":"yaquandu@gmail.com"}],"readme":"#elpis\r\n\r\n## 一个企业级应用框架\r\n\r\n### model配置\r\n\r\n```javascript\r\n const config = {\r\n    mode: 'dashboard',// 模板类型，不同模板类型对应不一样的模板要求\r\n    name: '',// 名称\r\n    desc: '',// 描述\r\n    icon: '',// 图标\r\n    homePage: '',// 首页（项目配置）\r\n    // 头部菜单\r\n    menu: [{\r\n        key: '',// 菜单唯一描述\r\n        name: '',// 菜单名称\r\n        menuType: '',// 枚举值，group / module\r\n\r\n        // 当 menuType == group 时，可填\r\n        submenu: [{\r\n            // 可递归 menuItem\r\n        }],\r\n\r\n        // 当 menuType == module 时，可填\r\n        moduleType: '',// 枚举值：sider/iframe/custom/schema\r\n\r\n        // 当 moduleType == sider 时\r\n        siderConfig: {\r\n            menu: [{\r\n                // 可递归 menuItem\r\n\r\n            }]\r\n        },\r\n        // 当 moduleType == iframe 时\r\n        iframeConfig: {\r\n            path: '',// iframe 路径\r\n        },\r\n        // 当 moduleType == custom 时\r\n        customConfig: {\r\n            path: '',// 自定义路由\r\n        },\r\n        // 当 moduleType == schema 时\r\n        schemaConfig: {\r\n            api: '',// 数据源API（遵循 RESTFUL 规范）\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                            toFixed: 0,// 保留小数点后几位\r\n                            visible: true, // 是否展示在表单\r\n                        },\r\n                        // 字段在 search-bar 中的相关配置\r\n                        searchOption: {\r\n                            ...eleComponentConfig,// 标准的 element component 配置\r\n                            comType: 'input',// 引用的组件类型\r\n                            default: '',// 组件的默认值\r\n\r\n                            // comType === select\r\n                            enumList: [],//下拉框可选\r\n\r\n                            // comType === dynamicSelect\r\n                            enumList: [],//下拉框可选\r\n                            api: '',\r\n\r\n                            // comType === dateRange\r\n                            dateType: 'daterange', //日期控件类型\r\n                        },\r\n                        // 字段在不同动态 component 中的相关配置，前缀对应 componentConfig 中的键值\r\n                        // 如：componentConfig.createForm，这里对应 createFormOption\r\n                        // 字段在 createForm 中的相关配置\r\n                        createFormOption: {\r\n                            ...eleComponentConfig,// 标准的 element component 配置\r\n                            comType: 'input',// 控件类型\r\n                            visible: true,// 是否展示，默认为true\r\n                            disabled: false,// 是否禁用，默认false\r\n                            default: '',// 默认值\r\n\r\n                            // comType === 'select'\r\n                            enumList: [],// 下拉枚举列表\r\n                        },\r\n                        // 字段在 editForm 中的相关配置\r\n                        editFormOption: {\r\n                            ...eleComponentConfig,// 标准的 element component 配置\r\n                            comType: 'input',// 控件类型\r\n                            visible: true,// 是否展示，默认为true\r\n                            disabled: false,// 是否禁用，默认false\r\n                            default: '',// 默认值\r\n\r\n                            // comType === 'select'\r\n                            enumList: [],// 下拉枚举列表\r\n                        },\r\n                        // detail-panel 相关配置\r\n                        detailPanelOption: {\r\n                            ...eleComponentConfig,// 标准的 element component 配置\r\n                            comType: 'input',// 控件类型\r\n                        },\r\n                        comAOption: {},\r\n                        comBOption: {},\r\n                    },\r\n                    ...\r\n                },\r\n                required: ['key'], // 标记哪些字段是必填项\r\n            },\r\n            tableConfig: {\r\n                headerButtons: [{\r\n                    label: '',// 按钮中文名\r\n                    eventKey: '',// 事件名\r\n                    eventOption: {// 按钮事件具体配置\r\n                        // 当 eventKey === 'showComponent'\r\n                        comName: '',// 组件名称\r\n                    },\r\n                    ...elButtonConfig // 标准 el-button 配置\r\n                }, ...],\r\n                rowButtons: [{\r\n                    label: '',// 按钮中文名\r\n                    eventKey: '',// 事件名\r\n                    eventOption: {// 按钮事件具体配置\r\n                        // 当 eventKey === 'showComponent'\r\n                        comName: '',// 组件名称\r\n\r\n                        // 当paramKey === 'remove'\r\n                        params: {\r\n                            // paramKey = 参数的键值\r\n                            // rowValueKey = 参数值（当格式为 schema::xxx 的时候，到 table 中找到相应的字段）\r\n                            paramKey: rowValueKey\r\n                        }\r\n                    },\r\n                    ...elButtonConfig // 标准 el-button 配置\r\n                }, ...]\r\n            },// table 相关配置\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                comA: {},\r\n                comB: {},\r\n                ... // 支持用户动态拓展\r\n            },// 动态模块组件\r\n        },\r\n    }]\r\n}\r\n```\r\n\r\n### 服务端启动\r\n\r\n```javascript\r\nconst {\r\n    serverStart\r\n} = require('@acky/elpis')\r\n\r\n// 启动 elpis 服务\r\nconst app = serverStart()\r\n```\r\n\r\n### 自定义服务端\r\n\r\n- router-schema\r\n- router\r\n- controller\r\n- service\r\n- extend\r\n- config\r\n\r\n### 前端构建\r\n\r\n```javascript\r\nconst {frontEndBuild} = require('@acky/elpis')\r\n\r\nfrontEndBuild(process.env._ENV)\r\n```\r\n\r\n### 自定义页面扩展\r\n\r\n* 在`app/pages/` 目录下写入口 entry.xxx.js\r\n\r\n### dashboard / custom-view 自定义页面扩展\r\n\r\n* 在`app/pages/dashboard/xxx` 下写页面\r\n\r\n### dashboard / schema-view / components 动态组件扩展\r\n\r\n1. 在`app/pages/dashboard/complex-view/schema-view/components`下写组件\r\n2. 配置到`app/pages/dashboard/complex-view/schema-view/components/component-config.js`\r\n\r\n### schema-form 控件扩展\r\n\r\n1. 在`app/widgets/schema-form/complex-view`下写控件\r\n2. 配置到`app/widgets/schema-form/form-item-config.js`\r\n\r\n### schema-search-bar 控件扩展\r\n\r\n1. 在`app/widgets/schema-search-bar/complex-view`下写组件\r\n2. 配置到`app/widgets/schema-search-bar/search-item-config.js`","readmeFilename":"README.md"}