Merge remote-tracking branch 'origin/main'
This commit is contained in:
commit
147b364d41
@ -10,6 +10,7 @@ SERVER_BASE_PATH=/api/
|
|||||||
SERVER_BASE_URL=
|
SERVER_BASE_URL=
|
||||||
|
|
||||||
DB_DIALECT=sqlite
|
DB_DIALECT=sqlite
|
||||||
|
DB_STORAGE=db.sqlite
|
||||||
|
|
||||||
# DB_HOST=localhost
|
# DB_HOST=localhost
|
||||||
# DB_PORT=5432
|
# DB_PORT=5432
|
||||||
|
38
README.md
38
README.md
@ -1,4 +1,4 @@
|
|||||||
English | [简体中文](./README.zh-CN.md)
|
English | [中文](./README.zh-CN.md)
|
||||||
|
|
||||||
![](https://nocobase.oss-cn-beijing.aliyuncs.com/bbcedd403d31cd1ccc4e9709581f5c2f.png)
|
![](https://nocobase.oss-cn-beijing.aliyuncs.com/bbcedd403d31cd1ccc4e9709581f5c2f.png)
|
||||||
|
|
||||||
@ -15,42 +15,32 @@ https://demo.nocobase.com/new
|
|||||||
Contact Us:
|
Contact Us:
|
||||||
hello@nocobase.com
|
hello@nocobase.com
|
||||||
|
|
||||||
When to use NocoBase
|
|
||||||
----------
|
|
||||||
- **SMEs and organizations build business platforms and management systems for themselves or for their industry**
|
|
||||||
- Want the price to be low enough or even free
|
|
||||||
- Can be flexibly customized without programming knowledge
|
|
||||||
- Need full control of source code and data
|
|
||||||
- Can freely distribute and sell as their own products
|
|
||||||
- **Service providers and outsourcing teams develop collaboration platforms and management systems for their clients**
|
|
||||||
- Want to keep development costs as low as possible
|
|
||||||
- Need the most user-friendly secondary development experience
|
|
||||||
- Must be deployed privately as a standalone product for the client
|
|
||||||
- Can be freely distributed and sold by the client
|
|
||||||
|
|
||||||
Why choose NocoBase
|
Why choose NocoBase
|
||||||
----------
|
----------
|
||||||
- **Open source and free**
|
- **Open source and free**
|
||||||
- Unrestricted commercial use under the MIT license
|
- Unrestricted commercial use under the Apache-2.0 license
|
||||||
- Full code ownership, private deployment, private and secure data
|
- Full code ownership, private deployment, private and secure data
|
||||||
- Free to expand and develop for actual needs
|
- Free to expand and develop for actual needs
|
||||||
- Good ecological support
|
- Good ecological support
|
||||||
- **Strong no-code capability**
|
- **Strong no-code capability**
|
||||||
- WYSIWYG visual configuration
|
- Data Model
|
||||||
- Separation of data structure configuration from interface configuration
|
- Dozens of field types such as text, attachments, etc., as well as many-to-many, one-to-many, one-to-one relationships.
|
||||||
- Rich combination of blocks and operations
|
- Menu
|
||||||
- Role-based access control
|
- Groups, pages, links combination into menu, support infinite level submenu
|
||||||
|
- Block
|
||||||
|
- Rich block types such as tables, kanban, calendars, forms, etc. are freely combined within the page to display and manipulate data.
|
||||||
|
- Action
|
||||||
|
- Configure actions such as filtering, exporting, adding, deleting, modifying, and viewing to process data.
|
||||||
|
- ACL
|
||||||
|
- Role-based control of user's system configuration rights, action rights and menu access rights.
|
||||||
|
- Workflow
|
||||||
|
- Repetitive tasks are replaced by automation, reducing manual operations and increasing efficiency.
|
||||||
- **Developer-friendly**
|
- **Developer-friendly**
|
||||||
- Microkernel architecture, flexible and easy to extend, with a robust plug-in system
|
- Microkernel architecture, flexible and easy to extend, with a robust plug-in system
|
||||||
- Node.js-based, with popular frameworks and technologies, including Koa, Sequelize, React, Formily, Ant Design, etc.
|
- Node.js-based, with popular frameworks and technologies, including Koa, Sequelize, React, Formily, Ant Design, etc.
|
||||||
- Progressive development, easy for getting-started, friendly to newcomers
|
- Progressive development, easy for getting-started, friendly to newcomers
|
||||||
- No binding, no strong dependencies, can be used in any combination or extensions, can be used in existing projects
|
- No binding, no strong dependencies, can be used in any combination or extensions, can be used in existing projects
|
||||||
|
|
||||||
Note
|
|
||||||
----------
|
|
||||||
NocoBase is still in early development and is for preview purposes only and is not suitable for use in a production environment. A relatively stable and well-documented public beta is expected to be released as early as the first quarter of 2022.
|
|
||||||
If you are interested in NocoBase, please join us to discuss and develop it together.
|
|
||||||
|
|
||||||
Architecture
|
Architecture
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
@ -11,23 +11,10 @@ NocoBase 是一个极易扩展的开源无代码开发平台。
|
|||||||
|
|
||||||
在线体验:https://demo-cn.nocobase.com/new
|
在线体验:https://demo-cn.nocobase.com/new
|
||||||
|
|
||||||
哪些场景适合使用 NocoBase
|
|
||||||
----------
|
|
||||||
- 中小企业和组织为自己或者为所在行业搭建业务平台和管理系统
|
|
||||||
- 希望价格足够低,甚至免费
|
|
||||||
- 不懂编程也可以灵活定制
|
|
||||||
- 需要完全掌控源代码和数据
|
|
||||||
- 可以以自有产品的形态自由分发和销售
|
|
||||||
- 服务商和外包团队为客户开发协作平台和管理系统
|
|
||||||
- 希望尽可能降低开发成本
|
|
||||||
- 需要极致友好的二次开发体验
|
|
||||||
- 必须以独立产品的形态为客户私有部署
|
|
||||||
- 客户可以自由分发和销售
|
|
||||||
|
|
||||||
为什么选择 NocoBase
|
为什么选择 NocoBase
|
||||||
----------
|
----------
|
||||||
- 开源免费
|
- 开源免费
|
||||||
- 采用 MIT 许可协议,不限制商业使用
|
- 采用 Apache-2.0 许可协议,不限制商业使用
|
||||||
- 拥有全部代码,私有化部署,保障数据私有和安全
|
- 拥有全部代码,私有化部署,保障数据私有和安全
|
||||||
- 针对实际需求自由扩展开发
|
- 针对实际需求自由扩展开发
|
||||||
- 具备良好的生态支持
|
- 具备良好的生态支持
|
||||||
@ -44,7 +31,6 @@ NocoBase 是一个极易扩展的开源无代码开发平台。
|
|||||||
|
|
||||||
说明
|
说明
|
||||||
----------
|
----------
|
||||||
NocoBase 仍处于早期开发阶段,功能不完整,稳定性不高,仅用于预览,不适合在生产环境中使用。相对稳定以及包含完善文档的公开测试版预计最早将于 2022 年第一季度发布。
|
|
||||||
|
|
||||||
如果你希望加入我们一起开发 NocoBase,或者探讨 NocoBase 未来发展,或者需要提供 NocoBase 使用上的帮助,欢迎通过邮件联系我们:hello@nocobase.com
|
如果你希望加入我们一起开发 NocoBase,或者探讨 NocoBase 未来发展,或者需要提供 NocoBase 使用上的帮助,欢迎通过邮件联系我们:hello@nocobase.com
|
||||||
|
|
||||||
@ -98,6 +84,10 @@ yarn create nocobase-app my-nocobase-app -d postgres \
|
|||||||
# 2. 切换目录
|
# 2. 切换目录
|
||||||
cd my-nocobase-app
|
cd my-nocobase-app
|
||||||
|
|
||||||
|
# 📢 由于网络环境、系统配置等因素影响,接下来这一步骤可能需要十几分钟时间
|
||||||
|
# 📢 使用 SQLite 数据库时,需要配置 sqlite3_binary_host_mirror
|
||||||
|
yarn config set sqlite3_binary_host_mirror https://npmmirror.com/mirrors/sqlite3/
|
||||||
|
|
||||||
# 3. 安装依赖(使用阿里云镜像)
|
# 3. 安装依赖(使用阿里云镜像)
|
||||||
yarn install --registry=https://registry.npmmirror.com
|
yarn install --registry=https://registry.npmmirror.com
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"npmClient": "yarn",
|
"npmClient": "yarn",
|
||||||
"useWorkspaces": true,
|
"useWorkspaces": true,
|
||||||
"npmClientArgs": [
|
"npmClientArgs": [
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "concurrently --kill-others \"npm run start-server\" \"npm run start-client\"",
|
"start": "concurrently --kill-others \"npm run start-server\" \"npm run start-client\"",
|
||||||
"start-pm2": "yarn pm2-runtime start packages/app/server/lib/index.js",
|
"start-pm2": "pm2-runtime start --node-args=\"-r dotenv/config\" packages/app/server/lib/index.js -- start",
|
||||||
"start-docs": "dumi dev",
|
"start-docs": "dumi dev",
|
||||||
"bootstrap": "lerna bootstrap",
|
"bootstrap": "lerna bootstrap",
|
||||||
"clean": "rimraf -rf packages/{app,core,plugins}/*/{lib,esm,dist} && lerna clean",
|
"clean": "rimraf -rf packages/{app,core,plugins}/*/{lib,esm,dist} && lerna clean",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/app-client",
|
"name": "@nocobase/app-client",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "umi dev",
|
"start": "umi dev",
|
||||||
@ -10,7 +10,7 @@
|
|||||||
"test:coverage": "umi-test --coverage"
|
"test:coverage": "umi-test --coverage"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@nocobase/client": "0.7.0-alpha.10",
|
"@nocobase/client": "0.7.0-alpha.15",
|
||||||
"@types/react": "^17.0.0",
|
"@types/react": "^17.0.0",
|
||||||
"@types/react-dom": "^17.0.0",
|
"@types/react-dom": "^17.0.0",
|
||||||
"@umijs/test": "^3.5.20",
|
"@umijs/test": "^3.5.20",
|
||||||
|
@ -7,6 +7,29 @@
|
|||||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon/favicon-32x32.png">
|
<link rel="icon" type="image/png" sizes="32x32" href="/favicon/favicon-32x32.png">
|
||||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon/favicon-16x16.png">
|
<link rel="icon" type="image/png" sizes="16x16" href="/favicon/favicon-16x16.png">
|
||||||
<link rel="manifest" href="/favicon/site.webmanifest">
|
<link rel="manifest" href="/favicon/site.webmanifest">
|
||||||
|
<style>
|
||||||
|
/* width */
|
||||||
|
.win ::-webkit-scrollbar {
|
||||||
|
width: 8px;
|
||||||
|
height: 8px;
|
||||||
|
}
|
||||||
|
/* Track */
|
||||||
|
.win ::-webkit-scrollbar-track {
|
||||||
|
background: #f1f1f1;
|
||||||
|
}
|
||||||
|
/* Handle */
|
||||||
|
.win ::-webkit-scrollbar-thumb {
|
||||||
|
background: #c0c0c0;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
/* Handle on hover */
|
||||||
|
.win ::-webkit-scrollbar-thumb:hover {
|
||||||
|
background: #a8a8a8;
|
||||||
|
}
|
||||||
|
.win .rc-virtual-list-scrollbar-thumb {
|
||||||
|
background: #c0c0c0 !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
<script>
|
<script>
|
||||||
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=[(!/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:''):''):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,'_'):''):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':'':''):is('mozilla/')?g:'',is('android|mobi|mobile|j2me|iphone|ipod|ipad|blackberry|playbook|kindle|silk',)?m:'',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:''):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':'',/[; |\[](([a-z]{2})(\-[a-z]{2})?)[)|;|\]]/i.test(ua)?(lang+RegExp.$2).replace('-','_')+(RegExp.$3!=''?(' '+lang+RegExp.$1).replace('-','_'):''):'',is('ipad|iphone|ipod')&&!is('safari')?'ipad_app':'',];console.debug(ua);function screenSize(){var w=window.outerWidth||html.clientWidth;var h=window.outerHeight||html.clientHeight;uaInfo.orientation=w<h?'portrait':'landscape';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}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);
|
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=[(!/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:''):''):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,'_'):''):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':'':''):is('mozilla/')?g:'',is('android|mobi|mobile|j2me|iphone|ipod|ipad|blackberry|playbook|kindle|silk',)?m:'',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:''):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':'',/[; |\[](([a-z]{2})(\-[a-z]{2})?)[)|;|\]]/i.test(ua)?(lang+RegExp.$2).replace('-','_')+(RegExp.$3!=''?(' '+lang+RegExp.$1).replace('-','_'):''):'',is('ipad|iphone|ipod')&&!is('safari')?'ipad_app':'',];console.debug(ua);function screenSize(){var w=window.outerWidth||html.clientWidth;var h=window.outerHeight||html.clientHeight;uaInfo.orientation=w<h?'portrait':'landscape';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}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);
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/app-server",
|
"name": "@nocobase/app-server",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"description": "",
|
"description": "",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"main": "./lib/index.js",
|
"main": "./lib/index.js",
|
||||||
@ -11,19 +11,19 @@
|
|||||||
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nocobase/database": "0.7.0-alpha.10",
|
"@nocobase/database": "0.7.0-alpha.15",
|
||||||
"@nocobase/plugin-acl": "0.7.0-alpha.10",
|
"@nocobase/plugin-acl": "0.7.0-alpha.15",
|
||||||
"@nocobase/plugin-china-region": "0.7.0-alpha.10",
|
"@nocobase/plugin-china-region": "0.7.0-alpha.15",
|
||||||
"@nocobase/plugin-client": "0.7.0-alpha.10",
|
"@nocobase/plugin-client": "0.7.0-alpha.15",
|
||||||
"@nocobase/plugin-collection-manager": "0.7.0-alpha.10",
|
"@nocobase/plugin-collection-manager": "0.7.0-alpha.15",
|
||||||
"@nocobase/plugin-error-handler": "0.7.0-alpha.10",
|
"@nocobase/plugin-error-handler": "0.7.0-alpha.15",
|
||||||
"@nocobase/plugin-file-manager": "0.7.0-alpha.10",
|
"@nocobase/plugin-file-manager": "0.7.0-alpha.15",
|
||||||
"@nocobase/plugin-system-settings": "0.7.0-alpha.10",
|
"@nocobase/plugin-system-settings": "0.7.0-alpha.15",
|
||||||
"@nocobase/plugin-ui-routes-storage": "0.7.0-alpha.10",
|
"@nocobase/plugin-ui-routes-storage": "0.7.0-alpha.15",
|
||||||
"@nocobase/plugin-ui-schema-storage": "0.7.0-alpha.10",
|
"@nocobase/plugin-ui-schema-storage": "0.7.0-alpha.15",
|
||||||
"@nocobase/plugin-users": "0.7.0-alpha.10",
|
"@nocobase/plugin-users": "0.7.0-alpha.15",
|
||||||
"@nocobase/plugin-workflow": "0.7.0-alpha.10",
|
"@nocobase/plugin-workflow": "0.7.0-alpha.15",
|
||||||
"@nocobase/server": "0.7.0-alpha.10"
|
"@nocobase/server": "0.7.0-alpha.15"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
@ -19,5 +19,10 @@ export default [
|
|||||||
'@nocobase/plugin-acl',
|
'@nocobase/plugin-acl',
|
||||||
'@nocobase/plugin-china-region',
|
'@nocobase/plugin-china-region',
|
||||||
'@nocobase/plugin-workflow',
|
'@nocobase/plugin-workflow',
|
||||||
['@nocobase/plugin-client'],
|
[
|
||||||
|
'@nocobase/plugin-client',
|
||||||
|
{
|
||||||
|
dist: resolve(process.cwd(), 'packages/app/client/dist'),
|
||||||
|
},
|
||||||
|
],
|
||||||
] as PluginsConfigurations;
|
] as PluginsConfigurations;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/acl",
|
"name": "@nocobase/acl",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"description": "",
|
"description": "",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"licenses": [
|
"licenses": [
|
||||||
@ -17,7 +17,7 @@
|
|||||||
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nocobase/resourcer": "0.7.0-alpha.10",
|
"@nocobase/resourcer": "0.7.0-alpha.15",
|
||||||
"json-templates": "^4.2.0"
|
"json-templates": "^4.2.0"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/actions",
|
"name": "@nocobase/actions",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"description": "",
|
"description": "",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"licenses": [
|
"licenses": [
|
||||||
@ -17,8 +17,8 @@
|
|||||||
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nocobase/database": "0.7.0-alpha.10",
|
"@nocobase/database": "0.7.0-alpha.15",
|
||||||
"@nocobase/resourcer": "0.7.0-alpha.10"
|
"@nocobase/resourcer": "0.7.0-alpha.15"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/client",
|
"name": "@nocobase/client",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"licenses": [
|
"licenses": [
|
||||||
{
|
{
|
||||||
@ -29,7 +29,7 @@
|
|||||||
"@formily/antd": "^2.0.15",
|
"@formily/antd": "^2.0.15",
|
||||||
"@formily/core": "^2.0.15",
|
"@formily/core": "^2.0.15",
|
||||||
"@formily/react": "^2.0.15",
|
"@formily/react": "^2.0.15",
|
||||||
"@nocobase/utils": "0.7.0-alpha.10",
|
"@nocobase/utils": "0.7.0-alpha.15",
|
||||||
"ahooks": "^3.0.5",
|
"ahooks": "^3.0.5",
|
||||||
"antd": "~4.19.5",
|
"antd": "~4.19.5",
|
||||||
"axios": "^0.24.0",
|
"axios": "^0.24.0",
|
||||||
|
@ -47,11 +47,11 @@ export const RoleConfigure = () => {
|
|||||||
title: t('Configure permissions'),
|
title: t('Configure permissions'),
|
||||||
'x-decorator': 'FormItem',
|
'x-decorator': 'FormItem',
|
||||||
'x-component': 'Checkbox',
|
'x-component': 'Checkbox',
|
||||||
'x-content': '允许配置系统,包括界面配置、数据表配置、权限配置、系统配置等全部配置项',
|
'x-content': t('Allows configuration of the whole system, including UI, collections, permissions, etc.'),
|
||||||
},
|
},
|
||||||
'strategy.actions': {
|
'strategy.actions': {
|
||||||
title: t('General action permissions'),
|
title: t('Global action permissions'),
|
||||||
description: '所有数据表都默认使用通用数据操作权限;同时,可以针对每个数据表单独配置权限。',
|
description: t('All collections use general action permissions by default; permission configured individually will override the default one.'),
|
||||||
'x-component': 'StrategyActions',
|
'x-component': 'StrategyActions',
|
||||||
'x-decorator': 'FormItem',
|
'x-decorator': 'FormItem',
|
||||||
},
|
},
|
||||||
@ -59,7 +59,7 @@ export const RoleConfigure = () => {
|
|||||||
title: t('Menu permissions'),
|
title: t('Menu permissions'),
|
||||||
'x-decorator': 'FormItem',
|
'x-decorator': 'FormItem',
|
||||||
'x-component': 'Checkbox',
|
'x-component': 'Checkbox',
|
||||||
'x-content': '新增菜单项默认允许访问',
|
'x-content': t('New menu items are allowed to be accessed by default.'),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
|
@ -241,7 +241,7 @@ export const roleSchema: ISchema = {
|
|||||||
properties: {
|
properties: {
|
||||||
tab1: {
|
tab1: {
|
||||||
type: 'void',
|
type: 'void',
|
||||||
title: '{{t("Global permissions")}}',
|
title: '{{t("General permissions")}}',
|
||||||
'x-component': 'Tabs.TabPane',
|
'x-component': 'Tabs.TabPane',
|
||||||
'x-component-props': {},
|
'x-component-props': {},
|
||||||
properties: {
|
properties: {
|
||||||
|
@ -364,8 +364,12 @@ export default {
|
|||||||
|
|
||||||
'Role display name': '角色名称',
|
'Role display name': '角色名称',
|
||||||
'Default role': '默认角色',
|
'Default role': '默认角色',
|
||||||
|
'All collections use general action permissions by default; permission configured individually will override the default one.': '所有数据表都默认使用通用数据操作权限;同时,可以针对每个数据表单独配置权限。',
|
||||||
|
'Allows configuration of the whole system, including UI, collections, permissions, etc.': '允许配置系统,包括界面配置、数据表配置、权限配置、系统配置等全部配置项',
|
||||||
|
'New menu items are allowed to be accessed by default.': '新增菜单项默认允许访问',
|
||||||
'Global permissions': '全局配置',
|
'Global permissions': '全局配置',
|
||||||
|
'General permissions': '通用配置',
|
||||||
|
'Global action permissions': '全局操作权限',
|
||||||
'General action permissions': '通用操作权限',
|
'General action permissions': '通用操作权限',
|
||||||
'Action display name': '操作名称',
|
'Action display name': '操作名称',
|
||||||
'Allow': '允许',
|
'Allow': '允许',
|
||||||
|
@ -32,7 +32,7 @@ export const calculators = [
|
|||||||
children: [
|
children: [
|
||||||
{ value: 'add', name: '+' },
|
{ value: 'add', name: '+' },
|
||||||
{ value: 'minus', name: '-' },
|
{ value: 'minus', name: '-' },
|
||||||
{ value: 'multipe', name: '*' },
|
{ value: 'multiple', name: '*' },
|
||||||
{ value: 'divide', name: '/' },
|
{ value: 'divide', name: '/' },
|
||||||
{ value: 'mod', name: '%' },
|
{ value: 'mod', name: '%' },
|
||||||
]
|
]
|
||||||
@ -396,7 +396,10 @@ export const CollectionFieldset = observer(({ value, onChange, useProps }: any)
|
|||||||
`}>
|
`}>
|
||||||
{fields.length
|
{fields.length
|
||||||
? fields
|
? fields
|
||||||
.filter(field => !field.hidden)
|
.filter(field => (
|
||||||
|
!field.hidden
|
||||||
|
&& (field.uiSchema ? !field.uiSchema['x-read-pretty'] : true)
|
||||||
|
))
|
||||||
.map(field => {
|
.map(field => {
|
||||||
const operand = typeof value[field.name] === 'string'
|
const operand = typeof value[field.name] === 'string'
|
||||||
? parseStringValue(value[field.name], VTypes)
|
? parseStringValue(value[field.name], VTypes)
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { css } from '@emotion/css';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Calculation } from '../calculators';
|
import { Calculation } from '../calculators';
|
||||||
|
|
||||||
@ -6,10 +7,10 @@ export default {
|
|||||||
type: 'calculation',
|
type: 'calculation',
|
||||||
group: 'control',
|
group: 'control',
|
||||||
fieldset: {
|
fieldset: {
|
||||||
calculation: {
|
'config.calculation': {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
title: '配置计算',
|
title: '配置计算',
|
||||||
name: 'calculation',
|
name: 'config.calculation',
|
||||||
required: true,
|
required: true,
|
||||||
'x-decorator': 'FormItem',
|
'x-decorator': 'FormItem',
|
||||||
'x-component': 'CalculationConfig',
|
'x-component': 'CalculationConfig',
|
||||||
@ -26,6 +27,6 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
getter() {
|
getter() {
|
||||||
return <div>计算值</div>;
|
return <div className={css`flex-shrink: 0`}>计算值</div>;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { css, cx } from "@emotion/css";
|
import { css, cx } from "@emotion/css";
|
||||||
import { Button, Select } from "antd";
|
import { Button, Select, Tooltip } from "antd";
|
||||||
import { CloseCircleOutlined } from '@ant-design/icons';
|
import { CloseCircleOutlined, QuestionCircleOutlined } from '@ant-design/icons';
|
||||||
import { Trans } from "react-i18next";
|
import { Trans } from "react-i18next";
|
||||||
|
|
||||||
import { NodeDefaultView } from ".";
|
import { NodeDefaultView } from ".";
|
||||||
@ -66,17 +66,20 @@ function CalculationGroup({ value, onChange }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={css`
|
<div className={cx('node-type-condition-group', css`
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: .5em 1em;
|
|
||||||
border: 1px dashed #ddd;
|
.node-type-condition-group{
|
||||||
|
padding: .5em 1em;
|
||||||
|
border: 1px dashed #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
+ button{
|
+ button{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 0;
|
right: 0;
|
||||||
}
|
}
|
||||||
`}>
|
`)}>
|
||||||
<div className={css`
|
<div className={css`
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@ -131,9 +134,9 @@ export default {
|
|||||||
type: 'condition',
|
type: 'condition',
|
||||||
group: 'control',
|
group: 'control',
|
||||||
fieldset: {
|
fieldset: {
|
||||||
rejectOnFalse: {
|
'config.rejectOnFalse': {
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
name: 'rejectOnFalse',
|
name: 'config.rejectOnFalse',
|
||||||
title: '模式',
|
title: '模式',
|
||||||
'x-decorator': 'FormItem',
|
'x-decorator': 'FormItem',
|
||||||
'x-component': 'Radio.Group',
|
'x-component': 'Radio.Group',
|
||||||
@ -141,13 +144,33 @@ export default {
|
|||||||
disabled: true,
|
disabled: true,
|
||||||
},
|
},
|
||||||
enum: [
|
enum: [
|
||||||
{ value: true, label: '通行模式' },
|
{
|
||||||
{ value: false, label: '分支模式' },
|
value: true,
|
||||||
|
label: (
|
||||||
|
<Tooltip
|
||||||
|
title="判断为“是”时继续"
|
||||||
|
placement="bottom"
|
||||||
|
>
|
||||||
|
通行模式 <QuestionCircleOutlined style={{ color: '#999' }} />
|
||||||
|
</Tooltip>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: false,
|
||||||
|
label: (
|
||||||
|
<Tooltip
|
||||||
|
title="判断结果分为“是”和“否”两个分支,分别继续"
|
||||||
|
placement="bottom"
|
||||||
|
>
|
||||||
|
分支模式 <QuestionCircleOutlined style={{ color: '#999' }} />
|
||||||
|
</Tooltip>
|
||||||
|
)
|
||||||
|
}
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
calculation: {
|
'config.calculation': {
|
||||||
type: 'string',
|
type: 'string',
|
||||||
name: 'calculation',
|
name: 'config.calculation',
|
||||||
title: '条件配置',
|
title: '条件配置',
|
||||||
'x-decorator': 'FormItem',
|
'x-decorator': 'FormItem',
|
||||||
'x-component': 'CalculationConfig',
|
'x-component': 'CalculationConfig',
|
||||||
|
@ -1,17 +1,20 @@
|
|||||||
import React from 'react';
|
|
||||||
import { Select } from 'antd';
|
import { Select } from 'antd';
|
||||||
|
import React from 'react';
|
||||||
import { useCollectionDataSource, useCollectionManager, useCompile } from '../..';
|
import { useCollectionDataSource, useCollectionManager, useCompile } from '../..';
|
||||||
import { useFlowContext } from '../WorkflowCanvas';
|
|
||||||
import { collection, values } from '../schemas/collection';
|
|
||||||
import { BaseTypeSet, CollectionFieldset } from '../calculators';
|
import { BaseTypeSet, CollectionFieldset } from '../calculators';
|
||||||
|
import { collection, values } from '../schemas/collection';
|
||||||
|
import { useFlowContext } from '../WorkflowCanvas';
|
||||||
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
title: '新增数据',
|
title: '新增数据',
|
||||||
type: 'create',
|
type: 'create',
|
||||||
group: 'model',
|
group: 'model',
|
||||||
fieldset: {
|
fieldset: {
|
||||||
collection,
|
'config.collection': {
|
||||||
|
name: 'config.collection',
|
||||||
|
...collection,
|
||||||
|
},
|
||||||
// multiple: {
|
// multiple: {
|
||||||
// type: 'boolean',
|
// type: 'boolean',
|
||||||
// title: '多条数据',
|
// title: '多条数据',
|
||||||
@ -22,9 +25,9 @@ export default {
|
|||||||
// disabled: true
|
// disabled: true
|
||||||
// }
|
// }
|
||||||
// },
|
// },
|
||||||
params: {
|
'config.params': {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
name: 'params',
|
name: 'config.params',
|
||||||
title: '',
|
title: '',
|
||||||
'x-decorator': 'FormItem',
|
'x-decorator': 'FormItem',
|
||||||
properties: {
|
properties: {
|
||||||
|
@ -8,10 +8,10 @@ export default {
|
|||||||
type: 'destroy',
|
type: 'destroy',
|
||||||
group: 'model',
|
group: 'model',
|
||||||
fieldset: {
|
fieldset: {
|
||||||
collection,
|
'config.collection': collection,
|
||||||
params: {
|
'config.params': {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
name: 'params',
|
name: 'config.params',
|
||||||
title: '',
|
title: '',
|
||||||
'x-decorator': 'FormItem',
|
'x-decorator': 'FormItem',
|
||||||
properties: {
|
properties: {
|
||||||
|
@ -1,23 +1,24 @@
|
|||||||
import React, { useContext } from 'react';
|
import { CloseOutlined, DeleteOutlined } from '@ant-design/icons';
|
||||||
import { css, cx } from '@emotion/css';
|
import { css, cx } from '@emotion/css';
|
||||||
import { Button, Modal, Tag } from 'antd';
|
import { Field } from '@formily/core';
|
||||||
import { DeleteOutlined, CloseOutlined } from '@ant-design/icons';
|
import { ISchema, RecursionField, useField, useForm } from '@formily/react';
|
||||||
import { ISchema, useForm } from '@formily/react';
|
|
||||||
|
|
||||||
import { Registry } from '@nocobase/utils';
|
import { Registry } from '@nocobase/utils';
|
||||||
|
import { Button, Modal, Tag } from 'antd';
|
||||||
|
import React, { useContext } from 'react';
|
||||||
import { SchemaComponent, useActionContext, useAPIClient, useCollection, useRequest, useResourceActionContext } from '../..';
|
import { SchemaComponent, useActionContext, useAPIClient, useCollection, useRequest, useResourceActionContext } from '../..';
|
||||||
|
import { nodeBlockClass, nodeCardClass, nodeClass, nodeHeaderClass, nodeTitleClass } from '../style';
|
||||||
import { AddButton, useFlowContext } from '../WorkflowCanvas';
|
import { AddButton, useFlowContext } from '../WorkflowCanvas';
|
||||||
|
|
||||||
import { nodeClass, nodeCardClass, nodeHeaderClass, nodeTitleClass, nodeBlockClass } from '../style';
|
|
||||||
|
|
||||||
import query from './query';
|
|
||||||
import create from './create';
|
|
||||||
import update from './update';
|
|
||||||
import destroy from './destroy';
|
|
||||||
import condition from './condition';
|
|
||||||
import parallel from './parallel';
|
|
||||||
import calculation from './calculation';
|
import calculation from './calculation';
|
||||||
|
import condition from './condition';
|
||||||
|
import create from './create';
|
||||||
|
import destroy from './destroy';
|
||||||
|
import parallel from './parallel';
|
||||||
|
import query from './query';
|
||||||
|
import update from './update';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -45,7 +46,7 @@ instructions.register('condition', condition);
|
|||||||
instructions.register('parallel', parallel);
|
instructions.register('parallel', parallel);
|
||||||
instructions.register('calculation', calculation);
|
instructions.register('calculation', calculation);
|
||||||
|
|
||||||
function useUpdateConfigAction() {
|
function useUpdateAction() {
|
||||||
const form = useForm();
|
const form = useForm();
|
||||||
const api = useAPIClient();
|
const api = useAPIClient();
|
||||||
const ctx = useActionContext();
|
const ctx = useActionContext();
|
||||||
@ -53,14 +54,13 @@ function useUpdateConfigAction() {
|
|||||||
const data = useNodeContext();
|
const data = useNodeContext();
|
||||||
return {
|
return {
|
||||||
async run() {
|
async run() {
|
||||||
|
await form.submit();
|
||||||
await api.resource('flow_nodes', data.id).update({
|
await api.resource('flow_nodes', data.id).update({
|
||||||
filterByTk: data.id,
|
filterByTk: data.id,
|
||||||
values: {
|
values: {
|
||||||
config: {
|
title: form.values.title,
|
||||||
...data.config,
|
config: form.values.config
|
||||||
...form.values
|
}
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
ctx.setVisible(false);
|
ctx.setVisible(false);
|
||||||
refresh();
|
refresh();
|
||||||
@ -148,6 +148,14 @@ export function RemoveButton() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function Fieldset({ schema }) {
|
||||||
|
const field = useField<Field>();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<RecursionField basePath={field.address} schema={schema} />
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
export function NodeDefaultView(props) {
|
export function NodeDefaultView(props) {
|
||||||
const { data, children } = props;
|
const { data, children } = props;
|
||||||
const instruction = instructions.get(data.type);
|
const instruction = instructions.get(data.type);
|
||||||
@ -166,63 +174,75 @@ export function NodeDefaultView(props) {
|
|||||||
</div>
|
</div>
|
||||||
<SchemaComponent
|
<SchemaComponent
|
||||||
scope={instruction.scope}
|
scope={instruction.scope}
|
||||||
components={instruction.components}
|
components={{
|
||||||
|
...instruction.components,
|
||||||
|
Fieldset
|
||||||
|
}}
|
||||||
schema={{
|
schema={{
|
||||||
type: 'void',
|
type: 'void',
|
||||||
properties: {
|
properties: {
|
||||||
view: instruction.view,
|
view: instruction.view,
|
||||||
...(Object.keys(instruction.fieldset).length
|
config: {
|
||||||
? {
|
type: 'void',
|
||||||
config: {
|
title: '配置节点',
|
||||||
|
'x-component': 'Action.Link',
|
||||||
|
'x-component-props': {
|
||||||
|
type: 'primary',
|
||||||
|
},
|
||||||
|
properties: {
|
||||||
|
drawer: {
|
||||||
type: 'void',
|
type: 'void',
|
||||||
title: '配置节点',
|
title: '配置节点',
|
||||||
'x-component': 'Action.Link',
|
'x-component': 'Action.Drawer',
|
||||||
'x-component-props': {
|
'x-decorator': 'Form',
|
||||||
type: 'primary',
|
'x-decorator-props': {
|
||||||
|
useValues(options) {
|
||||||
|
const data = useNodeContext();
|
||||||
|
return useRequest(() => {
|
||||||
|
return Promise.resolve({ data });
|
||||||
|
}, options);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
properties: {
|
properties: {
|
||||||
drawer: {
|
title: {
|
||||||
|
type: 'string',
|
||||||
|
name: 'title',
|
||||||
|
title: '节点名称',
|
||||||
|
'x-decorator': 'FormItem',
|
||||||
|
'x-component': 'Input',
|
||||||
|
},
|
||||||
|
config: {
|
||||||
type: 'void',
|
type: 'void',
|
||||||
title: '配置节点',
|
name: 'config',
|
||||||
'x-component': 'Action.Drawer',
|
'x-component': 'fieldset',
|
||||||
'x-decorator': 'Form',
|
'x-component-props': {},
|
||||||
'x-decorator-props': {
|
properties: instruction.fieldset
|
||||||
useValues(options) {
|
},
|
||||||
const node = useNodeContext();
|
actions: {
|
||||||
return useRequest(() => {
|
type: 'void',
|
||||||
return Promise.resolve({ data: node.config });
|
'x-component': 'Action.Drawer.Footer',
|
||||||
}, options);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
properties: {
|
properties: {
|
||||||
...instruction.fieldset,
|
cancel: {
|
||||||
actions: {
|
title: '{{t("Cancel")}}',
|
||||||
type: 'void',
|
'x-component': 'Action',
|
||||||
'x-component': 'Action.Drawer.Footer',
|
'x-component-props': {
|
||||||
properties: {
|
useAction: '{{ cm.useCancelAction }}',
|
||||||
cancel: {
|
|
||||||
title: '{{t("Cancel")}}',
|
|
||||||
'x-component': 'Action',
|
|
||||||
'x-component-props': {
|
|
||||||
useAction: '{{ cm.useCancelAction }}',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
submit: {
|
|
||||||
title: '{{t("Submit")}}',
|
|
||||||
'x-component': 'Action',
|
|
||||||
'x-component-props': {
|
|
||||||
type: 'primary',
|
|
||||||
useAction: useUpdateConfigAction,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
} as ISchema
|
},
|
||||||
}
|
submit: {
|
||||||
}
|
title: '{{t("Submit")}}',
|
||||||
|
'x-component': 'Action',
|
||||||
|
'x-component-props': {
|
||||||
|
type: 'primary',
|
||||||
|
useAction: useUpdateAction,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
} as ISchema
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
: {})
|
}
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
import { css, cx } from "@emotion/css";
|
import { css, cx } from "@emotion/css";
|
||||||
import { PlusOutlined } from '@ant-design/icons';
|
import { PlusOutlined, QuestionCircleOutlined } from '@ant-design/icons';
|
||||||
|
|
||||||
import { NodeDefaultView } from ".";
|
import { NodeDefaultView } from ".";
|
||||||
import { Branch, useFlowContext } from "../WorkflowCanvas";
|
import { Branch, useFlowContext } from "../WorkflowCanvas";
|
||||||
@ -13,17 +13,37 @@ export default {
|
|||||||
type: 'parallel',
|
type: 'parallel',
|
||||||
group: 'control',
|
group: 'control',
|
||||||
fieldset: {
|
fieldset: {
|
||||||
mode: {
|
'config.mode': {
|
||||||
type: 'string',
|
type: 'string',
|
||||||
name: 'mode',
|
name: 'config.mode',
|
||||||
title: '模式',
|
title: '模式',
|
||||||
'x-decorator': 'FormItem',
|
'x-decorator': 'FormItem',
|
||||||
'x-component': 'Radio.Group',
|
'x-component': 'Radio.Group',
|
||||||
'x-component-props': {
|
'x-component-props': {
|
||||||
},
|
},
|
||||||
enum: [
|
enum: [
|
||||||
{ value: 'all', label: '全部成功' },
|
{
|
||||||
{ value: 'any', label: '任意成功' },
|
value: 'all',
|
||||||
|
label: (
|
||||||
|
<Tooltip
|
||||||
|
title="全部分支都成功后才能继续"
|
||||||
|
placement="bottom"
|
||||||
|
>
|
||||||
|
全部成功 <QuestionCircleOutlined style={{ color: '#999' }} />
|
||||||
|
</Tooltip>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 'any',
|
||||||
|
label: (
|
||||||
|
<Tooltip
|
||||||
|
title="任意分支成功后就继续"
|
||||||
|
placement="bottom"
|
||||||
|
>
|
||||||
|
任意成功 <QuestionCircleOutlined style={{ color: '#999' }} />
|
||||||
|
</Tooltip>
|
||||||
|
)
|
||||||
|
},
|
||||||
// { value: 'race', label: '任意退出' },
|
// { value: 'race', label: '任意退出' },
|
||||||
],
|
],
|
||||||
default: 'all'
|
default: 'all'
|
||||||
|
@ -12,20 +12,20 @@ export default {
|
|||||||
type: 'query',
|
type: 'query',
|
||||||
group: 'model',
|
group: 'model',
|
||||||
fieldset: {
|
fieldset: {
|
||||||
collection,
|
'config.collection': collection,
|
||||||
multiple: {
|
'config.multiple': {
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
title: '多条数据',
|
title: '多条数据',
|
||||||
name: 'multiple',
|
name: 'config.multiple',
|
||||||
'x-decorator': 'FormItem',
|
'x-decorator': 'FormItem',
|
||||||
'x-component': 'Checkbox',
|
'x-component': 'Checkbox',
|
||||||
'x-component-props': {
|
'x-component-props': {
|
||||||
disabled: true
|
disabled: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
params: {
|
'config.params': {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
name: 'params',
|
name: 'config.params',
|
||||||
title: '',
|
title: '',
|
||||||
'x-decorator': 'FormItem',
|
'x-decorator': 'FormItem',
|
||||||
properties: {
|
properties: {
|
||||||
|
@ -7,10 +7,10 @@ export default {
|
|||||||
type: 'update',
|
type: 'update',
|
||||||
group: 'model',
|
group: 'model',
|
||||||
fieldset: {
|
fieldset: {
|
||||||
collection,
|
'config.collection': collection,
|
||||||
params: {
|
'config.params': {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
name: 'params',
|
name: 'config.params',
|
||||||
title: '',
|
title: '',
|
||||||
'x-decorator': 'FormItem',
|
'x-decorator': 'FormItem',
|
||||||
properties: {
|
properties: {
|
||||||
|
@ -6,7 +6,7 @@ import { useCollectionFilterOptions } from "../../collection-manager/action-hook
|
|||||||
export const collection = {
|
export const collection = {
|
||||||
type: 'string',
|
type: 'string',
|
||||||
title: '数据表',
|
title: '数据表',
|
||||||
name: 'collection',
|
name: 'config.collection',
|
||||||
required: true,
|
required: true,
|
||||||
'x-reactions': ['{{useCollectionDataSource()}}'],
|
'x-reactions': ['{{useCollectionDataSource()}}'],
|
||||||
'x-decorator': 'FormItem',
|
'x-decorator': 'FormItem',
|
||||||
@ -16,7 +16,7 @@ export const collection = {
|
|||||||
export const values = {
|
export const values = {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
title: '数据内容',
|
title: '数据内容',
|
||||||
name: 'values',
|
name: 'config.params.values',
|
||||||
'x-decorator': 'FormItem',
|
'x-decorator': 'FormItem',
|
||||||
'x-decorator-props': {
|
'x-decorator-props': {
|
||||||
labelAlign: 'left',
|
labelAlign: 'left',
|
||||||
@ -29,7 +29,7 @@ export const values = {
|
|||||||
useProps() {
|
useProps() {
|
||||||
const { getCollectionFields } = useCollectionManager();
|
const { getCollectionFields } = useCollectionManager();
|
||||||
const { values: form } = useForm();
|
const { values: form } = useForm();
|
||||||
const fields = getCollectionFields(form.collection);
|
const fields = getCollectionFields(form?.config?.collection);
|
||||||
return { fields };
|
return { fields };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -38,7 +38,7 @@ export const values = {
|
|||||||
export const filter = {
|
export const filter = {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
title: '筛选条件',
|
title: '筛选条件',
|
||||||
name: 'filter',
|
name: 'config.params.filter',
|
||||||
'x-decorator': 'FormItem',
|
'x-decorator': 'FormItem',
|
||||||
'x-decorator-props': {
|
'x-decorator-props': {
|
||||||
labelAlign: 'left',
|
labelAlign: 'left',
|
||||||
@ -50,14 +50,12 @@ export const filter = {
|
|||||||
'x-component-props': {
|
'x-component-props': {
|
||||||
useProps() {
|
useProps() {
|
||||||
const { values } = useForm();
|
const { values } = useForm();
|
||||||
const options = useCollectionFilterOptions(values.collection);
|
const options = useCollectionFilterOptions(values.config.collection);
|
||||||
return {
|
return {
|
||||||
options,
|
options,
|
||||||
className: css`
|
className: css`
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: .5em 1em;
|
|
||||||
border: 1px dashed #ddd;
|
|
||||||
`
|
`
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
@ -15,16 +15,6 @@ const collection = {
|
|||||||
required: true,
|
required: true,
|
||||||
} as ISchema,
|
} as ISchema,
|
||||||
},
|
},
|
||||||
// {
|
|
||||||
// type: 'string',
|
|
||||||
// name: 'description',
|
|
||||||
// interface: 'textarea',
|
|
||||||
// uiSchema: {
|
|
||||||
// title: '描述',
|
|
||||||
// type: 'string',
|
|
||||||
// 'x-component': 'TextArea',
|
|
||||||
// } as ISchema,
|
|
||||||
// },
|
|
||||||
{
|
{
|
||||||
type: 'string',
|
type: 'string',
|
||||||
name: 'type',
|
name: 'type',
|
||||||
@ -37,6 +27,17 @@ const collection = {
|
|||||||
enum: [
|
enum: [
|
||||||
{ value: 'model', label: '数据变动' }
|
{ value: 'model', label: '数据变动' }
|
||||||
],
|
],
|
||||||
|
required: true,
|
||||||
|
} as ISchema,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'string',
|
||||||
|
name: 'description',
|
||||||
|
interface: 'textarea',
|
||||||
|
uiSchema: {
|
||||||
|
title: '描述',
|
||||||
|
type: 'string',
|
||||||
|
'x-component': 'Input.TextArea',
|
||||||
} as ISchema,
|
} as ISchema,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -95,6 +96,13 @@ export const workflowSchema: ISchema = {
|
|||||||
type: 'void',
|
type: 'void',
|
||||||
title: '删除',
|
title: '删除',
|
||||||
'x-component': 'Action',
|
'x-component': 'Action',
|
||||||
|
'x-component-props': {
|
||||||
|
useAction: '{{ cm.useBulkDestroyAction }}',
|
||||||
|
confirm: {
|
||||||
|
title: "{{t('Delete record')}}",
|
||||||
|
content: "{{t('Are you sure you want to delete it?')}}",
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
create: {
|
create: {
|
||||||
type: 'void',
|
type: 'void',
|
||||||
@ -114,11 +122,11 @@ export const workflowSchema: ISchema = {
|
|||||||
'x-component': 'CollectionField',
|
'x-component': 'CollectionField',
|
||||||
'x-decorator': 'FormItem',
|
'x-decorator': 'FormItem',
|
||||||
},
|
},
|
||||||
description: {
|
type: {
|
||||||
'x-component': 'CollectionField',
|
'x-component': 'CollectionField',
|
||||||
'x-decorator': 'FormItem',
|
'x-decorator': 'FormItem',
|
||||||
},
|
},
|
||||||
type: {
|
description: {
|
||||||
'x-component': 'CollectionField',
|
'x-component': 'CollectionField',
|
||||||
'x-decorator': 'FormItem',
|
'x-decorator': 'FormItem',
|
||||||
},
|
},
|
||||||
|
@ -16,6 +16,7 @@ function useUpdateConfigAction() {
|
|||||||
const { refresh } = useResourceActionContext();
|
const { refresh } = useResourceActionContext();
|
||||||
return {
|
return {
|
||||||
async run() {
|
async run() {
|
||||||
|
await form.submit();
|
||||||
await api.resource('workflows', record.id).update({
|
await api.resource('workflows', record.id).update({
|
||||||
filterByTk: record.id,
|
filterByTk: record.id,
|
||||||
values: {
|
values: {
|
||||||
|
@ -21,10 +21,10 @@ export default {
|
|||||||
'x-component': 'Select',
|
'x-component': 'Select',
|
||||||
'x-component-props': {
|
'x-component-props': {
|
||||||
options: [
|
options: [
|
||||||
{ value: 1, label: '新增数据' },
|
{ value: 1, label: '新增数据后' },
|
||||||
{ value: 2, label: '更新数据' },
|
{ value: 2, label: '更新数据后' },
|
||||||
{ value: 3, label: '新增或更新数据' },
|
{ value: 3, label: '新增或更新数据后' },
|
||||||
{ value: 4, label: '删除数据' }
|
{ value: 4, label: '删除数据后' }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "create-nocobase-app",
|
"name": "create-nocobase-app",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"main": "src/index.js",
|
"main": "src/index.js",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"licenses": [
|
"licenses": [
|
||||||
@ -16,6 +16,7 @@
|
|||||||
"commander": "^8.2.0",
|
"commander": "^8.2.0",
|
||||||
"execa": "5",
|
"execa": "5",
|
||||||
"fs-extra": "^10.0.1",
|
"fs-extra": "^10.0.1",
|
||||||
|
"lodash": "^4.17.21",
|
||||||
"ora": "^5.4.1",
|
"ora": "^5.4.1",
|
||||||
"tar": "^6.1.11"
|
"tar": "^6.1.11"
|
||||||
},
|
},
|
||||||
|
3
packages/core/create-nocobase-app/src/resources/files/packages/app/client/.gitignore
vendored
Normal file
3
packages/core/create-nocobase-app/src/resources/files/packages/app/client/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
/src/.umi
|
||||||
|
/src/.umi-production
|
||||||
|
/src/.umi-test
|
@ -1,7 +1,7 @@
|
|||||||
const execa = require('execa');
|
const execa = require('execa');
|
||||||
const axios = require('axios');
|
const axios = require('axios');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const fsP = require('fs/promises');
|
const fsP = require('fs').promises;
|
||||||
const tar = require('tar');
|
const tar = require('tar');
|
||||||
const { join } = require('path');
|
const { join } = require('path');
|
||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
@ -40,9 +40,9 @@ module.exports = async (packageName, target) => {
|
|||||||
cwd: target,
|
cwd: target,
|
||||||
strip: 1,
|
strip: 1,
|
||||||
k: true,
|
k: true,
|
||||||
filter(path, entry) {
|
// filter(path, entry) {
|
||||||
return !(path.startsWith('package/lib') || path.startsWith('package/esm') || path.startsWith('package/dist'));
|
// return !(path.startsWith('package/lib') || path.startsWith('package/esm') || path.startsWith('package/dist'));
|
||||||
},
|
// },
|
||||||
});
|
});
|
||||||
|
|
||||||
await fsP.unlink(tarballFile);
|
await fsP.unlink(tarballFile);
|
||||||
|
@ -15,6 +15,7 @@ module.exports = (opts) => {
|
|||||||
'nocobase-prod': 'cross-env DOTENV_CONFIG_PATH=.env node -r dotenv/config packages/app/server/lib/index.js',
|
'nocobase-prod': 'cross-env DOTENV_CONFIG_PATH=.env node -r dotenv/config packages/app/server/lib/index.js',
|
||||||
'start-client': 'cd packages/app/client && npm run start',
|
'start-client': 'cd packages/app/client && npm run start',
|
||||||
'start-server': 'npm run nocobase start',
|
'start-server': 'npm run nocobase start',
|
||||||
|
'start-pm2': 'pm2-runtime start --node-args="-r dotenv/config" packages/app/server/lib/index.js -- start',
|
||||||
build: 'lerna run build',
|
build: 'lerna run build',
|
||||||
'build-docs': 'dumi build',
|
'build-docs': 'dumi build',
|
||||||
test: 'node ./jest.cli.js -i',
|
test: 'node ./jest.cli.js -i',
|
||||||
@ -24,6 +25,11 @@ module.exports = (opts) => {
|
|||||||
'@types/react': '^17.0.0',
|
'@types/react': '^17.0.0',
|
||||||
'@types/react-dom': '^17.0.0',
|
'@types/react-dom': '^17.0.0',
|
||||||
},
|
},
|
||||||
|
dependencies: {
|
||||||
|
'cross-env': '^7.0.3',
|
||||||
|
dotenv: '^10.0.0',
|
||||||
|
pm2: '^5.2.0',
|
||||||
|
},
|
||||||
devDependencies: {
|
devDependencies: {
|
||||||
'@testing-library/react': '^12.1.2',
|
'@testing-library/react': '^12.1.2',
|
||||||
'@types/jest': '^26.0.0',
|
'@types/jest': '^26.0.0',
|
||||||
@ -33,8 +39,6 @@ module.exports = (opts) => {
|
|||||||
'@typescript-eslint/eslint-plugin': '^4.9.1',
|
'@typescript-eslint/eslint-plugin': '^4.9.1',
|
||||||
'@typescript-eslint/parser': '^4.8.2',
|
'@typescript-eslint/parser': '^4.8.2',
|
||||||
concurrently: '^7.0.0',
|
concurrently: '^7.0.0',
|
||||||
'cross-env': '^7.0.3',
|
|
||||||
dotenv: '^10.0.0',
|
|
||||||
eslint: '^7.14.0',
|
eslint: '^7.14.0',
|
||||||
'eslint-config-prettier': '^7.0.0',
|
'eslint-config-prettier': '^7.0.0',
|
||||||
'eslint-plugin-import': '^2.13.0',
|
'eslint-plugin-import': '^2.13.0',
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/database",
|
"name": "@nocobase/database",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "./lib/index.js",
|
"main": "./lib/index.js",
|
||||||
"types": "./lib/index.d.ts",
|
"types": "./lib/index.d.ts",
|
||||||
@ -17,7 +17,7 @@
|
|||||||
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nocobase/utils": "0.7.0-alpha.10",
|
"@nocobase/utils": "0.7.0-alpha.15",
|
||||||
"async-mutex": "^0.3.2",
|
"async-mutex": "^0.3.2",
|
||||||
"deepmerge": "^4.2.2",
|
"deepmerge": "^4.2.2",
|
||||||
"flat": "^5.0.2",
|
"flat": "^5.0.2",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/resourcer",
|
"name": "@nocobase/resourcer",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "./lib/index.js",
|
"main": "./lib/index.js",
|
||||||
"types": "./lib/index.d.ts",
|
"types": "./lib/index.d.ts",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/server",
|
"name": "@nocobase/server",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"types": "./lib/index.d.ts",
|
"types": "./lib/index.d.ts",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
@ -18,10 +18,10 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@koa/cors": "^3.1.0",
|
"@koa/cors": "^3.1.0",
|
||||||
"@koa/router": "^9.4.0",
|
"@koa/router": "^9.4.0",
|
||||||
"@nocobase/acl": "0.7.0-alpha.10",
|
"@nocobase/acl": "0.7.0-alpha.15",
|
||||||
"@nocobase/actions": "0.7.0-alpha.10",
|
"@nocobase/actions": "0.7.0-alpha.15",
|
||||||
"@nocobase/database": "0.7.0-alpha.10",
|
"@nocobase/database": "0.7.0-alpha.15",
|
||||||
"@nocobase/resourcer": "0.7.0-alpha.10",
|
"@nocobase/resourcer": "0.7.0-alpha.15",
|
||||||
"commander": "^8.1.0",
|
"commander": "^8.1.0",
|
||||||
"dotenv": "^8.2.0",
|
"dotenv": "^8.2.0",
|
||||||
"find-package-json": "^1.2.0",
|
"find-package-json": "^1.2.0",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/test",
|
"name": "@nocobase/test",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"types": "./lib/index.d.ts",
|
"types": "./lib/index.d.ts",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
@ -16,7 +16,7 @@
|
|||||||
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nocobase/server": "0.7.0-alpha.10",
|
"@nocobase/server": "0.7.0-alpha.15",
|
||||||
"@types/supertest": "^2.0.11",
|
"@types/supertest": "^2.0.11",
|
||||||
"mockjs": "^1.1.0",
|
"mockjs": "^1.1.0",
|
||||||
"mysql2": "^2.1.0",
|
"mysql2": "^2.1.0",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/utils",
|
"name": "@nocobase/utils",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"types": "./lib/index.d.ts",
|
"types": "./lib/index.d.ts",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/plugin-acl",
|
"name": "@nocobase/plugin-acl",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"description": "",
|
"description": "",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"licenses": [
|
"licenses": [
|
||||||
@ -17,9 +17,9 @@
|
|||||||
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nocobase/acl": "0.7.0-alpha.10",
|
"@nocobase/acl": "0.7.0-alpha.15",
|
||||||
"@nocobase/database": "0.7.0-alpha.10",
|
"@nocobase/database": "0.7.0-alpha.15",
|
||||||
"@nocobase/server": "0.7.0-alpha.10"
|
"@nocobase/server": "0.7.0-alpha.15"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/plugin-action-logs",
|
"name": "@nocobase/plugin-action-logs",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"licenses": [
|
"licenses": [
|
||||||
@ -15,7 +15,7 @@
|
|||||||
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@nocobase/test": "0.7.0-alpha.10"
|
"@nocobase/test": "0.7.0-alpha.15"
|
||||||
},
|
},
|
||||||
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
|
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/plugin-china-region",
|
"name": "@nocobase/plugin-china-region",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"licenses": [
|
"licenses": [
|
||||||
@ -18,7 +18,7 @@
|
|||||||
"china-division": "^2.4.0"
|
"china-division": "^2.4.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@nocobase/test": "0.7.0-alpha.10"
|
"@nocobase/test": "0.7.0-alpha.15"
|
||||||
},
|
},
|
||||||
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
|
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/plugin-client",
|
"name": "@nocobase/plugin-client",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"licenses": [
|
"licenses": [
|
||||||
@ -15,10 +15,10 @@
|
|||||||
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nocobase/server": "0.7.0-alpha.10"
|
"@nocobase/server": "0.7.0-alpha.15"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@nocobase/test": "0.7.0-alpha.10"
|
"@nocobase/test": "0.7.0-alpha.15"
|
||||||
},
|
},
|
||||||
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
|
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/plugin-collection-manager",
|
"name": "@nocobase/plugin-collection-manager",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"licenses": [
|
"licenses": [
|
||||||
@ -15,7 +15,7 @@
|
|||||||
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@nocobase/test": "0.7.0-alpha.10"
|
"@nocobase/test": "0.7.0-alpha.15"
|
||||||
},
|
},
|
||||||
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
|
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/plugin-error-handler",
|
"name": "@nocobase/plugin-error-handler",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"description": "",
|
"description": "",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"licenses": [
|
"licenses": [
|
||||||
@ -18,7 +18,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@formily/json-schema": "^2.0.15",
|
"@formily/json-schema": "^2.0.15",
|
||||||
"@nocobase/server": "0.7.0-alpha.10"
|
"@nocobase/server": "0.7.0-alpha.15"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/plugin-file-manager",
|
"name": "@nocobase/plugin-file-manager",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"licenses": [
|
"licenses": [
|
||||||
@ -16,16 +16,17 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@koa/multer": "^3.0.0",
|
"@koa/multer": "^3.0.0",
|
||||||
"@nocobase/server": "0.7.0-alpha.10",
|
"@nocobase/server": "0.7.0-alpha.15",
|
||||||
"aws-sdk": "^2.2.32",
|
"aws-sdk": "^2.2.32",
|
||||||
"koa-static": "^5.0.0",
|
"koa-static": "^5.0.0",
|
||||||
|
"mkdirp": "~0.5.4",
|
||||||
"mime-match": "^1.0.2",
|
"mime-match": "^1.0.2",
|
||||||
"multer": "^1.4.2",
|
"multer": "^1.4.2",
|
||||||
"multer-aliyun-oss": "1.1.1",
|
"multer-aliyun-oss": "1.1.1",
|
||||||
"multer-s3": "^2.10.0"
|
"multer-s3": "^2.10.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@nocobase/test": "0.7.0-alpha.10",
|
"@nocobase/test": "0.7.0-alpha.15",
|
||||||
"@types/koa-multer": "^1.0.1",
|
"@types/koa-multer": "^1.0.1",
|
||||||
"@types/multer": "^1.4.5"
|
"@types/multer": "^1.4.5"
|
||||||
},
|
},
|
||||||
|
@ -46,7 +46,6 @@ describe('action', () => {
|
|||||||
size: 13,
|
size: 13,
|
||||||
mimetype: 'text/plain',
|
mimetype: 'text/plain',
|
||||||
meta: {},
|
meta: {},
|
||||||
storageId: 1,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// 文件上传和解析是否正常
|
// 文件上传和解析是否正常
|
||||||
@ -119,7 +118,6 @@ describe('action', () => {
|
|||||||
// see: https://github.com/ljharb/qs/issues/91
|
// see: https://github.com/ljharb/qs/issues/91
|
||||||
// 或考虑使用 query-string 库的 parseNumbers 等配置项
|
// 或考虑使用 query-string 库的 parseNumbers 等配置项
|
||||||
meta: { width: '100', height: '100' },
|
meta: { width: '100', height: '100' },
|
||||||
storageId: 1,
|
|
||||||
};
|
};
|
||||||
// 上传正常返回
|
// 上传正常返回
|
||||||
expect(body.data).toMatchObject(matcher);
|
expect(body.data).toMatchObject(matcher);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/plugin-multi-app-manager",
|
"name": "@nocobase/plugin-multi-app-manager",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"licenses": [
|
"licenses": [
|
||||||
@ -15,7 +15,7 @@
|
|||||||
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nocobase/server": "0.7.0-alpha.10"
|
"@nocobase/server": "0.7.0-alpha.15"
|
||||||
},
|
},
|
||||||
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
|
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/plugin-notifications",
|
"name": "@nocobase/plugin-notifications",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"licenses": [
|
"licenses": [
|
||||||
@ -18,7 +18,7 @@
|
|||||||
"nodemailer": "^6.6.1"
|
"nodemailer": "^6.6.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@nocobase/test": "0.7.0-alpha.10",
|
"@nocobase/test": "0.7.0-alpha.15",
|
||||||
"@types/nodemailer": "6.4.4",
|
"@types/nodemailer": "6.4.4",
|
||||||
"nodemailer-mock": "^1.5.11"
|
"nodemailer-mock": "^1.5.11"
|
||||||
},
|
},
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/plugin-system-settings",
|
"name": "@nocobase/plugin-system-settings",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"licenses": [
|
"licenses": [
|
||||||
@ -15,7 +15,7 @@
|
|||||||
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@nocobase/test": "0.7.0-alpha.10"
|
"@nocobase/test": "0.7.0-alpha.15"
|
||||||
},
|
},
|
||||||
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
|
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/plugin-ui-routes-storage",
|
"name": "@nocobase/plugin-ui-routes-storage",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"licenses": [
|
"licenses": [
|
||||||
@ -18,7 +18,7 @@
|
|||||||
"flat-to-nested": "^1.1.1"
|
"flat-to-nested": "^1.1.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@nocobase/test": "0.7.0-alpha.10"
|
"@nocobase/test": "0.7.0-alpha.15"
|
||||||
},
|
},
|
||||||
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
|
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/plugin-ui-schema-storage",
|
"name": "@nocobase/plugin-ui-schema-storage",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"licenses": [
|
"licenses": [
|
||||||
@ -16,7 +16,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@formily/json-schema": "^2.0.15",
|
"@formily/json-schema": "^2.0.15",
|
||||||
"@nocobase/test": "0.7.0-alpha.10"
|
"@nocobase/test": "0.7.0-alpha.15"
|
||||||
},
|
},
|
||||||
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
|
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/plugin-users",
|
"name": "@nocobase/plugin-users",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"licenses": [
|
"licenses": [
|
||||||
@ -18,7 +18,7 @@
|
|||||||
"jsonwebtoken": "^8.5.1"
|
"jsonwebtoken": "^8.5.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@nocobase/test": "0.7.0-alpha.10",
|
"@nocobase/test": "0.7.0-alpha.15",
|
||||||
"@types/jsonwebtoken": "^8.5.8"
|
"@types/jsonwebtoken": "^8.5.8"
|
||||||
},
|
},
|
||||||
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
|
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nocobase/plugin-workflow",
|
"name": "@nocobase/plugin-workflow",
|
||||||
"version": "0.7.0-alpha.10",
|
"version": "0.7.0-alpha.15",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"licenses": [
|
"licenses": [
|
||||||
@ -15,14 +15,14 @@
|
|||||||
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
"build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir esm"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nocobase/actions": "0.7.0-alpha.10",
|
"@nocobase/actions": "0.7.0-alpha.15",
|
||||||
"@nocobase/database": "0.7.0-alpha.10",
|
"@nocobase/database": "0.7.0-alpha.15",
|
||||||
"@nocobase/server": "0.7.0-alpha.10",
|
"@nocobase/server": "0.7.0-alpha.15",
|
||||||
"@nocobase/utils": "0.7.0-alpha.10",
|
"@nocobase/utils": "0.7.0-alpha.15",
|
||||||
"json-templates": "^4.2.0"
|
"json-templates": "^4.2.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@nocobase/test": "0.7.0-alpha.10"
|
"@nocobase/test": "0.7.0-alpha.15"
|
||||||
},
|
},
|
||||||
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
|
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
|
||||||
}
|
}
|
||||||
|
@ -148,7 +148,7 @@ function minus(a, b) {
|
|||||||
return a - b;
|
return a - b;
|
||||||
}
|
}
|
||||||
|
|
||||||
function multipe(...args) {
|
function multiple(...args) {
|
||||||
return args.reduce((result, a) => result * a, 1);
|
return args.reduce((result, a) => result * a, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,13 +162,13 @@ function mod(a, b) {
|
|||||||
|
|
||||||
calculators.register('add', add);
|
calculators.register('add', add);
|
||||||
calculators.register('minus', minus);
|
calculators.register('minus', minus);
|
||||||
calculators.register('multipe', multipe);
|
calculators.register('multiple', multiple);
|
||||||
calculators.register('divide', divide);
|
calculators.register('divide', divide);
|
||||||
calculators.register('mod', mod);
|
calculators.register('mod', mod);
|
||||||
|
|
||||||
calculators.register('+', add);
|
calculators.register('+', add);
|
||||||
calculators.register('-', minus);
|
calculators.register('-', minus);
|
||||||
calculators.register('*', multipe);
|
calculators.register('*', multiple);
|
||||||
calculators.register('/', divide);
|
calculators.register('/', divide);
|
||||||
calculators.register('%', mod);
|
calculators.register('%', mod);
|
||||||
|
|
||||||
|
12
yarn.lock
12
yarn.lock
@ -11106,6 +11106,11 @@ minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.
|
|||||||
resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
|
resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
|
||||||
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
|
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
|
||||||
|
|
||||||
|
minimist@^1.2.6:
|
||||||
|
version "1.2.6"
|
||||||
|
resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
|
||||||
|
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
|
||||||
|
|
||||||
minipass-collect@^1.0.2:
|
minipass-collect@^1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
|
resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
|
||||||
@ -11217,6 +11222,13 @@ mkdirp@1.0.4, mkdirp@1.x, mkdirp@^1.0.3, mkdirp@^1.0.4:
|
|||||||
dependencies:
|
dependencies:
|
||||||
minimist "^1.2.5"
|
minimist "^1.2.5"
|
||||||
|
|
||||||
|
mkdirp@~0.5.4:
|
||||||
|
version "0.5.6"
|
||||||
|
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
|
||||||
|
integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
|
||||||
|
dependencies:
|
||||||
|
minimist "^1.2.6"
|
||||||
|
|
||||||
mockjs@^1.1.0:
|
mockjs@^1.1.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.npmjs.org/mockjs/-/mockjs-1.1.0.tgz#e6a0c378e91906dbaff20911cc0273b3c7d75b06"
|
resolved "https://registry.npmjs.org/mockjs/-/mockjs-1.1.0.tgz#e6a0c378e91906dbaff20911cc0273b3c7d75b06"
|
||||||
|
Loading…
Reference in New Issue
Block a user