{"id":15974645,"url":"https://github.com/devzwy/mdhelper","last_synced_at":"2026-01-28T13:01:16.653Z","repository":{"id":187659627,"uuid":"676892978","full_name":"devzwy/mdhelper","owner":"devzwy","description":"明道云Api封装","archived":false,"fork":false,"pushed_at":"2025-05-23T05:32:52.000Z","size":274,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-03T14:52:14.368Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devzwy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-08-10T08:53:45.000Z","updated_at":"2025-05-23T05:32:55.000Z","dependencies_parsed_at":"2025-04-03T09:21:16.667Z","dependency_job_id":"6169bf52-b42a-49b7-9597-51513f7c83af","html_url":"https://github.com/devzwy/mdhelper","commit_stats":null,"previous_names":["devzwy/mdhelper"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/devzwy/mdhelper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devzwy%2Fmdhelper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devzwy%2Fmdhelper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devzwy%2Fmdhelper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devzwy%2Fmdhelper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devzwy","download_url":"https://codeload.github.com/devzwy/mdhelper/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devzwy%2Fmdhelper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28845762,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T12:37:07.070Z","status":"ssl_error","status_checked_at":"2026-01-28T12:37:06.657Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-07T21:43:15.766Z","updated_at":"2026-01-28T13:01:16.647Z","avatar_url":"https://github.com/devzwy.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# mdhelper\n\n明道云Api封装，kotlin环境测试。\n\n## [单元测试](https://github.com/devzwy/mdhelper/tree/main/src/test/kotlin/Test.kt)\n\n![单元测试](https://github.com/devzwy/mdhelper/blob/main/imgs/test.png)\n\n## 依赖\n\n### [latest version](https://central.sonatype.com/artifact/io.github.devzwy/mdhelper)\n\n### Android版本依赖参考\n\n\u003e 解决工具类在安卓端解析数据时引起的闪退问题。引入下面的依赖即可，不需要再引入Java/Kotlin依赖部分。\n\n```\nimplementation 'com.alibaba.fastjson2:fastjson2:2.0.48.android5'\n\n//明道云工具类\nimplementation('io.github.devzwy:mdhelper:3.1.6') {\n        exclude group: 'com.alibaba.fastjson2', module: 'fastjson2'\n}\n\n```\n\n### Java/kotlin 依赖\n\n- Maven\n\n```\n\u003cdependency\u003e\n  \u003cgroupId\u003eio.github.devzwy\u003c/groupId\u003e\n  \u003cartifactId\u003emdhelper\u003c/artifactId\u003e\n  \u003cversion\u003e3.1.6\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n- Gradle\n\n```\nimplementation(\"io.github.devzwy:mdhelper:3.1.6\")\nimplementation(\"com.alibaba.fastjson2:fastjson2:2.0.48\")\n```\n\n## Api列表\n\n### 实例构造\n\n```\nMDHelper.getInstance()\n```\n\n### 添加BaseUrl\n\n\u003e 针对多明道云配置不同的BaseUrl，如果全局仅有一个BaseUrl时，后续对明道应用的操作可以不传入该值，默认取第一个配置。\n\n```\n/**\n * 添加BaseUrl,内部判断所添加的url值，存在时将跳过添加，跳过添加时会有错误日志输出。\n * [key] 后续操作需要携带，用于找到对应的url\n * [url] url值\n */\nfun addBaseUrl(key: String, url: String)\n```\n\n### 获取baseurl\n\n```\n/**\n * 获取baseurl,不填写key时会取第一个添加的baseurl,如果没有添加过baseurl时可能会抛出异常\n * [key] 调用[addBaseUrl]时的key\n */\nfun getBaseUrl(key: String? = baseUrlHashMap.entries.firstOrNull()!!.key): String\n```\n\n### 移除baseurl\n\n```\n/**\n * 根据key移除baseurl\n * [key] 调用[addBaseUrl]时的key\n */\nfun removeBaseUrlByKey(key: String)\n```\n\n### 移除全部baseurl\n\n```\nfun removeAllBaseUrls()\n```\n\n### 获取全部配置的baseurl\n\n```\nfun getAllBaseUrls():ConcurrentSkipListMap\n```\n\n### 添加应用配置\n\n```\n/**\n * 添加应用配置\n * [configKey] 配置的key，后续操作改应用时必填,\n * [appKey] 明道云的appKey\n * [sign] 明道云应用的Sign\n */\nfun addAppConfig(configKey: String, appKey: String, sign: String)\n```\n\n### 删除应用配置\n\n```\nfun removeAppByConfigKey(configKey: String)\n```\n\n### 获取应用配置\n\n```\n/**\n * 获取应用配置,不填写key时会取第一个添加的应用配置,如果没有添加过应用时时可能会抛出异常\n * [appConfigKey] 调用[addApp]时的key\n */\nfun getAppConfig(appConfigKey: String?): AppConfig\n```\n\n### 移除全部应用配置\n\n```\nfun removeAllAppConfigs()\n```\n\n### 获取全部应用配置\n\n```\n/**\n * 获取全部应用配置\n */\nfun getAllAppConfigs():ConcurrentSkipListMap\n```\n\n### 获取列表\n\n```\n/**\n * 获取列表 传入接收单个row的实体，一些公用的参数(明道基础字段)封装在了[io.github.devzwy.mdhelper.data.Row]类，如有需要可以自行继承\n * [baseUrlKey] baseUrl配置的Key，为空时取第一个添加的BaseUrl，如果未添加过BaseUrl时抛出异常\n * [appConfigKey] 应用的配置Key，为空时取第一个添加的应用配置，如果未添加过应用配置则抛出异常\n * [tableId] 操作的表ID，可以为别名或者明道生成的ID\n * [filter] 过滤条件，使用[MdFilterControl.Builder]构造多个\n * [pageSize] 行数\n * [pageIndex] 页码\n * [viewId] 视图ID\n * [sortId] 排序字段ID\n * [isAsc] 是否升序\n * [notGetTotal] 是否不统计总行数以提高性能(默认: false)\n * [useControlId] 是否只返回controlId(默认: false)\n * [clazz] 最终列表的每个实体的接收对象\n * @return 过滤后的数据[RowBaseResult]\n */\nfun \u003cT\u003e getRows(\n    baseUrlKey: String? = null,\n    appConfigKey: String? = null,\n    tableId: String,\n    filter: MdFilterControl,\n    pageSize: Int? = null,\n    pageIndex: Int? = null,\n    viewId: String? = null,\n    sortId: String? = null,\n    isAsc: Boolean? = null,\n    notGetTotal: Boolean? = null,\n    useControlId: Boolean? = null,\n    clazz: Class\u003cT\u003e\n): RowBaseResult\u003cT\u003e\n```\n\n### 删除行记录\n\n```\n/**\n * 删除行记录\n * [baseUrlKey] baseUrl配置的Key，为空时取第一个添加的BaseUrl，如果未添加过BaseUrl时抛出异常\n * [appConfigKey] 应用的配置Key，为空时取第一个添加的应用配置，如果未添加过应用配置则抛出异常\n * [tableId] 操作的表ID，可以为别名或者明道生成的ID\n * [rowId] 删除行的Id\n * [triggerWorkflow] 是否触发工作流(默认: true)\n * @return 删除成功返回true 否则返回false\n */\nfun deleteRow(baseUrlKey: String? = null, appConfigKey: String? = null, tableId: String, rowId: String, triggerWorkflow: Boolean = true): Boolean\n```\n\n### 插入单行记录\n\n```\n/**\n* 插入单行记录\n* [baseUrlKey] baseUrl配置的Key，为空时取第一个添加的BaseUrl，如果未添加过BaseUrl时抛出异常\n* [appConfigKey] 应用的配置Key，为空时取第一个添加的应用配置，如果未添加过应用配置则抛出异常\n* [tableId] 操作的表ID，可以为别名或者明道生成的ID\n* [data] 写入的数据列，使用[MdDataControl.Builder]构造\n* [triggerWorkflow] 是否触发工作流(默认: true)\n* @return 写入成功后回传写入的行ID\n*/\nfun insertRow(baseUrlKey: String? = null, appConfigKey: String? = null, tableId: String, data: MdDataControl, triggerWorkflow: Boolean = true): String\n```\n\n### 插入多行记录\n\n```\n/**\n * 插入多行记录，最大1000行\n * [baseUrlKey] baseUrl配置的Key，为空时取第一个添加的BaseUrl，如果未添加过BaseUrl时抛出异常\n * [appConfigKey] 应用的配置Key，为空时取第一个添加的应用配置，如果未添加过应用配置则抛出异常\n * [tableId] 操作的表ID，可以为别名或者明道生成的ID\n * [dataList] 写入的数据列，使用[MdDataControl.Builder]构造多个\n * [triggerWorkflow] 是否触发工作流(默认: true)\n * @return 写入成功后回传写入成功的总行数\n */\nfun insertRows(baseUrlKey: String? = null, appConfigKey: String? = null, tableId: String, dataList: List\u003cMdDataControl\u003e, triggerWorkflow: Boolean = true): Int\n```\n\n### 编辑行记录\n\n```\n/**\n * 编辑行记录\n * [baseUrlKey] baseUrl配置的Key，为空时取第一个添加的BaseUrl，如果未添加过BaseUrl时抛出异常\n * [appConfigKey] 应用的配置Key，为空时取第一个添加的应用配置，如果未添加过应用配置则抛出异常\n * [tableId] 操作的表ID，可以为别名或者明道生成的ID\n * [rowId] 行记录ID\n * [data] 更新的数据列，使用[MdDataControl.Builder]构造\n * [triggerWorkflow] 是否触发工作流(默认: true)\n * @return 编辑成功返回true，否则返回false\n */\nfun updateRow(baseUrlKey: String? = null, appConfigKey: String? = null, tableId: String, rowId: String, data: MdDataControl, triggerWorkflow: Boolean = true): Boolean\n```\n\n### 获取行记录详情\n\n```\n/**\n * 获取行记录详情\n * [baseUrlKey] baseUrl配置的Key，为空时取第一个添加的BaseUrl，如果未添加过BaseUrl时抛出异常\n * [appConfigKey] 应用的配置Key，为空时取第一个添加的应用配置，如果未添加过应用配置则抛出异常\n * [tableId] 操作的表ID，可以为别名或者明道生成的ID\n * [rowId] 行记录ID\n * @return 行记录数据JSON\n */\nfun \u003cT\u003e getRow(baseUrlKey: String? = null, appConfigKey: String? = null, tableId: String, rowId: String, clazz: Class\u003cT\u003e): T \n```\n\n### 获取表结构信息\n\n```\n/**\n * 获取表结构信息\n * [baseUrlKey] baseUrl配置的Key，为空时取第一个添加的BaseUrl，如果未添加过BaseUrl时抛出异常\n * [appConfigKey] 应用的配置Key，为空时取第一个添加的应用配置，如果未添加过应用配置则抛出异常\n * [tableId] 操作的表ID，可以为别名或者明道生成的ID\n * @return 表结构信息JSOn\n */\nfun getTableInfo(baseUrlKey: String? = null, appConfigKey: String? = null, tableId: String): MdTableInfo\n```\n\n### 获取应用数据\n\n```\n/**\n * 获取应用数据\n * [baseUrlKey] baseUrl配置的Key，为空时取第一个添加的BaseUrl，如果未添加过BaseUrl时抛出异常\n * [appConfigKey] 应用的配置Key，为空时取第一个添加的应用配置，如果未添加过应用配置则抛出异常\n * @return 返回应用信息\n */\nfun getAppInfo(baseUrlKey: String? = null, appConfigKey: String? = null): MdAppInfo\n```\n\n## 一些实体类\n\n```\n\nopen class RowBaseResult\u003cT\u003e {\n    var rows: List\u003cT\u003e = arrayListOf()\n    var total: Int = 0\n}\n\nopen class Row {\n    var rowid: String = \"\"\n    var ctime: String = \"\"\n    var caid: UserInfo? = null\n    var ownerid: UserInfo? = null\n    var utime: String = \"\"\n    var autoid: Int = 0\n    var allowdelete: Boolean = false\n    var controlpermissions: String = \"\"\n}\n\nopen class UserInfo {\n    var accountId: String = \"\"\n    var fullname: String = \"\"\n    var avatar: String = \"\"\n    var status: Int = 0\n}\n\nopen class MdTableInfo {\n    var worksheetId: String = \"\"\n    var name: String = \"\"\n    var views: List\u003cMdView\u003e = arrayListOf()\n    var controls: List\u003cMdControl\u003e = arrayListOf()\n}\n\nopen class MdView{\n    var viewId:String = \"\"\n    var name:String = \"\"\n}\n\nopen class MdControl{\n    var controlId:String = \"\"\n    var controlName:String = \"\"\n    var type:Int = -1\n    var attribute:Int = -1\n    var row:Int = -1\n    var col:Int = -1\n    var userPermission:Int = -1\n    var size:Int = -1\n    var disabled:Boolean = false\n    var checked:Boolean = false\n    var controlPermissions:String = \"\"\n    var alias:String = \"\"\n}\n\nopen class MdAppInfo{\n    var projectId:String = \"\"\n    var appId:String = \"\"\n    var name:String = \"\"\n    var iconUrl:String = \"\"\n    var color:String = \"\"\n    var desc:String = \"\"\n    var sections:List\u003cMdSection\u003e = arrayListOf()\n\n}\n\nopen class MdSection{\n    var sectionId:String = \"\"\n    var name:String = \"\"\n    var items:List\u003cMdSectionItem\u003e = arrayListOf()\n}\n\nopen class MdSectionItem{\n    var id:String = \"\"\n    var name:String = \"\"\n    var type:Int = -1\n    var iconUrl:String = \"\"\n    var status:Int = -1\n    var alias:String = \"\"\n}\n```\n\n## 过滤器\n\n```\nMdFilterControl.Build().xxxx.build()\n```\n\n### 添加过滤字段\n\n```\n/**\n * 添加过滤字段\n * [controlId] 字段\n * [value] 值\n * [filterType] 过滤类型 使用[FilterTypeEnum]构造\n * [dataType] 控件类型 使用[DataTypeEnum]构造，默认[DataTypeEnum.TEXT_SINGLE_LINE]文本类型\n * [spliceType] 拼接方式 使用[SpliceTypeEnum]构造，默认[SpliceTypeEnum.AND]\n */\nfun addFilter(controlId: String, value: String, filterType: FilterTypeEnum, dataType: DataTypeEnum = DataTypeEnum.TEXT_SINGLE_LINE, spliceType: SpliceTypeEnum = SpliceTypeEnum.AND): Builder\n```\n\n## 数据添加器\n\n```\nMdDataControl.Build().xxxx.build()\n```\n\n### 添加普通的字段\n\n```\n/**\n * 添加普通的字段\n * [controlId] 键\n * [data] 值\n */\nfun addControl(controlId: String, data: String?): Builder\n```\n\n### 添加附件字段\n\n```\n/**\n * 添加附件字段\n * [controlId] 键\n * [dataList] 值,可以为多个url或多个base64，例如：[\"url1\",\"url2\"...]，或[\"base641\",\"base642\"...]\n * [fileNames] 当[dataList]的值为Base64时这里的文件名称列表长度必须和[dataList]的长度一致，填写文件的后缀，例如[\"1.jpg\",\"2.pdf\"...]\n * [dataType] 值的类型 使用[MuliDataType]构造，默认[MuliDataType.URL]\n * [editType] 当前字段的编辑类型，使用[MuliEditType]构造，默认[MuliEditType.REPLACE]\n */\nfun addMulti(\n    controlId: String, dataList: List\u003cString\u003e?, fileNames: List\u003cString\u003e? = null, dataType: MuliDataType = MuliDataType.URL,\n    editType: MuliEditType = MuliEditType.REPLACE\n): Builder\n```\n\n### 添加选项卡字段\n\n```\n/**\n * 添加选项卡字段\n * [controlId] 键\n * [data] 值\n * [dataType] 使用[OptionDataType]构造，[OptionDataType.NOT_ADD]不增加选项，[OptionDataType.ADD]允许增加选项（默认为[OptionDataType.NOT_ADD]，为[OptionDataType.NOT_ADD]时匹配不到已有选项时传入空，为[OptionDataType.ADD]时，匹配不到时会创建新选项并写入）\n */\nfun addOption(controlId: String, data: String?, dataType: OptionDataType = OptionDataType.NOT_ADD): Builder\n```\n\n## 一些常量\n\n### 数据类型\n\n```\n/**\n * 数据类型\n */\nenum class DataTypeEnum(val value: Int, val description: String, val controlType: String) {\n    TEXT_SINGLE_LINE(2, \"文本\", \"单行、多行\"),\n    PHONE_MOBILE(3, \"电话\", \"手机\"), PHONE_LANDLINE(\n        4, \"电话\", \"座机\"\n    ),\n    EMAIL(5, \"邮箱\", \"\"),\n    NUMERIC(6, \"数值\", \"\"), ID_CARD(7, \"证件\", \"\"),\n    AMOUNT(8, \"金额\", \"\"),\n    RADIO_TILE(\n        9, \"单选\", \"平铺\"\n    ),\n    MULTI_SELECT(10, \"多选\", \"\"), RADIO_DROPDOWN(11, \"单选\", \"下拉\"), ATTACHMENT(\n        14, \"附件\", \"\"\n    ),\n    DATE_YEAR_MONTH_DAY(15, \"日期\", \"年-月-日\"), DATE_YEAR_MONTH_DAY_HOUR_MINUTE(\n        16, \"日期\", \"年-月-日 时:分\"\n    ),\n    REGION_PROVINCE(19, \"地区\", \"省\"), FREE_CONNECTION(21, \"自由连接\", \"\"), SEGMENT(\n        22, \"分段\", \"\"\n    ),\n    REGION_PROVINCE_CITY(23, \"地区\", \"省/市\"), REGION_PROVINCE_CITY_COUNTY(\n        24, \"地区\", \"省/市/县\"\n    ),\n    AMOUNT_UPPERCASE(25, \"大写金额\", \"\"), MEMBER(26, \"成员\", \"\"), DEPARTMENT(27, \"部门\", \"\"), LEVEL(\n        28, \"等级\", \"\"\n    ),\n    RELATED_RECORD(29, \"关联记录\", \"\"), OTHER_TABLE_FIELD(30, \"他表字段\", \"\"), FORMULA_NUMERIC(\n        31, \"公式\", \"数字\"\n    ),\n    TEXT_COMBINATION(32, \"文本组合\", \"\"), AUTO_NUMBER(33, \"自动编号\", \"\"), SUB_TABLE(\n        34, \"子表\", \"\"\n    ),\n    CASCADE_SELECT(35, \"级联选择\", \"\"), CHECKBOX(36, \"检查框\", \"\"), SUMMARY(37, \"汇总\", \"\"), FORMULA_DATE(\n        38, \"公式\", \"日期\"\n    ),\n    LOCATION(40, \"定位\", \"\"), RICH_TEXT(41, \"富文本\", \"\"), SIGNATURE(42, \"签名\", \"\"), EMBEDDED(\n        45, \"嵌入\", \"\"\n    ),\n    NOTE(10010, \"备注\", \"\");\n\n    companion object {\n        fun fromCode(value: Int) = values().find { it.value == value }!!\n    }\n}\n```\n\n### 日期过滤类型\n\n```\n/**\n * 日期过滤类型\n */\nenum class DateRangeEnum(val value: Int, val enumChar: String, val description: String) {\n    DEFAULT(0, \"Default\", \"\"), TODAY(1, \"Today\", \"今天\"), YESTERDAY(2, \"Yesterday\", \"昨天\"), TOMORROW(\n        3, \"Tomorrow\", \"明天\"\n    ),\n    THIS_WEEK(4, \"ThisWeek\", \"本周\"), LAST_WEEK(5, \"LastWeek\", \"上周\"), NEXT_WEEK(\n        6, \"NextWeek\", \"下周\"\n    ),\n    THIS_MONTH(7, \"ThisMonth\", \"本月\"), LAST_MONTH(8, \"LastMonth\", \"上月\"), NEXT_MONTH(\n        9, \"NextMonth\", \"下月\"\n    ),\n    LAST_ENUM(10, \"LastEnum\", \"上..\"), NEXT_ENUM(11, \"NextEnum\", \"下..\"), THIS_QUARTER(\n        12, \"ThisQuarter\", \"本季度\"\n    ),\n    LAST_QUARTER(13, \"LastQuarter\", \"上季度\"), NEXT_QUARTER(14, \"NextQuarter\", \"下季度\"), THIS_YEAR(\n        15, \"ThisYear\", \"本年\"\n    ),\n    LAST_YEAR(16, \"LastYear\", \"去年\"), NEXT_YEAR(17, \"NextYear\", \"明年\"), CUSTOMIZE(\n        18, \"Customize\", \"自定义\"\n    ),\n    LAST_7_DAY(21, \"Last7Day\", \"过去7天\"), LAST_14_DAY(22, \"Last14Day\", \"过去14天\"), LAST_30_DAY(\n        23, \"Last30Day\", \"过去30天\"\n    ),\n    NEXT_7_DAY(31, \"Next7Day\", \"未来7天\"), NEXT_14_DAY(32, \"Next14Day\", \"未来14天\"), NEXT_33_DAY(\n        33, \"Next33Day\", \"未来33天\"\n    );\n\n    companion object {\n        fun fromCode(value: Int) = values().find { it.value == value }!!\n    }\n}\n```\n\n### 回传状态码\n\n```\n/**\n * 回传状态码\n */\nenum class ErrorCodeEnum(val code: Int, val description: String) {\n    FAILURE(0, \"失败\"), SUCCESS(1, \"成功\"), MISSING_PARAMETER(10001, \"缺少参数\"), INVALID_PARAMETER_VALUE(\n        10002, \"参数值错误\"\n    ),\n    NO_PERMISSION(10005, \"数据操作无权限\"), DATA_NOT_EXIST(10007, \"数据不存在\"), MISSING_TOKEN(\n        10101, \"请求令牌不存在\"\n    ),\n    INVALID_SIGNATURE(10102, \"签名不合法\"), DATA_OPERATION_EXCEPTION(99999, \"数据操作异常\");\n\n    companion object {\n        fun fromCode(code: Int): ErrorCodeEnum {\n            return values().find { it.code == code }!!\n        }\n    }\n}\n```\n\n### 筛选方式\n\n```\n/**\n * 筛选方式\n */\nenum class FilterTypeEnum(val value: Int, val enumChar: String, val description: String) {\n    DEFAULT(0, \"Default\", \"\"), LIKE(1, \"Like\", \"包含\"), EQ(2, \"Eq\", \"是（等于）\"), START(3, \"Start\", \"开头为\"), END(\n        4, \"End\", \"结尾为\"\n    ),\n    NCONTAIN(5, \"NContain\", \"不包含\"), NE(6, \"Ne\", \"不是（不等于）\"), ISNULL(7, \"IsNull\", \"为空\"), HASVALUE(\n        8, \"HasValue\", \"不为空\"\n    ),\n    BETWEEN(11, \"Between\", \"在范围内\"), NBETWEEN(12, \"NBetween\", \"不在范围内\"), GT(13, \"Gt\", \"\u003e\"), GTE(\n        14, \"Gte\", \"\u003e=\"\n    ),\n    LT(15, \"Lt\", \"\u003c\"), LTE(16, \"Lte\", \"\u003c=\"), DATE_ENUM(17, \"DateEnum\", \"日期是\"), NDATE_ENUM(\n        18, \"NDateEnum\", \"日期不是\"\n    ),\n    MYSELF(21, \"MySelf\", \"我拥有的\"), UNREAD(22, \"UnRead\", \"未读\"), SUB(23, \"Sub\", \"下属\"), RCEQ(\n        24, \"RCEq\", \"关联控件是\"\n    ),\n    RCNE(25, \"RCNe\", \"关联控件不是\"), ARREQ(26, \"ArrEq\", \"数组等于\"), ARRNE(\n        27, \"ArrNe\", \"数组不等于\"\n    ),\n    DATE_BETWEEN(31, \"DateBetween\", \"在范围内\"), DATE_NBETWEEN(32, \"DateNBetween\", \"不在范围内\"), DATE_GT(\n        33, \"DateGt\", \"\u003e\"\n    ),\n    DATE_GTE(34, \"DateGte\", \"\u003e=\"), DATE_LT(35, \"DateLt\", \"\u003c\"), DATE_LTE(36, \"DateLte\", \"\u003c=\"), NORMAL_USER(\n        41, \"NormalUser\", \"常规用户\"\n    ),\n    PORTAL_USER(42, \"PortalUser\", \"外部门户用户封装\");\n\n    companion object {\n        fun fromCode(value: Int) = values().find { it.value == value }!!\n    }\n}\n\n```\n\n### 附件的类型\n\n```\n/**\n * 附件的类型\n */\nenum class MuliDataType private constructor(val type:Int) {\n    URL(1),\n    BASE64(2)\n}\n```\n\n### 附件的操作类型\n\n```\n/**\n * 附件的操作类型\n */\nenum class MuliEditType private constructor(val type:Int) {\n    REPLACE(0),\n    ADD(1)\n}\n```\n\n### 选项卡的操作类型\n\n```\n/**\n * 选项卡的操作类型\n */\nenum class OptionDataType private constructor(val type:Int) {\n    NOT_ADD(1),\n    ADD(2)\n}\n```\n\n### 拼接方式\n\n```\n/**\n * 拼接方式\n */\nenum class SpliceTypeEnum(val value: Int, val description: String) {\n    AND(1, \"AND\"), OR(2, \"OR\");\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevzwy%2Fmdhelper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevzwy%2Fmdhelper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevzwy%2Fmdhelper/lists"}