@nokecy/qc-ui 1.1.42 → 1.1.43
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/ag-grid-plus/ag-gridPlus.js +84 -36
- package/dist/cjs/ag-grid-plus/interface.d.ts +17 -1
- package/dist/cjs/ag-grid-plus/queryForm/queryForm.js +1 -1
- package/dist/cjs/ag-grid-plus/shared/NoRowsOverlay.d.ts +22 -0
- package/dist/cjs/ag-grid-plus/shared/NoRowsOverlay.js +41 -0
- package/dist/cjs/ag-grid-plus/utils/columnProcessors.d.ts +16 -0
- package/dist/cjs/ag-grid-plus/utils/columnProcessors.js +26 -0
- package/dist/cjs/ag-grid-plus/utils/constants.d.ts +6 -0
- package/dist/cjs/ag-grid-plus/utils/constants.js +7 -1
- package/dist/cjs/ag-grid-plus/utils/emptyState.d.ts +42 -0
- package/dist/cjs/ag-grid-plus/utils/emptyState.js +75 -0
- package/dist/cjs/deleteConfirm/index.d.ts +19 -2
- package/dist/cjs/deleteConfirm/index.js +34 -14
- package/dist/cjs/dialogSelect/index.js +23 -9
- package/dist/cjs/fullScreenAlert/index.d.ts +11 -0
- package/dist/cjs/fullScreenAlert/index.js +10 -3
- package/dist/cjs/fullScreenAlert/index.less +31 -0
- package/dist/esm/ag-grid-plus/ag-gridPlus.js +84 -36
- package/dist/esm/ag-grid-plus/interface.d.ts +17 -1
- package/dist/esm/ag-grid-plus/queryForm/queryForm.js +1 -1
- package/dist/esm/ag-grid-plus/shared/NoRowsOverlay.d.ts +22 -0
- package/dist/esm/ag-grid-plus/shared/NoRowsOverlay.js +35 -0
- package/dist/esm/ag-grid-plus/utils/columnProcessors.d.ts +16 -0
- package/dist/esm/ag-grid-plus/utils/columnProcessors.js +25 -0
- package/dist/esm/ag-grid-plus/utils/constants.d.ts +6 -0
- package/dist/esm/ag-grid-plus/utils/constants.js +7 -1
- package/dist/esm/ag-grid-plus/utils/emptyState.d.ts +42 -0
- package/dist/esm/ag-grid-plus/utils/emptyState.js +66 -0
- package/dist/esm/deleteConfirm/index.d.ts +19 -2
- package/dist/esm/deleteConfirm/index.js +34 -14
- package/dist/esm/dialogSelect/index.js +23 -9
- package/dist/esm/fullScreenAlert/index.d.ts +11 -0
- package/dist/esm/fullScreenAlert/index.js +11 -4
- package/dist/esm/fullScreenAlert/index.less +31 -0
- package/dist/umd/qc-ui.min.css +1 -1
- package/dist/umd/qc-ui.min.js +1 -1
- package/package.json +1 -1
|
@@ -8,6 +8,12 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
8
8
|
var _antd = require("antd");
|
|
9
9
|
var _icons = require("@ant-design/icons");
|
|
10
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
12
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
13
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
14
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
15
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
16
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
11
17
|
var confirm = _antd.Modal.confirm;
|
|
12
18
|
/**
|
|
13
19
|
* DeleteConfirm 删除确认组件
|
|
@@ -31,31 +37,45 @@ var DeleteConfirm = function DeleteConfirm(props) {
|
|
|
31
37
|
var onConfirm = props.onConfirm,
|
|
32
38
|
title = props.title,
|
|
33
39
|
content = props.content,
|
|
40
|
+
okText = props.okText,
|
|
41
|
+
_props$danger = props.danger,
|
|
42
|
+
danger = _props$danger === void 0 ? true : _props$danger,
|
|
34
43
|
children = props.children;
|
|
35
|
-
var showPromiseConfirm = function showPromiseConfirm() {
|
|
44
|
+
var showPromiseConfirm = function showPromiseConfirm(event) {
|
|
36
45
|
// 智能转换 title:支持字符串、ReactNode 或使用默认值
|
|
37
46
|
var titleText = title || '确认操作';
|
|
38
47
|
|
|
39
|
-
//
|
|
40
|
-
//
|
|
41
|
-
|
|
42
|
-
var contentText = content ||
|
|
43
|
-
confirm({
|
|
48
|
+
// 正文要说清动的是哪条、几条,这只有调用方知道,所以 content 交给调用方。
|
|
49
|
+
// 不传时的兜底只承诺「不可撤销」:原来的默认正文是把 title 拼进去,
|
|
50
|
+
// 拼出来是一句病句,而且始终没告诉用户动的是哪条数据。@author nokecy
|
|
51
|
+
var contentText = content || '该操作不可撤销,请确认后继续。';
|
|
52
|
+
confirm(_objectSpread(_objectSpread({
|
|
44
53
|
title: titleText,
|
|
45
54
|
icon: /*#__PURE__*/_react.default.createElement(_icons.ExclamationCircleFilled, null),
|
|
46
55
|
content: contentText,
|
|
56
|
+
okButtonProps: {
|
|
57
|
+
danger: danger
|
|
58
|
+
}
|
|
59
|
+
}, okText ? {
|
|
60
|
+
okText: okText
|
|
61
|
+
} : {}), {}, {
|
|
47
62
|
onOk: function onOk() {
|
|
48
63
|
return new Promise(function (resolve, reject) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
64
|
+
// 回调既可能返回 Promise(异步删除),也可能是同步的普通值,两种都要接住。
|
|
65
|
+
var result = onConfirm(event);
|
|
66
|
+
if (result && typeof result.then === 'function') {
|
|
67
|
+
result.then(resolve).catch(function (error) {
|
|
68
|
+
console.error('Oops errors!', error);
|
|
69
|
+
reject();
|
|
70
|
+
});
|
|
71
|
+
} else {
|
|
72
|
+
resolve(result);
|
|
73
|
+
}
|
|
53
74
|
}).catch(function () {
|
|
54
|
-
return
|
|
75
|
+
return undefined;
|
|
55
76
|
});
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
});
|
|
77
|
+
}
|
|
78
|
+
}));
|
|
59
79
|
};
|
|
60
80
|
return /*#__PURE__*/_react.default.createElement("span", {
|
|
61
81
|
onClick: showPromiseConfirm
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
@@ -20,6 +19,7 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
|
|
|
20
19
|
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
21
20
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
22
21
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
22
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
23
23
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
24
24
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
25
25
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
@@ -142,22 +142,36 @@ var DialogSelect = function DialogSelect(props) {
|
|
|
142
142
|
onGridReady: function onGridReady(gridReadEvent) {
|
|
143
143
|
setGridApi(gridReadEvent.api);
|
|
144
144
|
},
|
|
145
|
+
onFirstDataRendered: function onFirstDataRendered(_ref) {
|
|
146
|
+
var api = _ref.api;
|
|
147
|
+
// 多选时重开弹窗要把已经选中的行勾回来,否则用户会以为之前的选择丢了。
|
|
148
|
+
// 放在首屏数据渲染完成时做:弹窗是 destroyOnClose,打开的那一刻表格还没有数据。@author nokecy
|
|
149
|
+
if (!Array.isArray(state) || state.length === 0) return;
|
|
150
|
+
var key = valueField !== null && valueField !== void 0 ? valueField : 'id';
|
|
151
|
+
var selected = state.map(function (it) {
|
|
152
|
+
return it && _typeof(it) === 'object' ? it.value : it;
|
|
153
|
+
});
|
|
154
|
+
api.forEachNode(function (node) {
|
|
155
|
+
if (node.data && selected.includes(node.data[key])) {
|
|
156
|
+
node.setSelected(true);
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
},
|
|
145
160
|
search: (columnDefs === null || columnDefs === void 0 ? void 0 : columnDefs.filter(function (i) {
|
|
146
161
|
return !i.hideInSearch;
|
|
147
162
|
}).length) !== 0,
|
|
148
163
|
onSelectionChanged: onSelectionChanged,
|
|
149
164
|
rowSelection: props.mode === 'multiple' ? props.mode : 'single',
|
|
150
|
-
onRowDoubleClicked: function onRowDoubleClicked(
|
|
151
|
-
var data =
|
|
165
|
+
onRowDoubleClicked: function onRowDoubleClicked(_ref2) {
|
|
166
|
+
var data = _ref2.data;
|
|
152
167
|
setFalse();
|
|
153
168
|
setState(getValue([data]));
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
});
|
|
169
|
+
// 回传完整数据行:原来这里硬编码成 { label: data.name, value: data.code },
|
|
170
|
+
// 与「确定」按钮走的 handleOk 口径不一致,且对没有 name/code 字段的实体直接取到 undefined。@author nokecy
|
|
171
|
+
if (onChangeItem) onChangeItem(props.mode === 'multiple' ? [data] : data);
|
|
158
172
|
},
|
|
159
173
|
request: ( /*#__PURE__*/function () {
|
|
160
|
-
var
|
|
174
|
+
var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(params, _, record) {
|
|
161
175
|
var _props$pagedApiAdapte;
|
|
162
176
|
var adapter, data, requestData;
|
|
163
177
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
@@ -187,7 +201,7 @@ var DialogSelect = function DialogSelect(props) {
|
|
|
187
201
|
}, _callee);
|
|
188
202
|
}));
|
|
189
203
|
return function (_x, _x2, _x3) {
|
|
190
|
-
return
|
|
204
|
+
return _ref3.apply(this, arguments);
|
|
191
205
|
};
|
|
192
206
|
}()),
|
|
193
207
|
columnDefs: columnDefs
|
|
@@ -9,6 +9,17 @@ export interface FullScreenAlertProps {
|
|
|
9
9
|
onChange?: (active: boolean) => void;
|
|
10
10
|
/** 自动关闭时间(毫秒),默认3000ms */
|
|
11
11
|
duration?: number;
|
|
12
|
+
/**
|
|
13
|
+
* 中央提示语。不传时按 type 给「成功」/「失败」。
|
|
14
|
+
* @author nokecy
|
|
15
|
+
*/
|
|
16
|
+
message?: React.ReactNode;
|
|
17
|
+
/**
|
|
18
|
+
* 是否显示中央的图标与文字,默认 true。
|
|
19
|
+
* 只靠边框颜色区分成功与失败,对色觉障碍者等于零反馈;这一层是给状态加的第二种编码。
|
|
20
|
+
* @author nokecy
|
|
21
|
+
*/
|
|
22
|
+
showIcon?: boolean;
|
|
12
23
|
/** 其他 HTML div 属性 */
|
|
13
24
|
[key: string]: any;
|
|
14
25
|
}
|
|
@@ -5,9 +5,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
|
+
var _icons = require("@ant-design/icons");
|
|
8
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
10
|
require("./index.less");
|
|
10
|
-
var _excluded = ["active", "type", "onChange", "duration"];
|
|
11
|
+
var _excluded = ["active", "type", "onChange", "duration", "message", "showIcon"];
|
|
11
12
|
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); }
|
|
12
13
|
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; }
|
|
13
14
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
@@ -41,6 +42,9 @@ var FullScreenAlert = function FullScreenAlert(props) {
|
|
|
41
42
|
onChange = props.onChange,
|
|
42
43
|
_props$duration = props.duration,
|
|
43
44
|
duration = _props$duration === void 0 ? 3000 : _props$duration,
|
|
45
|
+
message = props.message,
|
|
46
|
+
_props$showIcon = props.showIcon,
|
|
47
|
+
showIcon = _props$showIcon === void 0 ? true : _props$showIcon,
|
|
44
48
|
restProps = _objectWithoutProperties(props, _excluded);
|
|
45
49
|
var timerRef = (0, _react.useRef)();
|
|
46
50
|
var _useState = (0, _react.useState)(activeProps),
|
|
@@ -75,8 +79,11 @@ var FullScreenAlert = function FullScreenAlert(props) {
|
|
|
75
79
|
return null;
|
|
76
80
|
}
|
|
77
81
|
var className = ['alertOverlay', 'alert-active', type === 'error' ? 'errorOverlay' : 'successOverlay'].join(' ');
|
|
78
|
-
|
|
82
|
+
var isError = type === 'error';
|
|
83
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", _extends({
|
|
79
84
|
className: className
|
|
80
|
-
}, restProps), /*#__PURE__*/_react.default.createElement("div", null))
|
|
85
|
+
}, restProps), /*#__PURE__*/_react.default.createElement("div", null)), showIcon ? /*#__PURE__*/_react.default.createElement("div", {
|
|
86
|
+
className: "alertBadge ".concat(isError ? 'alertBadge-error' : 'alertBadge-success')
|
|
87
|
+
}, isError ? /*#__PURE__*/_react.default.createElement(_icons.CloseCircleFilled, null) : /*#__PURE__*/_react.default.createElement(_icons.CheckCircleFilled, null), /*#__PURE__*/_react.default.createElement("span", null, message !== null && message !== void 0 ? message : isError ? '失败' : '成功')) : null);
|
|
81
88
|
};
|
|
82
89
|
var _default = exports.default = FullScreenAlert;
|
|
@@ -131,3 +131,34 @@
|
|
|
131
131
|
opacity: 0;
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
|
+
|
|
135
|
+
/* 中央状态徽标:给成功/失败加上颜色之外的第二种编码(图标 + 文字)。
|
|
136
|
+
只靠绿边框/红边框区分,对色觉障碍者等于没有反馈;车间侧光屏上也常常看不出色差。
|
|
137
|
+
放在闪烁层之外,所以它不跟着 blink 一起忽明忽暗。@author nokecy */
|
|
138
|
+
.alertBadge {
|
|
139
|
+
position: absolute;
|
|
140
|
+
top: 50%;
|
|
141
|
+
left: 50%;
|
|
142
|
+
z-index: 2;
|
|
143
|
+
display: flex;
|
|
144
|
+
flex-direction: column;
|
|
145
|
+
align-items: center;
|
|
146
|
+
gap: 12px;
|
|
147
|
+
font-size: 28px;
|
|
148
|
+
font-weight: 700;
|
|
149
|
+
text-shadow: 0 1px 2px rgb(255 255 255 / 80%);
|
|
150
|
+
transform: translate(-50%, -50%);
|
|
151
|
+
pointer-events: none;
|
|
152
|
+
|
|
153
|
+
.anticon {
|
|
154
|
+
font-size: 128px;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.alertBadge-success {
|
|
159
|
+
color: green;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.alertBadge-error {
|
|
163
|
+
color: red;
|
|
164
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var _excluded = ["style", "loading", "params", "request", "dataSource", "treeKeyName", "treeParentName", "rowData", "gridRef", "headerTitle", "toolBarRender", "search", "hideTool", "onGridReady", "gridKey", "children", "defaultSearchExpand", "overlayNoRowsTemplateText", "queryDefaultRows", "onSelectedRowsChange", "enableClickSelection", "rowSelection", "useNativeTreeFilter", "entityType"];
|
|
1
|
+
var _excluded = ["style", "loading", "params", "request", "dataSource", "treeKeyName", "treeParentName", "rowData", "gridRef", "headerTitle", "toolBarRender", "search", "hideTool", "onGridReady", "gridKey", "children", "defaultSearchExpand", "overlayNoRowsTemplateText", "queryDefaultRows", "onSelectedRowsChange", "emptyState", "accessible", "enableClickSelection", "rowSelection", "useNativeTreeFilter", "entityType"];
|
|
2
2
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
3
3
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
4
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
@@ -35,6 +35,7 @@ import ToolBar from "./toolBar";
|
|
|
35
35
|
import SettingItem from "./settingItem";
|
|
36
36
|
import { RedoOutlined, FilterOutlined } from '@ant-design/icons';
|
|
37
37
|
import { convertFilterModel, dateTimeValueFormatter, dateValueFormatter, flatten, toTree } from "./utils";
|
|
38
|
+
import { toColumnType } from "./utils/columnProcessors";
|
|
38
39
|
import AdvancedQueryBuilder from "./queryForm/AdvancedQueryBuilder";
|
|
39
40
|
import { v4 as uuidv4 } from 'uuid';
|
|
40
41
|
import Setting from "./setting";
|
|
@@ -42,6 +43,9 @@ import { useGridPlusColumnState } from '.';
|
|
|
42
43
|
import { useRowId } from "./hooks/useRowId";
|
|
43
44
|
import _, { isArray } from 'lodash';
|
|
44
45
|
import CustomGroupCellRenderer from "./_utils/customGroupCellRenderer";
|
|
46
|
+
import NoRowsOverlay from "./shared/NoRowsOverlay";
|
|
47
|
+
import { DEFAULT_PAGE_SIZE_OPTIONS } from "./utils/constants";
|
|
48
|
+
import { hasEffectiveFilter, resolveEmptyBranch, resolveEmptyText } from "./utils/emptyState";
|
|
45
49
|
import processColumnGroups from "./_utils/processColumnGroups";
|
|
46
50
|
import flattenColumnState from "./_utils/processFormColumnState";
|
|
47
51
|
import { Select } from '@formily/antd-v5';
|
|
@@ -51,7 +55,6 @@ import { QueryFormContext } from "./context/queryFormContext";
|
|
|
51
55
|
import { useGridSchemes } from "./context/useSchemeManager";
|
|
52
56
|
import { useSchemeDataFlow } from "./context/useSchemeDataFlow";
|
|
53
57
|
import { extractItemsOrder, extractHiddenFields } from "./shared/utils/schemeDataMigration";
|
|
54
|
-
import { createSafeHtmlTemplate } from "./utils/sanitize";
|
|
55
58
|
import { computeAggregationRow } from "./utils/aggregation";
|
|
56
59
|
import { sortFormItemsByOrder, filterHiddenFormItems } from "./utils/queryFormDerivation";
|
|
57
60
|
import { filterVisibleSelectedRows } from "./utils/rowSelection";
|
|
@@ -95,6 +98,9 @@ function AgGridPlus(props) {
|
|
|
95
98
|
overlayNoRowsTemplateText = props.overlayNoRowsTemplateText,
|
|
96
99
|
queryDefaultRows = props.queryDefaultRows,
|
|
97
100
|
onSelectedRowsChange = props.onSelectedRowsChange,
|
|
101
|
+
emptyState = props.emptyState,
|
|
102
|
+
_props$accessible = props.accessible,
|
|
103
|
+
accessible = _props$accessible === void 0 ? true : _props$accessible,
|
|
98
104
|
_props$enableClickSel = props.enableClickSelection,
|
|
99
105
|
enableClickSelection = _props$enableClickSel === void 0 ? true : _props$enableClickSel,
|
|
100
106
|
propsRowSelection = props.rowSelection,
|
|
@@ -141,35 +147,44 @@ function AgGridPlus(props) {
|
|
|
141
147
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
142
148
|
loading = _useState6[0],
|
|
143
149
|
setLoading = _useState6[1];
|
|
144
|
-
|
|
150
|
+
// 空态四分需要的两个事实:这次请求是不是失败了、用户有没有施加筛选。@author nokecy
|
|
151
|
+
var _useState7 = useState(null),
|
|
145
152
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
var _useState9 = useState(
|
|
153
|
+
loadError = _useState8[0],
|
|
154
|
+
setLoadError = _useState8[1];
|
|
155
|
+
var _useState9 = useState(false),
|
|
149
156
|
_useState10 = _slicedToArray(_useState9, 2),
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
var _useState11 = useState(
|
|
157
|
+
filtered = _useState10[0],
|
|
158
|
+
setFiltered = _useState10[1];
|
|
159
|
+
var _useState11 = useState(),
|
|
153
160
|
_useState12 = _slicedToArray(_useState11, 2),
|
|
154
|
-
|
|
155
|
-
|
|
161
|
+
columnState = _useState12[0],
|
|
162
|
+
setColumnState = _useState12[1];
|
|
156
163
|
var _useState13 = useState({}),
|
|
157
164
|
_useState14 = _slicedToArray(_useState13, 2),
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
var _useState15 = useState(),
|
|
165
|
+
columnCellClass = _useState14[0],
|
|
166
|
+
setColumnCellClass = _useState14[1];
|
|
167
|
+
var _useState15 = useState([]),
|
|
161
168
|
_useState16 = _slicedToArray(_useState15, 2),
|
|
162
|
-
|
|
163
|
-
|
|
169
|
+
rowData = _useState16[0],
|
|
170
|
+
setRowData = _useState16[1];
|
|
171
|
+
var _useState17 = useState({}),
|
|
172
|
+
_useState18 = _slicedToArray(_useState17, 2),
|
|
173
|
+
queryFilter = _useState18[0],
|
|
174
|
+
setQueryFilter = _useState18[1];
|
|
175
|
+
var _useState19 = useState(),
|
|
176
|
+
_useState20 = _slicedToArray(_useState19, 2),
|
|
177
|
+
sortColumn = _useState20[0],
|
|
178
|
+
setSortColumn = _useState20[1];
|
|
164
179
|
// 初始化分页参数,支持外部传入的pageSize
|
|
165
|
-
var
|
|
180
|
+
var _useState21 = useState({
|
|
166
181
|
pageSize: props.pageSize !== undefined ? props.pageSize : props.hidePagination ? 10000 : 200,
|
|
167
182
|
current: 1,
|
|
168
183
|
total: dataSource ? dataSource.length : 0
|
|
169
184
|
}),
|
|
170
|
-
|
|
171
|
-
pagination =
|
|
172
|
-
setPagination =
|
|
185
|
+
_useState22 = _slicedToArray(_useState21, 2),
|
|
186
|
+
pagination = _useState22[0],
|
|
187
|
+
setPagination = _useState22[1];
|
|
173
188
|
|
|
174
189
|
// ============ 方案管理 - 使用集中式 Context ============
|
|
175
190
|
var _useGridSchemes = useGridSchemes(),
|
|
@@ -188,16 +203,16 @@ function AgGridPlus(props) {
|
|
|
188
203
|
getColumnSchemes = _useGridSchemes.getColumnSchemes,
|
|
189
204
|
getQuerySchemes = _useGridSchemes.getQuerySchemes,
|
|
190
205
|
getCurrentScheme = _useGridSchemes.getCurrentScheme;
|
|
191
|
-
var
|
|
192
|
-
|
|
193
|
-
queryItemsOrder =
|
|
194
|
-
setQueryItemsOrder =
|
|
206
|
+
var _useState23 = useState([]),
|
|
207
|
+
_useState24 = _slicedToArray(_useState23, 2),
|
|
208
|
+
queryItemsOrder = _useState24[0],
|
|
209
|
+
setQueryItemsOrder = _useState24[1];
|
|
195
210
|
|
|
196
211
|
// 高级查询状态
|
|
197
|
-
var
|
|
198
|
-
|
|
199
|
-
advancedPopoverOpen =
|
|
200
|
-
setAdvancedPopoverOpen =
|
|
212
|
+
var _useState25 = useState(false),
|
|
213
|
+
_useState26 = _slicedToArray(_useState25, 2),
|
|
214
|
+
advancedPopoverOpen = _useState26[0],
|
|
215
|
+
setAdvancedPopoverOpen = _useState26[1];
|
|
201
216
|
var createEmptyRuleGroup = function createEmptyRuleGroup() {
|
|
202
217
|
return {
|
|
203
218
|
id: uuidv4(),
|
|
@@ -205,10 +220,10 @@ function AgGridPlus(props) {
|
|
|
205
220
|
children: []
|
|
206
221
|
};
|
|
207
222
|
};
|
|
208
|
-
var
|
|
209
|
-
|
|
210
|
-
advancedQueryRules =
|
|
211
|
-
setAdvancedQueryRules =
|
|
223
|
+
var _useState27 = useState(createEmptyRuleGroup),
|
|
224
|
+
_useState28 = _slicedToArray(_useState27, 2),
|
|
225
|
+
advancedQueryRules = _useState28[0],
|
|
226
|
+
setAdvancedQueryRules = _useState28[1];
|
|
212
227
|
|
|
213
228
|
/**
|
|
214
229
|
* 【P1 架构优化】使用单向数据流架构
|
|
@@ -468,7 +483,7 @@ function AgGridPlus(props) {
|
|
|
468
483
|
});
|
|
469
484
|
return match ? match.label : params.value;
|
|
470
485
|
};
|
|
471
|
-
return _objectSpread(_objectSpread(_objectSpread({}, dataType), col), {}, {
|
|
486
|
+
return _objectSpread(_objectSpread(_objectSpread({}, toColumnType(dataType)), col), {}, {
|
|
472
487
|
cellRenderer: function cellRenderer(params) {
|
|
473
488
|
var match = valueEnum.find(function (item) {
|
|
474
489
|
return item.value == params.value;
|
|
@@ -528,7 +543,7 @@ function AgGridPlus(props) {
|
|
|
528
543
|
cellRenderer: cellRenderer
|
|
529
544
|
});
|
|
530
545
|
}
|
|
531
|
-
return _objectSpread(_objectSpread(_objectSpread({}, dataType), col), {}, {
|
|
546
|
+
return _objectSpread(_objectSpread(_objectSpread({}, toColumnType(dataType)), col), {}, {
|
|
532
547
|
customCellRenderer: col.cellRenderer,
|
|
533
548
|
cellRenderer: cellRenderer
|
|
534
549
|
});
|
|
@@ -689,6 +704,8 @@ function AgGridPlus(props) {
|
|
|
689
704
|
try {
|
|
690
705
|
// 处理高级查询模式 / 简单模式的过滤字符串构建
|
|
691
706
|
var filter = buildFilterString(queryFilter, allColDefsRef.current);
|
|
707
|
+
// 空结果要不要说「换个筛选条件试试」,取决于用户这次到底有没有筛。@author nokecy
|
|
708
|
+
setFiltered(hasEffectiveFilter(filter, queryFilter));
|
|
692
709
|
var params = _objectSpread(_objectSpread({
|
|
693
710
|
filter: filter
|
|
694
711
|
}, stableGridParams), {}, {
|
|
@@ -726,6 +743,7 @@ function AgGridPlus(props) {
|
|
|
726
743
|
});
|
|
727
744
|
});
|
|
728
745
|
setLoading(false);
|
|
746
|
+
setLoadError(null);
|
|
729
747
|
logger.info('数据请求成功', {
|
|
730
748
|
rowCount: rowCount
|
|
731
749
|
});
|
|
@@ -788,6 +806,9 @@ function AgGridPlus(props) {
|
|
|
788
806
|
originalError: error
|
|
789
807
|
}, error);
|
|
790
808
|
|
|
809
|
+
// 失败必须留痕:不留痕的话表格只会显示「没有找到数据」,把接口故障说成没数据。@author nokecy
|
|
810
|
+
setLoadError(gridError);
|
|
811
|
+
|
|
791
812
|
// 记录错误
|
|
792
813
|
logger.error('数据请求失败', gridError.getDetails());
|
|
793
814
|
|
|
@@ -807,6 +828,7 @@ function AgGridPlus(props) {
|
|
|
807
828
|
queryFilter: queryFilter,
|
|
808
829
|
allColDefs: allColDefsRef.current
|
|
809
830
|
}, error instanceof Error ? error : undefined);
|
|
831
|
+
setLoadError(gridError);
|
|
810
832
|
logger.error('数据请求处理失败', gridError.getDetails());
|
|
811
833
|
message.error(gridError.getUserMessage());
|
|
812
834
|
if (onErrorRef.current) {
|
|
@@ -887,6 +909,27 @@ function AgGridPlus(props) {
|
|
|
887
909
|
onRequest(stableQueryFilter);
|
|
888
910
|
}
|
|
889
911
|
}, [onRequest, stableQueryFilter]);
|
|
912
|
+
|
|
913
|
+
// 空态四分:加载失败 / 无权限 / 筛选无结果 / 无数据,各说各的,失败那支还给出「重试」。
|
|
914
|
+
// 以前四种情况共用一句「没有找到数据,试试调整筛选条件吧!」,接口挂了也这么说,
|
|
915
|
+
// 用户按提示去调筛选,越调越没有。@author nokecy
|
|
916
|
+
var noRowsOverlayParams = useMemo(function () {
|
|
917
|
+
return {
|
|
918
|
+
branch: resolveEmptyBranch({
|
|
919
|
+
hasError: !!loadError,
|
|
920
|
+
accessible: accessible,
|
|
921
|
+
filtered: filtered
|
|
922
|
+
}),
|
|
923
|
+
text: resolveEmptyText({
|
|
924
|
+
hasError: !!loadError,
|
|
925
|
+
accessible: accessible,
|
|
926
|
+
filtered: filtered,
|
|
927
|
+
override: overlayNoRowsTemplateText,
|
|
928
|
+
texts: emptyState
|
|
929
|
+
}),
|
|
930
|
+
onRetry: onRefresh
|
|
931
|
+
};
|
|
932
|
+
}, [loadError, accessible, filtered, overlayNoRowsTemplateText, emptyState, onRefresh]);
|
|
890
933
|
useEffect(function () {
|
|
891
934
|
gridRef.current = {
|
|
892
935
|
onRefresh: onRefresh
|
|
@@ -1328,7 +1371,12 @@ function AgGridPlus(props) {
|
|
|
1328
1371
|
ensureDomOrder: true,
|
|
1329
1372
|
columnHoverHighlight: true
|
|
1330
1373
|
},
|
|
1331
|
-
|
|
1374
|
+
noRowsOverlayComponent: NoRowsOverlay,
|
|
1375
|
+
noRowsOverlayComponentParams: noRowsOverlayParams
|
|
1376
|
+
// 加载中不显示空态:外层 Spin 已经在转,再叠一句「暂无数据」会让用户
|
|
1377
|
+
// 以为真的没数据(冒烟截图里这两者确实同时出现过)。@author nokecy
|
|
1378
|
+
,
|
|
1379
|
+
suppressNoRowsOverlay: loading,
|
|
1332
1380
|
enableRangeSelection: true,
|
|
1333
1381
|
suppressCopyRowsToClipboard: true,
|
|
1334
1382
|
autoGroupColumnDef: autoGroupColumnDef
|
|
@@ -1408,7 +1456,7 @@ function AgGridPlus(props) {
|
|
|
1408
1456
|
showTotal: function showTotal(total, range) {
|
|
1409
1457
|
return "\u7B2C ".concat(range[0], "-").concat(range[1], " \u6761/\u603B\u5171 ").concat(total, " \u6761");
|
|
1410
1458
|
},
|
|
1411
|
-
pageSizeOptions: props.pageSizeOptions ||
|
|
1459
|
+
pageSizeOptions: props.pageSizeOptions || DEFAULT_PAGE_SIZE_OPTIONS,
|
|
1412
1460
|
hideOnSinglePage: false,
|
|
1413
1461
|
showQuickJumper: false
|
|
1414
1462
|
})))))));
|
|
@@ -2,6 +2,7 @@ import { GridApi, ColDef, ColGroupDef } from "ag-grid-community";
|
|
|
2
2
|
import { AgGridReactProps } from "ag-grid-react";
|
|
3
3
|
import React, { CSSProperties, ReactNode } from "react";
|
|
4
4
|
import type { GridPlusError } from "./errors";
|
|
5
|
+
import type { EmptyStateTexts } from "./utils/emptyState";
|
|
5
6
|
interface GridRef {
|
|
6
7
|
onRefresh: () => void;
|
|
7
8
|
}
|
|
@@ -42,9 +43,24 @@ interface GridProps extends AgGridReactProps {
|
|
|
42
43
|
*/
|
|
43
44
|
gridColumnState?: any[];
|
|
44
45
|
/**
|
|
45
|
-
*
|
|
46
|
+
* 列表空数据文字提示。
|
|
47
|
+
* 传了它就一律用它(最高优先级),保持既有调用点行为不变;
|
|
48
|
+
* 想按「无数据 / 筛选无结果 / 无权限 / 加载失败」分别给文案,用 `emptyState`。
|
|
46
49
|
*/
|
|
47
50
|
overlayNoRowsTemplateText?: string;
|
|
51
|
+
/**
|
|
52
|
+
* 空态四分文案覆盖:{ noData, noResult, noPermission, error }。
|
|
53
|
+
* 不传就用内置默认:加载失败说加载失败并给「重试」,没筛选就说「暂无数据」,
|
|
54
|
+
* 不再一律引导用户去调筛选条件。
|
|
55
|
+
* @author nokecy
|
|
56
|
+
*/
|
|
57
|
+
emptyState?: EmptyStateTexts;
|
|
58
|
+
/**
|
|
59
|
+
* 当前用户是否有权查看该列表。传 false 时空态说「没有权限」而不是「暂无数据」,
|
|
60
|
+
* 免得用户以为是数据还没录进来。
|
|
61
|
+
* @author nokecy
|
|
62
|
+
*/
|
|
63
|
+
accessible?: boolean;
|
|
48
64
|
/**
|
|
49
65
|
* 查询Form默认展示行数
|
|
50
66
|
*/
|
|
@@ -74,7 +74,7 @@ var QueryForm = observer(function (props) {
|
|
|
74
74
|
|
|
75
75
|
var renderActions = function renderActions() {
|
|
76
76
|
return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(Submit, {
|
|
77
|
-
type: "
|
|
77
|
+
type: "primary",
|
|
78
78
|
icon: /*#__PURE__*/React.createElement(SearchOutlined, null)
|
|
79
79
|
}, "\u67E5\u8BE2"), /*#__PURE__*/React.createElement(Button, {
|
|
80
80
|
icon: /*#__PURE__*/React.createElement(ClearOutlined, null),
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { EmptyStateBranch } from '../utils/emptyState';
|
|
3
|
+
/**
|
|
4
|
+
* 表格空态浮层。
|
|
5
|
+
*
|
|
6
|
+
* 换掉原来的 `overlayNoRowsTemplate` 纯 HTML 模板:模板只能放一句话,
|
|
7
|
+
* 于是「接口挂了」和「这条数据确实没有」共用了同一句
|
|
8
|
+
* 「没有找到数据,试试调整筛选条件吧!」,把用户往错误的方向引。
|
|
9
|
+
* 用 React 浮层才放得下「重试」这样的出路。
|
|
10
|
+
*
|
|
11
|
+
* @author nokecy
|
|
12
|
+
*/
|
|
13
|
+
export interface NoRowsOverlayParams {
|
|
14
|
+
/** 当前该走哪一支:加载失败 / 无权限 / 筛选无结果 / 无数据 */
|
|
15
|
+
branch?: EmptyStateBranch;
|
|
16
|
+
/** 该支的文案 */
|
|
17
|
+
text?: string;
|
|
18
|
+
/** 加载失败时的重试入口 */
|
|
19
|
+
onRetry?: () => void;
|
|
20
|
+
}
|
|
21
|
+
declare const NoRowsOverlay: React.FC<NoRowsOverlayParams>;
|
|
22
|
+
export default NoRowsOverlay;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Button, Empty } from 'antd';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 表格空态浮层。
|
|
6
|
+
*
|
|
7
|
+
* 换掉原来的 `overlayNoRowsTemplate` 纯 HTML 模板:模板只能放一句话,
|
|
8
|
+
* 于是「接口挂了」和「这条数据确实没有」共用了同一句
|
|
9
|
+
* 「没有找到数据,试试调整筛选条件吧!」,把用户往错误的方向引。
|
|
10
|
+
* 用 React 浮层才放得下「重试」这样的出路。
|
|
11
|
+
*
|
|
12
|
+
* @author nokecy
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
var NoRowsOverlay = function NoRowsOverlay(_ref) {
|
|
16
|
+
var branch = _ref.branch,
|
|
17
|
+
text = _ref.text,
|
|
18
|
+
onRetry = _ref.onRetry;
|
|
19
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
20
|
+
style: {
|
|
21
|
+
display: 'flex',
|
|
22
|
+
flexDirection: 'column',
|
|
23
|
+
alignItems: 'center',
|
|
24
|
+
gap: 8
|
|
25
|
+
}
|
|
26
|
+
}, /*#__PURE__*/React.createElement(Empty, {
|
|
27
|
+
image: Empty.PRESENTED_IMAGE_SIMPLE,
|
|
28
|
+
description: text
|
|
29
|
+
}), branch === 'error' && onRetry ? /*#__PURE__*/React.createElement(Button, {
|
|
30
|
+
size: "small",
|
|
31
|
+
danger: true,
|
|
32
|
+
onClick: onRetry
|
|
33
|
+
}, "\u91CD\u8BD5") : null);
|
|
34
|
+
};
|
|
35
|
+
export default NoRowsOverlay;
|
|
@@ -49,6 +49,22 @@ export declare function handleGridPlusColumnState(columnState: ExtendedColumnSta
|
|
|
49
49
|
* @returns 数据类型推断结果
|
|
50
50
|
*/
|
|
51
51
|
export declare function inferDataType(data: any, colName: string, valueEnum?: ValueEnumItem[]): DataTypeInference | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* 把「推断出的数据类型」翻译成列定义片段。
|
|
54
|
+
*
|
|
55
|
+
* dataType.type 是数据类型(number/string/...),不是 AG Grid 的列类型(columnTypes)。
|
|
56
|
+
* 早先是把整个 dataType 摊进 colDef,等于给列设了 type:"number"——而注册的 columnTypes 里
|
|
57
|
+
* 根本没有叫 number 的类型,这个字段一直没生效。
|
|
58
|
+
*
|
|
59
|
+
* 数量型数值列真正该有的是右对齐:位数对齐了才能一眼比大小。只有 calculateType 为真
|
|
60
|
+
* (可求和的数量型)才右对齐;用 valueEnum 表示分类的数值列(状态码之类)不动。
|
|
61
|
+
*
|
|
62
|
+
* @author nokecy
|
|
63
|
+
*/
|
|
64
|
+
export declare function toColumnType(dataType?: DataTypeInference): {
|
|
65
|
+
calculateType?: any;
|
|
66
|
+
type?: string;
|
|
67
|
+
};
|
|
52
68
|
/**
|
|
53
69
|
* 处理枚举列定义
|
|
54
70
|
*
|