# 0.32.0

### 1. node 和 pnpm 版本要求升级为 node@24.14.1 和 pnpm@10.33.0

### 2. doKgWorkStation() 方法变更为 useKgWorkStation() 方法

```
// 旧
// --------------------------------------------------
import { doKgWorkStation } from '@kengic/vue';

const kgWorkStation = doKgWorkStation();

// 新
// --------------------------------------------------
import { useKgWorkStation } from '@kengic/vue';

const kgWorkStation = useKgWorkStation();
```

### 3. kgWorkStation.workStation 属性变更为 kgWorkStation.currentWorkStation 属性

### 4. kgWorkStation.workStationArea 属性变更为 kgWorkStation.currentWorkArea 属性

### 5. 部分组件提取到组件库, 引入路径发生变更

```
// 旧
// --------------------------------------------------
import { defHttp } from '/@/utils/http/axios';

// 新
// --------------------------------------------------
import { defHttp } from '@kengic/vue';
```

```
// 旧
// --------------------------------------------------
import { useMessage } from '/@/hooks/web/useMessage';

// 新
// --------------------------------------------------
import { useMessage } from '@kengic/vue';
```

```
// 旧
// --------------------------------------------------
import { uploadUrl } from '/@/api/common/api';
import { uploadFile } from '/@/api/common/api';
import { getUserList } from '/@/api/common/api';
import { getRoleList } from '/@/api/common/api';
import { loadDictItem } from '/@/api/common/api';
import { loadTreeData } from '/@/api/common/api';
import { getDictItems } from '/@/api/common/api';
import { queryTreeList } from '/@/api/common/api';
import { getPositionList } from '/@/api/common/api';
import { queryDepartTreeSync } from '/@/api/common/api';
import { useErrorLogStore } from '/@/store/modules/errorLog';
import { useErrorLogStoreWithOut } from '/@/store/modules/errorLog';
import { ModalOptionsPartial } from '/@/hooks/web/useMessage';
import { AxiosCanceler } from '/@/utils/http/axios/axiosCancel';

// 新
// --------------------------------------------------
import { uploadUrl } from '@kengic/vue';
import { uploadFile } from '@kengic/vue';
import { getUserList } from '@kengic/vue';
import { getRoleList } from '@kengic/vue';
import { loadDictItem } from '@kengic/vue';
import { loadTreeData } from '@kengic/vue';
import { getDictItems } from '@kengic/vue';
import { queryTreeList } from '@kengic/vue';
import { getPositionList } from '@kengic/vue';
import { queryDepartTreeSync } from '@kengic/vue';
import { useErrorLogStore } from '@kengic/vue';
import { useErrorLogStoreWithOut } from '@kengic/vue';
import { ModalOptionsPartial } from '@kengic/vue';
import { AxiosCanceler } from '@kengic/vue';
```

# 0.31.0

### 1. 升级 `vxe-table@4.17.27`, `vxe-pc-ui@4.10.49`, 部分组件引入路径发生变更,

```
// 旧
// --------------------------------------------------
import { Input as VXEInput } from 'vxe-table';

// 新
// --------------------------------------------------
import { Input as VXEInput } from 'vxe-pc-ui';
```

```
// 旧
// --------------------------------------------------
import { VxeInputEvents, VxePulldownInstance } from 'vxe-table';

// 新
// --------------------------------------------------
import { VxeInputEvents, VxePulldownInstance } from 'vxe-pc-ui';
```

### 2. kgVar.kgSubmit.onBeforeRequest() 事件回调函数参数变更,

```typescript
// 旧
// --------------------------------------------------
kgVar.kgSubmit.onBeforeRequest(async ({ data, params }) => {
    data.value.foo = 'foo';
    params.value.foo = 'foo';
});

// 新
// --------------------------------------------------
kgVar.kgSubmit.onBeforeRequest(async ({ requestConfig }) => {
    requestConfig.data!.foo = 'foo';
    requestConfig.params!.foo = 'foo';
});
```

# 0.30.0

### 1. 属性名称变更

```
// 旧
// --------------------------------------------------
kgVar.kgButton.currentButton.value

// 新
// --------------------------------------------------
kgVar.kgButton.currentButton
```

```
// 旧
// --------------------------------------------------
kgVar.kgButton.isCurrentButtonRequesting.value

// 新
// --------------------------------------------------
kgVar.kgButton.isCurrentButtonRequesting
```

```
// 旧
// --------------------------------------------------
kgVar.kgTable.datas.value

// 新
// --------------------------------------------------
kgVar.kgTable.dataList
```

```
// 旧
// --------------------------------------------------
kgVar.kgTable.store.setDatas({ frmId: kgVar.formID, datas: [] })

// 新
// --------------------------------------------------
kgVar.kgTable.setDatas({ datas: [] })
```

```
// 旧
// --------------------------------------------------
kgVar.kgTable.store.getDatas(formID)

// 新
// --------------------------------------------------
kgVar.kgTable.dataList
```

```
// 旧
// --------------------------------------------------
kgVar.kgTable.store.clearDatas(formID)

// 新
// --------------------------------------------------
kgVar.kgTable.clearDatas()
```

```
// 旧
// --------------------------------------------------
kgVar.kgTable.store.setSelectedRows(formID, []);

// 新
// --------------------------------------------------
kgVar.kgTable.setSelectedRows({ selectedRows: [] });
```

```
// 旧
// --------------------------------------------------
kgVar.kgTable.store.setRowSelect(formID, row, true);

// 新
// --------------------------------------------------
kgVar.kgTable.setRowSelect(row, true);
```

```
// 旧
// --------------------------------------------------
kgVar.kgTable.isRequested.value

// 新
// --------------------------------------------------
kgVar.kgTable.isRequested
```

# 0.29.0

### 0. 对应后端框架版本 1.0.0-alpha17

### 1. 后端查询接口支持了不再需要添加响应头 `HEADER_KG_IS_DYNAMIC_QUERY`

```java
// 旧
// --------------------------------------------------
response.addHeader(VarConstant.HEADER_KG_IS_DYNAMIC_QUERY, Boolean.TRUE.toString());

// 新
// --------------------------------------------------
```

# 0.28.0

### 1. 事件回调函数参数名称变更

```typescript
// 旧
// --------------------------------------------------
kgVar.kgForm.onLookupBeforeOk(async ({ var_nam }) => {});

// 旧
// --------------------------------------------------
kgVar.kgForm.onLookupBeforeOk(async ({ varNam }) => {});

// 新
// --------------------------------------------------
kgVar.kgForm.onLookupBeforeOk(async ({ varName }) => {});
```

```typescript
// 旧
// --------------------------------------------------
kgVar.kgForm.onLookupOk(async ({ var_nam }) => {});

// 旧
// --------------------------------------------------
kgVar.kgForm.onLookupOk(async ({ varNam }) => {});

// 新
// --------------------------------------------------
kgVar.kgForm.onLookupOk(async ({ varName }) => {});
```

```typescript
// 旧
// --------------------------------------------------
kgVar.kgForm.onSelectChange(async ({ var_nam }) => {});

// 新
// --------------------------------------------------
kgVar.kgForm.onSelectChange(async ({ varName }) => {});
```

### 2. 部分方法和对象提取到组件库

```typescript
// 旧
// --------------------------------------------------
import { getValueType } from '/@/utils';
import { propTypes } from '/@/utils/propTypes';
import { useGlobSetting } from '/@/hooks/setting';
import { useGo } from '/@/hooks/web/usePage';
import { isEmpty } from '/@/utils/is';

// 新
// --------------------------------------------------
import { getValueType } from '@kengic/vue';
import { propTypes } from '@kengic/vue';
import { useGlobSetting } from '@kengic/vue';
import { useGo } from '@kengic/vue';
import { isEmpty } from '@kengic/vue';
```

### 3. 消息提示由 message 改成 notification

```typescript
// 旧
// --------------------------------------------------
import { useMessage } from '/@/hooks/web/useMessage';

const { createMessage } = useMessage();

createMessage.success('消息');
createMessage.error('消息');
createMessage.warn('消息');
createMessage.warning('消息');

// 新
// --------------------------------------------------
import { notification } from 'ant-design-vue';

notification.success({ message: '消息' });
notification.error({ message: '消息' });
notification.warn({ message: '消息' });
```

# 0.27.0

### 1. DDA 的所有表都添加了一个 props 列, 用于存放额外的配置属性

### 2. 移除 var_profile_detail 中的多个列

-   移除 `var_profile_detail.vis_flg` 列, 由 `var_submit_detail.visible_flag` 代替,
-   移除 `var_profile_detail.ena_flg` 列, 由 `var_submit_detail.enable_flag` 代替,
-   移除 `var_profile_detail.rqr_flg` 列, 由 `var_submit_detail.required_flag` 代替,
-   移除 `var_profile_detail.dft_val` 列, 由 `var_submit_detail.default_value` 代替,
-   移除 `var_profile_detail.width` 列, 由 `var_submit_detail.width` 代替,
-   移除 `var_profile_detail.placeholder` 列, 由 `var_submit_detail.placeholder` 代替,

### 3. kgVar.onRetrieve() 事件回调函数返回类型变更

```typescript
// 旧
// --------------------------------------------------
kgVar.onRetrieve(() => {});

// 新
// --------------------------------------------------
kgVar.onRetrieve(async ({}) => {
    return false;
});
```

# 0.26.0 <2024-08-01>

### 1. useLocale, useLocaleStore, getAppEnvConfig 提取到组件库

```typescript
// 旧
// --------------------------------------------------
import { useLocale } from '/@/locales/useLocale';

// 新
// --------------------------------------------------
import { useLocale } from '@kengic/vue';
```

```typescript
// 旧
// --------------------------------------------------
import { useLocaleStore } from '/@/store/modules/locale';

// 新
// --------------------------------------------------
import { useLocaleStore } from '@kengic/vue';
```

```typescript
// 旧
// --------------------------------------------------
import { getAppEnvConfig } from '/@/utils/env';

// 新
// --------------------------------------------------
import { getAppEnvConfig } from '@kengic/vue';
```

# 0.25.0

### 1. KgVarProps.KgBackgroundGray 重命名为 KgVarProps.kgBackgroundGray

# 0.24.0

### 1. 「DDA 管理页面」和「DDA 模板页面」提取到组件库

# 0.23.0

### 1. 修改组件 API 的获取方式, 由方法改为属性,

```typescript
// 旧
// --------------------------------------------------
const kgVar = useKgVar();

kgVar.xxx;
kgVar.kgButton().xxx;
kgVar.kgForm().xxx;
kgVar.kgSearch().xxx;
kgVar.kgSubmit().xxx;
kgVar.kgTable().xxx;

// 新
// --------------------------------------------------
const kgVar = useKgVar();

kgVar.xxx;
kgVar.kgButton.xxx;
kgVar.kgForm.xxx;
kgVar.kgSearch.xxx;
kgVar.kgSubmit.xxx;
kgVar.kgTable.xxx;
```

# 0.22.0

### 1. 重命名类

| 旧                     | 新                   |
| :--------------------- | :------------------- |
| VarContext             | VarVariable          |
| VarVariableConfig      | VarConfigControl     |
| VarVariableCatalog     | VarConfigDescription |
| VarVariableInput       | VarConfigInput       |
| VarVariableLookup      | VarConfigLookup      |
| VarVariablePossibility | VarConfigPossibility |
| VarSubmitField         | VarSubmitDetail      |

### 2. 重命名表

| 旧          | 新                     |
| :---------- | :--------------------- |
| var_ctx     | var_variable           |
| var_btn     | var_button             |
| var_cfg     | var_config_control     |
| var_cat     | var_config_description |
| var_var_ipt | var_config_input       |
| var_lkp     | var_config_lookup      |
| var_psb     | var_config_possibility |
| var_grd_cfg | var_grid_config        |
| var_grd_dtl | var_grid_detail        |
| var_grd_mst | var_grid_master        |
| var_prf_cfg | var_profile_config     |
| var_prf_dtl | var_profile_detail     |
| var_prf_mst | var_profile_master     |
| var_sbt_cfg | var_submit_config      |
| var_sbt_fld | var_submit_detail      |

### 3. `KgSearch`,`KgButton`,`KgTable`,`KgSubmit` 等组件的 API 不用再单独获取, 可以直接从 `kgVar` 中获取,

```typescript
// 旧
// --------------------------------------------------
const kgVar = useKgVar();
const kgButton = usekgButton();
const kgForm = usekgForm();
const kgSearch = useKgSearch();
const kgSubmit = useKgSubmit();
const kgTable = useKgTable();

kgVar.xxx;
kgButton.xxx;
kgForm.xxx;
kgSearch.xxx;
kgSubmit.xxx;
kgTable.xxx;

// 新
// --------------------------------------------------
const kgVar = useKgVar();

kgVar.xxx;
kgVar.kgButton().xxx;
kgVar.kgForm().xxx;
kgVar.kgSearch().xxx;
kgVar.kgSubmit().xxx;
kgVar.kgTable().xxx;
```

### 4. `kgVar` 中的部分方法移到对应的组件的 API 中并且重命名:

#### 4.1. kgButton

`kgVar.setIsCreating(true)` 变更为 `kgVar.kgButton.setCurrentButton({ type: KG_BUTTON_TYPE.CREATE });`

`kgVar.setIsUpdating(true)` 变更为 `kgVar.kgButton.setCurrentButton({ type: KG_BUTTON_TYPE.UPDATE });`

`kgVar.setIsCopying(true)` 变更为 `kgVar.kgButton.setCurrentButton({ type: KG_BUTTON_TYPE.COPY });`

`kgVar.setIsDeleting(true)` 变更为 `kgVar.kgButton.setCurrentButton({ type: KG_BUTTON_TYPE.DELETE });`

`kgVar.setIsCreating(false)` 变更为 `kgVar.kgButton.setCurrentButton(null);`

`kgVar.setIsUpdating(false)` 变更为 `kgVar.kgButton.setCurrentButton(null);`

`kgVar.setIsCopying(false)` 变更为 `kgVar.kgButton.setCurrentButton(null);`

`kgVar.setIsDeleting(false)` 变更为 `kgVar.kgButton.setCurrentButton(null);`

#### 4.2. kgSubmit

`kgVar.patchVarSubmitField()` 变更为 `kgVar.kgSubmit.patchVarSubmitDetail()`

`kgButton.onDeleteOk()` 变更为 `kgVar.kgSubmit.onOk()`

### 5. kgVar.kgButton.onClick() 事件回调函数参数类型变更,

```typescript
// 旧
// --------------------------------------------------
kgVar.kgButton.onClick(async (button) => {});

// 新
// --------------------------------------------------
kgVar.kgButton.onClick(async ({ button }) => {});
```

# 0.21.0

### 1. 查询条件中的日期范围, 对右侧的日期做了处理, 如果格式是 `YYYY-MM-DD` 则加上一天, 如果格式是 `YYYY-MM-DD HH:mm:ss` 则加上一秒,

# 0.20.0

### 1. `kg-search-header-teleport` 重命名为 `kg-layout-header-teleport`,

### 2. 添加配置 `IKgOption.KgLayoutTab.isTeleportToHeader` 并且默认为 `true`, 即多标签页默认会放到页面头部,

# 0.19.0

### 1. 支持新版本的 DDA 的创建, 需要更新数据 `20240401000000000.sql`

# 0.18.0

### 1. `kgTable.setDatas()` 方法参数类型变更,

```typescript
// 旧
// --------------------------------------------------
kgTable.setDatas(frmId, datas);

// 新
// --------------------------------------------------
kgTable.setDatas({ frmId: frmId, datas: datas });
```

### 2. 移除 `kgTable.onBeforeSetDatas()` 事件回调函数参数中的 `setDatas` 方法, 改为直接调用 `kgTable.setDatas()` 方法,

```typescript
// 旧
// --------------------------------------------------
kgTable.onBeforeSetDatas(async ({ datas, setDatas }) => {
    setDatas([]);
});

// 新
// --------------------------------------------------
kgTable.onBeforeSetDatas(async ({ datas }) => {
    kgTable.setDatas({
        frmId: '',
        datas: [],
    });
});
```

### 3. 移除 `kgTable.onAfterSearch()` 事件回调函数参数中的 `setDatas` 方法, 改为直接调用 `kgTable.setDatas()` 方法,

```typescript
// 旧
// --------------------------------------------------
kgTable.onAfterSearch(async ({ datas, setDatas }) => {
    setDatas([]);
});

// 新
// --------------------------------------------------
kgTable.onAfterSearch(async ({ datas }) => {
    kgTable.setDatas({
        frmId: '',
        datas: [],
    });
});
```

# 0.17.0

### 1. `kgForm.onSelectChange()` 事件回调函数参数类型变更,

```typescript
// 旧
// --------------------------------------------------
kgForm.onSelectChange(async ({ rows }) => {
    // rows 是单个对象
    const item = rows as any;
});

// 新
// --------------------------------------------------
kgForm.onSelectChange(async ({ rows }) => {
    // rows 是数组
    const item = rows?.[0] as any;
});
```
