plain-design 1.0.0-beta.35 → 1.0.0-beta.38
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/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 +4 -4
- 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/body/useCellValue.tsx +10 -6
- 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/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "plain-design",
|
3
|
-
"version": "1.0.0-beta.
|
3
|
+
"version": "1.0.0-beta.38",
|
4
4
|
"description": "",
|
5
5
|
"main": "dist/plain-design.min.js",
|
6
6
|
"module": "dist/plain-design.commonjs.min.js",
|
@@ -20,7 +20,7 @@
|
|
20
20
|
"peerDependencies": {
|
21
21
|
"exceljs": "^4.2.1",
|
22
22
|
"file-saver": "^2.0.5",
|
23
|
-
"plain-design-composition": "^0.0.
|
23
|
+
"plain-design-composition": "^0.0.185",
|
24
24
|
"react": "^18.0.1",
|
25
25
|
"react-dom": "^18.0.1"
|
26
26
|
},
|
@@ -34,7 +34,7 @@
|
|
34
34
|
"color": "^4.2.3",
|
35
35
|
"dayjs": "^1.10.4",
|
36
36
|
"plain-icons": "0.0.7",
|
37
|
-
"plain-utils": "
|
37
|
+
"plain-utils": "0.1.56",
|
38
38
|
"react-flip-move": "^3.0.4",
|
39
39
|
"react-transition-group": "^4.4.1"
|
40
40
|
},
|
@@ -69,7 +69,7 @@
|
|
69
69
|
"fork-ts-checker-webpack-plugin": "^6.2.4",
|
70
70
|
"mini-css-extract-plugin": "^1.4.1",
|
71
71
|
"mockjs": "^1.1.0",
|
72
|
-
"plain-design-composition": "^0.0.
|
72
|
+
"plain-design-composition": "^0.0.185",
|
73
73
|
"postcss": "^8.2.13",
|
74
74
|
"postcss-loader": "^4.2.0",
|
75
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 };
|
@@ -84,13 +84,17 @@ export function useCellValue(
|
|
84
84
|
};
|
85
85
|
(async () => {
|
86
86
|
try {
|
87
|
+
const sv = sourceValue.value;
|
88
|
+
const sr = row.value;
|
87
89
|
const value = await asyncFormatterFunction(sourceValue.value, { ...cellRenderScope, ...formatterOptions });
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
90
|
+
if (sv === sourceValue.value && sr === row.value) {
|
91
|
+
asyncState.asyncValue = {
|
92
|
+
sourceValue: sourceValue.value,
|
93
|
+
row: row.value,
|
94
|
+
targetValue: value,
|
95
|
+
loading: false,
|
96
|
+
};
|
97
|
+
}
|
94
98
|
} catch (e) {
|
95
99
|
/*异步格式化失败*/
|
96
100
|
console.error(e);
|
@@ -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
|
|