@nokecy/qc-ui 1.1.73 → 1.1.75
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/cjs/adapters/pagedApiAdapter.d.ts +2 -0
- package/dist/cjs/ag-grid-plus/ag-gridPlus.js +5 -3
- package/dist/cjs/ag-grid-plus/interface.d.ts +6 -0
- package/dist/cjs/ag-grid-plus/utils/aggregation.js +8 -14
- package/dist/cjs/ag-grid-plus/utils/columnProcessors.d.ts +2 -1
- package/dist/cjs/ag-grid-plus/utils/columnProcessors.js +5 -2
- package/dist/cjs/ag-grid-plus/utils/valueEnumColor.d.ts +17 -0
- package/dist/cjs/ag-grid-plus/utils/valueEnumColor.js +99 -0
- package/dist/cjs/dialogSelect/index.d.ts +31 -2
- package/dist/cjs/dialogSelect/index.js +209 -105
- package/dist/cjs/dialogSelect/index.less +39 -0
- package/dist/cjs/draggableModal/index.js +12 -8
- package/dist/cjs/entitySelect/index.d.ts +57 -0
- package/dist/cjs/entitySelect/index.js +172 -0
- package/dist/cjs/index.d.ts +8 -0
- package/dist/cjs/index.js +143 -1
- package/dist/cjs/readPretty/arrayTable.d.ts +6 -0
- package/dist/cjs/readPretty/arrayTable.js +156 -0
- package/dist/cjs/readPretty/controls.d.ts +11 -0
- package/dist/cjs/readPretty/controls.js +68 -0
- package/dist/cjs/readPretty/decimal.d.ts +4 -0
- package/dist/cjs/readPretty/decimal.js +28 -0
- package/dist/cjs/readPretty/formily.d.ts +2 -0
- package/dist/cjs/readPretty/formily.js +71 -0
- package/dist/cjs/readPretty/hoistStatics.d.ts +1 -0
- package/dist/cjs/readPretty/hoistStatics.js +37 -0
- package/dist/cjs/readPretty/index.d.ts +11 -0
- package/dist/cjs/readPretty/index.js +70 -0
- package/dist/cjs/readPretty/selectValue.d.ts +7 -0
- package/dist/cjs/readPretty/selectValue.js +60 -0
- package/dist/cjs/readPretty/values.d.ts +4 -0
- package/dist/cjs/readPretty/values.js +49 -0
- package/dist/cjs/toolBar/index.d.ts +1 -0
- package/dist/cjs/toolBar/index.js +44 -10
- package/dist/cjs/toolBar/index.less +25 -7
- package/dist/cjs/utils/businessDecimal.d.ts +11 -0
- package/dist/cjs/utils/businessDecimal.js +53 -0
- package/dist/cjs/utils/contrast.d.ts +40 -0
- package/dist/cjs/utils/contrast.js +153 -0
- package/dist/esm/adapters/pagedApiAdapter.d.ts +2 -0
- package/dist/esm/ag-grid-plus/ag-gridPlus.js +5 -3
- package/dist/esm/ag-grid-plus/interface.d.ts +6 -0
- package/dist/esm/ag-grid-plus/utils/aggregation.js +1 -5
- package/dist/esm/ag-grid-plus/utils/columnProcessors.d.ts +2 -1
- package/dist/esm/ag-grid-plus/utils/columnProcessors.js +5 -2
- package/dist/esm/ag-grid-plus/utils/valueEnumColor.d.ts +17 -0
- package/dist/esm/ag-grid-plus/utils/valueEnumColor.js +95 -0
- package/dist/esm/dialogSelect/index.d.ts +31 -2
- package/dist/esm/dialogSelect/index.js +211 -106
- package/dist/esm/dialogSelect/index.less +39 -0
- package/dist/esm/draggableModal/index.js +12 -8
- package/dist/esm/entitySelect/index.d.ts +57 -0
- package/dist/esm/entitySelect/index.js +164 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.js +5 -0
- package/dist/esm/readPretty/arrayTable.d.ts +6 -0
- package/dist/esm/readPretty/arrayTable.js +147 -0
- package/dist/esm/readPretty/controls.d.ts +11 -0
- package/dist/esm/readPretty/controls.js +62 -0
- package/dist/esm/readPretty/decimal.d.ts +4 -0
- package/dist/esm/readPretty/decimal.js +22 -0
- package/dist/esm/readPretty/formily.d.ts +2 -0
- package/dist/esm/readPretty/formily.js +63 -0
- package/dist/esm/readPretty/hoistStatics.d.ts +1 -0
- package/dist/esm/readPretty/hoistStatics.js +31 -0
- package/dist/esm/readPretty/index.d.ts +11 -0
- package/dist/esm/readPretty/index.js +12 -0
- package/dist/esm/readPretty/selectValue.d.ts +7 -0
- package/dist/esm/readPretty/selectValue.js +53 -0
- package/dist/esm/readPretty/values.d.ts +4 -0
- package/dist/esm/readPretty/values.js +43 -0
- package/dist/esm/toolBar/index.d.ts +1 -0
- package/dist/esm/toolBar/index.js +43 -10
- package/dist/esm/toolBar/index.less +25 -7
- package/dist/esm/utils/businessDecimal.d.ts +11 -0
- package/dist/esm/utils/businessDecimal.js +47 -0
- package/dist/esm/utils/contrast.d.ts +40 -0
- package/dist/esm/utils/contrast.js +141 -0
- package/dist/umd/qc-ui.min.css +1 -1
- package/dist/umd/qc-ui.min.js +1 -1
- package/package.json +1 -1
|
@@ -5,14 +5,19 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _antd = require("antd");
|
|
8
|
+
var _react = require("@formily/react");
|
|
8
9
|
var _antdV = require("@formily/antd-v5");
|
|
9
10
|
var _icons = require("@ant-design/icons");
|
|
10
|
-
var
|
|
11
|
+
var _react2 = _interopRequireWildcard(require("react"));
|
|
11
12
|
var _agGridPlus = require("../ag-grid-plus");
|
|
12
13
|
var _ahooks = require("ahooks");
|
|
13
14
|
var _draggableModal = _interopRequireDefault(require("../draggableModal"));
|
|
14
15
|
var _adapters = require("../adapters");
|
|
15
|
-
var
|
|
16
|
+
var _controls = require("../readPretty/controls");
|
|
17
|
+
var _selectValue = require("../readPretty/selectValue");
|
|
18
|
+
require("./index.less");
|
|
19
|
+
var _excluded = ["request", "columnDefs", "value", "labelField", "valueField", "onChangeItem", "hideBtn", "useAutoComplete", "queryFun", "pagedApiAdapter", "modalWidth", "dialogZIndex", "dialogMode", "dialogPageSize", "dialogPageSizeOptions", "dialogGridKey", "dialogDataSource", "dialogIsRowSelectable", "dialogRenderer", "gridComponent"],
|
|
20
|
+
_excluded2 = ["request", "columnDefs", "labelField", "valueField", "onChangeItem", "hideBtn", "useAutoComplete", "queryFun", "pagedApiAdapter", "modalWidth", "dialogZIndex", "dialogMode", "dialogPageSize", "dialogPageSizeOptions", "dialogGridKey", "dialogDataSource", "dialogIsRowSelectable", "dialogRenderer", "gridComponent"];
|
|
16
21
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
22
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
18
23
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
@@ -34,177 +39,276 @@ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" !=
|
|
|
34
39
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
35
40
|
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
36
41
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
37
|
-
|
|
42
|
+
/** 选择窗口的行选择模式。 */
|
|
43
|
+
|
|
44
|
+
var DialogSelectInner = function DialogSelectInner(props) {
|
|
45
|
+
var _selectRows$length;
|
|
46
|
+
// 这些是本组件自己的属性,不能透传给 Select(否则会落到 DOM 上触发未知属性告警)。
|
|
38
47
|
var request = props.request,
|
|
39
48
|
columnDefs = props.columnDefs,
|
|
40
49
|
value = props.value,
|
|
41
50
|
labelField = props.labelField,
|
|
42
51
|
valueField = props.valueField,
|
|
43
52
|
onChangeItem = props.onChangeItem,
|
|
53
|
+
hideBtn = props.hideBtn,
|
|
54
|
+
useAutoComplete = props.useAutoComplete,
|
|
55
|
+
queryFun = props.queryFun,
|
|
56
|
+
pagedApiAdapter = props.pagedApiAdapter,
|
|
57
|
+
_props$modalWidth = props.modalWidth,
|
|
58
|
+
modalWidth = _props$modalWidth === void 0 ? 960 : _props$modalWidth,
|
|
59
|
+
_props$dialogZIndex = props.dialogZIndex,
|
|
60
|
+
dialogZIndex = _props$dialogZIndex === void 0 ? 9999 : _props$dialogZIndex,
|
|
61
|
+
dialogMode = props.dialogMode,
|
|
62
|
+
dialogPageSize = props.dialogPageSize,
|
|
63
|
+
dialogPageSizeOptions = props.dialogPageSizeOptions,
|
|
64
|
+
dialogGridKey = props.dialogGridKey,
|
|
65
|
+
dialogDataSource = props.dialogDataSource,
|
|
66
|
+
dialogIsRowSelectable = props.dialogIsRowSelectable,
|
|
67
|
+
dialogRenderer = props.dialogRenderer,
|
|
68
|
+
gridComponent = props.gridComponent,
|
|
44
69
|
rest = _objectWithoutProperties(props, _excluded);
|
|
70
|
+
var Grid = gridComponent !== null && gridComponent !== void 0 ? gridComponent : _agGridPlus.AgGridPlus;
|
|
45
71
|
var _useControllableValue = (0, _ahooks.useControllableValue)(props),
|
|
46
72
|
_useControllableValue2 = _slicedToArray(_useControllableValue, 2),
|
|
47
73
|
state = _useControllableValue2[0],
|
|
48
74
|
setState = _useControllableValue2[1];
|
|
49
|
-
var _useState = (0, _react.useState)(),
|
|
50
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
51
|
-
gridApi = _useState2[0],
|
|
52
|
-
setGridApi = _useState2[1];
|
|
53
75
|
var _useBoolean = (0, _ahooks.useBoolean)(false),
|
|
54
76
|
_useBoolean2 = _slicedToArray(_useBoolean, 2),
|
|
55
77
|
visible = _useBoolean2[0],
|
|
56
78
|
_useBoolean2$ = _useBoolean2[1],
|
|
57
79
|
setTrue = _useBoolean2$.setTrue,
|
|
58
80
|
setFalse = _useBoolean2$.setFalse;
|
|
59
|
-
var
|
|
60
|
-
|
|
61
|
-
selectRows =
|
|
62
|
-
setSelectRows =
|
|
63
|
-
var
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
var
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
var label = selectRow[labelField !== null && labelField !== void 0 ? labelField : 'name'];
|
|
75
|
-
if (props.mode === 'multiple' || props.mode === 'tags') {
|
|
76
|
-
return labelInValue ? selectRows.map(function (it) {
|
|
81
|
+
var _useState = (0, _react2.useState)(undefined),
|
|
82
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
83
|
+
selectRows = _useState2[0],
|
|
84
|
+
setSelectRows = _useState2[1];
|
|
85
|
+
var _theme$useToken = _antd.theme.useToken(),
|
|
86
|
+
token = _theme$useToken.token;
|
|
87
|
+
var isMultipleValue = props.mode === 'multiple' || props.mode === 'tags';
|
|
88
|
+
var selectionMode = dialogMode !== null && dialogMode !== void 0 ? dialogMode : isMultipleValue ? 'multiple' : 'single';
|
|
89
|
+
var key = valueField !== null && valueField !== void 0 ? valueField : 'id';
|
|
90
|
+
var localData = Array.isArray(dialogDataSource);
|
|
91
|
+
var getValue = function getValue(rows) {
|
|
92
|
+
var row = rows[0];
|
|
93
|
+
var labelKey = labelField !== null && labelField !== void 0 ? labelField : 'name';
|
|
94
|
+
if (isMultipleValue) {
|
|
95
|
+
return props.labelInValue ? rows.map(function (it) {
|
|
77
96
|
return {
|
|
78
|
-
value: it[
|
|
79
|
-
label: it[
|
|
97
|
+
value: it[key],
|
|
98
|
+
label: it[labelKey],
|
|
80
99
|
key: it === null || it === void 0 ? void 0 : it.id
|
|
81
100
|
};
|
|
82
|
-
}) :
|
|
83
|
-
return it[
|
|
101
|
+
}) : rows.map(function (it) {
|
|
102
|
+
return it[key];
|
|
84
103
|
});
|
|
85
|
-
} else {
|
|
86
|
-
return labelInValue ? {
|
|
87
|
-
value: value,
|
|
88
|
-
label: label
|
|
89
|
-
} : value;
|
|
90
104
|
}
|
|
105
|
+
return props.labelInValue ? {
|
|
106
|
+
value: row[key],
|
|
107
|
+
label: row[labelKey]
|
|
108
|
+
} : row[key];
|
|
91
109
|
};
|
|
92
|
-
var
|
|
93
|
-
var selectRow = selectRows[0];
|
|
94
|
-
setState(getValue(selectRows));
|
|
110
|
+
var close = function close() {
|
|
95
111
|
setFalse();
|
|
96
|
-
|
|
112
|
+
setSelectRows(undefined);
|
|
113
|
+
};
|
|
114
|
+
var confirmRows = function confirmRows(rows) {
|
|
115
|
+
if (!(rows !== null && rows !== void 0 && rows.length)) return;
|
|
116
|
+
if (dialogIsRowSelectable && rows.some(function (row) {
|
|
117
|
+
return !dialogIsRowSelectable(row);
|
|
118
|
+
})) return;
|
|
119
|
+
setState(getValue(rows));
|
|
120
|
+
close();
|
|
121
|
+
// 回传完整数据行,供调用方回填关联字段。
|
|
122
|
+
onChangeItem === null || onChangeItem === void 0 || onChangeItem(selectionMode === 'multiple' ? rows : rows[0]);
|
|
97
123
|
};
|
|
98
124
|
var onSelectionChanged = function onSelectionChanged(e) {
|
|
99
|
-
|
|
100
|
-
setSelectRows(selectedRows);
|
|
125
|
+
setSelectRows(e.api.getSelectedRows());
|
|
101
126
|
};
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
127
|
+
|
|
128
|
+
// 入口做成输入框内的后缀图标:不占右侧宽度,禁用/只读时不出现。@author nokecy
|
|
129
|
+
var canOpen = !props.disabled && !hideBtn;
|
|
130
|
+
var trigger = canOpen ? /*#__PURE__*/_react2.default.createElement("span", {
|
|
131
|
+
className: "qc-dialog-select-trigger",
|
|
132
|
+
role: "button",
|
|
133
|
+
"aria-label": "\u6253\u5F00\u9009\u62E9\u7A97\u53E3",
|
|
134
|
+
title: "\u9009\u62E9"
|
|
135
|
+
// 阻止冒泡:点图标只开选择窗口,不展开下拉也不抢走输入框焦点。
|
|
136
|
+
,
|
|
137
|
+
onMouseDown: function onMouseDown(e) {
|
|
138
|
+
e.preventDefault();
|
|
139
|
+
e.stopPropagation();
|
|
140
|
+
},
|
|
141
|
+
onClick: function onClick(e) {
|
|
142
|
+
e.stopPropagation();
|
|
143
|
+
setSelectRows(undefined);
|
|
144
|
+
setTrue();
|
|
106
145
|
}
|
|
107
|
-
},
|
|
146
|
+
}, /*#__PURE__*/_react2.default.createElement(_icons.SearchOutlined, null)) : undefined;
|
|
147
|
+
var mergedClassName = ['qc-dialog-select', rest.className].filter(Boolean).join(' ');
|
|
148
|
+
var triggerStyle = {
|
|
149
|
+
'--qc-dialog-select-trigger-color': token.colorTextTertiary,
|
|
150
|
+
'--qc-dialog-select-trigger-hover': token.colorPrimary
|
|
151
|
+
};
|
|
152
|
+
var commonProps = _objectSpread(_objectSpread({}, rest), {}, {
|
|
153
|
+
className: mergedClassName,
|
|
108
154
|
value: state,
|
|
109
|
-
style: _objectSpread(_objectSpread({},
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
155
|
+
style: _objectSpread(_objectSpread({}, triggerStyle), rest.style || {})
|
|
156
|
+
}, trigger ? {
|
|
157
|
+
suffixIcon: trigger
|
|
158
|
+
} : {});
|
|
159
|
+
return /*#__PURE__*/_react2.default.createElement(_react2.default.Fragment, null, useAutoComplete && !props.labelInValue ? /*#__PURE__*/_react2.default.createElement(_antd.AutoComplete, commonProps) : /*#__PURE__*/_react2.default.createElement(_antdV.Select, _extends({
|
|
114
160
|
maxTagCount: 'responsive',
|
|
115
161
|
filterOption: false
|
|
116
|
-
},
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
icon: /*#__PURE__*/_react.default.createElement(_icons.DashOutlined, null),
|
|
124
|
-
onClick: function onClick() {
|
|
125
|
-
setTrue();
|
|
126
|
-
},
|
|
127
|
-
disabled: rest.disabled
|
|
128
|
-
}) : null), /*#__PURE__*/_react.default.createElement(_draggableModal.default, {
|
|
129
|
-
width: 960,
|
|
162
|
+
}, commonProps)), dialogRenderer ? dialogRenderer({
|
|
163
|
+
open: visible,
|
|
164
|
+
mode: selectionMode,
|
|
165
|
+
onCancel: close,
|
|
166
|
+
onConfirm: confirmRows
|
|
167
|
+
}) : /*#__PURE__*/_react2.default.createElement(_draggableModal.default, {
|
|
168
|
+
width: modalWidth,
|
|
130
169
|
title: "\u9009\u62E9",
|
|
131
|
-
|
|
132
|
-
zIndex: 9999
|
|
133
|
-
},
|
|
170
|
+
zIndex: dialogZIndex,
|
|
134
171
|
destroyOnClose: true,
|
|
135
172
|
open: visible,
|
|
136
|
-
onOk:
|
|
137
|
-
|
|
138
|
-
|
|
173
|
+
onOk: function onOk() {
|
|
174
|
+
return confirmRows(selectRows || []);
|
|
175
|
+
},
|
|
176
|
+
onCancel: close,
|
|
177
|
+
okButtonProps: {
|
|
178
|
+
disabled: !(selectRows !== null && selectRows !== void 0 && selectRows.length)
|
|
179
|
+
}
|
|
180
|
+
}, selectionMode === 'multiple' && /*#__PURE__*/_react2.default.createElement("div", {
|
|
181
|
+
style: {
|
|
182
|
+
marginBottom: 8,
|
|
183
|
+
textAlign: 'right'
|
|
184
|
+
}
|
|
185
|
+
}, "\u5DF2\u9009 ", (_selectRows$length = selectRows === null || selectRows === void 0 ? void 0 : selectRows.length) !== null && _selectRows$length !== void 0 ? _selectRows$length : 0, " \u9879"), /*#__PURE__*/_react2.default.createElement(Grid, _extends({}, gridComponent ? {} : {
|
|
186
|
+
valueEnumContrast: true
|
|
187
|
+
}, {
|
|
188
|
+
gridKey: dialogGridKey,
|
|
189
|
+
dataSource: dialogDataSource,
|
|
190
|
+
hidePagination: localData
|
|
191
|
+
}, localData ? {
|
|
192
|
+
getRowId: function getRowId(_ref) {
|
|
193
|
+
var data = _ref.data;
|
|
194
|
+
return String(data[key]);
|
|
195
|
+
}
|
|
196
|
+
} : {}, {
|
|
139
197
|
style: {
|
|
140
198
|
height: 450
|
|
141
199
|
},
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
// 多选时重开弹窗要把已经选中的行勾回来,否则用户会以为之前的选择丢了。
|
|
200
|
+
pageSize: dialogPageSize,
|
|
201
|
+
pageSizeOptions: dialogPageSizeOptions,
|
|
202
|
+
onFirstDataRendered: function onFirstDataRendered(_ref2) {
|
|
203
|
+
var api = _ref2.api;
|
|
204
|
+
// 重开弹窗要把已经选中的行勾回来,否则用户会以为之前的选择丢了。
|
|
148
205
|
// 放在首屏数据渲染完成时做:弹窗是 destroyOnClose,打开的那一刻表格还没有数据。@author nokecy
|
|
149
|
-
|
|
150
|
-
var
|
|
151
|
-
var selected = state.map(function (it) {
|
|
206
|
+
var current = Array.isArray(state) ? state : state == null ? [] : [state];
|
|
207
|
+
var selected = current.map(function (it) {
|
|
152
208
|
return it && _typeof(it) === 'object' ? it.value : it;
|
|
153
209
|
});
|
|
210
|
+
if (!selected.length) return;
|
|
154
211
|
api.forEachNode(function (node) {
|
|
155
|
-
if (node.data && selected.includes(node.data[key]))
|
|
156
|
-
node.setSelected(true);
|
|
157
|
-
}
|
|
212
|
+
if (node.data && selected.includes(node.data[key])) node.setSelected(true);
|
|
158
213
|
});
|
|
159
214
|
},
|
|
160
|
-
search: (columnDefs === null || columnDefs === void 0 ? void 0 : columnDefs.filter(function (i) {
|
|
215
|
+
search: !localData && (columnDefs === null || columnDefs === void 0 ? void 0 : columnDefs.filter(function (i) {
|
|
161
216
|
return !i.hideInSearch;
|
|
162
217
|
}).length) !== 0,
|
|
163
218
|
onSelectionChanged: onSelectionChanged,
|
|
164
|
-
rowSelection:
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
219
|
+
rowSelection: dialogIsRowSelectable ? {
|
|
220
|
+
mode: selectionMode === 'multiple' ? 'multiRow' : 'singleRow',
|
|
221
|
+
isRowSelectable: function isRowSelectable(node) {
|
|
222
|
+
return !!node.data && dialogIsRowSelectable(node.data);
|
|
223
|
+
}
|
|
224
|
+
} : selectionMode === 'multiple' ? 'multiple' : 'single',
|
|
225
|
+
onRowDoubleClicked: function onRowDoubleClicked(_ref3) {
|
|
226
|
+
var data = _ref3.data;
|
|
227
|
+
if (dialogIsRowSelectable && !dialogIsRowSelectable(data)) return;
|
|
228
|
+
confirmRows([data]);
|
|
172
229
|
},
|
|
173
|
-
request: ( /*#__PURE__*/function () {
|
|
174
|
-
var
|
|
175
|
-
var
|
|
176
|
-
var adapter, data, requestData;
|
|
230
|
+
request: localData ? undefined : ( /*#__PURE__*/function () {
|
|
231
|
+
var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(params, _, record) {
|
|
232
|
+
var adapter, data;
|
|
177
233
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
178
234
|
while (1) switch (_context.prev = _context.next) {
|
|
179
235
|
case 0:
|
|
180
|
-
adapter =
|
|
236
|
+
adapter = pagedApiAdapter !== null && pagedApiAdapter !== void 0 ? pagedApiAdapter : _adapters.abpPagedApiAdapter;
|
|
181
237
|
_context.next = 3;
|
|
182
238
|
return request(adapter.toRequest({
|
|
183
|
-
filter:
|
|
239
|
+
filter: queryFun ? queryFun(params === null || params === void 0 ? void 0 : params.filter) : params === null || params === void 0 ? void 0 : params.filter,
|
|
184
240
|
sorter: params === null || params === void 0 ? void 0 : params.sorter,
|
|
185
241
|
skipCount: params === null || params === void 0 ? void 0 : params.skipCount,
|
|
186
|
-
maxResultCount: params === null || params === void 0 ? void 0 : params.maxResultCount
|
|
242
|
+
maxResultCount: params === null || params === void 0 ? void 0 : params.maxResultCount,
|
|
243
|
+
record: record
|
|
187
244
|
}), record);
|
|
188
245
|
case 3:
|
|
189
246
|
data = _context.sent;
|
|
190
|
-
|
|
247
|
+
return _context.abrupt("return", {
|
|
191
248
|
success: true,
|
|
192
249
|
data: adapter.getItems(data),
|
|
193
250
|
total: adapter.getTotal(data)
|
|
194
|
-
};
|
|
195
|
-
|
|
196
|
-
return _context.abrupt("return", requestData);
|
|
197
|
-
case 7:
|
|
251
|
+
});
|
|
252
|
+
case 5:
|
|
198
253
|
case "end":
|
|
199
254
|
return _context.stop();
|
|
200
255
|
}
|
|
201
256
|
}, _callee);
|
|
202
257
|
}));
|
|
203
258
|
return function (_x, _x2, _x3) {
|
|
204
|
-
return
|
|
259
|
+
return _ref4.apply(this, arguments);
|
|
205
260
|
};
|
|
206
261
|
}()),
|
|
207
262
|
columnDefs: columnDefs
|
|
208
|
-
})));
|
|
263
|
+
}))));
|
|
209
264
|
};
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* 选择字段。
|
|
268
|
+
*
|
|
269
|
+
* 不可编辑(自身 disabled、外层 ConfigProvider 禁用,或 Formily 字段 disabled / readOnly / readPretty)时
|
|
270
|
+
* 只显示名称,不保留输入框和弹窗入口;`value` / `defaultValue` 统一规范成 Select 能识别的形状
|
|
271
|
+
* (含 `{ value, label }` 嵌套对象),仅在调用方传了对应属性时才下发,以保持受控/非受控语义。
|
|
272
|
+
*
|
|
273
|
+
* @author nokecy
|
|
274
|
+
*/
|
|
275
|
+
var DialogSelect = (0, _react.observer)(function (props) {
|
|
276
|
+
var _props$disabled;
|
|
277
|
+
var field = (0, _react.useField)();
|
|
278
|
+
var _ConfigProvider$useCo = _antd.ConfigProvider.useConfig(),
|
|
279
|
+
componentDisabled = _ConfigProvider$useCo.componentDisabled;
|
|
280
|
+
var reading = (_props$disabled = props.disabled) !== null && _props$disabled !== void 0 ? _props$disabled : componentDisabled;
|
|
281
|
+
var safeProps = _objectSpread(_objectSpread(_objectSpread({}, props), 'value' in props ? {
|
|
282
|
+
value: (0, _selectValue.normalizeSelectValue)(props.value, props.labelInValue)
|
|
283
|
+
} : {}), 'defaultValue' in props ? {
|
|
284
|
+
defaultValue: (0, _selectValue.normalizeSelectValue)(props.defaultValue, props.labelInValue)
|
|
285
|
+
} : {});
|
|
286
|
+
if (reading || field !== null && field !== void 0 && field.disabled || field !== null && field !== void 0 && field.readOnly || field !== null && field !== void 0 && field.readPretty) {
|
|
287
|
+
// 阅读态只需要选项与值;弹窗、取数等属性不下发。
|
|
288
|
+
var request = safeProps.request,
|
|
289
|
+
columnDefs = safeProps.columnDefs,
|
|
290
|
+
labelField = safeProps.labelField,
|
|
291
|
+
valueField = safeProps.valueField,
|
|
292
|
+
onChangeItem = safeProps.onChangeItem,
|
|
293
|
+
hideBtn = safeProps.hideBtn,
|
|
294
|
+
useAutoComplete = safeProps.useAutoComplete,
|
|
295
|
+
queryFun = safeProps.queryFun,
|
|
296
|
+
pagedApiAdapter = safeProps.pagedApiAdapter,
|
|
297
|
+
modalWidth = safeProps.modalWidth,
|
|
298
|
+
dialogZIndex = safeProps.dialogZIndex,
|
|
299
|
+
dialogMode = safeProps.dialogMode,
|
|
300
|
+
dialogPageSize = safeProps.dialogPageSize,
|
|
301
|
+
dialogPageSizeOptions = safeProps.dialogPageSizeOptions,
|
|
302
|
+
dialogGridKey = safeProps.dialogGridKey,
|
|
303
|
+
dialogDataSource = safeProps.dialogDataSource,
|
|
304
|
+
dialogIsRowSelectable = safeProps.dialogIsRowSelectable,
|
|
305
|
+
dialogRenderer = safeProps.dialogRenderer,
|
|
306
|
+
gridComponent = safeProps.gridComponent,
|
|
307
|
+
selectProps = _objectWithoutProperties(safeProps, _excluded2);
|
|
308
|
+
return /*#__PURE__*/_react2.default.createElement(_controls.Select, _extends({}, selectProps, {
|
|
309
|
+
disabled: true
|
|
310
|
+
}));
|
|
311
|
+
}
|
|
312
|
+
return /*#__PURE__*/_react2.default.createElement(DialogSelectInner, safeProps);
|
|
313
|
+
});
|
|
210
314
|
var _default = exports.default = DialogSelect;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// 选择窗口入口放在输入框内部(后缀图标),不再在右侧另占一个按钮的宽度。@author nokecy
|
|
2
|
+
.qc-dialog-select {
|
|
3
|
+
width: 100%;
|
|
4
|
+
|
|
5
|
+
// 后缀图标可点;antd 默认给后缀 pointer-events: none。
|
|
6
|
+
.qc-dialog-select-trigger {
|
|
7
|
+
display: inline-flex;
|
|
8
|
+
align-items: center;
|
|
9
|
+
justify-content: center;
|
|
10
|
+
width: 100%;
|
|
11
|
+
height: 100%;
|
|
12
|
+
cursor: pointer;
|
|
13
|
+
pointer-events: auto;
|
|
14
|
+
color: var(--qc-dialog-select-trigger-color, rgba(0, 0, 0, 0.45));
|
|
15
|
+
transition: color 0.2s;
|
|
16
|
+
|
|
17
|
+
&:hover {
|
|
18
|
+
color: var(--qc-dialog-select-trigger-hover, #1677ff);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// 悬停时 antd 会把后缀淡出、换成清除图标;这里让入口始终可见,清除图标左移一格并排。
|
|
23
|
+
&.ant-select.ant-select:hover .ant-select-arrow:not(:last-child) {
|
|
24
|
+
opacity: 1;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
&.ant-select-allow-clear .ant-select-clear {
|
|
28
|
+
inset-inline-end: 31px;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
&.ant-select-allow-clear .ant-select-selection-item,
|
|
32
|
+
&.ant-select-allow-clear .ant-select-selection-placeholder {
|
|
33
|
+
padding-inline-end: 36px;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
&.ant-select-multiple .ant-select-selector {
|
|
37
|
+
padding-inline-end: 38px;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -76,14 +76,18 @@ var DraggableModal = function DraggableModal(props) {
|
|
|
76
76
|
// 修复 AgGrid 等组件在 Modal 中高度不展开的问题
|
|
77
77
|
// 当 Modal 打开时触发 window resize 事件
|
|
78
78
|
(0, _react.useEffect)(function () {
|
|
79
|
-
if (open)
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
});
|
|
86
|
-
}
|
|
79
|
+
if (!open) return;
|
|
80
|
+
// 使用 requestAnimationFrame 和 setTimeout 确保 DOM 完全渲染;卸载或关闭时取消,避免对已销毁的环境派发事件
|
|
81
|
+
var timer;
|
|
82
|
+
var frame = requestAnimationFrame(function () {
|
|
83
|
+
timer = setTimeout(function () {
|
|
84
|
+
window.dispatchEvent(new Event('resize'));
|
|
85
|
+
}, 100);
|
|
86
|
+
});
|
|
87
|
+
return function () {
|
|
88
|
+
cancelAnimationFrame(frame);
|
|
89
|
+
if (timer !== undefined) clearTimeout(timer);
|
|
90
|
+
};
|
|
87
91
|
}, [open]);
|
|
88
92
|
var _onStart = function onStart(_event, uiData) {
|
|
89
93
|
var _draggleRef$current;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { SelectProps } from 'antd/lib/select';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* 实体选择器的骨架。
|
|
5
|
+
*
|
|
6
|
+
* 各业务模块的实体选择器(线体、车间、物料、供应商……)此前是逐个复制出来的:
|
|
7
|
+
* 取数、防抖、受控值、下拉即查、labelInValue、弹窗表格列,每份各写一遍,
|
|
8
|
+
* 真正不同的只有请求函数、提示语和表格列。骨架收在这里,各模块只填自己的那几项。
|
|
9
|
+
*
|
|
10
|
+
* 骨架不认识任何业务契约:请求函数由调用方传入,不引用任何生成服务客户端。
|
|
11
|
+
*
|
|
12
|
+
* @author nokecy
|
|
13
|
+
*/
|
|
14
|
+
/** 取数入参:与后端分页查询约定一致。 */
|
|
15
|
+
export interface EntitySelectQuery {
|
|
16
|
+
Filter?: string;
|
|
17
|
+
SkipCount?: number;
|
|
18
|
+
MaxResultCount?: number;
|
|
19
|
+
Sorting?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface EntitySelectConfig {
|
|
22
|
+
/** 取数函数,通常是生成服务客户端里的 XxxGetListAsync。 */
|
|
23
|
+
request: (query: EntitySelectQuery) => Promise<any>;
|
|
24
|
+
/** 未选择时的提示语。 */
|
|
25
|
+
placeholder: string;
|
|
26
|
+
/** 弹窗内表格的列定义。 */
|
|
27
|
+
columnDefs: any[];
|
|
28
|
+
/** 下拉项与回填值取哪个字段。传字符串则固定;不传则由 useCode 在 code 与 id 之间切换。 */
|
|
29
|
+
valueField?: string;
|
|
30
|
+
/** 回填标签取哪个字段。不传则不向 DialogSelect 声明,沿用其自身默认。 */
|
|
31
|
+
labelField?: string;
|
|
32
|
+
/** 弹窗宽度,不传则用 DialogSelect 的默认值。 */
|
|
33
|
+
modalWidth?: number;
|
|
34
|
+
/** 单页取数条数,默认 300。 */
|
|
35
|
+
pageSize?: number;
|
|
36
|
+
/** useCode 的默认值,默认 true(以编码而非主键作为值)。 */
|
|
37
|
+
useCodeByDefault?: boolean;
|
|
38
|
+
/** 搜索关键字如何拼成后端过滤表达式,默认按 name 或 code 模糊匹配。返回 undefined 表示不带过滤条件。 */
|
|
39
|
+
buildFilter?: (keyword: string) => string | undefined;
|
|
40
|
+
/** 下拉项显示文本,默认「编码 - 名称」。 */
|
|
41
|
+
renderOptionLabel?: (item: any) => React.ReactNode;
|
|
42
|
+
/** 下拉项需要额外属性时的逃生舱:整项自渲染,优先于 renderOptionLabel。 */
|
|
43
|
+
renderOption?: (item: any, valueField: string) => React.ReactNode;
|
|
44
|
+
/** 联动回调的 prop 名,如 onWorkLineSelect。声明后组件支持 enableLinkage。 */
|
|
45
|
+
linkagePropName?: string;
|
|
46
|
+
/** 选择窗口里使用的表格组件,不传则用 AgGridPlus;宿主可注入自己封装过的表格基座。 */
|
|
47
|
+
gridComponent?: React.ComponentType<any>;
|
|
48
|
+
}
|
|
49
|
+
export interface EntitySelectProps extends SelectProps<any> {
|
|
50
|
+
/** 以编码而非主键作为选中值。 */
|
|
51
|
+
useCode?: boolean;
|
|
52
|
+
/** 选中后把整条记录回调给使用方,需配置 linkagePropName。 */
|
|
53
|
+
enableLinkage?: boolean;
|
|
54
|
+
}
|
|
55
|
+
declare const createEntitySelect: (config: EntitySelectConfig) => React.ForwardRefExoticComponent<Omit<any, "ref"> & React.RefAttributes<any>>;
|
|
56
|
+
export { createEntitySelect };
|
|
57
|
+
export default createEntitySelect;
|