Angular也是一个非常流行的前端开发框架,它是使用TypeScript作为开发语言,再通过编译器编译为浏览器可执行的Javascript,所以我们无法在O2平台的门户中直接通过脚本方式使用,必须通过在本地搭建基于Node.js的Angular开发环境和工作空间,然后再编译和部署到服务器的方式。

版本要求

本文适用于如下版本:

  • O2OA版本要求:5.1及以上版本;
  • Angular版本:本文撰写时,Angular版本是9.1.11。
  • Angular CLI版本:本文撰写时,Angular CLI版本是9.1.9。

通过ng version命令查看版本如下:

image.png

实现效果

  本例中,我们要实现前几章中React和Vue实现的两个效果,实现一个简单门户,显示当前用户的最新待办、通过O2视图展现信息类文档,以及启动指定流程和发布文档功能。效果如下:

image.png

环境搭建

  我们使用 Angular CLI 工具搭建 Angular 开发环境,首先我们需要安装Node.js和npm包管理器,然后我们通过以下命令安装 Angular CLI :

npm install -g @angular/cli

  此方法全局安装了Angular CLI,然后通过以下命令查看相关版本信息:

ng version

  可以通过以下命令,查看Angular CLI 的更多命令:

ng help

创建Angular应用

要创建一个新的工作空间和初始入门应用:

运行 CLI 命令 ng new 并提供 my-app 名称作为参数,如下所示:

ng new angular-app

ng new 命令会提示你提供要把哪些特性包含在初始应用中。按 Enter 或 Return 键可以接受默认值。

Angular CLI 会安装必要的 Angular npm 包和其它依赖包。这可能要花几分钟的时间。

此时我峨嵋你创建了一个名为angular-app的应用。

image.png

创建完成后生成目录如下:

image.png

添加O2脚本引入

在src/index.html的head中添加O2脚本引入:

<script src="../o2_core/bundle.js"></script>

image.png

为了方便后续引入,我们在src下创建一个o2.js,添加以下代码:

let o2 = window.o2;
let layout = window.layout;
export {o2, layout};

  修改src/main.ts文件如下:

import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';

import { AppModule } from './app/app.module';
import { environment } from './environments/environment';

//引入o2的layout对象
import { layout } from './o2';

if (environment.production) {
  enableProdMode();
}

//当o2载入完成后启动Angular Module
layout.addReady(() => {
    platformBrowserDynamic().bootstrapModule(AppModule)
      .catch(err => console.error(err));
  }
);

添加组件(component)

  我们要实现展现待办和展现信息两部分内容,所以我们需要添加两个组件。通过以下CLI命令,我们可以让Angular-CLI自动帮我们创建好组件。

ng generate component o2-task
ng generate component o2-info

以上两条命令创建了两个组件:

o2-task:用于展现待办,并通过一个按钮启动指定流程;

o2-info:用于通过O2视图展现信息,并通过一个按钮创建新文档。


创建完组件,我们可以看到在app目录下,新建了两个目录:o2-task和o2-info。每个目录下分别有以下文件:

*.component.css

组件样式文件

*.component.html

组件模板文件

*.component.spec.ts

组件的单元测试文件

*.component.ts

组件脚本文件

image.png

我们再打开src/app.module.ts文件,发现Angular已经为我们添加了新建组件的引用:

image.png

在app.component组件中使用o2-task和o2-info

  现在我们需要修改app.component组件来使用我们新创建的组件,修改src/app/app.component.ts如下内容:

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  //仅修改了此处的title
  title = 'Angular With O2OA';
}

  修改src/app/app.component.html为如下内容:

<div class="toolbar">{{title}}</div>
<div class="content">
  <app-o2-task></app-o2-task>
  <app-o2-info></app-o2-info>
</div>

  此处我们删除了原来的所有内容,并增加了<app-o2-task></app-o2-task>和<app-o2-info></app-o2-info>用来渲染o2-task和o2-info组件。

  修改src/app/app.component.css为如下内容:

.toolbar {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 60px;
  line-height: 60px;
  align-items: center;
  text-align: center;
  background-color: #1976d2;
  color: white;
  font-weight: 600;
  font-size: 32px;
}
.content {
  margin: 80px auto 0 auto;
  width: 90%;
  overflow: hidden;
}

修改o2-task组件

  接着我们修改o2-task组件,修改src/app/o2-task/o2-task.component.css文件如下:

.taskContent{
  height: 500px;
  width: 48%;
  float: left;
  padding: 10px;
  border: 1px solid #eeeeee;
}
.taskItem {
  height: 40px;
  line-height: 40px;
  color: #666666;
  cursor: pointer;
  border-bottom: 1px solid #eeeeee;
}
.taskTitle {
  height: 50px;
  line-height: 50px;
  font-weight: bold;
  font-size: 18px;
  color: #333333;
  padding: 0 10px;
  background-color: #eeeeee;
  margin-bottom: 5px;
}
button {
  padding: 3px 20px;
  text-align: center;
  background: #0f81cc;
  border: 1px solid #ffffff;
  margin-top: 8px;
  color: #ffffff;
  font-size: 18px;
  float: right;
  cursor: pointer;
}

修改src/app/o2-task/o2-task.component.html文件如下:

<div class="taskContent">
  <div class="taskTitle">
    <span>{{title}}</span>
        <!--发起流程按钮,绑定click事件到组件的startProcess方法-->
    <button (click)="startProcess()">发起流程</button>
  </div>
  
    <!--通过ngfor循环tasks,展现每一条待办-->
  <div *ngFor="let task of tasks">
    <div class="taskItem" (click)="openTask(task.work)">
      <a [title]="task.title">
        {{ task.title || "无标题" }}
      </a>
    </div>
  </div>
</div>

修改src/app/o2-task/o2-task.component.ts文件如下:

import { Component, OnInit } from '@angular/core';
//引入o2对象
import {o2} from "../../o2";

@Component({
  //组件的选择器,对应我们在app.component.html模板中的<app-o2-task>
  selector: 'app-o2-task',
  templateUrl: './o2-task.component.html',
  styleUrls: ['./o2-task.component.css']
})
export class O2TaskComponent implements OnInit {
  tasks = [];
  title = "我的待办";

  constructor() {}

  ngOnInit(): void {
        //通过调用O2平台的服务,获取当前用户的前20条待办
    o2.Actions.load("x_processplatform_assemble_surface").TaskAction.V2ListPaging(1,20, {}, (json)=>{
      this.tasks = json.data;
    });
  }
  startProcess() {
    //通过o2.env对象启动流程
    //o2.env对象即是在O2门户页面的脚本中的this指向,可以使用其方法。
    //请将“application-name”和“process-name”修改为您的流程应用名称和流程名
    o2.env.page.startProcess("application-name", "process-name");
  }
  openTask(id) {
    //通过o2.env对象打开待办
    o2.env.page.openWork(id);
  }
}

以上代码中,有关Angular的内容,请参考Angular的官方文档。

修改o2-info组件

  接着我们修改o2-task组件,修改src/app/o2-task/o2-info.component.css文件如下:

.viewContent{
  height: 500px;
  width: 48%;
  float: right;
  padding: 10px;
  border: 1px solid #eeeeee;
}
.view {
  height: 460px;
}
.viewTitle {
  height: 50px;
  line-height: 50px;
  font-weight: bold;
  font-size: 18px;
  color: #333333;
  padding: 0 10px;
  background-color: #eeeeee;
  margin-bottom: 5px;
}
button {
  padding: 3px 20px;
  text-align: center;
  background: #0f81cc;
  border: 1px solid #ffffff;
  margin-top: 8px;
  color: #ffffff;
  font-size: 18px;
  float: right;
  cursor: pointer;
}

修改src/app/o2-task/o2-task.component.html文件如下:

<div class="viewContent">
  <div class="viewTitle">
    <span>{{title}}</span>
    <button (click)="createDocument()">新建信息</button>
  </div>
  <!--用于视图展现的dom对象-->
  <div #viewContent  class="view"></div>
</div>

修改src/app/o2-task/o2-task.component.ts文件如下:

import {Component, ElementRef, OnInit,ViewChild} from '@angular/core';
//引入o2对象
import {o2} from "../../o2";

@Component({
  //组件的选择器,对应我们在app.component.html模板中的<app-o2-info>
  selector: 'app-o2-info',
  templateUrl: './o2-info.component.html',
  styleUrls: ['./o2-info.component.css']
})
export class O2InfoComponent implements OnInit {
  //要展现的视图信息,我们必须在O2平台创建好名为“内容管理数据”的数据应用和“所有信息”视图
  //修改此值,可显示不同的视图
  viewApp="内容管理数据";
  viewName="所有信息";
  //获取展现视图的原生Dom对象
  @ViewChild("viewContent") content: ElementRef;
  title = "最新信息";

  constructor() {
    //新建一个Viewer对象,用于展现指定的视图
    //将Viewer展现挂载到viewContentst的原生DOM对象上,就是模板中的<div #viewContent  class="view"></div>
    o2.xDesktop.requireApp("query.Query", "Viewer", function(){
      new o2.xApplication.query.Query.Viewer(this.content.nativeElement, {
        "application": this.viewApp,
        "viewName": this.viewName,
      });
    }.bind(this));
  }

  ngOnInit(): void {
  }

  createDocument(){
    //通过o2.env对象新建内容管理文档
    //o2.env对象即是在O2门户页面的脚本中的this指向,可以使用其方法。
    //createDocument方法创建内容管理文档,可传入栏目和分类参数,请参考API文档
    o2.env.page.createDocument();
  }
}

以上代码中,有关Angular的内容,请参考Angular的官方文档。

编译并运行

  我们完成了上述开发工作,就可以编译并运行我们的应用了。

  由于我们要将Angular应用放到O2的web服务器的目录下,而非根路径下,我们还需要删除src/index.html中的:<base href="/">

image.png

  在当前项目路径下,使用以下任意一条命令编译项目:

ng build
# OR
npm run build

  编译完成后,Angular将在路径下,生成编译后的文件。接着将dist目录部署到O2服务器的webServer下,并重命名为“angular-app”。然后通过浏览器访问:http://your-server/angular-app
  如果您未登录到服务器,会出现登录页面,登录后就可以看到实现的效果了。

image.png

  登陆后:

image.png

开发模式优化

  可参照React和Vue相同的方式。


样例下载

📎angular-app.zip

推荐文章:

常见问题-数据导出或者导入时发生OOM异常
2021-02-07
现象描述:OOM异常Exceptioninthread"main"java.lang.OutOfMemoryError:Requestedarraysizeex
流程设计-Excel数据导入数据网格(仅支持IE)
2021-05-17
O2OA提供数据网格组件来简体表单中的可编辑表格或者数据展现表格的设计,如费用报销,差旅报销等业务都可能使用到数据网格。本文主要介绍如何将Excel中的数据导入
在宝塔面板中安装O2OA(For Linux)
2021-08-16
@O2OA@宝塔面板@平台部署@Java开源平台@流程引擎@工作流管理@流程审批平台@OA系统宝塔面板是一款非常不错的运维管理面板,让系统运维更加方便简单。O2
移动办公-将平台集成到企业微信(WeChat)
2021-11-16
@移动办公@O2OA微信办公@企业微信办公@微信办公@手机办公O2OA平台拥有配套的原生开发的安卓和IOS移动APP,可以以自建应用的方式集成到企业微信,同步企
系统配置-平台数据库配置信息样例
2021-11-25
@平台部署@O2OA@开源办公系统@数据库连接配置@数据库连接串@数据库配置O2OA开发平台支持大多数主流的数据库以及国产数据库,用户可以进行相应的第三方数据库
开发知识-中标麒麟安装达梦数据库(DM8)
2021-02-07
环境说明操作系统版本:NeoKylinLinuxAdvancedServerreleaseV7Update6(Chromium)1.前期准备工作1.1数据库下载
系统配置-如何访问和操作内置数据库-H2
2021-02-25
O2OA平台内嵌了H2数据库,管理员可以通过支持JDBC的客户端对H2数据库进行访问和数据操作。本篇主要介绍如何访问H2数据库查询数据库信息以及操作数据。
固定资产管理使用手册
2021-11-29
@资产管理@固定资产管理@开源办公系统@资产管理@盘点 @物资入库@出库单O2OA资产管理能保证资产定期维护、规范化资产管理等等,保证企业的固定资产信息不丢失、
开发知识-Vue篇:在Vue应用中集成O2OA
2021-12-01
  在前面的章节中,我们介绍了两种在O2OA中使用Vue开发应用的方式,已经可以满足绝大多数的情况了。如果您考虑完全脱离O2的web服务器,自己搭建web服务器
运营商公文使用说明
2021-02-18
O2OA演示环境。它并不是一款传统意义上的OA系统。它是一款以流程管理为核心的全开源全免费的信息化开发平台,完整的代码可以直接在Github和Gitee上下载,

results matching ""

    No results matching ""