{"_rev":"7-ac376caa875f339bae60906f4239ee6f","time":{"created":"2025-08-15T07:36:16.998Z","modified":"2025-08-15T07:36:17.620Z","1.0.0":"2025-06-11T14:35:35.040Z","1.0.1":"2025-06-12T15:08:37.489Z","1.0.2":"2025-06-12T15:11:25.303Z","1.0.3":"2025-06-18T13:31:48.816Z","2.0.0":"2025-08-15T07:36:17.331Z"},"_id":"@bumblebee-honey/tikitaka","name":"@bumblebee-honey/tikitaka","dist-tags":{"latest":"2.0.0"},"versions":{"2.0.0":{"name":"@bumblebee-honey/tikitaka","version":"2.0.0","description":"## 简介","main":"index.js","scripts":{"lint":"eslint --quiet --ext  js,jsx .","dev":"cross-env __ENV=local nodemon ./index.js","beta":"cross-env __ENV=beta nodemon ./index.js","prod":"cross-env __ENV=production nodemon ./index.js","test-api":"cross-env __ENV=local mocha test/**/*.js","build-dev":"node --max_old_space_size=4096 ./app/webpack/dev.js","build-prod":"node ./app/webpack/prod.js"},"repository":{"type":"git","url":"https://git.code.tencent.com/TiKiTaKa/TiKiTaKa.git"},"author":{"name":"Honey"},"license":"ISC","peerDependencies":{"react":"^18.2.0","react-dom":"^18.2.0","react-redux":"^9.2.0","react-refresh":"^0.17.0","react-router-dom":"^6.30.1","@reduxjs/toolkit":"^2.8.2","@ant-design/icons":"^5.6.1","axios":"^0.19.2","lodash":"^4.17.21","dayjs":"^1.11.13","ajv":"^6.10.2","antd":"^5.26.1"},"dependencies":{"@babel/core":"^7.24.0","@babel/plugin-transform-runtime":"^7.28.0","@babel/preset-env":"^7.28.0","@babel/preset-react":"^7.27.1","@babel/preset-typescript":"^7.27.1","@babel/runtime":"^7.27.6","@pmmmwh/react-refresh-webpack-plugin":"^0.5.11","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":"^6.8.1","css-minimizer-webpack-plugin":"^5.0.1","directory-named-webpack-plugin":"^4.0.1","echarts":"^5.5.0","express":"^4.18.2","file-loader":"^6.2.0","generate-password":"^1.7.1","glob":"^7.1.4","happypack":"^5.0.1","html-webpack-inject-attributes-plugin":"^1.0.1","html-webpack-plugin":"^5.5.3","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","less-loader":"^11.1.3","log4js":"^6.9.1","md5":"^2.2.1","mini-css-extract-plugin":"^2.7.6","moment":"^2.29.4","node-schedule":"^2.1.1","nodemon":"^1.19.2","path":"^0.12.7","style-loader":"^3.3.1","superagent":"^8.1.2","terser":"^5.43.1","terser-webpack-plugin":"^5.3.14","thread-loader":"^4.0.4","unplugin-auto-import":"^19.3.0","url-loader":"^4.1.1","webpack":"^5.88.1","webpack-dev-middleware":"^6.1.1","webpack-hot-middleware":"^2.25.4","webpack-merge":"^4.2.1","sass":"^1.90.0","sass-loader":"^16.0.5"},"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","react":"^18.2.0","react-dom":"^18.2.0","react-redux":"^9.2.0","react-refresh":"^0.17.0","react-router-dom":"^6.30.1","@reduxjs/toolkit":"^2.8.2","@ant-design/icons":"^5.6.1","axios":"^0.19.2","lodash":"^4.17.21","dayjs":"^1.11.13","ajv":"^6.10.2","antd":"^5.26.1"},"config":{"ghooks":{"commit-msg":"validate-commit-msg","pre-commit":"npm run lint"}},"_id":"@bumblebee-honey/tikitaka@2.0.0","gitHead":"c5c5564da0b293a4a09e4574673e73f36bd5b9c9","_nodeVersion":"18.20.0","_npmVersion":"10.5.0","dist":{"integrity":"sha512-81MKVCwsz2ExQ4LTnmufAS2NCSMiMZxg/gp0xeSEaPN4YBcwfaUfplmFOo44Z84uXPhm0LYftVpKlUYHBF+pkA==","shasum":"f5f5471c7b7dd0650f01823de8e7510c12281a9b","tarball":"https://registry.npmjs.org/@bumblebee-honey/tikitaka/-/tikitaka-2.0.0.tgz","fileCount":107,"unpackedSize":733758,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBIPGUGxVqcgmH11XKbDxKgfInpVNa/wwRCYGZp8ep5gAiAVY+vFs1TzgFsALq+KZYlVF2/4ebJMbKo8Oh0nXfbwOg=="}]},"_npmUser":{"name":"bumblebee-honey","email":"1175410270@qq.com"},"directories":{},"maintainers":[{"name":"bumblebee-honey","email":"1175410270@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tikitaka_2.0.0_1755243377102_0.17565019006590799"},"_hasShrinkwrap":false}},"maintainers":[{"name":"bumblebee-honey","email":"1175410270@qq.com"}],"description":"## 简介","repository":{"type":"git","url":"https://git.code.tencent.com/TiKiTaKa/TiKiTaKa.git"},"author":{"name":"Honey"},"license":"ISC","readme":"\n# tikitaka\n\n## 简介\n\n待更新\n\n## 服务启动\n\n```javascript\n// 文件目录\n\nTiKiTaKaDemo\n├── app # 应用目录\n│ ├── controller // 路由处理\n│ ├── extend # 扩展\n│ ├── middleware # 中间件\n│ ├── pages # 页面\n│ ├── public # 静态资源\n│ │ ├── dist # 编译输出目录\n│ │ └── static # 静态资源\n│ ├── router # 路由\n│ ├── router-schema \n│ ├── service  \n│ ├── middleware.js # 全局中间件\n│ └── webpack.config.js # webpack 配置\n├── config # 配置文件\n│ ├── config.beta.js # 测试环境配置\n│ ├── config.default.js # 默认配置\n│ ├── config.local.js # 本地配置\n│ └── config.pord.js # 生产环境配置\n├── model # 模型层\n│ ├── buiness # 业务模型\n│ └── course # 课程模型\n├── .gitignore # git 忽略配置\n├── build.js # 构建脚本\n├── package.json # 项目配置\n└── server.js # 服务启动脚本\n```\n\n启动你需要以下步骤\n\n### 步骤一 下载 demo\n\n```bash\n\nnpx create-tikitaka my-app\n\ncd my-app\n\nnpm install\n\nnpm run build-dev\n\nnpm run dev\n\n```\n\n### 步骤二 打开 http://localhost:8080/view/project-list\n\n## model配置\n\n```javascript\n/**\n * 很重要，一个这样的 json 结构，就是一个完整的站点（系统），整个站点都是围绕这个 json 结构来构建的。\n */\n\n{\n  mode: 'dashboard' // 模板类型，不同模板类型对应不同的模板数据结构\n  name: '' // 名称\n  desc: ''\n  icon: ''\n  homePage: ''\n\n  // 头部菜单\n  menu: [\n    {\n      key: '', // 菜单key\n      name: '', // 菜单名称\n      menuType: '', // 枚举值 group module\n      subMenu: [ // menuType 为 group 时才有 subMenu\n        // 可递归 menuItem\n        {},\n      ],\n      // menuType == module 时，有效\n      moduleType: '', // 枚举值 sider （侧边栏菜单）| iframe （第三方页面） | custom （自定义页面）| schema （普通页面，共性较多）\n      // moduleType == sider 时\n      siderConfig: {\n        // 可递归 menuItem（除 moduleType == sider ）\n        menu: [],\n      },\n      // moduleType == iframe 时\n      iframeConfig: {\n        path: '',\n      },\n      // moduleType == custom 时\n      customConfig: {\n        path: '', // 自定义路由\n      },\n      // moduleType == schema 时\n      schemaConfig: {\n        api: '/api/user',  // 数据源 API （遵循 RESTFUL 规范）\n        schema: {\n          type: 'object',\n          properties: {\n            key: { // 字段 key\n              ...schema, // 标准 schema 配置\n              type: '', // 字段类型\n              label: '', // 字段中文名,\n\n              // 字段在 table 中展示的配置\n              tableOption: {\n                ...elTableColumnConfig, // 标准 el-table-column 配置\n                // 自定义配置\n                toFixed: 0, // 小数点后保留几位\n                visible: true, // 默认为 true，（false 时，不在表单中显示）\n              },\n\n              // 字段在 search-bar 中展示的配置\n              searchOption: {\n                ...elTableColumnConfig, // 标准 el-table-column 配置\n                comType: '', // 组件类型 \n                default: '', // 默认值\n\n                // comType == select 时\n                enumList: [], // 枚举列表 \n\n                // comType == asyncSelect 时\n                asyncApi: '', // 异步 API （遵循 RESTFUL 规范）\n              },\n\n              // 字段在不同 component 中展示的配置，前缀对应 componentConfig 中的键值\n              // 如 componentConfig.createForm, 这里对应 createFormOption\n              createFormOption: {\n                ...elTableColumnConfig, // 标准 el-component 配置\n                comType: \"\", // 组件类型 input select\n                visible: true, // 是否显示，默认为 true 显示\n                disabled: false, //  是否禁用，默认为 false 不禁用\n                default: \"\", // 默认值\n\n                // comType === select 时，可选项\n                enumList: [], // 枚举列表\n\n                // 自定义配置\n                rules: [], // 验证规则\n              },\n\n              editFormOption: {\n                ...elTableColumnConfig, // 标准 el-component 配置\n                comType: \"\", // 组件类型 input select\n                visible: true, // 是否显示，默认为 true 显示\n                disabled: false, //  是否禁用，默认为 false 不禁用\n                default: \"\", // 默认值\n              },\n              detailPanelOption: {\n                ...elTableColumnConfig, // 标准 el-component 配置\n              },\n\n            },\n          },\n          required: [], // 标记哪些字段是必填项， properties 中的 key\n        },\n        // table 相关配置\n        tableConfig: {\n          // 表格右上方按钮\n          headerButtons: [{\n            label: '', // 按钮名称\n            eventKey: '', // 按钮事件名\n            // 按钮事件具体配置\n            eventOption: {\n              // 当 eventKey === showComponent\n              comName: '', // 组件名称\n\n            },\n            // 按钮具体配置\n            ...elButtonConfig, // 标准 el-button 配置\n          }],\n          // 行按钮（表格中的操作按钮）\n          rowButtons: [{\n            label: '', // 按钮名称\n            eventKey: '', // 按钮事件名\n            eventOption: {\n              // 当 eventKey === showComponent\n              comName: '', // 组件名称\n\n              // 当 eventKey 为 remove 时，有效\n              params: {\n                // paramKey 参数的键名\n                // rowValueKey 参数的值 （当格式为 schema:: tableKey 时，表示到行数据中找相应的字段）\n                paramKey: rowValueKey, // \n                // userId: 'schema:: tableKey', // 当格式为 schema:: tableKey 时，表示到行数据中找相应的字段\n              },\n            },// 按钮具体配置\n            ...elButtonConfig, // 标准 el-button 配置\n          }],\n        },\n\n        // search-bar 相关配置\n        searchConfig: {},\n        // 动态组件相关配置\n        componentConfig: {\n          // create-form 相关配置\n          createForm: {\n            title: '', // 表单标题\n            saveBtnText: '', // 保存按钮名称\n          },\n          editForm: {\n            mainKey: '', // 主键\n            title: '', // 表单标题\n            saveBtnText: '', // 保存按钮名称\n          },\n          detailPanel: {\n            mainKey: '', // 主键\n            title: '', // 表单标题\n            saveBtnText: '', // 保存按钮名称\n          },\n\n          // 支持用户动态扩展\n        },\n      },\n    },\n  ]\n}\n\n```\n","readmeFilename":"README.md"}