{"_id":"@d2xu/elpis","_rev":"2-fb49c04499d6f1d87ae2056c19ba154e","name":"@d2xu/elpis","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@d2xu/elpis","version":"1.0.0","author":{"name":"dufuhao"},"license":"ISC","_id":"@d2xu/elpis@1.0.0","maintainers":[{"name":"d2xu","email":"2511944114@qq.com"}],"dist":{"shasum":"c6e8ef63d2d20bca5a5133a2f0c8659e2c5b2310","tarball":"https://registry.npmjs.org/@d2xu/elpis/-/elpis-1.0.0.tgz","fileCount":78,"integrity":"sha512-q8OuQfrym/uxAxJFKxRQ9WJnFyNjMyH2ihno6aNUmITaxcGxyV6d2U9nJT2g8pi4zwtJ13aiyDg6vkPTP76rEg==","signatures":[{"sig":"MEYCIQCqYWChz6yu1aSnwUXPf1AGvxFpIlR6RTaik6rTkhdyvAIhAPAyHOh6BCltNz3MA7fVXZaybxp+GCgtAR+CJ9mnSB7h","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":983037},"main":"index.js","config":{"ghooks":{"commit-msg":"validate-commit-msg","pre-commit":"npm run lint"}},"gitHead":"55af2a229735d499169cb5a6d8f17cdf8f1ae0ff","scripts":{"lint":"eslint --quiet --ext js,vue .","test":"cross-env _ENV=local mocha 'test/**/*.test.js'"},"_npmUser":{"name":"d2xu","email":"2511944114@qq.com"},"repository":{"url":"https://e.coding.net/g-pshr3436/elpis/elpis.git","type":"git"},"_npmVersion":"10.2.3","description":"```js\r module.exports = {\r   mode: 'dashboard', // 模板类型，不同模板类型对应不一样的模板数据结构\r   name: '', // 模板名称\r   desc: '', // 模板描述\r   icon: '', // 模板图标\r   homePage: '', // 模板首页\r   // 头部菜单\r   menu: [\r     {\r       key: '', // 菜单唯一标识\r       name: '', // 菜单名称\r       menuT","directories":{},"_nodeVersion":"18.19.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-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.3","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.0_1762608019522_0.5821209610110534","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@d2xu/elpis","version":"1.0.1","description":"```js\r module.exports = {\r   mode: 'dashboard', // 模板类型，不同模板类型对应不一样的模板数据结构\r   name: '', // 模板名称\r   desc: '', // 模板描述\r   icon: '', // 模板图标\r   homePage: '', // 模板首页\r   // 头部菜单\r   menu: [\r     {\r       key: '', // 菜单唯一标识\r       name: '', // 菜单名称\r       menuT","main":"index.js","scripts":{"lint":"eslint --quiet --ext js,vue .","test":"cross-env _ENV=local mocha 'test/**/*.test.js'"},"repository":{"type":"git","url":"https://e.coding.net/g-pshr3436/elpis/elpis.git"},"author":{"name":"dufuhao"},"license":"ISC","dependencies":{"@babel/core":"^7.24.0","@babel/runtime":"^7.28.3","@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","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-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":"@d2xu/elpis@1.0.1","gitHead":"35807c980967e8611a3f0f83a559f800d04a017f","_nodeVersion":"18.19.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-6Cf77qao/sfGZEI6s3+pz/XzR5dlW14HdGKlSEzREyDUf99MgK8vqEzQTwjiPBXkU7wvQLteiwSEBJI+dpBiEA==","shasum":"73df435073f9fc7c3f0ec222db88f16ec153cd0e","tarball":"https://registry.npmjs.org/@d2xu/elpis/-/elpis-1.0.1.tgz","fileCount":78,"unpackedSize":520105,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDl8SB3L6d0hWA6uh5IFeiAbB1foVox4vBMPEFhbBiZbgIgWhrAs8ZXuiyHYdmRcPQyv76jDvpsj2Fb2QYYsuw1GFk="}]},"_npmUser":{"name":"d2xu","email":"2511944114@qq.com"},"directories":{},"maintainers":[{"name":"d2xu","email":"2511944114@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/elpis_1.0.1_1764738688640_0.680945555521957"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-08T13:20:19.456Z","modified":"2025-12-03T05:11:29.135Z","1.0.0":"2025-11-08T13:20:19.770Z","1.0.1":"2025-12-03T05:11:28.913Z"},"author":{"name":"dufuhao"},"license":"ISC","repository":{"type":"git","url":"https://e.coding.net/g-pshr3436/elpis/elpis.git"},"description":"```js\r module.exports = {\r   mode: 'dashboard', // 模板类型，不同模板类型对应不一样的模板数据结构\r   name: '', // 模板名称\r   desc: '', // 模板描述\r   icon: '', // 模板图标\r   homePage: '', // 模板首页\r   // 头部菜单\r   menu: [\r     {\r       key: '', // 菜单唯一标识\r       name: '', // 菜单名称\r       menuT","maintainers":[{"name":"d2xu","email":"2511944114@qq.com"}],"readme":"# elpis\r\n\r\n\r\n\r\n## 一个企业级应用框架，通过全栈实现。\r\n\r\n\r\n\r\n### model配置\r\n\r\n```js\r\nmodule.exports = {\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: '', // 菜单类型，1：一级菜单 module，2：二级菜单 group\r\n      // 当 menuType 为 group 时，可填\r\n      subMenu: [\r\n        {\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 (除了 moduleType === sider)\r\n        },{}]\r\n      },\r\n\r\n      // 当 moduleType 为 iframe 时\r\n      iframeConfig:{\r\n        path:'', // iframe 路径\r\n      },\r\n\r\n      // 当 moduleType 为 custom 时\r\n      customConfig:{\r\n        path:'', // 自定义路由路径\r\n      },\r\n\r\n      // 当 moduleType 为 schema 时\r\n      schemaConfig:{\r\n        api:'/api/user', // 数据源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, // 默认为 true (false 或 不配置时 表示不在表单中展示)是否在表格中展示\r\n              },\r\n              // 字段在 search-bar 中的相关配置\r\n              searchOption:{\r\n                ...elComponentConfig, // 标准 el-component-column 配置\r\n                comType: '', // 配置组件类型 input/select/......\r\n                default:'', // 默认值\r\n\r\n                // 当 comType === 'select' 时\r\n                enumList: [], // 下拉框可选项\r\n\r\n                // 当 comType === 'dynamicSelect' 时\r\n                api:''\r\n              },\r\n              // 字段在不同动态 component 中的相关配置，前缀对应 componentConfig 中的键值\r\n              // 如：componentConfig.createForm，这里对应 createFormOption\r\n              // 字段在 createForm 中相关配置\r\n              createFormOption:{\r\n                ...elComponentConfig, // 标准 el-component 配置\r\n                comType:'', // 控件类型 input/select/input-number\r\n                visible:true, // 是否展示（true/false）,默认为 true\r\n                disabled: false, // 是否禁用（true/false）,默认为 false\r\n                default:'', // 默认值\r\n\r\n                // 当 comType === 'select' 时\r\n                enumList: [], // 枚举列表 下拉框可选项\r\n              },\r\n              // 字段在 editForm 中相关配置\r\n              editFormOption:{\r\n                ...elComponentConfig, // 标准 el-component 配置\r\n                comType:'', // 控件类型 input/select/input-number\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              // 字段在 detailPanel 中相关配置\r\n              detailPanelOption:{\r\n                ...elComponentConfig // 标准 el-component 配置\r\n              }\r\n            },\r\n            // ...\r\n          },\r\n          required: [], // 必填字段\r\n        },\r\n        // table 相关配置\r\n        tableConfig:{\r\n          headerButtons:[{\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          rowButtons:[{\r\n            label:'', // 按钮中文名\r\n            eventKey:'remove', // 按钮事件名\r\n            eventOption:{\r\n              // 当 eventKey === 'showComponent'\r\n              comName:'', // 组件名称\r\n\r\n              // 当 eventKey === 'remove'\r\n              params:{\r\n                // paramKey = 参数的键值\r\n                // rowValueKey = 参数值（当格式为 schema::tableKey 的时候，到 table 中找相应的字段）\r\n                paramKey: rowValueKey\r\n              }\r\n            }, // 按钮事件具体配置\r\n            ...elButtonConfig // 标准 el-button 配置\r\n          }]\r\n        },\r\n        // search-bar 搜索配置\r\n        searchConfig:{}, \r\n        // 动态组件 相关配置\r\n        componentConfig:{\r\n          // create-form 表单相关配置\r\n          createForm:{\r\n            title:'', // 表单标题\r\n            saveBtnText:'', // 保存按钮文字\r\n          },\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    // 可递归 menuItem\r\n    {}\r\n  ]\r\n};\r\n```\r\n\r\n\r\n\r\n### 服务端启动\r\n\r\n```js\r\nconst { \r\n  serverStart\r\n} = require('@d2xu/elpis');\r\n\r\n// 启动 elpis 服务\r\nconst app = serverStart({});\r\n```\r\n\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### 前端构建\r\n\r\n```js\r\nconst { frontendBuild } = require('@d2xu/elpis');\r\n\r\n// 编译构建前端工程\r\nfrontendBuild(process.env._Env);\r\n```\r\n\r\n\r\n\r\n### 自定义页面扩展\r\n\r\n* 在 `app/pages/` 目录下写入口 entry.xxx.js\r\n\r\n\r\n\r\n### dashboard / custom-view 自定义页面扩展\r\n\r\n- 在 `app/pages/dashboard/xxxx` 下写页面\r\n\r\n\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\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\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` \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","readmeFilename":"README.md"}