O2OA开源企业办公开发平台:使用Vue-CLI开发O2应用_vue2 oa-程序员宅基地

技术标签: 关于O2OA  开源软件  前端  vue.js  利用O2OA搭建企业办公平台  javascript  

Vue-CLI是Vue官方提供的CLI工具,用于为应用快速搭建繁杂的脚手架。本章我们介绍使用Vue-CLI工具在Node,js环境下,Vue和O2集成应用开发,并在O2平台的webServer下运行。

版本要求

本文适用于如下版本:

  • O2OA版本要求:5.1及以上版本;
  • Vue版本:本文撰写时,Vue版本是2.6.11。(更低的版本未经验证)
  • Vue-CLI版本:本文撰写时,Vue-CLI版本是4.4.4。

环境安装

Vue CLI 需要 Node.js 8.9 或更高版本 (推荐 8.11.0+)。在正确安装号Node.js和npm或yarn后,可以使用下列任一命令全局安装Vue-CLI:

npm install -g @vue/cli
# OR
yarn global add @vue/cli

安装之后,你就可以在命令行中访问 vue 命令。你可以通过简单运行 vue,看看是否展示出了一份所有可用命令的帮助信息,来验证它是否安装成功。

你还可以用这个命令来检查其版本是否正确:

vue --version

在O2平台框架中使用Vue

如果您希望将应用部署在O2服务器的webServer下,那么就可以参考下面的例子。

创建一个应用

运行以下命令来创建一个新项目,名为vue-app:

vue create vue-app

根据提示来选取所需要的特性,本例中使用默认选项。安装完成后,Vue会自定创建好整个目录结构:

本例中,我们将嵌入一个O2平台数据中心中的视图,展现内容管理信息;并创建两个按钮,用于创建信息文档和打开主页。

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

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

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

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

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

import Vue from 'vue'
import App from './App.vue'
//引入o2的layout对象
import {layout} from "./o2";

Vue.config.productionTip = false;

//当o2载入完成后创建Vue根组件
layout.addReady(function(){
  new Vue({
    render: h => h(App),
  }).$mount('#app')
});

//当o2载入完成后创建Vue根组件layout.addReady(function(){ new Vue({ render: h => h(App), }).$mount('#app')});

修改App组件

修改src/App.vue文件如下:

<template>
  <div id="app">
    <div class="title">信息中心</div>
    <o2-view app="内容管理数据" name="所有信息"/>
    <button @click="createDocument">创建新信息</button>
    <button @click="openHomepage">打开主页</button>

  </div>
</template>

<script>
//引用o2-view组件
import o2View from './components/o2-view.vue'
//引入o2的全局对象o2
import {o2} from "./o2";

export default {
  name: 'App',
  components: {
    o2View
  },
  methods: {
    "createDocument": function(){
      //通过o2.env对象新建内容管理文档
      //o2.env对象即是在O2门户页面的脚本中的this指向,可以使用其方法。
      //createDocument方法创建内容管理文档,可传入栏目和分类参数,请参考API文档
      o2.env.page.createDocument();
    },
    "openHomepage": function(){
      //通过o2.env对象打开主页应用
      o2.env.page.openApplication("Homepage");
    }
  }
}
</script>

<style>
  #app {
    width: 80%;
    margin: 30px auto;
  }
  .title {
    padding: 10px;
    background: #0f81cc;
    font-size: 18px;
    color: #ffffff;
  }
  button {
    padding: 10px 20px;
    text-align: center;
    background: #0f81cc;
    margin-top: 10px;
    color: #ffffff;
    font-size: 18px;
    float: left;
    margin-right: 20px;
    cursor: pointer;
    border: 0;
  }
</style>

App.vue是一个Vue组件,文件分为三部分:其中<template>部分定义了组件的模板;<style>部分定义组件样式;<script>部分实现组件的逻辑。

在模板中,我们使用了<o2-view>标签,将由o2-view组件负责渲染,给o2-view传入了两个参数:app="内容管理数据"和name="所有信息",我们将在o2-view组件中使用这两个参数,用于展现“内容管理数据”这个数据应用下的“所有信息”视图。您需要现在O2平台里创建好对应的视图,如果需要展现其他数据应用的其他视图,需要修改这两个值。

我们创建了两个button,通过@click分别绑定了createDocument和openHomepage两个方法,分别用于新建内容管理文档和打开主页应用

我们在components部分引用了o2View组件,下面我们就要创建这个组件。

创建o2-view组件

删除src/components/目录下的原有.vue文件,然后新建o2-view.vue文件,输入以下代码:


<template>
  <div class="view"></div>
</template>

<script>
//引入o2对象
import {o2} from "../o2";
export default {
  name: 'o2-view',
  props: {
    app: String,  //传入的参数,本例中获取到“内容管理数据”
    name: String  //传入的参数,本例中获取到“所有信息”
  },
  //在vue组件挂载后执行
  mounted: function(){
    //引入o2平台的Viewer对象
    o2.xDesktop.requireApp("query.Query", "Viewer", function(){
      //新建一个Viewer对象,用于展现指定的视图
      //将Viewer展现挂载到this.$el上,就是template中的:<div class="view"></div>对象
      new o2.xApplication.query.Query.Viewer(this.$el, {
        "application": this.app,
        "viewName": this.name,
      });
    }.bind(this));
  }
}
</script>

<style scoped>
div {
  height: 600px;
}
</style>

在o2-view组件中,我们主要做的事是,在vue组件挂载后,将o2的视图组件,再挂载到o2-view组件的根Dom对象。

当然,这里我们要在我们的O2服务器上创建好数据应用和视图,对应本例中,就是“内容管理数据”应用下的“所有信息”视图。

编译并运行

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

由于我们要将Vue应用放到O2的web服务器的目录下,而非根路径下,所以我们需要简单配置以下编译的路径。再vue应用目录下创建vue.config.js文件,输入以下代码:

module.exports = {
    publicPath: "."
};

将编译后的路径引用使用相对路径。

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

npm build
# OR
yarn build

出现类似下面的信息,表示编译成功:

编译后,将在项目路径下,生成dist目录,

接着将dist目录部署到O2服务器的webServer下,并重命名为“vue-app”。然后通过浏览器访问:http://your-server/vue-app。

如果您未登录到服务器,会出现登录页面,登录后就可以看到实现的效果了。

如果您将您的应用部署到服务器的其他目录,如custom/vue-app下,那么您需要在src/o2.js文件中增加一行代码:o2.base = "../";

//src/o2.js
let o2 = window.o2;
let layout = window.layout;
o2.base = "../";
export {o2, layout};

至此,我们已经可以在O2平台的框架下,使用Vue开发应用了。

开发模式优化

虽然我们可以使用React开发O2应用,但上述模式在我们每次修改代码后,需要运行build命令,并手工上传到服务器,在开发比较复杂的应用时,还是比较影响效率的。下面价绍两种方式来应对这种情况。

本地运行O2服务器

您可以在本地运行服务器,然后直接在服务器的webServer目录下创建项目。然后您必须修改Vue配置,使其编译到正确的路径。我们要修改项目目录下的vue.config.js文件:

module.exports = { publicPath: ".", outputDir: "../vue-app"};

然后每次运行编译后,Vue会将编译后的应用生成在webServer/vue-app/目录下,我们直接通过http://locahost/vue-app就可以查看运行结果。

通过部署工具自动化部署到远程服务器

当然,为了节省我们部署远程服务器的时间,我们可以使用javascript打包工具,自动完成这个过程,这里我们使用gulp,通过ftp或sftp来进行自动化部署到远程服务器。

这种方式不需要您本地运行O2服务器,但您必须有一台远程服务器,并可以通过ftp或sftp连接到服务器的webServer。

按上述方式创建好应用,然后我们安装gulp环境:

npm i -g gulp-cli

安装gulp以及gulp相关插件:

npm i gulp gulp-ftp gulp-sftp-up4 gulp-run -save-dev

在项目根目录新建gulpfile.js文件:

var gulp = require('gulp'),
    ftp = require('gulp-ftp'),
    sftp = require('gulp-sftp-up4'),
    run = require('gulp-run');

//根据您的实际服务器修改
var options = {
    'build': 'dist',
    'host': 'o2server服务器',
    'user': 'sftp user',
    'pass': 'sftp password',
    "port": 22,
    "remotePath": "/data/o2server/servers/webServer/vue-app"
};

//sftp任务
function upload_sftp(){
    var build = "dist/**/*";
    return gulp.src(build)
        .pipe(sftp({
            host: options.host,
            user: options.user || 'anonymous',
            pass: options.pass || null,
            port: options.port || 22,
            remotePath: (options.remotePath || '/')
        }));
}

//ftp任务
function upload_ftp(){
    var build = "dist/**/*";
    return gulp.src(build)
        .pipe(ftp({
            host: options.host,
            user: options.user || 'anonymous',
            pass: options.pass || null,
            port: options.port || 21,
            remotePath: (options.remotePath || '/')
        }));
}
//运行vue build
function build_vue() {
    return run('npm build').exec();
}
输出gulp任务,如果使用ftp,更换第二个任务为upload_ftp
exports.build = gulp.series(build_vue, upload_sftp);

然后,当开发或修改代码完成后,执行以下命令:

gulp build

就可以自动编译Vue应用,并上传到O2服务器。通过浏览器访问:http://your-server/vue-app就可以看到结果。

当然,这只是一个很简单的例子,提供一个思路,您也可以使用其他您熟悉的工具实现相同或类似的功能。对于熟悉前端构建工具的用户,实现更便捷的功能也不是难事,比如可以监控文件改动,实时部署,并刷新浏览器等。

总结

本章给大家介绍了在O2平台的框架内,使用Vue开发应用,并在O2服务器的webServer中运行了起来。它集成了O2平台的所有功能,您也不需要处理类似登录等一些繁琐的事,而且可以方便的调用O2的后端服务。并提供了一些优化开发模式的思路。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liyi_hz2008/article/details/126604810

智能推荐

如何将输入的内容通过点击按钮显示在下方textview里并改变其颜色_如何在Photoshop中制作渐变...-程序员宅基地

文章浏览阅读151次。将展示如何在Photoshop中创建渐变,以及如何在Photoshop中加载和保存预设渐变。渐变是两种或多种颜色(或相同颜色的不同色度)的逐渐混合。渐变的常见用途包括添加光/阴影效果,增加对象的体积以及创建反射性表面,例如金属材料和金。颜色渐变的其他非常流行的用途包括创建抽象背景,添加颜色覆盖图和强调品牌标识。即使是细微的渐变也可以发挥很大作用。更多内容欢迎加入绘画交流群:308 250 976..._xaml如何将输入的文本在点击按钮后保存下来

计算机网络职业评估报告,计算机网络技术专业个人职业生涯规划书.doc-程序员宅基地

文章浏览阅读1.5k次。计算机网络技术专业个人职业生涯规划书一 前 言——及时规划职业,做自己人生之舟的船长亚里士多德曾说过:“人是一种寻找目标的动物,他生活的意义仅仅在于是否正在寻找和追求自己的目标。”而这目标有大有小,有短期的也有用尽一生去完成的。目标也有多方面的有涉及学业、家庭、工作等。如今我们正处于20岁左右,无论根据萨帕的职业生涯发展五阶段理论,即成长期(1~14岁)、探索期(15~24岁)、确立期(25~..._计算机网络技术生涯发展报告

【Android进阶】ListView使用“内存双缓存+硬盘缓存”加载网络图片_xml安卓listview 开启双缓存-程序员宅基地

文章浏览阅读1.1k次。ListView 加载网络图片是我们经常用到的方式,如果每次滚动ListView就去网络下载图片会非常影响性能(因为网络下载是比较慢的)而且非常耗费流量,所以这里介绍一种使用“内存双缓存+硬盘缓存”的方式来加载图片。实现的效果如下:这里使用了滚动时不去网络下载图片,停止时才加载,所以滚动时显示默认的,注意观察设计思想内存读取速度 > 文件读取速度> 从网络获取的_xml安卓listview 开启双缓存

【生产问题--服务器宕机解决】_生产服务宕机了,我们通过哪些方式去定位问题-程序员宅基地

文章浏览阅读539次,点赞3次,收藏3次。线上服务器宕机问题的解决。如果你也有类似的问题,可以参考下。主要思路用mat 工具分析下.hprof文件_生产服务宕机了,我们通过哪些方式去定位问题

Qt on Android:图文详解Hello World全过程_qt kids-程序员宅基地

文章浏览阅读1.6k次。这是系列文章中的一篇,阅读本文前请先阅读《Windows下Qt 5.2 for Android开发入门》,以便确保开发环境和作者一致。部分文章被转发/转载却没有注明出处,特此声明:版权所有 foruok ,如需转载敬请注明出处(http://blog.csdn.net/foruok)。我将从实践出发,带领大家一步一步完成在 Android 上的第一个 Qt 应用: Hello Qt_qt kids

RIP、OSPF、BGP协议之间的区别_rip,ospf,bgp三个协议的区别-程序员宅基地

文章浏览阅读1.5k次,点赞3次,收藏11次。③只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息,并且更新过程收敛的快,不会出现RIP“坏消息传得慢”的问题。②发送的信息是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。③网络出现故障时,会出现慢收敛现象,俗称“坏消息传得慢”,使更新过程的收敛时间长。②路由器之间交换的是路由器中的完整路由表,因此网络规模越大,开销也越大。:BGP是不同自治系统的路由器之间交换路由信息的协议,是一种外部网关协议。②路由器交换的信息是当前路由器所知道的全部信息,即。_rip,ospf,bgp三个协议的区别

随便推点

ES6新特性-程序员宅基地

文章浏览阅读2w次,点赞9次,收藏42次。ES6新特性_es6新特性

UI设计资料_设计是什么保罗.兰德百度网盘资源-程序员宅基地

文章浏览阅读4.3k次,点赞4次,收藏8次。设计软件链接:https://pan.baidu.com/s/1cGu6fW 密码:f2k630G教学视频:https://pan.baidu.com/s/1nvrB6jv 密码:bruv朋友发的,就这么刚!_设计是什么保罗.兰德百度网盘资源

源码分析Dubbo服务提供者启动流程-下篇-程序员宅基地

文章浏览阅读838次,点赞17次,收藏27次。还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。图片转存中…(img-lrSLZmoK-1710427356248)]由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)

PHP/MySQL开发环境:MAMP Pro for Mac_mamp pro 5.7-程序员宅基地

文章浏览阅读519次。mamp pro mac版是mac平台上最优秀的本地服务器搭配软件,也是最好的mysql开发环境和php开发环境,包含了acintosh、Apache、MySQL和PHP四大开发环境,用户只要轻松点选就能对架站、讨论区、论坛等必备的元件进行安装,让你轻松在mac平台上架设自己的web运行环境。Web运行环境——MAMP Pro功能亮点将wordPress主机发布到您的Live Hosting..._mamp pro 5.7

python抛出异常会终止程序吗_Python学习笔记之类型判断,异常处理,终止程序操作小结...-程序员宅基地

文章浏览阅读4.9k次。python学习笔记 类型判断,异常处理,终止程序,实例代码:#idle中按F5可以运行代码#引入外部模块 import xxx#random模块,randint(开始数,结束数) 产生整数随机数import randomimport sysimport ossecret = random.randint(1,10)temp = input("请输入一个数字\n")#print(type(temp..._程序抛出异常不一定终止程序

引用Dll失败-程序员宅基地

文章浏览阅读583次。C#中添加引用Dll文件必须先注册!!注册方法:regsvr32 *.dll (*代表Dll文件名称)!!_引用dll失败