UNPKG

ze-react-component-library

Version:
890 lines (752 loc) 26.1 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; require("antd/lib/space/style"); var _space = _interopRequireDefault(require("antd/lib/space")); require("antd/lib/drawer/style"); var _drawer = _interopRequireDefault(require("antd/lib/drawer")); require("antd/lib/radio/style"); var _radio = _interopRequireDefault(require("antd/lib/radio")); require("antd/lib/spin/style"); var _spin = _interopRequireDefault(require("antd/lib/spin")); require("antd/lib/button/style"); var _button = _interopRequireDefault(require("antd/lib/button")); require("antd/lib/popconfirm/style"); var _popconfirm = _interopRequireDefault(require("antd/lib/popconfirm")); require("antd/lib/message/style"); var _message2 = _interopRequireDefault(require("antd/lib/message")); var _react = _interopRequireWildcard(require("react")); var _flat = _interopRequireDefault(require("flat")); var _request = require("../request"); var _zeroetpApiSdk = require("zeroetp-api-sdk"); var _constants = require("./constants"); var _hooks = require("@umijs/hooks"); var _useLocale = _interopRequireDefault(require("../hooks/useLocale")); var _proTable = _interopRequireDefault(require("@ant-design/pro-table")); var _DefaultQueryHandler = _interopRequireDefault(require("./DefaultQueryHandler")); var _ZESchemaForm = _interopRequireDefault(require("../ZESchemaForm")); var _FilterComponents = require("../components/PropertyFilter/FilterComponents"); var _rule = require("../ZEUtil/rule.util"); var _ZEConfigProvider = require("../ZEConfigProvider"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var __assign = void 0 && (void 0).__assign || function () { __assign = Object.assign || function (t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) { if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } } return t; }; return __assign.apply(this, arguments); }; var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = void 0 && (void 0).__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) { try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; var types = [{ label: "角色", value: "role" }, { label: "账号", value: "account" }]; var loopRoles = function loopRoles(arr, source, level, currentRole, filter) { return arr.map(function (d) { var disabled = d.role === currentRole; var children = source.filter(function (a) { return a.parent === d.role; }); var restSource = source.filter(function (a) { return a.parent !== d.role; }); if (d.parent && level === 0) { return null; } if (disabled) { return null; } return { label: d.role, value: d.role, children: loopRoles(children, restSource, level + 1, currentRole, filter) }; }).filter(function (f) { return f && (filter ? filter(f) : true); }); }; var genDefaultQueryHandlerValue = function genDefaultQueryHandlerValue(schemas, editingRecord) { var permissions = {}; if (editingRecord === null || editingRecord === void 0 ? void 0 : editingRecord.resource) { var resources = editingRecord.resource.split("|"); var _loop_1 = function _loop_1(resource) { var _a = resource.split(":"), schema = _a[0], permission = _a[1]; if (schema === "*") { schemas.forEach(function (s) { permissions[s._id] = permission || "w"; }); } else { permissions[schema] = permission || "w"; } }; for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) { var resource = resources_1[_i]; _loop_1(resource); } } var defaultQuery = editingRecord ? editingRecord.default_query : {}; var parsedQuery = {}; if (defaultQuery) { Object.keys(defaultQuery).forEach(function (k) { try { parsedQuery[k] = JSON.parse(defaultQuery[k]); } catch (error) { parsedQuery[k] = defaultQuery[k]; } }); } var ret = schemas === null || schemas === void 0 ? void 0 : schemas.map(function (s) { return { _id: s._id, schema: s, permission: permissions[s._id] || "n", rule: parsedQuery[s._id] ? [(0, _rule.queryToTreeRules)(parsedQuery[s._id])] : [{ id: "0" }] }; }); return ret; }; var ZEAuthEditor = function ZEAuthEditor() { var _a; var t = (0, _useLocale.default)().t; var pageMenus = (0, _ZEConfigProvider.usePageMenus)(); var _b = (0, _react.useState)(false), drawerVisible = _b[0], setDrawerVisible = _b[1]; var _c = (0, _react.useState)(), editingRecord = _c[0], _setEditingRecord = _c[1]; var formRef = (0, _react.useRef)(); var _d = (0, _react.useState)(false), saveLoading = _d[0], setSaveLoading = _d[1]; var _e = (0, _react.useState)("edit"), mode = _e[0], setMode = _e[1]; var _f = (0, _react.useState)("role"), type = _f[0], setType = _f[1]; var _g = (0, _react.useState)(), accountRole = _g[0], setAccountRole = _g[1]; var typeName = (_a = types.find(function (d) { return d.value === type; })) === null || _a === void 0 ? void 0 : _a.label; var fetches = { getAllData: type === "role" ? _request.getRoles : _request.getAccounts, createData: type === "role" ? _request.createRole : _request.createAccount, updateData: type === "role" ? _request.updateRole : _request.updateAccount, deleteData: type === "role" ? _request.deleteRole : _request.deleteAccount }; var tableRef = (0, _react.useRef)(); var getAllData = fetches.getAllData, createData = fetches.createData, updateData = fetches.updateData, deleteData = fetches.deleteData; var _h = (0, _hooks.useRequest)(_request.getRoles, { formatResult: function formatResult(res) { return (res === null || res === void 0 ? void 0 : res.roles) || []; }, manual: true }), _j = _h.data, roles = _j === void 0 ? [] : _j, loadRoles = _h.run; var _k = (0, _hooks.useRequest)(type === "role" ? getAllData : function () { return Promise.resolve(null); }, { formatResult: function formatResult(res) { return (res === null || res === void 0 ? void 0 : res[type === "role" ? "roles" : "accounts"]) || []; }, refreshDeps: [type] }), _l = _k.data, data = _l === void 0 ? [] : _l, fetchData = _k.run, loading = _k.loading; var schemas = (0, _hooks.useRequest)(_zeroetpApiSdk.getSchemas, { formatResult: function formatResult(res) { return (res === null || res === void 0 ? void 0 : res.schemas) || []; } }).data; var getInitialValues = function getInitialValues(record) { if (record === void 0) { record = editingRecord; } var isAdmin = type === "account" && (record === null || record === void 0 ? void 0 : record.role) === "admin"; var permissions = pageMenus === null || pageMenus === void 0 ? void 0 : pageMenus.map(function (_m) { var _a; _m.id = _m.path; var m = (_a = record === null || record === void 0 ? void 0 : record.menu_permissions) === null || _a === void 0 ? void 0 : _a.find(function (f) { return f.path === _m.path; }); if (!m) { m = __assign(__assign({}, _m), { menus: _m.menus.map(function (d) { return d.value; }) }); } var fm = (0, _flat.default)({ permissions: m }, { maxDepth: 2 }); return __assign({ id: m.id, permissions: m }, fm); }); return __assign(__assign({}, record), { permissions: isAdmin ? permissions : [], default_query: genDefaultQueryHandlerValue(schemas, record) }); }; var setEditingRecord = function setEditingRecord(v) { _setEditingRecord(v); setAccountRole(v === null || v === void 0 ? void 0 : v.role); }; var onCancel = function onCancel() { setMode("edit"); setDrawerVisible(false); setEditingRecord(null); }; var onFinish = function onFinish() { return __awaiter(void 0, void 0, void 0, function () { var formData, menu_permissions, promise, query, default_query_1, resources_2, payload; var _a, _b; return __generator(this, function (_c) { setSaveLoading(true); formData = ((_a = formRef.current) === null || _a === void 0 ? void 0 : _a.getFieldsValue()) || {}; menu_permissions = ((_b = formData.permissions) === null || _b === void 0 ? void 0 : _b.map(function (d) { var _a; delete d.id; delete d.permissions; return (_a = _flat.default.unflatten(d)) === null || _a === void 0 ? void 0 : _a.permissions; })) || []; // 删掉多余字段 if (formData.permissions) { delete formData.permissions; } try { promise = void 0; query = formData.default_query || []; default_query_1 = {}; resources_2 = []; query.forEach(function (d) { if (d.rule instanceof Array) { var schemaQuery = (0, _rule.treeRulesToDefaultQuery)(d.rule)[0]; if (schemaQuery) { default_query_1[d.schema._id] = schemaQuery; } } resources_2.push(d.schema._id + ":" + d.permission); }); payload = __assign(__assign({}, formData), { default_query: default_query_1, menu_permissions: menu_permissions, resource: resources_2.join("|") }); if (payload.default_query && Object.keys(payload.default_query).length === 0) { delete payload.default_query; } if (editingRecord) { delete payload._id; promise = updateData(editingRecord._id, payload); } else { promise = createData(payload); } promise.then(function () { var _a, _b; _message2.default.success("保存成功"); onCancel(); if (type === "account") { editingRecord ? (_a = tableRef.current) === null || _a === void 0 ? void 0 : _a.reload() : (_b = tableRef.current) === null || _b === void 0 ? void 0 : _b.reloadAndRest(); } else { fetchData(); } }).finally(function () { setSaveLoading(false); }); } catch (error) { console.log(error); } return [2 /*return*/ ]; }); }); }; var onDelete = function onDelete(id) { return __awaiter(void 0, void 0, void 0, function () { var res; return __generator(this, function (_a) { switch (_a.label) { case 0: if (!id) return [3 /*break*/ , 2]; return [4 /*yield*/ , deleteData(id)]; case 1: res = _a.sent(); if (res) { _message2.default.success("删除成功"); fetchData(); } _a.label = 2; case 2: return [2 /*return*/ ]; } }); }); }; var columns = (type === "role" ? _constants.roleColumns : _constants.accountColumns).map(function (d) { var filterProps = (0, _FilterComponents.getColumnSimpleSearchProps)(d.dataIndex); return __assign(__assign(__assign({}, d), { width: 200, title: t(d.title) }), ["role", "username", "name"].includes(d.dataIndex) ? __assign(__assign({}, filterProps), { filterDropdown: function filterDropdown(args) { var _a; return (_a = filterProps === null || filterProps === void 0 ? void 0 : filterProps.filterDropdown) === null || _a === void 0 ? void 0 : _a.call(filterProps, __assign(__assign({}, args), { t: t })); } }) : {}); }).concat([{ title: t("action"), fixed: "right", width: 140, valueType: "option", render: function render(text, record) { return [/*#__PURE__*/_react.default.createElement("a", { key: "edit", onClick: function onClick() { setMode("edit"); setDrawerVisible(true); setEditingRecord(record); } }, "\u7F16\u8F91"), /*#__PURE__*/_react.default.createElement(_popconfirm.default, { title: "\u662F\u5426\u786E\u5B9A\u5220\u9664", key: "delete", onConfirm: function onConfirm() { onDelete(record === null || record === void 0 ? void 0 : record._id); } }, /*#__PURE__*/_react.default.createElement(_button.default, { type: "link", danger: true, style: { padding: 0 } }, "\u5220\u9664"))]; } }]); var roleOptions = loopRoles(roles, roles, 0); (0, _react.useEffect)(function () { var _a; if (type === "account") { (_a = tableRef.current) === null || _a === void 0 ? void 0 : _a.reloadAndRest(); } }, [type]); (0, _react.useEffect)(function () { if (drawerVisible) { loadRoles(); } }, [drawerVisible]); (0, _react.useEffect)(function () { var _a, _b; (_a = formRef.current) === null || _a === void 0 ? void 0 : _a.resetFields(); (_b = formRef === null || formRef === void 0 ? void 0 : formRef.current) === null || _b === void 0 ? void 0 : _b.setFieldsValue(getInitialValues()); }, [editingRecord, drawerVisible]); return /*#__PURE__*/_react.default.createElement(_spin.default, { spinning: loading }, /*#__PURE__*/_react.default.createElement(_proTable.default, { key: type, actionRef: tableRef, toolBarRender: function toolBarRender() { return [/*#__PURE__*/_react.default.createElement(_radio.default.Group, { key: "type", options: types, onChange: function onChange(e) { setType(e.target.value); setAccountRole(undefined); }, value: type, optionType: "button" }), /*#__PURE__*/_react.default.createElement(_button.default, { key: "add", type: "primary", onClick: function onClick() { setMode("edit"); setDrawerVisible(true); setEditingRecord(null); } }, "\u65B0\u5EFA")]; }, rowKey: "_id", headerTitle: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, typeName, "\u5217\u8868"), dataSource: type === "account" ? undefined : data, request: type === "account" ? function (params, sort, _filter) { return __awaiter(void 0, void 0, void 0, function () { var filter; return __generator(this, function (_a) { switch (_a.label) { case 0: filter = {}; Object.entries(_filter).map(function (_a) { var k = _a[0], v = _a[1]; if (v) { filter[k] = v; } }); return [4 /*yield*/ , fetches.getAllData(__assign(__assign({}, params), filter))]; case 1: return [2 /*return*/ , _a.sent()]; } }); }); } : undefined, columns: columns, search: false, options: false, scroll: { x: columns.reduce(function (p, c) { return p + c.width; }, 0) }, pagination: type === "account" ? { pageSize: 10 } : false }), /*#__PURE__*/_react.default.createElement(_drawer.default, { open: drawerVisible, width: 600, maskClosable: mode === "edit" ? false : true, onClose: onCancel, title: editingRecord ? "\u66F4\u65B0" + typeName : "\u65B0\u589E" + typeName, footer: mode === "edit" ? /*#__PURE__*/_react.default.createElement("div", { style: { display: "flex", flexDirection: "row-reverse" } }, /*#__PURE__*/_react.default.createElement(_space.default, null, /*#__PURE__*/_react.default.createElement(_button.default, { onClick: onCancel }, "\u53D6\u6D88"), /*#__PURE__*/_react.default.createElement(_button.default, { type: "primary", onClick: function onClick() { var _a; (_a = formRef === null || formRef === void 0 ? void 0 : formRef.current) === null || _a === void 0 ? void 0 : _a.submit(); }, loading: saveLoading }, "\u786E\u5B9A"))) : false }, type === "role" ? /*#__PURE__*/_react.default.createElement(_ZESchemaForm.default, { schemaID: "role", formRef: formRef, columns: _constants.roleColumns.map(function (d) { if (d === null || d === void 0 ? void 0 : d.title) { d.title = t(d.title); } if (d.dataIndex === "role" && editingRecord) { return __assign(__assign({}, d), { readonly: true }); } if (d.dataIndex === "parent") { return __assign(__assign({}, d), { fieldProps: function fieldProps(form, config) { var currentRole = form.getFieldValue("role"); return { options: loopRoles(roles, roles, 0, currentRole, function (f) { return (f === null || f === void 0 ? void 0 : f.value) !== "admin"; }), treeDefaultExpandAll: true }; } }); } if (d.dataIndex === "default_query") { return __assign(__assign({}, d), { renderFormItem: function renderFormItem(_dom, config) { return /*#__PURE__*/_react.default.createElement(_DefaultQueryHandler.default, __assign({}, config, { type: "role" })); } }); } return d; }), isKeyPressSubmit: false, schema: { _id: "role", type: "entity", name: "角色", properties: [{ name: "role", primal_type: "string", type: "string", constraints: { required: true } }] }, submitter: false, onFinish: onFinish }) : /*#__PURE__*/_react.default.createElement(_ZESchemaForm.default, { schemaID: "account", formRef: formRef, initialValues: getInitialValues(), columns: _constants.accountColumns.map(function (d) { if (d === null || d === void 0 ? void 0 : d.title) { d.title = t(d.title); } if (d.dataIndex === "username" && editingRecord) { return __assign(__assign({}, d), { readonly: true }); } if (d.dataIndex === "role") { return __assign(__assign({}, d), { fieldProps: { options: roleOptions, treeDefaultExpandAll: true, onChange: function onChange(v) { var _a; setAccountRole(v); // 重置permissions (_a = formRef === null || formRef === void 0 ? void 0 : formRef.current) === null || _a === void 0 ? void 0 : _a.setFieldsValue({ permissions: getInitialValues({ role: v }).permissions }); } } }); } if (d.dataIndex === "default_query") { return __assign(__assign({}, d), { renderFormItem: function renderFormItem(_dom, config) { return /*#__PURE__*/_react.default.createElement(_DefaultQueryHandler.default, __assign({}, config, { type: "account" })); } }); } if (d.dataIndex === "permissions") { return __assign(__assign({}, d), { valueType: "table", hideInForm: accountRole !== "admin", fieldProps: { recordCreatorProps: { style: { display: "none" } } }, columns: [{ dataIndex: "permissions.page", title: "页面名称", editable: false, width: 120 }, { dataIndex: "permissions.path", title: "页面路径", editable: false, width: 120 }, { dataIndex: "permissions.menus", title: "显示菜单", valueType: "checkboxGroup", fieldProps: function fieldProps(_, _a) { var _b; var entity = _a.entity; var path = entity["permissions.path"]; return { options: (_b = pageMenus === null || pageMenus === void 0 ? void 0 : pageMenus.find(function (d) { return d.path === path; })) === null || _b === void 0 ? void 0 : _b.menus }; } }] }); } return d; }), isKeyPressSubmit: false, schema: { _id: "account", type: "entity", name: "账号", properties: [{ name: "username", primal_type: "string", type: "string", constraints: { required: true } }, { name: "name", primal_type: "string", type: "string", constraints: { required: true } }, { name: "password", primal_type: "string", type: "string", constraints: { required: editingRecord ? false : true } }, { name: "role", primal_type: "string", type: "string", constraints: { required: true } }] }, submitter: false, onFinish: onFinish }))); }; var _default = ZEAuthEditor; exports.default = _default;