diff --git a/eiam-console/src/main/console-fe/package.json b/eiam-console/src/main/console-fe/package.json
index ad3770ce..5c3e62bc 100644
--- a/eiam-console/src/main/console-fe/package.json
+++ b/eiam-console/src/main/console-fe/package.json
@@ -47,7 +47,7 @@
"@ant-design/charts": "^1.4.2",
"@ant-design/icons": "^5.2.6",
"@ant-design/maps": "^1.0.7",
- "@ant-design/pro-components": "^2.6.16",
+ "@ant-design/pro-components": "^2.6.18",
"ahooks": "^3.7.8",
"antd": "^5.8.6",
"antd-img-crop": "^4.12.2",
@@ -89,14 +89,14 @@
"@types/google-libphonenumber": "^7.4.26",
"@types/history": "^4.7.11",
"@types/js-yaml": "^4.0.5",
- "@types/lodash": "^4.14.197",
+ "@types/lodash": "^4.14.198",
"@types/numeral": "^2.0.2",
"@types/qs": "^6.9.8",
"@types/react": "^18.2.21",
"@types/react-dom": "^18.2.7",
"@types/react-helmet": "^6.1.6",
- "@umijs/lint": "^4.0.79",
- "@umijs/max": "^4.0.79",
+ "@umijs/lint": "^4.0.80",
+ "@umijs/max": "^4.0.80",
"cross-env": "^7.0.3",
"cross-port-killer": "^1.4.0",
"eslint": "^8.48.0",
diff --git a/eiam-console/src/main/console-fe/src/components/IconFont/lib/iconfont.js b/eiam-console/src/main/console-fe/src/components/IconFont/lib/iconfont.js
index 90ee4748..43cd3bd7 100644
--- a/eiam-console/src/main/console-fe/src/components/IconFont/lib/iconfont.js
+++ b/eiam-console/src/main/console-fe/src/components/IconFont/lib/iconfont.js
@@ -15,4 +15,69 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
-window._iconfont_svg_string_3203993='',function(c){var l=(l=document.getElementsByTagName("script"))[l.length-1],a=l.getAttribute("data-injectcss"),l=l.getAttribute("data-disable-injectsvg");if(!l){var h,t,i,p,m,d=function(l,a){a.parentNode.insertBefore(l,a)};if(a&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}h=function(){let l,a=document.createElement("div");a.innerHTML=c._iconfont_svg_string_3203993,(a=a.getElementsByTagName("svg")[0])&&(a.setAttribute("aria-hidden","true"),a.style.position="absolute",a.style.width=0,a.style.height=0,a.style.overflow="hidden",a=a,(l=document.body).firstChild?d(a,l.firstChild):l.appendChild(a))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),h()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(i=h,p=c.document,m=!1,o(),p.onreadystatechange=function(){"complete"==p.readyState&&(p.onreadystatechange=null,z())})}function z(){m||(m=!0,i())}function o(){try{p.documentElement.doScroll("left")}catch(l){return void setTimeout(o,50)}z()}}(window);
+(window._iconfont_svg_string_3203993 =
+ ''),
+ (function (c) {
+ var l = (l = document.getElementsByTagName('script'))[l.length - 1],
+ a = l.getAttribute('data-injectcss'),
+ l = l.getAttribute('data-disable-injectsvg');
+ if (!l) {
+ var h,
+ t,
+ i,
+ p,
+ m,
+ d = function (l, a) {
+ a.parentNode.insertBefore(l, a);
+ };
+ if (a && !c.__iconfont__svg__cssinject__) {
+ c.__iconfont__svg__cssinject__ = !0;
+ try {
+ document.write(
+ '',
+ );
+ } catch (l) {
+ console && console.log(l);
+ }
+ }
+ (h = function () {
+ let l,
+ a = document.createElement('div');
+ (a.innerHTML = c._iconfont_svg_string_3203993),
+ (a = a.getElementsByTagName('svg')[0]) &&
+ (a.setAttribute('aria-hidden', 'true'),
+ (a.style.position = 'absolute'),
+ (a.style.width = 0),
+ (a.style.height = 0),
+ (a.style.overflow = 'hidden'),
+ (a = a),
+ (l = document.body).firstChild ? d(a, l.firstChild) : l.appendChild(a));
+ }),
+ document.addEventListener
+ ? ~['complete', 'loaded', 'interactive'].indexOf(document.readyState)
+ ? setTimeout(h, 0)
+ : ((t = function () {
+ document.removeEventListener('DOMContentLoaded', t, !1), h();
+ }),
+ document.addEventListener('DOMContentLoaded', t, !1))
+ : document.attachEvent &&
+ ((i = h),
+ (p = c.document),
+ (m = !1),
+ o(),
+ (p.onreadystatechange = function () {
+ 'complete' == p.readyState && ((p.onreadystatechange = null), z());
+ }));
+ }
+ function z() {
+ m || ((m = !0), i());
+ }
+ function o() {
+ try {
+ p.documentElement.doScroll('left');
+ } catch (l) {
+ return void setTimeout(o, 50);
+ }
+ z();
+ }
+ })(window);
diff --git a/eiam-console/src/main/console-fe/src/components/UserAvatar/UserAvatar.tsx b/eiam-console/src/main/console-fe/src/components/UserAvatar/UserAvatar.tsx
index 078d52ea..499d4075 100644
--- a/eiam-console/src/main/console-fe/src/components/UserAvatar/UserAvatar.tsx
+++ b/eiam-console/src/main/console-fe/src/components/UserAvatar/UserAvatar.tsx
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
import { Avatar, Image } from 'antd';
-import { AvatarSize } from 'antd/es/avatar/SizeContext';
+import { AvatarSize } from 'antd/es/avatar/AvatarContext';
export default (props: {
avatar: string;
diff --git a/eiam-console/src/main/console-fe/src/pages/account/UserDetail/UserDetail.tsx b/eiam-console/src/main/console-fe/src/pages/account/UserDetail/UserDetail.tsx
index cb98e2ca..504bbb80 100644
--- a/eiam-console/src/main/console-fe/src/pages/account/UserDetail/UserDetail.tsx
+++ b/eiam-console/src/main/console-fe/src/pages/account/UserDetail/UserDetail.tsx
@@ -46,7 +46,7 @@ export default () => {
history.push(`/account/user`);
return;
}
- if (!type) {
+ if (!type || !UserDetailTabs[type]) {
setTabActiveKey(UserDetailTabs.user_info);
history.replace({
pathname: location.pathname,
diff --git a/eiam-console/src/main/console-fe/src/pages/account/UserGroupDetail/UserGroupDetail.tsx b/eiam-console/src/main/console-fe/src/pages/account/UserGroupDetail/UserGroupDetail.tsx
index 8cd23ffa..fee130d5 100644
--- a/eiam-console/src/main/console-fe/src/pages/account/UserGroupDetail/UserGroupDetail.tsx
+++ b/eiam-console/src/main/console-fe/src/pages/account/UserGroupDetail/UserGroupDetail.tsx
@@ -55,7 +55,7 @@ export default () => {
history.push(`/account/user-group`);
return;
}
- if (!type) {
+ if (!type || !UserGroupDetailTabs[type]) {
setTabActiveKey(UserGroupDetailTabs.member);
history.push({
pathname: location.pathname,
diff --git a/eiam-console/src/main/console-fe/src/pages/account/UserGroupList/components/AddUserGroup/AddUserGroup.tsx b/eiam-console/src/main/console-fe/src/pages/account/UserGroupList/components/AddUserGroup/AddUserGroup.tsx
index aba73683..de0a10bc 100644
--- a/eiam-console/src/main/console-fe/src/pages/account/UserGroupList/components/AddUserGroup/AddUserGroup.tsx
+++ b/eiam-console/src/main/console-fe/src/pages/account/UserGroupList/components/AddUserGroup/AddUserGroup.tsx
@@ -48,8 +48,10 @@ export default (props: {
preserve={false}
width="500px"
open={visible}
- onOpenChange={() => {
- form.setFieldsValue({ code: random(9) });
+ onOpenChange={(visible) => {
+ if (visible) {
+ form.setFieldsValue({ code: random(9) });
+ }
}}
modalProps={{
maskClosable: true,
@@ -58,9 +60,9 @@ export default (props: {
}}
onFinish={async (values: AccountAPI.BaseUserGroup) => {
setLoading(true);
- const result = await onFinish(values);
- setLoading(false);
- return !!result;
+ await onFinish(values).finally(() => {
+ setLoading(false);
+ });
}}
>
diff --git a/eiam-console/src/main/console-fe/src/pages/account/UserList/components/CreateUser/CreateUser.tsx b/eiam-console/src/main/console-fe/src/pages/account/UserList/components/CreateUser/CreateUser.tsx
index ceee1ee9..f7c8ebfa 100644
--- a/eiam-console/src/main/console-fe/src/pages/account/UserList/components/CreateUser/CreateUser.tsx
+++ b/eiam-console/src/main/console-fe/src/pages/account/UserList/components/CreateUser/CreateUser.tsx
@@ -136,7 +136,7 @@ const CreateUser = (props: CreateUserProps) => {
*/
const cancel = async () => {
if (onCancel) {
- await onCancel();
+ onCancel();
}
setSubmitLoading(false);
form.resetFields();
diff --git a/eiam-console/src/main/console-fe/src/pages/account/UserList/components/UpdateUser/UpdateUser.tsx b/eiam-console/src/main/console-fe/src/pages/account/UserList/components/UpdateUser/UpdateUser.tsx
index 9dc91c65..a7a61cc4 100644
--- a/eiam-console/src/main/console-fe/src/pages/account/UserList/components/UpdateUser/UpdateUser.tsx
+++ b/eiam-console/src/main/console-fe/src/pages/account/UserList/components/UpdateUser/UpdateUser.tsx
@@ -99,7 +99,7 @@ const UpdateUser = (props: UpdateFormProps) => {
*/
const cancel = async () => {
if (onCancel) {
- await onCancel();
+ onCancel();
}
setSubmitLoading(false);
form.resetFields();
diff --git a/eiam-console/src/main/console-fe/src/pages/app/AppConfig/data.d.ts b/eiam-console/src/main/console-fe/src/pages/app/AppConfig/data.d.ts
index e708a4be..6e31e932 100644
--- a/eiam-console/src/main/console-fe/src/pages/app/AppConfig/data.d.ts
+++ b/eiam-console/src/main/console-fe/src/pages/app/AppConfig/data.d.ts
@@ -38,3 +38,105 @@ export type GetApp = {
enabled: boolean;
remark: string;
};
+
+/**
+ * 应用权限列表
+ */
+export type AppAccessPolicyList = {
+ id: string;
+ //主体ID
+ subjectId: string;
+ //主体名称
+ subjectName: string;
+ //主体类型
+ subjectType: string;
+ //应用类型
+ appType: string;
+ appProtocol: string;
+ //Effect
+ effect: string;
+};
+
+/**
+ * 角色列表
+ */
+type AppPermissionRoleList = {
+ id: string;
+ name: string;
+ code: string;
+ enabled: boolean;
+ appId: string;
+ remark: string;
+};
+
+/**
+ * 角色列表
+ */
+type GetAppPermissionRole = {
+ id: string;
+ name: string;
+ code: string;
+ enabled: boolean;
+ appId: string;
+ remark: string;
+};
+
+/**
+ * 资源列表
+ */
+type AppPermissionResourceList = {
+ id: string;
+ name: string;
+ code: string;
+ enabled: boolean;
+ desc: string;
+ appId: string;
+};
+
+/**
+ * 权限资源点
+ */
+type AppPermissionResourceActionList = {
+ id: string;
+ name: string;
+ code: string;
+ desc: string;
+ appId: string;
+ menus: {
+ access: string;
+ id: string;
+ name: string;
+ }[];
+ datas: {
+ access: string;
+ id: string;
+ name: string;
+ }[];
+ buttons: {
+ access: string;
+ id: string;
+ name: string;
+ }[];
+ apis: {
+ access: string;
+ id: string;
+ name: string;
+ }[];
+ others: {
+ access: string;
+ id: string;
+ name: string;
+ }[];
+};
+
+/**
+ * 权限授权列表
+ */
+type AppPermissionPolicyList = {
+ id: string;
+ name: string;
+ code: string;
+ enabled: boolean;
+ desc: string;
+ appId: string;
+};
diff --git a/eiam-console/src/main/console-fe/src/pages/security/Administrator/Administrator.tsx b/eiam-console/src/main/console-fe/src/pages/security/Administrator/Administrator.tsx
index b9288be5..cd907620 100644
--- a/eiam-console/src/main/console-fe/src/pages/security/Administrator/Administrator.tsx
+++ b/eiam-console/src/main/console-fe/src/pages/security/Administrator/Administrator.tsx
@@ -39,6 +39,7 @@ import CreateAdministrator from './components/CreateAdministrator';
import UpdateAdministrator from './components/UpdateAdministrator';
import ResetPassword from './components/ResetAdministratorPassword';
import Avatar from '@/components/UserAvatar';
+import { AdministratorList } from './data';
export const Administrator = () => {
const intl = useIntl();
@@ -49,7 +50,7 @@ export const Administrator = () => {
const [resetPasswordVisible, setResetPasswordVisible] = useState(false);
const [id, setId] = useState();
const [loading, setLoading] = useState(false);
- const columns: ProColumns[] = [
+ const columns: ProColumns[] = [
{
title: intl.formatMessage({ id: 'pages.setting.administrator.table.columns.username' }),
dataIndex: 'username',
@@ -289,7 +290,7 @@ export const Administrator = () => {
}
>
<>
-
+
actionRef={actionRef}
columns={columns}
rowKey={'id'}
diff --git a/eiam-console/src/main/console-fe/src/pages/security/Setting/data.d.ts b/eiam-console/src/main/console-fe/src/pages/security/Setting/data.d.ts
index 096e3414..d18cfe6f 100644
--- a/eiam-console/src/main/console-fe/src/pages/security/Setting/data.d.ts
+++ b/eiam-console/src/main/console-fe/src/pages/security/Setting/data.d.ts
@@ -18,3 +18,14 @@
export type SecurityDefensePolicyConfig = {
contentSecurityPolicy: string;
};
+
+/**
+ * 安全基础配置
+ */
+export type BasicSettingConfig = {
+ frequentRegisterCheck: boolean;
+ emailVerifiedDefault: boolean;
+ sendWelcomeEmail: boolean;
+ verifyOldEmail: boolean;
+ verifyOldPhone: boolean;
+};
diff --git a/eiam-console/src/main/console-fe/src/pages/setting/Message/Message.tsx b/eiam-console/src/main/console-fe/src/pages/setting/Message/Message.tsx
index ccbf1cea..a4062ee6 100644
--- a/eiam-console/src/main/console-fe/src/pages/setting/Message/Message.tsx
+++ b/eiam-console/src/main/console-fe/src/pages/setting/Message/Message.tsx
@@ -35,7 +35,7 @@ export default (): React.ReactNode => {
const { type } = query as {
type: TabType;
};
- if (!type) {
+ if (!type || !TabType[type]) {
setActiveKey(TabType.mail_template);
history.replace({
pathname: location.pathname,
diff --git a/eiam-console/src/main/console-fe/src/pages/setting/Message/components/MailTemplate/MailTemplate.tsx b/eiam-console/src/main/console-fe/src/pages/setting/Message/components/MailTemplate/MailTemplate.tsx
index 21670230..01e81683 100644
--- a/eiam-console/src/main/console-fe/src/pages/setting/Message/components/MailTemplate/MailTemplate.tsx
+++ b/eiam-console/src/main/console-fe/src/pages/setting/Message/components/MailTemplate/MailTemplate.tsx
@@ -26,6 +26,7 @@ import MailTemplateConfig from './MailTemplateConfig';
import useStyle from './style';
import classnames from 'classnames';
import { useIntl } from '@umijs/max';
+import { EmailTemplateList } from '../../data.d';
const prefixCls = 'setting-mail-template';
@@ -36,7 +37,7 @@ export default (props: { visible: boolean }) => {
const [content, setContent] = useState('');
const [configType, setConfigType] = useState('');
const [loading, setLoading] = useState(false);
- const [dataSource, setDataSource] = useState([]);
+ const [dataSource, setDataSource] = useState([]);
const [browseVisible, setBrowseVisible] = useState(false);
const { styles } = useStyle(prefixCls);
const intl = useIntl();
@@ -85,7 +86,7 @@ export default (props: { visible: boolean }) => {
-
+
rowKey="type"
split
cardProps={{ bodyStyle: { padding: 0 } }}
diff --git a/eiam-console/src/main/console-fe/src/pages/setting/Message/components/SmsProvider/SmsProvider.tsx b/eiam-console/src/main/console-fe/src/pages/setting/Message/components/SmsProvider/SmsProvider.tsx
index 8305fdb4..1c9731f1 100644
--- a/eiam-console/src/main/console-fe/src/pages/setting/Message/components/SmsProvider/SmsProvider.tsx
+++ b/eiam-console/src/main/console-fe/src/pages/setting/Message/components/SmsProvider/SmsProvider.tsx
@@ -45,6 +45,7 @@ import QiNiu from './QiNiu';
import Tencent from './Tencent';
import { Container } from '@/components/Container';
import { useIntl } from '@umijs/max';
+import { SmsTemplateList } from '@/pages/setting/Message/data';
const layout = {
labelCol: {
@@ -130,7 +131,7 @@ const TestModal = (props: {
};
export default (props: { visible: boolean }) => {
const [form] = Form.useForm();
- const editorFormRef = useRef>();
+ const editorFormRef = useRef>();
const intl = useIntl();
const { message, modal } = App.useApp();
const actionRef = useRef();
@@ -144,7 +145,7 @@ export default (props: { visible: boolean }) => {
const [enabled, setEnabled] = useState(false);
const [language, setLanguage] = useState(Language.ZH);
const [editableKeys, setEditableRowKeys] = useState();
- const [smsTemplateList, setSmsTemplateList] = useState();
+ const [smsTemplateList, setSmsTemplateList] = useState();
const columns: ProColumns[] = [
{
@@ -380,7 +381,7 @@ export default (props: { visible: boolean }) => {
label={intl.formatMessage({ id: 'pages.setting.message.sms_provider.provider' })}
rules={[{ required: true }]}
fieldProps={{
- onChange: async (value) => {
+ onChange: async (value: string) => {
setLoading(true);
setProvider(value);
//清理
diff --git a/eiam-console/src/main/console-fe/src/pages/setting/Storage/locales/zh-CN.ts b/eiam-console/src/main/console-fe/src/pages/setting/Storage/locales/zh-CN.ts
index 90318df8..8ca0d852 100644
--- a/eiam-console/src/main/console-fe/src/pages/setting/Storage/locales/zh-CN.ts
+++ b/eiam-console/src/main/console-fe/src/pages/setting/Storage/locales/zh-CN.ts
@@ -99,27 +99,20 @@ export default {
'pages.setting.storage_provider.minio.bucket.rule.0.message': 'MinIO Bucket为必填项',
'pages.setting.storage_provider.provider.s3': 'S3',
'pages.setting.storage_provider.provider.s3.endpoint': 'S3 域名',
- 'pages.setting.storage_provider.provider.s3.endpoint.placeholder':
- '请输入 S3 域名',
+ 'pages.setting.storage_provider.provider.s3.endpoint.placeholder': '请输入 S3 域名',
'pages.setting.storage_provider.provider.qiniu_kodo.endpoint.rule.0.message':
'七牛云Kodo S3 域名为必填项',
'pages.setting.storage_provider.provider.s3.domain': '外链域名',
- 'pages.setting.storage_provider.provider.s3.domain.placeholder':
- '请输入S3 外链域名',
- 'pages.setting.storage_provider.provider.s3.domain.rule.0.message':
- 'S3 外链域名为必填项',
- 'pages.setting.storage_provider.provider.s3.access_key_id.placeholder':
- '请输入S3 AccessKeyId',
+ 'pages.setting.storage_provider.provider.s3.domain.placeholder': '请输入S3 外链域名',
+ 'pages.setting.storage_provider.provider.s3.domain.rule.0.message': 'S3 外链域名为必填项',
+ 'pages.setting.storage_provider.provider.s3.access_key_id.placeholder': '请输入S3 AccessKeyId',
'pages.setting.storage_provider.provider.s3.access_key_id.rule.0.message':
'S3 AccessKeyId为必填项',
'pages.setting.storage_provider.provider.s3.secret_access_key.placeholder':
'请输入S3 SecretAccessKey',
'pages.setting.storage_provider.provider.s3.secret_access_key.rule.0.message':
'S3 SecretAccessKey为必填项',
- 'pages.setting.storage_provider.provider.s3.region.placeholder':
- '请输入S3 Region',
- 'pages.setting.storage_provider.provider.s3.bucket.placeholder':
- '请输入S3 Bucket',
- 'pages.setting.storage_provider.provider.s3.bucket.rule.0.message':
- 'S3 Bucket为必填项',
+ 'pages.setting.storage_provider.provider.s3.region.placeholder': '请输入S3 Region',
+ 'pages.setting.storage_provider.provider.s3.bucket.placeholder': '请输入S3 Bucket',
+ 'pages.setting.storage_provider.provider.s3.bucket.rule.0.message': 'S3 Bucket为必填项',
};
diff --git a/eiam-console/src/main/console-fe/src/services/app.ts b/eiam-console/src/main/console-fe/src/services/app.ts
index 0d095409..f96d967b 100644
--- a/eiam-console/src/main/console-fe/src/services/app.ts
+++ b/eiam-console/src/main/console-fe/src/services/app.ts
@@ -21,18 +21,6 @@ import type { SortOrder } from 'antd/es/table/interface';
import { request } from '@umijs/max';
import type { UploadFile } from 'antd/es/upload/interface';
-/**
- * Get Application Template FormSchema
- */
-export async function getAppTemplateFormSchema(
- code: string,
-): Promise>> {
- return request>(`/api/v1/app/template/form_schema`, {
- method: 'GET',
- params: { code: code },
- });
-}
-
/**
* 获取应用列表
*/
@@ -65,15 +53,6 @@ export async function updateApp(params: Record): Promise> {
- return request>(`/api/v1/app/get/${id}`, {
- method: 'GET',
- });
-}
-
/**
* Get Config
*/
diff --git a/eiam-console/src/main/console-fe/src/services/typings.d.ts b/eiam-console/src/main/console-fe/src/services/typings.d.ts
index 6a725ab9..7e4300f5 100644
--- a/eiam-console/src/main/console-fe/src/services/typings.d.ts
+++ b/eiam-console/src/main/console-fe/src/services/typings.d.ts
@@ -422,28 +422,4 @@ declare namespace AppAPI {
template: string;
remark: string;
};
-
- /**
- * 应用信息
- */
- export type GetApp = {
- id: string;
- type: string;
- name: string;
- icon: string;
- template: string;
- protocol: string;
- protocolName: string;
- clientId: string;
- clientSecret: string;
- //sso发起方
- initLoginType: string;
- //sso登录链接
- initLoginUrl: string;
- nameIdValueType: string;
- //授权范围
- authorizationType: string;
- enabled: boolean;
- remark: string;
- };
}
diff --git a/eiam-console/src/main/java/cn/topiam/employee/console/controller/app/AppGroupController.java b/eiam-console/src/main/java/cn/topiam/employee/console/controller/app/AppGroupController.java
index 0f635ae4..a99ec1fb 100644
--- a/eiam-console/src/main/java/cn/topiam/employee/console/controller/app/AppGroupController.java
+++ b/eiam-console/src/main/java/cn/topiam/employee/console/controller/app/AppGroupController.java
@@ -59,7 +59,7 @@ import static cn.topiam.employee.common.constant.AppConstants.APP_PATH;
@Tag(name = "应用分组管理")
@RestController
@AllArgsConstructor
-@RequestMapping(value = APP_PATH + "/app_group", produces = MediaType.APPLICATION_JSON_VALUE)
+@RequestMapping(value = APP_PATH + "/group", produces = MediaType.APPLICATION_JSON_VALUE)
public class AppGroupController {
/**
diff --git a/eiam-console/src/main/java/cn/topiam/employee/console/converter/app/AppGroupConverter.java b/eiam-console/src/main/java/cn/topiam/employee/console/converter/app/AppGroupConverter.java
index 381b2fcd..3b3f1ee8 100644
--- a/eiam-console/src/main/java/cn/topiam/employee/console/converter/app/AppGroupConverter.java
+++ b/eiam-console/src/main/java/cn/topiam/employee/console/converter/app/AppGroupConverter.java
@@ -96,21 +96,7 @@ public interface AppGroupConverter {
* @param entity {@link AppGroupEntity}
* @return {@link AppGroupListResult}
*/
- default AppGroupListResult entityConvertToAppGroupListResult(AppGroupEntity entity) {
- if (entity == null) {
- return null;
- }
-
- AppGroupListResult appGroupListResult = new AppGroupListResult();
- if (entity.getId() != null) {
- appGroupListResult.setId(String.valueOf(entity.getId()));
- }
- appGroupListResult.setName(entity.getName());
- appGroupListResult.setCode(entity.getCode());
- appGroupListResult.setEnabled(entity.getEnabled());
- appGroupListResult.setRemark(entity.getRemark());
- return appGroupListResult;
- }
+ AppGroupListResult entityConvertToAppGroupListResult(AppGroupEntity entity);
/**
* 实体转分组返回
@@ -118,20 +104,7 @@ public interface AppGroupConverter {
* @param entity {@link AppGroupEntity}
* @return {@link AppGroupGetResult}
*/
- default AppGroupGetResult entityConvertToAppGroupResult(AppGroupEntity entity) {
- if (entity == null) {
- return null;
- }
- AppGroupGetResult appGroupGetResult = new AppGroupGetResult();
-
- if (entity.getId() != null) {
- appGroupGetResult.setId(String.valueOf(entity.getId()));
- }
- appGroupGetResult.setName(entity.getName());
- appGroupGetResult.setEnabled(entity.getEnabled());
- appGroupGetResult.setCreateTime(entity.getCreateTime());
- return appGroupGetResult;
- }
+ AppGroupGetResult entityConvertToAppGroupResult(AppGroupEntity entity);
/**
* 将分组修改对象转换为entity
@@ -139,12 +112,12 @@ public interface AppGroupConverter {
* @param param {@link AppGroupUpdateParam}
* @return {@link AppGroupEntity}
*/
+ @Mapping(target = "enabled", ignore = true)
@Mapping(target = "deleted", ignore = true)
@Mapping(target = "updateTime", ignore = true)
@Mapping(target = "updateBy", ignore = true)
@Mapping(target = "createTime", ignore = true)
@Mapping(target = "createBy", ignore = true)
- @Mapping(target = "enabled", ignore = false)
AppGroupEntity appGroupUpdateParamConverterToEntity(AppGroupUpdateParam param);
/**
@@ -153,6 +126,7 @@ public interface AppGroupConverter {
* @param param {@link AppAccountCreateParam}
* @return {@link AppAccountEntity}
*/
+ @Mapping(target = "enabled", expression = "java(Boolean.TRUE)")
@Mapping(target = "deleted", ignore = true)
@Mapping(target = "id", ignore = true)
@Mapping(target = "updateTime", ignore = true)
diff --git a/eiam-console/src/main/java/cn/topiam/employee/console/pojo/result/app/AppGroupListResult.java b/eiam-console/src/main/java/cn/topiam/employee/console/pojo/result/app/AppGroupListResult.java
index c8acdbf5..e32cf3a6 100644
--- a/eiam-console/src/main/java/cn/topiam/employee/console/pojo/result/app/AppGroupListResult.java
+++ b/eiam-console/src/main/java/cn/topiam/employee/console/pojo/result/app/AppGroupListResult.java
@@ -18,6 +18,7 @@
package cn.topiam.employee.console.pojo.result.app;
import java.io.Serializable;
+import java.time.LocalDateTime;
import lombok.Data;
@@ -58,6 +59,12 @@ public class AppGroupListResult implements Serializable {
@Parameter(description = "是否启用")
private Boolean enabled;
+ /**
+ * 创建时间
+ */
+ @Parameter(description = "创建时间")
+ private LocalDateTime createTime;
+
/**
* 备注
*/
diff --git a/eiam-console/src/main/java/cn/topiam/employee/console/pojo/save/app/AppGroupCreateParam.java b/eiam-console/src/main/java/cn/topiam/employee/console/pojo/save/app/AppGroupCreateParam.java
index b3210144..580f59d2 100644
--- a/eiam-console/src/main/java/cn/topiam/employee/console/pojo/save/app/AppGroupCreateParam.java
+++ b/eiam-console/src/main/java/cn/topiam/employee/console/pojo/save/app/AppGroupCreateParam.java
@@ -31,7 +31,7 @@ import jakarta.validation.constraints.NotBlank;
* Created by support@topiam.cn on 2023/8/31 23:26
*/
@Data
-@Schema(description = "分组保存入参")
+@Schema(description = "应用分组保存入参")
public class AppGroupCreateParam implements Serializable {
/**
@@ -41,16 +41,17 @@ public class AppGroupCreateParam implements Serializable {
@Schema(description = "分组名称")
private String name;
+ /**
+ * 分组编码
+ */
+ @NotBlank(message = "分组编码不能为空")
+ @Schema(description = "分组编码")
+ private String code;
+
/**
* 备注
*/
@Schema(description = "备注")
private String remark;
- /**
- * 分组编码
- */
- @Schema(description = "分组编码")
- private String code;
-
}
diff --git a/eiam-console/src/main/java/cn/topiam/employee/console/pojo/update/app/AppGroupUpdateParam.java b/eiam-console/src/main/java/cn/topiam/employee/console/pojo/update/app/AppGroupUpdateParam.java
index b0fff9ec..903d74f1 100644
--- a/eiam-console/src/main/java/cn/topiam/employee/console/pojo/update/app/AppGroupUpdateParam.java
+++ b/eiam-console/src/main/java/cn/topiam/employee/console/pojo/update/app/AppGroupUpdateParam.java
@@ -53,12 +53,6 @@ public class AppGroupUpdateParam implements Serializable {
@Schema(description = "分组编码")
private String code;
- /**
- * 分组是否启用
- */
- @Schema(description = "分组是否启用")
- private Boolean enabled;
-
/**
* 备注
*/
diff --git a/eiam-portal/src/main/java/cn/topiam/employee/portal/converter/AppGroupConverter.java b/eiam-portal/src/main/java/cn/topiam/employee/portal/converter/AppGroupConverter.java
index ab6c80f0..73a3881a 100644
--- a/eiam-portal/src/main/java/cn/topiam/employee/portal/converter/AppGroupConverter.java
+++ b/eiam-portal/src/main/java/cn/topiam/employee/portal/converter/AppGroupConverter.java
@@ -30,6 +30,7 @@ import cn.topiam.employee.common.entity.app.AppGroupEntity;
import cn.topiam.employee.common.entity.app.QAppGroupAssociationEntity;
import cn.topiam.employee.common.entity.app.QAppGroupEntity;
import cn.topiam.employee.portal.pojo.result.AppGroupListResult;
+import org.mapstruct.Mapping;
/**
* 分组映射
@@ -61,9 +62,7 @@ public interface AppGroupConverter {
*/
default Predicate queryAppGroupAssociationPredicate() {
QAppGroupAssociationEntity appGroupAssociation = QAppGroupAssociationEntity.appGroupAssociationEntity;
- Predicate predicate = appGroupAssociation.deleted.eq(Boolean.FALSE);
- //@formatter:on
- return predicate;
+ return appGroupAssociation.deleted.eq(Boolean.FALSE);
}
/**
@@ -78,9 +77,9 @@ public interface AppGroupConverter {
List results = new ArrayList<>();
for (AppGroupEntity entity : list) {
AppGroupListResult result = appGroupEntityConverterToResult(entity);
- Long count = appGroupAssociationList.stream()
+ long count = appGroupAssociationList.stream()
.filter(t -> t.getGroupId().equals(entity.getId())).count();
- result.setAppCount(Integer.valueOf(count.toString()));
+ result.setAppCount(Integer.valueOf(Long.toString(count)));
results.add(result);
}
return results;
@@ -92,6 +91,7 @@ public interface AppGroupConverter {
* @param entity {@link AppGroupEntity}
* @return {@link AppGroupEntity}
*/
+ @Mapping(target = "appCount", ignore = true)
AppGroupListResult appGroupEntityConverterToResult(AppGroupEntity entity);
}
diff --git a/eiam-portal/src/main/portal-fe/package.json b/eiam-portal/src/main/portal-fe/package.json
index 07511d18..a05715f9 100644
--- a/eiam-portal/src/main/portal-fe/package.json
+++ b/eiam-portal/src/main/portal-fe/package.json
@@ -48,7 +48,7 @@
"@ant-design/charts": "^1.4.2",
"@ant-design/icons": "^5.2.6",
"@ant-design/maps": "^1.0.7",
- "@ant-design/pro-components": "^2.6.16",
+ "@ant-design/pro-components": "^2.6.18",
"ahooks": "^3.7.8",
"antd": "^5.8.6",
"antd-img-crop": "^4.12.2",
@@ -84,14 +84,14 @@
"@types/google-libphonenumber": "^7.4.26",
"@types/history": "^4.7.11",
"@types/js-yaml": "^4.0.5",
- "@types/lodash": "^4.14.197",
+ "@types/lodash": "^4.14.198",
"@types/numeral": "^2.0.2",
"@types/qs": "^6.9.8",
"@types/react": "^18.2.21",
"@types/react-dom": "^18.2.7",
"@types/react-helmet": "^6.1.6",
- "@umijs/lint": "^4.0.79",
- "@umijs/max": "^4.0.79",
+ "@umijs/lint": "^4.0.80",
+ "@umijs/max": "^4.0.80",
"cross-env": "^7.0.3",
"cross-port-killer": "^1.4.0",
"eslint": "^8.48.0",
diff --git a/eiam-portal/src/main/portal-fe/src/pages/Account/Account.tsx b/eiam-portal/src/main/portal-fe/src/pages/Account/Account.tsx
index 4cacf432..efe4a267 100644
--- a/eiam-portal/src/main/portal-fe/src/pages/Account/Account.tsx
+++ b/eiam-portal/src/main/portal-fe/src/pages/Account/Account.tsx
@@ -45,15 +45,15 @@ const AccountSettings = () => {
const intl = useIntl();
const [initConfig, setInitConfig] = useState({
mode: 'inline',
- selectKey: AccountSettingsStateKey.BASE,
+ selectKey: AccountSettingsStateKey.base,
});
useAsyncEffect(async () => {
- if (!type || !AccountSettingsStateKey[type.toUpperCase()]) {
- setInitConfig({ ...initConfig, selectKey: AccountSettingsStateKey.BASE });
+ if (!type || !AccountSettingsStateKey[type]) {
+ setInitConfig({ ...initConfig, selectKey: AccountSettingsStateKey.base });
history.replace({
pathname: location.pathname,
- search: queryString.stringify({ type: AccountSettingsStateKey.BASE }),
+ search: queryString.stringify({ type: AccountSettingsStateKey.base }),
});
return;
}
@@ -62,19 +62,19 @@ const AccountSettings = () => {
const menu: ItemType[] = [
{
- key: AccountSettingsStateKey.BASE,
+ key: AccountSettingsStateKey.base,
label: intl.formatMessage({
id: 'page.account.menu.base',
}),
},
{
- key: AccountSettingsStateKey.SECURITY,
+ key: AccountSettingsStateKey.security,
label: intl.formatMessage({
id: 'page.account.menu.security',
}),
},
{
- key: AccountSettingsStateKey.BIND,
+ key: AccountSettingsStateKey.bind,
label: intl.formatMessage({
id: 'page.account.menu.bind',
}),
@@ -113,11 +113,11 @@ const AccountSettings = () => {
const renderChildren = () => {
const { selectKey } = initConfig;
switch (selectKey) {
- case AccountSettingsStateKey.BASE:
+ case AccountSettingsStateKey.base:
return ;
- case AccountSettingsStateKey.SECURITY:
+ case AccountSettingsStateKey.security:
return ;
- case AccountSettingsStateKey.BIND:
+ case AccountSettingsStateKey.bind:
return ;
default:
return null;
diff --git a/eiam-portal/src/main/portal-fe/src/pages/Account/components/ModifyPassword.tsx b/eiam-portal/src/main/portal-fe/src/pages/Account/components/ModifyPassword.tsx
index ed952b13..67edece0 100644
--- a/eiam-portal/src/main/portal-fe/src/pages/Account/components/ModifyPassword.tsx
+++ b/eiam-portal/src/main/portal-fe/src/pages/Account/components/ModifyPassword.tsx
@@ -70,7 +70,7 @@ const ModifyPassword = (props: {
destroyOnClose: true,
maskClosable: false,
onCancel: async () => {
- await setVisible(false);
+ setVisible(false);
},
}}
onFinish={async (formData: Record) => {
@@ -89,7 +89,7 @@ const ModifyPassword = (props: {
),
);
if (success && result) {
- await setVisible(false);
+ setVisible(false);
message.success(intl.formatMessage({ id: 'page.account.modify_password.success' }));
setRefresh(true);
return Promise.resolve();
diff --git a/eiam-portal/src/main/portal-fe/src/pages/Account/data.d.ts b/eiam-portal/src/main/portal-fe/src/pages/Account/data.d.ts
index 3e3a1893..7215cf53 100644
--- a/eiam-portal/src/main/portal-fe/src/pages/Account/data.d.ts
+++ b/eiam-portal/src/main/portal-fe/src/pages/Account/data.d.ts
@@ -40,7 +40,7 @@ export interface GetBoundIdpList {
* 账户菜单类型
*/
export enum AccountSettingsStateKey {
- BASE = 'base',
- SECURITY = 'security',
- BIND = 'bind',
+ base = 'base',
+ security = 'security',
+ bind = 'bind',
}
diff --git a/eiam-portal/src/main/portal-fe/src/pages/Application/data.d.ts b/eiam-portal/src/main/portal-fe/src/pages/Application/data.d.ts
index 88d8e7f0..ad21d5f4 100644
--- a/eiam-portal/src/main/portal-fe/src/pages/Application/data.d.ts
+++ b/eiam-portal/src/main/portal-fe/src/pages/Application/data.d.ts
@@ -31,9 +31,15 @@ export enum InitLoginType {
/**
* 仅允许应用发起 SSO
*/
- ONLY_APP_INIT_SSO = 'only_app_init_sso',
+ only_app_init_sso = 'only_app_init_sso',
/**
* 门户或应用发起 SSO
*/
- PORTAL_OR_APP_INIT_SSO = 'portal_or_app_init_sso',
+ portal_or_app_init_sso = 'portal_or_app_init_sso',
}
+
+export type AppGroupList = {
+ id: string;
+ name: string;
+ appCount: number;
+};
diff --git a/eiam-portal/src/main/portal-fe/src/pages/Login/data.d.ts b/eiam-portal/src/main/portal-fe/src/pages/Login/data.d.ts
index 66a37a2b..c95ea070 100644
--- a/eiam-portal/src/main/portal-fe/src/pages/Login/data.d.ts
+++ b/eiam-portal/src/main/portal-fe/src/pages/Login/data.d.ts
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
-import type { IDP_TYPE, MFA_FACTOR } from '@/constants';
+import type { IDP_TYPE } from '@/constants';
/**
* 登录参数类型
@@ -44,9 +44,3 @@ export type IdpList = {
export type LoginConfig = {
idps: IdpList[];
};
-
-export type MfaFactor = {
- factor: MFA_FACTOR;
- target?: string;
- usable: boolean;
-};
diff --git a/eiam-portal/src/main/portal-fe/src/pages/Login/service.ts b/eiam-portal/src/main/portal-fe/src/pages/Login/service.ts
index 0f1a650a..fec3207c 100644
--- a/eiam-portal/src/main/portal-fe/src/pages/Login/service.ts
+++ b/eiam-portal/src/main/portal-fe/src/pages/Login/service.ts
@@ -16,16 +16,9 @@
* along with this program. If not, see .
*/
import { request } from '@umijs/max';
-import type { LoginConfig, LoginParamsType, MfaFactor } from './data.d';
+import type { LoginConfig, LoginParamsType } from './data.d';
import { stringify } from 'querystring';
-/**
- * 获取 Mfa 因素
- */
-export async function getMfaFactors(): Promise> {
- return request('/api/v1/login/mfa/factors');
-}
-
/**
* 账户登录
*
@@ -74,32 +67,6 @@ export async function sendLoginCaptchaOpt(
});
}
-/**
- * 发送MFA短信验证码
- */
-export async function sendMfaSmsOtp(): Promise> {
- return request(`/api/v1/login/mfa/send`, {
- method: 'POST',
- data: stringify({ channel: 'sms' }),
- skipErrorHandler: true,
- }).catch((e) => {
- throw e;
- });
-}
-
-/**
- * 发送MFA邮件验证码
- */
-export async function sendMfaEmailOtp(): Promise> {
- return request(`/api/v1/login/mfa/send`, {
- method: 'POST',
- data: stringify({ channel: 'mail' }),
- skipErrorHandler: true,
- }).catch((e) => {
- throw e;
- });
-}
-
/**
* 获取钉钉授权URL
*
@@ -115,22 +82,6 @@ export async function getDingtalkAuthorizeUrl(
});
}
-/**
- * 获取钉钉授权URL
- *
- * @param params
- */
-export async function loginMfaValidate(
- params: Record,
-): Promise> {
- return request(`/api/v1/login/mfa/validate`, {
- params: params,
- skipErrorHandler: true,
- }).catch(({ response: { data } }) => {
- return data;
- });
-}
-
/**
* Idp绑定用户
*/