@bit-sun/business-component 4.2.0-alpha.5 → 4.2.0-alpha.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Business/AddSelectBusiness/index.d.ts +3 -4
- package/dist/components/Business/BsLayouts/Components/AllFunc/drawContent.d.ts +1 -2
- package/dist/components/Business/BsLayouts/Components/ChooseStore/index.d.ts +1 -2
- package/dist/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/index.d.ts +1 -1
- package/dist/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/leftTree.d.ts +1 -1
- package/dist/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/rightTree.d.ts +2 -2
- package/dist/components/Business/BsLayouts/Components/CustomerMenu/globalMenu/DrawContent.d.ts +1 -2
- package/dist/components/Business/BsLayouts/Components/CustomerMenu/globalMenu/customMenuHeader.d.ts +1 -2
- package/dist/components/Business/BsLayouts/Components/CustomerMenu/index.d.ts +1 -1
- package/dist/components/Business/BsLayouts/Components/GlobalHeader/index.d.ts +1 -2
- package/dist/components/Business/BsLayouts/Components/RightContent/LoginModal.d.ts +1 -2
- package/dist/components/Business/BsLayouts/index.d.ts +1 -1
- package/dist/components/Business/BsSulaQueryTable/SearchItemSetting.d.ts +5 -5
- package/dist/components/Business/BsSulaQueryTable/index.d.ts +1 -2
- package/dist/components/Business/BsSulaQueryTable/setting.d.ts +6 -6
- package/dist/components/Business/BsSulaQueryTable/utils.d.ts +14 -15
- package/dist/components/Business/CommodityEntry/index.d.ts +1 -2
- package/dist/components/Business/CommonAlert/index.d.ts +1 -2
- package/dist/components/Business/CommonGuideWrapper/index.d.ts +3 -3
- package/dist/components/Business/DetailPageWrapper/index.d.ts +11 -12
- package/dist/components/Business/HomePageWrapper/index.d.ts +1 -2
- package/dist/components/Business/ItemPropertySelector/index.d.ts +1 -2
- package/dist/components/Business/JsonQueryTable/components/FieldsModifyModal.d.ts +1 -2
- package/dist/components/Business/JsonQueryTable/components/FieldsSettingsTable.d.ts +1 -2
- package/dist/components/Business/JsonQueryTable/components/Formula.d.ts +1 -2
- package/dist/components/Business/JsonQueryTable/components/MaintainOptions.d.ts +1 -2
- package/dist/components/Business/JsonQueryTable/drawer/index.d.ts +1 -2
- package/dist/components/Business/PropertyModal/index.d.ts +1 -2
- package/dist/components/Business/PropertyModal/propertyGroup.d.ts +1 -1
- package/dist/components/Business/SearchSelect/index.d.ts +1 -1
- package/dist/components/Business/StateFlow/index.d.ts +1 -2
- package/dist/components/Business/SystemLog/index.d.ts +78 -0
- package/dist/components/Business/TreeSearchSelect/index.d.ts +1 -1
- package/dist/components/Business/columnSettingTable/columnSetting.d.ts +6 -6
- package/dist/components/Business/columnSettingTable/components/TableSumComponent.d.ts +1 -2
- package/dist/components/Business/columnSettingTable/index.d.ts +3 -3
- package/dist/components/Business/columnSettingTable/sulaSettingTable.d.ts +3 -3
- package/dist/components/Business/columnSettingTable/utils.d.ts +1 -2
- package/dist/components/Business/moreTreeTable/FixedScrollBar.d.ts +1 -1
- package/dist/components/Common/ParagraphCopier/index.d.ts +1 -1
- package/dist/components/Common/Section/index.d.ts +1 -1
- package/dist/components/Functional/AddSelect/index.d.ts +1 -2
- package/dist/components/Functional/AuthButton/index.d.ts +1 -2
- package/dist/components/Functional/DataImport/index.d.ts +3 -3
- package/dist/components/Functional/DataValidation/index.d.ts +4 -4
- package/dist/components/Functional/ExportFunctions/ExportIcon/index.d.ts +1 -2
- package/dist/components/Functional/QueryMutipleInput/index.d.ts +1 -2
- package/dist/components/Functional/QueryMutipleSelect/index.d.ts +1 -2
- package/dist/components/Functional/SearchSelect/index.d.ts +1 -1
- package/dist/components/Functional/SearchSelect/utils.d.ts +2 -3
- package/dist/components/Functional/TreeSearchSelect/index.d.ts +1 -2
- package/dist/components/Solution/RuleComponent/CustomPlugin/CustomSelector/CustomSelectorModal.d.ts +1 -1
- package/dist/components/Solution/RuleComponent/CustomPlugin/CustomSelector/index.d.ts +1 -2
- package/dist/components/Solution/RuleComponent/Formula.d.ts +1 -2
- package/dist/components/Solution/RuleComponent/InnerSelect.d.ts +1 -2
- package/dist/components/Solution/RuleComponent/RenderCompItem.d.ts +1 -2
- package/dist/components/Solution/RuleSetter/RuleInstance.d.ts +1 -2
- package/dist/components/Solution/RuleSetter/baseRule.d.ts +1 -1
- package/dist/components/Solution/RuleSetter/index.d.ts +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.esm.js +852 -982
- package/dist/index.js +853 -981
- package/dist/plugin/TableColumnSetting/index.d.ts +5 -5
- package/dist/utils/TableUtils.d.ts +18 -19
- package/dist/utils/utils.d.ts +41 -0
- package/package.json +1 -1
- package/src/components/Business/SearchSelect/BusinessUtils.tsx +1 -1
- package/src/components/Business/SystemLog/index.md +37 -0
- package/src/components/Business/SystemLog/index.tsx +87 -0
- package/src/index.ts +2 -0
- package/src/utils/utils.ts +41 -1
|
@@ -38,14 +38,14 @@ declare class TableColumnSetting extends React.Component<TableColumnSettingProps
|
|
|
38
38
|
} | {
|
|
39
39
|
title: string;
|
|
40
40
|
dataIndex: string;
|
|
41
|
-
render: (text: any, record: any) =>
|
|
41
|
+
render: (text: any, record: any) => JSX.Element;
|
|
42
42
|
className?: undefined;
|
|
43
43
|
width?: undefined;
|
|
44
44
|
} | {
|
|
45
45
|
title: string;
|
|
46
46
|
dataIndex: string;
|
|
47
47
|
className: string;
|
|
48
|
-
render: () =>
|
|
48
|
+
render: () => JSX.Element;
|
|
49
49
|
width?: undefined;
|
|
50
50
|
})[];
|
|
51
51
|
showModal: () => void;
|
|
@@ -53,13 +53,13 @@ declare class TableColumnSetting extends React.Component<TableColumnSettingProps
|
|
|
53
53
|
handleCancel: (e: React.MouseEvent<HTMLElement>) => void;
|
|
54
54
|
handleTableHeadHidden: (title: string) => void;
|
|
55
55
|
onSortEnd: ({ oldIndex, newIndex }: any) => void;
|
|
56
|
-
DraggableContainer: (props: any) =>
|
|
57
|
-
DraggableBodyRow: ({ className, style, ...restProps }: any) =>
|
|
56
|
+
DraggableContainer: (props: any) => JSX.Element;
|
|
57
|
+
DraggableBodyRow: ({ className, style, ...restProps }: any) => JSX.Element;
|
|
58
58
|
onChange: (e: any, title: any) => void;
|
|
59
59
|
handleReset: () => void;
|
|
60
60
|
handleResetSetting: () => Promise<unknown>;
|
|
61
61
|
onSearch: (e: any) => void;
|
|
62
62
|
onSearchSort: (e: any) => void;
|
|
63
|
-
render():
|
|
63
|
+
render(): JSX.Element;
|
|
64
64
|
}
|
|
65
65
|
export default TableColumnSetting;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
1
|
import moment from 'moment';
|
|
3
2
|
type mediaListType = {
|
|
4
3
|
type: number;
|
|
@@ -49,24 +48,24 @@ declare const updateGuanDate: (requestParams: any, dateKeyParams?: any) => {
|
|
|
49
48
|
};
|
|
50
49
|
submit: any;
|
|
51
50
|
};
|
|
52
|
-
declare const textIcon: (type: string | number, text?: string) =>
|
|
53
|
-
declare const handleTextDoubleOrId: (textOne: string | undefined, textTwo: string | undefined) =>
|
|
54
|
-
declare const handleTextDouble: (textOne: string | undefined, textTwo: string | undefined) =>
|
|
55
|
-
declare const handleTextOverflow: (text: string | undefined, width?: number) =>
|
|
56
|
-
declare const handleTextLineFeed: (text: string | undefined, width?: number) =>
|
|
57
|
-
declare const handleTextTooltip: (text: any) =>
|
|
58
|
-
declare const handleTextBreakSpaces: (text: any) =>
|
|
59
|
-
declare const handleStatusBadge: (text: any, color: any) =>
|
|
60
|
-
declare const HandleTotalCount: (totalParams: any) =>
|
|
51
|
+
declare const textIcon: (type: string | number, text?: string) => JSX.Element | undefined;
|
|
52
|
+
declare const handleTextDoubleOrId: (textOne: string | undefined, textTwo: string | undefined) => JSX.Element;
|
|
53
|
+
declare const handleTextDouble: (textOne: string | undefined, textTwo: string | undefined) => JSX.Element;
|
|
54
|
+
declare const handleTextOverflow: (text: string | undefined, width?: number) => JSX.Element;
|
|
55
|
+
declare const handleTextLineFeed: (text: string | undefined, width?: number) => JSX.Element;
|
|
56
|
+
declare const handleTextTooltip: (text: any) => JSX.Element;
|
|
57
|
+
declare const handleTextBreakSpaces: (text: any) => JSX.Element;
|
|
58
|
+
declare const handleStatusBadge: (text: any, color: any) => JSX.Element;
|
|
59
|
+
declare const HandleTotalCount: (totalParams: any) => JSX.Element;
|
|
61
60
|
declare const handleCommonTimeRender: (text: any, format?: any) => any;
|
|
62
|
-
declare const handleTooltip: (text: any, timeTrue?: boolean) =>
|
|
63
|
-
declare const handleTooltipHours: (text: any, timeTrue?: boolean) =>
|
|
61
|
+
declare const handleTooltip: (text: any, timeTrue?: boolean) => JSX.Element;
|
|
62
|
+
declare const handleTooltipHours: (text: any, timeTrue?: boolean) => JSX.Element;
|
|
64
63
|
type tableColumnsImageType = {
|
|
65
64
|
width?: number | string;
|
|
66
65
|
height?: number | string;
|
|
67
66
|
[key: string]: any;
|
|
68
67
|
};
|
|
69
|
-
declare const tableColumnsImage: (url?: string, paramsObj?: tableColumnsImageType) =>
|
|
68
|
+
declare const tableColumnsImage: (url?: string, paramsObj?: tableColumnsImageType) => JSX.Element;
|
|
70
69
|
interface ColumnsEditInterfave {
|
|
71
70
|
text?: string;
|
|
72
71
|
record?: any;
|
|
@@ -82,7 +81,7 @@ interface ColumnsEditInterfave {
|
|
|
82
81
|
};
|
|
83
82
|
[key: string]: any;
|
|
84
83
|
}
|
|
85
|
-
declare const ColumnsEdit: (props: ColumnsEditInterfave) =>
|
|
84
|
+
declare const ColumnsEdit: (props: ColumnsEditInterfave) => JSX.Element;
|
|
86
85
|
type UserColumnsType = {
|
|
87
86
|
name: string;
|
|
88
87
|
department?: string;
|
|
@@ -90,13 +89,13 @@ type UserColumnsType = {
|
|
|
90
89
|
company?: string;
|
|
91
90
|
avatar?: string;
|
|
92
91
|
};
|
|
93
|
-
declare const userColumns: (props: UserColumnsType) =>
|
|
94
|
-
declare const userInfoCard: (props: any) =>
|
|
92
|
+
declare const userColumns: (props: UserColumnsType) => JSX.Element;
|
|
93
|
+
declare const userInfoCard: (props: any) => JSX.Element;
|
|
95
94
|
declare const getItemDefaultWidth: (item: any) => number;
|
|
96
|
-
declare const sulaTableRenderTooltip: ({ text }: any) =>
|
|
95
|
+
declare const sulaTableRenderTooltip: ({ text }: any) => JSX.Element;
|
|
97
96
|
declare const renderNumberText: ({ text }: any) => any;
|
|
98
97
|
declare const renderFixed2: (text: any) => any;
|
|
99
|
-
declare const handleTextWarpCustom: (text: any, style?: {}) =>
|
|
98
|
+
declare const handleTextWarpCustom: (text: any, style?: {}) => JSX.Element;
|
|
100
99
|
declare const calculateValidPeriod: (start: any, end: any) => string;
|
|
101
|
-
declare const handleTextWarp: (text: any) =>
|
|
100
|
+
declare const handleTextWarp: (text: any) => JSX.Element;
|
|
102
101
|
export { getSkuImg, updateGuanDate, textIcon, handleTextDoubleOrId, handleTextDouble, handleTextOverflow, handleTextLineFeed, handleTextTooltip, handleTextBreakSpaces, handleStatusBadge, HandleTotalCount, handleTooltip, handleCommonTimeRender, handleTooltipHours, tableColumnsImage, ColumnsEdit, userColumns, userInfoCard, getItemDefaultWidth, renderNumberText, sulaTableRenderTooltip, renderFixed2, handleTextWarpCustom, handleTextWarp, calculateValidPeriod };
|
package/dist/utils/utils.d.ts
CHANGED
|
@@ -31,3 +31,44 @@ export declare const randomString: (len?: any) => string;
|
|
|
31
31
|
export declare const createUniqID: (length: any) => string;
|
|
32
32
|
export declare const handleConvertResponse: (items: any, total: number) => object;
|
|
33
33
|
export declare const noEmptyArray: (targetObj: any) => boolean;
|
|
34
|
+
export declare const formContainerAndItemLayout: (type: string, title: any, name: string) => {
|
|
35
|
+
container: {
|
|
36
|
+
type: string;
|
|
37
|
+
props: {
|
|
38
|
+
title: any;
|
|
39
|
+
id: number;
|
|
40
|
+
level: number;
|
|
41
|
+
name: string;
|
|
42
|
+
bordered?: undefined;
|
|
43
|
+
isWhiteCard?: undefined;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
itemLayout: {
|
|
47
|
+
span: number;
|
|
48
|
+
labelCol: {
|
|
49
|
+
span: number;
|
|
50
|
+
};
|
|
51
|
+
wrapperCol: {
|
|
52
|
+
span: number;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
} | {
|
|
56
|
+
container: {
|
|
57
|
+
type: string;
|
|
58
|
+
props: {
|
|
59
|
+
title: any;
|
|
60
|
+
id: number;
|
|
61
|
+
level: number;
|
|
62
|
+
bordered: null;
|
|
63
|
+
isWhiteCard: boolean;
|
|
64
|
+
name: string;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
itemLayout: {
|
|
68
|
+
wrapperCol: {
|
|
69
|
+
span: number;
|
|
70
|
+
};
|
|
71
|
+
span?: undefined;
|
|
72
|
+
labelCol?: undefined;
|
|
73
|
+
};
|
|
74
|
+
};
|
package/package.json
CHANGED
|
@@ -1944,7 +1944,7 @@ export function commonFun (type?: string, prefixUrl: any, parentProps?:any) {
|
|
|
1944
1944
|
const channelDisabledJude = (data: any) => data['parentCode'] === '0'; // 所属销售渠道 树节点不能点判断
|
|
1945
1945
|
const areaDisabledJude = (data: any) => data['parent'] === '0'; // 所属营销区域 树节点不能点判断
|
|
1946
1946
|
formatSource(x,0, 3, tableSearchForm);
|
|
1947
|
-
formatTreeDataSource(x, 1, 4, tableSearchForm, ['
|
|
1947
|
+
formatTreeDataSource(x, 1, 4, tableSearchForm, ['code','name'], 'channelInfoSon', channelDisabledJude)
|
|
1948
1948
|
formatTreeDataSource(x, 2, 5, tableSearchForm, ['code', 'name'], 'children', areaDisabledJude)
|
|
1949
1949
|
})
|
|
1950
1950
|
modalTableProps = {
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
nav:
|
|
3
|
+
title: '组件'
|
|
4
|
+
order: 1
|
|
5
|
+
group:
|
|
6
|
+
title: 业务组件
|
|
7
|
+
order: 1
|
|
8
|
+
title: 日志组件
|
|
9
|
+
order: 1
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# SystemLog
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## 日志业务组件
|
|
16
|
+
|
|
17
|
+
```tsx
|
|
18
|
+
import React, { useState } from 'react';
|
|
19
|
+
import { SystemLog } from '../../../index.ts';
|
|
20
|
+
|
|
21
|
+
export default () => {
|
|
22
|
+
const [modeType, setModeType] = useState('view');
|
|
23
|
+
const renderLogRef = useRef<any>();
|
|
24
|
+
|
|
25
|
+
return {
|
|
26
|
+
fields: [
|
|
27
|
+
SystemLog({
|
|
28
|
+
modeType,
|
|
29
|
+
code: '123',
|
|
30
|
+
containerName: 'Test_Log_Info',
|
|
31
|
+
renderLogRef,
|
|
32
|
+
extraParams: {},
|
|
33
|
+
})
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
```
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { handleCommonTimeRender } from '@/utils/TableUtils';
|
|
2
|
+
import { formContainerAndItemLayout, handleConvertResponse } from '@/utils/utils';
|
|
3
|
+
import { Table as BsTable } from 'bssula';
|
|
4
|
+
import React from 'react';
|
|
5
|
+
|
|
6
|
+
//操作日志
|
|
7
|
+
const SystemLog = ({
|
|
8
|
+
modeType,
|
|
9
|
+
code,
|
|
10
|
+
containerName,
|
|
11
|
+
renderLogRef = {},
|
|
12
|
+
extraParams = {},
|
|
13
|
+
}: {
|
|
14
|
+
modeType: string,
|
|
15
|
+
code: any
|
|
16
|
+
containerName: string,
|
|
17
|
+
renderLogRef: object,
|
|
18
|
+
extraParams?: object,
|
|
19
|
+
}) => {
|
|
20
|
+
return {
|
|
21
|
+
...formContainerAndItemLayout('table', '操作日志', containerName),
|
|
22
|
+
initialVisible: modeType != 'create',
|
|
23
|
+
fields: [
|
|
24
|
+
{
|
|
25
|
+
name: 'table',
|
|
26
|
+
label: false,
|
|
27
|
+
itemLayout: {
|
|
28
|
+
span: 24,
|
|
29
|
+
labelCol: {
|
|
30
|
+
span: 0,
|
|
31
|
+
},
|
|
32
|
+
wrapperCol: {
|
|
33
|
+
span: 24,
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
field: (ctx: any) => {
|
|
37
|
+
return code && <BsTable
|
|
38
|
+
remoteDataSource={{
|
|
39
|
+
url: `/oms-ops/logInfo?qp-businessCode-eq=${code}`,
|
|
40
|
+
convertParams: ({ params }: any) => {
|
|
41
|
+
return {
|
|
42
|
+
pageSize: params.pageSize,
|
|
43
|
+
currentPage: params.current,
|
|
44
|
+
...extraParams,
|
|
45
|
+
};
|
|
46
|
+
},
|
|
47
|
+
converter: ({ data }: any) => {
|
|
48
|
+
return {
|
|
49
|
+
...handleConvertResponse(data.list, data.total || data.totalCount),
|
|
50
|
+
};
|
|
51
|
+
},
|
|
52
|
+
}}
|
|
53
|
+
columns={[
|
|
54
|
+
{
|
|
55
|
+
title: '操作人',
|
|
56
|
+
dataIndex: 'handlerName',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
title: '操作名称',
|
|
60
|
+
dataIndex: 'handlerType',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
title: '操作时间',
|
|
64
|
+
dataIndex: 'handlerTime',
|
|
65
|
+
render: ({ text }: { text: any }) => handleCommonTimeRender(text)
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
title: '操作内容',
|
|
69
|
+
dataIndex: 'logcontent',
|
|
70
|
+
},
|
|
71
|
+
]}
|
|
72
|
+
style={{ width: '100%', marginTop: '-16px', padding: '0px' }}
|
|
73
|
+
rowKey="id"
|
|
74
|
+
scroll={{ x: 'max-content' }}
|
|
75
|
+
pagination={{
|
|
76
|
+
showTotal: (total: any) => `共 ${total} 条`,
|
|
77
|
+
showQuickJumper: true,
|
|
78
|
+
hideOnSinglePage: true,
|
|
79
|
+
}}
|
|
80
|
+
ref={renderLogRef}
|
|
81
|
+
/>
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
export default SystemLog
|
package/src/index.ts
CHANGED
|
@@ -48,3 +48,5 @@ export { default as RuleSetter} from './components/Solution/RuleSetter';
|
|
|
48
48
|
export { default as ExtendedCollapse } from './components/Common/ExtendedCollapse';
|
|
49
49
|
export { default as Section } from './components/Common/Section';
|
|
50
50
|
export { default as ParagraphCopier } from './components/Common/ParagraphCopier';
|
|
51
|
+
|
|
52
|
+
export { default as SystemLog } from './components/Business/SystemLog';
|
package/src/utils/utils.ts
CHANGED
|
@@ -267,4 +267,44 @@ export const handleConvertResponse = (items: any, total: number): object => {
|
|
|
267
267
|
|
|
268
268
|
export const noEmptyArray = (targetObj: any) => {
|
|
269
269
|
return Array.isArray(targetObj) && targetObj.length !== 0;
|
|
270
|
-
};
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
export const formContainerAndItemLayout = (type: string, title: any, name: string) => {
|
|
273
|
+
return type === 'form' ? {
|
|
274
|
+
container: {
|
|
275
|
+
type: 'card',
|
|
276
|
+
props: {
|
|
277
|
+
title,
|
|
278
|
+
id: Math.random(),
|
|
279
|
+
level: 1,
|
|
280
|
+
name
|
|
281
|
+
},
|
|
282
|
+
},
|
|
283
|
+
itemLayout: {
|
|
284
|
+
span: 8, // span表示每项所占的栅格数
|
|
285
|
+
labelCol: {
|
|
286
|
+
span: 8,
|
|
287
|
+
},
|
|
288
|
+
wrapperCol: {
|
|
289
|
+
span: 18,
|
|
290
|
+
},
|
|
291
|
+
},
|
|
292
|
+
} : {
|
|
293
|
+
container: {
|
|
294
|
+
type: 'card',
|
|
295
|
+
props: {
|
|
296
|
+
title,
|
|
297
|
+
id: Math.random(),
|
|
298
|
+
level: 1,
|
|
299
|
+
bordered: null,
|
|
300
|
+
isWhiteCard: true,
|
|
301
|
+
name
|
|
302
|
+
},
|
|
303
|
+
},
|
|
304
|
+
itemLayout: {
|
|
305
|
+
wrapperCol: {
|
|
306
|
+
span: 0,
|
|
307
|
+
},
|
|
308
|
+
},
|
|
309
|
+
}
|
|
310
|
+
}
|