From a39d82e6527ea67d8bebb5f4f2fbc0dcd451194d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8B=E7=BE=8A?= Date: Wed, 26 Feb 2020 09:08:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0skeleton?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/editor-framework/README.md | 2 +- packages/editor-framework/package.json | 4 +- packages/editor-skeleton/.editorconfig | 12 +++ packages/editor-skeleton/.eslintignore | 11 +++ packages/editor-skeleton/.eslintrc.js | 7 ++ packages/editor-skeleton/.gitignore | 20 +++++ packages/editor-skeleton/.stylelintignore | 7 ++ packages/editor-skeleton/.stylelintrc.js | 3 + packages/editor-skeleton/README.md | 1 + packages/editor-skeleton/abc.json | 4 + packages/editor-skeleton/ice.config.js | 30 +++++++ packages/editor-skeleton/jsconfig.json | 9 +++ packages/editor-skeleton/package.json | 47 +++++++++++ packages/editor-skeleton/public/favicon.png | Bin 0 -> 2719 bytes packages/editor-skeleton/public/index.html | 13 ++++ .../src/components/Greeting/index.tsx | 15 ++++ .../src/components/Guide/index.module.scss | 11 +++ .../src/components/Guide/index.tsx | 71 +++++++++++++++++ packages/editor-skeleton/src/config/menu.ts | 5 ++ packages/editor-skeleton/src/config/routes.ts | 21 +++++ packages/editor-skeleton/src/global.scss | 6 ++ packages/editor-skeleton/src/index.tsx | 13 ++++ .../src/layouts/BasicLayout/index.tsx | 9 +++ .../src/pages/Dashboard/index.tsx | 12 +++ packages/editor-skeleton/src/router.tsx | 73 ++++++++++++++++++ packages/editor-skeleton/tests/index.js | 1 + packages/editor-skeleton/tsconfig.json | 31 ++++++++ 27 files changed, 435 insertions(+), 3 deletions(-) create mode 100644 packages/editor-skeleton/.editorconfig create mode 100644 packages/editor-skeleton/.eslintignore create mode 100644 packages/editor-skeleton/.eslintrc.js create mode 100644 packages/editor-skeleton/.gitignore create mode 100644 packages/editor-skeleton/.stylelintignore create mode 100644 packages/editor-skeleton/.stylelintrc.js create mode 100644 packages/editor-skeleton/README.md create mode 100644 packages/editor-skeleton/abc.json create mode 100644 packages/editor-skeleton/ice.config.js create mode 100644 packages/editor-skeleton/jsconfig.json create mode 100644 packages/editor-skeleton/package.json create mode 100644 packages/editor-skeleton/public/favicon.png create mode 100644 packages/editor-skeleton/public/index.html create mode 100644 packages/editor-skeleton/src/components/Greeting/index.tsx create mode 100644 packages/editor-skeleton/src/components/Guide/index.module.scss create mode 100644 packages/editor-skeleton/src/components/Guide/index.tsx create mode 100644 packages/editor-skeleton/src/config/menu.ts create mode 100644 packages/editor-skeleton/src/config/routes.ts create mode 100644 packages/editor-skeleton/src/global.scss create mode 100644 packages/editor-skeleton/src/index.tsx create mode 100644 packages/editor-skeleton/src/layouts/BasicLayout/index.tsx create mode 100644 packages/editor-skeleton/src/pages/Dashboard/index.tsx create mode 100644 packages/editor-skeleton/src/router.tsx create mode 100644 packages/editor-skeleton/tests/index.js create mode 100644 packages/editor-skeleton/tsconfig.json diff --git a/packages/editor-framework/README.md b/packages/editor-framework/README.md index eb99c606a..8a6fb13f0 100644 --- a/packages/editor-framework/README.md +++ b/packages/editor-framework/README.md @@ -1 +1 @@ -编辑器框架 +## todo diff --git a/packages/editor-framework/package.json b/packages/editor-framework/package.json index 8866b4a77..ebcbe65db 100644 --- a/packages/editor-framework/package.json +++ b/packages/editor-framework/package.json @@ -1,7 +1,7 @@ { - "name": "editor-framework", + "name": "@ali/lowcode-engine-editor", "version": "0.0.1", - "description": "alibaba lowcode editor framework", + "description": "alibaba lowcode editor core", "files": [ "demo/", "es/", diff --git a/packages/editor-skeleton/.editorconfig b/packages/editor-skeleton/.editorconfig new file mode 100644 index 000000000..5760be583 --- /dev/null +++ b/packages/editor-skeleton/.editorconfig @@ -0,0 +1,12 @@ +# http://editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/packages/editor-skeleton/.eslintignore b/packages/editor-skeleton/.eslintignore new file mode 100644 index 000000000..3b437e614 --- /dev/null +++ b/packages/editor-skeleton/.eslintignore @@ -0,0 +1,11 @@ +# 忽略目录 +build/ +tests/ +demo/ + +# node 覆盖率文件 +coverage/ + +# 忽略文件 +**/*-min.js +**/*.min.js diff --git a/packages/editor-skeleton/.eslintrc.js b/packages/editor-skeleton/.eslintrc.js new file mode 100644 index 000000000..18ae6baa7 --- /dev/null +++ b/packages/editor-skeleton/.eslintrc.js @@ -0,0 +1,7 @@ +const { eslint, deepmerge } = require('@ice/spec'); + +module.exports = deepmerge(eslint, { + rules: { + "global-require": 0, + }, +}); diff --git a/packages/editor-skeleton/.gitignore b/packages/editor-skeleton/.gitignore new file mode 100644 index 000000000..c590da5b0 --- /dev/null +++ b/packages/editor-skeleton/.gitignore @@ -0,0 +1,20 @@ +# See https://help.github.com/ignore-files/ for more about ignoring files. + +# dependencies +/node_modules + +# production +/build +/dist + +# misc +.idea/ +.happypack +.DS_Store + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# ignore d.ts auto generated by css-modules-typescript-loader +*.module.scss.d.ts \ No newline at end of file diff --git a/packages/editor-skeleton/.stylelintignore b/packages/editor-skeleton/.stylelintignore new file mode 100644 index 000000000..82af6f60d --- /dev/null +++ b/packages/editor-skeleton/.stylelintignore @@ -0,0 +1,7 @@ +# 忽略目录 +build/ +tests/ +demo/ + +# node 覆盖率文件 +coverage/ diff --git a/packages/editor-skeleton/.stylelintrc.js b/packages/editor-skeleton/.stylelintrc.js new file mode 100644 index 000000000..eeb605b33 --- /dev/null +++ b/packages/editor-skeleton/.stylelintrc.js @@ -0,0 +1,3 @@ +const { stylelint } = require('@ice/spec'); + +module.exports = stylelint; diff --git a/packages/editor-skeleton/README.md b/packages/editor-skeleton/README.md new file mode 100644 index 000000000..8a6fb13f0 --- /dev/null +++ b/packages/editor-skeleton/README.md @@ -0,0 +1 @@ +## todo diff --git a/packages/editor-skeleton/abc.json b/packages/editor-skeleton/abc.json new file mode 100644 index 000000000..dce1f92ed --- /dev/null +++ b/packages/editor-skeleton/abc.json @@ -0,0 +1,4 @@ +{ + "type": "ice-scripts", + "builder": "@ali/builder-ice-scripts" +} diff --git a/packages/editor-skeleton/ice.config.js b/packages/editor-skeleton/ice.config.js new file mode 100644 index 000000000..f905f88e8 --- /dev/null +++ b/packages/editor-skeleton/ice.config.js @@ -0,0 +1,30 @@ +const path = require('path'); + +module.exports = { + entry: 'src/index.tsx', + publicPath: './', + alias: { + '@': path.resolve(__dirname, './src'), + }, + plugins: [ + ['ice-plugin-fusion', { + themePackage: '@icedesign/theme', + }], + ['ice-plugin-moment-locales', { + locales: ['zh-cn'], + }], + ], + chainWebpack: (config) => { + // 修改对应 css module的 loader,默认修改 scss-module 同理可以修改 css-module 和 less-module 规则 + ['scss-module'].forEach((rule) => { + if (config.module.rules.get(rule)) { + config.module.rule(rule).use('ts-css-module-loader') + .loader(require.resolve('css-modules-typescript-loader')) + .options({ modules: true, sass: true }); + // 指定应用loader的位置 + config.module.rule(rule).use('ts-css-module-loader').before('css-loader'); + } + }); + }, +}; + diff --git a/packages/editor-skeleton/jsconfig.json b/packages/editor-skeleton/jsconfig.json new file mode 100644 index 000000000..9e0f3c03d --- /dev/null +++ b/packages/editor-skeleton/jsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "jsx": "react", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/packages/editor-skeleton/package.json b/packages/editor-skeleton/package.json new file mode 100644 index 000000000..7ada377d0 --- /dev/null +++ b/packages/editor-skeleton/package.json @@ -0,0 +1,47 @@ +{ + "name": "@ali/lowcode-engine-skeleton", + "version": "0.0.1", + "description": "alibaba lowcode editor skeleton", + "author": "xiayang.xy", + "dependencies": { + "@alifd/next": "^1.x", + "@icedesign/theme": "^1.x", + "@types/react": "^16.8.3", + "@types/react-dom": "^16.8.2", + "moment": "^2.23.0", + "prop-types": "^15.5.8", + "react": "^16.4.1", + "react-dom": "^16.4.1", + "react-router-dom": "^5.0.1" + }, + "devDependencies": { + "@ice/spec": "^0.1.1", + "css-modules-typescript-loader": "^2.0.4", + "eslint": "^6.0.1", + "ice-plugin-fusion": "^0.1.4", + "ice-plugin-moment-locales": "^0.1.0", + "ice-scripts": "^2.0.0", + "stylelint": "^10.1.0" + }, + "scripts": { + "start": "ice-scripts dev", + "build": "ice-scripts build", + "lint": "npm run eslint && npm run stylelint", + "eslint": "eslint --cache --ext .js,.jsx ./", + "stylelint": "stylelint ./**/*.scss" + }, + "engines": { + "node": ">=8.0.0" + }, + "iceworks": { + "type": "react", + "adapter": "adapter-react-v3" + }, + "ideMode": { + "name": "ice-react" + }, + "repository": { + "type": "git", + "url": "https://github.com/ice-lab/react-materials/tree/master/scaffolds/ice-ts" + } +} diff --git a/packages/editor-skeleton/public/favicon.png b/packages/editor-skeleton/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..a2605c57e9d85aabd689ff5c565286dee148ab6d GIT binary patch literal 2719 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 literal 0 HcmV?d00001 diff --git a/packages/editor-skeleton/public/index.html b/packages/editor-skeleton/public/index.html new file mode 100644 index 000000000..5c0692966 --- /dev/null +++ b/packages/editor-skeleton/public/index.html @@ -0,0 +1,13 @@ + + + + + + + ICE TypeScript Starter + + + +
+ + diff --git a/packages/editor-skeleton/src/components/Greeting/index.tsx b/packages/editor-skeleton/src/components/Greeting/index.tsx new file mode 100644 index 000000000..b9369ed63 --- /dev/null +++ b/packages/editor-skeleton/src/components/Greeting/index.tsx @@ -0,0 +1,15 @@ +import React from 'react'; + +export interface Props { + name: string; +} + +const Greeting = ({ name }: Props) => { + return ( +
+ Hello, {name} +
+ ); +}; + +export default Greeting; diff --git a/packages/editor-skeleton/src/components/Guide/index.module.scss b/packages/editor-skeleton/src/components/Guide/index.module.scss new file mode 100644 index 000000000..eeb4e21aa --- /dev/null +++ b/packages/editor-skeleton/src/components/Guide/index.module.scss @@ -0,0 +1,11 @@ +.item { + height: 34px; + line-height: 34px; +} +.title { + text-align: center; +} +.container { + width: 470px; + margin: 40px auto; +} \ No newline at end of file diff --git a/packages/editor-skeleton/src/components/Guide/index.tsx b/packages/editor-skeleton/src/components/Guide/index.tsx new file mode 100644 index 000000000..9a07b5789 --- /dev/null +++ b/packages/editor-skeleton/src/components/Guide/index.tsx @@ -0,0 +1,71 @@ +import React from 'react'; +import { Button } from '@alifd/next'; +import styles from './index.module.scss'; + +const Guide = () => { + return ( +
+

使用指南

+
    +
  • + 1. 该模板适用于从 0 到 1 开始搭建项目,内置引导页面,路由和菜单展示。 +
  • +
  • 2. 菜单配置: menuConfig.js。
  • +
  • 3. 路由配置: routerConfig.js。
  • +
  • + 4. 通过 GUI 工具{' '} + + Iceworks + {' '} + 创建页面,会同步的更新菜单和路由配置。 +
  • +
  • + 5. 基于{' '} + + 物料 + {' '} + 生成的页面将会添加在 pages 目录。 +
  • +
  • + 6. 让前端工程变的轻松便捷, + + 下载 iceworks + {' '} + 。 +
  • +
+ +
+ ); +}; + +export default Guide; diff --git a/packages/editor-skeleton/src/config/menu.ts b/packages/editor-skeleton/src/config/menu.ts new file mode 100644 index 000000000..e3c4c9e37 --- /dev/null +++ b/packages/editor-skeleton/src/config/menu.ts @@ -0,0 +1,5 @@ +// 菜单配置 + +const asideMenuConfig = []; + +export { asideMenuConfig }; diff --git a/packages/editor-skeleton/src/config/routes.ts b/packages/editor-skeleton/src/config/routes.ts new file mode 100644 index 000000000..5d63e83cc --- /dev/null +++ b/packages/editor-skeleton/src/config/routes.ts @@ -0,0 +1,21 @@ +import Dashboard from '@/pages/Dashboard'; +import BasicLayout from '@/layouts/BasicLayout'; + +const routerConfig = [ + { + path: '/', + component: BasicLayout, + children: [ + { + path: '/dashboard', + component: Dashboard, + }, + { + path: '/', + redirect: '/dashboard', + } + ], + }, +]; + +export default routerConfig; diff --git a/packages/editor-skeleton/src/global.scss b/packages/editor-skeleton/src/global.scss new file mode 100644 index 000000000..6086b53a6 --- /dev/null +++ b/packages/editor-skeleton/src/global.scss @@ -0,0 +1,6 @@ +// 引入默认全局样式 +@import '@alifd/next/reset.scss'; + +body { + -webkit-font-smoothing: antialiased; +} \ No newline at end of file diff --git a/packages/editor-skeleton/src/index.tsx b/packages/editor-skeleton/src/index.tsx new file mode 100644 index 000000000..ba347d027 --- /dev/null +++ b/packages/editor-skeleton/src/index.tsx @@ -0,0 +1,13 @@ +import ReactDOM from 'react-dom'; + +import './global.scss'; + +import router from './router'; + +const ICE_CONTAINER = document.getElementById('ice-container'); + +if (!ICE_CONTAINER) { + throw new Error('当前页面不存在
节点.'); +} + +ReactDOM.render(router(), ICE_CONTAINER); diff --git a/packages/editor-skeleton/src/layouts/BasicLayout/index.tsx b/packages/editor-skeleton/src/layouts/BasicLayout/index.tsx new file mode 100644 index 000000000..b45f3c44e --- /dev/null +++ b/packages/editor-skeleton/src/layouts/BasicLayout/index.tsx @@ -0,0 +1,9 @@ +import React from 'react'; + +export default function BasicLayout({ children }) { + return ( +
+ {children} +
+ ); +} diff --git a/packages/editor-skeleton/src/pages/Dashboard/index.tsx b/packages/editor-skeleton/src/pages/Dashboard/index.tsx new file mode 100644 index 000000000..2130cc8ce --- /dev/null +++ b/packages/editor-skeleton/src/pages/Dashboard/index.tsx @@ -0,0 +1,12 @@ +import React from 'react'; +import Guide from '@/components/Guide'; +import Greeting from '@/components/Greeting'; + +export default function Dashboard() { + return ( +
+ + +
+ ); +} diff --git a/packages/editor-skeleton/src/router.tsx b/packages/editor-skeleton/src/router.tsx new file mode 100644 index 000000000..e260e72c8 --- /dev/null +++ b/packages/editor-skeleton/src/router.tsx @@ -0,0 +1,73 @@ +import React from 'react'; +import { HashRouter as Router, Switch, Route, Redirect } from 'react-router-dom'; +import path from 'path'; +import routes from '@/config/routes'; + +const RouteItem = (props) => { + const { redirect, path: routePath, component, key } = props; + if (redirect) { + return ( + + ); + } + return ( + + ); +}; + +const router = () => { + return ( + + + {routes.map((route, id) => { + const { component: RouteComponent, children, ...others } = route; + return ( + { + return ( + children ? ( + + + {children.map((routeChild, idx) => { + const { redirect, path: childPath, component } = routeChild; + return RouteItem({ + key: `${id}-${idx}`, + redirect, + path: childPath && path.join(route.path, childPath), + component, + }); + })} + + + ) : ( + <> + { + RouteItem({ + key: id, + ...route, + }) + } + + ) + ); + }} + /> + ); + })} + + + ); +}; + +export default router; diff --git a/packages/editor-skeleton/tests/index.js b/packages/editor-skeleton/tests/index.js new file mode 100644 index 000000000..346e384d2 --- /dev/null +++ b/packages/editor-skeleton/tests/index.js @@ -0,0 +1 @@ +// test file diff --git a/packages/editor-skeleton/tsconfig.json b/packages/editor-skeleton/tsconfig.json new file mode 100644 index 000000000..3f5e62810 --- /dev/null +++ b/packages/editor-skeleton/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compileOnSave": false, + "buildOnSave": false, + "compilerOptions": { + "baseUrl": ".", + "outDir": "build", + "module": "esnext", + "target": "es6", + "jsx": "react", + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "lib": ["es6", "dom"], + "sourceMap": true, + "allowJs": true, + "rootDir": "src", + "forceConsistentCasingInFileNames": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noImplicitAny": false, + "importHelpers": true, + "strictNullChecks": true, + "suppressImplicitAnyIndexErrors": true, + "noUnusedLocals": true, + "skipLibCheck": true, + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src/*"], + "exclude": ["node_modules", "build", "public"] +}