plain-design 1.0.0-beta.34 → 1.0.0-beta.37
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/plain-design.commonjs.min.js +1 -1
- package/dist/plain-design.min.css +2 -2
- package/dist/plain-design.min.js +1 -1
- package/dist/report.html +2 -2
- package/package.json +6 -5
- package/src/packages/components/$object/createObjectService.tsx +31 -20
- package/src/packages/components/$object/object.service.utils.ts +7 -3
- package/src/packages/components/$previewer/ImagePreviewerFixedContainer.tsx +1 -0
- package/src/packages/components/AutoTable/use/useTableOption.table.tsx +3 -3
- package/src/packages/components/AutoTable/utils/TableOption.space.tsx +3 -0
- package/src/packages/components/Carousel/index.tsx +5 -5
- package/src/packages/components/ImagePreviewer/ImagePreviewer.tsx +77 -75
- package/src/packages/components/ImagePreviewer/ImagePreviewerCarouselImage.tsx +1 -1
- package/src/packages/components/ImagePreviewer/ImagePreviewerGallery.tsx +1 -1
- package/src/packages/components/PlcOv/index.tsx +14 -4
- package/src/packages/components/StackCard/index.tsx +5 -5
- package/src/packages/components/Table/standard/PlcOperation/outer-operation.scss +2 -0
- package/src/packages/components/Table/table/use/useTableFormEditor.tsx +1 -1
- package/src/packages/components/Table/table/use/useTableModifyEditor.tsx +1 -1
- package/src/packages/components/VirtualTable/virtual-table.scss +1 -2
- package/src/packages/components/useDialog/index.tsx +1 -1
- package/src/packages/utils/inheritSlots.ts +28 -0
- package/src/pages/data/address.json +0 -39317
- package/src/pages/data/data-1.json +0 -754
- package/src/pages/data/data-2.json +0 -3006
- package/src/pages/data/data-200.json +0 -5206
- package/src/pages/data/data-2000.json +0 -51954
- package/src/pages/data/data-50.json +0 -2075
- package/src/pages/data/data.json +0 -30002
- package/src/pages/data/demo.json +0 -1702
- package/src/pages/data/mock.database.js +0 -43
- package/src/pages/data/mock.js +0 -141
- package/src/pages/data/tree.data.json +0 -87
- package/src/pages/env/config/local.js +0 -3
- package/src/pages/env/config/prod.js +0 -3
- package/src/pages/env/config/undefined.js +0 -1
- package/src/pages/env/env.d.ts +0 -4
- package/src/pages/env/index.ts +0 -1
- package/src/pages/history/createHistory.ts +0 -94
- package/src/pages/history/history.utils.ts +0 -64
- package/src/pages/index/App.tsx +0 -17
- package/src/pages/index/Demo/DemoLine.tsx +0 -23
- package/src/pages/index/Demo/DemoRow.scss +0 -131
- package/src/pages/index/Demo/DemoRow.tsx +0 -71
- package/src/pages/index/Demo/DemoRow.utils.ts +0 -23
- package/src/pages/index/Demo/DemoRowController.tsx +0 -45
- package/src/pages/index/Demo/index.ts +0 -8
- package/src/pages/index/app.scss +0 -197
- package/src/pages/index/components/AutoTable/AutoHeightAutoRow.tsx +0 -56
- package/src/pages/index/components/AutoTable/AutoHeightFixedRow.tsx +0 -50
- package/src/pages/index/components/AutoTable/AutoTableBasicUsage.tsx +0 -75
- package/src/pages/index/components/AutoTable/AutoTableCascade.tsx +0 -99
- package/src/pages/index/components/AutoTable/AutoTableDefaultSearch.tsx +0 -73
- package/src/pages/index/components/AutoTable/AutoTableFiles.tsx +0 -26
- package/src/pages/index/components/AutoTable/AutoTableFill.tsx +0 -51
- package/src/pages/index/components/AutoTable/AutoTableGroupUsage.tsx +0 -71
- package/src/pages/index/components/AutoTable/AutoTableObjectPicker.tsx +0 -181
- package/src/pages/index/components/AutoTable/AutoTableOvList.tsx +0 -80
- package/src/pages/index/components/AutoTable/AutoTableProductList.tsx +0 -98
- package/src/pages/index/components/AutoTable/AutoTableRowFormatter.tsx +0 -58
- package/src/pages/index/components/AutoTable/FixedHeightAutoRow.tsx +0 -50
- package/src/pages/index/components/AutoTable/FixedHeightFixedRow.tsx +0 -49
- package/src/pages/index/components/bus/DemoAddress.tsx +0 -181
- package/src/pages/index/components/bus/DemoAddressCascade.tsx +0 -132
- package/src/pages/index/components/bus/DemoFilter.tsx +0 -184
- package/src/pages/index/components/columns/DemoPlcAddress.tsx +0 -161
- package/src/pages/index/components/columns/DemoPlcDate.tsx +0 -363
- package/src/pages/index/components/columns/DemoPlcSelect.tsx +0 -505
- package/src/pages/index/components/columns/DemoPlcTime.tsx +0 -293
- package/src/pages/index/components/columns/DemoTableColumns.tsx +0 -88
- package/src/pages/index/components/form/DemoFormBasic.tsx +0 -516
- package/src/pages/index/components/form/DemoFormBlur.tsx +0 -204
- package/src/pages/index/components/form/DemoFormDynamicFields.tsx +0 -54
- package/src/pages/index/components/form/DemoFormEditControl.tsx +0 -164
- package/src/pages/index/components/form/DemoFormElement.tsx +0 -207
- package/src/pages/index/components/form/DemoFormLayout.scss +0 -7
- package/src/pages/index/components/form/DemoFormLayout.tsx +0 -311
- package/src/pages/index/components/form/DemoFormSimplify.tsx +0 -587
- package/src/pages/index/components/form/DemoFormSize.tsx +0 -274
- package/src/pages/index/components/form/DemoFormVertical.tsx +0 -280
- package/src/pages/index/components/normal/DemoAlert.tsx +0 -66
- package/src/pages/index/components/normal/DemoBadge.tsx +0 -53
- package/src/pages/index/components/normal/DemoButton.tsx +0 -300
- package/src/pages/index/components/normal/DemoCard.tsx +0 -176
- package/src/pages/index/components/normal/DemoCarousel.tsx +0 -230
- package/src/pages/index/components/normal/DemoCascade.tsx +0 -880
- package/src/pages/index/components/normal/DemoCheckbox.scss +0 -24
- package/src/pages/index/components/normal/DemoCheckbox.tsx +0 -294
- package/src/pages/index/components/normal/DemoCollapse.tsx +0 -104
- package/src/pages/index/components/normal/DemoColor.scss +0 -20
- package/src/pages/index/components/normal/DemoColor.tsx +0 -82
- package/src/pages/index/components/normal/DemoColorPicker.tsx +0 -163
- package/src/pages/index/components/normal/DemoDate.tsx +0 -443
- package/src/pages/index/components/normal/DemoDialog.tsx +0 -507
- package/src/pages/index/components/normal/DemoDropdown.tsx +0 -464
- package/src/pages/index/components/normal/DemoGrid.scss +0 -26
- package/src/pages/index/components/normal/DemoGrid.tsx +0 -181
- package/src/pages/index/components/normal/DemoIcon.tsx +0 -39
- package/src/pages/index/components/normal/DemoImage.tsx +0 -122
- package/src/pages/index/components/normal/DemoInput.scss +0 -0
- package/src/pages/index/components/normal/DemoInput.tsx +0 -790
- package/src/pages/index/components/normal/DemoKeepAlive.tsx +0 -505
- package/src/pages/index/components/normal/DemoLayout.tsx +0 -144
- package/src/pages/index/components/normal/DemoList.scss +0 -15
- package/src/pages/index/components/normal/DemoList.tsx +0 -82
- package/src/pages/index/components/normal/DemoLoading.tsx +0 -86
- package/src/pages/index/components/normal/DemoNumber.tsx +0 -269
- package/src/pages/index/components/normal/DemoPagination.tsx +0 -164
- package/src/pages/index/components/normal/DemoPopup.tsx +0 -695
- package/src/pages/index/components/normal/DemoProgress.tsx +0 -133
- package/src/pages/index/components/normal/DemoRadio.scss +0 -16
- package/src/pages/index/components/normal/DemoRadio.tsx +0 -188
- package/src/pages/index/components/normal/DemoRate.tsx +0 -77
- package/src/pages/index/components/normal/DemoScroll.scss +0 -22
- package/src/pages/index/components/normal/DemoScroll.tsx +0 -300
- package/src/pages/index/components/normal/DemoSegment.tsx +0 -71
- package/src/pages/index/components/normal/DemoSelect.tsx +0 -819
- package/src/pages/index/components/normal/DemoSlider.tsx +0 -128
- package/src/pages/index/components/normal/DemoSortList.tsx +0 -70
- package/src/pages/index/components/normal/DemoStackCard.tsx +0 -356
- package/src/pages/index/components/normal/DemoStep.scss +0 -18
- package/src/pages/index/components/normal/DemoStep.tsx +0 -291
- package/src/pages/index/components/normal/DemoTab.tsx +0 -338
- package/src/pages/index/components/normal/DemoTag.tsx +0 -100
- package/src/pages/index/components/normal/DemoTime.tsx +0 -403
- package/src/pages/index/components/normal/DemoToggle.tsx +0 -56
- package/src/pages/index/components/normal/DemoTooltip.tsx +0 -120
- package/src/pages/index/components/normal/DemoTree.tsx +0 -1183
- package/src/pages/index/components/normal/DemoUpload.tsx +0 -484
- package/src/pages/index/components/normal/DemoVirtualList.tsx +0 -464
- package/src/pages/index/components/service/DemoDialogService.tsx +0 -249
- package/src/pages/index/components/service/DemoFileService.tsx +0 -110
- package/src/pages/index/components/service/DemoImagePreviewer.tsx +0 -185
- package/src/pages/index/components/service/DemoMessageService.tsx +0 -100
- package/src/pages/index/components/service/DemoNoticeService.tsx +0 -99
- package/src/pages/index/components/service/DemoPopupService.tsx +0 -325
- package/src/pages/index/components/table/DemoPlcOperation.tsx +0 -307
- package/src/pages/index/components/table/DemoTableBasic.tsx +0 -220
- package/src/pages/index/components/table/DemoTableCheck.tsx +0 -78
- package/src/pages/index/components/table/DemoTableClassAndStyle.scss +0 -18
- package/src/pages/index/components/table/DemoTableClassAndStyle.tsx +0 -112
- package/src/pages/index/components/table/DemoTableColDraggable.tsx +0 -80
- package/src/pages/index/components/table/DemoTableEdit.tsx +0 -136
- package/src/pages/index/components/table/DemoTableExpand.tsx +0 -203
- package/src/pages/index/components/table/DemoTableFixed.tsx +0 -131
- package/src/pages/index/components/table/DemoTableFormatter.tsx +0 -66
- package/src/pages/index/components/table/DemoTableOverflowTooltip.tsx +0 -67
- package/src/pages/index/components/table/DemoTableRowDraggable.tsx +0 -106
- package/src/pages/index/components/table/DemoTableSlots.tsx +0 -153
- package/src/pages/index/components/table/DemoTableSpan.tsx +0 -167
- package/src/pages/index/components/table/DemoTableTree.tsx +0 -976
- package/src/pages/index/components/table/DemoVirtualTable.tsx +0 -274
- package/src/pages/index/components/test/DemoI18n.tsx +0 -27
- package/src/pages/index/components/test/DemoI18n2.jsx +0 -11
- package/src/pages/index/home/AppContent.tsx +0 -69
- package/src/pages/index/home/AppHead.tsx +0 -18
- package/src/pages/index/home/AppHome.tsx +0 -31
- package/src/pages/index/home/AppMenu.tsx +0 -38
- package/src/pages/index/home/menus.tsx +0 -220
- package/src/pages/index/home/plain-design.png +0 -0
- package/src/pages/index/main.tsx +0 -23
- package/src/pages/index/nav/$nav.ts +0 -41
- package/src/pages/index/pages.d.ts +0 -6
- package/src/pages/libs/iconfont-fontcls/demo.css +0 -539
- package/src/pages/libs/iconfont-fontcls/demo_index.html +0 -303
- package/src/pages/libs/iconfont-fontcls/iconfont.css +0 -35
- package/src/pages/libs/iconfont-fontcls/iconfont.js +0 -1
- package/src/pages/libs/iconfont-fontcls/iconfont.json +0 -44
- package/src/pages/libs/iconfont-fontcls/iconfont.ttf +0 -0
- package/src/pages/libs/iconfont-fontcls/iconfont.woff +0 -0
- package/src/pages/libs/iconfont-fontcls/iconfont.woff2 +0 -0
- package/src/pages/libs/iconfont-symbol/demo.css +0 -539
- package/src/pages/libs/iconfont-symbol/demo_index.html +0 -303
- package/src/pages/libs/iconfont-symbol/iconfont.css +0 -35
- package/src/pages/libs/iconfont-symbol/iconfont.js +0 -1
- package/src/pages/libs/iconfont-symbol/iconfont.json +0 -44
- package/src/pages/libs/iconfont-symbol/iconfont.ttf +0 -0
- package/src/pages/libs/iconfont-symbol/iconfont.woff +0 -0
- package/src/pages/libs/iconfont-symbol/iconfont.woff2 +0 -0
- package/src/pages/libs/install.iconfont-fontcls.tsx +0 -11
- package/src/pages/libs/install.iconfont-symbol.scss +0 -7
- package/src/pages/libs/install.iconfont-symbol.tsx +0 -14
- package/src/pages/module/address.ts +0 -27
- package/src/pages/module/http.ts +0 -24
- package/src/pages/module/index.ts +0 -19
- package/src/pages/module/object.ts +0 -5
- package/src/pages/module/ov.tsx +0 -13
- package/src/pages/module/upload.ts +0 -9
- package/src/pages/module/useTableOption.ts +0 -28
package/package.json
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
{
|
2
2
|
"name": "plain-design",
|
3
|
-
"version": "1.0.0-beta.
|
3
|
+
"version": "1.0.0-beta.37",
|
4
4
|
"description": "",
|
5
5
|
"main": "dist/plain-design.min.js",
|
6
6
|
"module": "dist/plain-design.commonjs.min.js",
|
7
7
|
"typings": "src/index.ts",
|
8
8
|
"files": [
|
9
9
|
"dist",
|
10
|
-
"src"
|
10
|
+
"src/packages",
|
11
|
+
"src/index.ts"
|
11
12
|
],
|
12
13
|
"scripts": {
|
13
14
|
"dev": "cross-env APP_ENV=prod vue-cli-service serve",
|
@@ -19,7 +20,7 @@
|
|
19
20
|
"peerDependencies": {
|
20
21
|
"exceljs": "^4.2.1",
|
21
22
|
"file-saver": "^2.0.5",
|
22
|
-
"plain-design-composition": "^0.0.
|
23
|
+
"plain-design-composition": "^0.0.185",
|
23
24
|
"react": "^18.0.1",
|
24
25
|
"react-dom": "^18.0.1"
|
25
26
|
},
|
@@ -33,7 +34,7 @@
|
|
33
34
|
"color": "^4.2.3",
|
34
35
|
"dayjs": "^1.10.4",
|
35
36
|
"plain-icons": "0.0.7",
|
36
|
-
"plain-utils": "
|
37
|
+
"plain-utils": "0.1.56",
|
37
38
|
"react-flip-move": "^3.0.4",
|
38
39
|
"react-transition-group": "^4.4.1"
|
39
40
|
},
|
@@ -68,7 +69,7 @@
|
|
68
69
|
"fork-ts-checker-webpack-plugin": "^6.2.4",
|
69
70
|
"mini-css-extract-plugin": "^1.4.1",
|
70
71
|
"mockjs": "^1.1.0",
|
71
|
-
"plain-design-composition": "^0.0.
|
72
|
+
"plain-design-composition": "^0.0.185",
|
72
73
|
"postcss": "^8.2.13",
|
73
74
|
"postcss-loader": "^4.2.0",
|
74
75
|
"qs": "^6.10.1",
|
@@ -19,23 +19,27 @@ import {ClientZoom} from "../../utils/ClientZoom";
|
|
19
19
|
export function createObjectService(defaultConfig: iObjectServiceDefaultConfig) {
|
20
20
|
|
21
21
|
const publicDialogOption: iDialogServiceOption = {
|
22
|
+
headAlign: 'left',
|
22
23
|
title: i18n('base.selectData').d('选择数据'),
|
23
24
|
confirmButton: true,
|
24
25
|
cancelButton: true,
|
25
26
|
maxHeight: ' ',
|
26
|
-
maxWidth: '
|
27
|
+
maxWidth: ' ',
|
28
|
+
width: '50vw'
|
27
29
|
};
|
28
30
|
|
29
31
|
function processShowRows(option: TableOptionSpace.iTableOption) {
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
32
|
+
if (option.useConfig.showRows == null) {
|
33
|
+
const { clientHeight } = ClientZoom.getClientSize();
|
34
|
+
const availableHeight = clientHeight * 0.8 - 48 - 44 - 40 - 40 - 28;
|
35
|
+
const { bodyRowHeight } = getTableRowHeight(option.config.size, option.config);
|
36
|
+
const showRows = Math.floor(availableHeight / bodyRowHeight) - 1;
|
37
|
+
|
38
|
+
option.config.showRows = showRows;
|
39
|
+
option.pagination.state.size = option.config.showRows;
|
40
|
+
option.pagination.state.pageSizeOptions.indexOf(showRows) === -1 && (option.pagination.state.pageSizeOptions.unshift(showRows));
|
41
|
+
option.fill.state.showRows = showRows;
|
42
|
+
}
|
39
43
|
}
|
40
44
|
|
41
45
|
function processPermit(option: TableOptionSpace.iTableOption) {
|
@@ -92,7 +96,7 @@ export function createObjectService(defaultConfig: iObjectServiceDefaultConfig)
|
|
92
96
|
},
|
93
97
|
};
|
94
98
|
|
95
|
-
effects.push(
|
99
|
+
!serviceConfig.readonly && effects.push(
|
96
100
|
config.option.hooks.onRenderColumns.use({
|
97
101
|
processor: ({ list, render }) => {list.push({ render, key: 'object-check', seq: 0 });},
|
98
102
|
render: () => (
|
@@ -101,16 +105,11 @@ export function createObjectService(defaultConfig: iObjectServiceDefaultConfig)
|
|
101
105
|
})
|
102
106
|
);
|
103
107
|
|
104
|
-
(!config.option.permission.permit.value.show.update || config.option.permission.permit.value.disabled.update) &&
|
105
|
-
effects.push(
|
106
|
-
config.option.hooks.onDblclickRow.use(async () => {
|
107
|
-
await delay();
|
108
|
-
handler.handleConfirm();
|
109
|
-
})
|
110
|
-
);
|
111
|
-
|
112
108
|
const close = $dialog({
|
113
109
|
...publicDialogOption,
|
110
|
+
...serviceConfig.dialogProps,
|
111
|
+
...serviceConfig.readonly ? { confirmButton: false, cancelButton: false } : {},
|
112
|
+
title: serviceConfig.option.config.title || publicDialogOption.title,
|
114
113
|
onClose: () => {effects.clear();},
|
115
114
|
onOpen: () => config.option.methods.pageMethods.reload(),
|
116
115
|
handleConfirm: handler.handleConfirm,
|
@@ -124,6 +123,14 @@ export function createObjectService(defaultConfig: iObjectServiceDefaultConfig)
|
|
124
123
|
}
|
125
124
|
});
|
126
125
|
|
126
|
+
!serviceConfig.readonly && (!config.option.permission.permit.value.show.update || config.option.permission.permit.value.disabled.update) &&
|
127
|
+
effects.push(
|
128
|
+
config.option.hooks.onDblclickRow.use(async () => {
|
129
|
+
await delay();
|
130
|
+
handler.handleConfirm();
|
131
|
+
})
|
132
|
+
);
|
133
|
+
|
127
134
|
return dfd.promise;
|
128
135
|
}
|
129
136
|
|
@@ -145,7 +152,7 @@ export function createObjectService(defaultConfig: iObjectServiceDefaultConfig)
|
|
145
152
|
selected: (!config.selected ? undefined : deepcopy(convertRowToSelected(config.selected, config.map))) as undefined | PlainObject[]
|
146
153
|
});
|
147
154
|
|
148
|
-
effects.push(
|
155
|
+
!serviceConfig.readonly && effects.push(
|
149
156
|
config.option.hooks.onRenderColumns.use({
|
150
157
|
processor: ({ list, render }) => {list.push({ render, key: 'object-check', seq: 0 });},
|
151
158
|
render: () => (
|
@@ -155,7 +162,11 @@ export function createObjectService(defaultConfig: iObjectServiceDefaultConfig)
|
|
155
162
|
);
|
156
163
|
|
157
164
|
$dialog({
|
165
|
+
headAlign: 'left',
|
158
166
|
...publicDialogOption,
|
167
|
+
...serviceConfig.dialogProps,
|
168
|
+
...serviceConfig.readonly ? { confirmButton: false, cancelButton: false } : {},
|
169
|
+
title: serviceConfig.option.config.title || publicDialogOption.title,
|
159
170
|
onClose: () => {effects.clear();},
|
160
171
|
onOpen: () => config.option.methods.pageMethods.reload(),
|
161
172
|
handleConfirm: async () => {
|
@@ -1,6 +1,8 @@
|
|
1
1
|
import {PlainObject} from "plain-utils/utils/event";
|
2
2
|
import {iObjectConverter} from "./object.conver";
|
3
3
|
import {TableOptionSpace} from "../AutoTable/utils/TableOption.space";
|
4
|
+
import {ComponentPropsType} from "plain-design-composition";
|
5
|
+
import {Dialog} from "../Dialog";
|
4
6
|
|
5
7
|
/**
|
6
8
|
* 创建Object服务需要的默认的配置参数
|
@@ -17,9 +19,11 @@ export interface iObjectServiceDefaultConfig {
|
|
17
19
|
* @date 2023.1.24 20:14
|
18
20
|
*/
|
19
21
|
export interface iObjectServicePickPublicConfig extends Partial<iObjectServiceDefaultConfig> {
|
20
|
-
option: TableOptionSpace.iTableOption,
|
21
|
-
map?: Record<string, string> | [iObjectConverter, iObjectConverter],
|
22
|
-
beforeCancel?: () => void | boolean | Promise<void | boolean>,
|
22
|
+
option: TableOptionSpace.iTableOption, // TableOption对象
|
23
|
+
map?: Record<string, string> | [iObjectConverter, iObjectConverter], // 用来转化选中行与目标行对象的规则
|
24
|
+
beforeCancel?: () => void | boolean | Promise<void | boolean>, // 取消之前的动作
|
25
|
+
readonly?: boolean, // 只读,不需要选择数据,只需要关闭
|
26
|
+
dialogProps?: Partial<ComponentPropsType<typeof Dialog>> // dialog属性
|
23
27
|
}
|
24
28
|
|
25
29
|
/**
|
@@ -5,7 +5,7 @@ import {PlainObject} from "plain-utils/utils/event";
|
|
5
5
|
import '../utils/TableOption.space';
|
6
6
|
import {PlcIndex} from "../../Table/standard/PlcIndex";
|
7
7
|
import {AutoModule} from "../utils/AutoModule";
|
8
|
-
import {iMouseEvent} from "plain-design-composition";
|
8
|
+
import {Fragment, iMouseEvent} from "plain-design-composition";
|
9
9
|
|
10
10
|
declare module '../utils/TableOption.space' {
|
11
11
|
namespace TableOptionSpace {
|
@@ -46,8 +46,8 @@ export const useTableOptionTable = AutoModule.createRegistration((
|
|
46
46
|
hooks.onRenderColumns.use({
|
47
47
|
processor: ({ list, render }) => {list.push({ key: 'index', seq: 0, render });},
|
48
48
|
render: () => <>
|
49
|
-
{config.indexing != false && <PlcIndex start={(pagination.state.page - 1) * pagination.state.size}/>}
|
50
|
-
{render.default()}
|
49
|
+
{config.indexing != false && <PlcIndex start={(pagination.state.page - 1) * pagination.state.size} key="key_standard_index"/>}
|
50
|
+
<Fragment key="key_option_render">{render.default()}</Fragment>
|
51
51
|
</>
|
52
52
|
});
|
53
53
|
|
@@ -50,6 +50,7 @@ export namespace TableOptionSpace {
|
|
50
50
|
* @date 2022.12.20 10:47
|
51
51
|
*/
|
52
52
|
export interface iTableOptionCustomConfig {
|
53
|
+
title?: string, // 表格标题
|
53
54
|
url?: iUrl, // 请求配置
|
54
55
|
data?: any[], // 默认数据
|
55
56
|
fill?: boolean, // 是否自动计算高度
|
@@ -161,6 +162,8 @@ export namespace TableOptionSpace {
|
|
161
162
|
*/
|
162
163
|
export interface iTableOption {
|
163
164
|
config: iTableOptionConfig;
|
165
|
+
useConfig: iTableOptionUseConfig,
|
166
|
+
defaultConfig: iTableOptionDefaultConfig,
|
164
167
|
clone: iTableOptionClone;
|
165
168
|
}
|
166
169
|
|
@@ -13,6 +13,7 @@ import {delay} from "plain-utils/utils/delay";
|
|
13
13
|
import {Tooltip} from "../Tooltip";
|
14
14
|
import {buildCycleIndexList} from "../../utils/buildCycleIndexList";
|
15
15
|
import {ComponentUtils} from "../../utils/ComponentUtils";
|
16
|
+
import {addWindowListener} from "plain-utils/dom/addWindowListener";
|
16
17
|
|
17
18
|
export const Carousel = designComponent({
|
18
19
|
name: 'carousel',
|
@@ -294,11 +295,10 @@ export const Carousel = designComponent({
|
|
294
295
|
reset();
|
295
296
|
};
|
296
297
|
|
297
|
-
draggierEffects.push(
|
298
|
-
draggierEffects.push(
|
299
|
-
|
300
|
-
draggierEffects.push(
|
301
|
-
draggierEffects.push(addElementListener(document.body, 'touchend', draggierEffects.clear));
|
298
|
+
draggierEffects.push(addWindowListener('mousemove', touchmove));
|
299
|
+
draggierEffects.push(addWindowListener('touchmove', touchmove));
|
300
|
+
draggierEffects.push(addWindowListener('mouseup', draggierEffects.clear));
|
301
|
+
draggierEffects.push(addWindowListener('touchend', draggierEffects.clear));
|
302
302
|
};
|
303
303
|
|
304
304
|
const reset = () => {
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import {computed, designComponent, iHTMLDivElement, onBeforeUnmount, onMounted, PropType, reactive, useClasses, useRefs, useStyles} from "plain-design-composition";
|
1
|
+
import {computed, designComponent, iHTMLDivElement, onBeforeUnmount, onMounted, PropType, reactive, useClasses, useRefs, useStyles, watch} from "plain-design-composition";
|
2
2
|
import {getCenterRect, iImagePreviewerOption, ImagePreviewerHooks} from "./image-previewer.utils";
|
3
3
|
import {createEffects} from "plain-utils/utils/createEffects";
|
4
4
|
import {getRectAutoFormat} from "../../utils/getRectAutoFormat";
|
@@ -18,7 +18,8 @@ import {getDeviceInfo} from "../../utils/getDeviceInfo";
|
|
18
18
|
export const ImagePreviewer = designComponent({
|
19
19
|
name: 'image-preview-component',
|
20
20
|
props: {
|
21
|
-
option: { type: Object as PropType<iImagePreviewerOption>, required: true }
|
21
|
+
option: { type: Object as PropType<iImagePreviewerOption>, required: true },
|
22
|
+
closable: { type: Boolean }
|
22
23
|
},
|
23
24
|
inheritPropsType: iHTMLDivElement,
|
24
25
|
setup({ props }) {
|
@@ -71,7 +72,8 @@ export const ImagePreviewer = designComponent({
|
|
71
72
|
}
|
72
73
|
|
73
74
|
/*当前正在显示的图片元素,关闭时让这个元素显示一个缩小动画*/
|
74
|
-
const
|
75
|
+
const currentUrl = props.option.urls[state.current!].url;
|
76
|
+
const sourceImgElement = props.option.imageElement?.getAttribute('src') === currentUrl ? props.option.imageElement : (Array.from(document.querySelectorAll('img')) as HTMLImageElement[]).find(i => i.getAttribute('src') === currentUrl && i !== currentImgElement && !i.hasAttribute('data-ignore'));
|
75
77
|
|
76
78
|
const currentRect = getCenterRect({ imageElement: currentImgElement, containerElement: refs.carousel!.refs.el! });
|
77
79
|
|
@@ -129,17 +131,18 @@ export const ImagePreviewer = designComponent({
|
|
129
131
|
|
130
132
|
const handler = {
|
131
133
|
onDoubleClickImage: () => {
|
132
|
-
methods.close();
|
134
|
+
props.closable && methods.close();
|
133
135
|
},
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
136
|
+
};
|
137
|
+
|
138
|
+
watch(() => state.current, () => {
|
139
|
+
transformHandler.transformMethods.reset();
|
140
|
+
if (!!props.option.imageElement) {
|
141
|
+
if (props.option.imageElement.style.opacity != props.option.oldSourceImageOpacity) {
|
142
|
+
props.option.imageElement.style.opacity = props.option.oldSourceImageOpacity || "";
|
140
143
|
}
|
141
144
|
}
|
142
|
-
};
|
145
|
+
});
|
143
146
|
|
144
147
|
const transformHandler = (() => {
|
145
148
|
const transformState = reactive({
|
@@ -191,7 +194,7 @@ export const ImagePreviewer = designComponent({
|
|
191
194
|
if (!!transformState.previousTouchstartTimestamp) {
|
192
195
|
if (currentTouchstartTimestamp - transformState.previousTouchstartTimestamp < 200) {
|
193
196
|
/*100ms内点击了两次,自动关闭*/
|
194
|
-
methods.close();
|
197
|
+
props.closable && methods.close();
|
195
198
|
return;
|
196
199
|
}
|
197
200
|
}
|
@@ -244,70 +247,71 @@ export const ImagePreviewer = designComponent({
|
|
244
247
|
transformState.transformData.top = Number((touchState.startTop + (moveY - touchState.startY)).toFixed(2));
|
245
248
|
transformState.transformData.left = Number((touchState.startLeft + (moveX - touchState.startX)).toFixed(2));
|
246
249
|
};
|
247
|
-
touchEffects.push(
|
248
|
-
touchEffects.push(
|
249
|
-
touchEffects.push(
|
250
|
-
touchEffects.push(
|
250
|
+
touchEffects.push(addWindowListener('touchmove', touchmove, { passive: false }));
|
251
|
+
touchEffects.push(addWindowListener('touchend', touchEffects.clear, { passive: false }));
|
252
|
+
touchEffects.push(addWindowListener('mousemove', touchmove, { passive: false }));
|
253
|
+
touchEffects.push(addWindowListener('mouseup', touchEffects.clear, { passive: false }));
|
251
254
|
} else {
|
252
255
|
if (getDeviceInfo().deviceType === 'mobile' && 'touches' in e && e.touches.length === 1) {
|
253
256
|
|
254
257
|
/*---------------------------------------单指拖拽关闭-------------------------------------------*/
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
258
|
+
if (props.closable) {
|
259
|
+
/*移动端的情况下,如果纵向移动超过一定距离,则一边移动一边缩小,缩小到一定程度关闭预览*/
|
260
|
+
let imageElement = (e.currentTarget as HTMLDivElement).querySelector('img') as HTMLImageElement;
|
261
|
+
let mobileTouchState = {
|
262
|
+
startX: e.touches[0].clientX,
|
263
|
+
startY: e.touches[0].clientY,
|
264
|
+
touching: null as null | { scale: number },
|
265
|
+
};
|
266
|
+
const touchmove = (e: TouchEvent) => {
|
267
|
+
if (autoClearIfDoubleTouching(e)) {return;}
|
268
|
+
e.stopPropagation();
|
269
|
+
e.preventDefault();
|
270
|
+
let durX = e.touches[0].clientX - mobileTouchState.startX;
|
271
|
+
let durY = e.touches[0].clientY - mobileTouchState.startY;
|
272
|
+
if (!mobileTouchState.touching) {
|
273
|
+
if (durY > durX && durY > 10) {
|
274
|
+
transformState.mobileClosing = true;
|
275
|
+
mobileTouchState.touching = { scale: 1 };
|
276
|
+
/*拖拽结束时的处理动作*/
|
277
|
+
touchEffects.push(async () => {
|
278
|
+
transformState.mobileClosing = false;
|
279
|
+
|
280
|
+
if (mobileTouchState.touching!.scale < 0.9) {
|
281
|
+
/*取消缩放,改为实际设置大小,是的关闭动画合理*/
|
282
|
+
methods.close();
|
283
|
+
} else {
|
284
|
+
/*取消缩放,还原原来的状态*/
|
285
|
+
imageElement.style.transition = "all ease 300ms";
|
286
|
+
imageElement.style.transform = "translate3d(0,0,0) scale(1)";
|
287
|
+
delay(300).then(() => {
|
288
|
+
imageElement.style.transition = "";
|
289
|
+
imageElement.style.transform = "";
|
290
|
+
});
|
291
|
+
}
|
292
|
+
|
293
|
+
mobileTouchState.touching = null;
|
294
|
+
});
|
295
|
+
}
|
296
|
+
}
|
297
|
+
if (!mobileTouchState.touching) {
|
298
|
+
return;
|
299
|
+
}
|
300
|
+
if (durY < 0) {durY = 0;}
|
301
|
+
if (durY === 0) {
|
302
|
+
/*移动距离为0,不做缩放移动*/
|
303
|
+
imageElement.style.transform = '';
|
304
|
+
} else {
|
305
|
+
/*按照移动距离进行缩放移动*/
|
306
|
+
const height = Math.ceil(document.body.clientHeight / 3);
|
307
|
+
const scale = Number((1 - durY / height).toFixed(2));
|
308
|
+
mobileTouchState.touching.scale = scale;
|
309
|
+
imageElement.style.transform = `translate3d(0,${durY}px,0) scale(${scale})`;
|
292
310
|
}
|
293
|
-
}
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
if (durY < 0) {durY = 0;}
|
298
|
-
if (durY === 0) {
|
299
|
-
/*移动距离为0,不做缩放移动*/
|
300
|
-
imageElement.style.transform = '';
|
301
|
-
} else {
|
302
|
-
/*按照移动距离进行缩放移动*/
|
303
|
-
const height = Math.ceil(document.body.clientHeight / 3);
|
304
|
-
const scale = Number((1 - durY / height).toFixed(2));
|
305
|
-
mobileTouchState.touching.scale = scale;
|
306
|
-
imageElement.style.transform = `translate3d(0,${durY}px,0) scale(${scale})`;
|
307
|
-
}
|
308
|
-
};
|
309
|
-
touchEffects.push(addElementListener(document.body, 'touchmove', touchmove, { passive: false }));
|
310
|
-
touchEffects.push(addElementListener(document.body, 'touchend', touchEffects.clear, { passive: false }));
|
311
|
+
};
|
312
|
+
touchEffects.push(addWindowListener('touchmove', touchmove, { passive: false }));
|
313
|
+
touchEffects.push(addWindowListener('touchend', touchEffects.clear, { passive: false }));
|
314
|
+
}
|
311
315
|
}
|
312
316
|
}
|
313
317
|
|
@@ -338,8 +342,8 @@ export const ImagePreviewer = designComponent({
|
|
338
342
|
transformState.mobileScaling = null;
|
339
343
|
});
|
340
344
|
|
341
|
-
touchEffects.push(
|
342
|
-
touchEffects.push(
|
345
|
+
touchEffects.push(addWindowListener('touchmove', touchmove, { passive: false, }));
|
346
|
+
touchEffects.push(addWindowListener('touchend', touchEffects.clear, { passive: false }));
|
343
347
|
}
|
344
348
|
},
|
345
349
|
};
|
@@ -510,7 +514,6 @@ export const ImagePreviewer = designComponent({
|
|
510
514
|
v-model={state.current}
|
511
515
|
height={props.option.autoHeight ? undefined : `calc(100% - ${props.option.galleryHeight}px)`}
|
512
516
|
style={{ paddingBottom: `${props.option.separatorHeight}px` }}
|
513
|
-
onChange={handler.onChangeCurrent}
|
514
517
|
disableSwiper={transformHandler.isTransforming.value}
|
515
518
|
largeSwitchButton
|
516
519
|
switchButton={props.option.swipeButton == false ? false : undefined}
|
@@ -548,7 +551,6 @@ export const ImagePreviewer = designComponent({
|
|
548
551
|
<ImagePreviewerGallery
|
549
552
|
option={props.option}
|
550
553
|
v-model={state.current}
|
551
|
-
onChange={handler.onChangeCurrent}
|
552
554
|
style={galleryStyles.value}
|
553
555
|
/>
|
554
556
|
)}
|
@@ -48,7 +48,7 @@ export const ImagePreviewerCarouselImage = designComponent({
|
|
48
48
|
const preventDefaultDraggier = (e: iMouseEvent) => {e.preventDefault();};
|
49
49
|
|
50
50
|
return () => (
|
51
|
-
<img ref={onRef.img} style={styles.value} src={props.src} data-direction={state.direction} onLoad={onLoad} onError={onError} onDragStart={preventDefaultDraggier}/>
|
51
|
+
<img data-ignore="true" ref={onRef.img} style={styles.value} src={props.src} data-direction={state.direction} onLoad={onLoad} onError={onError} onDragStart={preventDefaultDraggier}/>
|
52
52
|
);
|
53
53
|
},
|
54
54
|
});
|
@@ -188,7 +188,7 @@ export const ImagePreviewerGallery = designComponent({
|
|
188
188
|
onMouseUp={(e) => handler.onMouseupItem(e, index)}
|
189
189
|
data-active={String(model.value == index)}
|
190
190
|
>
|
191
|
-
<img src={item.thumbUrl} onMouseDown={handler.preventDragImage} onLoad={() => handler.onImageLoad(item.thumbUrl)} onError={() => handler.onImageLoad(item.thumbUrl)}/>
|
191
|
+
<img data-ignore="true" src={item.thumbUrl} onMouseDown={handler.preventDragImage} onLoad={() => handler.onImageLoad(item.thumbUrl)} onError={() => handler.onImageLoad(item.thumbUrl)}/>
|
192
192
|
{/*{<PreviewerLoading/>}*/}
|
193
193
|
{state.readyMap[item.thumbUrl] !== true && <PreviewerLoading/>}
|
194
194
|
</div>
|
@@ -3,17 +3,27 @@ import {OvPropsOption} from "../Ov/ov.utils";
|
|
3
3
|
import {usePublicOv} from "../Ov/usePublicOv";
|
4
4
|
import {PlcSelect} from "../Table/editor/PlcSelect";
|
5
5
|
import {SelectOption} from "../SelectOption";
|
6
|
+
import {PlcScopeSlotsOptions} from "../Table/plc/utils/plc.scope-slots";
|
7
|
+
import {inheritSlots} from "../../utils/inheritSlots";
|
6
8
|
|
7
9
|
export const PlcOv = designComponent({
|
8
10
|
name: 'plc-ov',
|
9
11
|
inheritPropsType: PlcSelect,
|
10
12
|
props: OvPropsOption,
|
11
|
-
|
13
|
+
scopeSlots: PlcScopeSlotsOptions,
|
14
|
+
slots: ['default'],
|
15
|
+
setup({ props, slots, scopeSlots }) {
|
12
16
|
const { state } = usePublicOv({ props });
|
13
17
|
return () => (
|
14
|
-
<PlcSelect
|
15
|
-
{
|
16
|
-
|
18
|
+
<PlcSelect
|
19
|
+
v-slots={inheritSlots({
|
20
|
+
slots,
|
21
|
+
scopeSlots,
|
22
|
+
defaultSlots: {
|
23
|
+
default: () => state.ovMetas.map(meta => (<SelectOption label={meta.name} val={meta.code} key={meta.code}/>))
|
24
|
+
}
|
25
|
+
})}
|
26
|
+
/>
|
17
27
|
);
|
18
28
|
},
|
19
29
|
});
|
@@ -3,8 +3,8 @@ import './stack-card.scss';
|
|
3
3
|
import {findReactElement} from "../../utils/findReactElement";
|
4
4
|
import StackCardItem from "../StackCardItem";
|
5
5
|
import {createEffects} from "plain-utils/utils/createEffects";
|
6
|
-
import {addElementListener} from "plain-utils/dom/addElementListener";
|
7
6
|
import {delay} from "plain-utils/utils/delay";
|
7
|
+
import {addWindowListener} from "plain-utils/dom/addWindowListener";
|
8
8
|
|
9
9
|
export const StackCard = designComponent({
|
10
10
|
name: 'stack-card',
|
@@ -78,10 +78,10 @@ export const StackCard = designComponent({
|
|
78
78
|
draggierState.left = -durX + staticState.startLeft;
|
79
79
|
};
|
80
80
|
|
81
|
-
draggierEffects.push(
|
82
|
-
draggierEffects.push(
|
83
|
-
draggierEffects.push(
|
84
|
-
draggierEffects.push(
|
81
|
+
draggierEffects.push(addWindowListener('mousemove', touchmove));
|
82
|
+
draggierEffects.push(addWindowListener('mouseup', draggierEffects.clear));
|
83
|
+
draggierEffects.push(addWindowListener('touchmove', touchmove));
|
84
|
+
draggierEffects.push(addWindowListener('touchend', draggierEffects.clear));
|
85
85
|
};
|
86
86
|
|
87
87
|
return { draggierState, touchstart };
|
@@ -128,12 +128,12 @@ export function useTableFormEditor(
|
|
128
128
|
const validateAttrs = pick(plc.props, Object.keys(PlcValidatePropsOption) as (keyof typeof PlcValidatePropsOption)[]);
|
129
129
|
return (
|
130
130
|
<FormItem
|
131
|
+
key={index}
|
131
132
|
label={plc.props.formLabel || plc.props.title}
|
132
133
|
field={plc.props.field}
|
133
134
|
required={plc.props.required}
|
134
135
|
rules={plc.props.rules}
|
135
136
|
validator={plc.props.validator}
|
136
|
-
key={index}
|
137
137
|
disabled={!editable}
|
138
138
|
{...validateAttrs}
|
139
139
|
>
|
@@ -118,12 +118,12 @@ export function useTableModifyEditor(
|
|
118
118
|
const validateAttrs = pick(plc.props, Object.keys(PlcValidatePropsOption) as (keyof typeof PlcValidatePropsOption)[]);
|
119
119
|
return (
|
120
120
|
<FormItem
|
121
|
+
key={index}
|
121
122
|
label={plc.props.formLabel || plc.props.title}
|
122
123
|
field={plc.props.field}
|
123
124
|
required={plc.props.required}
|
124
125
|
rules={plc.props.rules}
|
125
126
|
validator={plc.props.validator}
|
126
|
-
key={index}
|
127
127
|
disabled={!editable}
|
128
128
|
{...validateAttrs}
|
129
129
|
>
|
@@ -15,7 +15,7 @@ export const useDialog = createApplicationService(
|
|
15
15
|
const service = (sourceOption: string | iDialogServiceOption, externalOption?: iDialogServiceOption): () => void => {
|
16
16
|
const option = formatOptions(sourceOption, externalOption);
|
17
17
|
!option.id && (option.id = nextDialogId());
|
18
|
-
option.minWidth
|
18
|
+
option.minWidth === null && (option.minWidth = '325px');
|
19
19
|
|
20
20
|
getManager().then(async manager => {await manager.service(option);});
|
21
21
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import {RenderNode} from "plain-design-composition";
|
2
|
+
|
3
|
+
export function inheritSlots<
|
4
|
+
Slots extends Record<string, (() => RenderNode) & { isExist: () => boolean }>,
|
5
|
+
ScopeSlots extends Record<string, ((...args: any[]) => RenderNode) & { isExist: () => boolean }>,
|
6
|
+
>(
|
7
|
+
{
|
8
|
+
slots,
|
9
|
+
scopeSlots,
|
10
|
+
defaultSlots,
|
11
|
+
defaultScopeSlots,
|
12
|
+
}: {
|
13
|
+
slots?: Slots,
|
14
|
+
scopeSlots?: ScopeSlots,
|
15
|
+
defaultSlots?: { [k in keyof Slots]: Omit<Slots[k], 'isExist'> },
|
16
|
+
defaultScopeSlots?: { [k in keyof ScopeSlots]: Omit<ScopeSlots[k], 'isExist'> },
|
17
|
+
}
|
18
|
+
) {
|
19
|
+
const ret = {} as any;
|
20
|
+
|
21
|
+
!!defaultSlots && Object.entries(defaultSlots).forEach(([key, val]) => {ret[key] = val;});
|
22
|
+
!!defaultScopeSlots && Object.entries(defaultScopeSlots).forEach(([key, val]) => {ret[key] = val;});
|
23
|
+
|
24
|
+
!!slots && Object.keys(slots).forEach((k: keyof Slots) => {if (slots[k].isExist()) {ret[k] = () => slots[k]();}});
|
25
|
+
!!scopeSlots && Object.keys(scopeSlots).forEach((k: keyof ScopeSlots) => {if (scopeSlots[k].isExist()) {ret[k] = (...args: any[]) => scopeSlots[k](...args);}});
|
26
|
+
|
27
|
+
return ret;
|
28
|
+
}
|