UNPKG

@choerodon/master

Version:
654 lines (553 loc) 24.4 kB
import "choerodon-ui/pro/lib/message/style"; import _message from "choerodon-ui/pro/lib/message"; import "choerodon-ui/pro/lib/text-field/style"; import _TextField from "choerodon-ui/pro/lib/text-field"; import "choerodon-ui/lib/icon/style"; import _Icon from "choerodon-ui/lib/icon"; import "choerodon-ui/lib/tooltip/style"; import _Tooltip from "choerodon-ui/lib/tooltip"; import "choerodon-ui/lib/button/style"; import _Button from "choerodon-ui/lib/button"; import "choerodon-ui/pro/lib/modal/style"; import _Modal from "choerodon-ui/pro/lib/modal"; import "choerodon-ui/pro/lib/select/style"; import _Select from "choerodon-ui/pro/lib/select"; function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } 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); } } 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); }); }; } import React, { useContext, useEffect, useRef, useCallback, Fragment } from 'react'; import queryString from 'query-string'; import { observer } from 'mobx-react-lite'; import { prompt, historyPushMenu } from "../../../../../utils"; import Store from "./stores"; import List from "./List"; import findFirstLeafMenu from "../../../util/findFirstLeafMenu"; import FormView from "./FormView"; import { axios } from "../../../../../index"; import { Content, Page } from "../../../../../components/c7n-page"; import { Permission } from "../../../../../components/permission"; import "./style/index.less"; var Option = _Select.Option; var modalKey = _Modal.key(); var createModalKey = _Modal.key(); var modalStyle = { width: '3.8rem' }; var iconStyle = { fontSize: '16px', marginLeft: '.11rem' }; var ListView = observer(function () { var context = useContext(Store); var cancelCreate = useRef(false); var dataSet = context.dataSet, showType = context.showType, toggleShowType = context.toggleShowType, isNotRecent = context.isNotRecent, toggleRecent = context.toggleRecent, setAuto = context.setAuto, HeaderStore = context.HeaderStore, MenuStore = context.MenuStore, history = context.history, AppState = context.AppState, projectStore = context.projectStore, formatMessage = context.intl.formatMessage; var recents = HeaderStore.getRecentItem; var getCanCreate = projectStore.getCanCreate; var checkRecentIsEmpty = useCallback(function (_ref) { var ds = _ref.dataSet; if (!ds.find(function (r) { return recents.find(function (v) { return v.id === r.get('id'); }); })) { toggleRecent('all'); } else { toggleRecent('recent'); } }, [dataSet]); function filterRecent(record, type) { if (type === 'all') { return true; } if (type === 'recent') { return !!recents.find(function (v) { return v.id === record.get('id'); }); } return record.get('createdBy') === AppState.getUserId; } function realData(type) { return dataSet.filter(function (r) { return filterRecent(r, type); }); } useEffect(function () { dataSet.addEventListener('load', checkRecentIsEmpty); }, []); function handleCreate() { return _handleCreate.apply(this, arguments); } function _handleCreate() { _handleCreate = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { var organizationId, current, _current$toData, category, code, name, imageUrl, data, res; return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: organizationId = AppState.currentMenuType.organizationId; current = dataSet.current; _context.next = 4; return current.validate(); case 4: _context.t0 = _context.sent; if (!(_context.t0 === true)) { _context.next = 19; break; } _current$toData = current.toData(), category = _current$toData.category, code = _current$toData.code, name = _current$toData.name, imageUrl = _current$toData.imageUrl; data = { name: name, code: code, category: category, imageUrl: imageUrl }; _context.next = 10; return axios.post("/iam/choerodon/v1/organizations/".concat(organizationId, "/projects"), data); case 10: res = _context.sent; if (!res.failed) { _context.next = 14; break; } prompt(res.message); return _context.abrupt("return", false); case 14: prompt('创建成功'); HeaderStore.setRecentItem(res); dataSet.query(); projectStore.checkCreate(organizationId); return _context.abrupt("return", true); case 19: case "end": return _context.stop(); } } }, _callee); })); return _handleCreate.apply(this, arguments); } function handleOkEdit() { return _handleOkEdit.apply(this, arguments); } function _handleOkEdit() { _handleOkEdit = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() { return regeneratorRuntime.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (!(dataSet.current.status === 'add')) { _context2.next = 5; break; } _context2.next = 3; return handleCreate(); case 3: _context2.t0 = _context2.sent; return _context2.abrupt("return", _context2.t0 === true); case 5: _context2.prev = 5; _context2.next = 8; return dataSet.submit(); case 8: _context2.t1 = _context2.sent; if (!(_context2.t1 !== false)) { _context2.next = 13; break; } dataSet.query(); _context2.next = 14; break; case 13: return _context2.abrupt("return", false); case 14: _context2.next = 19; break; case 16: _context2.prev = 16; _context2.t2 = _context2["catch"](5); return _context2.abrupt("return", false); case 19: case "end": return _context2.stop(); } } }, _callee2, null, [[5, 16]]); })); return _handleOkEdit.apply(this, arguments); } function handleCancel() { var current = dataSet.current; current.reset(); } function handleCancelCreate() { cancelCreate.current = true; } function handleRomove() { if (!cancelCreate.current) { return; } var current = dataSet.current; if (current.status === 'add') { dataSet.remove(current); } else { current.reset(); } cancelCreate.current = false; } function handleCreateProject() { dataSet.create(); _Modal.open({ key: createModalKey, drawer: true, title: '创建项目', className: 'c7n-projects-modal-create-project', children: /*#__PURE__*/React.createElement(FormView, { context: context }), onOk: handleOkEdit, onCancel: handleCancelCreate, afterClose: handleRomove, style: modalStyle }); } function handleEditProject() { _Modal.open({ key: modalKey, drawer: true, title: '项目设置', children: /*#__PURE__*/React.createElement(FormView, { context: context }), onOk: handleOkEdit, onCancel: handleCancel, style: modalStyle }); } function handleEnabledProject() { return _handleEnabledProject.apply(this, arguments); } function _handleEnabledProject() { _handleEnabledProject = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5() { var current, _current$toData2, id, organizationId, enabled, name, category, categories, isSubProject, okProps, ModalContent, result; return regeneratorRuntime.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: current = dataSet.current; _context5.prev = 1; _current$toData2 = current.toData(), id = _current$toData2.id, organizationId = _current$toData2.organizationId, enabled = _current$toData2.enabled, name = _current$toData2.name, category = _current$toData2.category, categories = _current$toData2.categories; isSubProject = categories.some(function (c) { return c.code === 'PROGRAM_PROJECT'; }); okProps = { disabled: true, color: 'red', style: { width: '100%', border: '1px solid rgba(27,31,35,.2)', height: 36, marginTop: -26 } }; ModalContent = function ModalContent(_ref2) { var modal = _ref2.modal; var extraMessage; if (category === 'PROGRAM') { extraMessage = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", { className: "c7n-projects-enable-tips" }, "\u8B66\u544A\uFF1A\u9879\u76EE\u7FA4\u505C\u7528\u540E\uFF0CART\u5C06\u81EA\u52A8\u505C\u6B62\uFF0C\u5B50\u9879\u76EE\u548C\u9879\u76EE\u7FA4\u7684\u5173\u8054\u4E5F\u5C06\u81EA\u52A8\u505C\u7528\uFF0C\u5B50\u9879\u76EE\u7684\u8FED\u4EE3\u8282\u594F\u3001\u8FED\u4EE3\u89C4\u5212\u4E0D\u518D\u53D7\u5230ART\u7684\u7EDF\u4E00\u7BA1\u7406\u3002ART\u4E0B\u8FDB\u884C\u4E2D\u7684PI\u5C06\u76F4\u63A5\u5B8C\u6210\uFF0C\u672A\u5B8C\u6210\u7684PI\u5C06\u4F1A\u5220\u9664\uFF0C\u672A\u5B8C\u6210\u7684\u7279\u6027\u5C06\u4F1A\u79FB\u52A8\u81F3\u5F85\u529E\u3002\u5B50\u9879\u76EE\u8FDB\u884C\u4E2D\u7684\u8FED\u4EE3\u4F1A\u76F4\u63A5\u5B8C\u6210\uFF0C\u672A\u5F00\u59CB\u7684\u51B2\u523A\u5C06\u4F1A\u5220\u9664\uFF0C\u672A\u5B8C\u6210\u7684\u95EE\u9898\u5C06\u4F1A\u79FB\u52A8\u81F3\u5F85\u529E\u3002\u8BF7\u8C28\u614E\u64CD\u4F5C\uFF01"), /*#__PURE__*/React.createElement("div", { style: { marginTop: 10 } }, "\u8BF7\u8F93\u5165", ' ', /*#__PURE__*/React.createElement("span", { style: { fontWeight: 600 } }, name), ' ', "\u6765\u786E\u8BA4\u505C\u7528\u3002"), /*#__PURE__*/React.createElement(_TextField, { style: { width: '100%', marginTop: 10 }, autoFocus: true, onInput: function onInput(e) { modal.update({ okProps: _objectSpread(_objectSpread({}, okProps), {}, { disabled: e.target.value !== name }) }); } })); } else if (isSubProject) { extraMessage = /*#__PURE__*/React.createElement("div", { className: "c7n-projects-enable-tips" }, "\u8B66\u544A\uFF1A\u5B50\u9879\u76EE\u505C\u7528\u540E\uFF0C\u4E0E\u9879\u76EE\u7FA4\u76F8\u5173\u7684\u51B2\u523A\u5C06\u53D1\u751F\u53D8\u52A8\uFF0C\u8FDB\u884C\u4E2D\u7684\u51B2\u523A\u4F1A\u76F4\u63A5\u5B8C\u6210\uFF0C\u672A\u5F00\u59CB\u7684\u51B2\u523A\u5C06\u4F1A\u5220\u9664\uFF0C\u672A\u5B8C\u6210\u7684\u95EE\u9898\u5C06\u4F1A\u79FB\u52A8\u81F3\u5F85\u529E\u3002\u8BF7\u8C28\u614E\u64CD\u4F5C\uFF01"); } var content = /*#__PURE__*/React.createElement("div", { style: { marginTop: -10 } }, category === 'PROGRAM' && /*#__PURE__*/React.createElement("p", { style: { marginBottom: 14, background: '#fffbdd', padding: '15px 26px', border: '1px solid rgba(27,31,35,.15)', width: 'calc(100% + 49px)', marginLeft: -25 } }, "\u8BF7\u4ED4\u7EC6\u9605\u8BFB\u4E0B\u5217\u4E8B\u9879\uFF01"), /*#__PURE__*/React.createElement("span", null, "\u786E\u5B9A\u8981\u505C\u7528\u9879\u76EE\u201C", name, "\u201D\u5417\uFF1F\u505C\u7528\u540E\uFF0C\u60A8\u548C\u9879\u76EE\u4E0B\u5176\u4ED6\u6210\u5458\u5C06\u65E0\u6CD5\u8FDB\u5165\u6B64\u9879\u76EE\u3002"), extraMessage); return content; }; if (!enabled) { _context5.next = 10; break; } if (category === 'PROGRAM') { _Modal.open({ title: '停用项目', children: /*#__PURE__*/React.createElement(ModalContent, null), onOk: function () { var _onOk = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() { var result; return regeneratorRuntime.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _context3.prev = 0; _context3.next = 3; return axios.put("/iam/choerodon/v1/organizations/".concat(organizationId, "/projects/").concat(id, "/disable")); case 3: result = _context3.sent; if (!result.failed) { _context3.next = 6; break; } throw result.message; case 6: dataSet.query(); _context3.next = 13; break; case 9: _context3.prev = 9; _context3.t0 = _context3["catch"](0); _message.error(_context3.t0); return _context3.abrupt("return", false); case 13: case "end": return _context3.stop(); } } }, _callee3, null, [[0, 9]]); })); function onOk() { return _onOk.apply(this, arguments); } return onOk; }(), okProps: okProps, okText: '我已经知道后果,停用此项目', closable: true, footer: function footer(okBtn) { return okBtn; } }); } else { _Modal.open({ title: '停用项目', children: /*#__PURE__*/React.createElement(ModalContent, null), onOk: function () { var _onOk2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4() { var result; return regeneratorRuntime.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: _context4.prev = 0; _context4.next = 3; return axios.put("/iam/choerodon/v1/organizations/".concat(organizationId, "/projects/").concat(id, "/disable")); case 3: result = _context4.sent; if (!result.failed) { _context4.next = 6; break; } throw result.message; case 6: dataSet.query(); _context4.next = 13; break; case 9: _context4.prev = 9; _context4.t0 = _context4["catch"](0); _message.error(_context4.t0); return _context4.abrupt("return", false); case 13: case "end": return _context4.stop(); } } }, _callee4, null, [[0, 9]]); })); function onOk() { return _onOk2.apply(this, arguments); } return onOk; }() }); } _context5.next = 22; break; case 10: _context5.prev = 10; _context5.next = 13; return axios.put("/iam/choerodon/v1/organizations/".concat(organizationId, "/projects/").concat(id, "/enable")); case 13: result = _context5.sent; if (!result.failed) { _context5.next = 16; break; } throw result.message; case 16: _context5.next = 22; break; case 18: _context5.prev = 18; _context5.t0 = _context5["catch"](10); _message.error(_context5.t0); return _context5.abrupt("return", false); case 22: dataSet.query(); _context5.next = 28; break; case 25: _context5.prev = 25; _context5.t1 = _context5["catch"](1); return _context5.abrupt("return", false); case 28: case "end": return _context5.stop(); } } }, _callee5, null, [[1, 25], [10, 18]]); })); return _handleEnabledProject.apply(this, arguments); } function handleChangeRecent(value) { setAuto(false); toggleRecent(value); } function handleClickProject(record) { var _record$toData = record.toData(), id = _record$toData.id, name = _record$toData.name, organizationId = _record$toData.organizationId, category = _record$toData.category; var type = 'project'; HeaderStore.setRecentItem(record.toData()); MenuStore.loadMenuData({ type: type, id: id }, false).then(function (menus) { var route = ''; var path; var domain; if (menus.length) { var _findFirstLeafMenu = findFirstLeafMenu(menus[0]), menuRoute = _findFirstLeafMenu.route, menuDomain = _findFirstLeafMenu.domain; route = menuRoute; domain = menuDomain; } // if (route) { path = "".concat(route, "?type=").concat(type, "&id=").concat(id, "&name=").concat(encodeURIComponent(name)).concat(category ? "&category=".concat(category) : ''); if (String(organizationId)) { path += "&organizationId=".concat(organizationId); } // } if (path) { historyPushMenu(history, path, domain); } }); } function renderHeader() { var _queryString$parse = queryString.parse(history.location.search), organizationId = _queryString$parse.organizationId; var org = (HeaderStore.getOrgData || []).find(function (v) { return String(v.id) === organizationId; }) || { name: '' }; return /*#__PURE__*/React.createElement("div", { className: "c7n-projects-header" }, /*#__PURE__*/React.createElement("div", { className: "c7n-projects-title" }, "".concat(org.name, "\u4E2D\u7684\u9879\u76EE")), /*#__PURE__*/React.createElement(Permission, { service: ['choerodon.code.organization.project.ps.create'] }, /*#__PURE__*/React.createElement(_Tooltip, { title: getCanCreate ? '' : '项目数量已达上限,无法创建更多项目', placement: "bottom" }, /*#__PURE__*/React.createElement(_Button, { type: "primary", funcType: "raised", disabled: !getCanCreate, onClick: handleCreateProject }, "\u521B\u5EFA\u9879\u76EE")))); } function renderTool() { return /*#__PURE__*/React.createElement("div", { className: "c7n-projects-tool" }, /*#__PURE__*/React.createElement(_Select, { labelLayout: "float", label: "\u9879\u76EE", clearButton: false, value: isNotRecent, onChange: handleChangeRecent, style: { width: 260 } }, (realData('recent').length > 0 || dataSet.queryDataSet.length > 0) && /*#__PURE__*/React.createElement(Option, { key: "recent", value: "recent" }, "\u6700\u8FD1\u4F7F\u7528"), /*#__PURE__*/React.createElement(Option, { key: "all", value: "all" }, "\u5168\u90E8\u9879\u76EE"), (realData('mine').length > 0 || dataSet.queryDataSet.length > 0) && /*#__PURE__*/React.createElement(Option, { key: "mine", value: "mine" }, "\u6211\u521B\u5EFA\u7684")), /*#__PURE__*/React.createElement("div", { className: "c7n-projects-tool-icon-group" }, /*#__PURE__*/React.createElement(_Icon, { type: "dashboard", style: iconStyle, className: showType === 'block' ? 'active' : null, onClick: function onClick() { return toggleShowType('block'); } }), /*#__PURE__*/React.createElement(_Icon, { type: "format_list_bulleted", style: iconStyle, className: showType === 'table' ? 'active' : null, onClick: function onClick() { return toggleShowType('table'); } }))); } return /*#__PURE__*/React.createElement(Page, null, renderHeader(), /*#__PURE__*/React.createElement(Content, null, renderTool(), /*#__PURE__*/React.createElement(List, { handleClickProject: handleClickProject, handleEditProject: handleEditProject, handleEnabledProject: handleEnabledProject }))); }); export default ListView;