{"_id":"@coder02lq/elpis","name":"@coder02lq/elpis","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@coder02lq/elpis","version":"1.0.0","description":"```javascript\r module.exports = {\r   mode: 'dashboard', // 模板类型描述, 不同模板类型对应不一样的数据结构","main":"index.js","scripts":{"lint":"eslint --quiet --ext js,vue .","test":"cross-env _ENV=local mocha ./test/**/*.js"},"repository":{"type":"git","url":"git@git.code.tencent.com:elpis-all/myElpis.git"},"author":{"name":"coderlq"},"license":"ISC","dependencies":{"@babel/core":"^7.24.0","@babel/plugin-transform-runtime":"^7.1.0","@babel/preset-env":"^7.4.5","ajv":"^6.10.2","axios":"^0.19.2","babel-loader":"^8.0.4","clean-webpack-plugin":"^4.0.0","consoler":"^0.2.0","cross-env":"^10.1.0","css-loader":"^0.23.1","css-minimizer-webpack-plugin":"^5.0.1","dayjs":"^1.11.19","element-plus":"^2.3.7","file-loader":"^6.2.0","glob":"^7.1.4","html-webpack-inject-attributes-plugin":"^1.0.1","html-webpack-plugin":"^5.5.3","jsonwebtoken":"^9.0.2","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","less":"^3.8.1","less-loader":"^11.1.3","lodash":"^4.17.21","log4js":"^6.9.1","md5":"^2.2.1","mini-css-extract-plugin":"^2.7.6","node-schedule":"^2.1.1","nodemon":"^1.19.2","path":"^0.12.7","pinia":"^2.1.6","style-loader":"^0.14.1","superagent":"^8.1.2","terser":"^5.44.1","terser-webpack-plugin":"^5.3.14","thread-loader":"^4.0.4","unplugin-auto-import":"^20.3.0","unplugin-vue-components":"^30.0.0","url-loader":"^4.1.1","vue":"^3.3.4","vue-loader":"^17.2.2","vue-router":"^4.2.4","vue-style-loader":"^4.1.2","webpack":"^5.88.1","webpack-bundle-analyzer":"^5.0.1","webpack-cli":"^6.0.1","webpack-dev-middleware":"^6.1.1","webpack-dev-server":"^5.2.2","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":{"pre-commit":"npm run lint","commit-msg":"validate-commit-msg"}},"_id":"@coder02lq/elpis@1.0.0","gitHead":"ff4966014519856deaba2649bc5a3adacca7b9e1","_nodeVersion":"22.20.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-AFIgefDNTWCyeT+TYzpvN1c8VTYzt9aSojYDvDqZ/ZJQAacsvC21TJwr2gguIQKLJs1hqosaWd3yAOmdTBGcjg==","shasum":"60aca893d6381da710f3b1aeb7b1d2de828a6a10","tarball":"https://registry.npmjs.org/@coder02lq/elpis/-/elpis-1.0.0.tgz","fileCount":77,"unpackedSize":965919,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAGRmAvoTTL34gJ1m6jv6miUWUx6TpVVotfxBnCeo29sAiEAnCQZvnkTUgX6quiEHQp5aqZv+4i51AoJH2Mo/xq1j74="}]},"_npmUser":{"name":"coder02lq","email":"coder02lq@gmail.com"},"directories":{},"maintainers":[{"name":"coder02lq","email":"coder02lq@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/elpis_1.0.0_1764942912029_0.39499446256313675"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-05T13:55:11.925Z","1.0.0":"2025-12-05T13:55:12.267Z","modified":"2025-12-05T13:55:12.553Z"},"maintainers":[{"name":"coder02lq","email":"coder02lq@gmail.com"}],"description":"```javascript\r module.exports = {\r   mode: 'dashboard', // 模板类型描述, 不同模板类型对应不一样的数据结构","repository":{"type":"git","url":"git@git.code.tencent.com:elpis-all/myElpis.git"},"author":{"name":"coderlq"},"license":"ISC","readme":"# elpis\r\n## 一个企业级应用\r\n\r\n### dashboard model 配置\r\n```javascript\r\nmodule.exports = {\r\n  mode: 'dashboard', // 模板类型描述, 不同模板类型对应不一样的数据结构\r\n\r\n  name: '', // 模板名称\r\n  desc: '', // 模板描述\r\n  icon: '', // icon\r\n  homePage: '', // 首页(项目配置)\r\n\r\n  // 头部菜单\r\n  menu: [\r\n    // menuItem[]\r\n    {\r\n      key: '', // 菜单唯一描述,\r\n      name: '', // 菜单名称\r\n      menuType: '', // 菜单类型, 枚举值: 'group' | 'module'\r\n\r\n      // 1. 当 menuType == group 时, 可填\r\n      subMenu: [], // menuItem[],\r\n\r\n      // 2. 当 menuType == module 时\r\n      moduleType: '', // 模块类型, 枚举值: 'schema' | 'iframe' | 'custom' | 'sider'\r\n\r\n      // 2.1 当 moduleType == schema 时\r\n      schemaConfig: {\r\n        api: '', // 数据源 API (遵循 RESTFUL 规范)\r\n        schema: {\r\n          // 模块数据结构\r\n          type: 'object',\r\n          properties: {\r\n            prop: {\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 配置\r\n                componentType: '', // 配置组件类型, 枚举值: 'input' | 'select' | 'dynamic-select' | 'date-range'\r\n                default: '', // 默认值\r\n\r\n                // componentType === 'select' 时, 可填\r\n                enumList: [{ label: '', value: '' }], // 下拉框选项\r\n\r\n                // componentType === 'dynamic-select' 时, 可填\r\n                api: '',\r\n              },\r\n              // 字段在不同动态组件中的相关配置, 前缀对应 componentConfig 中的键值\r\n              // 例如: componentOption.createFormOption, 这里就是 createFormOption\r\n              // 字段在 create-form 中的相关配置\r\n              createFormOption: {\r\n                ...elComponentConfig, // 标准 el-component 配置\r\n                componentType: '', // 配置组件类型, 枚举值: 'input' | 'input-number' | 'select'\r\n                visible: true, // 是否展示, 默认 true(false则不在表格展示)\r\n                disabled: false, // 是否禁用, 默认 false\r\n                default: '', // 默认值\r\n\r\n                // componentType === 'select' 时, 可填\r\n                enumList: [{ label: '', value: '' }], // 下拉框选项\r\n              },\r\n              // 字段在 edit-form 中的相关配置\r\n              editFormOption: {\r\n                ...elComponentConfig, // 标准 el-component 配置\r\n                componentType: '', // 配置组件类型, 枚举值: 'input' | 'input-number' | 'select'\r\n                visible: true, // 是否展示, 默认 true(false则不在表格展示)\r\n                disabled: false, // 是否禁用, 默认 false\r\n                default: '', // 默认值\r\n\r\n                // componentType === 'select' 时, 可填\r\n                enumList: [{ label: '', value: '' }], // 下拉框选项\r\n              },\r\n              // 字段在 detail-panel 中的相关配置\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            {\r\n              ...elButtonConfig, // 标准 el-button 配置\r\n              label: '', // 按钮名称\r\n              eventKey: '', // 按钮事件名称\r\n              // 按钮具体配置\r\n              eventOption: {\r\n                // eventKey === 'showComponent'\r\n                componentName: '', // 组件名称\r\n              },\r\n            },\r\n          ],\r\n          rowButtons: [\r\n            {\r\n              ...elButtonConfig, // 标准 el-button 配置\r\n              label: '', // 按钮名称\r\n              eventKey: '', // 按钮事件名称\r\n              // 按钮具体配置\r\n              eventOption: {\r\n                // eventKey === 'showComponent'\r\n                componentName: '', // 组件名称\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            },\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            saveButtonText: '', // 保存按钮文案\r\n          },\r\n          // edit-form 相关配置\r\n          editForm: {\r\n            mainKey: '', // 表单主键, 唯一标识要修改的数据对象\r\n            title: '', //表单标题\r\n            saveButtonText: '', // 保存按钮文案\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      // 2.2 当 moduleType == iframe 时\r\n      iframeConfig: {\r\n        path: '', // iframe 路径\r\n      },\r\n\r\n      // 2.3 当 moduleType == custom 时\r\n      customConfig: {\r\n        path: '', // 自定义路由路径\r\n      },\r\n\r\n      // 2.4 当 moduleType == sider 时\r\n      siderConfig: {\r\n        menu: [], // menuItem[], 这里 menuItem 的 moduleType 只能是 'schema' | 'iframe' | 'custom'\r\n      },\r\n    },\r\n  ],\r\n}\r\n\r\n```\r\n\r\n### 服务端启动\r\n```javascript\r\nconst { serverStart } = require('@coder02lq/elpis')\r\n\r\n// 启动 elpis 服务\r\nconst app = serverStart({})\r\n```\r\n\r\n\r\n### 自定义服务端\r\n- app/controller\r\n- app/extend\r\n- app/middleware\r\n- app/router-schema\r\n- app/router\r\n- app/service\r\n- config\r\n\r\n### 前端构建\r\n```javascript\r\nconst { frontendBuild } = require('@coder02lq/elpis')\r\n\r\n// 编译构建前端工程\r\nfrontendBuild(process.env._ENV)\r\n```\r\n\r\n\r\n### 自定义页面扩展\r\n在 `app/pages/` 目录下写入口文件 entry.xxx.js\r\n```javascript\r\nimport elpisBoot from '$elpisBoot'\r\nimport YourComponent from './your-component.vue'\r\n\r\nelpisBoot(YourComponent)\r\n```\r\n\r\n### 自定义 view 页面 dashboard/custom-view\r\n1. 在 `app/pages/dashboard/xxx` 写页面组件\r\n\r\n2. 在 `app/pages/dashboard/router.js` 中进行配置\r\n```javascript\r\nmodule.exports = ({routes, siderRoutes}) => {}\r\n```\r\n\r\n\r\n### 动态组件扩展 dashboard/schema-view/components\r\n1. 在`app/pages/dashboard/complex-view/schema-view/components/`下写组件\r\n```javascript\r\n<script setup>\r\nimport { ref } from 'vue'\r\n\r\nconst name = ref('createForm')\r\n\r\nconst isShow = ref(false)\r\n\r\nconst show = () => {\r\n  isShow.value = true\r\n}\r\n\r\nconst close = () => {\r\n  isShow.value = false\r\n}\r\n\r\ndefineExpose({\r\n  name,\r\n  show,\r\n})\r\n</script>\r\n\r\n<template></template>\r\n\r\n<style scoped lang=\"less\"></style>\r\n```\r\n\r\n2. 配置`app/pages/dashboard/complex-view/schema-view/components/component-config.js`\r\n\r\n### schema-form 控件的扩展\r\n1. 在`app/pages/widgets/schema-form/complex-view/`下写组件\r\n```javascript\r\n<script setup>\r\n\r\nconst validate = () => {}\r\n\r\nconst getValue = () => {}\r\n\r\ndefineExpose({\r\n  name,\r\n  validate,\r\n  getValue,\r\n})\r\n</script>\r\n\r\n<template></template>\r\n\r\n<style scoped lang=\"less\"></style>\r\n```\r\n\r\n2. 配置`app/pages/widgets/schema-form/form-item-config.js`\r\n\r\n### schema-search-bar 控件的扩展\r\n1. 在`app/pages/widgets/schema-search-bar/complex-view/`下写组件\r\n```javascript\r\n<script setup>\r\n\r\nconst reset = () => {}\r\n\r\nconst getValue = () => {}\r\n\r\ndefineExpose({\r\n  reset,\r\n  getValue,\r\n})\r\n</script>\r\n\r\n<template></template>\r\n\r\n<style scoped lang=\"less\"></style>\r\n```\r\n\r\n2. 配置`app/pages/widgets/schema-search-bar/search-item-config.js`\r\n","readmeFilename":"README.md","_rev":"1-2a4569cce87ed19449a8c2c55bfbd090"}