@nokecy/qc-ui 1.1.63 → 1.1.65
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/deleteConfirm/index.js +56 -38
- package/dist/cjs/generatedListPage/ConfigurableToolbar.d.ts +2 -0
- package/dist/cjs/generatedListPage/ConfigurableToolbar.js +3 -2
- package/dist/cjs/generatedListPage/GeneratedListPage.js +13 -6
- package/dist/cjs/generatedListPage/OptionsColumn.js +30 -11
- package/dist/cjs/generatedListPage/index.d.ts +1 -1
- package/dist/cjs/generatedListPage/types.d.ts +26 -1
- package/dist/cjs/standardFormDialog/StandardFormDialog.js +118 -120
- package/dist/esm/deleteConfirm/index.js +55 -37
- package/dist/esm/generatedListPage/ConfigurableToolbar.d.ts +2 -0
- package/dist/esm/generatedListPage/ConfigurableToolbar.js +3 -2
- package/dist/esm/generatedListPage/GeneratedListPage.js +13 -6
- package/dist/esm/generatedListPage/OptionsColumn.js +31 -12
- package/dist/esm/generatedListPage/index.d.ts +1 -1
- package/dist/esm/generatedListPage/types.d.ts +26 -1
- package/dist/esm/standardFormDialog/StandardFormDialog.js +121 -123
- package/dist/umd/qc-ui.min.js +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
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); }
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
@@ -8,13 +9,20 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
8
9
|
var _antd = require("antd");
|
|
9
10
|
var _icons = require("@ant-design/icons");
|
|
10
11
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
function
|
|
12
|
+
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; }
|
|
12
13
|
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
14
|
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
15
|
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
16
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
16
17
|
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); }
|
|
17
|
-
var
|
|
18
|
+
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); } }
|
|
19
|
+
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); }); }; }
|
|
20
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
21
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
22
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
23
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
24
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
25
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
18
26
|
/**
|
|
19
27
|
* DeleteConfirm 删除确认组件
|
|
20
28
|
*
|
|
@@ -41,44 +49,54 @@ var DeleteConfirm = function DeleteConfirm(props) {
|
|
|
41
49
|
_props$danger = props.danger,
|
|
42
50
|
danger = _props$danger === void 0 ? true : _props$danger,
|
|
43
51
|
children = props.children;
|
|
44
|
-
var showPromiseConfirm = function showPromiseConfirm(event) {
|
|
45
|
-
// 智能转换 title:支持字符串、ReactNode 或使用默认值
|
|
46
|
-
var titleText = title || '确认操作';
|
|
47
52
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
53
|
+
// 保留宿主主题,并让 antd 接管异步提交的加载与失败恢复。@author nokecy
|
|
54
|
+
var _Modal$useModal = _antd.Modal.useModal(),
|
|
55
|
+
_Modal$useModal2 = _slicedToArray(_Modal$useModal, 2),
|
|
56
|
+
modal = _Modal$useModal2[0],
|
|
57
|
+
contextHolder = _Modal$useModal2[1];
|
|
58
|
+
var showPromiseConfirm = /*#__PURE__*/function () {
|
|
59
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(event) {
|
|
60
|
+
var titleText, contentText;
|
|
61
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
62
|
+
while (1) switch (_context.prev = _context.next) {
|
|
63
|
+
case 0:
|
|
64
|
+
// 智能转换 title:支持字符串、ReactNode 或使用默认值
|
|
65
|
+
titleText = title || '确认操作'; // 正文要说清动的是哪条、几条,这只有调用方知道,所以 content 交给调用方。
|
|
66
|
+
// 不传时的兜底只承诺「不可撤销」:原来的默认正文是把 title 拼进去,
|
|
67
|
+
// 拼出来是一句病句,而且始终没告诉用户动的是哪条数据。@author nokecy
|
|
68
|
+
contentText = content || '该操作不可撤销,请确认后继续。';
|
|
69
|
+
_context.next = 4;
|
|
70
|
+
return modal.confirm(_objectSpread(_objectSpread({
|
|
71
|
+
title: titleText,
|
|
72
|
+
icon: /*#__PURE__*/_react.default.createElement(_icons.ExclamationCircleFilled, null),
|
|
73
|
+
content: contentText,
|
|
74
|
+
okButtonProps: {
|
|
75
|
+
danger: danger
|
|
76
|
+
}
|
|
77
|
+
}, okText ? {
|
|
78
|
+
okText: okText
|
|
79
|
+
} : {}), {}, {
|
|
80
|
+
onOk: function onOk() {
|
|
81
|
+
// 同步异常与异步失败均交回确认框,失败不关闭,可继续重试。
|
|
82
|
+
// @author nokecy
|
|
83
|
+
return Promise.resolve().then(function () {
|
|
84
|
+
return onConfirm(event);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}));
|
|
88
|
+
case 4:
|
|
89
|
+
case "end":
|
|
90
|
+
return _context.stop();
|
|
91
|
+
}
|
|
92
|
+
}, _callee);
|
|
78
93
|
}));
|
|
79
|
-
|
|
80
|
-
|
|
94
|
+
return function showPromiseConfirm(_x) {
|
|
95
|
+
return _ref.apply(this, arguments);
|
|
96
|
+
};
|
|
97
|
+
}();
|
|
98
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, contextHolder, /*#__PURE__*/_react.default.createElement("span", {
|
|
81
99
|
onClick: showPromiseConfirm
|
|
82
|
-
}, children);
|
|
100
|
+
}, children));
|
|
83
101
|
};
|
|
84
102
|
var _default = exports.default = DeleteConfirm;
|
|
@@ -40,9 +40,10 @@ var ConfigurableToolbar = function ConfigurableToolbar(_ref) {
|
|
|
40
40
|
_ref$exportFileName = _ref.exportFileName,
|
|
41
41
|
exportFileName = _ref$exportFileName === void 0 ? 'export.xlsx' : _ref$exportFileName,
|
|
42
42
|
filter = _ref.filter,
|
|
43
|
-
permissions = _ref.permissions
|
|
43
|
+
permissions = _ref.permissions,
|
|
44
|
+
access = _ref.access;
|
|
44
45
|
// 使用统一的权限检查 Hook
|
|
45
|
-
var _usePermissionCheck = (0, _usePermissionCheck2.usePermissionCheck)(permissions || {}),
|
|
46
|
+
var _usePermissionCheck = (0, _usePermissionCheck2.usePermissionCheck)(permissions || {}, access),
|
|
46
47
|
canCreate = _usePermissionCheck.canCreate,
|
|
47
48
|
canImport = _usePermissionCheck.canImport,
|
|
48
49
|
canExport = _usePermissionCheck.canExport,
|
|
@@ -92,7 +92,11 @@ var GeneratedListPage = function GeneratedListPage(config) {
|
|
|
92
92
|
} : _config$paginationCon,
|
|
93
93
|
externalGridRef = config.gridRef,
|
|
94
94
|
externalOnRefresh = config.onRefresh,
|
|
95
|
-
pagedApiAdapter = config.pagedApiAdapter
|
|
95
|
+
pagedApiAdapter = config.pagedApiAdapter,
|
|
96
|
+
gridComponent = config.gridComponent,
|
|
97
|
+
access = config.access,
|
|
98
|
+
deleteConfirm = config.deleteConfirm;
|
|
99
|
+
var Grid = gridComponent || _agGridPlus.AgGridPlus;
|
|
96
100
|
|
|
97
101
|
// 内部Grid引用
|
|
98
102
|
var internalGridRef = (0, _react.useRef)();
|
|
@@ -165,11 +169,13 @@ var GeneratedListPage = function GeneratedListPage(config) {
|
|
|
165
169
|
permissions: permissions,
|
|
166
170
|
formDialog: formDialog,
|
|
167
171
|
deleteApi: apiConfig.delete,
|
|
168
|
-
useErrorHandler: errorConfig.useErrorHandler
|
|
172
|
+
useErrorHandler: errorConfig.useErrorHandler,
|
|
173
|
+
access: access,
|
|
174
|
+
deleteConfirm: deleteConfirm
|
|
169
175
|
}
|
|
170
176
|
};
|
|
171
177
|
return [].concat(_toConsumableArray(columnDefs), [operationColumn]);
|
|
172
|
-
}, [columnDefs, formDialog, apiConfig.delete, permissions, onRefresh, OptionsColumnComponent, errorConfig.useErrorHandler]);
|
|
178
|
+
}, [columnDefs, formDialog, apiConfig.delete, permissions, onRefresh, OptionsColumnComponent, errorConfig.useErrorHandler, access, deleteConfirm]);
|
|
173
179
|
|
|
174
180
|
/**
|
|
175
181
|
* 从扁平数据构建树形结构
|
|
@@ -413,9 +419,10 @@ var GeneratedListPage = function GeneratedListPage(config) {
|
|
|
413
419
|
importConfig: importConfig,
|
|
414
420
|
exportFileName: exportFileName,
|
|
415
421
|
filter: filter,
|
|
416
|
-
permissions: permissions
|
|
422
|
+
permissions: permissions,
|
|
423
|
+
access: access
|
|
417
424
|
}))];
|
|
418
|
-
}, [enableImportExport, toolbarActions, formDialog, apiConfig, onRefresh, importConfig, exportFileName, permissions]);
|
|
425
|
+
}, [enableImportExport, toolbarActions, formDialog, apiConfig, onRefresh, importConfig, exportFileName, permissions, access]);
|
|
419
426
|
|
|
420
427
|
// AgGridPlus属性配置
|
|
421
428
|
var agGridProps = _objectSpread({
|
|
@@ -476,7 +483,7 @@ var GeneratedListPage = function GeneratedListPage(config) {
|
|
|
476
483
|
position: 'relative',
|
|
477
484
|
height: '100%'
|
|
478
485
|
}
|
|
479
|
-
}, /*#__PURE__*/_react.default.createElement(
|
|
486
|
+
}, /*#__PURE__*/_react.default.createElement(Grid, agGridProps), /*#__PURE__*/_react.default.createElement(_PerformanceMonitor.PerformanceDevTools, {
|
|
480
487
|
componentName: "GeneratedListPage-".concat(title),
|
|
481
488
|
metrics: metrics,
|
|
482
489
|
onGetReport: getPerformanceReport
|
|
@@ -32,10 +32,12 @@ var OptionsColumn = function OptionsColumn(props) {
|
|
|
32
32
|
formDialog = props.formDialog,
|
|
33
33
|
deleteApi = props.deleteApi,
|
|
34
34
|
_props$useErrorHandle = props.useErrorHandler,
|
|
35
|
-
useErrorHandler = _props$useErrorHandle === void 0 ? true : _props$useErrorHandle
|
|
35
|
+
useErrorHandler = _props$useErrorHandle === void 0 ? true : _props$useErrorHandle,
|
|
36
|
+
access = props.access,
|
|
37
|
+
deleteConfirm = props.deleteConfirm;
|
|
36
38
|
|
|
37
39
|
// 使用权限检查 Hook
|
|
38
|
-
var _usePermissionCheck = (0, _usePermissionCheck2.usePermissionCheck)(permissions),
|
|
40
|
+
var _usePermissionCheck = (0, _usePermissionCheck2.usePermissionCheck)(permissions, access),
|
|
39
41
|
canUpdate = _usePermissionCheck.canUpdate,
|
|
40
42
|
canDelete = _usePermissionCheck.canDelete,
|
|
41
43
|
hasPermission = _usePermissionCheck.hasPermission;
|
|
@@ -58,13 +60,15 @@ var OptionsColumn = function OptionsColumn(props) {
|
|
|
58
60
|
_context.next = 6;
|
|
59
61
|
return (0, _defaultHandlers.defaultHandleDelete)(deleteApi, id, refresh);
|
|
60
62
|
case 6:
|
|
61
|
-
_context.next =
|
|
63
|
+
_context.next = 12;
|
|
62
64
|
break;
|
|
63
65
|
case 8:
|
|
64
66
|
_context.prev = 8;
|
|
65
67
|
_context.t0 = _context["catch"](3);
|
|
66
68
|
console.error('删除失败:', _context.t0);
|
|
67
|
-
|
|
69
|
+
// 让确认框结束加载并保留失败状态,避免失败被当作成功关闭。@author nokecy
|
|
70
|
+
throw _context.t0;
|
|
71
|
+
case 12:
|
|
68
72
|
case "end":
|
|
69
73
|
return _context.stop();
|
|
70
74
|
}
|
|
@@ -88,13 +92,24 @@ var OptionsColumn = function OptionsColumn(props) {
|
|
|
88
92
|
return null;
|
|
89
93
|
}
|
|
90
94
|
var FormDialogComponent = formDialog === null || formDialog === void 0 ? void 0 : formDialog.component;
|
|
95
|
+
|
|
96
|
+
// 确认框要说清删的是哪一条:页面没给标题时取该行的名称或编码。@author nokecy
|
|
97
|
+
var record = data;
|
|
98
|
+
var recordLabel = (record === null || record === void 0 ? void 0 : record.name) || (record === null || record === void 0 ? void 0 : record.displayName) || (record === null || record === void 0 ? void 0 : record.code);
|
|
99
|
+
var resolveText = function resolveText(value, fallback) {
|
|
100
|
+
return typeof value === 'function' ? value(data) : value !== null && value !== void 0 ? value : fallback;
|
|
101
|
+
};
|
|
102
|
+
var deleteTitle = resolveText(deleteConfirm === null || deleteConfirm === void 0 ? void 0 : deleteConfirm.title, recordLabel ? "\u786E\u5B9A\u5220\u9664\u300C".concat(recordLabel, "\u300D\uFF1F") : '确定删除?');
|
|
103
|
+
var deleteContent = resolveText(deleteConfirm === null || deleteConfirm === void 0 ? void 0 : deleteConfirm.content, '删除后无法恢复。');
|
|
91
104
|
return /*#__PURE__*/_react.default.createElement(_antd.Space, {
|
|
92
105
|
onClick: function onClick(event) {
|
|
93
106
|
event.stopPropagation();
|
|
94
107
|
}
|
|
95
108
|
}, showEditButton && FormDialogComponent && /*#__PURE__*/_react.default.createElement(Access, {
|
|
96
109
|
accessible: canUpdate
|
|
97
|
-
}, /*#__PURE__*/_react.default.createElement(
|
|
110
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Tooltip, {
|
|
111
|
+
title: "\u7F16\u8F91"
|
|
112
|
+
}, /*#__PURE__*/_react.default.createElement("span", null, /*#__PURE__*/_react.default.createElement(FormDialogComponent, {
|
|
98
113
|
buttonProps: {
|
|
99
114
|
size: "small",
|
|
100
115
|
type: "link",
|
|
@@ -102,17 +117,19 @@ var OptionsColumn = function OptionsColumn(props) {
|
|
|
102
117
|
style: {
|
|
103
118
|
fontSize: 14
|
|
104
119
|
}
|
|
105
|
-
})
|
|
120
|
+
}),
|
|
121
|
+
'aria-label': '编辑'
|
|
106
122
|
},
|
|
107
123
|
key: data.id,
|
|
108
124
|
title: formDialog.editTitle || '编辑',
|
|
109
125
|
entityId: data.id,
|
|
110
126
|
onAfterSubmit: refresh
|
|
111
|
-
})), showDeleteButton && /*#__PURE__*/_react.default.createElement(Access, {
|
|
127
|
+
})))), showDeleteButton && /*#__PURE__*/_react.default.createElement(Access, {
|
|
112
128
|
accessible: canDelete
|
|
113
129
|
}, /*#__PURE__*/_react.default.createElement(_deleteConfirm.default, {
|
|
114
|
-
title:
|
|
115
|
-
content:
|
|
130
|
+
title: deleteTitle,
|
|
131
|
+
content: deleteContent,
|
|
132
|
+
okText: "\u5220\u9664",
|
|
116
133
|
onConfirm: /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
|
|
117
134
|
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
118
135
|
while (1) switch (_context2.prev = _context2.next) {
|
|
@@ -125,11 +142,13 @@ var OptionsColumn = function OptionsColumn(props) {
|
|
|
125
142
|
}
|
|
126
143
|
}, _callee2);
|
|
127
144
|
}))
|
|
145
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Tooltip, {
|
|
146
|
+
title: "\u5220\u9664"
|
|
128
147
|
}, /*#__PURE__*/_react.default.createElement(_antd.Button, {
|
|
129
148
|
size: "small",
|
|
130
149
|
icon: /*#__PURE__*/_react.default.createElement(_icons.DeleteOutlined, null),
|
|
131
150
|
type: "link",
|
|
132
|
-
|
|
133
|
-
}))));
|
|
151
|
+
"aria-label": "\u5220\u9664"
|
|
152
|
+
})))));
|
|
134
153
|
};
|
|
135
154
|
var _default = exports.default = OptionsColumn;
|
|
@@ -12,7 +12,7 @@ export { default } from './GeneratedListPage';
|
|
|
12
12
|
export { default as GeneratedListPage } from './GeneratedListPage';
|
|
13
13
|
export { default as ConfigurableToolbar } from './ConfigurableToolbar';
|
|
14
14
|
export { default as OptionsColumn } from './OptionsColumn';
|
|
15
|
-
export type { GeneratedListPageConfig, PermissionConfig, ApiConfig, ListParams, PagedResult, DeleteParams, ExportParams, ToolbarActionConfig, FormDialogConfig, TreeDataConfig, OptionsComponentProps } from './types';
|
|
15
|
+
export type { GeneratedListPageConfig, PermissionConfig, ApiConfig, ListParams, PagedResult, DeleteParams, ExportParams, ToolbarActionConfig, FormDialogConfig, TreeDataConfig, OptionsComponentProps, DeleteConfirmConfig } from './types';
|
|
16
16
|
export { usePermissionCheck, PermissionChecker } from './usePermissionCheck';
|
|
17
17
|
export { usePerformanceMonitor, PerformanceDevTools } from './PerformanceMonitor';
|
|
18
18
|
export { useRequestManager } from './useRequestManager';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
import { GridRef } from "../ag-grid-plus/interface";
|
|
3
2
|
import { ColDef } from "ag-grid-community";
|
|
4
3
|
import { ButtonProps } from "antd";
|
|
4
|
+
import { ReactNode } from "react";
|
|
5
5
|
import { PagedApiAdapter } from '../adapters';
|
|
6
6
|
/**
|
|
7
7
|
* 权限配置接口
|
|
@@ -203,6 +203,27 @@ export interface GeneratedListPageConfig<T = any> {
|
|
|
203
203
|
onRefresh?: () => void;
|
|
204
204
|
/** 分页 API 适配器(默认 ABP);非 ABP 后端可注入。@author nokecy */
|
|
205
205
|
pagedApiAdapter?: PagedApiAdapter;
|
|
206
|
+
/**
|
|
207
|
+
* 表格组件,默认用包内 AgGridPlus。
|
|
208
|
+
* 宿主可注入自己的表格基座(属性与 AgGridPlus 相同),让序号、默认复选、编码列收起、
|
|
209
|
+
* 内部字段隐藏等列表规范在通用列表页上同样生效。@author nokecy
|
|
210
|
+
*/
|
|
211
|
+
gridComponent?: React.ComponentType<any>;
|
|
212
|
+
/**
|
|
213
|
+
* 当前用户已授予的权限(权限名 → 是否授予),通常传 umi 的 useAccess()。
|
|
214
|
+
* 不传时工具栏与操作列不做权限过滤——没有权限的人也会看到新建、编辑、删除,点了才报 403。@author nokecy
|
|
215
|
+
*/
|
|
216
|
+
access?: Record<string, boolean>;
|
|
217
|
+
/** 删除确认框;title、content 可按行生成 */
|
|
218
|
+
deleteConfirm?: DeleteConfirmConfig<T>;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* 删除确认框配置。
|
|
222
|
+
* 不传 title 时标题带上该行的名称或编码,让用户看清删的是哪一条;不传 content 时说明删除后无法恢复。@author nokecy
|
|
223
|
+
*/
|
|
224
|
+
export interface DeleteConfirmConfig<T = any> {
|
|
225
|
+
title?: ReactNode | ((record: T) => ReactNode);
|
|
226
|
+
content?: ReactNode | ((record: T) => ReactNode);
|
|
206
227
|
}
|
|
207
228
|
/**
|
|
208
229
|
* 操作列组件属性接口
|
|
@@ -221,4 +242,8 @@ export interface OptionsComponentProps<T = any> {
|
|
|
221
242
|
deleteApi?: (params: DeleteParams) => Promise<void>;
|
|
222
243
|
/** 是否使用统一错误处理 */
|
|
223
244
|
useErrorHandler?: boolean;
|
|
245
|
+
/** 当前用户已授予的权限,见 GeneratedListPageConfig.access */
|
|
246
|
+
access?: Record<string, boolean>;
|
|
247
|
+
/** 删除确认框配置 */
|
|
248
|
+
deleteConfirm?: DeleteConfirmConfig<T>;
|
|
224
249
|
}
|