diff --git a/example/pom.xml b/example/pom.xml index a4cdb395ea597cd6a167dd03f5cd24ef8f919fc3..8962c4bdbdbc5c881b50a0526f0e359e7ab3ffe7 100644 --- a/example/pom.xml +++ b/example/pom.xml @@ -72,10 +72,10 @@ 2.6 -                ttf -                woff -                woff2 -            + ttf + woff + woff2 + diff --git a/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/java/com/fast/develop/meta/resource/MetaResource.java b/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/java/com/fast/develop/meta/resource/MetaResource.java index a78b6ea86acd0ea3aae355ed9e7fd0f202498048..aa1180094518e7481f00588606a4e977d02a5a5e 100644 --- a/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/java/com/fast/develop/meta/resource/MetaResource.java +++ b/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/java/com/fast/develop/meta/resource/MetaResource.java @@ -21,6 +21,7 @@ public class MetaResource extends BaseMeta { private Boolean isSystem; private List funcs; private Map contentPanel; + private Map propertiesPanel; public enum Type{ folder, file, metadata; @@ -82,4 +83,12 @@ public class MetaResource extends BaseMeta { public void setContentPanel(Map contentPanel) { this.contentPanel = contentPanel; } + + public Map getPropertiesPanel() { + return propertiesPanel; + } + + public void setPropertiesPanel(Map propertiesPanel) { + this.propertiesPanel = propertiesPanel; + } } diff --git a/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/java/com/fast/develop/meta/resource/loader/MetaResourceLoader.java b/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/java/com/fast/develop/meta/resource/loader/MetaResourceLoader.java index 2e9f812dd83534db09e2b8d04b9df5535ff776aa..235411108f84c7ceac45e9dc2a6417eb824fe4ec 100644 --- a/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/java/com/fast/develop/meta/resource/loader/MetaResourceLoader.java +++ b/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/java/com/fast/develop/meta/resource/loader/MetaResourceLoader.java @@ -59,6 +59,7 @@ public class MetaResourceLoader implements MetaLoader { bindIsSystem(rawSchema, metaResource); bindFuncs(rawSchema, metaResource); bindContentPanel(rawSchema, metaResource); + bindpropertiesPanel(rawSchema, metaResource); return metaResource; } @@ -101,6 +102,13 @@ public class MetaResourceLoader implements MetaLoader { } } + private void bindpropertiesPanel(JSONObject rawSchema, MetaResource metaResource){ + JSONObject jsonObject = rawSchema.optJSONObject("propertiesPanel"); + if(jsonObject != null){ + metaResource.setPropertiesPanel(jsonObject.toMap()); + } + } + public ObjectSchema getObjectSchema() { return objectSchema; } diff --git a/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/resources/.schema/resource/domain_file.json b/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/resources/.schema/resource/domain_file.json index 93f73dc03c55bf92d3764e0527534330cdb6ba27..2e91b9585374ebf474eac26fcef5e55b585eec24 100644 --- a/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/resources/.schema/resource/domain_file.json +++ b/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/resources/.schema/resource/domain_file.json @@ -54,9 +54,8 @@ } ] } - - ], + "contentPanel":{ "mode":"amis", "amisSchema":{ @@ -84,6 +83,9 @@ ] } } + }, + "propertiesPanel":{ + "mode":"listener" } } diff --git a/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/resources/.schema/resource/domain_file_field.json b/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/resources/.schema/resource/domain_file_field.json index 8806db50854f1788f7da0b0f2d0a1ae5bd363efc..8b2de676677afaed122a2a739b7f82c1fd7685a3 100644 --- a/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/resources/.schema/resource/domain_file_field.json +++ b/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/resources/.schema/resource/domain_file_field.json @@ -11,6 +11,9 @@ "mode":"listener", "listenerName":"removeListener" } - ] + ], + "propertiesPanel":{ + "mode":"listener" + } } diff --git a/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/resources/.schema/resource/domain_file_field_primary_key.json b/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/resources/.schema/resource/domain_file_field_primary_key.json index 5e48e267c5b8c30537ab644f82e59e4c874a189f..49c42e5b8d48c262260b7d1acb07199964eb58bf 100644 --- a/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/resources/.schema/resource/domain_file_field_primary_key.json +++ b/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/resources/.schema/resource/domain_file_field_primary_key.json @@ -8,6 +8,9 @@ { "title":"主键不可操作" } - ] + ], + "propertiesPanel":{ + "mode":"listener" + } } diff --git a/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/resources/.schema/resource/domain_folder.json b/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/resources/.schema/resource/domain_folder.json index dfe3388e9dc6495bf6b3a2fc6fad929610128ea1..14504e199b2f2a6a848dcb31c624d0007d3471a3 100644 --- a/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/resources/.schema/resource/domain_folder.json +++ b/fast-develop-server/fast-develop-meta/fast-develop-meta-resource/src/main/resources/.schema/resource/domain_folder.json @@ -76,6 +76,32 @@ "mode":"listener", "listenerName":"renameListener" } - ] + ], + "propertiesPanel":{ + "mode":"amis", + "amisSchema":{ + "title": "", + "type": "form", + "mode": "horizontal", + "api": "/saveForm", + "body": [ + { + "label": "Name", + "type": "input-text", + "name": "name" + }, + { + "label": "Email", + "type": "input-email", + "name": "email" + }, + { + "type": "tpl", + "tpl": "Hello ${name}" + } + ], + "actions":[] + } + } } diff --git a/fast-develop-web/fast-develop-editor/pom.xml b/fast-develop-web/fast-develop-editor/pom.xml index 7b88ac8af9c25d60d7f64834d6c9dd3b50caa329..1fd2b3f4fe13ade72688f53179aa85ec222043db 100644 --- a/fast-develop-web/fast-develop-editor/pom.xml +++ b/fast-develop-web/fast-develop-editor/pom.xml @@ -54,10 +54,10 @@ 2.6 -                ttf -                woff -                woff2 -            + ttf + woff + woff2 + diff --git a/fast-develop-web/fast-develop-editor/src/fast-develop/gulpfile.js b/fast-develop-web/fast-develop-editor/src/fast-develop/gulpfile.js index 5679b26e84b12de85c5a641119b1656d1331fc4d..811c56df2c0061cfe4f1976d126d13157c91b3c5 100644 --- a/fast-develop-web/fast-develop-editor/src/fast-develop/gulpfile.js +++ b/fast-develop-web/fast-develop-editor/src/fast-develop/gulpfile.js @@ -52,7 +52,7 @@ function js(){ function module(){ - return src('src/js/module/*') + return src('src/js/module/**') .pipe(dest(distPath + 'js/module')) } @@ -157,7 +157,7 @@ function watches(){ watch(['src/less/*.less'], series(css,cssMinify)) watch(['src/css/*.css'], series(cssMinify)) watch(['src/js/*.js'], parallel(js)) - watch(['src/js/module/*.js'], parallel(module)) + watch(['src/js/module/**'], parallel(module)) watch(['src/index.html'], parallel(html)) watch(['src/image/*'], parallel(image)) watch(['src/config/*'], parallel(fast_config)) @@ -177,8 +177,9 @@ function server(){ middleware: function (connect, opt) { return [ createProxyMiddleware( - '/api',{ - target: 'http://localhost:8080' + '/builder',{ + // target: 'http://localhost:8080' + target: 'http://localhost:8210' }) ] @@ -187,11 +188,11 @@ function server(){ watch(['src/less/*.less'], series(css,cssMinify)) watch(['src/css/*.css'], series(cssMinify)) watch(['src/js/*.js'], parallel(js)) - watch(['src/js/module/*.js'], parallel(module)) + watch(['src/js/module/**'], parallel(module)) watch(['src/index.html'], parallel(html)) watch(['src/image/*'], parallel(image)) watch(['src/config/*'], parallel(fast_config)) - watch(['src/compoment/**/*.*'], parallel(compoment)) + watch(['src/compoment/**'], parallel(compoment)) } diff --git a/fast-develop-web/fast-develop-editor/src/fast-develop/src/config/fast.config.yml b/fast-develop-web/fast-develop-editor/src/fast-develop/src/config/fast.config.yml index dbf08fb4c0ef49d3c2b52d056753faf61eb5ed90..883d28f8e9dd683e7a16a8225b747e70c8f21cbd 100644 --- a/fast-develop-web/fast-develop-editor/src/fast-develop/src/config/fast.config.yml +++ b/fast-develop-web/fast-develop-editor/src/fast-develop/src/config/fast.config.yml @@ -1,2 +1,4 @@ ## 网站配置 -api: "/api/" +api: "/builder/" +#api: "/api/" +enableEnv: false diff --git a/fast-develop-web/fast-develop-editor/src/fast-develop/src/index.html b/fast-develop-web/fast-develop-editor/src/fast-develop/src/index.html index 609b3368628f3c37e2df3179900585bd2bea5371..532145dae5a14480776f165fb23802ffdc3b2341 100644 --- a/fast-develop-web/fast-develop-editor/src/fast-develop/src/index.html +++ b/fast-develop-web/fast-develop-editor/src/fast-develop/src/index.html @@ -490,7 +490,7 @@ var treeConst; - var schema = { + var schemas = { formType:{ domain_model:domainModelForm, domain_model_field:domainModelFieldForm, diff --git a/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/fastDevelop.js b/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/fastDevelop.js index 9e847299780b7fec5ee3edf5748dfb353cbe0794..9106b11021aadf419d3021d501e375bab043da41 100644 --- a/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/fastDevelop.js +++ b/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/fastDevelop.js @@ -9,11 +9,16 @@ layui.config({ version: "0.1.0", api:"api" }).extend({ - editor: "editor", // 框架布局组件 + editor: "editor/editor", // 框架布局组件 + resource_content: "editor/resource_content", // 资源内容模块 + resource_tree: "editor/resource_tree", // 资源功能模块 + listener: "editor/listener", // 监听器模块 + schema: "editor/schema", // Schema模块 + domain_design: "editor/domain_design", + resource_properties: "editor/resource_properties", jqgrid: "jqgrid", // jq表格组件 etree: "etree", // layui.etree 扩展树 ztree: "ztree", // layui.ztree - domain_design: "domain_design", edropdown: "edropdown", // layui.edropdown 扩展下拉 fast_config: "fast_config", // 配置 yaml: "yaml", // 配置 diff --git a/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/domain_design.js b/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor/domain_design.js similarity index 99% rename from fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/domain_design.js rename to fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor/domain_design.js index c0a723081ce2c3454ca6cb19a54b3510b0c90039..2c73bbd4ae01199502c6ccc222c22fe0171dcbee 100644 --- a/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/domain_design.js +++ b/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor/domain_design.js @@ -27,7 +27,7 @@ layui.define(['element', 'api', 'fast_config'], function(exports) { var grid; var parentContextData = window.parent.window.contextData; - var path = parentContextData.contextmenuData.data.path; + // var path = parentContextData.contextmenuData.data.path; var metaName; diff --git a/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor/editor.js b/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor/editor.js new file mode 100644 index 0000000000000000000000000000000000000000..a904657c7c148a9c737c1d86e8f8535df283cc50 --- /dev/null +++ b/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor/editor.js @@ -0,0 +1,139 @@ +layui.define(['element', 'edropdown', 'layer', 'util', 'form', 'fast_config', 'api', 'schema', 'resource_tree'], function(exports) { + "use strict"; + + + + /** + * Button component + * */ + var MOD_NAME = 'editor', + $ = layui.jquery, + element = layui.element, + layer = layui.layer, + form = layui.form, + util = layui.util, + api = layui.api, + contentElem = '#fast-body', + resource_tree = layui.resource_tree, + modelTree + + ; + + + var editor = function(opt) { + this.option = opt; + }; + + + function appendElem(option){ + + var sideBox = ` +
+
+
+
+
    +
  • Repository
  • +
  • Workflow
  • +
+
+
+
    +
    +
    +
      +
      +
      + +
      + +
      +
      +
      +
      +
      +
      + +
      +
      +
      + +
      +
      + `; + + $(option.elem).append(sideBox); + } + + + /** + * Button start loading + * */ + editor.prototype.render = function(opt) { + + + var option = { + elem: opt.elem, + funcAmis: null, + } + + appendElem(option); + + // resource_tree.render({ + // elem: "#workflowResource", + // api:{ + // enableRootPath: false, + // url: "http://localhost:8210/builder/api/v1/engine/workflow/tree", + // success: function(data){ + // var wkflTree = $.fn.zTree.getZTreeObj("workflowResource"); + // wkflTree.addNodes(null, data); + // } + // }, + // contentElem: contentElem + // }) + + resource_tree.render({ + elem: "#resource", + api:"http://localhost:8210/builder/api/v1/engine/development/tree", + contentElem: contentElem + }) + + + return new editor(option); + } + + //头部事件 + util.event('lay-header-event', { + //左侧菜单事件 + menuLeft: function(othis){ + layer.msg('展开左侧菜单的操作', {icon: 0}); + } + ,menuRight: function(){ + layer.open({ + type: 1 + ,content: '
      处理右侧面板的操作
      ' + ,area: ['360px', '100%'] + ,offset: 'rt' //右上角 + ,anim: 5 + ,shadeClose: true + }); + } + }); + + + + $("#run").click(function(){ + api.get({ + enableRootPath: true, + url: "meta/configuration/reload", + async: false, + success: function(data){ + layer.msg('操作成功'); + } + }); + + }); + + + exports(MOD_NAME, new editor()); +}); diff --git a/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor/listener.js b/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor/listener.js new file mode 100644 index 0000000000000000000000000000000000000000..e3fbb6ae22caa71c716e84d9a8755d7c06443a94 --- /dev/null +++ b/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor/listener.js @@ -0,0 +1,79 @@ +layui.define(['element', 'fast_config'], function(exports) { + "use strict"; + + + function domainModelContentPanelListener(data) { + amis.render({ + elem: '#fast-body', + json: { + type: 'page', + title: '表单页面', + body: { + type: 'form', + mode: 'horizontal', + api: '/saveForm', + body: [ + { + label: 'Name', + type: 'input-text', + name: 'name' + }, + { + label: 'Email', + type: 'input-email', + name: 'email' + } + ] + } + } + }) + } + + function designDomainListener(data) { + designDoamin() + } + + function designDoamin(script, data) { + resetContent(contentElem) + domain_design.render({ + elem: contentElem + }) + } + + /** + * Button component + * */ + var MOD_NAME = 'listener', + $ = layui.jquery, + fast_config = layui.fast_config, + + //监听器 + contentPanelListeners = { + domainmodel_contentPanel_listener:designDomainListener + }, + contextMenuListeners = { + + } + ; + + + + var listener = { + registerContentPanel : function(name, listener){ + contentPanelListeners[name] = listener; + }, + getContentPanelListener : function(name){ + return contentPanelListeners[name]; + }, + registerContextMenu : function(name, listener){ + contextMenuListeners[name] = listener; + }, + getContextMenuListener : function(name){ + return contextMenuListeners[name]; + } + } + + + + exports(MOD_NAME, listener); +}); diff --git a/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor/resource_content.js b/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor/resource_content.js new file mode 100644 index 0000000000000000000000000000000000000000..62b31d4f5820df6a8bd0a67e8e55a118f0d04b21 --- /dev/null +++ b/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor/resource_content.js @@ -0,0 +1,114 @@ +layui.define(['element', 'api', 'amis', 'schema', 'listener'], function(exports) { + "use strict"; + + /** + * Button component + * */ + var MOD_NAME = 'resource_content', + $ = layui.jquery, + api = layui.api, + amis = layui.amis, + schema = layui.schema, + listeners = layui.listener, + metaType = null + ; + + var resource_content = function(opt) { + this.option = opt; + }; + + + function resetContent(contentElem){ + $(contentElem).remove(); + $('.layui-body.gs-body').append('
      ') + } + + + /** + 弹出iframe页面(iframe后面会添加灰色蒙版) + **/ + function showIframe(url,contentElem,w,h){ + var frameId = metaType + '_YuFrame1'; + + //添加iframe + var if_w = w; + var if_h = h; + //allowTransparency='true' 设置背景透明 + $("").prependTo(contentElem); + var st=document.documentElement.scrollTop|| document.body.scrollTop;//滚动条距顶部的距离 + var sl=document.documentElement.scrollLeft|| document.body.scrollLeft;//滚动条距左边的距离 + var ch=document.documentElement.clientHeight;//屏幕的高度 + var cw=document.documentElement.clientWidth;//屏幕的宽度 + var objH=$("#" + frameId).height();//浮动对象的高度 + var objW=$("#" + frameId).width();//浮动对象的宽度 + var objT=Number(st)+(Number(ch)-Number(objH))/2; + var objL=Number(sl)+(Number(cw)-Number(objW))/2; + $("#" + frameId).css('left',objL); + $("#" + frameId).css('top',objT); + + $("#" + frameId).attr("src", url) + + //添加背景遮罩 + var frameById = metaType + '_YuFrame1Bg'; + $("
      ").prependTo(contentElem); + var bgWidth = Math.max($("body").width(),cw); + var bgHeight = Math.max($("body").height(),ch); + $("#" + frameById).css({width:bgWidth,height:bgHeight}); + + //点击背景遮罩移除iframe和背景 + $("#" + frameById).click(function() { + $("#" + frameId).remove(); + $("#" + frameById).remove(); + }); + } + + /** + * Button start loading + * */ + resource_content.prototype.render = function(opt) { + + var option = { + elem: opt.elem, + treeNode: opt.treeNode, + amisData: opt.amisData + } + + metaType = option.treeNode.data.type.metaType; + + var resourceTypeSchema = schema.get("resource"); + var typeSchema = resourceTypeSchema[metaType]; + + resetContent(option.elem); + if(typeSchema.contentPanel){ + var id = typeSchema.id; + var contentPanel = typeSchema.contentPanel; + if(contentPanel.mode === 'listener'){ + var listenerName = id + '_contentPanel_listener'; + debugger + var listener = listeners.getContentPanelListener(listenerName); + if(listener && typeof listener === 'function'){ + listener(option.treeNode) + } + }else if(contentPanel.mode === 'amis'){ + var amisSchema = contentPanel.amisSchema; + var amisSchemaApi = contentPanel.amisSchemaApi; + amis.render({ + elem: option.elem, + schema: amisSchema, + schemaApi: amisSchemaApi, + props:{ + data:option.amisData + } + }) + }else if(contentPanel.mode === 'iframe'){ + var iframeUrl =contentPanel.url.format(option.amisData); + showIframe(iframeUrl,option.elem); + } + } + + return new resource_content(option); + } + + + exports(MOD_NAME, new resource_content()); +}); diff --git a/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor/resource_properties.js b/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor/resource_properties.js new file mode 100644 index 0000000000000000000000000000000000000000..41eac0312f3307975a339e472919886b6eacab0a --- /dev/null +++ b/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor/resource_properties.js @@ -0,0 +1,183 @@ +layui.define(['element', 'api', 'amis', 'schema', 'listener', 'form'], function(exports) { + "use strict"; + + /** + * Button component + * */ + var MOD_NAME = 'resource_properties', + $ = layui.jquery, + api = layui.api, + amis = layui.amis, + schema = layui.schema, + form = layui.form, + + laytpl = layui.laytpl, + metaType = null, + selectFileMetaData, + elem = null, + path = null, + treeNode = null, + + propertiesPanelListeners = { + domain_model_propertiesPanel_listener:domain_model_propertiesPanel_listener, + domain_model_field_propertiesPanel_listener:domain_model_field_propertiesPanel_listener, + domain_file_field_primary_key_propertiesPanel_listener:domain_file_field_primary_key_propertiesPanel_listener + } + ; + + function domain_model_propertiesPanel_listener(data){ + getFileMetaData(path, treeNode); + } + function domain_model_field_propertiesPanel_listener(data){ + getFileMetaData(path, treeNode); + } + function domain_file_field_primary_key_propertiesPanel_listener(data){ + getFileMetaData(path, treeNode); + } + + var resource_properties = function(opt) { + this.option = opt; + }; + + + function randerForm(script, data) { + var getTpl = script.innerHTML,view = document.getElementById(elem.replace('#', '')); + laytpl(getTpl).render(data, function(html){ + view.innerHTML = html; + }); + } + + + function resetForm(){ + $("#form-data")[0].reset(); + form.render(); + } + + function getFileMetaData(path, selectData) { + randerForm(schemas.formType[selectData.data.type.metaType], selectData.data) + api.get({ + enableRootPath: true, + url: "resource", + data: {path:path}, + async: false, + dataType: "json", + success: function(data){ + selectFileMetaData = { + metadata: data, + selectData: selectData + } + + //重置表单 + resetForm(); + //给表单赋值 + form.val('data-form',selectFileMetaData.metadata) + + } + }); + } + + + /** + 弹出iframe页面(iframe后面会添加灰色蒙版) + **/ + function showIframe(url,w,h){ + var frameId = metaType + 'proerptes_' + '_YuFrame1'; + + //添加iframe + var if_w = w; + var if_h = h; + //allowTransparency='true' 设置背景透明 + $("").prependTo(contentElem); + var st=document.documentElement.scrollTop|| document.body.scrollTop;//滚动条距顶部的距离 + var sl=document.documentElement.scrollLeft|| document.body.scrollLeft;//滚动条距左边的距离 + var ch=document.documentElement.clientHeight;//屏幕的高度 + var cw=document.documentElement.clientWidth;//屏幕的宽度 + var objH=$("#" + frameId).height();//浮动对象的高度 + var objW=$("#" + frameId).width();//浮动对象的宽度 + var objT=Number(st)+(Number(ch)-Number(objH))/2; + var objL=Number(sl)+(Number(cw)-Number(objW))/2; + $("#" + frameId).css('left',objL); + $("#" + frameId).css('top',objT); + + $("#" + frameId).attr("src", url) + + //添加背景遮罩 + var frameById = metaType + 'proerptes_' + '_YuFrame1Bg'; + $("
      ").prependTo(contentElem); + var bgWidth = Math.max($("body").width(),cw); + var bgHeight = Math.max($("body").height(),ch); + $("#" + frameById).css({width:bgWidth,height:bgHeight}); + + //点击背景遮罩移除iframe和背景 + $("#" + frameById).click(function() { + $("#" + frameId).remove(); + $("#" + frameById).remove(); + }); + } + + + + function resetContent(contentElem){ + $(contentElem).remove(); + $('#viewFormContainer').append('
      ') + } + + + + /** + * Button start loading + * */ + resource_properties.prototype.render = function(opt) { + + var option = { + elem: opt.elem, + path: opt.path, + treeNode: opt.treeNode, + amisData: opt.amisData + } + + elem = option.elem; + metaType = option.treeNode.data.type.metaType; + path = option.path; + treeNode = option.treeNode; + + var resourceTypeSchema = schema.getResource(); + var typeSchema = resourceTypeSchema[metaType]; + + resetContent(option.elem); + + debugger + if(typeSchema.propertiesPanel){ + var id = typeSchema.id; + var propertiesPanel = typeSchema.propertiesPanel; + if(propertiesPanel.mode === 'listener'){ + var listenerName = id + '_propertiesPanel_listener'; + var listener = propertiesPanelListeners[listenerName]; + if(listener && typeof listener === 'function'){ + listener(option.treeNode) + } + }else if(propertiesPanel.mode === 'amis'){ + // var allData = getGlobalEnv(option.treeNode.data); + var amisSchema = propertiesPanel.amisSchema; + var amisSchemaApi = propertiesPanel.amisSchemaApi; + amis.render({ + elem: option.elem, + schema: amisSchema, + schemaApi: amisSchemaApi, + props:{ + data:option.treeNode.data + } + }) + }else if(propertiesPanel.mode === 'iframe'){ + var iframeUrl = propertiesPanel.url; + showIframe(iframeUrl); + } + } + + + return new resource_properties(option); + } + + + exports(MOD_NAME, new resource_properties()); +}); diff --git a/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor.js b/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor/resource_tree.js similarity index 60% rename from fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor.js rename to fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor/resource_tree.js index 65e6fd2134bea505896baa681729eecb5aac898d..89f0e17d556cc3215e84648321b6dcf94500988b 100644 --- a/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor.js +++ b/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor/resource_tree.js @@ -1,50 +1,292 @@ -layui.define(['element', 'edropdown', 'layer', 'util', 'etree', 'form', 'amis', 'jqgrid', 'fast_config', 'api', 'ztree', 'domain_design'], function(exports) { +layui.define(['element', 'api', 'amis', 'schema', 'listener', 'jqgrid', 'domain_design', 'edropdown', 'form', 'schema', 'resource_content', 'ztree', 'resource_properties','fast_config'], function(exports) { "use strict"; String.prototype.format = function() { if(arguments.length == 0) return this; - var obj = arguments[0]; + var obj = getGlobalEnv(arguments[0]); var s = this; + // for(var key in obj) { + // var value = JSON.stringify(obj[key]); + // if(typeof obj[key] === 'object'){ + // s = s.replace(new RegExp("\"\\$\\{" + key + "\\}\"", "g"), value); + // }else{ + // s = s.replace(new RegExp("\\$\\{" + key + "\\}", "g"), obj[key]); + // } + // } for(var key in obj) { var value = JSON.stringify(obj[key]); - if(typeof obj[key] === 'object'){ + if( typeof(obj[key])=='object'){ s = s.replace(new RegExp("\"\\$\\{" + key + "\\}\"", "g"), value); - }else{ - s = s.replace(new RegExp("\\$\\{" + key + "\\}", "g"), obj[key]); - } + var sobj = obj[key]; + for(var sk in sobj){ + s = s.replace(new RegExp("\\$\\{" + key+"\\."+sk + "\\}", "g"), sobj[sk]); + } + } + s = s.replace(new RegExp("\\$\\{" + key + "\\}", "g"), obj[key]); } return s; } - function domainModelContentPanelListener(data) { - amis.render({ - elem: '#fast-body', - json: { - type: 'page', - title: '表单页面', - body: { - type: 'form', - mode: 'horizontal', - api: '/saveForm', - body: [ - { - label: 'Name', - type: 'input-text', - name: 'name' - }, - { - label: 'Email', - type: 'input-email', - name: 'email' - } - ] + + function getMetaPath(value){ + var path; + if(contextmenuData.data.path===null || contextmenuData.data.path===''){ + path = value; + }else{ + path = contextmenuData.data.path + "#/" + value; + } + return path; + } + + /** + * 创建文件 + * @param path + */ + function createMetaData(metaType, path){ + function send(path){ + api.post({ + enableRootPath: true, + url: "schemas/" + metaType + "/fields", + data: {path:path}, + async: false, + success: function(data){ + reloadResource() + } + }); + } + + + layer.prompt({ + formType: 0, + value: '', + title: '请输入文件名称', + area: ['200px', '20px'] //自定义文本域宽高 + }, function(value, index, elem){ + var path = getMetaPath("fields/" + value); + send(path); + layer.close(index); + }); + } + + /** + * 启用 + * @param path + */ + function enable(metaType, path){ + function send(){ + api.put({ + enableRootPath: true, + url: "schemas/" + metaType + "/enable", + data: {path:path}, + async: false, + success: function(data){ + reloadResource() + } + }); + } + + + layer.confirm('是否确认该操作?', { + btn: ['确认', '取消'] + }, function(index, layero){ + send(); + layer.close(index); + }, function(index){ + layer.close(index); + }); + } + + /** + * 启用 + * @param path + */ + function disable(metaType, path){ + function send(){ + api.put({ + enableRootPath: true, + url: "schemas/" + metaType + "/disable", + data: {path:path}, + async: false, + success: function(data){ + reloadResource() + } + }); + } + + + layer.confirm('是否确认该操作?', { + btn: ['确认', '取消'] + }, function(index, layero){ + send(); + layer.close(index); + }, function(index){ + layer.close(index); + }); + + } + + /** + * 创建文件 + * @param path + */ + function rename(name, path){ + function send(name){ + api.put({ + enableRootPath: true, + url: "resource/rename/" + name, + data: {path:path}, + async: false, + success: function(data){ + reloadResource() + } + }); + } + + + layer.prompt({ + formType: 0, + value: name, + title: '请输入文件名称', + area: ['200px', '20px'] //自定义文本域宽高 + }, function(value, index, elem){ + send(value); + layer.close(index); + }); + } + + + + /** + * 创建文件 + * @param path + */ + function createFile(metaType){ + function send(path){ + api.post({ + enableRootPath: true, + type: "POST", + url: "schemas/" + metaType, + data: {path:path}, + async: false, + success: function(data){ + reloadResource() } + }); + } + + + layer.prompt({ + formType: 0, + value: '', + title: '请输入文件名称', + area: ['200px', '20px'] //自定义文本域宽高 + }, function(value, index, elem){ + var path = getFilePath(value); + send(path); + layer.close(index); + }); + } + + + /** + * 获取右键选择数据 -> 文件路径 + */ + function getContextmenuFilePath(){ + return contextmenuData.data.path; + } + + /** + * 删除 + * @param path + */ + function deleteResource(){ + //获取 + var path = getContextmenuFilePath(); + api.delete({ + enableRootPath: true, + url: "resource", + data: {path:path}, + async: false, + success: function(data){ + reloadResource() } + }); + } + + + function openDoamin(script, data) { + resetContent(contentElem) + jqgrid.render({ + elem: contentElem + }) + } + + function designDoamin(script, data) { + resetContent(contentElem) + domain_design.render({ + elem: contentElem }) } + + function getFilePath(value){ + var path; + if(contextmenuData.data.path===null || contextmenuData.data.path===''){ + path = value; + }else{ + path = contextmenuData.data.path + "/" + value; + } + return path; + } + + function reloadResource(){ + debugger + treeObj.refresh(); + // $.fn.zTree.getZTreeObj(treeObj.option.elem.replace('#','')).refresh(); + // var treeObj = ztree.getZTreeObj(elem); + } + + /** + * 创建目录 + * @param path + */ + function createFolder(){ + + function send(path){ + api.post({ + enableRootPath: true, + type: "POST", + url: "resource/folder", + data: {path:path}, + async: false, + success: function(data){ + reloadResource() + } + }); + } + + + layer.prompt({ + formType: 0, + value: '', + title: '请输入文件夹名称', + area: ['200px', '20px'] //自定义文本域宽高 + }, function(value, index, elem){ + var path = getFilePath(value); + send(path); + layer.close(index); + }); + } + + function resetContent(contentElem){ + $(contentElem).remove(); + $('.layui-body.gs-body').append('
      ') + } + + + function createFileListener(data) { createFile('domain_model') @@ -79,10 +321,6 @@ layui.define(['element', 'edropdown', 'layer', 'util', 'etree', 'form', 'amis', createFolder() } - function createTest_contextMenu_listener(data) { - testDialog(); - } - function removeListener(data) { deleteResource(); } @@ -91,73 +329,34 @@ layui.define(['element', 'edropdown', 'layer', 'util', 'etree', 'form', 'amis', createMetaData(); } - function testDialog(dialog, option){ - layer.open({ - type:1, - // area:['20%','200px'], - title: dialog.title, - offset: '30%', - content: "
      ", - shade: 0.3, - btn: ['提交', '取消'] - ,btn1: function(index, layero){ - var amis = option; - var formObject = amis.funcAmis.option.amisScoped.getComponentById("createTestForm").getValues(); - var optionApi = amis.funcAmis.option.schema.api; - - debugger - - execApi({ - optionApi : optionApi, - execData : formObject, - success: function(data){ - reloadResource() - layer.closeAll(); - layer.msg('操作成功'); - } - }) - // var kk=$("#username").val(); - // alert(kk); - }, - cancel: function(layero,index){ - layer.closeAll(); - } - - }); - } - /** * Button component * */ - var MOD_NAME = 'editor', + var MOD_NAME = 'resource_tree', $ = layui.jquery, - element = layui.element, - layer = layui.layer, - form = layui.form, - util = layui.util, - laytpl = layui.laytpl, - etree = layui.etree, - amis = layui.amis, - fast_config = layui.fast_config, + contextmenuData, + contentElem, + elem, jqgrid = layui.jqgrid, domain_design = layui.domain_design, - api = layui.api, - contentElem = '#fast-body', - contextmenuData, - selectFileMetaData, - ztree=layui.ztree, edropdown = layui.edropdown, + selectFileMetaData, + form = layui.form, + laytpl = layui.laytpl, + resource_content = layui.resource_content, + resource_properties = layui.resource_properties, + ztree = layui.ztree, + api = layui.api, + schema = layui.schema, + amis = layui.amis, + treeApi, treeObj, + listener = layui.listener, + fast_config = layui.fast_config, - - //监听器 - contentPanelListeners = { - domain_model_contentPanel_listener:domainModelContentPanelListener, - }, //监听器 contextMenuListeners = { createFileListener:createFileListener, - createTest_contextMenu_listener:createTest_contextMenu_listener, removeListener:removeListener, createDomainModelListener:createDomainModelListener, createDomainFieldListener:createDomainFieldListener, @@ -167,96 +366,140 @@ layui.define(['element', 'edropdown', 'layer', 'util', 'etree', 'form', 'amis', openDomainListener:openDomainListener, designDomainListener:designDomainListener, createFolderListener:createFolderListener - + }, + contentPanelListeners = { + domainmodel_contentPanel_listener:designDomainListener + }, + settings = { + view: { + onKeyboard: true, + showLine: false, + theme:'default' + }, + check: { + enable: true + }, + data: { + simpleData: { + enable: true + } + } + ,callback:{ + onLeafEnter: function(treeId,treeNode){ + console.log(treeId,treeNode) + }, + onClick: zTreeOnClick, + onRightClick: zTreeOnRightClick } - ; +}; - function resetContent(contentElem){ - $(contentElem).remove(); - $('.layui-body.gs-body').append('
      ') - } - - /** - 弹出iframe页面(iframe后面会添加灰色蒙版) - **/ - function showIframe(url,w,h){ - //添加iframe - var if_w = w; - var if_h = h; - //allowTransparency='true' 设置背景透明 - $("").prependTo(contentElem); - var st=document.documentElement.scrollTop|| document.body.scrollTop;//滚动条距顶部的距离 - var sl=document.documentElement.scrollLeft|| document.body.scrollLeft;//滚动条距左边的距离 - var ch=document.documentElement.clientHeight;//屏幕的高度 - var cw=document.documentElement.clientWidth;//屏幕的宽度 - var objH=$("#YuFrame1").height();//浮动对象的高度 - var objW=$("#YuFrame1").width();//浮动对象的宽度 - var objT=Number(st)+(Number(ch)-Number(objH))/2; - var objL=Number(sl)+(Number(cw)-Number(objW))/2; - $("#YuFrame1").css('left',objL); - $("#YuFrame1").css('top',objT); - - $("#YuFrame1").attr("src", url) - - //添加背景遮罩 - $("
      ").prependTo(contentElem); - var bgWidth = Math.max($("body").width(),cw); - var bgHeight = Math.max($("body").height(),ch); - $("#YuFrame1Bg").css({width:bgWidth,height:bgHeight}); - - //点击背景遮罩移除iframe和背景 - $("#YuFrame1Bg").click(function() { - $("#YuFrame1").remove(); - $("#YuFrame1Bg").remove(); - }); - } + ; - var editor = function(opt) { - this.option = opt; - }; + form.on('submit(*)', function(data){ + var fileData = $.extend({}, selectFileMetaData.metadata, data.field); - function reloadResource(){ - api.get({ + api.put({ enableRootPath: true, - url: "resource/tree", + url: "schemas/" + selectFileMetaData.selectData.data.type.metaType, + data: {path:selectFileMetaData.selectData.data.path, value:JSON.stringify(fileData)}, + async: false, + // dataType: "json", success: function(data){ - //可以重载所有基础参数 - // etree.reload('treeId', { - // //新的参数 - // data: data - // }); - var treeObj = $.fn.zTree.getZTreeObj("resource"); - treeObj.addNodes(null, data); + layer.msg('保存成功'); + reloadResource() } + }); + + // schemas + return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。 + }); + + + function zTreeOnClick(event, treeId, treeNode) { + + //是否是元数据,是的话请求元数据schema + resource_properties.render({ + elem: '#viewForm', + path: treeNode.data.path, + treeNode: treeNode + }) + resource_content.render({ + elem: contentElem, + treeNode: treeNode, + amisData: getGlobalEnv(treeNode.data) }) + + + + }; + + function zTreeOnRightClick(event, treeId, treeNode) { + // 将右击事件的节点数据绑定到以下变量中 + contextmenuData = treeNode; + contextData.contextmenuData = contextmenuData; + }; + + var resource_tree = function(opt) { + this.option = opt; + }; + + + function getContextmenuData(){ + return contextmenuData; } - function isJSON(str) { - if (typeof str == 'string') { - try { - JSON.parse(str); - return true; - } catch(e) { - console.log(e); - return false; + + function renderDialog(dialog, option){ + layer.open({ + type:1, + // area:['20%','200px'], + title: dialog.title, + offset: '30%', + content: "
      ", + shade: 0.3, + btn: ['提交', '取消'] + ,btn1: function(index, layero){ + var amis = option; + var formObject = amis.funcAmis.option.amisScoped.getComponentById("modelForm").getValues(); + var optionApi = amis.funcAmis.option.schema.api; + + debugger + + execApi({ + optionApi : optionApi, + execData : formObject, + success: function(data){ + reloadResource() + layer.closeAll(); + layer.msg('操作成功'); + } + }) + // var kk=$("#username").val(); + // alert(kk); + }, + cancel: function(layero,index){ + layer.closeAll(); } - } + + }); } + function formatApiOptionData(optionApi, execData){ var data = JSON.parse(JSON.stringify(optionApi.data).format(execData)); if(data['&'] === '$$'){ - $.extend(data, execData); + $.extend(data, execData["mid"]); delete data['&']; } + $.extend(data, execData); return data } function formatUrl(url, contextData){ //url替换 - return url.format(data); + return url.format(contextData); } function beforeExecHandle(optionApi){ @@ -266,9 +509,35 @@ layui.define(['element', 'edropdown', 'layer', 'util', 'etree', 'form', 'amis', } } + /** + * 获取服务环境变量 + */ + function getGlobalEnv(amisData){ + // debugger + if(fast_config.enableEnv){ + var env = schemas['env']; + if(!env){ + api.get({ + enableRootPath: true, + url: "api/v1/env/getAppEnvironment?appId="+amisData.mid.tenantId, + // url: "schemas/" + type, + async: false, + success: function(data){ + schema['env'] = data; + amisData = {...amisData,...data} + } + }); + }else{ + amisData = {...amisData,...env} + } + } + return amisData; + } + function execApi(apiOpt){ var {optionApi, execData, success} = apiOpt var data = contextmenuData.data; + // var data = getGlobalEnv(contextmenuData.data); if(typeof optionApi === 'object'){ //模版数据替换 var apiOption = optionApi; @@ -282,14 +551,21 @@ layui.define(['element', 'edropdown', 'layer', 'util', 'etree', 'form', 'amis', api.exec(apiOption); }else{ optionApi = optionApi.format(data) - var optionApiProps = optionApi.split(":"); - var method, apiUrl; - if(optionApiProps.length > 1){ - method = optionApiProps[0]; - apiUrl = optionApiProps[1]; - }else{ + // var optionApiProps = optionApi.split(":"); + // var method, apiUrl; + // if(optionApiProps.length > 1){ + // method = optionApiProps[0]; + // apiUrl = optionApiProps[1]; + // }else{ + // method = 'get'; + // apiUrl = optionApiProps[0]; + // } + + var method=optionApi.slice(0,optionApi.indexOf(":")); + var apiUrl=optionApi.slice(optionApi.indexOf(":")+1); + if(method =='http' || optionApi.indexOf(":")==-1){ method = 'get'; - apiUrl = optionApiProps[0]; + apiUrl = optionApi; } var optionApi = { @@ -305,146 +581,73 @@ layui.define(['element', 'edropdown', 'layer', 'util', 'etree', 'form', 'amis', } } - function appendElem(option){ - - var sideBox = ` -
      -
      -
      -
      -
        -
      • Repository
      • -
      • Workflow
      • -
      -
      -
      -
        -
        -
        -
        - -
        - -
        -
        -
        -
        -
        -
        - -
        -
        -
        - -
        -
        - `; - - $(option.elem).append(sideBox); + function registerListeners(){ + $.each(contextMenuListeners, function(name ,_listener){ + listener.registerContextMenu(name, _listener) + }) + $.each(contentPanelListeners, function(name ,_listener){ + listener.registerContentPanel(name, _listener) + }) } - function zTreeOnClick(event, treeId, treeNode) { - - //是否是元数据,是的话请求元数据schema - if(treeNode.data.type.metaData){ - getFileMetaData(treeNode.data.path, treeNode) - } - - var metaType = treeNode.data.type.metaType; - var resourceTypeSchema = getSchema("resource"); - var typeSchema = resourceTypeSchema[metaType]; - - resetContent(contentElem); - if(typeSchema.contentPanel){ - var id = typeSchema.id; - var contentPanel = typeSchema.contentPanel; - if(contentPanel.mode === 'listener'){ - var listenerName = id + '_contentPanel_listener'; - var listener = contentPanelListeners[listenerName]; - if(listener && typeof listener === 'function'){ - listener(treeNode) - } - }else if(contentPanel.mode === 'amis'){ - var amisSchema = contentPanel.amisSchema; - var amisSchemaApi = contentPanel.amisSchemaApi; - amis.render({ - elem: contentElem, - schema: amisSchema, - schemaApi: amisSchemaApi, - props:{ - data:treeNode.data - } - }) - }else if(contentPanel.mode === 'iframe'){ - var iframeUrl = contentPanel.url; - showIframe(iframeUrl); - } - } - - }; - - function zTreeOnRightClick(event, treeId, treeNode) { - // 将右击事件的节点数据绑定到以下变量中 - contextmenuData = treeNode; - contextData.contextmenuData = contextmenuData; - }; - /** * Button start loading * */ - editor.prototype.render = function(opt) { - - + resource_tree.prototype.render = function(opt) { + var option = { elem: opt.elem, - funcAmis: null, + contentElem: opt.contentElem, + api:opt.api } - appendElem(option); - - - - - var setting = { - view: { - onKeyboard: true, - showLine: false, - theme:'default' - }, - check: { - enable: true - }, - data: { - simpleData: { - enable: true - } - } - ,callback:{ - onLeafEnter: function(treeId,treeNode){ - console.log(treeId,treeNode) - }, - onClick: zTreeOnClick, - onRightClick: zTreeOnRightClick - } - }; + contentElem = option.contentElem; + elem = option.elem; + // treeApi = option.api; + + registerListeners(); + + // var setting = { + // view: { + // onKeyboard: true, + // showLine: false, + // theme:'default' + // }, + // check: { + // enable: true + // }, + // data: { + // simpleData: { + // enable: true + // } + // } + // ,callback:{ + // onLeafEnter: function(treeId,treeNode){ + // console.log(treeId,treeNode) + // }, + // onClick: zTreeOnClick, + // onRightClick: zTreeOnRightClick + // } + // }; treeObj = ztree.render({ - elem: '#resource', - setting: setting - }) + elem: option.elem, + setting: settings, + api: option.api + }); //加载树 - reloadResource() - + // reloadResource() edropdown.render({ - elem: '#resource' //在 id="demo" 的元素中触发事件。也可以直接设置为 document,从而重置整个右键菜单 + elem: option.elem //在 id="demo" 的元素中触发事件。也可以直接设置为 document,从而重置整个右键菜单 ,trigger: 'contextmenu' //右键事件 ,click: function(obj, f, e){ - var data = contextmenuData.data; + // var data = contextmenuData.data; + var data = getGlobalEnv(contextmenuData.data); if(obj.mode && obj.mode === 'listener'){ var id = obj.id; var listenerName; @@ -460,7 +663,7 @@ layui.define(['element', 'edropdown', 'layer', 'util', 'etree', 'form', 'amis', }else if(obj.mode && obj.mode === 'dialog'){ var dialog = obj.dialog; if(dialog.mode === 'amis'){ - testDialog(dialog, option); + renderDialog(dialog, option); var amisSchema = dialog.amisSchema; var amisSchemaApi = dialog.amisSchemaApi; var amisNew = amis.render({ @@ -492,7 +695,7 @@ layui.define(['element', 'edropdown', 'layer', 'util', 'etree', 'form', 'amis', beforeRander: function(config){ debugger var data = getContextmenuData(); - var resourceTypeSchema = getSchema("resource"); + var resourceTypeSchema = schema.get("resource"); if(resourceTypeSchema){ var resourceSchema = resourceTypeSchema[data.data.type.metaType]; if(resourceSchema && resourceSchema.funcs){ @@ -515,359 +718,10 @@ layui.define(['element', 'edropdown', 'layer', 'util', 'etree', 'form', 'amis', data: [{}] }); - return new editor(option); - } - - //头部事件 - util.event('lay-header-event', { - //左侧菜单事件 - menuLeft: function(othis){ - layer.msg('展开左侧菜单的操作', {icon: 0}); - } - ,menuRight: function(){ - layer.open({ - type: 1 - ,content: '
        处理右侧面板的操作
        ' - ,area: ['360px', '100%'] - ,offset: 'rt' //右上角 - ,anim: 5 - ,shadeClose: true - }); - } - }); - - form.on('submit(*)', function(data){ - var fileData = $.extend({}, selectFileMetaData.metadata, data.field); - - api.put({ - enableRootPath: true, - url: "schemas/" + selectFileMetaData.selectData.data.type.metaType, - data: {path:selectFileMetaData.selectData.data.path, value:JSON.stringify(fileData)}, - async: false, - // dataType: "json", - success: function(data){ - layer.msg('保存成功'); - reloadResource() - } - }); - - // schemas - return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。 - }); - - function getFileMetaData(path, selectData) { - randerForm(schema.formType[selectData.data.type.metaType], selectData.data) - api.get({ - enableRootPath: true, - url: "resource", - data: {path:path}, - async: false, - dataType: "json", - success: function(data){ - selectFileMetaData = { - metadata: data, - selectData: selectData - } - - //重置表单 - resetForm(); - //给表单赋值 - form.val('data-form',selectFileMetaData.metadata) - - } - }); - } - - function randerForm(script, data) { - var getTpl = script.innerHTML,view = document.getElementById('viewForm'); - laytpl(getTpl).render(data, function(html){ - view.innerHTML = html; - }); - } - - function openDoamin(script, data) { - resetContent(contentElem) - jqgrid.render({ - elem: contentElem - }) - } - - function designDoamin(script, data) { - resetContent(contentElem) - domain_design.render({ - elem: contentElem - }) - } - - function resetForm(){ - $("#form-data")[0].reset(); - form.render(); - } - - - /** - * 创建目录 - * @param path - */ - function createFolder(){ - - function send(path){ - api.post({ - enableRootPath: true, - type: "POST", - url: "resource/folder", - data: {path:path}, - async: false, - success: function(data){ - reloadResource() - } - }); - } - - - layer.prompt({ - formType: 0, - value: '', - title: '请输入文件夹名称', - area: ['200px', '20px'] //自定义文本域宽高 - }, function(value, index, elem){ - var path = getFilePath(value); - send(path); - layer.close(index); - }); - } - - function getFilePath(value){ - var path; - if(contextmenuData.data.path===null || contextmenuData.data.path===''){ - path = value; - }else{ - path = contextmenuData.data.path + "/" + value; - } - return path; - } - - function getMetaPath(value){ - var path; - if(contextmenuData.data.path===null || contextmenuData.data.path===''){ - path = value; - }else{ - path = contextmenuData.data.path + "#/" + value; - } - return path; - } - - /** - * 获取右键选择数据 -> 文件路径 - */ - function getContextmenuFilePath(){ - return contextmenuData.data.path; - } - function getContextmenuData(){ - return contextmenuData; - } - - /** - * 创建文件 - * @param path - */ - function createMetaData(metaType, path){ - function send(path){ - api.post({ - enableRootPath: true, - url: "schemas/" + metaType + "/fields", - data: {path:path}, - async: false, - success: function(data){ - reloadResource() - } - }); - } - - - layer.prompt({ - formType: 0, - value: '', - title: '请输入文件名称', - area: ['200px', '20px'] //自定义文本域宽高 - }, function(value, index, elem){ - var path = getMetaPath("fields/" + value); - send(path); - layer.close(index); - }); - } - - /** - * 启用 - * @param path - */ - function enable(metaType, path){ - function send(){ - api.put({ - enableRootPath: true, - url: "schemas/" + metaType + "/enable", - data: {path:path}, - async: false, - success: function(data){ - reloadResource() - } - }); - } - - - layer.confirm('是否确认该操作?', { - btn: ['确认', '取消'] - }, function(index, layero){ - send(); - layer.close(index); - }, function(index){ - layer.close(index); - }); - } - - /** - * 启用 - * @param path - */ - function disable(metaType, path){ - function send(){ - api.put({ - enableRootPath: true, - url: "schemas/" + metaType + "/disable", - data: {path:path}, - async: false, - success: function(data){ - reloadResource() - } - }); - } - - - layer.confirm('是否确认该操作?', { - btn: ['确认', '取消'] - }, function(index, layero){ - send(); - layer.close(index); - }, function(index){ - layer.close(index); - }); - - } - - /** - * 创建文件 - * @param path - */ - function rename(name, path){ - function send(name){ - api.put({ - enableRootPath: true, - url: "resource/rename/" + name, - data: {path:path}, - async: false, - success: function(data){ - reloadResource() - } - }); - } - - - layer.prompt({ - formType: 0, - value: name, - title: '请输入文件名称', - area: ['200px', '20px'] //自定义文本域宽高 - }, function(value, index, elem){ - send(value); - layer.close(index); - }); - } - - /** - * 创建文件 - * @param path - */ - function createFile(metaType){ - function send(path){ - api.post({ - enableRootPath: true, - type: "POST", - url: "schemas/" + metaType, - data: {path:path}, - async: false, - success: function(data){ - reloadResource() - } - }); - } - - - layer.prompt({ - formType: 0, - value: '', - title: '请输入文件名称', - area: ['200px', '20px'] //自定义文本域宽高 - }, function(value, index, elem){ - var path = getFilePath(value); - send(path); - layer.close(index); - }); - } - - /** - * 删除 - * @param path - */ - function deleteResource(){ - //获取 - var path = getContextmenuFilePath(); - api.delete({ - enableRootPath: true, - url: "resource", - data: {path:path}, - async: false, - success: function(data){ - reloadResource() - } - }); - } - - /** - * 根据schema类型获取schema - * @param type - */ - function getSchema(type){ - var typeSchema = schema[type] - if(!typeSchema){ - api.get({ - enableRootPath: true, - url: "schemas/" + type, - async: false, - success: function(data){ - schema[type] = data - typeSchema = schema[type] - } - }); - } - - return typeSchema; - } - - - - $("#run").click(function(){ - api.get({ - enableRootPath: true, - url: "meta/configuration/reload", - async: false, - success: function(data){ - layer.msg('操作成功'); - } - }); - - }); + return new resource_tree(option); + } - exports(MOD_NAME, new editor()); + exports(MOD_NAME, new resource_tree()); }); diff --git a/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor/schema.js b/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor/schema.js new file mode 100644 index 0000000000000000000000000000000000000000..aaa5f8da9f2c001cd3ee03310ec114f0e62f0af8 --- /dev/null +++ b/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/editor/schema.js @@ -0,0 +1,60 @@ +layui.define(['element', 'fast_config', 'api'], function(exports) { + "use strict"; + + /** + * Button component + * */ + var MOD_NAME = 'schema', + $ = layui.jquery, + fast_config = layui.fast_config, + api = layui.api, + schemas = { + formType:{ + domain_model:domainModelForm, + domain_model_field:domainModelFieldForm, + domain_file_field_primary_key:domainModelFieldForm, + } + } + ; + + + + var schema = { + get : function(type){ + var typeSchema = schemas[type] + if(!typeSchema){ + var schemaData={}; + api.get({ + enableRootPath: true, + url: "schemas/model.json", + // url: "schemas/" + type, + async: false, + success: function(data){ + schemaData = data + } + }); + + api.get({ + enableRootPath: true, + url: "schemas/wkflmodel.json", + // url: "schemas/" + type, + async: false, + success: function(data){ + schemaData = {...schemaData,...data} + } + }); + schema[type] = schemaData + typeSchema = schema[type] + } + + return typeSchema; + }, + getResource: function () { + return this.get('resource'); + } + } + + + + exports(MOD_NAME, schema); +}); diff --git a/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/ztree.js b/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/ztree.js index cdb99665b3124f05093366cd46e7520c6d8a9811..8036157c2140255457f8d8210fdddaf6fb968667 100644 --- a/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/ztree.js +++ b/fast-develop-web/fast-develop-editor/src/fast-develop/src/js/module/ztree.js @@ -6,7 +6,9 @@ layui.define(['element', 'api'], function(exports) { * */ var MOD_NAME = 'ztree', $ = layui.jquery, - api = layui.api + api = layui.api, + elem, + treeOption ; var ztree = function(opt) { @@ -14,6 +16,17 @@ layui.define(['element', 'api'], function(exports) { }; + function resetContent(){ + var $parent = $(elem).parent(); + $(elem).remove(); + $parent.append('
          ') + } + + ztree.prototype.refresh = function (){ + resetContent(); + this.render(treeOption); + } + /** * Button start loading * */ @@ -21,12 +34,35 @@ layui.define(['element', 'api'], function(exports) { var option = { elem: opt.elem, + api: opt.api, setting: opt.setting, - zNodes: opt.zNodes, + // zNodes: opt.zNodes, tree:null } - option.tree = $.fn.zTree.init($(option.elem), option.setting, option.zNodes); + treeOption = option; + elem = option.elem; + + $.ajax({ + url: option.api, + type: 'GET', //GET + async: false, //或false,是否异步 + timeout: 30000, //超时时间 + dataType: 'json', //返回的数据格式:json/xml/html/script/jsonp/text + beforeSend: function (xhr) { + console.log('发送前') + }, + success: function (data, textStatus, jqXHR) { + option.tree = $.fn.zTree.init($(option.elem), option.setting, data); + }, + error: function (xhr, textStatus) { + alert("请求树失败!") + }, + complete: function () { + console.log('结束') + } + }); + return new ztree(option); }