diff --git a/README.md b/README.md
index d71c3d0..90119f2 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,6 @@
## 简介
-Sword 是 [SpringBlade](https://gitee.com/smallc/SpringBlade)前端UI项目,基于react 、ant design、dva,用于快速构建系统中后台业务。
+* Sword 是 [SpringBlade](https://gitee.com/smallc/SpringBlade)前端UI项目,基于react 、ant design、dva,用于快速构建系统中后台业务。
+* Sword 已入选 ant design 官方脚手架市场,地址:[scaffolds.ant.design](http://scaffold.ant.design/#/scaffolds/Sword)
## 文档
* 文档地址:[Sword开发手册](https://www.kancloud.cn/smallchill/sword)
diff --git a/config/router.config.js b/config/router.config.js
index 8fc624d..2180332 100644
--- a/config/router.config.js
+++ b/config/router.config.js
@@ -166,6 +166,16 @@ export default [
{ path: '/system/tenant/view/:id', component: './System/Tenant/TenantView' },
],
},
+ {
+ path: '/system/client',
+ routes: [
+ { path: '/system/client', redirect: '/system/client/list' },
+ { path: '/system/client/list', component: './System/Client/Client' },
+ { path: '/system/client/add', component: './System/Client/ClientAdd' },
+ { path: '/system/client/edit/:id', component: './System/Client/ClientEdit' },
+ { path: '/system/client/view/:id', component: './System/Client/ClientView' },
+ ],
+ },
],
},
{
diff --git a/mock/client.js b/mock/client.js
new file mode 100644
index 0000000..21f82be
--- /dev/null
+++ b/mock/client.js
@@ -0,0 +1,65 @@
+import { delay } from 'roadhog-api-doc';
+
+function getFakeList(req, res) {
+ const json = { code: 200, success: true, msg: '操作成功' };
+ const list = [];
+ list.push(
+ {
+ id: '1',
+ clientId: 'sword',
+ clientSecret: 'sword_secret',
+ scope: 'all',
+ authorizedGrantTypes: 'refresh_token,password,authorization_code',
+ webServerRedirectUri: 'https://sword.bladex.vip',
+ accessTokenValidity: '3600',
+ refreshTokenValidity: '36000',
+ },
+ {
+ id: '2',
+ clientId: 'saber',
+ clientSecret: 'saber_secret',
+ scope: 'all',
+ authorizedGrantTypes: 'refresh_token,password,authorization_code',
+ webServerRedirectUri: 'https://saber.bladex.vip',
+ accessTokenValidity: '3600',
+ refreshTokenValidity: '36000',
+ }
+ );
+ json.data = {
+ total: 10,
+ size: 10,
+ current: 2,
+ searchCount: true,
+ pages: 1,
+ records: list,
+ };
+ return res.json(json);
+}
+
+function getFakeDetail(req, res) {
+ const json = { code: 200, success: true, msg: '操作成功' };
+ json.data = {
+ id: '1',
+ clientId: 'sword',
+ clientSecret: 'sword_secret',
+ scope: 'all',
+ authorizedGrantTypes: 'refresh_token,password,authorization_code',
+ webServerRedirectUri: 'https://sword.bladex.vip',
+ accessTokenValidity: '3600',
+ refreshTokenValidity: '36000',
+ };
+ return res.json(json);
+}
+
+function fakeSuccess(req, res) {
+ const json = { code: 200, success: true, msg: '操作成功' };
+ return res.json(json);
+}
+
+const proxy = {
+ 'GET /api/blade-system/client/list': getFakeList,
+ 'GET /api/blade-system/client/detail': getFakeDetail,
+ 'POST /api/blade-system/client/submit': fakeSuccess,
+ 'POST /api/blade-system/client/remove': fakeSuccess,
+};
+export default delay(proxy, 500);
diff --git a/package.json b/package.json
index c8519b8..62fbe4f 100644
--- a/package.json
+++ b/package.json
@@ -59,7 +59,8 @@
"react-fittext": "^1.0.0",
"react-media": "^1.9.2",
"react-router-dom": "^4.3.1",
- "roadhog-api-doc": "^1.1.2"
+ "roadhog-api-doc": "^1.1.2",
+ "js-base64": "^2.5.1"
},
"devDependencies": {
"@types/react": "^16.8.1",
diff --git a/src/actions/client.js b/src/actions/client.js
new file mode 100644
index 0000000..c8b55da
--- /dev/null
+++ b/src/actions/client.js
@@ -0,0 +1,36 @@
+export const CLIENT_NAMESPACE = 'client';
+
+export function CLIENT_LIST(payload) {
+ return {
+ type: `${CLIENT_NAMESPACE}/fetchList`,
+ payload,
+ };
+}
+
+export function CLIENT_DETAIL(id) {
+ return {
+ type: `${CLIENT_NAMESPACE}/fetchDetail`,
+ payload: { id },
+ };
+}
+
+export function CLIENT_CLEAR_DETAIL() {
+ return {
+ type: `${CLIENT_NAMESPACE}/clearDetail`,
+ payload: {},
+ };
+}
+
+export function CLIENT_SUBMIT(payload) {
+ return {
+ type: `${CLIENT_NAMESPACE}/submit`,
+ payload,
+ };
+}
+
+export function CLIENT_REMOVE(payload) {
+ return {
+ type: `${CLIENT_NAMESPACE}/remove`,
+ payload,
+ };
+}
diff --git a/src/defaultSettings.js b/src/defaultSettings.js
index 6e98a77..4d39b6e 100644
--- a/src/defaultSettings.js
+++ b/src/defaultSettings.js
@@ -1,4 +1,8 @@
module.exports = {
+ title: 'Sword企业级开发平台',
+ clientId: 'sword', // 客户端id
+ clientSecret: 'sword_secret', // 客户端密钥
+ tenantMode: true, // 开启租户模式
navTheme: 'dark', // theme for nav menu
primaryColor: '#1890FF', // primary color of ant design
layout: 'sidemenu', // nav menu position: sidemenu or topmenu
@@ -10,6 +14,5 @@ module.exports = {
menu: {
disableLocal: false,
},
- title: 'Sword企业级开发平台',
pwa: true,
};
diff --git a/src/locales/en-US/menu.js b/src/locales/en-US/menu.js
index 194b0b2..cc83d16 100644
--- a/src/locales/en-US/menu.js
+++ b/src/locales/en-US/menu.js
@@ -14,6 +14,7 @@ export default {
'menu.system.role': 'role',
'menu.system.param': 'parameter',
'menu.system.tenant': 'tenant',
+ 'menu.system.client': 'client',
'menu.monitor': 'monitor',
'menu.monitor.log': 'log',
'menu.monitor.log.log_usual': 'usual log',
diff --git a/src/locales/zh-CN/menu.js b/src/locales/zh-CN/menu.js
index 5e3f773..eafd4bb 100644
--- a/src/locales/zh-CN/menu.js
+++ b/src/locales/zh-CN/menu.js
@@ -14,6 +14,7 @@ export default {
'menu.system.role': '角色管理',
'menu.system.param': '参数管理',
'menu.system.tenant': '租户管理',
+ 'menu.system.client': '应用管理',
'menu.monitor': '系统监控',
'menu.monitor.log': '日志管理',
'menu.monitor.log.log_usual': '通用日志',
diff --git a/src/locales/zh-TW/menu.js b/src/locales/zh-TW/menu.js
index ff3c00b..3bd46e2 100644
--- a/src/locales/zh-TW/menu.js
+++ b/src/locales/zh-TW/menu.js
@@ -14,6 +14,7 @@ export default {
'menu.system.role': '角色管理',
'menu.system.param': '參數管理',
'menu.system.tenant': '租戶管理',
+ 'menu.system.client': '應用管理',
'menu.monitor': '系統監控',
'menu.monitor.log': '日志管理',
'menu.monitor.log.log_usual': '通用日志',
diff --git a/src/models/client.js b/src/models/client.js
new file mode 100644
index 0000000..e81ccbb
--- /dev/null
+++ b/src/models/client.js
@@ -0,0 +1,87 @@
+import { message } from 'antd';
+import router from 'umi/router';
+import { CLIENT_NAMESPACE } from '../actions/client';
+import { list, submit, detail, remove } from '../services/client';
+
+export default {
+ namespace: CLIENT_NAMESPACE,
+ state: {
+ data: {
+ list: [],
+ pagination: false,
+ },
+ detail: {},
+ },
+ effects: {
+ *fetchList({ payload }, { call, put }) {
+ const response = yield call(list, payload);
+ if (response.success) {
+ yield put({
+ type: 'saveList',
+ payload: {
+ list: response.data.records,
+ pagination: {
+ total: response.data.total,
+ current: response.data.current,
+ pageSize: response.data.size,
+ },
+ },
+ });
+ }
+ },
+ *fetchDetail({ payload }, { call, put }) {
+ const response = yield call(detail, payload);
+ if (response.success) {
+ yield put({
+ type: 'saveDetail',
+ payload: {
+ detail: response.data,
+ },
+ });
+ }
+ },
+ *clearDetail({ payload }, { put }) {
+ yield put({
+ type: 'removeDetail',
+ payload: { payload },
+ });
+ },
+ *submit({ payload }, { call }) {
+ const response = yield call(submit, payload);
+ if (response.success) {
+ message.success('提交成功');
+ router.push('/system/client');
+ }
+ },
+ *remove({ payload }, { call }) {
+ const {
+ data: { keys },
+ success,
+ } = payload;
+ const response = yield call(remove, { ids: keys });
+ if (response.success) {
+ success();
+ }
+ },
+ },
+ reducers: {
+ saveList(state, action) {
+ return {
+ ...state,
+ data: action.payload,
+ };
+ },
+ saveDetail(state, action) {
+ return {
+ ...state,
+ detail: action.payload.detail,
+ };
+ },
+ removeDetail(state) {
+ return {
+ ...state,
+ detail: {},
+ };
+ },
+ },
+};
diff --git a/src/pages/Login/Login.js b/src/pages/Login/Login.js
index 9652781..96a19dc 100644
--- a/src/pages/Login/Login.js
+++ b/src/pages/Login/Login.js
@@ -4,6 +4,7 @@ import { formatMessage, FormattedMessage } from 'umi/locale';
import { Checkbox, Alert } from 'antd';
import Login from '../../components/Login';
import styles from './Login.less';
+import { tenantMode } from '../../defaultSettings';
const { Tab, TenantCode, UserName, Password, Submit } = Login;
@@ -80,16 +81,18 @@ class LoginPage extends Component {
login.type === 'account' &&
!submitting &&
this.renderMessage(formatMessage({ id: 'app.login.message-invalid-credentials' }))}
-
+ {tenantMode ? (
+
+ ) : null}
({
+ client,
+ loading: loading.models.client,
+}))
+@Form.create()
+class Client extends PureComponent {
+ // ============ 查询 ===============
+ handleSearch = params => {
+ const { dispatch } = this.props;
+ dispatch(CLIENT_LIST(params));
+ };
+
+ // ============ 查询表单 ===============
+ renderSearchForm = onReset => {
+ const { form } = this.props;
+ const { getFieldDecorator } = form;
+
+ return (
+
+
+
+ {getFieldDecorator('clientId')()}
+
+
+
+
+
+
+
+
+
+ );
+ };
+
+ render() {
+ const code = 'client';
+
+ const {
+ form,
+ loading,
+ client: { data },
+ } = this.props;
+
+ const columns = [
+ {
+ title: '客户端id',
+ dataIndex: 'clientId',
+ },
+ {
+ title: '客户端密钥',
+ dataIndex: 'clientSecret',
+ },
+ {
+ title: '授权范围',
+ dataIndex: 'scope',
+ },
+ {
+ title: '授权类型',
+ dataIndex: 'authorizedGrantTypes',
+ },
+ {
+ title: '回调地址',
+ dataIndex: 'webServerRedirectUri',
+ },
+ {
+ title: '令牌过期秒数',
+ dataIndex: 'accessTokenValidity',
+ },
+ ];
+
+ return (
+
+
+
+ );
+ }
+}
+export default Client;
diff --git a/src/pages/System/Client/ClientAdd.js b/src/pages/System/Client/ClientAdd.js
new file mode 100644
index 0000000..72c103a
--- /dev/null
+++ b/src/pages/System/Client/ClientAdd.js
@@ -0,0 +1,188 @@
+import React, { PureComponent } from 'react';
+import { Form, Input, Card, Button, Row, Col, InputNumber } from 'antd';
+import { connect } from 'dva';
+import Panel from '../../../components/Panel';
+import styles from '../../../layouts/Sword.less';
+import { CLIENT_SUBMIT } from '../../../actions/client';
+
+const FormItem = Form.Item;
+
+@connect(({ loading }) => ({
+ submitting: loading.effects['client/submit'],
+}))
+@Form.create()
+class ClientAdd extends PureComponent {
+ handleSubmit = e => {
+ e.preventDefault();
+ const { dispatch, form } = this.props;
+ form.validateFieldsAndScroll((err, values) => {
+ if (!err) {
+ dispatch(CLIENT_SUBMIT(values));
+ }
+ });
+ };
+
+ render() {
+ const {
+ form: { getFieldDecorator },
+ submitting,
+ } = this.props;
+
+ const formItemLayout = {
+ labelCol: {
+ span: 8,
+ },
+ wrapperCol: {
+ span: 16,
+ },
+ };
+
+ const formAllItemLayout = {
+ labelCol: {
+ span: 4,
+ },
+ wrapperCol: {
+ span: 20,
+ },
+ };
+
+ const action = (
+
+ );
+
+ return (
+
+
+
+ );
+ }
+}
+
+export default ClientAdd;
diff --git a/src/pages/System/Client/ClientEdit.js b/src/pages/System/Client/ClientEdit.js
new file mode 100644
index 0000000..b099742
--- /dev/null
+++ b/src/pages/System/Client/ClientEdit.js
@@ -0,0 +1,219 @@
+import React, { PureComponent } from 'react';
+import { Form, Input, Card, Button, Row, Col, InputNumber } from 'antd';
+import { connect } from 'dva';
+import Panel from '../../../components/Panel';
+import styles from '../../../layouts/Sword.less';
+import { CLIENT_DETAIL, CLIENT_SUBMIT } from '../../../actions/client';
+
+const FormItem = Form.Item;
+
+@connect(({ client, loading }) => ({
+ client,
+ submitting: loading.effects['client/submit'],
+}))
+@Form.create()
+class ClientEdit extends PureComponent {
+ componentWillMount() {
+ const {
+ dispatch,
+ match: {
+ params: { id },
+ },
+ } = this.props;
+ dispatch(CLIENT_DETAIL(id));
+ }
+
+ handleSubmit = e => {
+ e.preventDefault();
+ const {
+ dispatch,
+ match: {
+ params: { id },
+ },
+ form,
+ } = this.props;
+ form.validateFieldsAndScroll((err, values) => {
+ if (!err) {
+ const params = {
+ id,
+ ...values,
+ };
+ dispatch(CLIENT_SUBMIT(params));
+ }
+ });
+ };
+
+ render() {
+ const {
+ form: { getFieldDecorator },
+ client: { detail },
+ submitting,
+ } = this.props;
+
+ const formItemLayout = {
+ labelCol: {
+ span: 8,
+ },
+ wrapperCol: {
+ span: 16,
+ },
+ };
+
+ const formAllItemLayout = {
+ labelCol: {
+ span: 4,
+ },
+ wrapperCol: {
+ span: 20,
+ },
+ };
+
+ const action = (
+
+ );
+
+ return (
+
+
+
+ );
+ }
+}
+
+export default ClientEdit;
diff --git a/src/pages/System/Client/ClientView.js b/src/pages/System/Client/ClientView.js
new file mode 100644
index 0000000..c53bc66
--- /dev/null
+++ b/src/pages/System/Client/ClientView.js
@@ -0,0 +1,101 @@
+import React, { PureComponent } from 'react';
+import router from 'umi/router';
+import { Form, Card, Button } from 'antd';
+import { connect } from 'dva';
+import Panel from '../../../components/Panel';
+import styles from '../../../layouts/Sword.less';
+import { CLIENT_DETAIL } from '../../../actions/client';
+
+const FormItem = Form.Item;
+
+@connect(({ client }) => ({
+ client,
+}))
+@Form.create()
+class ClientView extends PureComponent {
+ componentWillMount() {
+ const {
+ dispatch,
+ match: {
+ params: { id },
+ },
+ } = this.props;
+ dispatch(CLIENT_DETAIL(id));
+ }
+
+ handleEdit = () => {
+ const {
+ match: {
+ params: { id },
+ },
+ } = this.props;
+ router.push(`/system/client/edit/${id}`);
+ };
+
+ render() {
+ const {
+ client: { detail },
+ } = this.props;
+
+ const formItemLayout = {
+ labelCol: {
+ xs: { span: 24 },
+ sm: { span: 7 },
+ },
+ wrapperCol: {
+ xs: { span: 24 },
+ sm: { span: 12 },
+ md: { span: 10 },
+ },
+ };
+
+ const action = (
+
+ );
+
+ return (
+
+
+
+ );
+ }
+}
+export default ClientView;
diff --git a/src/pages/System/Dept/Dept.js b/src/pages/System/Dept/Dept.js
index 4cdd327..f859afd 100644
--- a/src/pages/System/Dept/Dept.js
+++ b/src/pages/System/Dept/Dept.js
@@ -4,6 +4,7 @@ import { Button, Col, Form, Input, Row } from 'antd';
import Panel from '../../../components/Panel';
import Grid from '../../../components/Sword/Grid';
import { DEPT_LIST } from '../../../actions/dept';
+import { tenantMode } from '../../../defaultSettings';
const FormItem = Form.Item;
@@ -65,14 +66,14 @@ class Dept extends PureComponent {
} = this.props;
const columns = [
- {
- title: '部门名称',
- dataIndex: 'deptName',
- },
{
title: '租户编号',
dataIndex: 'tenantCode',
},
+ {
+ title: '部门名称',
+ dataIndex: 'deptName',
+ },
{
title: '部门全称',
dataIndex: 'fullName',
@@ -83,6 +84,10 @@ class Dept extends PureComponent {
},
];
+ if (!tenantMode) {
+ columns.splice(0, 1);
+ }
+
return (
{
if (!err) {
- console.log(values);
dispatch(DEPT_SUBMIT(values));
}
});
diff --git a/src/pages/System/Dept/DeptEdit.js b/src/pages/System/Dept/DeptEdit.js
index 2bd9c9c..92a2994 100644
--- a/src/pages/System/Dept/DeptEdit.js
+++ b/src/pages/System/Dept/DeptEdit.js
@@ -1,5 +1,5 @@
import React, { PureComponent } from 'react';
-import { Form, Input, Card, Row, Col, Button, InputNumber, TreeSelect } from 'antd';
+import { Form, Input, Card, Row, Col, Button, InputNumber, TreeSelect, message } from "antd";
import { connect } from 'dva';
import Panel from '../../../components/Panel';
import styles from '../../../layouts/Sword.less';
@@ -34,13 +34,17 @@ class DeptEdit extends PureComponent {
},
form,
} = this.props;
+ const parentId = form.getFieldValue('parentId');
+ if (id === parentId.toString()) {
+ message.warn('上级部门不能选择自身!');
+ return;
+ }
form.validateFieldsAndScroll((err, values) => {
if (!err) {
const params = {
id,
...values,
};
- console.log(params);
dispatch(DEPT_SUBMIT(params));
}
});
diff --git a/src/pages/System/Dict/DictAdd.js b/src/pages/System/Dict/DictAdd.js
index 6bffbc9..d06b4a7 100644
--- a/src/pages/System/Dict/DictAdd.js
+++ b/src/pages/System/Dict/DictAdd.js
@@ -40,7 +40,6 @@ class DictAdd extends PureComponent {
const { dispatch, form } = this.props;
form.validateFieldsAndScroll((err, values) => {
if (!err) {
- console.log(values);
dispatch(DICT_SUBMIT(values));
}
});
diff --git a/src/pages/System/Dict/DictEdit.js b/src/pages/System/Dict/DictEdit.js
index ff32e15..1ac24a1 100644
--- a/src/pages/System/Dict/DictEdit.js
+++ b/src/pages/System/Dict/DictEdit.js
@@ -1,5 +1,5 @@
import React, { PureComponent } from 'react';
-import { Form, Input, Card, Row, Col, Button, InputNumber, TreeSelect } from 'antd';
+import { Form, Input, Card, Row, Col, Button, InputNumber, TreeSelect, message } from "antd";
import { connect } from 'dva';
import Panel from '../../../components/Panel';
import styles from '../../../layouts/Sword.less';
@@ -39,13 +39,17 @@ class DictEdit extends PureComponent {
},
form,
} = this.props;
+ const parentId = form.getFieldValue('parentId');
+ if (id === parentId.toString()) {
+ message.warn('上级字典不能选择自身!');
+ return;
+ }
form.validateFieldsAndScroll((err, values) => {
if (!err) {
const params = {
id,
...values,
};
- console.log(params);
dispatch(DICT_SUBMIT(params));
}
});
diff --git a/src/pages/System/Menu/MenuAdd.js b/src/pages/System/Menu/MenuAdd.js
index 0367456..9a37b64 100644
--- a/src/pages/System/Menu/MenuAdd.js
+++ b/src/pages/System/Menu/MenuAdd.js
@@ -51,7 +51,6 @@ class MenuAdd extends PureComponent {
const { dispatch, form } = this.props;
form.validateFieldsAndScroll((err, values) => {
if (!err) {
- console.log(values);
dispatch(MENU_SUBMIT(values));
}
});
diff --git a/src/pages/System/Menu/MenuEdit.js b/src/pages/System/Menu/MenuEdit.js
index 19cf364..f8a2c1b 100644
--- a/src/pages/System/Menu/MenuEdit.js
+++ b/src/pages/System/Menu/MenuEdit.js
@@ -11,6 +11,7 @@ import {
Radio,
Icon,
Modal,
+ message,
} from 'antd';
import { connect } from 'dva';
import Panel from '../../../components/Panel';
@@ -51,13 +52,17 @@ class MenuEdit extends PureComponent {
},
form,
} = this.props;
+ const parentId = form.getFieldValue('parentId');
+ if (id === parentId.toString()) {
+ message.warn('上级菜单不能选择自身!');
+ return;
+ }
form.validateFieldsAndScroll((err, values) => {
if (!err) {
const params = {
id,
...values,
};
- console.log(params);
dispatch(MENU_SUBMIT(params));
}
});
diff --git a/src/pages/System/Role/Role.js b/src/pages/System/Role/Role.js
index d8f4406..82ecc51 100644
--- a/src/pages/System/Role/Role.js
+++ b/src/pages/System/Role/Role.js
@@ -11,6 +11,7 @@ import {
ROLE_GRANT,
} from '../../../actions/role';
import { MENU_REFRESH_DATA } from '../../../actions/menu';
+import { tenantMode } from '../../../defaultSettings';
const FormItem = Form.Item;
const { TreeNode } = Tree;
@@ -176,14 +177,14 @@ class Role extends PureComponent {
} = this.props;
const columns = [
- {
- title: '角色名称',
- dataIndex: 'roleName',
- },
{
title: '租户编号',
dataIndex: 'tenantCode',
},
+ {
+ title: '角色名称',
+ dataIndex: 'roleName',
+ },
{
title: '角色别名',
dataIndex: 'roleAlias',
@@ -194,6 +195,10 @@ class Role extends PureComponent {
},
];
+ if (!tenantMode) {
+ columns.splice(0, 1);
+ }
+
return (
{
if (!err) {
- console.log(values);
dispatch(ROLE_SUBMIT(values));
}
});
diff --git a/src/pages/System/Role/RoleEdit.js b/src/pages/System/Role/RoleEdit.js
index 224f869..f931e6e 100644
--- a/src/pages/System/Role/RoleEdit.js
+++ b/src/pages/System/Role/RoleEdit.js
@@ -1,5 +1,5 @@
import React, { PureComponent } from 'react';
-import { Form, Input, Card, Row, Col, Button, InputNumber, TreeSelect } from 'antd';
+import { Form, Input, Card, Row, Col, Button, InputNumber, TreeSelect, message } from "antd";
import { connect } from 'dva';
import Panel from '../../../components/Panel';
import styles from '../../../layouts/Sword.less';
@@ -34,13 +34,17 @@ class RoleEdit extends PureComponent {
},
form,
} = this.props;
+ const parentId = form.getFieldValue('parentId');
+ if (id === parentId.toString()) {
+ message.warn('上级角色不能选择自身!');
+ return;
+ }
form.validateFieldsAndScroll((err, values) => {
if (!err) {
const params = {
id,
...values,
};
- console.log(params);
dispatch(ROLE_SUBMIT(params));
}
});
diff --git a/src/pages/System/User/User.js b/src/pages/System/User/User.js
index 23dc44c..9be9608 100644
--- a/src/pages/System/User/User.js
+++ b/src/pages/System/User/User.js
@@ -5,6 +5,7 @@ import Panel from '../../../components/Panel';
import Grid from '../../../components/Sword/Grid';
import { USER_INIT, USER_LIST, USER_ROLE_GRANT } from '../../../actions/user';
import { resetPassword } from '../../../services/user';
+import { tenantMode } from '../../../defaultSettings';
const FormItem = Form.Item;
const { TreeNode } = Tree;
@@ -205,12 +206,12 @@ class User extends PureComponent {
title: '电子邮箱',
dataIndex: 'email',
},
- {
- title: '账号状态',
- dataIndex: 'statusName',
- },
];
+ if (!tenantMode) {
+ columns.splice(0, 1);
+ }
+
return (
提交
@@ -77,8 +87,8 @@ class UserAdd extends PureComponent {