1.0.59 • Published 1 year ago

aip-module v1.0.59

Weekly downloads
4
License
MIT
Repository
-
Last release
1 year ago

审计信息化平台 (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
  • 开始使用组件

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;
  • 启动调试环境
npm run start

如果提示启动失败 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 | 点击表格行的事件回调 ( 私有方法) spliceIndexCols | List | cols: 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 encryption | Boolean | | :x: | 参数是否启用加密传输 fetchCallback | Function | | :x: | 每个参照请求完毕调用的回调,参数(data, condition, url) loadCacheFn | Function | | :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=') refid | String | | :white_check_mark: | 参照编号 searchBtnText | String | | :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} _buildRefParams | Object : 返回依赖相关的参数 | name: String (参照的名称), needFields: | 构建依赖参照需要的参数对象 (私有方法) appendParam | | paramKey: String (加入参数的名称), paramValue: String (加入的参数值) | 给参照提供必要的参数 _buildRefDepends | Array | name: String (条件名), refrenceItems: Array (所有参照对象列表), cSet: Set (各个条件的参照表) | 构建指定条件的依赖快照 (私有方法) _afterBuildRefDepends | | refDepnedMaps: , refItems: Array (参照记录) | 重新整理通知列表,将参考实际字段修正事件通知列表 (私有方法) _mapKey2Array | Array | mp: | 将Map数据结构的key转为数组 (私有方法) _getRefByName | | refName: String | 获取参照项的组件引用(非参照项对象) (私有方法) _scheduler | | itemName: String (调度itemName条件的关联依赖组件请求,为空则从头调用) | 参照请求调度核心 (私有方法) _refItemValueChange | | itemName: String (参照名), value: String (参照当前值) | 参数数据项值改变通知 (私有方法) _resetState | | | 重新初始化部分对象变量 (私有方法) _loadRefrences | | params: | 载入(初始化)参照 (私有方法) _installServices | | | 注册全局服务,暴露部分信息到浏览器以便外部了解组件当前信息 (私有方法) _uninstallServices | | | (私有方法) getParams | Object : 返回参数,可能值为 null或者{paramKey1: paramValue, ...} | ignoreMust: Boolean ( 是否忽略必选,如果为true,将返回目前已选的条件信息,如果为false,有必选条件未选将返回null) | 获取当前状态选取的参数 search | | e: Event (可选参数) | 检索 reload | | | 重新载入所有参照数据 clear | | e: Event (可选参数) | 清空所有参照项的值 _getContextPath | String | path: String | 根据给定的path获取上下文路径 (私有方法) _eachRender | ReactElement | refItem: 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通知调度器)获取数据的方法,会被调度系统触发 每个子类必须实现

如果有defaultValue必须调用

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

getValue | String | | 获取值,按需 override setDefaultValue | | value: Object | 设置组件的默认值(可以随时调用) override 默认会赋值给 state.value

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) id | String | | :white_check_mark: | 参照项编号 multiple | String | | :x: | 是否允许多选,无值或者'0'表示不允许 name | String | | :white_check_mark: | 参照项名称 options | Array | | :x: | 在设置静态Option的情况下,直接设置的对象列表 type | String | | :white_check_mark: | 参照项类型 url | String | | :x: | 参照请求路径 valuefield | String | | :white_check_mark: | 返回值对象,实际字段名称 width | Number | | :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:默认值

fetchCallback | Function | | :x: | 数据返回后回调(只有在网络请求的情况下会触发) fetchCallback(data: Array, condition: Map, url: String) id | String | | :white_check_mark: | 参照项编号 label | String | | :x: | 标题 matchData | Array | | :x: | 默认选择的记录 multiple | String | | :x: | 是否多选(null or '0') name | String | | :x: | 参照项名称 type | String | | :white_check_mark: | 参照项类型 url | String | | :x: | 请求路径 width | Number | | :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) id | String | | :white_check_mark: | 参照项编号 label | String | | :x: | 标题 matchData | Array | | :x: | 默认选择的记录 multiple | String | | :x: | 是否多选(null or '0') name | String | | :white_check_mark: | 参照项名称 type | String | | :white_check_mark: | 参照项类型 url | String | | :x: | 请求路径 width | Number | | :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 }, {}, ... } onSave | | results: Array | 点击树组件的"确定"按钮触发时间 buildValue | Array | items: Array | 将请求数据转为组件所需数据格式 valueChange | | results: Array | 数据选择发生变化触发例程 getValue | String | | 获取值,按需 override clear | | | 重置值 override getRefTreeData | | value: String | 匹配给定值的树节点数据 filterTree | | value: , data: Array , originData: Array , level: number | 树数据过滤例程

FieldsFilter

字段过滤对话框

@description 提供字段过滤操作 @class FieldsFilter @extends { Component }

proptypedefaultrequireddescription
closeFunction:x:关闭对话框事件
columnsArray:x:字段信息 {key, title}, ...
doCleanFunction:x:清空条件事件

doSearch | Function | | :x: | 点击搜索事件 doSearch(params) params: {"field":"field1","assign":"==","value":"111"},{"andor":"&&", "field":"field2","assign":">","value":"222"} filterParam | Array | | :x: | 已存在的过滤条件 { andor, leftQ, field, assign, value, rightQ},... show | Boolean | | :white_check_mark: | 是否显示对话框 title | String | | :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.

To learn React, check out the React documentation.

依赖

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

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

1.0.59

1 year ago

1.0.58

1 year ago

1.0.57

1 year ago

1.0.51

1 year ago

1.0.52

1 year ago

1.0.48

1 year ago

1.0.46

1 year ago

1.0.49

1 year ago

1.0.50

1 year ago

0.4.59

2 years ago

0.4.58

2 years ago

0.4.56

2 years ago

1.0.38

2 years ago

1.0.43

2 years ago

1.0.41

2 years ago

1.0.45

1 year ago

1.0.19

2 years ago

1.0.2

2 years ago

1.0.18

2 years ago

1.0.1

2 years ago

1.0.17

2 years ago

1.0.16

2 years ago

1.0.9

2 years ago

1.0.8

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.22

2 years ago

1.0.21

2 years ago

1.0.20

2 years ago

1.0.26

2 years ago

1.0.25

2 years ago

1.0.24

2 years ago

1.0.23

2 years ago

1.0.29

2 years ago

1.0.28

2 years ago

1.0.27

2 years ago

1.0.33

2 years ago

1.0.32

2 years ago

1.0.31

2 years ago

1.0.30

2 years ago

1.0.36

2 years ago

1.0.35

2 years ago

1.0.34

2 years ago

1.0.11

2 years ago

1.0.10

2 years ago

1.0.15

2 years ago

1.0.14

2 years ago

1.0.13

2 years ago

1.0.12

2 years ago

0.4.54

2 years ago

0.4.52

2 years ago

0.4.50

2 years ago

0.4.42

2 years ago

0.4.40

3 years ago

0.4.46

2 years ago

0.4.38

3 years ago

0.4.35

3 years ago

0.4.36

3 years ago

0.4.31

3 years ago

0.4.32

3 years ago

0.4.33

3 years ago

0.4.34

3 years ago

0.4.30

3 years ago

0.4.28

3 years ago

0.4.27

3 years ago

0.4.26

3 years ago

0.4.20

3 years ago

0.4.24

3 years ago

0.4.22

3 years ago

0.4.23

3 years ago

0.4.19

3 years ago

0.4.18

3 years ago

0.4.17

3 years ago

0.4.15

3 years ago

0.4.16

3 years ago

0.4.13

3 years ago

0.4.14

3 years ago

0.4.10

3 years ago

0.4.11

3 years ago

0.4.12

3 years ago

0.3.97

3 years ago

0.3.96

3 years ago

0.3.95

3 years ago

0.3.94

3 years ago

0.3.93

3 years ago

0.3.92

3 years ago

0.3.91

3 years ago

0.3.90

3 years ago

0.3.99

3 years ago

0.3.98

3 years ago

0.3.86

3 years ago

0.3.89

3 years ago

0.3.88

3 years ago

0.3.87

3 years ago

0.4.9

3 years ago

0.4.8

3 years ago

0.4.5

3 years ago

0.4.4

3 years ago

0.4.7

3 years ago

0.4.6

3 years ago

0.4.1

3 years ago

0.4.3

3 years ago

0.4.2

3 years ago

0.3.75

3 years ago

0.3.74

3 years ago

0.3.73

3 years ago

0.3.72

3 years ago

0.3.71

3 years ago

0.3.70

3 years ago

0.3.79

3 years ago

0.3.78

3 years ago

0.3.77

3 years ago

0.3.76

3 years ago

0.3.64

3 years ago

0.3.62

3 years ago

0.3.61

3 years ago

0.3.60

3 years ago

0.3.69

3 years ago

0.3.68

3 years ago

0.3.67

3 years ago

0.3.65

3 years ago

0.3.53

3 years ago

0.3.52

3 years ago

0.3.51

3 years ago

0.3.50

3 years ago

0.3.59

3 years ago

0.3.58

3 years ago

0.3.57

3 years ago

0.3.56

3 years ago

0.3.55

3 years ago

0.3.54

3 years ago

0.3.42

3 years ago

0.3.41

3 years ago

0.3.40

3 years ago

0.3.49

3 years ago

0.3.48

3 years ago

0.3.47

3 years ago

0.3.45

3 years ago

0.3.44

3 years ago

0.3.43

3 years ago

0.3.39

3 years ago

0.3.38

3 years ago

0.3.37

3 years ago

0.3.36

3 years ago

0.3.35

3 years ago

0.3.34

3 years ago

0.3.33

3 years ago

0.3.85

3 years ago

0.3.84

3 years ago

0.3.83

3 years ago

0.3.82

3 years ago

0.3.81

3 years ago

0.3.80

3 years ago

0.3.32

3 years ago

0.3.30

3 years ago

0.3.29

3 years ago

0.3.28

3 years ago

0.3.27

3 years ago

0.3.26

3 years ago

0.3.25

3 years ago

0.3.24

3 years ago

0.3.23

3 years ago

0.3.22

3 years ago

0.3.21

3 years ago

0.3.20

3 years ago

0.3.19

3 years ago

0.3.18

3 years ago

0.3.17

3 years ago

0.3.16

3 years ago

0.3.15

3 years ago

0.3.13

3 years ago

0.3.12

3 years ago

0.3.11

3 years ago

0.3.10

3 years ago

0.3.9

3 years ago

0.3.8

3 years ago

0.3.7

3 years ago

0.3.6

3 years ago

0.3.5

3 years ago

0.3.4

3 years ago

0.2.99

3 years ago

0.2.98

3 years ago

0.3.0

3 years ago

0.3.2

3 years ago

0.3.1

3 years ago

0.3.3

3 years ago

0.2.97

3 years ago

0.2.96

3 years ago

0.2.95

3 years ago

0.2.9-4.1

3 years ago

0.2.94

3 years ago

0.2.93

3 years ago

0.2.92

3 years ago

0.2.91

3 years ago

0.2.90

3 years ago

0.2.89

3 years ago

0.2.88

3 years ago

0.2.87

3 years ago

0.2.86

3 years ago

0.2.85

3 years ago

0.2.84

3 years ago

0.2.83

3 years ago

0.2.82

3 years ago

0.2.81

3 years ago

0.2.80

3 years ago

0.2.79

3 years ago

0.2.78

3 years ago

0.2.77

3 years ago

0.2.76

3 years ago

0.2.75

3 years ago

0.2.74

3 years ago

0.2.73

3 years ago

0.2.72

3 years ago

0.2.71

3 years ago

0.2.70

3 years ago

0.2.69

3 years ago

0.2.68

3 years ago

0.2.67

3 years ago

0.2.63

3 years ago

0.2.62

3 years ago

0.2.61

3 years ago

0.2.66

3 years ago

0.2.65

3 years ago

0.2.60

3 years ago

0.2.59

3 years ago

0.2.58

3 years ago

0.2.57

3 years ago

0.2.56

3 years ago

0.2.55

3 years ago

0.2.52

3 years ago

0.2.51

3 years ago

0.2.50

3 years ago

0.2.54

3 years ago

0.2.53

3 years ago

0.2.49

3 years ago

0.2.48

3 years ago

0.2.47

3 years ago

0.2.46

3 years ago

0.2.45

3 years ago

0.2.43

3 years ago

0.2.42

3 years ago

0.2.41

3 years ago

0.2.40

3 years ago

0.2.39

3 years ago

0.2.38

3 years ago

0.2.36

3 years ago

0.2.35

3 years ago

0.2.33

3 years ago

0.2.32

3 years ago

0.2.27

4 years ago

0.2.26

4 years ago

0.2.30

4 years ago

0.2.29

4 years ago

0.2.28

4 years ago

0.2.25

4 years ago

0.2.23

4 years ago

0.2.22

4 years ago

0.2.20

4 years ago

0.2.19

4 years ago

0.2.18

4 years ago

0.2.17

4 years ago

0.2.16

4 years ago

0.2.15

4 years ago

0.2.14

4 years ago

0.2.13

4 years ago

0.2.6

4 years ago

0.2.9

4 years ago

0.2.8

4 years ago

0.2.2

4 years ago

0.2.4

4 years ago

0.2.1

4 years ago

0.2.0

4 years ago

0.1.8

4 years ago

0.1.9

4 years ago

0.1.7

4 years ago

0.1.6

4 years ago

0.1.5

4 years ago

0.1.4

4 years ago

0.1.3

4 years ago

0.1.2

4 years ago

0.1.1

4 years ago

0.1.0

4 years ago