前端开发
AIP组件
AIP-Module组件

审计信息化平台 (Audit Information Platform - AIP) 模型展现端前端组件

API - Module 组件属于(AIP)前端的组成部分,本组件提供模型部分的前端展现。整个组件采用 React 开发

React版本要求 16 暂不支持 17

如何开始

使用 react-create-app 创建一个 React 项目

  • 创建一个demo的React项目
create-react-app demo 
  • 引入组件

package.json 依赖中加入

  "aip-module": "latest"
  • 安装依赖
npm install --legacy-peer-deps
  • 开始使用组件

src/App.js 里面引入组件,然后测试最简单的 Message 组件

修改后的 App.js 代码如下

import React from 'react';
import logo from './logo.svg';
import {Message} from 'aip-module';
import './App.css';
 
class App extends React.Component {
 
    showMessage = () => {
        Message.showMessage('Hello world');
    };
 
    render() {
        return (
            <div className="App">
                <header className="App-header">
                    <img src={logo} className="App-logo" alt="logo"/>
                    <p>
                        Edit
                        <code>src/App.js</code>
                        and save to reload.
                    </p>
                    <a
                        className="App-link"
                        href="https://reactjs.org"
                        target="_blank"
                        rel="noopener noreferrer"
                    >
                        Learn React
                    </a>
                    <button onClick={this.showMessage}>点我</button>
                </header>
            </div>
        );
    }
}
 
export default App;
  • 启动调试环境
export NODE_OPTIONS=--openssl-legacy-provider && npm run start
  • 组件打包
export NODE_OPTIONS=--openssl-legacy-provider && npm run build

如果提示启动失败 JavaScript heap out of memory ,请将 package.jsonreact-scripts start 改为 react-scripts --max_old_space_size=2048 startbuild 指令也修改以避免在构建的时候报相同的错误!

组件说明

所有的返回数据必须是如下的 标准 的格式

code: 200
data: [{"期间": "201601"}, {"期间": "201602"}, {"期间": "201603"}, {"期间": "201604"}, {"期间": "201605"}, {"期间": "201606"},…]
msg: "success"

返回的数据为 JSON 格式,并至少包含: code/data/msg 三个部分

最主要的组件 AIPSearchPanel 提供了 审友A7平台 标准的检索条件框,提供了动态构建检索条件(含关联)的能力,目前支持以下组件类型

  • text 文本输入
  • number 数值输入
  • tree 树形
  • select 列表
  • table 表格
  • checkbox 选择
  • radio 单选
  • number2 纯数值输入
  • date 日期

在继承自 RefItem 的子组件中, type 属性必须是上述类型。

使用示例(最基本的属性)

<AIPSearchPanel key="searchpanel" loadedfunc={this.loaded} doSearch={this.doSearch}
                refid={this.state.refid} loadCacheFn={this.loadCacheFn}
                prefixUrl={servUrl + queryAnalysisPath + '/refrence/getrefrence?id='}/>

全局调试变量: window.isAipDebug
全局调试信息回显: window.aipInspect()
载入AIPSearchPanel的参照方法: window.realoadRefs(params)
显示AIP的版本: window.aipVersion

AIPTable

表格组件

@class AIPTable
 
@extends {Component}
 
@description 对于IUAP表格的封装
proptypedefaultrequireddescription
columnArray:white_check_mark:表格列信息数组
dataArray:x:表格数据数组
getSelectedDataFuncFunction:x:获取数据行选择的事件响应函数,参数(selectedList, record, index, newData)
heightNumber:x:表格高度
limitNumber:white_check_mark:分页每页显示条数
needFooterBoolean:x:是否显示行合计行
needSumBoolean:x:是否显示指定列的合计行
pageNumber:white_check_mark:页码
selectString:x:表格样式[single/multiple/simple]
titleString:x:表格名称

methodreturn typeparamsdescription
**_
getSelectedDataFunc**selectedList: List , record: Object , index: Number , newData: Object点击表格行的事件回调 ***(
私有方法)***
spliceIndexColsListcols: List删除序号列,返回一个新的Columns

AIPSearchPanel

AIP参照搜索框组件

@class AIPSearchPanel
 
@extends { Component }
 
@description 配合参照设计显示搜索条件框

涉及数据结构

  • 服务返回的参照数据必须符合结构
{
  "createtime": "2021-03-09",
  "creator": null,
  "orderindex": null,
  "name": "科目余额表参照",
  "refType": null,
  "description": "科目余额表查询条件",
  "refitems": [
    {
      "valuefield": "账套编号",
      "defaultValue": null,
      "multiple": "0",
      "refitem": [],
      "pageable": false,
      "displayorder": 0,
      "label": "账套名称",
      "type": "table",
      "url": "/dataretriver/retrive?type=ref&id=e44eb7e5-1e59-494d-9343-0831a3f4a4b8&index=0",
      "name": "账套编号",
      "options": [],
      "width": 200,
      "must": true,
      "id": "672db682-5dc1-4870-922e-8e8acf0c723e",
      "displayfield": "账套名称"
    },
    {
      "valuefield": "年度",
      "defaultValue": null,
      "multiple": "1",
      "refitem": [
        "账套编号"
      ],
      "pageable": false,
      "displayorder": 1,
      "label": "账套年度",
      "type": "select",
      "url": "/dataretriver/retrive?type=ref&id=e44eb7e5-1e59-494d-9343-0831a3f4a4b8&index=1",
      "name": "年度期间",
      "options": [],
      "width": 170,
      "must": true,
      "id": "5c55e835-3510-49c2-b18f-dd297e70cb34",
      "displayfield": "年度"
    },
    {
      "valuefield": "value",
      "defaultValue": null,
      "multiple": "0",
      "refitem": [],
      "pageable": false,
      "displayorder": 5,
      "label": null,
      "type": "select",
      "url": "/dataretriver/retrive?type=ref&id=e44eb7e5-1e59-494d-9343-0831a3f4a4b8&index=5",
      "name": "科目级次",
      "options": [
        {
          "label": "1级",
          "value": "1"
        },
        {
          "label": "到末级",
          "value": "到末级"
        }
      ],
      "width": 80,
      "must": true,
      "id": "0e29906b-7af4-4560-85f4-b98b10916c51",
      "displayfield": "label"
    }
  ],
  "id": "e44eb7e5-1e59-494d-9343-0831a3f4a4b8",
  "sourceref": null
}
proptypedefaultrequireddescription
appendSpecialParamFunction:x:初始化特殊参数 appendSpecialParam(): Map 返回特殊参数对象,如果没有,返回 null
cleanBtnTextString:x:清除按钮显示内容(默认是"重置")
disableClearBoolean:x:是否禁止显示清除按钮(默认false)
**
doSearch**Function:white_check_mark:点击查询按钮触发的事件,会将目前的参照对象内容传递给参数 doSearch(params: Map{key(String): value(String)}): void
encryptionBoolean:x:参数是否启用加密传输
fetchCallbackFunction:x:每个参照请求完毕调用的回调,参数(data, condition, url)
loadCacheFnFunction:x:条件缓存载入回调函数 (id): Promise 返回的**
Promise**,其中参数为 Map{key(String): value(String)} 该参数与 search 方法的参数应该是相同
**
loadedfunc**Function:x:参照信息请求完毕后的事件回调,参数为(immediateSearch: bool) 在没有参照项的情况下,immediateSearch=true会告知立即进行检索,在有参照项的情况下,不会传递该参数
**
prefixUrl**String:white_check_mark:所有参照服务的请求路径,如果没有设置,将使用默认值(WINDOW_HOST.protocol + '//' + WINDOW_HOST.host + '/qa/refrence/getrefrence?id=')
refidString:white_check_mark:参照编号
searchBtnTextString:x:查询按钮显示内容(默认是"查询")
**
service**PropTypes.map:x:注入的服务 { loadRefrence: (url/refid): Promise (response) 整个参照系载入的异步数据方法,返回标准response返回 componentName: (url/id, params): Promise (response) 每个组件载入数据的异步方法,返回标准response返回,每个组件的loadData会调用该方法

methodreturn typeparamsdescription
registComponentcomponentName: String , componentClass: Class注册新的组件,如果已存在,将覆盖原有组件实现
getRegistedComponentsMap获取参照系统已经注册的组件信息返回Map为 {compnentName: componentClass}
_buildRefParamsObject : 返回依赖相关的参数name: String (参照的名称), needFields:构建依赖参照需要的参数对象 (私有方法)
appendParamparamKey: String (加入参数的名称), paramValue: String (加入的参数值)给参照提供必要的参数
_buildRefDependsArrayname: String (条件名), refrenceItems: Array (所有参照对象列表), cSet: Set (各个条件的参照表)
构建指定条件的依赖快照 (私有方法)
_afterBuildRefDependsrefDepnedMaps: , refItems: Array (参照记录)重新整理通知列表,将参考实际字段修正事件通知列表 (私有方法)
_mapKey2ArrayArraymp:将Map数据结构的key转为数组 (私有方法)
_getRefByNamerefName: String获取参照项的组件引用(非参照项对象) (私有方法)
_scheduleritemName: String (调度itemName条件的关联依赖组件请求,为空则从头调用)参照请求调度核心 (私有方法)
_refItemValueChangeitemName: String (参照名), value: String (参照当前值)参数数据项值改变通知 (私有方法)
_resetState重新初始化部分对象变量 (私有方法)
_loadRefrencesparams:载入(初始化)参照 (私有方法)
_installServices注册全局服务,暴露部分信息到浏览器以便外部了解组件当前信息 (私有方法)
_uninstallServices(私有方法)
getParamsObject : 返回参数,可能值为 null或者{paramKey1: paramValue, ...}ignoreMust: Boolean (
是否忽略必选,如果为true,将返回目前已选的条件信息,如果为false,有必选条件未选将返回null)获取当前状态选取的参数
searche: Event (可选参数)检索
reload重新载入所有参照数据
cleare: Event (可选参数)清空所有参照项的值
_getContextPathStringpath: String根据给定的path获取上下文路径 (私有方法)
_eachRenderReactElementrefItem: Object (参照项对象), idx: Number (序号)每个参照项的组件 (私有方法)

RefItem

基类提供每个参照项的基本处理例程和数据结构

@class RefItem
 
@extends { Component }
 
@description 所有的参照项组件的基类,每个对象的基本属性如下
       {
    "valuefield"
:
    "年度",
        "defaultValue"
:
    null,
        "multiple"
:
    "1",
        "refitem"
:
    [
        "账套编号"
    ],
        "pageable"
:
    false,
        "displayorder"
:
    1,
        "label"
:
    "账套年度",
        "type"
:
    "select",
        "url"
:
    "/dataretriver/retrive?type=ref&id=e44eb7e5-1e59-494d-9343-0831a3f4a4b8&index=1",
        "name"
:
    "年度期间",
        "options"
:
    [],
        "width"
:
    170,
        "must"
:
    true,
        "id"
:
    "5c55e835-3510-49c2-b18f-dd297e70cb34",
        "displayfield"
:
    "年度"
}
,
proptypedefaultrequireddescription
defaultValueString:x:默认值
fetchCallbackFunction:x:获取数据后调用的通知回调
idString:white_check_mark:参照项编号
keyString:white_check_mark:组件Key
labelString:x:参照项显示标签(优先与 name 属性作为参照标题显示值)
nameString:white_check_mark:参照项名称
refItemValueChangeFunction:x:参照值变化的回调 (name: String, plainValue: String, value: Object)
refitemArray:white_check_mark:依赖参照
typeString:white_check_mark:参照项类型
widthNumber:x:参照项组件宽度(默认200px)

methodreturn typeparamsdescription
refItemValueChangevalue: String (当前参照的值)通知其他组件,子类直接调用,需要在托管组件的onChange中调用
getNeedFieldsArray获取自己所依赖(不是驱动依赖,是参数依赖)的数组
getNameString返回当前参照名称
getLabelString返回当前参照显示标题
clear清空操作,子类需要 override
loadDataparams: Object (依赖的参数 {K:V} 对象), defaultValue: String (可选 默认值,如果有默认值,需要在loadData后设置设置关联值,再调用refItemValueChange通知调度器)获取数据的方法,会被调度系统触发 ** 每个子类必须实现 **
getValueString获取值,按需 override
setDefaultValuevalue: Object设置组件的默认值(可以随时调用) override 默认会赋值给 state.value

loadData 如果有defaultValue必须调用

// async or sync get load from remote or local
if (defaultValue) {
    // other code ...
    this.refItemValueChange(defaultValue);
}
 

TextRef

文本类型的参照项是没有依赖参照的

@class TextRef
 
@extends { RefItem }
 
@description 纯输入参照组件
proptypedefaultrequireddescription
defaultValueString:x:默认值
idString:white_check_mark:参照项编号
nameString:white_check_mark:参照项名称
typeString:white_check_mark:参照项类型
widthNumber:x:组件宽度 (默认200px)

methodreturn typeparamsdescription
clear重置值 override
_onChangevalue: String值发生变化调用 (私有方法)
loadDataparams: Object (依赖的参数 {K:V} 对象), defaultValue: String (可选 默认值,如果有默认值,需要在loadData后设置设置关联值,再调用refItemValueChange通知调度器)获取数据的方法,会被调度系统触发 ** 每个子类必须实现 **

NumberPlainRef

更简单的数值类型的参照项

@class NumberPlainRef
 
@extends { RefItem }
 
@description 数值显示组件,可输入且会验证输入
proptypedefaultrequireddescription
defaultValueNumber:x:默认值
idString:white_check_mark:参照项编号
nameString:white_check_mark:参照项名称
typeString:white_check_mark:参照项类型
widthNumber:x:组件宽度 (默认120px)

methodreturn typeparamsdescription
clear重置值 override
_onChangevalue: Number值发生变化调用 (私有方法)
loadDataparams: Object (依赖的参数 {K:V} 对象), defaultValue: String (可选 默认值,如果有默认值,需要在loadData后设置设置关联值,再调用refItemValueChange通知调度器)获取数据的方法,会被调度系统触发 ** 每个子类必须实现 **

NumberRef

数值类型的参照项与文本类型参照一样,没有依赖参照

@class NumberRef
 
@extends { RefItem }
 
@description 数值显示组件(包含+/-箭头)
proptypedefaultrequireddescription
defaultValueNumber:x:默认值
idString:white_check_mark:参照项编号
nameString:white_check_mark:参照项名称
typeString:white_check_mark:参照项类型
widthNumber:x:组件宽度 (默认120px)

methodreturn typeparamsdescription
clear重置值 override
_onChangevalue: Number值发生变化调用 (私有方法)
loadDataparams: Object (依赖的参数 {K:V} 对象), defaultValue: String (可选 默认值,如果有默认值,需要在loadData后设置设置关联值,再调用refItemValueChange通知调度器)获取数据的方法,会被调度系统触发 ** 每个子类必须实现 **

SelectRef

下拉列表参照项组件

@class SelectRef
 
@extends { RefItem }
 
@description 下拉列表组件,支持选择时间(年度,月份),是/否等情况
proptypedefaultrequireddescription
defaultValueString:x:初始值
displayfieldString:white_check_mark:返回值对象,显示字段名称
**
fetchCallback**Function:x:数据返回后回调(只有在网络请求的情况下会触发) fetchCallback(data: Array, condition: Map, url: String)
idString:white_check_mark:参照项编号
multipleString:x:是否允许多选,无值或者'0'表示不允许
nameString:white_check_mark:参照项名称
optionsArray:x:在设置静态Option的情况下,直接设置的对象列表
typeString:white_check_mark:参照项类型
urlString:x:参照请求路径
valuefieldString:white_check_mark:返回值对象,实际字段名称
widthNumber:x:组件宽度

methodreturn typeparamsdescription
setDefaultValuevalue: String设置默认值 override
loadDataparams: Object , defaultValue: String远程请求数据 override

返回的数据必须是数组

[
  {
    期间: "201601"
  },
  {
    期间: "201602"
  },
  ...
  {
    期间: "201612"
  }
]

_isArray | Boolean | v: Object | 判断给予的对象是否是Array类型 (私有方法) _getSingleLabelFromValue | String | v: String | 通过值反查该值对应的显示值(只返回第一个) (私有方法) _getLabelFromValue | Array | v: String | 通过值反查该值对应的显示值 (私有方法) _onChange | | v: String | 选择项变化事件 (私有方法) clear | | | 重置条件 override

CheckRef

多选框参照组件

@class CheckRef
 
@extends { RefItem }
 
@description 复选框组件
proptypedefaultrequireddescription
defaultValueString:x:默认值
displayfieldString:white_check_mark:显示字段名
fetchCallbackFunction:x:请求数据后回调
idString:x:请求的id
optionsArray:x:在设置静态Option的情况下,直接设置的对象列表
urlString:x:请求路径
valuefieldString:white_check_mark:实际值字段名
widthNumber:x:组件宽度

methodreturn typeparamsdescription
_prepareDataArrayarr: Array (原始数组)转换数据为{label: value}的数组 (私有方法)
_loadData远程请求数据 (私有方法)
refChangen: String , v: String参照条件变化后通知,接收参数名称和值 override
clear重置值 override
getValueString获取值, override
_onChangecheckedValues: String值发生变化调用 (私有方法)

RadioRef

单选参照组件

@class RadioRef
 
@extends { RefItem }
 
@description 多个值单选情况使用
proptypedefaultrequireddescription
defaultValueNumber:x:默认值
displayfieldString:white_check_mark:显示字段名
fetchCallbackFunction:x:请求数据后回调
idString:x:请求的id
optionsArray:x:在设置静态Option的情况下,直接设置的对象列表
urlString:x:请求路径
valuefieldString:white_check_mark:实际值字段名
widthNumber:x:组件宽度

methodreturn typeparamsdescription
_prepareDataArrayarr: Array (原始数组)转换数据为{label: value}的数组 (私有方法)
_loadData远程请求数据 (私有方法)
refChangen: String , v: String参照条件变化后通知,接收参数名称和值 override
clear重置值 override
getValueString获取值, override

TableRef

表格参照组件

@class TableRef
 
@extends { RefItem }
 
@description 弹出表格组件
proptypedefaultrequireddescription
defaultValueString:x:默认值
fetchCallbackFunction:x:数据返回后回调(只有在网络请求的情况下会触发) fetchCallback(data: Array, condition: Map, url: String)
idString:white_check_mark:参照项编号
labelString:x:标题
matchDataArray:x:默认选择的记录
multipleString:x:是否多选(null or '0')
nameString:x:参照项名称
typeString:white_check_mark:参照项类型
urlString:x:请求路径
widthNumber:x:组件宽度

methodreturn typeparamsdescription
buildPagedatas: Array构建分页数据
loadDataparams: Object , defaultValue: String远程请求数据
setDefaultValuevalue: String设置默认值 override
launchTableHeaderdata: Array根据 refinfo 返回结果拆解并渲染表格表头,注意:单选时候自己添加radio
launchTableDatarecords:处理并渲染表格数据
miniSearchFuncundefinedvalue: (输入参数)
handlePaginationindex: number (跳转页数)跳转到制定页数的操作
dataNumSelectindex: number , pageSize: number选择每页数据个数
onSaveundefineditem: Objectmodal框确认按钮
buildValueArrayitems: Array将获取的数组数据转为iuap需要的格式
valueChangeitem: Array内部方法,在选择值发生变化的时候触发
getValueString获取值,按需 override
onCancelundefinedmodal框右上X和右下角取消
clearFuncundefined清空操作,借助form。就是value和matchData置空。前者对应input框,matchData对应表中选中的节点
clear清空操作 override

TreeRef

树形组件

@class TreeRef
 
@extends { RefItem }
 
@description 弹出表格组件
proptypedefaultrequireddescription
defaultValueString:x:默认值
**
fetchCallback**Function:x:数据返回后回调(只有在网络请求的情况下会触发) fetchCallback(data: Array, condition: Map, url: String)
idString:white_check_mark:参照项编号
labelString:x:标题
matchDataArray:x:默认选择的记录
multipleString:x:是否多选(null or '0')
nameString:white_check_mark:参照项名称
typeString:white_check_mark:参照项类型
urlString:x:请求路径
widthNumber:x:组件宽度

methodreturn typeparamsdescription
canClickGoOnBoolean当点击文本框右侧弹出按钮时是否打开modal适用于级联情况下当选择不全时的处理
processOrgsTreeorgs: Array将列表数据转换为树结构数据
_treeDataToFlatArraytreeData: Array将树对象(包含子节点)列表转为一维列表 (私有方法)
loadDataparams: Object , defaultValue: String获取数据 value: '{"refname":"xx集团;yy集团","refpk":"001;002"}',matchData: [{ name: 'xx集团', refname: 'xx集团', code: '001' }, { name: 'yy集团', refname: 'yy集团', code: '002' }],treeData:{ name: 'xxx', refname: 'xxx', code: '001', refpk: '001', childrens: [{ name, refname, code, refpkm }, {}, ...]}
onSaveresults: Array点击树组件的"确定"按钮触发时间
buildValueArrayitems: Array将请求数据转为组件所需数据格式
valueChangeresults: Array数据选择发生变化触发例程
getValueString获取值,按需 override
clear重置值 override
getRefTreeDatavalue: String匹配给定值的树节点数据
filterTreevalue: , data: Array , originData: Array , level: number树数据过滤例程

FieldsFilter

字段过滤对话框

@description 提供字段过滤操作 @class FieldsFilter @extends { Component }
proptypedefaultrequireddescription
closeFunction:x:关闭对话框事件
columnsArray:x:字段信息 [{key, title}, ...]
doCleanFunction:x:清空条件事件
doSearchFunction:x:点击搜索事件 doSearch(params) params: [{"field":"field1","assign":"==","value":"111"},{"andor":"&&", "field":"field2","assign":">","value":"222"}]
filterParamArray:x:已存在的过滤条件 [{ andor, leftQ, field, assign, value, rightQ},...]
showBoolean:white_check_mark:是否显示对话框
titleString:x:过滤对话框标题

methodreturn typeparamsdescription
**
open**columns: Array (字段信息 [{key, title}, ...]), filters: Array (已存在的过滤条件 [{ andor, leftQ, field, assign, value, rightQ},...])打开字段过滤器
close关闭过滤器对话框
doSearch过滤触发事件调用
doClean清除事件调用

CrossRotate

行列互换设置对话框

@class {CrossRotate}
 
@extends {Component}
 
@description 弹出行列互换设置对话框
proptypedefaultrequireddescription
closeFunction:x:关闭转置设置对话框
colFieldsArray:x:传入的作为列的字段信息列表(列字段列表) [{key, title}, ...]
fieldsArray:x:传入所有的字段信息列表(备选字段列表) [{key, title}, ...]
okFunction:x:确定回调事件 ok({ fields, valueFields, colFields, rowFields})
removeFunction:x:删除转置关系回调 remove()
rowFieldsArray:x:传入的作为行的字段信息列表(行字段列表) [{key, title}, ...]
showBoolean:white_check_mark:是否显示
titleString:x:标题,默认为:行列互换设置
valueFieldsArray:x:传入的作为值的字段信息列表(值字段列表) [{key, title}, ...]

methodreturn typeparamsdescription
_rightRow增加行字段 (私有方法)
_leftRow移除行字段 (私有方法)
_rightCol增加列字段 (私有方法)
_leftCol移除列字段 (私有方法)
_rightValue增加值字段 (私有方法)
_leftValue移除值字段 (私有方法)
_remove对话框删除按钮事件 (私有方法)
_ok对话框确认按钮事件 (私有方法)
_close(私有方法)

更多

You can learn more in the Create React App documentation (opens in a new tab).

To learn React, check out the React documentation (opens in a new tab).

依赖

  • react
  • tinper-bee
  • ref-multiple-table
  • ref-tree

北京用友审计软件有限公司 开发维护