feat: add @nocobase/create-nocobase-app package
This commit is contained in:
parent
143ff2568c
commit
597c6484fb
5
packages/create-nocobase-app/.fatherrc.ts
Normal file
5
packages/create-nocobase-app/.fatherrc.ts
Normal file
@ -0,0 +1,5 @@
|
||||
export default {
|
||||
target: 'node',
|
||||
cjs: { type: 'babel', lazy: true },
|
||||
disableTypeCheck: true,
|
||||
};
|
1
packages/create-nocobase-app/.local
Executable file
1
packages/create-nocobase-app/.local
Executable file
@ -0,0 +1 @@
|
||||
Used in bin/create-nocobase-app.js to determine if it is in the local debug state.
|
7
packages/create-nocobase-app/.npmignore
Normal file
7
packages/create-nocobase-app/.npmignore
Normal file
@ -0,0 +1,7 @@
|
||||
node_modules
|
||||
*.log
|
||||
docs
|
||||
__tests__
|
||||
tsconfig.json
|
||||
src
|
||||
.fatherrc.ts
|
0
packages/create-nocobase-app/README.md
Executable file
0
packages/create-nocobase-app/README.md
Executable file
3
packages/create-nocobase-app/bin/create-nocobase-app.js
Executable file
3
packages/create-nocobase-app/bin/create-nocobase-app.js
Executable file
@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
require('../lib/cli');
|
23
packages/create-nocobase-app/package.json
Executable file
23
packages/create-nocobase-app/package.json
Executable file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"name": "@nocobase/create-nocobase-app",
|
||||
"version": "0.5.0-alpha.5",
|
||||
"main": "lib/index.js",
|
||||
"types": "lib/index.d.ts",
|
||||
"files": [
|
||||
"lib",
|
||||
"bin",
|
||||
"templates"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/nocobase/nocobase.git",
|
||||
"directory": "packages/create-nocobase-app"
|
||||
},
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@umijs/utils": "3.5.17"
|
||||
},
|
||||
"bin": {
|
||||
"create-nocobase-app": "bin/create-nocobase-app.js"
|
||||
}
|
||||
}
|
15
packages/create-nocobase-app/src/AppGenerator/AppGenerator.ts
Executable file
15
packages/create-nocobase-app/src/AppGenerator/AppGenerator.ts
Executable file
@ -0,0 +1,15 @@
|
||||
import { Generator } from '@umijs/utils';
|
||||
import { join } from 'path';
|
||||
|
||||
export default class AppGenerator extends Generator {
|
||||
async writing() {
|
||||
this.copyDirectory({
|
||||
context: {
|
||||
version: require('../../package').version,
|
||||
conventionRoutes: this.args.conventionRoutes,
|
||||
},
|
||||
path: join(__dirname, '../../templates/AppGenerator'),
|
||||
target: this.cwd,
|
||||
});
|
||||
}
|
||||
}
|
0
packages/create-nocobase-app/src/app.ts
Executable file
0
packages/create-nocobase-app/src/app.ts
Executable file
30
packages/create-nocobase-app/src/cli.ts
Executable file
30
packages/create-nocobase-app/src/cli.ts
Executable file
@ -0,0 +1,30 @@
|
||||
import { chalk, yParser } from '@umijs/utils';
|
||||
import { existsSync } from 'fs';
|
||||
import { join } from 'path';
|
||||
|
||||
const args = yParser(process.argv.slice(2), {
|
||||
alias: {
|
||||
version: ['v'],
|
||||
help: ['h'],
|
||||
},
|
||||
boolean: ['version'],
|
||||
});
|
||||
|
||||
if (args.version && !args._[0]) {
|
||||
args._[0] = 'version';
|
||||
const local = existsSync(join(__dirname, '../.local'))
|
||||
? chalk.cyan('@local')
|
||||
: '';
|
||||
const { name, version } = require('../package.json');
|
||||
console.log(`${name}@${version}${local}`);
|
||||
} else {
|
||||
require('./')
|
||||
.default({
|
||||
cwd: process.cwd(),
|
||||
args,
|
||||
})
|
||||
.catch((err: Error) => {
|
||||
console.error(`Create failed, ${err.message}`);
|
||||
console.error(err);
|
||||
});
|
||||
}
|
19
packages/create-nocobase-app/src/index.test.ts
Executable file
19
packages/create-nocobase-app/src/index.test.ts
Executable file
@ -0,0 +1,19 @@
|
||||
import { rimraf } from '@umijs/utils';
|
||||
import { existsSync } from 'fs';
|
||||
import { join } from 'path';
|
||||
import runGenerator from './index';
|
||||
|
||||
const fixtures = join(__dirname, 'fixtures');
|
||||
const cwd = join(fixtures, 'generate');
|
||||
|
||||
test('generate app', async () => {
|
||||
await runGenerator({
|
||||
cwd,
|
||||
args: {
|
||||
_: [],
|
||||
$0: '',
|
||||
},
|
||||
});
|
||||
expect(existsSync(join(cwd, 'src', 'pages', 'index.tsx'))).toEqual(true);
|
||||
rimraf.sync(cwd);
|
||||
});
|
16
packages/create-nocobase-app/src/index.ts
Executable file
16
packages/create-nocobase-app/src/index.ts
Executable file
@ -0,0 +1,16 @@
|
||||
import { yargs } from '@umijs/utils';
|
||||
import AppGenerator from './AppGenerator/AppGenerator';
|
||||
|
||||
export default async ({
|
||||
cwd,
|
||||
args,
|
||||
}: {
|
||||
cwd: string;
|
||||
args: yargs.Arguments;
|
||||
}) => {
|
||||
const generator = new AppGenerator({
|
||||
cwd,
|
||||
args,
|
||||
});
|
||||
await generator.run();
|
||||
};
|
16
packages/create-nocobase-app/templates/AppGenerator/.editorconfig
Executable file
16
packages/create-nocobase-app/templates/AppGenerator/.editorconfig
Executable file
@ -0,0 +1,16 @@
|
||||
# http://editorconfig.org
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[Makefile]
|
||||
indent_style = tab
|
20
packages/create-nocobase-app/templates/AppGenerator/.gitignore
vendored
Normal file
20
packages/create-nocobase-app/templates/AppGenerator/.gitignore
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
/npm-debug.log*
|
||||
/yarn-error.log
|
||||
/yarn.lock
|
||||
/package-lock.json
|
||||
|
||||
# production
|
||||
/dist
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
|
||||
# umi
|
||||
/src/.umi
|
||||
/src/.umi-production
|
||||
/src/.umi-test
|
||||
/.env.local
|
@ -0,0 +1,8 @@
|
||||
**/*.md
|
||||
**/*.svg
|
||||
**/*.ejs
|
||||
**/*.html
|
||||
package.json
|
||||
.umi
|
||||
.umi-production
|
||||
.umi-test
|
@ -0,0 +1,11 @@
|
||||
{
|
||||
"singleQuote": true,
|
||||
"trailingComma": "all",
|
||||
"printWidth": 80,
|
||||
"overrides": [
|
||||
{
|
||||
"files": ".prettierrc",
|
||||
"options": { "parser": "json" }
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
import { defineConfig } from 'umi';
|
||||
import dotenv from 'dotenv';
|
||||
import path from 'path';
|
||||
|
||||
dotenv.config({
|
||||
path: path.resolve(__dirname, '../../.env'),
|
||||
});
|
||||
|
||||
export default defineConfig({
|
||||
nodeModulesTransform: {
|
||||
type: 'none',
|
||||
},
|
||||
define: {
|
||||
'process.env.API_URL': process.env.API_URL,
|
||||
'process.env.API_PORT': process.env.API_PORT,
|
||||
},
|
||||
proxy: {
|
||||
'/api': {
|
||||
'target': `http://localhost:${process.env.API_PORT}/`,
|
||||
'changeOrigin': true,
|
||||
'pathRewrite': { '^/api': '/api' },
|
||||
},
|
||||
},
|
||||
routes: [
|
||||
{ path: '/', exact: false, component: '@/pages/index' },
|
||||
],
|
||||
fastRefresh: {},
|
||||
locale: {
|
||||
default: 'zh-CN',
|
||||
// antd: false,
|
||||
// title: false,
|
||||
baseNavigator: false,
|
||||
baseSeparator: '-',
|
||||
},
|
||||
});
|
@ -0,0 +1,15 @@
|
||||
# NocoBase
|
||||
|
||||
## Getting Started
|
||||
|
||||
Install dependencies,
|
||||
|
||||
```bash
|
||||
$ yarn
|
||||
```
|
||||
|
||||
Start the dev server,
|
||||
|
||||
```bash
|
||||
$ yarn start
|
||||
```
|
@ -0,0 +1,59 @@
|
||||
{
|
||||
"name": "root",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"start": "concurrently \"npm run start-server\" \"umi dev\"",
|
||||
"start-client": "umi dev",
|
||||
"start-server": "ts-node-dev -r dotenv/config --project tsconfig.apis.json ./src/apis/index.ts",
|
||||
"build": "npm run build-server && npm run build-client",
|
||||
"build-client": "umi build",
|
||||
"build-server": "rimraf -rf lib && tsc --project tsconfig.apis.json",
|
||||
"postinstall": "umi generate tmp",
|
||||
"prettier": "prettier --write '**/*.{js,jsx,tsx,ts,less,md,json}'",
|
||||
"test": "umi-test",
|
||||
"test:coverage": "umi-test --coverage"
|
||||
},
|
||||
"gitHooks": {
|
||||
"pre-commit": "lint-staged"
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.{js,jsx,less,md,json}": [
|
||||
"prettier --write"
|
||||
],
|
||||
"*.ts?(x)": [
|
||||
"prettier --parser=typescript --write"
|
||||
]
|
||||
},
|
||||
"dependencies": {
|
||||
"@nocobase/plugin-action-logs": "^0.5.0-alpha.2",
|
||||
"@nocobase/plugin-china-region": "^0.5.0-alpha.2",
|
||||
"@nocobase/plugin-client": "^0.5.0-alpha.2",
|
||||
"@nocobase/plugin-collections": "^0.5.0-alpha.2",
|
||||
"@nocobase/plugin-file-manager": "^0.5.0-alpha.2",
|
||||
"@nocobase/plugin-multi-apps": "^0.5.0-alpha.2",
|
||||
"@nocobase/plugin-permissions": "^0.5.0-alpha.2",
|
||||
"@nocobase/plugin-ui-router": "^0.5.0-alpha.2",
|
||||
"@nocobase/plugin-ui-schema": "^0.5.0-alpha.2",
|
||||
"@nocobase/plugin-users": "^0.5.0-alpha.2",
|
||||
"@nocobase/server": "^0.5.0-alpha.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@nocobase/client": "^0.5.0-alpha.2",
|
||||
"@types/react": "^17.0.0",
|
||||
"@types/react-dom": "^17.0.0",
|
||||
"@umijs/preset-react": "1.x",
|
||||
"@umijs/test": "^3.4.15",
|
||||
"concurrently": "^5.3.0",
|
||||
"core-js": "^3.18.2",
|
||||
"cross-env": "^7.0.3",
|
||||
"micromark": "^3.0.6",
|
||||
"mockjs": "^1.1.0",
|
||||
"prettier": "^2.2.0",
|
||||
"react": "17.x",
|
||||
"react-dom": "17.x",
|
||||
"ts-node-dev": "^1.1.8",
|
||||
"typescript": "4.1.5",
|
||||
"umi": "^3.0.0",
|
||||
"yorkie": "^2.0.0"
|
||||
}
|
||||
}
|
@ -0,0 +1,71 @@
|
||||
import Server from '@nocobase/server';
|
||||
import path from 'path';
|
||||
|
||||
const start = Date.now();
|
||||
|
||||
const api = new Server({
|
||||
database: {
|
||||
username: process.env.DB_USER,
|
||||
password: process.env.DB_PASSWORD,
|
||||
database: process.env.DB_DATABASE,
|
||||
host: process.env.DB_HOST,
|
||||
port: process.env.DB_PORT as any,
|
||||
dialect: process.env.DB_DIALECT as any,
|
||||
dialectOptions: {
|
||||
charset: 'utf8mb4',
|
||||
collate: 'utf8mb4_unicode_ci',
|
||||
},
|
||||
pool: {
|
||||
max: 5,
|
||||
min: 0,
|
||||
acquire: 60000,
|
||||
idle: 10000,
|
||||
},
|
||||
logging: process.env.DB_LOG_SQL === 'on' ? console.log : false,
|
||||
define: {},
|
||||
sync: {
|
||||
force: false,
|
||||
alter: {
|
||||
drop: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
resourcer: {
|
||||
prefix: '/api',
|
||||
},
|
||||
});
|
||||
|
||||
const plugins = [
|
||||
'@nocobase/plugin-ui-router',
|
||||
'@nocobase/plugin-ui-schema',
|
||||
'@nocobase/plugin-collections',
|
||||
'@nocobase/plugin-users',
|
||||
'@nocobase/plugin-action-logs',
|
||||
'@nocobase/plugin-file-manager',
|
||||
'@nocobase/plugin-permissions',
|
||||
'@nocobase/plugin-export',
|
||||
'@nocobase/plugin-system-settings',
|
||||
'@nocobase/plugin-china-region',
|
||||
];
|
||||
|
||||
for (const plugin of plugins) {
|
||||
api.plugin(
|
||||
require(`${plugin}/lib/server`).default,
|
||||
);
|
||||
}
|
||||
|
||||
api.plugin(
|
||||
require(`@nocobase/plugin-client/lib/server`).default, {
|
||||
dist: path.resolve(process.cwd(), './dist'),
|
||||
});
|
||||
|
||||
if (process.argv.length < 3) {
|
||||
// @ts-ignore
|
||||
process.argv.push('start', '--port', process.env.API_PORT);
|
||||
}
|
||||
|
||||
console.log(process.argv);
|
||||
|
||||
api.parse(process.argv).then(() => {
|
||||
console.log(`Start-up time: ${(Date.now() - start) / 1000}s`);
|
||||
});
|
@ -0,0 +1 @@
|
||||
import './css_browser_selector';
|
@ -0,0 +1,163 @@
|
||||
/*
|
||||
CSS Browser Selector 0.6.3
|
||||
Originally written by Rafael Lima (http://rafael.adm.br)
|
||||
http://rafael.adm.br/css_browser_selector
|
||||
License: http://creativecommons.org/licenses/by/2.5/
|
||||
Co-maintained by:
|
||||
https://github.com/verbatim/css_browser_selector
|
||||
*/
|
||||
|
||||
showLog=true;
|
||||
function log(m) {if ( window.console && showLog ) {console.log(m); } }
|
||||
|
||||
function css_browser_selector(u) {
|
||||
var uaInfo = {},
|
||||
screens = [320, 480, 640, 768, 1024, 1152, 1280, 1440, 1680, 1920, 2560],
|
||||
allScreens = screens.length,
|
||||
ua=u.toLowerCase(),
|
||||
is=function(t) { return RegExp(t,"i").test(ua); },
|
||||
version = function(p,n)
|
||||
{
|
||||
n=n.replace(".","_"); var i = n.indexOf('_'), ver="";
|
||||
while (i>0) {ver += " "+ p+n.substring(0,i);i = n.indexOf('_', i+1);}
|
||||
ver += " "+p+n; return ver;
|
||||
},
|
||||
g='gecko',
|
||||
w='webkit',
|
||||
c='chrome',
|
||||
f='firefox',
|
||||
s='safari',
|
||||
o='opera',
|
||||
m='mobile',
|
||||
a='android',
|
||||
bb='blackberry',
|
||||
lang='lang_',
|
||||
dv='device_',
|
||||
html=document.documentElement,
|
||||
b= [
|
||||
|
||||
// browser
|
||||
((!(/opera|webtv/i.test(ua))&&/msie\s(\d+)/.test(ua)||(/trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/.test(ua))))?('ie ie'+(/trident\/4\.0/.test(ua) ? '8' : RegExp.$1 == '11.0'?'11':RegExp.$1))
|
||||
:is('firefox/')?g+ " " + f+(/firefox\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua)?' '+f+RegExp.$2 + ' '+f+RegExp.$2+"_"+RegExp.$4:'')
|
||||
:is('gecko/')?g
|
||||
:is('opera')?o+(/version\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua)?' '+o+RegExp.$2 + ' '+o+RegExp.$2+"_"+RegExp.$4 : (/opera(\s|\/)(\d+)\.(\d+)/.test(ua)?' '+o+RegExp.$2+" "+o+RegExp.$2+"_"+RegExp.$3:''))
|
||||
:is('konqueror')?'konqueror'
|
||||
|
||||
:is('blackberry') ?
|
||||
( bb +
|
||||
( /Version\/(\d+)(\.(\d+)+)/i.test(ua)
|
||||
? " " + bb+ RegExp.$1 + " "+bb+ RegExp.$1+RegExp.$2.replace('.','_')
|
||||
: (/Blackberry ?(([0-9]+)([a-z]?))[\/|;]/gi.test(ua)
|
||||
? ' ' +bb+RegExp.$2 + (RegExp.$3?' ' +bb+RegExp.$2+RegExp.$3:'')
|
||||
: '')
|
||||
)
|
||||
) // blackberry
|
||||
|
||||
:is('android') ?
|
||||
( a +
|
||||
( /Version\/(\d+)(\.(\d+))+/i.test(ua)
|
||||
? " " + a+ RegExp.$1 + " "+a+ RegExp.$1+RegExp.$2.replace('.','_')
|
||||
: '')
|
||||
+ (/Android (.+); (.+) Build/i.test(ua)
|
||||
? ' '+dv+( (RegExp.$2).replace(/ /g,"_") ).replace(/-/g,"_")
|
||||
:'' )
|
||||
) //android
|
||||
|
||||
:is('chrome')?w+ ' '+c+(/chrome\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua)?' '+c+RegExp.$2 +((RegExp.$4>0) ? ' '+c+RegExp.$2+"_"+RegExp.$4:''):'')
|
||||
|
||||
:is('iron')?w+' iron'
|
||||
|
||||
:is('applewebkit/') ?
|
||||
( w+ ' '+ s +
|
||||
( /version\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua)
|
||||
? ' '+ s +RegExp.$2 + " "+s+ RegExp.$2+RegExp.$3.replace('.','_')
|
||||
: ( / Safari\/(\d+)/i.test(ua)
|
||||
?
|
||||
( (RegExp.$1=="419" || RegExp.$1=="417" || RegExp.$1=="416" || RegExp.$1=="412" ) ? ' '+ s + '2_0'
|
||||
: RegExp.$1=="312" ? ' '+ s + '1_3'
|
||||
: RegExp.$1=="125" ? ' '+ s + '1_2'
|
||||
: RegExp.$1=="85" ? ' '+ s + '1_0'
|
||||
: '' )
|
||||
:'')
|
||||
)
|
||||
) //applewebkit
|
||||
|
||||
:is('mozilla/')?g
|
||||
:''
|
||||
|
||||
// mobile
|
||||
,is("android|mobi|mobile|j2me|iphone|ipod|ipad|blackberry|playbook|kindle|silk")?m:''
|
||||
|
||||
// os/platform
|
||||
,is('j2me')?'j2me'
|
||||
:is('ipad|ipod|iphone')?
|
||||
(
|
||||
(
|
||||
/CPU( iPhone)? OS (\d+[_|\.]\d+([_|\.]\d+)*)/i.test(ua) ?
|
||||
'ios' + version('ios',RegExp.$2) : ''
|
||||
) + ' ' + ( /(ip(ad|od|hone))/gi.test(ua) ? RegExp.$1 : "" )
|
||||
) //'iphone'
|
||||
//:is('ipod')?'ipod'
|
||||
//:is('ipad')?'ipad'
|
||||
:is('playbook')?'playbook'
|
||||
:is('kindle|silk')?'kindle'
|
||||
:is('playbook')?'playbook'
|
||||
:is('mac')?'mac'+ (/mac os x ((\d+)[.|_](\d+))/.test(ua) ? ( ' mac' + (RegExp.$2) + ' mac' + (RegExp.$1).replace('.',"_") ) : '' )
|
||||
:is('win')?'win'+
|
||||
(is('windows nt 6.2')?' win8'
|
||||
:is('windows nt 6.1')?' win7'
|
||||
:is('windows nt 6.0')?' vista'
|
||||
:is('windows nt 5.2') || is('windows nt 5.1') ? ' win_xp'
|
||||
:is('windows nt 5.0')?' win_2k'
|
||||
:is('windows nt 4.0') || is('WinNT4.0') ?' win_nt'
|
||||
: ''
|
||||
)
|
||||
:is('freebsd')?'freebsd'
|
||||
:(is('x11|linux'))?'linux'
|
||||
:''
|
||||
|
||||
// user agent language
|
||||
,(/[; |\[](([a-z]{2})(\-[a-z]{2})?)[)|;|\]]/i.test(ua))?(lang+RegExp.$2).replace("-","_")+(RegExp.$3!=''?(' '+lang+RegExp.$1).replace("-","_"):''):''
|
||||
|
||||
// beta: test if running iPad app
|
||||
,( is('ipad|iphone|ipod') && !is('safari') ) ? 'ipad_app' : ''
|
||||
|
||||
|
||||
]; // b
|
||||
|
||||
console.debug(ua);
|
||||
|
||||
function screenSize() {
|
||||
var w = window.outerWidth || html.clientWidth;
|
||||
var h = window.outerHeight || html.clientHeight;
|
||||
uaInfo.orientation = ((w<h) ? "portrait" : "landscape");
|
||||
// remove previous min-width, max-width, client-width, client-height, and orientation
|
||||
html.className = html.className.replace(/ ?orientation_\w+/g, "").replace(/ [min|max|cl]+[w|h]_\d+/g, "")
|
||||
for (var i=(allScreens-1);i>=0;i--) { if (w >= screens[i] ) { uaInfo.maxw = screens[i]; break; }}
|
||||
widthClasses="";
|
||||
for (var info in uaInfo) { widthClasses+=" "+info+"_"+ uaInfo[info] };
|
||||
html.className = ( html.className +widthClasses );
|
||||
return widthClasses;
|
||||
} // screenSize
|
||||
|
||||
window.onresize = screenSize;
|
||||
screenSize();
|
||||
|
||||
function retina(){
|
||||
var r = window.devicePixelRatio > 1;
|
||||
if (r) {
|
||||
html.className+=' retina';
|
||||
}
|
||||
else {
|
||||
html.className+=' non-retina';
|
||||
}
|
||||
}
|
||||
retina();
|
||||
|
||||
var cssbs = (b.join(' ')) + " js ";
|
||||
html.className = ( cssbs + html.className.replace(/\b(no[-|_]?)?js\b/g,"") ).replace(/^ /, "").replace(/ +/g," ");
|
||||
|
||||
return cssbs;
|
||||
}
|
||||
|
||||
css_browser_selector(navigator.userAgent);
|
@ -0,0 +1,27 @@
|
||||
.win {
|
||||
/* width */
|
||||
::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
}
|
||||
|
||||
/* Track */
|
||||
::-webkit-scrollbar-track {
|
||||
background: #f1f1f1;
|
||||
}
|
||||
|
||||
/* Handle */
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: #c0c0c0;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
/* Handle on hover */
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background: #a8a8a8;
|
||||
}
|
||||
|
||||
.rc-virtual-list-scrollbar-thumb {
|
||||
background: #c0c0c0 !important;
|
||||
}
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
.title {
|
||||
background: rgb(121, 242, 157);
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
import 'antd/dist/antd.css';
|
||||
import { useRequest } from 'ahooks';
|
||||
import { Spin } from 'antd';
|
||||
import React, { useMemo } from 'react';
|
||||
import { MemoryRouter as Router } from 'react-router-dom';
|
||||
import {
|
||||
createRouteSwitch,
|
||||
AdminLayout,
|
||||
AuthLayout,
|
||||
RouteSchemaRenderer,
|
||||
ConfigProvider,
|
||||
ClientSDK,
|
||||
} from '@nocobase/client';
|
||||
import { extend } from 'umi-request';
|
||||
|
||||
console.log(`${location.protocol}//${location.hostname}:${process.env.API_PORT}/api/`);
|
||||
|
||||
const request = extend({
|
||||
prefix: `${location.protocol}//${location.hostname}:${process.env.API_PORT}/api/`,
|
||||
timeout: 30000,
|
||||
});
|
||||
|
||||
request.use(async (ctx, next) => {
|
||||
const { headers } = ctx.req.options as any;
|
||||
const token = localStorage.getItem('NOCOBASE_TOKEN');
|
||||
if (token) {
|
||||
headers['Authorization'] = `Bearer ${token}`;
|
||||
}
|
||||
headers['X-Hostname'] = window.location.hostname;
|
||||
await next();
|
||||
});
|
||||
|
||||
const client = new ClientSDK({ request });
|
||||
|
||||
const RouteSwitch = createRouteSwitch({
|
||||
components: {
|
||||
AdminLayout,
|
||||
AuthLayout,
|
||||
RouteSchemaRenderer,
|
||||
},
|
||||
});
|
||||
|
||||
const App = () => {
|
||||
const { data, loading } = useRequest('routes:getAccessible', {
|
||||
formatResult: (result) => result?.data,
|
||||
});
|
||||
|
||||
if (loading) {
|
||||
return <Spin />;
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<RouteSwitch routes={data} />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default function IndexPage() {
|
||||
return (
|
||||
<ConfigProvider client={client}>
|
||||
<App />
|
||||
</ConfigProvider>
|
||||
);
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"esModuleInterop": true,
|
||||
"moduleResolution": "node",
|
||||
"jsx": "react",
|
||||
"module": "commonjs",
|
||||
"target": "ES6",
|
||||
"allowJs": false,
|
||||
"noUnusedLocals": false,
|
||||
"removeComments": true,
|
||||
"preserveConstEnums": true,
|
||||
"sourceMap": true,
|
||||
"declaration": true,
|
||||
"experimentalDecorators": true,
|
||||
"downlevelIteration": true,
|
||||
"baseUrl": ".",
|
||||
"outDir": "./lib/apis",
|
||||
"paths": {
|
||||
}
|
||||
},
|
||||
"include": [
|
||||
"src/apis",
|
||||
]
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "esnext",
|
||||
"module": "esnext",
|
||||
"moduleResolution": "node",
|
||||
"importHelpers": true,
|
||||
"jsx": "react-jsx",
|
||||
"esModuleInterop": true,
|
||||
"sourceMap": true,
|
||||
"baseUrl": "./",
|
||||
"strict": true,
|
||||
"paths": {
|
||||
"@/*": ["src/*"],
|
||||
"@@/*": ["src/.umi/*"]
|
||||
},
|
||||
"allowSyntheticDefaultImports": true
|
||||
},
|
||||
"include": [
|
||||
"mock/**/*",
|
||||
"src/**/*",
|
||||
"config/**/*",
|
||||
".umirc.ts",
|
||||
"typings.d.ts"
|
||||
],
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"lib",
|
||||
"es",
|
||||
"dist",
|
||||
"typings",
|
||||
"**/__test__",
|
||||
"test",
|
||||
"docs",
|
||||
"tests"
|
||||
]
|
||||
}
|
10
packages/create-nocobase-app/templates/AppGenerator/typings.d.ts
vendored
Normal file
10
packages/create-nocobase-app/templates/AppGenerator/typings.d.ts
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
declare module '*.css';
|
||||
declare module '*.less';
|
||||
declare module '*.png';
|
||||
declare module '*.svg' {
|
||||
export function ReactComponent(
|
||||
props: React.SVGProps<SVGSVGElement>,
|
||||
): React.ReactElement;
|
||||
const url: string;
|
||||
export default url;
|
||||
}
|
Loading…
Reference in New Issue
Block a user