title: ecode使用说明 created: 2026-04-18 updated: 2026-04-18 type: reference tags: [weaver]
ecode使用说明
泛微 Ecology 9 前端二次开发工具官方文档 来源:https://e-cloudstore.com/doc.html#ecode使用说明
ecode核心是解决EC所有界面无侵入定制和扩展二次开发,采用动态注册,不直接修改源码的方案解决开发需求。除了新开发页面的之外,它还支持所有标准页面的修改。ecode包含了整套前端编辑器、编译器,可以让用户无需搭建开发环境直接通过浏览器开始single page前端开发,同时采用ecode开发的内容都是插件化,支持一键共享、复用、二次封装。
使用ecode需要提前学习的内容: - PC端:js、css、es6、react16.x、react-router3、mobx - MOBILE端:js、css、es6、react16.x、react-router4、mobx
相关常用链接
- ecology后端开发文档
- 相关技术快速入门方法
- e9技术站:含所有e9技术文档,包括组件库及前后端sdk、api
- weaJs:pc和移动都可用的一套轻量sdk
- 表单代码块sdk:包含pc和移动sdk
- 建模代码块sdk:只包含pc
- ecode前端开发规范
- ecode常见问题及解决方法
- 全局数据读取
- 支持ecode复写的组件版本信息整理
注意事项(重要)
- 点击查看ecode注意事项
- 点击查看ecode应用导致后台页面白屏通用解决方案
- 点击查看系统登陆页/首页白屏相关问题及解决方案
权限维护
登录sysadmin之后,在组织权限中心-权限管理-角色设置中,添加一个新的角色(如ecode管理员),该角色添加权限项"前端在线开发权限",在成员设置中添加用户即可。
如何安装
- 目前仅支持的浏览器内核:谷歌chrome,国产环境请用360
- 下载并覆盖ecology的ecode通用升级包(注意标准kb1907+ 默认包含ecode,但版本不是最新版)
- 覆盖后到ecology访问地址进入ecode界面:ip:port/ecode
- 只要左侧菜单正常加载系统配置、默认分类,并且无报错就代表安装成功
一、ecode功能概述
1、新建
目前支持新建分类、文件夹、js、css、md
2、文件夹发布
发布成功文件夹变成橙色。作用是发布下面代码到EC,只有文件夹支持发布,文件夹选择了发布,其下面的文件会自动进行构建发布。
- 位置:
/cloudstore/release/${appId} - 此文件默认是不加载的,都是利用sdk去触发加载
3、前置加载
js、css支持前置加载,选择了前置加载将会在系统和组件未加载前执行。
- js在前置加载时可以用来进行一些底层全局事件注册
- css在前置加载时可以用来做一些全局样式修改
- 前置加载的所有脚本将会被合并到
/cloudstore/dev/init.js和/cloudstore/dev/init.css注册 - css在前置加载时可以用来做一些全局样式修改
- 前置加载的所有脚本将会被合并到
/cloudstore/dev/init.js和/cloudstore/dev/init.css### 4、在线编译语法与线下编译语法差异
react可以不用引入,全局默认存在
ecode模块引入与nodejs不同,需要修改成解构赋值
ecode本地模块引入
ecode导出模块到全局
ecode导入全局模块
ecodeSDK.load({
id:'${appId}',
noCss:true,
cb:function () {
var Com = ecodeSDK.getCom('${appId}','NewBrowserForMeeting');
}
});
ecode前置加载文件中异步引入组件
const acParams = {
appId:'${appId}',
name:'NewBrowserForMeeting',
isPage:false,
noCss:true,
props:{}
}
const Com = ecodeSDK.getAsyncCom(acParams);
5、ecode中使用组件库及工具库名称
PC端相关库
MOBILE端相关库
const { observer, inject } = mobxReact;
const { withRouter } = ReactRouterDom;
const { AtSomeone } = WeaverMobilePage;
const { Button,Tools,WingBlank } = WeaverMobile;
6、文件夹和文件剪切、复制、黏贴
- 文件夹剪切黏贴之后,appId将不会变化
- 文件夹复制黏贴之后,将会产生新的appId
二、如何创建ecode项目
- 新建ecode分类以及文件夹
- 右键新建选择类型为js,并填入名称点击保存
- 选择根文件夹,点击右键并点击发布
- 选择js文件,点击右键并点击前置加载
三、EC如何查看前端源代码
ode分类以及文件夹 2. 右键新建选择类型为js,并填入名称点击保存 3. 选择根文件夹,点击右键并点击发布 4. 选择js文件,点击右键并点击前置加载
三、EC如何查看前端源代码### 1、PC端源码如何查找
找到各模块的源码入口:
- 前台:/pc4mobx/[模块名]/index.js
- 后台:/pc4backstage/[模块名]/index.js
比如:
- 流程表单 /pc4mobx/workflowForm/index.js
- 流程 /pc4mobx/workflow/index.js
- 流程后台 /pc4backstage/workflow/index.js
2、MOBILE端源码如何查找
找到各模块的源码入口:/mobile4mobx/[模块名]/index.js
比如:
- 流程表单 /mobile4mobx/workflowForm/index.js
- 流程 /mobile4mobx/workflow/index.js
四、组件参数复写
可以对EC全系统组件参数进行配置,支持组件站中大部分组件参数。
m/index.js- 流程/mobile4mobx/workflow/index.js`
四、组件参数复写
可以对EC全系统组件参数进行配置,支持组件站中大部分组件参数。### 1、PC端组件参数复写
ecodeSDK.overwritePropsFnQueueMapSet(name,option)
ecology版本要求:1906及1906+
参数说明
| 参数 | 说明 | 类型 | 可选 | 默认 | 备注 |
|---|---|---|---|---|---|
| name | 组件名 | string | 必填 | '' | 包含组件站PC组件库ecCom、antd大部分组件 |
| option | 复写配置 | object | 必填 | {} | |
| option.fn | 复写钩子函数 | function | 必填 | (newProps)=>{} | |
| option.order | 复写排序 | integer | 选填 | 0 | |
| option.desc | 复写说明 | string | 选填 | '' |
基本例子
ecodeSDK.overwritePropsFnQueueMapSet('WeaTop',{
fn:(newProps)=>{
//进行位置判断
},
order:1,
desc:'在这里写此复写的作用'
});
如何定位组件及其参数
在组件站PC组件库中的组件与所需要修改的组件进行对比,或通过日志确认:
ecodeSDK.overwritePropsFnQueueMapSet('WeaTop',{
fn:(newProps)=>{
console.log('WeaTop:',newProps);
},
order:1,
desc:'在这里写此复写的作用'
});
如何开发调试
ecodeSDK.overwritePropsFnQueueMapSet('WeaTop',{
fn:(newProps)=>{
if(!ecodeSDK.checkLPath('/wui/index.html#/main/workflow/listDoing')) return;
console.log('WeaTop:',newProps);
const {Button} = antd;
if(newProps.buttons.length>=1) newProps.buttons[0] = (<Button>测试</Button>);
newProps.children = [newProps.children,(<div>我的自定义内容</div>)];
newProps.className = 'my-new-class';
newProps.style = { color:'red' };
newProps.icon = (<i className="icon-coms-download2" />);
return newProps;
},
order:1,
desc:'修改顶部菜单按钮'
});
ecodeSDK.overwriteMobilePropsFnQueueMapSet(name,option)
ecology版本要求:1906及1906+
五、组件重写
可以对EC全系统组件进行重写,支持组件站中大部分组件。
1、PC端组件重写
ecodeSDK.overwriteClassFnQueueMapSet(name,option)
ecology版本要求:1906及1906+
基本例子
register.js(需要前置加载):
let enable = true;
const NewWeaBrowser = (props)=>{
const acParams = {
appId:'${appId}',
name:'NewWeaBrowserCom',
isPage:false,
noCss:true
}
const NewCom = props.Com;
return window.comsMobx?ecodeSDK.getAsyncCom(acParams):(<NewCom {...props} />);
}
ecodeSDK.overwriteClassFnQueueMapSet('WeaBrowser',{
fn:(Com,newProps)=>{
if(!enable) return;
const {hash} = window.location;
if(!hash.startsWith('#/main/workflow/req')) return;
const baseInfo = WfForm.getBaseInfo();
if(baseInfo.workflowid!==44) return;
if(newProps.fieldid!=="6318"||newProps._noOverwrite) return;
newProps.Com = Com;
return {
com:NewWeaBrowser,
props:newProps
};
}
});
index.js(不需要前置加载):
const {WeaBrowser} = ecCom;
class NewWeaBrowserCom extends React.Component {
constructor(props) {
super(props);
this.state = {}
}
render() {
let newProps = {...this.props};
return (<WeaBrowser {...newProps} _noOverwrite />)
}
}
ecodeSDK.setCom('${appId}','NewWeaBrowserCom',NewWeaBrowserCom);
2、MOBILE端组件重写
ecodeSDK.overwriteMobileClassFnQueueMapSet(name,option)
六、新页面开发
;
### 2、MOBILE端组件重写
`ecodeSDK.overwriteMobileClassFnQueueMapSet(name,option)`
---
## 六、新页面开发### 1、PC端新页面开发
`ecodeSDK.rewriteRouteQueue.push(option)`
ecology版本要求:1906及1906+
**基本例子**
register.js(需要前置加载):
```javascript
ecodeSDK.rewriteRouteQueue.push({
fn:(params)=>{
const {Com,Route,nextState} = params;
const cpParams = {
path:'main/cs/app',
appId:'${appId}',
name:'pageSimple',
node:'app',
Route,
nextState
}
if(ecodeSDK.checkPath(cpParams)) {
const acParams = {
appId:cpParams.appId,
name:cpParams.name,
props:params,
isPage:true,
noCss:true
}
return ecodeSDK.getAsyncCom(acParams);
}
return null;
},
order:10,
desc:'Demo简单页面'
});
如何配置和访问页面
假如appId是d7dce9fcf9d7430e9bdd7eddcb3bfc29:
- 门户主入口访问地址:/wui/index.html#/main/cs/app/d7dce9fcf9d7430e9bdd7eddcb3bfc29_pageSimple
- 单独访问地址:/spa/custom/static/index.html#/main/cs/app/d7dce9fcf9d7430e9bdd7eddcb3bfc29_pageSimple
2、MOBILE端新页面开发
ecodeSDK.rewriteMobileRouteQueue.push(option)
生成的访问地址:/spa/custom/static4mobile/index.html#/cs/app/2d7187049bbe4adfbc4bfe4a41e188f6_MobileSimplePage
七、业务绑定
1、PC门户主题注册
ecodeSDK.rewritePortalThemeQueue.push(option)
ecology版本要求:1906及1906+
2、PC门户元素注册
ecodeSDK.rewritePortalCusEleQueue.push(option)
ecology版本要求:1906及1906+
3、移动门户元素注册
ecology版本要求:1912及1912+
4、特色门户元素注册
ecology版本要求:2003及2003+
5、元素头注册
ecodeSDK.rewritePortalCusEleHeaderQueue.push(option)
ecology版本要求:2011及2011+ 3及2003+
5、元素头注册
ecodeSDK.rewritePortalCusEleHeaderQueue.push(option)
ecology版本要求:2011及2011+### 6、元素标签页注册
ecodeSDK.rewritePortalCusEleTabQueue.push(option)
ecology版本要求:2011及2011+
7、元素工具栏注册
ecodeSDK.rewritePortalCusEleToolbarQueue.push(option)
ecology版本要求:2011及2011+
8、PC门户登录页注册
ecodeSDK.rewritePortalLoginQueue.push(option)
ecology版本要求:1906及1906+
9、全局流程代码块整合
let enable = true;
let isRun = false;
const runScript = ()=>{
isRun = true;
}
//PC端代码块
ecodeSDK.overwritePropsFnQueueMapSet('WeaReqTop',{
fn:(newProps)=>{
if(!enable) return;
const {hash} = window.location;
if(!hash.startsWith('#/main/workflow/req')) return;
if(!ecCom.WeaTools.Base64) return;
if(!WfForm) return;
const baseInfo = WfForm.getBaseInfo();
const {workflowid} = baseInfo;
if(workflowid!==44) return;
if(isRun) return;
runScript();
}
});
//移动端触发代码块
ecodeSDK.overwriteMobilePropsFnQueueMapSet('TabPage',{
fn:(newProps)=>{
if(!enable) return;
const {hash} = window.location;
if(!hash.startsWith('#/req')) return;
if(!WfForm) return;
const baseInfo = WfForm.getBaseInfo();
const {workflowid} = baseInfo;
if(workflowid!==44) return;
if(isRun) return;
runScript();
}
});