@aplus-frontend/ui 6.31.1 → 6.33.0
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/es/index.mjs +65 -61
- package/es/src/ag-grid/components/body-cell/index.vue2.mjs +14 -12
- package/es/src/ag-grid/editable/form-item.vue.d.ts +16 -0
- package/es/src/ag-grid/editable/form-item.vue.mjs +215 -0
- package/es/src/ag-grid/editable/form-item.vue2.mjs +4 -0
- package/es/src/ag-grid/editable/index.vue.d.ts +18 -0
- package/es/src/ag-grid/editable/index.vue.mjs +233 -0
- package/es/src/ag-grid/editable/index.vue2.mjs +4 -0
- package/es/src/ag-grid/editable/interface.d.ts +96 -0
- package/es/src/ag-grid/editable/interface.mjs +1 -0
- package/es/src/ag-grid/editable/style/css.d.ts +0 -0
- package/es/src/ag-grid/editable/style/css.js +1 -0
- package/es/src/ag-grid/editable/style/index.d.ts +0 -0
- package/es/src/ag-grid/editable/style/index.js +1 -0
- package/es/src/ag-grid/editable/utils.d.ts +5 -0
- package/es/src/ag-grid/editable/utils.mjs +23 -0
- package/es/src/ag-grid/hooks/use-editable-api.d.ts +15 -0
- package/es/src/ag-grid/hooks/use-editable-api.mjs +150 -0
- package/es/src/ag-grid/hooks/use-editable-columns.d.ts +6 -0
- package/es/src/ag-grid/hooks/use-editable-columns.mjs +96 -0
- package/es/src/ag-grid/hooks/use-editable-form-item-api.d.ts +15 -0
- package/es/src/ag-grid/hooks/use-editable-form-item-api.mjs +174 -0
- package/es/src/ag-grid/index.d.ts +4 -1
- package/es/src/ag-grid/index.mjs +3 -0
- package/es/src/ag-grid/index.vue.mjs +70 -66
- package/es/src/ag-grid/interface.d.ts +20 -1
- package/es/src/ag-grid/utils.d.ts +2 -0
- package/es/src/ag-grid/utils.mjs +12 -7
- package/es/src/ap-drawer/interface.d.ts +5 -0
- package/es/src/ap-drawer/utils/createDrawer.mjs +22 -19
- package/es/src/ap-field/date/index.vue.mjs +29 -28
- package/es/src/ap-field/radio/index.vue.d.ts +4 -0
- package/es/src/ap-field/radio/index.vue.mjs +9 -8
- package/es/src/ap-field/radio/read.vue2.mjs +5 -4
- package/es/src/ap-field/rate/index.vue.d.ts +20 -0
- package/es/src/ap-field/rate/index.vue.mjs +12 -11
- package/es/src/ap-form/interface.d.ts +4 -0
- package/es/src/ap-form/item/index.vue.mjs +41 -39
- package/es/src/ap-form/items/checkbox/index.vue.mjs +5 -5
- package/es/src/ap-form/items/date/index.vue.mjs +9 -9
- package/es/src/ap-form/items/date-range/index.vue.mjs +8 -8
- package/es/src/ap-form/items/number/index.vue.mjs +11 -11
- package/es/src/ap-form/items/radio/index.vue.d.ts +8 -0
- package/es/src/ap-form/items/radio/index.vue.mjs +6 -6
- package/es/src/ap-form/items/select/index.vue.mjs +3 -3
- package/es/src/ap-form/items/switch/index.vue.mjs +2 -2
- package/es/src/ap-form/items/text/index.vue2.mjs +12 -12
- package/es/src/ap-form/items/text/password.vue.mjs +2 -2
- package/es/src/ap-form/items/text-area/index.vue.d.ts +4 -4
- package/es/src/ap-form/items/text-area/index.vue.mjs +3 -3
- package/es/src/ap-form/items/tree-select/index.vue.mjs +6 -6
- package/es/src/ap-form/render/item.vue.mjs +6 -5
- package/es/src/ap-grid/utils/editable.d.ts +2 -1
- package/es/src/ap-modal/index.d.ts +1 -0
- package/es/src/ap-modal/index.mjs +29 -27
- package/es/src/ap-modal/interface.d.ts +5 -0
- package/es/src/ap-modal/utils/confirm.mjs +35 -34
- package/es/src/ap-modal/utils/createModal.mjs +39 -37
- package/es/src/ap-modal/utils/util.d.ts +3 -0
- package/es/src/ap-modal/utils/util.mjs +8 -2
- package/es/src/ap-table/constants.d.ts +4 -0
- package/es/src/ap-table/interface.d.ts +5 -0
- package/es/src/ap-table/utils.mjs +76 -71
- package/es/src/ap-upload/components/MultipleFile.vue.d.ts +10 -0
- package/es/src/business/ap-appendix/ap-appendix.vue2.mjs +67 -68
- package/es/src/business/ap-view/ap-view.vue2.mjs +20 -18
- package/es/src/business/ap-view/interface.d.ts +4 -0
- package/es/src/business/batch-input-group/form-item.vue.mjs +1 -1
- package/es/src/config-provider/config-provider.mjs +32 -24
- package/es/src/editable-table/utils.d.ts +3 -2
- package/es/src/index.mjs +57 -53
- package/es/src/version.d.ts +1 -1
- package/es/src/version.mjs +1 -1
- package/lib/index.js +1 -1
- package/lib/src/ag-grid/components/body-cell/index.vue2.js +1 -1
- package/lib/src/ag-grid/editable/form-item.vue.d.ts +16 -0
- package/lib/src/ag-grid/editable/form-item.vue.js +1 -0
- package/lib/src/ag-grid/editable/form-item.vue2.js +1 -0
- package/lib/src/ag-grid/editable/index.vue.d.ts +18 -0
- package/lib/src/ag-grid/editable/index.vue.js +1 -0
- package/lib/src/ag-grid/editable/index.vue2.js +1 -0
- package/lib/src/ag-grid/editable/interface.d.ts +96 -0
- package/lib/src/ag-grid/editable/interface.js +1 -0
- package/lib/src/ag-grid/editable/style/css.cjs +1 -0
- package/lib/src/ag-grid/editable/style/css.d.ts +0 -0
- package/lib/src/ag-grid/editable/style/index.cjs +1 -0
- package/lib/src/ag-grid/editable/style/index.d.ts +0 -0
- package/lib/src/ag-grid/editable/utils.d.ts +5 -0
- package/lib/src/ag-grid/editable/utils.js +1 -0
- package/lib/src/ag-grid/hooks/use-editable-api.d.ts +15 -0
- package/lib/src/ag-grid/hooks/use-editable-api.js +1 -0
- package/lib/src/ag-grid/hooks/use-editable-columns.d.ts +6 -0
- package/lib/src/ag-grid/hooks/use-editable-columns.js +1 -0
- package/lib/src/ag-grid/hooks/use-editable-form-item-api.d.ts +15 -0
- package/lib/src/ag-grid/hooks/use-editable-form-item-api.js +1 -0
- package/lib/src/ag-grid/index.d.ts +4 -1
- package/lib/src/ag-grid/index.js +1 -1
- package/lib/src/ag-grid/index.vue.js +1 -1
- package/lib/src/ag-grid/interface.d.ts +20 -1
- package/lib/src/ag-grid/utils.d.ts +2 -0
- package/lib/src/ag-grid/utils.js +1 -1
- package/lib/src/ap-drawer/interface.d.ts +5 -0
- package/lib/src/ap-drawer/utils/createDrawer.js +1 -1
- package/lib/src/ap-field/date/index.vue.js +1 -1
- package/lib/src/ap-field/radio/index.vue.d.ts +4 -0
- package/lib/src/ap-field/radio/index.vue.js +1 -1
- package/lib/src/ap-field/radio/read.vue2.js +1 -1
- package/lib/src/ap-field/rate/index.vue.d.ts +20 -0
- package/lib/src/ap-field/rate/index.vue.js +1 -1
- package/lib/src/ap-form/interface.d.ts +4 -0
- package/lib/src/ap-form/item/index.vue.js +1 -1
- package/lib/src/ap-form/items/checkbox/index.vue.js +1 -1
- package/lib/src/ap-form/items/date/index.vue.js +1 -1
- package/lib/src/ap-form/items/date-range/index.vue.js +1 -1
- package/lib/src/ap-form/items/number/index.vue.js +1 -1
- package/lib/src/ap-form/items/radio/index.vue.d.ts +8 -0
- package/lib/src/ap-form/items/radio/index.vue.js +1 -1
- package/lib/src/ap-form/items/select/index.vue.js +1 -1
- package/lib/src/ap-form/items/switch/index.vue.js +1 -1
- package/lib/src/ap-form/items/text/index.vue2.js +1 -1
- package/lib/src/ap-form/items/text/password.vue.js +1 -1
- package/lib/src/ap-form/items/text-area/index.vue.d.ts +4 -4
- package/lib/src/ap-form/items/text-area/index.vue.js +1 -1
- package/lib/src/ap-form/items/tree-select/index.vue.js +1 -1
- package/lib/src/ap-form/render/item.vue.js +1 -1
- package/lib/src/ap-grid/utils/editable.d.ts +2 -1
- package/lib/src/ap-modal/index.d.ts +1 -0
- package/lib/src/ap-modal/index.js +1 -1
- package/lib/src/ap-modal/interface.d.ts +5 -0
- package/lib/src/ap-modal/utils/confirm.js +1 -1
- package/lib/src/ap-modal/utils/createModal.js +1 -1
- package/lib/src/ap-modal/utils/util.d.ts +3 -0
- package/lib/src/ap-modal/utils/util.js +1 -1
- package/lib/src/ap-table/constants.d.ts +4 -0
- package/lib/src/ap-table/interface.d.ts +5 -0
- package/lib/src/ap-table/utils.js +1 -1
- package/lib/src/ap-upload/components/MultipleFile.vue.d.ts +10 -0
- package/lib/src/business/ap-appendix/ap-appendix.vue2.js +1 -1
- package/lib/src/business/ap-view/ap-view.vue2.js +1 -1
- package/lib/src/business/ap-view/interface.d.ts +4 -0
- package/lib/src/business/batch-input-group/form-item.vue.js +1 -1
- package/lib/src/config-provider/config-provider.js +1 -1
- package/lib/src/editable-table/utils.d.ts +3 -2
- package/lib/src/index.js +1 -1
- package/lib/src/version.d.ts +1 -1
- package/lib/src/version.js +1 -1
- package/package.json +3 -3
- package/theme/ag-grid/editable.css +52 -0
- package/theme/ag-grid/editable.less +11 -0
- package/theme/ag-grid/index.css +19 -0
- package/theme/ag-grid/index.less +2 -0
- package/theme/ap-appendix/ap-appendix.css +4 -13
- package/theme/ap-appendix/ap-appendix.less +5 -12
- package/theme/ap-form/ap-form-item.css +12 -0
- package/theme/ap-form/ap-form-item.less +12 -0
- package/theme/ap-form/index.css +12 -0
- package/theme/ap-form/search-form.css +12 -0
- package/theme/ap-grid/editable.css +1 -0
- package/theme/ap-grid/editable.less +1 -0
- package/theme/ap-grid/index.css +13 -0
- package/theme/ap-grid/index.less +1 -0
- package/theme/ap-table/ap-table.css +12 -0
- package/theme/ap-table-modal/index.css +12 -0
- package/theme/css-var.css +2 -0
- package/theme/css-var.less +4 -0
- package/theme/editable-table/index.css +13 -0
- package/theme/editable-table/index.less +1 -0
- package/theme/index.css +28 -13
- package/es/src/business/ap-appendix/icons/empty-admin-icon.vue.d.ts +0 -3
- package/es/src/business/ap-appendix/icons/empty-admin-icon.vue.mjs +0 -20
- package/es/src/business/ap-appendix/icons/empty-aplus-icon.vue.d.ts +0 -3
- package/es/src/business/ap-appendix/icons/empty-aplus-icon.vue.mjs +0 -20
- package/lib/src/business/ap-appendix/icons/empty-admin-icon.vue.d.ts +0 -3
- package/lib/src/business/ap-appendix/icons/empty-admin-icon.vue.js +0 -1
- package/lib/src/business/ap-appendix/icons/empty-aplus-icon.vue.d.ts +0 -3
- package/lib/src/business/ap-appendix/icons/empty-aplus-icon.vue.js +0 -1
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { defineComponent as G, useSlots as H, ref as f, watch as O, unref as n, createBlock as U, openBlock as W, withCtx as d, createVNode as y, mergeProps as M, createSlots as $, renderList as q, renderSlot as J, normalizeProps as Q, guardReactiveProps as X } from "vue";
|
|
2
|
+
import { ApForm as u } from "../../ap-form/index.mjs";
|
|
3
|
+
import { isEqual as Y, isArray as w, omit as Z } from "lodash-unified";
|
|
4
|
+
import "../../config-provider/index.mjs";
|
|
5
|
+
import "../../hooks/index.mjs";
|
|
6
|
+
import { useGetEditableColumns as ee } from "../hooks/use-editable-columns.mjs";
|
|
7
|
+
import "../index.vue2.mjs";
|
|
8
|
+
import { useEditableApi as oe } from "../hooks/use-editable-api.mjs";
|
|
9
|
+
import { arrayToObject as p } from "./utils.mjs";
|
|
10
|
+
import { useNamespace as ae } from "../../config-provider/hooks/use-namespace.mjs";
|
|
11
|
+
import { useControllableValue as te } from "../../hooks/useControllableValue.mjs";
|
|
12
|
+
import { useGlobalConfig as ne } from "../../config-provider/hooks/use-global-config.mjs";
|
|
13
|
+
import le from "../index.vue.mjs";
|
|
14
|
+
const be = /* @__PURE__ */ G({
|
|
15
|
+
name: "EditableGrid",
|
|
16
|
+
__name: "index",
|
|
17
|
+
props: {
|
|
18
|
+
dropdownPrefixCls: {},
|
|
19
|
+
bordered: {
|
|
20
|
+
type: Boolean
|
|
21
|
+
},
|
|
22
|
+
locale: {},
|
|
23
|
+
onResizeColumn: {},
|
|
24
|
+
getPopupContainer: {},
|
|
25
|
+
scroll: {},
|
|
26
|
+
sortDirections: {},
|
|
27
|
+
showSorterTooltip: {
|
|
28
|
+
type: [Boolean, Object]
|
|
29
|
+
},
|
|
30
|
+
prefixCls: {},
|
|
31
|
+
rowKey: {
|
|
32
|
+
type: [String, Function],
|
|
33
|
+
default: "key"
|
|
34
|
+
},
|
|
35
|
+
tableLayout: {},
|
|
36
|
+
title: {},
|
|
37
|
+
id: {},
|
|
38
|
+
showHeader: {
|
|
39
|
+
type: Boolean
|
|
40
|
+
},
|
|
41
|
+
components: {},
|
|
42
|
+
customRow: {},
|
|
43
|
+
customHeaderRow: {},
|
|
44
|
+
direction: {},
|
|
45
|
+
expandFixed: {
|
|
46
|
+
type: [String, Boolean]
|
|
47
|
+
},
|
|
48
|
+
expandColumnWidth: {},
|
|
49
|
+
expandedRowKeys: {},
|
|
50
|
+
defaultExpandedRowKeys: {},
|
|
51
|
+
expandedRowRender: {},
|
|
52
|
+
expandRowByClick: {
|
|
53
|
+
type: Boolean
|
|
54
|
+
},
|
|
55
|
+
expandIcon: {},
|
|
56
|
+
onExpand: {},
|
|
57
|
+
onExpandedRowsChange: {},
|
|
58
|
+
defaultExpandAllRows: {
|
|
59
|
+
type: Boolean
|
|
60
|
+
},
|
|
61
|
+
indentSize: {},
|
|
62
|
+
expandIconColumnIndex: {},
|
|
63
|
+
showExpandColumn: {
|
|
64
|
+
type: Boolean
|
|
65
|
+
},
|
|
66
|
+
expandedRowClassName: {},
|
|
67
|
+
childrenColumnName: {},
|
|
68
|
+
rowExpandable: {},
|
|
69
|
+
transformCellText: {},
|
|
70
|
+
rowSelection: {
|
|
71
|
+
type: Boolean
|
|
72
|
+
},
|
|
73
|
+
onLoadingChange: {},
|
|
74
|
+
onShownColumnsChange: {},
|
|
75
|
+
pagination: {
|
|
76
|
+
type: [Boolean, Object],
|
|
77
|
+
default: !1
|
|
78
|
+
},
|
|
79
|
+
searchFormWrapperStyle: {},
|
|
80
|
+
tableWrapperStyle: {},
|
|
81
|
+
wrapperStyle: {},
|
|
82
|
+
tableStyle: {},
|
|
83
|
+
adaptive: {
|
|
84
|
+
type: Boolean
|
|
85
|
+
},
|
|
86
|
+
columnResizable: {
|
|
87
|
+
type: Boolean,
|
|
88
|
+
default: !1
|
|
89
|
+
},
|
|
90
|
+
loading: {
|
|
91
|
+
type: Boolean,
|
|
92
|
+
default: void 0
|
|
93
|
+
},
|
|
94
|
+
summary: {},
|
|
95
|
+
rowHeight: {
|
|
96
|
+
default: 66
|
|
97
|
+
},
|
|
98
|
+
advanceRenderer: {
|
|
99
|
+
type: Boolean
|
|
100
|
+
},
|
|
101
|
+
browserTooltips: {
|
|
102
|
+
type: Boolean
|
|
103
|
+
},
|
|
104
|
+
virtual: {
|
|
105
|
+
type: [Boolean, Object],
|
|
106
|
+
default: void 0
|
|
107
|
+
},
|
|
108
|
+
onRowClicked: {},
|
|
109
|
+
onScrollEnd: {},
|
|
110
|
+
rowClassName: {},
|
|
111
|
+
rowClassRules: {},
|
|
112
|
+
autoHeight: {
|
|
113
|
+
type: Boolean
|
|
114
|
+
},
|
|
115
|
+
onUpdate: {},
|
|
116
|
+
columns: {},
|
|
117
|
+
value: {},
|
|
118
|
+
defaultValue: {},
|
|
119
|
+
"onUpdate:value": {},
|
|
120
|
+
onChange: {},
|
|
121
|
+
maxLength: {},
|
|
122
|
+
name: {
|
|
123
|
+
default: "ap-editable-table-inner-name"
|
|
124
|
+
},
|
|
125
|
+
onFieldChange: {}
|
|
126
|
+
},
|
|
127
|
+
emits: ["update:value"],
|
|
128
|
+
setup(g, {
|
|
129
|
+
expose: h,
|
|
130
|
+
emit: b
|
|
131
|
+
}) {
|
|
132
|
+
const v = H(), o = g, {
|
|
133
|
+
b: C
|
|
134
|
+
} = ae("editable-aggrid"), R = b, s = f(), {
|
|
135
|
+
value: r,
|
|
136
|
+
updateValue: m
|
|
137
|
+
} = te(o, R), l = f(), x = u.useWatch(o.name, l);
|
|
138
|
+
O(r, (e) => {
|
|
139
|
+
const a = p(e, o.rowKey);
|
|
140
|
+
Y(a, n(x)) || l.value?.setFieldValue(o.name, a);
|
|
141
|
+
}, {
|
|
142
|
+
deep: !0
|
|
143
|
+
});
|
|
144
|
+
const B = ne("valueTypeMap"), S = ee(o, B), {
|
|
145
|
+
add: _,
|
|
146
|
+
addMultiple: F,
|
|
147
|
+
remove: E,
|
|
148
|
+
removeByKey: T,
|
|
149
|
+
getRowData: N,
|
|
150
|
+
getRowsData: A,
|
|
151
|
+
setRowData: V,
|
|
152
|
+
clear: k,
|
|
153
|
+
refreshRowIds: i
|
|
154
|
+
} = oe(o, l, r, m);
|
|
155
|
+
function D() {
|
|
156
|
+
const e = s.value?._internalGridApi;
|
|
157
|
+
if (!i.value?.length || !e)
|
|
158
|
+
return;
|
|
159
|
+
const a = i.value.map((t) => e.getRowNode(t)).filter((t) => !!t);
|
|
160
|
+
e.refreshCells({
|
|
161
|
+
rowNodes: a,
|
|
162
|
+
force: !0
|
|
163
|
+
}), i.value = [];
|
|
164
|
+
}
|
|
165
|
+
function K() {
|
|
166
|
+
l.value?.resetFields();
|
|
167
|
+
}
|
|
168
|
+
function j(e) {
|
|
169
|
+
return e ? (w(e) ? e : [e]).map((t) => w(t) ? [o.name, ...t] : [o.name, t]) : void 0;
|
|
170
|
+
}
|
|
171
|
+
async function z(e, a) {
|
|
172
|
+
return (await l.value?.validateFields(j(e), a))?.[o.name];
|
|
173
|
+
}
|
|
174
|
+
function I(e) {
|
|
175
|
+
m(e);
|
|
176
|
+
const a = p(e, o.rowKey);
|
|
177
|
+
l.value?.setFieldValue(o.name, a);
|
|
178
|
+
}
|
|
179
|
+
function L(e) {
|
|
180
|
+
const a = e === "end" ? r.value.length - 1 : e;
|
|
181
|
+
s.value?.scrollToRow(a);
|
|
182
|
+
}
|
|
183
|
+
return h({
|
|
184
|
+
resetFields: K,
|
|
185
|
+
validateFields: z,
|
|
186
|
+
add: _,
|
|
187
|
+
addMultiple: F,
|
|
188
|
+
remove: E,
|
|
189
|
+
removeByKey: T,
|
|
190
|
+
getRowData: N,
|
|
191
|
+
getRowsData: A,
|
|
192
|
+
setRowData: V,
|
|
193
|
+
clear: k,
|
|
194
|
+
setTableData: I,
|
|
195
|
+
scrollTo: L
|
|
196
|
+
}), (e, a) => (W(), U(n(u), {
|
|
197
|
+
ref_key: "formRef",
|
|
198
|
+
ref: l,
|
|
199
|
+
"initial-values": {
|
|
200
|
+
[o.name]: n(p)(n(r), o.rowKey)
|
|
201
|
+
},
|
|
202
|
+
style: {
|
|
203
|
+
height: "100%"
|
|
204
|
+
}
|
|
205
|
+
}, {
|
|
206
|
+
default: d(() => [y(n(u).FormItem, {
|
|
207
|
+
name: e.name,
|
|
208
|
+
"no-style": ""
|
|
209
|
+
}, {
|
|
210
|
+
default: d(() => [y(le, M(n(Z)(o, ["name", "value", "onUpdate:value", "maxLength", "onChange", "defaultValue"]), {
|
|
211
|
+
ref_key: "tableRef",
|
|
212
|
+
ref: s,
|
|
213
|
+
class: n(C)(),
|
|
214
|
+
size: "mini",
|
|
215
|
+
columns: n(S),
|
|
216
|
+
"data-source": n(r),
|
|
217
|
+
"search-form": !1,
|
|
218
|
+
onUpdate: D
|
|
219
|
+
}), $({
|
|
220
|
+
_: 2
|
|
221
|
+
}, [q(v, (t, c) => ({
|
|
222
|
+
name: c,
|
|
223
|
+
fn: d((P) => [J(e.$slots, c, Q(X(P || {})))])
|
|
224
|
+
}))]), 1040, ["class", "columns", "data-source"])]),
|
|
225
|
+
_: 3
|
|
226
|
+
}, 8, ["name"])]),
|
|
227
|
+
_: 3
|
|
228
|
+
}, 8, ["initial-values"]));
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
export {
|
|
232
|
+
be as default
|
|
233
|
+
};
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { Recordable } from '../../type';
|
|
2
|
+
import { ApTableValueFields, ApTableValueTypes, CommonFieldReturnType, FieldPropsType } from '../../ap-table/interface';
|
|
3
|
+
import { AgGridColumnType, AgGridProps } from '../interface';
|
|
4
|
+
import { VNode } from 'vue';
|
|
5
|
+
import { DataIndex } from '@aplus-frontend/antdv/es/vc-table/interface';
|
|
6
|
+
import { EditableTableExpose } from '../../editable-table';
|
|
7
|
+
import { NamePath } from '@aplus-frontend/antdv/es/form/interface';
|
|
8
|
+
import { ApFormItemProps } from '../../ap-form';
|
|
9
|
+
export type EditableAgGridColumnType<RecordType = any, ExtraValueType = 'text', ValueType extends ApTableValueTypes = ApTableValueTypes, MergedValueType extends ExtraValueType | ValueType = ExtraValueType | ValueType> = MergedValueType extends ExtraValueType | ValueType ? Omit<AgGridColumnType<RecordType, ExtraValueType, ValueType>, 'children' | 'customRender' | 'hideInSearch' | 'customRenderFormItem' | 'fieldProps'> & {
|
|
10
|
+
children?: EditableAgGridColumnType<RecordType, ExtraValueType, ValueType>[];
|
|
11
|
+
/**
|
|
12
|
+
* 是否可编辑
|
|
13
|
+
*/
|
|
14
|
+
editable?: boolean | ((text: any, record: RecordType, index: number) => boolean);
|
|
15
|
+
/**
|
|
16
|
+
* 自定义表单,适用于内置`valueType`不满足的情况下使用
|
|
17
|
+
*/
|
|
18
|
+
customRenderFormItem?: (config: EditableAgGridColumnType<RecordType>, fieldProps: Recordable, editable: boolean, record: RecordType) => any;
|
|
19
|
+
/**
|
|
20
|
+
* 指定值类型(将会用于普通列和可编辑表格的渲染)
|
|
21
|
+
*/
|
|
22
|
+
valueType?: MergedValueType;
|
|
23
|
+
/**
|
|
24
|
+
* 值类型额外配置的参数(支持函数)
|
|
25
|
+
*/
|
|
26
|
+
fieldProps?: FieldPropsType<Extract<MergedValueType, ValueType> extends never ? CommonFieldReturnType : ApTableValueFields[Extract<MergedValueType, ValueType>], RecordType, ExtraValueType, ValueType, MergedValueType>;
|
|
27
|
+
/**
|
|
28
|
+
* 自定义渲染,添加了`editable`以及`originalNode`
|
|
29
|
+
* @param opt
|
|
30
|
+
* @returns
|
|
31
|
+
*/
|
|
32
|
+
customRender?: (opt: {
|
|
33
|
+
value: any;
|
|
34
|
+
text: any;
|
|
35
|
+
record: RecordType;
|
|
36
|
+
index: number;
|
|
37
|
+
renderIndex: number;
|
|
38
|
+
column: AgGridColumnType<RecordType>;
|
|
39
|
+
editable?: boolean;
|
|
40
|
+
originalNode?: VNode;
|
|
41
|
+
}) => any;
|
|
42
|
+
/**
|
|
43
|
+
* 是否渲染必填标记(只渲染标记不生成校验规则)
|
|
44
|
+
*/
|
|
45
|
+
markRequired?: boolean;
|
|
46
|
+
} : never;
|
|
47
|
+
export type EditableAgGridProps<RecordType = any> = Omit<AgGridProps<RecordType>, 'columns' | 'dataSource' | 'onChange' | 'card' | 'request' | 'params' | 'defaultData' | 'searchForm' | 'beforeSearchSubmit' | 'manual' | 'size'> & {
|
|
48
|
+
/**
|
|
49
|
+
* 列配置
|
|
50
|
+
*/
|
|
51
|
+
columns?: EditableAgGridColumnType<RecordType, any>[];
|
|
52
|
+
/**
|
|
53
|
+
* 表格数据v-model
|
|
54
|
+
*/
|
|
55
|
+
value?: RecordType[];
|
|
56
|
+
/**
|
|
57
|
+
* 表格数据默认值(只生效一次,如果是异步数据,请使用`v-model`)
|
|
58
|
+
*/
|
|
59
|
+
defaultValue?: RecordType[];
|
|
60
|
+
'onUpdate:value'?: (value: RecordType[]) => void;
|
|
61
|
+
/**
|
|
62
|
+
* 数据修改时触发onChange(也包含数据的删除)
|
|
63
|
+
* @param value
|
|
64
|
+
* @returns
|
|
65
|
+
*/
|
|
66
|
+
onChange?: (value: RecordType[]) => void;
|
|
67
|
+
/**
|
|
68
|
+
* 表格最大行数,超过行后将无法调用相关API新增
|
|
69
|
+
*/
|
|
70
|
+
maxLength?: number;
|
|
71
|
+
/**
|
|
72
|
+
* 设置可编辑表格的名字,如果不传,将会使用默认值
|
|
73
|
+
*/
|
|
74
|
+
name?: any;
|
|
75
|
+
/**
|
|
76
|
+
* 当字段值变更的时候触发(注意,向表单设置值并不会触发)
|
|
77
|
+
* @returns
|
|
78
|
+
*/
|
|
79
|
+
onFieldChange?: (rowIndex: number, fieldName: DataIndex, newValue: any) => void;
|
|
80
|
+
};
|
|
81
|
+
export type EditableAgGridExpose<RecordType = any, ModelType = RecordType[]> = Omit<EditableTableExpose<ModelType, RecordType>, 'scrollTo' | 'remove'> & {
|
|
82
|
+
scrollTo: (index: number | 'end') => void;
|
|
83
|
+
remove: (data: RecordType | RecordType[]) => void;
|
|
84
|
+
};
|
|
85
|
+
export type EditableAgGridFormItemExpose<RecordType = any, ModelType = RecordType[]> = Omit<EditableAgGridExpose<RecordType, ModelType>, 'resetFields' | 'validateFields'>;
|
|
86
|
+
export type EditableAgGridFormItemProps<RecordType = any> = Omit<EditableAgGridProps<RecordType>, 'name' | 'value' | 'onUpdate:value'> & {
|
|
87
|
+
label?: string;
|
|
88
|
+
/**
|
|
89
|
+
* FormItem的name
|
|
90
|
+
*/
|
|
91
|
+
name: NamePath;
|
|
92
|
+
/**
|
|
93
|
+
* 额外的表单项配置属性
|
|
94
|
+
*/
|
|
95
|
+
formItem?: Partial<Omit<ApFormItemProps, 'name' | 'label'>>;
|
|
96
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '@aplus-frontend/ui/theme/ag-grid/editable.css';
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '@aplus-frontend/ui/theme/ag-grid/editable.less';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Recordable } from '../../type';
|
|
2
|
+
import { AgGridProps } from '../interface';
|
|
3
|
+
export declare function getRowKey(record: any, index: number | undefined, rowKey: AgGridProps['rowKey']): any;
|
|
4
|
+
export declare function arrayToObject(array: any[], rowKey: AgGridProps['rowKey']): Recordable;
|
|
5
|
+
export declare function updateArrItem(arr: any[], rowKey: AgGridProps['rowKey'], obj: Recordable): any[];
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { isString as a } from "lodash-unified";
|
|
2
|
+
function c(r, n, t) {
|
|
3
|
+
if (t)
|
|
4
|
+
return a(t) ? r[t] : t(r, n);
|
|
5
|
+
}
|
|
6
|
+
function s(r, n) {
|
|
7
|
+
const t = {};
|
|
8
|
+
return r.forEach((e, u) => {
|
|
9
|
+
const o = c(e, u, n);
|
|
10
|
+
t[o] = e;
|
|
11
|
+
}), t;
|
|
12
|
+
}
|
|
13
|
+
function g(r, n, t) {
|
|
14
|
+
return r.map((e, u) => {
|
|
15
|
+
const o = c(e, u, n);
|
|
16
|
+
return t[o] ?? e;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
export {
|
|
20
|
+
s as arrayToObject,
|
|
21
|
+
c as getRowKey,
|
|
22
|
+
g as updateArrItem
|
|
23
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Ref, ShallowRef } from 'vue';
|
|
2
|
+
import { ApFormInternalInstance, ApFormExpose } from '../../ap-form';
|
|
3
|
+
import { EditableAgGridProps } from '../editable/interface';
|
|
4
|
+
import { Key } from '@aplus-frontend/antdv/es/_util/type';
|
|
5
|
+
export declare const useEditableApi: <RecordType>(props: EditableAgGridProps<RecordType>, formApi: Ref<ApFormExpose | undefined> | ApFormInternalInstance | undefined, tableData: Ref<RecordType[]>, updateTableData?: (newData: RecordType[]) => void) => {
|
|
6
|
+
add: (defaultValue?: Partial<RecordType>, insertIndex?: number) => void;
|
|
7
|
+
addMultiple: (list: number | Partial<RecordType>[], insetIn?: "prefix" | "suffix") => void;
|
|
8
|
+
remove: (data: RecordType | RecordType[]) => void;
|
|
9
|
+
removeByKey: (key: Key | Key[]) => void;
|
|
10
|
+
getRowData: (index: number) => RecordType;
|
|
11
|
+
getRowsData: () => RecordType[];
|
|
12
|
+
setRowData: (index: string | number, payload: any, merge?: boolean) => void;
|
|
13
|
+
clear: () => void;
|
|
14
|
+
refreshRowIds: ShallowRef<string[], string[]>;
|
|
15
|
+
};
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { shallowRef as _, computed as S, unref as d, isRef as z } from "vue";
|
|
2
|
+
import { isDef as h } from "../../utils/index.mjs";
|
|
3
|
+
import { isFunction as x, isUndefined as A, isNumber as K, cloneDeep as E, isArray as I, isString as N } from "lodash-unified";
|
|
4
|
+
import { arrayToObject as U } from "../editable/utils.mjs";
|
|
5
|
+
let $ = 0;
|
|
6
|
+
function R() {
|
|
7
|
+
return `_ag_grid${$++}`;
|
|
8
|
+
}
|
|
9
|
+
const J = (n, m, i, g) => {
|
|
10
|
+
const w = _([]), y = S(() => z(m) ? d(m) : m);
|
|
11
|
+
function F(u, r) {
|
|
12
|
+
const l = d(i)?.length || 0;
|
|
13
|
+
if (h(n.maxLength) && l >= n.maxLength || !u && x(n.rowKey))
|
|
14
|
+
return;
|
|
15
|
+
const f = {
|
|
16
|
+
...u || { [n.rowKey]: R() }
|
|
17
|
+
};
|
|
18
|
+
y.value?.setFieldValue?.(
|
|
19
|
+
n.name,
|
|
20
|
+
f,
|
|
21
|
+
!0,
|
|
22
|
+
(o, s) => {
|
|
23
|
+
const e = c(f, void 0, n.rowKey);
|
|
24
|
+
if (o[s] ? o[s][e] = f : o[s] = { [e]: f }, !i.value) {
|
|
25
|
+
i.value = [f];
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
A(r) ? i.value.push(f) : (w.value = i.value.map(
|
|
29
|
+
(t, v) => v < r ? null : c(t, v, n.rowKey)
|
|
30
|
+
).filter(Boolean), i.value.splice(r, 0, f));
|
|
31
|
+
}
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
function j(u, r = "suffix") {
|
|
35
|
+
const l = d(i)?.length || 0, f = K(u) ? u : u.length;
|
|
36
|
+
if (h(n.maxLength) && l + f > n.maxLength || K(u) && x(n.rowKey))
|
|
37
|
+
return;
|
|
38
|
+
const o = K(u) ? new Array(u).fill(0).map(() => ({ [n.rowKey]: R() })) : E(u), s = U(o, n.rowKey);
|
|
39
|
+
y.value?.setFieldValue?.(
|
|
40
|
+
n.name,
|
|
41
|
+
o,
|
|
42
|
+
!0,
|
|
43
|
+
(e, t) => {
|
|
44
|
+
if (e[t] ? Object.assign(e[t], s) : e[t] = s, !i.value) {
|
|
45
|
+
i.value = [...o];
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
r === "suffix" ? i.value.push(...o) : (w.value = i.value.map(
|
|
49
|
+
(v, T) => c(v, T, n.rowKey)
|
|
50
|
+
), i.value.unshift(...o));
|
|
51
|
+
}
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
function k(u) {
|
|
55
|
+
const r = I(u) ? u : [u];
|
|
56
|
+
y.value?.setFieldValue?.(
|
|
57
|
+
n.name,
|
|
58
|
+
void 0,
|
|
59
|
+
!0,
|
|
60
|
+
(l, f) => {
|
|
61
|
+
for (const e of r) {
|
|
62
|
+
const t = c(e, void 0, n.rowKey);
|
|
63
|
+
delete l[f][t];
|
|
64
|
+
}
|
|
65
|
+
const o = i.value.filter(
|
|
66
|
+
(e) => !r.includes(e)
|
|
67
|
+
), s = i.value.findIndex(
|
|
68
|
+
(e) => r.includes(e)
|
|
69
|
+
);
|
|
70
|
+
w.value = i.value.map(
|
|
71
|
+
(e, t) => t <= s ? null : c(e, t, n.rowKey)
|
|
72
|
+
).filter(Boolean), g?.(o);
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
function c(u, r, l) {
|
|
77
|
+
if (l)
|
|
78
|
+
return N(l) ? u[l] : l(u, r);
|
|
79
|
+
}
|
|
80
|
+
function L(u) {
|
|
81
|
+
const r = new Set(I(u) ? u : [u]);
|
|
82
|
+
r.size !== 0 && y.value?.setFieldValue?.(
|
|
83
|
+
n.name,
|
|
84
|
+
void 0,
|
|
85
|
+
!0,
|
|
86
|
+
(l, f) => {
|
|
87
|
+
for (const e of r)
|
|
88
|
+
delete l[f][e];
|
|
89
|
+
const o = i.value.filter(
|
|
90
|
+
(e, t) => !r.has(c(e, t, n.rowKey))
|
|
91
|
+
), s = i.value.findIndex(
|
|
92
|
+
(e, t) => r.has(c(e, t, n.rowKey))
|
|
93
|
+
);
|
|
94
|
+
w.value = i.value.map(
|
|
95
|
+
(e, t) => t <= s ? null : c(e, t, n.rowKey)
|
|
96
|
+
).filter(Boolean), g?.(o);
|
|
97
|
+
}
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
function O(u) {
|
|
101
|
+
return d(i)?.[u];
|
|
102
|
+
}
|
|
103
|
+
function V() {
|
|
104
|
+
return d(i);
|
|
105
|
+
}
|
|
106
|
+
function B(u, r, l = !0) {
|
|
107
|
+
y.value?.setFieldValue?.(
|
|
108
|
+
n.name,
|
|
109
|
+
void 0,
|
|
110
|
+
!0,
|
|
111
|
+
(f, o) => {
|
|
112
|
+
const s = i.value.findIndex(
|
|
113
|
+
(t, v) => u === v
|
|
114
|
+
);
|
|
115
|
+
if (!~s)
|
|
116
|
+
return;
|
|
117
|
+
const e = c(
|
|
118
|
+
i.value[s],
|
|
119
|
+
s,
|
|
120
|
+
n.rowKey
|
|
121
|
+
);
|
|
122
|
+
if (e && !(!f[o] || !f[o][e])) {
|
|
123
|
+
if (!l) {
|
|
124
|
+
const t = Object.keys(f[o][e]);
|
|
125
|
+
for (const v of t)
|
|
126
|
+
v !== n.rowKey && delete f[o][e][v];
|
|
127
|
+
}
|
|
128
|
+
Object.assign(f[o][e], { ...r });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
function a() {
|
|
134
|
+
y.value?.setFieldValue?.(n.name, {}), g?.([]);
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
add: F,
|
|
138
|
+
addMultiple: j,
|
|
139
|
+
remove: k,
|
|
140
|
+
removeByKey: L,
|
|
141
|
+
getRowData: O,
|
|
142
|
+
getRowsData: V,
|
|
143
|
+
setRowData: B,
|
|
144
|
+
clear: a,
|
|
145
|
+
refreshRowIds: w
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
export {
|
|
149
|
+
J as useEditableApi
|
|
150
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ComputedRef, Ref } from 'vue';
|
|
2
|
+
import { EditableAgGridProps } from '../editable/interface';
|
|
3
|
+
import { ValueTypeRenderConfig } from '../../config-provider';
|
|
4
|
+
import { AgGridColumnType } from '../interface';
|
|
5
|
+
export declare const useGetEditableColumns: (props: EditableAgGridProps, extraValueTypes: Ref<Record<string, ValueTypeRenderConfig> | undefined>, shadowName?: string) => ComputedRef<AgGridColumnType[]>;
|
|
6
|
+
export default useGetEditableColumns;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { unref as w, computed as E } from "vue";
|
|
2
|
+
import { isFunction as F, isArray as g } from "lodash-unified";
|
|
3
|
+
import { mergeClass as p, getColumnIsRequired as v } from "../../editable-table/utils.mjs";
|
|
4
|
+
import { updateFormProps as y, getFieldProps as q } from "../../ap-table/utils.mjs";
|
|
5
|
+
import { getFinalEditableNode as A } from "../../ap-grid/utils/editable.mjs";
|
|
6
|
+
import { isDef as K } from "../../utils/index.mjs";
|
|
7
|
+
import { getRowKey as M } from "../editable/utils.mjs";
|
|
8
|
+
function m(t, r, n) {
|
|
9
|
+
t.__skipNextRefresh ? t.__skipNextRefresh[r] = n : t.__skipNextRefresh = { [r]: n };
|
|
10
|
+
}
|
|
11
|
+
function D(t, r, n) {
|
|
12
|
+
t.__prevEditable ? t.__prevEditable[r] = n : t.__prevEditable = { [r]: n };
|
|
13
|
+
}
|
|
14
|
+
const J = (t, r, n) => {
|
|
15
|
+
function h(e) {
|
|
16
|
+
return !e.editable || e.children?.length ? {} : {
|
|
17
|
+
customRender({ value: f, originalNode: d, params: o, ...i }) {
|
|
18
|
+
const s = F(e.editable) ? e.editable(
|
|
19
|
+
i.text,
|
|
20
|
+
i.record,
|
|
21
|
+
i.rowIndex
|
|
22
|
+
) : !!e.editable;
|
|
23
|
+
let c = d;
|
|
24
|
+
if (s) {
|
|
25
|
+
const u = y(
|
|
26
|
+
e,
|
|
27
|
+
q(e.fieldProps, {
|
|
28
|
+
value: f,
|
|
29
|
+
...i
|
|
30
|
+
})
|
|
31
|
+
), b = {};
|
|
32
|
+
t.onFieldChange && (b[`onUpdate:${u.valuePropName || "value"}`] = (k) => t.onFieldChange?.(
|
|
33
|
+
i.rowIndex,
|
|
34
|
+
e.dataIndex,
|
|
35
|
+
k
|
|
36
|
+
));
|
|
37
|
+
const I = g(e.dataIndex) ? e.dataIndex : [e.dataIndex], C = n ? [n] : g(t.name) ? t.name : [t.name], R = M(
|
|
38
|
+
i.record,
|
|
39
|
+
i.rowIndex,
|
|
40
|
+
t.rowKey
|
|
41
|
+
), N = {
|
|
42
|
+
name: [...C, String(R), ...I],
|
|
43
|
+
...u || {},
|
|
44
|
+
field: {
|
|
45
|
+
style: "width: 100%",
|
|
46
|
+
...u?.field || {},
|
|
47
|
+
...b,
|
|
48
|
+
class: p("is-editable", u.class)
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
c = A(
|
|
52
|
+
e,
|
|
53
|
+
N,
|
|
54
|
+
i.record,
|
|
55
|
+
w(r)
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
e.customRender && (c = e.customRender({
|
|
59
|
+
value: f,
|
|
60
|
+
...i,
|
|
61
|
+
editable: s,
|
|
62
|
+
originalNode: c,
|
|
63
|
+
index: i.rowIndex,
|
|
64
|
+
renderIndex: i.rowIndex
|
|
65
|
+
}));
|
|
66
|
+
const a = o.node, l = o.column.getColId(), _ = a.__prevEditable?.[l];
|
|
67
|
+
return !a.__skipNextRefresh?.[l] && K(_) && _ !== s && (m(a, l, !0), setTimeout(() => {
|
|
68
|
+
o?.api.refreshCells({
|
|
69
|
+
rowNodes: [o.node],
|
|
70
|
+
columns: [o.column.getColId()],
|
|
71
|
+
force: !0
|
|
72
|
+
}), m(a, l, !1);
|
|
73
|
+
}, 0)), D(a, l, s), c;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return E(() => {
|
|
78
|
+
const e = t.columns;
|
|
79
|
+
if (!e)
|
|
80
|
+
return [];
|
|
81
|
+
function x(f) {
|
|
82
|
+
return f.map((d) => ({
|
|
83
|
+
...d,
|
|
84
|
+
_requireMark: v(d),
|
|
85
|
+
children: x(d.children || []),
|
|
86
|
+
// 处理可编辑/不可编辑下的单元格渲染
|
|
87
|
+
...h(d)
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
return x(e);
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
export {
|
|
94
|
+
J as default,
|
|
95
|
+
J as useGetEditableColumns
|
|
96
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Ref, ShallowRef } from 'vue';
|
|
2
|
+
import { ApFormInternalInstance } from '../../ap-form';
|
|
3
|
+
import { EditableAgGridProps } from '../editable/interface';
|
|
4
|
+
import { Key } from '@aplus-frontend/antdv/es/_util/type';
|
|
5
|
+
export declare const useEditableFormItemApi: <RecordType>(props: EditableAgGridProps<RecordType>, formApi: ApFormInternalInstance | undefined, tableData: Ref<RecordType[]>, shadowName: string) => {
|
|
6
|
+
add: (defaultValue?: Partial<RecordType>, insertIndex?: number) => void;
|
|
7
|
+
addMultiple: (list: number | Partial<RecordType>[], insetIn?: "prefix" | "suffix") => void;
|
|
8
|
+
remove: (data: RecordType | RecordType[]) => void;
|
|
9
|
+
removeByKey: (key: Key | Key[]) => void;
|
|
10
|
+
getRowData: (index: number) => RecordType;
|
|
11
|
+
getRowsData: () => RecordType[];
|
|
12
|
+
setRowData: (index: number, payload: any, merge?: boolean) => void;
|
|
13
|
+
clear: () => void;
|
|
14
|
+
refreshRowIds: ShallowRef<string[], string[]>;
|
|
15
|
+
};
|