# 门户开发及栏目挂载
* * *
## 说明
> 由于现在设计上,门户能够配置任何功能进行展示,为了方便代码的维护和管理,对门户进行了功能块组件化分割。
## 概览
![门户设计](http://mall.seeyon.com/help/Public/dev/static/img/layout-setting.62a069e.svg)
## 新建门户
下面用`LayoutTest`门户举例,如何新建一个门户页面
### start
* 1.下载工程[工程脚手架](http://mall.seeyon.com/help/Public/dev/static/zip/cap4-component.zip),运行`npm i`安装依赖
* 2.在`layout/pages/`下拷贝`LayoutShangJi`文件夹,重命名`LayoutTest`
* 3.在`layout/pages/main.js`中修改`import App from './pages/LayoutTest/home.vue'`指向到自己的栏目工程,此`main.js`是本地启动的关键,只是测试用,真正打包的`main.js`在`layout/pages/LayoutTest/`下 注:任何需要打包的属性,一定得加入到`layout/pages/LayoutTest/`下的`main.js`中
### step1
门户中如果引用栏目组件,main.js中推荐加入以下设置
~~~
// 主题字段,如果白色背景或者单独定制门户,则不需要设置。
Vue.prototype.$themes = 'black';
// 注入基础栏目组件支持
import Cap4ColumnBase from '_columns/cap4-column-base';
Vue.use(Cap4ColumnBase);
// 远程挂载组件(可选,只有远程挂载才会使用)
import Cap4ColumnComponent from '_columns/cap4-column-component';
Vue.use(Cap4ColumnComponent);
~~~
### step2
门户的主要处理逻辑(`layout/pages/LayoutTest/home.vue`)需要引入`_utils/mixin/layoutMixin`
引入后在`mounted`中通过`this.getConfig()`获取本模板配置信息。
直接通过`this.getColumn(index)`分割配置信息,将栏目配置信息分发给各个栏目。
以下参数可以直接用`this.xxx`访问到,部分参数在调用`this.getConfig()`后才能获取。
| 参数 | 说明 | 类型 | 备注 |
| --- | --- | --- | --- |
| config | 模板配置文件 | Object | 无 |
| columns | 栏目配置列表 | Array | 无 |
| bussId | 业务包id | String | 从url上获取 |
| templateId | 模板id | String | 从url上获取 |
### step3 创建配置文件
创建配置文件必须得理解`栏目`、`栏目元素`两个概念,一个模板包含多个栏目,一个栏目包含多个栏目元素。
![门户设计](http://mall.seeyon.com/help/Public/dev/static/img/snp-lanmu.9a68c04.png)
配置文件示例:
~~~
{
"columns": [ --------------------------------------------------------门户模板包含的栏目数组
{
"elements": [ ---------------------------------------------------栏目中包含的栏目元素数组
{
"name": "本月商机成交量",
"dynamicKey": "02440231-5E99-4D15-8FAC-57A3CA03F07C",
"type": 4 ---------------------------------------------------栏目元素类型,影响门户设置数据源配置范围。
},
{
"name": "本月商机成交量",
"dynamicKey": "02540231-5E99-4D15-8FAC-57A3CA03F07C",
"type": 5 ---------------------------------------------------type5为快捷入口,不会再页面上有显示内容,只影响点击跳转
}
],
"name": "待完成工作任务",
"state": "1", ---------------------------------------------------栏目状态,后端可操作此字段来修改栏目显示状态。
"type": 4 -------------------------------------------------------栏目类型,影响门户设置栏目配置的栏目类型显示。
},
{
"elements": [
{
"name": "待完成项目任务",
"dynamicKey": "03440231-5E99-4D15-8FAC-57A3CA03F07C",
"type": 4
},
{
"name": "待完成项目任务",
"dynamicKey": "03540231-5E99-4D15-8FAC-57A3CA03F07C",
"type": 5
}
],
"name": "待完成项目任务",
"state": "1",
"type": 4
}
],
"name": "任务管理模板",
"type": 1
}
~~~
#### 模板配置文件结构
| 参数 | 说明 | 类型 | 可选值 |
| --- | --- | --- | --- |
| columns | 参照栏目配置:column | Array | 无 |
| name | 模板名称【必须】 | String | 无 |
| type | 模板类型【必须】 | Number | 0:pc&移动
1:pc
2:移动 |
#### 栏目配置结构column
| 参数 | 说明 | 类型 | 可选值 |
| --- | --- | --- | --- |
| elements | 参照栏目元素配置:element | Array | 无 |
| name | 栏目名称【必须】 | String | 无 |
| state | 栏目开关状态【必须】 | Number | 无 |
| type | 栏目类型【必须】 | Number | 0 default 未指定
1 queryResult 查询结果
2 caclResult 统计结果
3 flowList 流程列表
4 businessTarget 业务指标
5 shortCut 快捷方式
6 unflowList 无流程列表
7 noData 无须配置数据源
8 menuCollection 菜单合集 |
| componentName | 动态挂载时需要指定此栏目挂载的组件名【可选】
配置了这个字段才能使用Cap4ColumnComponent动态挂载 | String | 无 |
| componentUrl | 指定组件的url路径(可不用vue组件,如果是.html结尾会自动使用ifram加载)【可选】
| String | 无 |
#### 栏目元素配置结构element
| 参数 | 说明 | 类型 | 可选值 |
| --- | --- | --- | --- |
| name | 栏目元素名称【必须】 | String | 无 |
| dynamicKey | 全局唯一key【必须】 | String | 无 |
| type | 栏目元素类型【必须】 | Number | 0 default 未指定
1 queryResult 查询结果
2 caclResult 统计结果
3 flowList 流程列表
4 businessTarget 业务指标
5 shortCut 快捷方式
6 unflowList 无流程列表
7 noData 无须配置数据源
8 menuCollection 菜单合集 |
| page | 取得查询或者统计时候
可分页取得数据【可选】 | Object | {
page:1(从1开始,必须),
pageSize:50(默认50,可选)
} |
| columnIndex | 返回第几列数据,如果大于总列数则返回最后一列【可选】 | Number | 无 |
| maxColumnLength | 限制(统计查询)最大返回列【可选】 | Number | 无 |
| completeCrossColumn | 限制(统计查询)最大返回列,可能产生不完整交叉项,
如果为true则舍弃不完整交叉组,返回可能小于最大返回列【可选】 | Boolean | 无 |
| extend | 扩展字段【可选】 | Object | 无 |
### step4 上传商城
现在写的config文件没有栏目id跟栏目元素id。这两个id是经过后台处理后,由后台分配的,本地调试需要进行商城上传下载。
后台处理后的config文件,栏目和栏目元素被分配了id,这时候才能获取数据。
后台处理后config示例:
~~~
{
"templateFolder": "2346017665022313537", --------------------------------------- 后端分配的模板id,此id一般在url上直接获取
"columns": [{
"columnId": "165012826161365089", -------------------------------------- 后端分配的栏目id
"elements": [{
"elementId": "1152844087841408814", ---------------------------- 后端分配的栏目元素id
"name": "新建菜单合集",
"dynamicKey": "01863984-0646-49C6-BD8F-780ACEE28521",
"type": "8"
}],
"name": "新建菜单合集",
"state": "1",
"type": "8"
}, {
"columnId": "3115505023330371320",
"elements": [{
"elementId": "4257172996191834010",
"name": "本月新增商机",
"dynamicKey": "02440231-5E99-4D15-8FAC-57A3CA03F07C",
"type": "4"
}, {
"elementId": "4088305993474785437",
"name": "本月新增商机",
"dynamicKey": "02540231-5E99-4D15-8FAC-57A3CA03F07C",
"type": "5"
}],
"name": "本月新增商机",
"state": "1",
"type": "4"
}, {
"columnId": "2627389823276306095",
"elements": [{
"elementId": "7556469782579068978",
"name": "本月新增客户",
"dynamicKey": "03440231-5E99-4D15-8FAC-57A3CA03F07C",
"type": "4"
}, {
"elementId": "2070180027328514266",
"name": "本月新增客户",
"dynamicKey": "03540231-5E99-4D15-8FAC-57A3CA03F07C",
"type": "5"
}],
"name": "本月新增客户",
"state": "1",
"type": "4"
}, {
"columnId": "3735702750817242562",
"elements": [{
"elementId": "4357802298177374266",
"name": "本月商机成交量",
"dynamicKey": "04440231-5E99-4D15-8FAC-57A3CA03F07C",
"type": "4"
}, {
"elementId": "-2211378874524548588",
"name": "本月商机成交量",
"dynamicKey": "04540231-5E99-4D15-8FAC-57A3CA03F07C",
"type": "5"
}],
"name": "本月商机成交量",
"state": "1",
"type": "4"
}, {
"columnId": "-3940581403590308363",
"elements": [{
"elementId": "126384694740273687",
"name": "本月成交金额",
"dynamicKey": "054CDA7B-479D-4F9B-A21A-431C9D68F75B",
"type": "4"
}, {
"elementId": "-2482746810529855644",
"name": "本月成交金额",
"dynamicKey": "055CDA7B-479D-4F9B-A21A-431C9D68F75B",
"type": "5"
}],
"name": "本月成交金额",
"state": "1",
"type": "4"
}, {
"columnId": "-2923792911191421994",
"elements": [{
"elementId": "-9001353740858146132",
"name": "客户来源分析",
"dynamicKey": "06233BE8-89EF-4F6A-BD78-FEFD5BA37840",
"type": "2"
}, {
"elementId": "8698323620921229485",
"name": "更多",
"dynamicKey": "0653D5B7-05BB-4BBD-B8CD-06B4ABC2508A",
"type": "5"
}],
"name": "客户来源分析",
"state": "1",
"type": "2"
}, {
"columnId": "-5055874239504298447",
"elements": [{
"elementId": "-835606408726230998",
"name": "本于销售业绩PK",
"dynamicKey": "07233BE8-89EF-4F6A-BD78-FEFD5BA37840",
"type": "2"
}, {
"elementId": "8798617162677897017",
"name": "更多",
"dynamicKey": "0753D5B7-05BB-4BBD-B8CD-06B4ABC2508A",
"type": "5"
}],
"name": "本于销售业绩PK",
"state": "1",
"type": "2"
}],
"name": "商机管理模板",
"type": "1",
"templateId": "2346017665022313537"
}
~~~
### step4-1
执行`npm run dist:layout`,选择`LayoutTest`进行打包,打包后在`dist_layout`文件夹下找到`LayoutTest.zip`,用于上传商城
上传文档:[更新商城主题包文档](http://mall.seeyon.com/help/Public/dev/static/zip/%E6%9B%B4%E6%96%B0%E4%B8%BB%E9%A2%98%E5%8C%85.docx)
### step4-2 本地调试
需要在本地启动v5后台,在门户设置中下载刚上传的主题包,配置权限。
通过预览获取config的路径和业务包id、模板id,获取到这些参数以后,配置本地env文件`layout/env/env.js`
最后通过`npm dev:layout`本地启动门户首页。
### step5 门户开发
参照示例门户、通过`import`引入标准栏目组件。
注:如果组件没有在工程下,需要远程加载,则使用`Cap4ColumnComponent`来代理加载,vue组件是`.js`结尾,支持`.html`结尾的组件
~~~
<Cap4ColumnComponent
src="http://10.5.5.200:4000/static/wwc/cap4-pc-ui-eg/index.js" // 远程栏目组件挂载地址
:templateId="templateId" // 挂载栏目组件的参数
:bussId="bussId" // 挂载栏目组件的参数
:column="getColumn(5)"> // 挂载栏目组件的参数
</Cap4ColumnComponent>
~~~
### step6 eg数据制作
在`LayoutTest\config`下有`data.json`,这个是门户的默认数据,当刚下载门户模板没有数据获取时候,由这个json文件填充。
`data.json`与`config.json`是一一对应的,参照`config.json`的`dynamicKey`对应创建`data.json`的数据。
### end 门户再次上传
引入栏目组件后的门户网站,再次上传商城,重新配置数据源。
- 概要
- 技术介绍
- 框架与环境
- vue开发
- 开发规范
- 前端开发规范
- 总体原则
- HTML规范
- HTML&css规范
- vue编码规范
- Javascript规范
- 后端开发规范
- cap4
- 自定义控件
- 前端2.0(PC+移动)
- PC前端
- 后端
- 移动端
- 移动端接口
- 低版本协同升级到V5 8.0适配说明
- 自定义按钮
- 自定义按钮(无流程)
- 自定义控件(列表插槽)
- 自定义按钮(筛选条件)
- 低版本协同升级到V5 8.0适配说明
- 门户空间
- 门户与栏目挂载
- 栏目开发及流程说明
- 页面模板
- 客开通路及插件体系
- 表单设计器扩展配置
- 使用步骤
- 配置说明
- 事件API
- Demo示例
- 运行态客开通路
- 插件使用步骤
- 插件接口
- 事件接口
- 钩子相关接口
- 表单操作接口
- Demo示例
- 插件机制
- 表单运行态接口(旧)
- 白名单插件
- 版本记录
- vue组件库
- 开发指南
- 开发文档规范
- 业务组件介绍
- 业务组件
- table组件
- 分页组件
- title组件
- 统计排队组件
- code组件
- 条件筛选
- 批量导入
- 上传Excel
- 批量更新
- 批量刷新
- UI组件
- 按钮组件
- 复选组件
- 取色器组件
- 示例组件
- 水平选择组件
- 选图标组件
- 提示组件
- 单选组件
- 搜索组件
- 选择组件
- 穿梭框组件
- 标签组件
- 文本组件
- 树组件
- 验证组件
- 菜单组件
- iframe组件
- toolbar
- 统计组件
- 饼图
- 柱状图
- 图标
- 业务关系开发指南
- 自定义触发
- 自定义关联
- 后端API
- 更新表单数据缓存
- 发起表单流程
- 取得指定表单PDF或截图
- 无流程批量添加
- 无流程批量删除
- 无流程批量更新
- 无流程批量导出
- 客开培训文档
- Vue基础培训
- Vue实战培训
- Vue进阶培训
- VueCLI3培训
- cap3
- 自定义控件
- 后端
- 移动端
- 前端编译
- 表单运行态接口
- 协同云