npm package: @sinoform/helper-condition-api
Description: 构建 API 查询条件的辅助模块。
Latest version: 1.18.11

# @sinoform/helper-condition-api

构建 API 查询条件的辅助模块。

支持两种风格构建 API 查询条件，即：

- 流式方法
- sql 模板

根据个人喜好，两种风格二选一即可。

## 简单示例

查询姓名包含 `张` 的查询条件。

流式方法：

```typescript
import { build$ } from '@sinoform/helper-condition-api';

const currentUser = getCurrentUser();
const context = { formDesignId: '表单id', currentUser };
const $ = build$(context);

// 创建查询条件
const condition = $('userName').contain('张');
// 或者
condition = $('userName').like('%张%');
```

sql 模板风格：

```typescript
import { sql } from '@sinoform/helper-condition-api';
const condition = sql`userName like '%张%'`;
```

## 组合多个查询条件

可以使用 `and`、`or`、`not` 逻辑运算符组合多个查询条件。

### 示例 1

```typescript
import { build$ } from '@sinoform/helper-condition-api';

const currentUser = getCurrentUser();
const context = { formDesignId: '表单id', currentUser };
const $ = build$(context);

const useNameCondition = $('userName').contain('张');
const ageCondition = $('age').gt(18);
const condition = $.and(userNameCondition, ageCondition);
```

```typescript
import { sql } from '@sinoform/helper-condition-api';

const condition = sql`
  USER_NAME like '%张%'
  AND age > 18
`;
```

### 示例 2

```typescript
import { $ } from '@sinoform/helper-condition-api';

const condition = $.or(
  $('userName').contain('张'),
  $('userName').contain('李'),
);
```

```typescript
import { sql } from '@sinoform/helper-condition-api';

const condition = sql`
  USER_NAME like '%张%'
  OR USER_NAME like '%李%'
`;
```

### 示例 3

```typescript
import { $ } from '@sinoform/helper-condition-api';

const condition = $.and(
  $.or($('userName').contain('张'), $('userName').contain('李')),
  $('age').gt(18),
);
```

```typescript
import { sql } from '@sinoform/helper-condition-api';

const condition = sql`
  (
    USER_NAME like '%张%'
    OR USER_NAME like '%李%'
  ) AND (
    age > 18
  )
`;
```

## 支持的操作符

| 操作符                        | 说明                                                                  |
| ----------------------------- | --------------------------------------------------------------------- |
| [equal](#equal)               | 相等比较操作符                                                        |
| [notEqual](#notEqual)         | 不相等比较操作符                                                      |
| [contain](#contain)           | 文本包含操作符，相当于 `like '%文本%'`                                |
| [notContain](#notContain)     | 文本不包含操作符                                                      |
| [isNull](#isNull)             | 空判定操作符                                                          |
| [notNull](#notNull)           | 非空判定操作符                                                        |
| [lt](#lt)                     | 小于操作符                                                            |
| [gt](#gt)                     | 大于操作符                                                            |
| [lte](#lte)                   | 小于等于操作符                                                        |
| [gte](#gte)                   | 大于等于操作符                                                        |
| [in](#in)                     | 包含操作符                                                            |
| [is](#is)                     | `is null`场景中使用的操作符                                           |
| [isNot](#isNot)               | `is not null` 场景使用的操作符                                        |
| [like](#like)                 | 文本包含操作符                                                        |
| [notLike](#notLike)           | 文本不包含操作符                                                      |
| [range](#range)               | 区间操作符，相当于 `between x and y`                                  |
| [and](#and)                   | 并且逻辑操作符，使用 `and` 组合的多个查询条件是必须都要满足的         |
| [or](#or)                     | 或者逻辑操作符，使用 `or` 组合的多个查询条件只需要满足一个即可        |
| [not](#not)                   | 非逻辑操作符，使用 `not` 包裹的查询条件表示查询不满足此查询条件的数据 |
| [querySelfAll](#querySelfAll) | 仅查询出自己可见的所有数据                                            |
| [queryDeptAll](#queryDeptAll) | 查询出自己和部门可见的所有数据                                        |

### equal

> 相等性比较

```typescript
$('field_1').equal('10');
```

```typescript
sql`field_1 = '10'`;
```

### notEqual

> 不相等比较

```typescript
$('field_1').notEqual('10');
```

```typescript
sql`field_1 <> '10'`;
```

### contain

> 文本包含关系

```typescript
$('field_1').contain('张');
```

```typescript
sql`field_1 like '%张%'`;
```

### notContain

> 字符串不包含的关系

```typescript
$('field_1').notContain('张');
```

```typescript
sql`field_1 not like '%张%'`;
```

### isNull

> 判断是否为空

```typescript
$('field_1').isNull();
```

```typescript
sql`field_1 is null`;
```

### notNull

> 判断是否非空

```typescript
$('field_1').notNull();
```

```typescript
field_1 is not null
```

### isEmpty

> 判断是否为空

```typescript
$('field_1').isEmpty();
```

```typescript
sql`field_1 is null or field_1 = ''`;
```

### notEmpty/isNotEmpty

> 判断是否非空

```typescript
$('field_1').isNotEmpty();
```

```typescript
sql`field_1 is not null and field_1 <> ''`;
```

### lt

> 小于

```typescript
$('field_1').lt(10);
```

```typescript
sql`field_1 < 10`;
```

### gt

> 大于

```typescript
$('field_1').gt(10);
```

```typescript
sql`field_1 > 10`;
```

### lte

> 小于等于

```typescript
$('field_1').lte(10);
```

```typescript
sql`field_1 <= 10`;
```

### gte

> 大于等于

```typescript
$('field_1').gte(10);
```

```typescript
sql`field_1 >= 10`;
```

### in

> 数组包含关系

```typescript
$('field_1').in('类型1', '类型2', '类型3');
```

```typescript
sql`field_1 in ('类型1', '类型2', '类型3')`;
```

### is

```typescript
$('field_1').is(null);
```

```typescript
sql`field_1 is null`;
```

### isNot

```typescript
$('field_1').isNot(null);
```

```typescript
sql`field_1 is not null`;
```

### like

> 文本包含关系。

```typescript
$('field_1').like('张%');
```

```typescript
sql`field_1 like '张%'`;
```

### notLike

> 文本不包含关系

```typescript
$('field_1').notLike('张%');
```

```typescript
sql`
  field_1 not like '张%'
`;
```

### range

> between ... and ...

```typescript
$('field_1').range(1, 3);
```

```typescript
sql`
  field_1 between 1 and 3
`;
```

### and

> 逻辑与的关系

```typescript
$.and($('field_1').gt(10), $('field_1').lt(100), $('user_name').equal('张三'));
```

```typescript
sql`
  field_1 > 10 and field_1 < 100 and user_name = '张三'
`;
```

### or

> 逻辑或的关系

```typescript
$.or($('field_1').gt(10), $('field_1').lt(100), $('user_name').equal('张三'));
```

```typescript
sql`
  field_1 > 10 or field_1 < 100 or user_name = '张三'
`;
```

### not

> 逻辑非的关系

```typescript
$.not($('field_1').equal(10));
// 或者

$('field_1').not.equal(10);
```

```typescript
sql`
  !(field_1 = 10)
`;
```

### likeLeft

> 文本左包含关系

```typescript
$('field_1').likeLeft('张');
```

```typescript
sql`field_1 like '张%'`;
```

### querySelfAll

> 查询仅自己可见的数据

```typescript
import { build$ } from '@sinoform/helper-condition-api';

const currentUser = getCurrentUser();
const context = { formDesignId: '表单id', currentUser };
const $ = build$(context);

const condition = $.querySelfAll();
```

相当于：

```typescript
import { $ } from '@sinoform/helper-condition-api';

const condition = $.and(
  $('PERM.FORMDESIGN_ID').equal(formDesignId),
  $('PERM.SUBJECT_ID').equal(currentUserId),
);
```

### queryDeptAll

> 查询出自己和部门可见的数据

```typescript
import { build$ } from '@sinoform/helper-condition-api';

const currentUser = getCurrentUser();
const context = { formDesignId: '表单id', currentUser };
const $ = build$(context);

const condition = $.queryDeptAll();
```

相当于：

```typescript
import { $ } from '@sinoform/helper-condition-api';

$.or(
  $.and(
    $('PERM.FORMDESIGN_ID').equal(formDesignId),
    $('PERM.SUBJECT_ID').equal(currentUserId),
  ),
  $.and(
    $('PERM.FORMDESIGN_ID').equal(formDesignId),
    $('PERM.SUBJECT_ID').equal(deptId),
    $('PERM.SUBJECT_TYPE').equal('superDept'),
  ),
);
```