@jiangood/open-admin 2.4.7 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/package.json +1 -1
  2. package/src/.umi-production/appData.json +58 -78
  3. package/src/.umi-production/core/route.tsx +1 -3
  4. package/src/framework/components/ContextMenu/index.tsx +91 -0
  5. package/src/framework/components/Page/index.less +19 -6
  6. package/src/framework/components/Page/index.tsx +23 -3
  7. package/src/framework/components/ProTable/index.less +60 -9
  8. package/src/framework/components/ProTable/index.tsx +31 -48
  9. package/src/framework/components/index.ts +1 -0
  10. package/src/framework/fields/FieldTableSelect/index.tsx +0 -1
  11. package/src/layouts/admin/HeaderRight.jsx +1 -6
  12. package/src/layouts/admin/TabPageRender.jsx +80 -23
  13. package/src/layouts/admin/index.jsx +16 -22
  14. package/src/layouts/admin/index.less +31 -20
  15. package/src/layouts/index.jsx +0 -9
  16. package/src/pages/about.jsx +1 -1
  17. package/src/pages/index.jsx +1 -1
  18. package/src/pages/login.jsx +1 -5
  19. package/src/pages/system/dict/index.jsx +56 -53
  20. package/src/pages/system/file/index.jsx +1 -7
  21. package/src/pages/system/job/index.jsx +9 -14
  22. package/src/pages/system/log/index.jsx +1 -1
  23. package/src/pages/system/org/index.jsx +153 -173
  24. package/src/pages/system/role/index.jsx +21 -12
  25. package/src/pages/system/role/perm.jsx +1 -2
  26. package/src/pages/system/user/index.jsx +28 -43
  27. package/src/pages/userCenter/index.jsx +3 -2
  28. package/src/pages/userCenter/message.jsx +1 -1
  29. package/src/style/global.less +1 -1
  30. package/src/framework/components/ProTable/components/ToolBar/index.less +0 -53
  31. package/src/framework/components/ProTable/components/ToolBar/index.tsx +0 -123
  32. package/src/pages/system/manual/index.jsx +0 -128
  33. package/src/pages/userCenter/manual.jsx +0 -57
@@ -1,38 +1,35 @@
1
- import {DeleteOutlined, EditOutlined, PlusOutlined, SyncOutlined} from '@ant-design/icons';
2
- import {Button, Card, Checkbox, Empty, Form, Input, Popconfirm, Space, Splitter, Switch, Tree} from 'antd';
1
+ import {DeleteOutlined, EditOutlined, PlusOutlined, SettingOutlined, SyncOutlined} from '@ant-design/icons';
2
+ import {Button, Card, Checkbox, Descriptions, Form, Input, InputNumber, Modal, Popconfirm, Popover, Space, Splitter, Switch, Tree, Typography} from 'antd';
3
3
  import React from 'react';
4
4
  import {
5
5
  FieldBoolean,
6
6
  FieldDictSelect,
7
7
  FieldRemoteTreeSelect,
8
8
  FieldUserSelect,
9
- Gap,
10
9
  HttpUtils,
11
10
  NamedIcon,
12
- Page
11
+ Page,
12
+ ViewBooleanEnableDisable,
13
13
  } from "../../../framework";
14
14
 
15
-
16
15
  export default class extends React.Component {
17
16
 
18
17
  state = {
19
- formLoading: false,
20
- formValues: undefined,
21
- submitLoading: false,
22
- formEditing: false,
23
-
24
-
18
+ selectedOrg: null,
25
19
  params: {
26
20
  onlyShowEnabled: true,
27
21
  onlyShowUnit: false,
28
- searchText: null
22
+ searchText: null,
29
23
  },
30
-
31
24
  treeData: [],
32
25
  treeLoading: false,
33
26
  draggable: false,
27
+
28
+ modalOpen: false,
29
+ modalValues: {},
30
+ modalLoading: false,
34
31
  }
35
- actionRef = React.createRef();
32
+ formRef = React.createRef();
36
33
  treeRef = React.createRef();
37
34
 
38
35
  componentDidMount() {
@@ -41,205 +38,191 @@ export default class extends React.Component {
41
38
 
42
39
  loadTree = () => {
43
40
  this.setState({treeLoading: true})
44
-
45
- const {params} = this.state
46
- HttpUtils.get('admin/sysOrg/tree', params).then(rs => {
47
- const treeData = rs;
48
- this.setState({treeData})
41
+ HttpUtils.get('admin/sysOrg/tree', this.state.params).then(rs => {
42
+ this.setState({treeData: rs})
49
43
  }).finally(() => {
50
44
  this.setState({treeLoading: false});
51
45
  })
52
46
  }
53
47
 
54
- handleDelete = record => {
55
- HttpUtils.post('admin/sysOrg/delete', {id: record.id})
56
- .then(rs => {
57
- this.setState({formValues: null})
58
- this.loadTree()
59
- })
48
+ handleDelete = () => {
49
+ const {selectedOrg} = this.state
50
+ if (!selectedOrg) return
51
+ HttpUtils.post('admin/sysOrg/delete', {id: selectedOrg.id}).then(() => {
52
+ this.setState({selectedOrg: null})
53
+ this.loadTree()
54
+ })
60
55
  }
61
56
 
62
-
63
57
  onSelect = (selectedKeys) => {
64
58
  if (selectedKeys.length === 0) {
65
- this.setState({formValues: null})
59
+ this.setState({selectedOrg: null})
66
60
  return
67
61
  }
62
+ HttpUtils.get("admin/sysOrg/detail", {id: selectedKeys[0]}).then(rs => {
63
+ this.setState({selectedOrg: rs})
64
+ })
65
+ }
68
66
 
69
- const key = selectedKeys[0]
70
- this.setState({formLoading: true, formEditing: false})
71
- HttpUtils.get("admin/sysOrg/detail", {id: key}).then(rs => {
72
- this.setState({formValues: rs})
73
- }).finally(() => {
74
- this.setState({formLoading: false})
67
+ handleAdd = () => {
68
+ const {selectedOrg} = this.state
69
+ this.setState({
70
+ modalOpen: true,
71
+ modalValues: {pid: selectedOrg?.id, enabled: true},
72
+ })
73
+ }
74
+
75
+ handleEdit = () => {
76
+ this.setState({
77
+ modalOpen: true,
78
+ modalValues: {...this.state.selectedOrg},
75
79
  })
76
80
  }
77
81
 
78
- onFinish = (values) => {
79
- this.setState({submitLoading: true, formEditing: false})
80
- const isNew = !values.id;
81
- const url = isNew ? 'admin/sysOrg/create' : 'admin/sysOrg/update';
82
- HttpUtils.post(url, values).then(rs => {
82
+ handleModalFinish = (values) => {
83
+ this.setState({modalLoading: true})
84
+ const isNew = !values.id
85
+ const url = isNew ? 'admin/sysOrg/create' : 'admin/sysOrg/update'
86
+ HttpUtils.post(url, values).then(() => {
87
+ this.setState({modalOpen: false})
83
88
  this.loadTree()
84
89
  }).finally(() => {
85
- this.setState({submitLoading: false})
90
+ this.setState({modalLoading: false})
86
91
  })
87
92
  }
88
93
 
89
-
90
94
  onDraggableChange = e => {
91
95
  this.setState({draggable: e})
92
96
  };
93
97
 
94
-
95
98
  render() {
96
- const {formValues} = this.state;
97
- const disabled = formValues == null;
98
- const params = this.state.params;
99
- return <Page>
100
- <Card>
101
- <Space>
99
+ const {selectedOrg} = this.state
100
+ const params = this.state.params
102
101
 
103
- <Input.Search placeholder='搜索' value={params.searchText} onChange={e => {
104
- params.searchText = e.target.value
105
- this.setState({params}, this.loadTree)
106
- }}/>
107
- <Checkbox checked={params.onlyShowEnabled}
108
- onChange={e => {
109
- params.onlyShowEnabled = e.target.checked;
110
- this.setState({params}, this.loadTree);
111
- }}>仅显示启用</Checkbox>
112
-
113
- <Checkbox checked={params.onlyShowUnit}
114
- onChange={e => {
115
- params.onlyShowUnit = e.target.checked;
116
- this.setState({params}, this.loadTree);
117
- }}>仅显示单位</Checkbox>
118
-
119
-
120
- </Space>
121
- </Card>
122
- <Gap/>
102
+ return <Page title="组织机构" description="管理组织机构树"
103
+ actions={<Button type='primary' perm='sys-org:create' icon={<PlusOutlined/>} onClick={this.handleAdd}>新增</Button>}>
123
104
  <Splitter>
124
- <Splitter.Panel defaultSize={500}>
105
+ <Splitter.Panel defaultSize={400} style={{paddingRight: 8}}>
125
106
  <Card loading={this.state.treeLoading}
126
- title='组织机构'
127
- extra={<Space>
128
-
129
- <div>
130
- 拖拽排序&nbsp;<Switch
131
- value={this.state.draggable}
132
- onChange={this.onDraggableChange}/>
133
- </div>
134
- <Button size='small' shape={"round"} icon={<SyncOutlined/>}
135
- onClick={this.loadTree}></Button>
136
- </Space>}>
137
-
138
-
107
+ size='small'
108
+ >
109
+ <div style={{display: 'flex', alignItems: 'center', gap: 4, marginBottom: 8}}>
110
+ <Input.Search placeholder='搜索' value={params.searchText} onChange={e => {
111
+ params.searchText = e.target.value
112
+ this.setState({params}, this.loadTree)
113
+ }} style={{flex: 1}}/>
114
+ <Popover
115
+ trigger='click'
116
+ placement='bottomRight'
117
+ title='设置'
118
+ content={<Space direction='vertical'>
119
+ <Checkbox checked={params.onlyShowEnabled}
120
+ onChange={e => {
121
+ params.onlyShowEnabled = e.target.checked;
122
+ this.setState({params}, this.loadTree);
123
+ }}>仅显示启用</Checkbox>
124
+ <Checkbox checked={params.onlyShowUnit}
125
+ onChange={e => {
126
+ params.onlyShowUnit = e.target.checked;
127
+ this.setState({params}, this.loadTree);
128
+ }}>仅显示单位</Checkbox>
129
+ <div>
130
+ 拖拽排序&nbsp;<Switch
131
+ value={this.state.draggable}
132
+ onChange={this.onDraggableChange}/>
133
+ </div>
134
+ <Button size='small' shape='round' icon={<SyncOutlined/>} onClick={this.loadTree}>刷新</Button>
135
+ </Space>}
136
+ >
137
+ <Button type='text' size='small' icon={<SettingOutlined/>}/>
138
+ </Popover>
139
+ </div>
139
140
  <Tree ref={this.treeRef}
140
141
  treeData={this.state.treeData}
141
142
  onSelect={this.onSelect}
142
143
  showIcon
143
144
  blockNode
144
- icon={item => {
145
- return <NamedIcon name={item.data.iconName}/>;
146
- }}
145
+ icon={item => <NamedIcon name={item.data.iconName}/>}
147
146
  draggable={this.state.draggable}
148
147
  onDrop={this.onDrop}
149
148
  showLine
150
149
  defaultExpandAll
151
150
  />
152
- {this.state.treeData.length === 0 && <Empty/>}
153
151
  </Card>
154
152
  </Splitter.Panel>
155
153
 
156
- <Splitter>
157
- <Card
158
- loading={this.state.formLoading}
159
- extra={<Space>
160
- <Button type='primary' onClick={() => {
161
- this.setState({
162
- formLoading: true,
163
- formEditing: true,
164
- formValues: {
165
- pid: formValues?.id,
166
- }
167
- }, () => {
168
- this.setState({formLoading: false})
169
- })
170
- }}>
171
- <PlusOutlined/> 新增
172
- </Button>
173
- <Button disabled={disabled} onClick={() => {
174
- this.setState({
175
- formEditing: true
176
- })
177
- }}>
178
- <EditOutlined/> 编辑
179
- </Button>
180
-
181
- <Popconfirm title={'是否确定删除组织机构'} disabled={disabled}
182
- onConfirm={() => this.handleDelete(formValues)}>
183
- <Button icon={<DeleteOutlined/>} disabled={disabled}>删除</Button>
184
- </Popconfirm>
185
-
186
-
187
- </Space>}
188
- >
189
-
190
- {formValues == null ? <Empty description='未选择机构'/> : <Form
191
- disabled={!this.state.formEditing}
192
- labelCol={{flex: '150px'}}
193
- wrapperCol={{flex: '400px'}}
194
- initialValues={formValues}
195
- onFinish={this.onFinish}
196
- >
197
- <Form.Item noStyle name='id'>
198
- </Form.Item>
199
- <Form.Item label='父节点' name='pid'>
200
- <FieldRemoteTreeSelect url='admin/sysOrg/tree'/>
201
- </Form.Item>
202
- <Form.Item label='名称' name='name' rules={[{required: true}]}>
203
- <Input/>
204
- </Form.Item>
205
-
206
-
207
- <Form.Item label='类型' name='type' rules={[{required: true}]}>
208
- <FieldDictSelect typeCode='orgType'/>
209
- </Form.Item>
210
-
211
- <Form.Item label='部门领导' name={['leader', 'id']}>
212
- <FieldUserSelect/>
213
- </Form.Item>
214
- <Form.Item label='启用' name='enabled' rules={[{required: true}]}>
215
- <FieldBoolean/>
216
- </Form.Item>
217
- <Form.Item label='扩展字段1' name='extra1'>
218
- <Input/>
219
- </Form.Item>
220
- <Form.Item label='扩展字段2' name='extra2'>
221
- <Input/>
222
- </Form.Item>
223
- <Form.Item label='扩展字段3' name='extra3'>
224
- <Input/>
225
- </Form.Item>
226
-
227
-
228
- <Form.Item label=' ' colon={false}>
229
- <Button type="primary" htmlType='submit'
230
- loading={this.state.submitLoading}>保存</Button>
231
- </Form.Item>
232
-
233
- </Form>
234
- }
235
-
236
-
154
+ <Splitter.Panel style={{paddingLeft: 8}}>
155
+ <Card size='small' style={{marginBottom: 8}}>
156
+ <div style={{display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 8}}>
157
+ <Typography.Text strong>机构信息</Typography.Text>
158
+ {selectedOrg && (
159
+ <span>
160
+ <Button size='small' icon={<EditOutlined/>} perm='sys-org:update'
161
+ onClick={this.handleEdit} style={{marginRight: 4}}>编辑</Button>
162
+ <Popconfirm perm='sys-org:delete' title='是否确定删除组织机构'
163
+ onConfirm={this.handleDelete}>
164
+ <Button size='small' icon={<DeleteOutlined/>}>删除</Button>
165
+ </Popconfirm>
166
+ </span>
167
+ )}
168
+ </div>
169
+ {selectedOrg && (
170
+ <Descriptions size='small' column={2}>
171
+ <Descriptions.Item label="名称">{selectedOrg.name}</Descriptions.Item>
172
+ <Descriptions.Item label="类型">{selectedOrg.typeLabel}</Descriptions.Item>
173
+ <Descriptions.Item label="上级机构">{selectedOrg.parentName || '-'}</Descriptions.Item>
174
+ <Descriptions.Item label="序号">{selectedOrg.seq ?? '-'}</Descriptions.Item>
175
+ <Descriptions.Item label="部门领导">{selectedOrg.leader?.name || '-'}</Descriptions.Item>
176
+ <Descriptions.Item label="启用"><ViewBooleanEnableDisable value={selectedOrg.enabled}/></Descriptions.Item>
177
+ {selectedOrg.extra1 && <Descriptions.Item label="扩展字段1">{selectedOrg.extra1}</Descriptions.Item>}
178
+ {selectedOrg.extra2 && <Descriptions.Item label="扩展字段2">{selectedOrg.extra2}</Descriptions.Item>}
179
+ {selectedOrg.extra3 && <Descriptions.Item label="扩展字段3">{selectedOrg.extra3}</Descriptions.Item>}
180
+ </Descriptions>
181
+ )}
237
182
  </Card>
238
- </Splitter>
239
-
183
+ </Splitter.Panel>
240
184
  </Splitter>
241
185
 
242
-
186
+ <Modal title={this.state.modalValues?.id ? '编辑组织机构' : '新增组织机构'}
187
+ open={this.state.modalOpen}
188
+ onOk={() => this.formRef.current.submit()}
189
+ onCancel={() => this.setState({modalOpen: false})}
190
+ destroyOnClose
191
+ >
192
+ <Form ref={this.formRef} labelCol={{flex: '120px'}}
193
+ initialValues={this.state.modalValues}
194
+ onFinish={this.handleModalFinish}
195
+ >
196
+ <Form.Item name='id' noStyle/>
197
+ <Form.Item label='父节点' name='pid'>
198
+ <FieldRemoteTreeSelect url='admin/sysOrg/tree'/>
199
+ </Form.Item>
200
+ <Form.Item label='名称' name='name' rules={[{required: true}]}>
201
+ <Input/>
202
+ </Form.Item>
203
+ <Form.Item label='序号' name='seq'>
204
+ <InputNumber/>
205
+ </Form.Item>
206
+ <Form.Item label='类型' name='type' rules={[{required: true}]}>
207
+ <FieldDictSelect typeCode='orgType'/>
208
+ </Form.Item>
209
+ <Form.Item label='部门领导' name={['leader', 'id']}>
210
+ <FieldUserSelect/>
211
+ </Form.Item>
212
+ <Form.Item label='启用' name='enabled' rules={[{required: true}]}>
213
+ <FieldBoolean/>
214
+ </Form.Item>
215
+ <Form.Item label='扩展字段1' name='extra1'>
216
+ <Input/>
217
+ </Form.Item>
218
+ <Form.Item label='扩展字段2' name='extra2'>
219
+ <Input/>
220
+ </Form.Item>
221
+ <Form.Item label='扩展字段3' name='extra3'>
222
+ <Input/>
223
+ </Form.Item>
224
+ </Form>
225
+ </Modal>
243
226
  </Page>
244
227
  }
245
228
 
@@ -247,11 +230,8 @@ export default class extends React.Component {
247
230
  const {dragNode, dropToGap, node} = e;
248
231
  const dropKey = node.key;
249
232
  const dragKey = dragNode.key;
250
-
251
233
  const dropPos = e.node.pos.split('-');
252
- const dropPosition = e.dropPosition - Number(dropPos[dropPos.length - 1]); // the drop position relative to the drop node, inside 0, top -1, bottom 1
253
-
254
-
234
+ const dropPosition = e.dropPosition - Number(dropPos[dropPos.length - 1]);
255
235
  HttpUtils.post('admin/sysOrg/sort', {dropPosition, dropToGap, dropKey, dragKey}).then(this.loadTree)
256
236
  };
257
237
  }
@@ -1,5 +1,5 @@
1
1
  import {PlusOutlined} from '@ant-design/icons'
2
- import {Button, Form, Input, InputNumber, Modal, Popconfirm, Transfer, Tree} from 'antd'
2
+ import {Button, Form, Input, InputNumber, Modal, Popconfirm, Select, Transfer, Tree} from 'antd'
3
3
  import React from 'react'
4
4
  import {ButtonList, FieldBoolean, HttpUtils, Page, PageUtils, ProTable, ViewText} from "../../../framework";
5
5
 
@@ -142,7 +142,7 @@ export default class extends React.Component {
142
142
  onClick={() => this.handleEdit(record)}>编辑</Button>
143
143
  <Popconfirm perm='sys-role:delete' disabled={record.builtin} title='是否确定删除系统角色'
144
144
  onConfirm={() => this.handleDelete(record)}>
145
- <Button size='small'>删除</Button>
145
+ <Button size='small' disabled={record.builtin}>删除</Button>
146
146
  </Popconfirm>
147
147
  </ButtonList>
148
148
  );
@@ -180,20 +180,29 @@ export default class extends React.Component {
180
180
  }
181
181
 
182
182
  render() {
183
- return <Page>
183
+ return <Page
184
+ title="角色管理"
185
+ description="管理系统角色,包括角色权限分配、用户设置等"
186
+ actions={<Button perm='sys-role:create' type='primary' icon={<PlusOutlined/>} onClick={this.handleAdd}>新增</Button>}
187
+ >
184
188
  <ProTable
185
189
  actionRef={this.tableRef}
186
- toolBarRender={() => {
187
- return <ButtonList>
188
- <Button perm='sys-role:create' type='primary' onClick={this.handleAdd}>
189
- <PlusOutlined/> 新增
190
- </Button>
191
- </ButtonList>
192
- }}
193
190
  request={(params) => HttpUtils.get('admin/sysRole/page', params)}
194
191
  columns={this.columns}
195
-
196
- />
192
+ >
193
+ <Form.Item label='角色名称' name='name'>
194
+ <Input/>
195
+ </Form.Item>
196
+ <Form.Item label='角色编码' name='code'>
197
+ <Input/>
198
+ </Form.Item>
199
+ <Form.Item label='是否内置' name='builtin'>
200
+ <Select allowClear placeholder='全部'>
201
+ <Select.Option value={true}>是</Select.Option>
202
+ <Select.Option value={false}>否</Select.Option>
203
+ </Select>
204
+ </Form.Item>
205
+ </ProTable>
197
206
 
198
207
  <Modal title='系统角色'
199
208
  open={this.state.formOpen}
@@ -89,8 +89,7 @@ export default class extends React.Component {
89
89
 
90
90
 
91
91
  render() {
92
- return <Page>
93
-
92
+ return <Page title="角色权限设置" description="设置角色的菜单和权限">
94
93
  <Card title='角色权限设置' loading={this.state.loading}
95
94
  variant={"borderless"}
96
95
  extra={<Button type='primary' icon={<SaveOutlined/>} onClick={this.savePerms}>保存权限</Button>}>
@@ -1,16 +1,16 @@
1
1
  import {PlusOutlined} from '@ant-design/icons';
2
- import {Button, Form, Input, Modal, Popconfirm, Splitter, Tabs} from 'antd';
2
+ import {Button, Card, Form, Input, Modal, Popconfirm, Select, Splitter} from 'antd';
3
3
  import React from 'react';
4
4
  import {
5
5
  ButtonList,
6
6
  DictUtils,
7
7
  FieldBoolean,
8
+ FieldRemoteSelect,
8
9
  FieldSysOrgTreeSelect,
9
10
  HttpUtils,
10
11
  OrgTree,
11
12
  Page,
12
13
  ProTable,
13
- RoleTree
14
14
  } from "../../../framework";
15
15
  import UserPerm from "./UserPerm";
16
16
 
@@ -22,7 +22,6 @@ export default class extends React.Component {
22
22
  formValues: {},
23
23
 
24
24
  currentOrgId: null,
25
- currentRoleId: null,
26
25
  }
27
26
  permRef = React.createRef();
28
27
 
@@ -48,10 +47,6 @@ export default class extends React.Component {
48
47
  this.setState({currentOrgId: key}, () => this.tableRef.current.reload())
49
48
  }
50
49
 
51
- onSelectRole = (key) => {
52
- this.setState({currentRoleId: key}, () => this.tableRef.current.reload())
53
- }
54
-
55
50
  handleAdd = () => {
56
51
  this.setState({formOpen: true, formValues: {}})
57
52
  }
@@ -154,51 +149,41 @@ export default class extends React.Component {
154
149
 
155
150
  render() {
156
151
 
157
- return <Page>
152
+ return <Page title="用户管理" description="管理系统用户" actions={<Button perm='sys-user:create' type="primary" icon={<PlusOutlined/>} onClick={this.handleAdd}>新增</Button>}>
158
153
  <Splitter>
159
- <Splitter.Panel defaultSize={400}>
160
- <Tabs
161
- type='card'
162
- size='small'
163
- items={[
164
- {
165
- key: 'org',
166
- label: '按组织机构',
167
- children: <OrgTree onChange={this.onSelectOrg}/>
168
- },
169
- {
170
- key: 'role',
171
- label: '按角色',
172
- children: <RoleTree onSelect={this.onSelectRole}/>
173
- }
174
- ]}/>
175
-
154
+ <Splitter.Panel defaultSize={350} style={{paddingRight: 8}}>
155
+ <Card size='small'>
156
+ <OrgTree onChange={this.onSelectOrg}/>
157
+ </Card>
176
158
  </Splitter.Panel>
177
- <Splitter.Panel style={{paddingLeft: 16}}>
159
+ <Splitter.Panel style={{paddingLeft: 8}}>
178
160
  <ProTable
161
+ searchColumns={3}
179
162
  actionRef={this.tableRef}
180
- toolBarRender={() => {
181
- return <ButtonList>
182
- <Button
183
- perm='sys-user:create'
184
- type="primary"
185
- onClick={this.handleAdd}>
186
- <PlusOutlined/> 新增
187
- </Button>
188
-
189
-
190
- </ButtonList>
191
- }}
192
- showToolbarSearch
193
163
  request={(params) => {
194
164
  params.orgId = this.state.currentOrgId
195
- params.roleId = this.state.currentRoleId
196
165
  return HttpUtils.get('admin/sysUser/page', params)
197
- }
198
- }
166
+ }}
199
167
  columns={this.columns}
200
168
  >
201
-
169
+ <Form.Item label='姓名' name='name'>
170
+ <Input/>
171
+ </Form.Item>
172
+ <Form.Item label='登录账号' name='account'>
173
+ <Input/>
174
+ </Form.Item>
175
+ <Form.Item label='手机号' name='phone'>
176
+ <Input/>
177
+ </Form.Item>
178
+ <Form.Item label='角色' name='roleId'>
179
+ <FieldRemoteSelect url='admin/sysRole/options' placeholder='请选择角色'/>
180
+ </Form.Item>
181
+ <Form.Item label='状态' name='enabled'>
182
+ <Select allowClear placeholder='全部'>
183
+ <Select.Option value={true}>启用</Select.Option>
184
+ <Select.Option value={false}>停用</Select.Option>
185
+ </Select>
186
+ </Form.Item>
202
187
  </ProTable>
203
188
  </Splitter.Panel>
204
189
  </Splitter>
@@ -17,7 +17,8 @@ export default class extends React.Component {
17
17
 
18
18
  render() {
19
19
  const {info} = this.state;
20
- return <Page backgroundGray>
20
+ return <Page backgroundGray title="个人中心" description="查看和编辑个人资料">
21
+
21
22
  <Row gutter={[16, 16]}>
22
23
  <Col md={6} sm={24}>
23
24
  <Card title='个人信息'>
@@ -27,7 +28,7 @@ export default class extends React.Component {
27
28
  </div>
28
29
 
29
30
 
30
- <table className='tmgg-table'>
31
+ <table className='oa-table'>
31
32
  <tbody>
32
33
  <tr>
33
34
  <td>用户名称</td>
@@ -54,7 +54,7 @@ export default class extends React.Component {
54
54
  ]
55
55
 
56
56
  render() {
57
- return <Page>
57
+ return <Page title="消息中心" description="查看系统消息通知">
58
58
  <Card variant={"borderless"}>
59
59
 
60
60
  <Tabs defaultActiveKey="0" destroyOnClose
@@ -1,5 +1,5 @@
1
1
  /*主要在layout中导入*/
2
- table.tmgg-table {
2
+ table.oa-table {
3
3
  width: 100%;
4
4
  border-collapse: collapse; /* 合并边框 */
5
5
  box-shadow: 0 2px 3px rgba(0, 0, 0, 0.1); /* 轻微阴影 */