unknown 5 лет назад
Родитель
Сommit
162f030ee0

+ 17 - 11
o2web/jsdoc_static/home/README.md

@@ -6,13 +6,14 @@
 
 * O2OA 前端脚本基于您使用的浏览器的Javascript引擎,使用Javascript语法。
 
-* 您可以通过脚本访问和操作允许的DOM对象;也可以通过平台定义的API操作表单、业务数据、组织、视图等各种对象。
-
+* 本API是O2OA前台脚本的编写说明,您可以通过脚本访问和操作平台内的各种对象。
 
 ## API总览
 
 ### Modules
 
+* 为脚本封装的对象、方法和类
+
 <table>
     <tr>
         <td><a href="module-data.html">业务数据 - data</a></td>
@@ -20,9 +21,9 @@
         <td><a href="module-documentContext.html">内容管理实例 - documentContext</a></td>
     </tr>
     <tr>
-        <td><a href="module-org.html">组织 - org</a></td>
-        <td><a href="module-form.html">流程表单 - form</a></td>
-        <td><a href="module-page.html">页面 - page</a></td>
+        <td><a href="module-org.html">组织查询 - org</a></td>
+        <td><a href="module-form.html">流程及内容管理表单 - form</a></td>
+        <td><a href="module-page.html">门户页面 - page</a></td>
     </tr>
     <tr>
         <td><a href="module-queryView.html">视图 - queryView</a></td>
@@ -31,13 +32,18 @@
     </tr>
     <tr>
         <td><a href="module-queryStatement.html">查询视图 - queryStatement</a></td>
-        <td><a href="module-statement.html">查询执行 - statement</a></td>
-        <td><a href="module-Actions.html">Actions - Actions</a></td>
+        <td><a href="module-statement.html">查询视图执行 - statement</a></td>
+        <td><a href="module-Actions.html">服务调用 - Actions</a></td>
     </tr>
     <tr>
-        <td><a href="module-include.html">引用 - include</a></td>
+        <td><a href="module-include.html">脚本引用 - include</a></td>
         <td><a href="module-define.html">方法定义 - define</a></td>
-        <td><a href="module-session.html">session - session</a></td>
+        <td><a href="module-session.html">当前用户 - session</a></td>
+    </tr>
+    <tr>
+        <td><a href="module-wait.html">表单等待 - wait</a></td>
+        <td></td>
+        <td></td>
     </tr>
 </table>
 
@@ -119,7 +125,7 @@
 #### CMS 内容管理表单组件
 <table>
     <tr>
-        <td><a href="MWF.xApplication.process.Xform.Form.html">表单 - Form</a></td>
+        <td><a href="CMSForm.html">内容管理表单 - CMSForm</a></td>
         <td><a href="MWF.xApplication.process.Xform.Label.html">文本 - Label</a></td>
         <td><a href="MWF.xApplication.process.Xform.Textfield.html">文本字段 - Textfield</a></td>
     </tr>
@@ -188,7 +194,7 @@
 #### Portal 门户页面组件
 <table>
     <tr>
-        <td><a href="MWF.xApplication.process.Xform.Form.html">表单 - Form</a></td>
+        <td><a href="PortalPage.html">页面 - PortalPage</a></td>
         <td><a href="MWF.xApplication.process.Xform.Div.html">容器 - Div</a></td>
         <td><a href="MWF.xApplication.process.Xform.Label.html">文本 - Label</a></td>
     </tr>

+ 4 - 3
o2web/source/o2_core/o2/xScript/CMSEnvironment.js

@@ -1542,11 +1542,12 @@ MWF.xScript.CMSEnvironment = function(ev){
         /**发布当前文档。<b>(仅内容管理表单中可用)</b>
          * @method publish
          * @memberOf module:form
+         * @param {Function} callback - 发布后的回调方法
          * @o2syntax
-         this.form.publish();
+         this.form.publish( callback );
          */
-        "publish": function(option){
-            _form.publishDocument()
+        "publish": function(callback){
+            _form.publishDocument(callback)
         },
         //"archive": function(option){
         //    _form.archiveDocument()

+ 76 - 0
o2web/source/o2_core/o2/xScript/Environment.js

@@ -2022,6 +2022,82 @@ MWF.xScript.Environment = function(ev){
     //可在调用前执行 var resolve = this.wait();
     //在异步调用结束后 执行 resolve.cb();
     //目前只有表单的queryload事件支持此方法。
+
+    /**
+     * this.wait是一个方法,可以用来处理异步调用后的页面加载。<br/>
+     * 该方法使用的具体场景:为了加快速度,需要一次性加载全部外部资源(如:数据字典、外部JS、内容管理文档)后,再进行表单的加载。<br/>
+     * this.wait需和this.goon配合使用。<br/>
+     * <b>目前只有流程表单的queryload事件支持此方法。</b>
+     * @module wait
+     * @o2range {Process}
+     * @o2syntax
+     * var resolve = this.wait(); //让表单停止加载页面
+     *
+     * if (resolve && resolve.cb){
+     *      resolve.cb(); //通过 resolve.cb() 方法继续执行表单加载
+     * }else{
+     *      //如果没有发生异步,则resolve.cb方法不存在,
+     *      //所以在回调中中使用this.goon();使表单继续加载
+     *      this.goon();
+     * }
+     * @example
+     * <caption>需要在加载数据字典,内容管理文档数据,按照条件获取的脚本后,再进行加载表单。</caption>
+     *
+     * var resolve = this.wait(); //this.wait()让表单加载等待回调
+     * var scriptLoaded = false; //脚本是否加载完成标识,按条件判断的脚本才建议用this.include();,否则使用预加载脚本更快。
+     * var documentLoaded = false; //内容管理文档是否加载完成标识
+     * var dictLoaded = true; //数据字典是否加载完成标识
+     *
+     * //检查是否全部资源已加载,如果是继续加载表单
+     * var checkLoad = function(){
+     *     if (scriptLoaded && documentLoaded && dictLoaded){ //各种资源以及加载完成
+     *       if (resolve && resolve.cb){
+     *            resolve.cb(); //通过 resolve.cb() 方法继续执行表单加载
+     *        }else{
+     *            //如果没有发生异步,则resolve.cb方法不存在,
+     *            //所以在回调中中使用this.goon();使表单继续加载
+     *            this.goon();
+     *        }
+     *      }
+     * }.bind(this);
+     *
+     * //判断内容管理文档加载
+     * if( this.data.documentId ){
+     *      //异步载入内容管理文档
+     *      o2.Actions.get("x_cms_assemble_control").getDocument(this.data.documentId, function (json) {
+     *          this.form.documentJson = json; //将数据存在this.form上,以便其他地方使用
+     *          documentLoaded = true; //标记内容管理加载完成
+     *          checkLoad(); //检查全部资源是否完成加载
+     *      }.bind(this));
+     *  }else{
+     *     documentLoaded = true; ////标记内容管理加载完成
+     *     checkLoad(); //检查全部资源是否完成加载
+     * }
+     *
+     * //判断脚本加载
+     * if( this.data.scriptName ){ //假设scriptName为判断条件
+     *      //加载脚本
+     *     this.include( this.data.scriptName, function(){  //第二个参数为异步加载后的回调
+     *         scriptLoaded = true; //标记脚本加载完成
+     *         checkLoad(); //检查全部资源是否完成加载
+     *     }, true ); //第三个参数表示异步
+     * }else{
+     *      scriptLoaded = true; ////标记脚本加载完成
+     *     checkLoad(); //检查全部资源是否完成加载
+     * }
+     *
+     * //加载数据字典bulletinDictionary的category数据
+     * var dict = new Dict("bulletinDictionary");
+     * dict.get("category", function(data){ //成功的回调
+     *          this.form.bulletinCategory = data; //将数据存在this.form上,以便其他地方使用
+     *          dictLoaded = true; //标记数据字典加载完成
+     *          checkLoad(); //检查全部资源是否完成加载
+     *    }.bind(this), function(xhr){ //错误的回调
+     *          dictLoaded = true; ////标记数据字典加载完成
+     *          checkLoad(); //检查全部资源是否完成加载
+     *    }, true //异步执行
+     * )
+     */
     this.wait = function(){
         var _self = this;
         resolve = {"cb":  _self.goon.bind(_self)};

+ 188 - 5
o2web/source/x_component_cms_Xform/Form.js

@@ -8,7 +8,22 @@ MWF.xDesktop.requireApp("process.Xform", "Form", null, false);
 MWF.require("MWF.widget.O2Identity", null, false);
 
 MWF.xDesktop.requireApp("cms.Xform", "Package", null, false);
-MWF.xApplication.cms.Xform.Form = MWF.CMSForm = new Class({
+
+/** @class CMSForm 内容管理表单。
+ * @o2category FormComponents
+ * @o2range {CMS}
+ * @alias CMSForm
+ * @example
+ * //可以在脚本中获取表单
+ * //方法1:
+ * var form = this.form.getApp().appForm; //获取表单
+ * //方法2
+ * var form = this.target; //在表单本身的事件脚本中获取
+ * @hideconstructor
+ */
+MWF.xApplication.cms.Xform.Form = MWF.CMSForm = new Class(
+    /** @lends CMSForm# */
+{
     Implements: [Options, Events],
     Extends: MWF.APPForm,
     options: {
@@ -18,29 +33,131 @@ MWF.xApplication.cms.Xform.Form = MWF.CMSForm = new Class({
         "autoSave": false,
         "saveOnClose": false,
         "showAttachment": true,
-        "moduleEvents": ["queryLoad",
+        "moduleEvents": [
+             /**
+             * 表单加载前触发。表单html已经就位。
+             * @event CMSForm#queryLoad
+             * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
+             */
+            "queryLoad",
+             /**
+             * 表单加载前触发。数据(businessData)已经就绪。
+             * @event CMSForm#beforeLoad
+             * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
+             */
             "beforeLoad",
+            /**
+             * 表单的所有组件加载前触发,此时表单的样式和js head已经加载。
+             * @event CMSForm#beforeModulesLoad
+             * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
+             */
+            "beforeModulesLoad",
+            /**
+             * 表单加载后触发。
+             * @event CMSForm#postLoad
+             * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
+             */
             "postLoad",
+            /**
+             * 表单的所有组件加载后触发。
+             * @event CMSForm#afterModulesLoad
+             * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
+             */
+            "afterModulesLoad",
+            /**
+             * 表单加载后触发。
+             * @event CMSForm#afterLoad
+             * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
+             */
             "afterLoad",
+            /**
+             * 保存前触发。
+             * @event CMSForm#beforeSave
+             * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
+             */
             "beforeSave",
+            /**
+             * 数据已经整理完成,但还未保存到后台时触发。this.event指向整理完成的数据
+             * @event CMSForm#afterSave
+             * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
+             */
             "postSave",
+            /**
+             * 数据保存到后台后触发。
+             * @event CMSForm#afterSave
+             * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
+             */
             "afterSave",
+            /**
+             * 关闭前触发。
+             * @event CMSForm#beforeClose
+             * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
+             */
             "beforeClose",
+            /**
+             * 发布前触发。
+             * @event CMSForm#beforePublish
+             * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
+             */
             "beforePublish",
+            /**
+             * 数据已经整理完成,但还未调用服务发布触发。this.event指向整理完成的数据
+             * @event CMSForm#postPublish
+             * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
+             */
             "postPublish",
+            /**
+             * 执行后台服务发布后触发。
+             * @event CMSForm#afterPublish
+             * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
+             */
             "afterPublish",
+            /**
+             * 删除前触发。
+             * @event CMSForm#beforeDelete
+             * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
+             */
             "beforeDelete",
+            /**
+             * 删除后触发。
+             * @event CMSForm#afterDelete
+             * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
+             */
             "afterDelete",
-            "beforeModulesLoad",
-            "resize",
-            "afterModulesLoad"]
+            "resize"
+        ]
     },
+    /**
+     * @summary 获取表单的所有数据.
+     * @method getData
+     * @memberof CMSForm
+     * @example
+     * var data = this.form.getApp().appForm.getData();
+     * @return {Object}
+     */
     initialize: function (node, data, options) {
         this.setOptions(options);
 
+        /**
+         * @summary 表单容器
+         * @see https://mootools.net/core/docs/1.6.0/Element/Element
+         * @member {Element}
+         * @example
+         *  //可以在脚本中获取表单容器
+         * var formContainer = this.form.getApp().appForm.container;
+         */
         this.container = $(node);
         this.container.setStyle("-webkit-user-select", "text");
         this.data = data;
+
+        /**
+         * @summary 表单的配置信息,比如表单名称等等.
+         * @member {Object}
+         * @example
+         *  //可以在脚本中获取表单配置信息
+         * var json = this.form.getApp().appForm.json; //表单配置信息
+         * var name = json.name; //表单名称
+         */
         this.json = data.json;
         this.html = data.html;
 
@@ -48,7 +165,35 @@ MWF.xApplication.cms.Xform.Form = MWF.CMSForm = new Class({
         this.cssPath = this.options.cssPath || "../x_component_cms_Xform/$Form/" + this.options.style + "/css.wcss";
         this._loadCss();
 
+        /**
+         * @summary 表单中的所有组件数组.
+         * @member {Array}
+         * @example
+         * //下面的样例对表单组件进行循环,并且判断是输入类型的组件
+         * var modules = this.form.getApp().appForm.modules; //获取所有表单组件
+         * for( var i=0; i<modules.length; i++ ){ //循环处理组件
+         *   //获取组件的类型
+            var moduleName = module.json.moduleName;
+            if( !moduleName ){
+                moduleName = typeOf(module.json.type) === "string" ? module.json.type.toLowerCase() : "";
+            }
+            if( ["calendar","combox","number","textfield"].contains( moduleName )){ //输入类型框
+                //do something
+             }
+         * }
+         */
         this.modules = [];
+
+        /**
+         * 该对象的key是组件标识,value是组件对象,可以使用该对象根据组件标识获取组件。<br/>
+         * 需要注意的是,在子表单中嵌入不绑定数据的组件(比如div,common,button等等),系统允许重名。<br/>
+         * 在打开表单的时候,系统会根据重名情况,自动在组件的标识后跟上 "_1", "_2"。
+         * @summary 表单中的所有组件对象.
+         * @member {Object}
+         * @example
+         * var moduleAll = this.form.getApp().appForm.all; //获取组件对象
+         * var subjectField = moduleAll["subject"] //获取名称为subject的组件
+         */
         this.all = {};
         this.forms = {};
 
@@ -555,6 +700,14 @@ MWF.xApplication.cms.Xform.Form = MWF.CMSForm = new Class({
             }.bind(this));
         }
     },
+
+    /**
+     * @summary 弹出删除文档确认框.
+     * @method deleteDocument
+     * @memberof CMSForm
+     * @example
+     * this.form.getApp().appForm.deleteDocument();
+     */
     deleteDocument: function () {
         var _self = this;
         var p = MWF.getCenterPosition(this.app.content, 380, 150);
@@ -593,6 +746,13 @@ MWF.xApplication.cms.Xform.Form = MWF.CMSForm = new Class({
         });
     },
 
+    /**
+     * @summary 编辑文档.
+     * @method editDocument
+     * @memberof CMSForm
+     * @example
+     * this.form.getApp().appForm.editDocument();
+     */
     editDocument: function () {
         if (this.app.inBrowser) {
             this.modules.each(function (module) {
@@ -613,6 +773,13 @@ MWF.xApplication.cms.Xform.Form = MWF.CMSForm = new Class({
     },
 
     //2019-11-29 移动端 开启编辑模式
+    /**
+     * @summary 移动端开启编辑模式.
+     * @method editDocumentForMobile
+     * @memberof CMSForm
+     * @example
+     * this.form.getApp().appForm.editDocumentForMobile();
+     */
     editDocumentForMobile: function () {
         if (this.app.mobile) {
             this.app.options.readonly = false;
@@ -620,6 +787,13 @@ MWF.xApplication.cms.Xform.Form = MWF.CMSForm = new Class({
         }
     },
 
+    /**
+     * @summary 弹出设置热点的界面.
+     * @method setPopularDocument
+     * @memberof CMSForm
+     * @example
+     * this.form.getApp().appForm.setPopularDocument();
+     */
     setPopularDocument: function () {
         this.app.setPopularDocument();
     },
@@ -644,6 +818,15 @@ MWF.xApplication.cms.Xform.Form = MWF.CMSForm = new Class({
         }
     },
 
+    /**
+     * @summary 将新上传的附件在指定的附件组件中展现.
+     * @method uploadedAttachment
+     * @memberof CMSForm
+     * @param {String} site - 附件组件的标识
+     * @param {String} id - 新上传的附件id
+     * @example
+     * this.form.getApp().appForm.uploadedAttachment(site, id);
+     */
     uploadedAttachment: function (site, id) {
         this.documentAction.getAttachment(id, this.businessData.document.id, function (json) {
             var att = this.all[site];

+ 1 - 1
o2web/source/x_component_cms_Xform/Log.js

@@ -14,7 +14,7 @@ MWF.xDesktop.requireApp("cms.Xform", "widget.Log", null, false);
  * @hideconstructor
  */
 MWF.xApplication.cms.Xform.Log = MWF.CMSLog =  new Class(
-    /** @lends MWF.xApplication.cms.Xform.Log# */
+    /** @lends CMSLog# */
 {
 	Extends: MWF.APP$Module,
 	_loadUserInterface: function(){

+ 96 - 10
o2web/source/x_component_process_Xform/Form.js

@@ -35,7 +35,7 @@ MWF.xApplication.process.Xform.Form = MWF.APPForm = new Class(
              */
             "queryLoad",
             /**
-             * 表单加载前触发。已提示抢办锁定。
+             * 表单加载前触发。如果是流程表单,已提示抢办锁定。
              * @event MWF.xApplication.process.Xform.Form#beforeLoad
              * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
              */
@@ -53,7 +53,7 @@ MWF.xApplication.process.Xform.Form = MWF.APPForm = new Class(
              */
             "postLoad",
             /**
-             * 表单的所有组件后触发。表单包含有子表单、子页面、部件时,此事件会在这些组件加载后触发。
+             * 表单的所有组件加载后触发。表单包含有子表单、子页面、部件时,此事件会在这些组件加载后触发。
              * @event MWF.xApplication.process.Xform.Form#afterModulesLoad
              * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
              */
@@ -65,13 +65,13 @@ MWF.xApplication.process.Xform.Form = MWF.APPForm = new Class(
              */
             "afterLoad",
             /**
-             * 保存前触发。流转前也会触发本事件。
+             * 保存前触发。如果是流程表单,流转前也会触发本事件。
              * @event MWF.xApplication.process.Xform.Form#beforeSave
              * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
              */
             "beforeSave",
             /**
-             * 保存后触发。流转后也会触发本事件。
+             * 保存后触发。如果是流程表单,流转后也会触发本事件。
              * @event MWF.xApplication.process.Xform.Form#afterSave
              * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
              */
@@ -180,7 +180,7 @@ MWF.xApplication.process.Xform.Form = MWF.APPForm = new Class(
 
         /**
          * @summary 表单的配置信息,比如表单名称,提交方式等等.
-         * @member {JsonObject}
+         * @member {Object}
          * @example
          *  //可以在脚本中获取表单配置信息
          * var json = this.form.getApp().appForm.json; //表单配置信息
@@ -3126,11 +3126,6 @@ MWF.xApplication.process.Xform.Form = MWF.APPForm = new Class(
             }
         });
     },
-    /**
-     * @summary 一键下载.
-     * @example
-     * this.form.getApp().appForm.downloadAll();
-     */
     downloadAll: function () {
         var htmlFormId = "";
         o2.Actions.load("x_processplatform_assemble_surface").AttachmentAction.uploadWorkInfo(this.businessData.work.id, "pdf", {
@@ -4263,3 +4258,94 @@ MWF.xApplication.process.Xform.Form = MWF.APPForm = new Class(
     }
 
 });
+
+
+/**
+ * @class PortalPage 门户页面。
+ * @alias PortalPage
+ * @o2category FormComponents
+ * @o2range {Portal}
+ * @extends MWF.xApplication.process.Xform.Form
+ * @example
+ * //可以在脚本中获取页面
+ * //方法1:
+ * var page = this.form.getApp().appForm; //获取页面
+ * //方法2
+ * var page = this.target; //在页面本身的事件脚本中获取
+ * @hideconstructor
+ */
+var PortalPage="";
+
+/**
+ * @event PortalPage#beforeProcessWork
+ * @ignore
+ */
+/**
+ * @event PortalPage#beforeProcess
+ * @ignore
+ */
+/**
+ * @event PortalPage#afterProcess
+ * @ignore
+ */
+/**
+ * @event PortalPage#beforeReset
+ * @ignore
+ */
+/**
+ * @event PortalPage#afterReset
+ * @ignore
+ */
+/**
+ * @event PortalPage#beforeRetract
+ * @ignore
+ */
+/**
+ * @event PortalPage#afterRetract
+ * @ignore
+ */
+/**
+ * @event PortalPage#beforeReroute
+ * @ignore
+ */
+/**
+ * @event PortalPage#afterReroute
+ * @ignore
+ */
+/**
+ *  @event PortalPage#beforeDelete
+ * @ignore
+ */
+/**
+ * @event PortalPage#afterDelete
+ * @ignore
+ */
+/**
+ *  @event PortalPage#beforeReaded
+ * @ignore
+ */
+/**
+ * @event PortalPage#afterReaded
+ * @ignore
+ */
+/**
+ * @method PortalPage#getRouteDataList
+ * @ignore
+ */
+/**
+ * @method PortalPage#pressWork
+ * @ignore
+ */
+/**
+ * @method PortalPage#rerouteWork
+ * @ignore
+ */
+/**
+ * @method PortalPage#readedWork
+ * @ignore
+ */
+/**
+ * @method PortalPage#uploadedAttachment
+ * @ignore
+ */
+