update 实现部分表单使用detail获取详细数据

This commit is contained in:
2021-06-28 20:45:33 +08:00
parent 54955e26e5
commit e8dd6f4eca
13 changed files with 328 additions and 233 deletions

View File

@@ -13,6 +13,7 @@ using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System;
namespace Ewide.Application.Service
{
@@ -108,10 +109,10 @@ WHERE 1=1";
var users = await _dapperRepository.QueryPageData<UserOutput>(sql, input, param);
foreach (var user in users.Items)
{
user.SysEmpInfo = await _sysEmpService.GetEmpInfo(user.Id);
}
//foreach (var user in users.Items)
//{
// user.SysEmpInfo = await _sysEmpService.GetEmpInfo(user.Id);
//}
return PageDataResult<UserOutput>.PageResult(users);
}
@@ -170,7 +171,10 @@ WHERE 1=1";
[UnitOfWork]
public async Task DeleteUser(DeleteUserInput input)
{
// 片区监管员在本片区已有安全员的情况下无法删除
/*
* 未处理逻辑
* 片区监管员在本片区已有安全员的情况下无法删除
*/
await _sysUserService.DeleteUser(input);
}
@@ -185,6 +189,7 @@ WHERE 1=1";
public async Task UpdateUser(UpdateUserInput input)
{
/*
* 未处理逻辑
* 如果移动组织架构,会产生以下几种逻辑
* 片区1监管员(无安全员或有其他监管员)=>片区2,直接成功
* 片区1监管员(有安全员并且无其他监管员)=>片区2,无法移动
@@ -203,7 +208,30 @@ WHERE 1=1";
[HttpGet("/houseMember/detail")]
public async Task<dynamic> GetUser([FromQuery] QueryUserInput input)
{
return await _sysUserService.GetUser(input);
var sql = @"SELECT
SU.*,
SO.Name OrgName,
SUR.RoleName,
SUR.RoleCode
FROM sys_user SU
LEFT JOIN sys_emp SE ON SU.Id = SE.Id
LEFT JOIN sys_org SO ON SE.OrgId = SO.Id
LEFT JOIN (
SELECT
SUR.SysUserId,
GROUP_CONCAT(SR.Name) RoleName,
GROUP_CONCAT(SR.Code) RoleCode
FROM sys_user_role SUR
LEFT JOIN sys_role SR ON SUR.SysRoleId = SR.Id
GROUP BY SUR.SysUserId
) SUR ON SU.Id = SUR.SysUserId
WHERE SU.Id=@Id";
var user = (await _dapperRepository.QueryAsync<UserOutput>(sql, new { input.Id })).SingleOrDefault();
if (user != null)
{
user.SysEmpInfo = await _sysEmpService.GetEmpInfo(user.Id);
}
return user;
}
/// <summary>
@@ -254,7 +282,7 @@ WHERE 1=1";
var _sysOrgRep = Db.GetRepository<SysOrg>();
var org = await _sysOrgRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == orgId);
// 如果当前组织为街道, 则直接返回安全员
if (org == null || org.Type <= 30)
if (org == null || org.Type <= (int)OrgType.)
{
return roles.LastOrDefault();
}
@@ -265,7 +293,7 @@ WHERE 1=1";
var roleIds = await _sysUserRoleRep.DetachedEntities.Where(p => userIds.Contains(p.SysUserId)).Select(p => p.SysRoleId).ToListAsync();
var _sysRoleRep = Db.GetRepository<SysRole>();
var isExistZoneManager = await _sysRoleRep.DetachedEntities.AnyAsync(p => roleIds.Contains(p.Id) && p.Code == System.Enum.GetName(HouseManagerRole.ZoneManager).ToUnderScoreCase());
var isExistZoneManager = await _sysRoleRep.DetachedEntities.AnyAsync(p => roleIds.Contains(p.Id) && p.Code == Enum.GetName(HouseManagerRole.ZoneManager).ToUnderScoreCase());
// 存在片区监管员,返回安全员, 否则返回监管员
if (isExistZoneManager)
{
@@ -282,7 +310,10 @@ WHERE 1=1";
[NonAction]
private async Task<List<SysRole>> GetRoleRange()
{
var codes = System.Enum.GetNames(typeof(HouseManagerRole)).Select(p => p.ToUnderScoreCase());
var codes = (new[] {
Enum.GetName(HouseManagerRole.ZoneManager),
Enum.GetName(HouseManagerRole.HouseSecurityManager),
}).Select(p => p.ToUnderScoreCase());
var _sysRoleRep = Db.GetRepository<SysRole>();
var roles = await _sysRoleRep.DetachedEntities.Where(p => codes.Contains(p.Code)).ToListAsync();

View File

@@ -86,10 +86,10 @@ namespace Ewide.Core.Service
// emps.Add(_sysEmpService.GetEmpInfo(long.Parse(u.Id)));
//});
//await Task.WhenAll(emps);
foreach (var user in users.Items)
{
user.SysEmpInfo = await _sysEmpService.GetEmpInfo(user.Id);
}
//foreach (var user in users.Items)
//{
// user.SysEmpInfo = await _sysEmpService.GetEmpInfo(user.Id);
//}
return PageDataResult<UserOutput>.PageResult(users);
}
@@ -170,8 +170,17 @@ namespace Ewide.Core.Service
if (isExist) throw Oops.Oh(ErrorCode.D1003);
var user = input.Adapt<SysUser>();
await user.UpdateExcludeAsync(new[] { nameof(SysUser.Password), nameof(SysUser.Status), nameof(SysUser.AdminType) }, true);
user.UpdateIncludeNow(new[] { nameof(SysUser.Birthday) });
await user.UpdateIncludeAsync(new[] {
nameof(SysUser.Account),
nameof(SysUser.NickName),
nameof(SysUser.Name),
nameof(SysUser.Birthday),
nameof(SysUser.Sex),
nameof(SysUser.Email),
nameof(SysUser.Phone),
nameof(SysUser.Tel),
}, true);
// user.UpdateIncludeNow(new[] { nameof(SysUser.Birthday) });
input.SysEmpParam.Id = user.Id.ToString();
// 更新员工及附属机构职位信息
await _sysEmpService.AddOrUpdate(input.SysEmpParam);

View File

@@ -1,7 +1,7 @@
import React, { Component } from 'react'
import { Form, Spin } from 'antd'
import { AntIcon } from 'components'
import { cloneDeep } from 'lodash'
import { api } from 'common/api'
const initialValues = {}
@@ -31,14 +31,15 @@ export default class form extends Component {
* @param {*} params
*/
async fillData(params) {
this.record = cloneDeep(params.record)
const state = { loading: false }
//#region 从后端转换成前段所需格式,也可以在此处调用获取详细数据接口
if (params.id) {
this.record = (await api).data
}
//#endregion
this.form.current.setFieldsValue(this.record)
this.setState({
loading: false,
})
this.setState(state)
}
/**

View File

@@ -63,16 +63,16 @@ export default class index extends Component {
title: '操作',
width: 150,
dataIndex: 'actions',
render: (text, record) => (
render: (text, { id }) => (
<QueryTableActions>
<Auth auth={{ [authName]: 'edit' }}>
<a onClick={() => this.onOpen(this.editForm, record)}>编辑</a>
<a onClick={() => this.onOpen(this.editForm, id)}>编辑</a>
</Auth>
<Auth auth={{ [authName]: 'delete' }}>
<Popconfirm
placement="topRight"
title="是否确认删除"
onConfirm={() => this.onDelete(record)}
onConfirm={() => this.onDelete(id)}
>
<a>删除</a>
</Popconfirm>
@@ -145,12 +145,10 @@ export default class index extends Component {
/**
* 打开新增/编辑弹窗
* @param {*} modal
* @param {*} record
* @param {*} id
*/
onOpen(modal, record) {
modal.current.open({
record,
})
onOpen(modal, id) {
modal.current.open({ id })
}
/**
@@ -177,10 +175,10 @@ export default class index extends Component {
/**
* 删除
* @param {*} record
* @param {*} id
*/
onDelete(record) {
this.onAction(apiAction.delete(record), '删除成功')
onDelete(id) {
this.onAction(apiAction.delete({ id }), '删除成功')
}
//#region 自定义方法

View File

@@ -3,6 +3,7 @@ const urls = {
houseMemberAdd: ['/houseMember/add', 'post'],
houseMemberEdit: ['/houseMember/edit', 'post'],
houseMemberDelete: ['/houseMember/delete', 'post'],
houseMemberDetail: ['/houseMember/detail', 'detail'],
houseMemberOwnRole: ['/houseMember/ownRole', 'get'],
houseMemberOwnData: ['/houseMember/ownData', 'get'],
houseMemberGrantData: ['/houseMember/grantData', 'post'],

View File

@@ -20,7 +20,7 @@ export default class dataForm extends Component {
form = React.createRef()
// 初始化数据
record = {}
id = ''
/**
* mount后回调
@@ -29,11 +29,11 @@ export default class dataForm extends Component {
this.props.created && this.props.created(this)
}
async fillData(params) {
this.record = cloneDeep(params.record)
this.id = params.id
//#region 从后端转换成前段所需格式
const orgData = await this.loadOrgData()
const areaData = await this.loadAreaData()
const orgCheckedKeys = await this.loadMemberOwn(this.record.id)
const orgCheckedKeys = await this.loadMemberOwn(this.id)
this.setState({
options: {
orgData,
@@ -42,7 +42,7 @@ export default class dataForm extends Component {
},
})
this.form.current.setFieldsValue({
id: this.record.id,
id: this.id,
grantOrgIdList: orgCheckedKeys,
grantAreaCodeList: [],
})
@@ -63,8 +63,8 @@ export default class dataForm extends Component {
const valid = await form.validateFields()
if (valid) {
const postData = form.getFieldsValue()
if (this.record) {
postData.id = this.record.id
if (this.id) {
postData.id = this.id
}
//#region 从前段转换后端所需格式
//#endregion

View File

@@ -41,8 +41,10 @@ export default class form extends Component {
* @param {*} params
*/
async fillData(params) {
this.record = cloneDeep(params.record || {})
//#region 从后端转换成前段所需格式
if (params.id) {
this.record = (await api.houseMemberDetail({ id: params.id })).data
}
const orgData = await this.loadOrgData()
const roleData = await this.LoadRoleData()
@@ -64,30 +66,22 @@ export default class form extends Component {
if (params.orgId) {
this.record.sysEmpParam.orgId = params.orgId
}
const defaultRole = params.record
? await this.loadOwnRole(params.record.id)
: params.orgId
? await this.loadDefaultRole(params.orgId)
: []
const defaultRole = params.id
? await this.loadOwnRole(params.id)
: await this.loadDefaultRole(params.orgId)
if (defaultRole.constructor === Array) {
this.record.roleId = defaultRole.length > 0 ? defaultRole[0] : ''
this.setState({
lockRole: true,
})
this.record.roleId = defaultRole[0]
} else {
this.record.roleId = defaultRole.id
this.setState({
lockRole: defaultRole.code === 'zone_manager',
})
}
const lockRole = this.doLockRole(defaultRole)
this.setState({
options: {
...this.state.options,
orgData,
roleData,
},
lockRole,
})
this.record = {
@@ -141,6 +135,27 @@ export default class form extends Component {
const { data } = await api.houseMemberDefaultRole({ orgId })
return data
}
async onOrgChange(orgId) {
this.setState({ loading: true })
const defaultRole = await this.loadDefaultRole(orgId)
const lockRole = this.doLockRole(defaultRole)
this.setState({ loading: false, lockRole })
}
doLockRole(defaultRole) {
if (defaultRole.constructor === Array) {
this.form.current.setFieldsValue({
roleId: defaultRole[0].id,
})
return true
} else {
this.form.current.setFieldsValue({
roleId: defaultRole.id,
})
return defaultRole.code === 'zone_manager'
}
}
render() {
return (
<Form initialValues={initialValues} ref={this.form} className="yo-form">
@@ -156,6 +171,7 @@ export default class form extends Component {
dropdownStyle={{ maxHeight: '300px', overflow: 'auto' }}
treeDefaultExpandAll
placeholder="请选择所属组织机构"
onChange={value => this.onOrgChange(value)}
/>
</Form.Item>
<Form.Item

View File

@@ -149,12 +149,12 @@ export default class index extends Component {
/**
* 打开新增/编辑弹窗
* @param {*} modal
* @param {*} record
* @param {*} id
*/
onOpen(modal, record) {
onOpen(modal, id) {
modal.current.open({
orgId: this.selectId,
record,
id,
})
}
@@ -177,35 +177,49 @@ export default class index extends Component {
/**
* 删除
* @param {*} record
* @param {*} id
*/
onDelete(record) {
this.onAction(apiAction.delete(record), '删除成功')
onDelete(id) {
this.onAction(apiAction.delete({ id }), '删除成功')
}
//#region 自定义方法
renderItem(record) {
const {
id,
account,
name,
nickName,
avatar,
sex,
phone,
email,
status,
roleCode,
roleName,
orgName,
} = record
return (
<List.Item
key={record.id}
key={id}
actions={[
<Auth auth="houseMember:edit">
<a onClick={() => this.onOpen(this.editForm, record)}>编辑</a>
<a onClick={() => this.onOpen(this.editForm, id)}>编辑</a>
</Auth>,
<Auth auth="houseMember:delete">
<Popconfirm
placement="topRight"
title="是否确认删除"
onConfirm={() => this.onDelete(record)}
onConfirm={() => this.onDelete(id)}
>
<a>删除</a>
</Popconfirm>
</Auth>,
<Auth aut="houseMember:resetPwd">
<a onClick={() => this.onResetPassword(record)}>重置密码</a>
<a onClick={() => this.onResetPassword(id)}>重置密码</a>
</Auth>,
<Auth auth="houseMember:grantData">
<a onClick={() => this.onOpen(this.dataForm, record)}>授权额外数据</a>
<a onClick={() => this.onOpen(this.dataForm, id)}>授权额外数据</a>
</Auth>,
]}
>
@@ -216,10 +230,10 @@ export default class index extends Component {
type="avatar"
shape="square"
size={48}
id={record.avatar}
id={avatar}
icon={<AntIcon type="user" />}
/>
{record.roleCode && record.roleCode.includes('house_security_manager') && (
{roleCode && roleCode.includes('house_security_manager') && (
<Button
size="small"
type="primary"
@@ -233,9 +247,9 @@ export default class index extends Component {
}
title={
<>
{record.nickName || record.name}
{record.roleName &&
record.roleName.split(',').map((item, i) => (
{nickName || name}
{roleName &&
roleName.split(',').map((item, i) => (
<span key={i}>
<Divider type="vertical" />
<Tag color="pink">{item}</Tag>
@@ -243,25 +257,24 @@ export default class index extends Component {
))}
</>
}
description={record.account}
description={account}
/>
<Descriptions className="flex-1" column={2}>
<Descriptions.Item label="部门">{record.orgName}</Descriptions.Item>
<Descriptions.Item label="部门">{orgName}</Descriptions.Item>
<Descriptions.Item label="性别">
{this.bindCodeValue(record.sex, 'sex')}
{this.bindCodeValue(sex, 'sex')}
</Descriptions.Item>
<Descriptions.Item label="手机">{record.phone || '未设置'}</Descriptions.Item>
<Descriptions.Item label="邮箱">{record.email || '未设置'}</Descriptions.Item>
<Descriptions.Item label="手机">{phone || '未设置'}</Descriptions.Item>
<Descriptions.Item label="邮箱">{email || '未设置'}</Descriptions.Item>
</Descriptions>
<div className="yo-list-content--h">
<Auth auth="houseMember:changeStatus">
<div className="yo-list-content--h--item text-center">
<Switch
checked={!record.status}
loading={record.statusChanging}
checked={!status}
checkedChildren={this.bindCodeValue(0, 'common_status')}
unCheckedChildren={this.bindCodeValue(1, 'common_status')}
onChange={checked => this.onSetUserStatus(record, checked)}
onChange={checked => this.onSetUserStatus(id, checked)}
/>
</div>
</Auth>
@@ -270,18 +283,18 @@ export default class index extends Component {
)
}
onSetUserStatus(record, checked) {
onSetUserStatus(id, checked) {
this.onAction(
apiAction.changeStatus({
id: record.id,
id,
status: +!checked,
}),
'设置成功'
)
}
onResetPassword(record) {
this.onAction(apiAction.resetPwd(record), '重置成功')
onResetPassword(id) {
this.onAction(apiAction.resetPwd({ id }), '重置成功')
}
//#endregion

View File

@@ -26,7 +26,7 @@ export default class index extends Component {
*/
async fillData(params) {
this.setState({
userId: params.record.id,
userId: params.id,
})
}

View File

@@ -20,7 +20,7 @@ export default class data extends Component {
form = React.createRef()
// 初始化数据
record = {}
id = ''
/**
* mount后回调
@@ -29,11 +29,11 @@ export default class data extends Component {
this.props.created && this.props.created(this)
}
async fillData(params) {
this.record = cloneDeep(params.record)
this.id = params.id
//#region 从后端转换成前段所需格式
const orgData = await this.loadOrgData()
const areaData = await this.loadAreaData()
const orgCheckedKeys = await this.loadMemberOwn(this.record.id)
const orgCheckedKeys = await this.loadMemberOwn(this.id)
this.setState({
options: {
orgData,
@@ -42,7 +42,7 @@ export default class data extends Component {
},
})
this.form.current.setFieldsValue({
id: this.record.id,
id: this.id,
grantOrgIdList: orgCheckedKeys,
grantAreaCodeList: [],
})
@@ -63,8 +63,8 @@ export default class data extends Component {
const valid = await form.validateFields()
if (valid) {
const postData = form.getFieldsValue()
if (this.record) {
postData.id = this.record.id
if (this.id) {
postData.id = this.id
}
//#region 从前段转换后端所需格式
//#endregion

View File

@@ -1,5 +1,17 @@
import React, { Component } from 'react'
import { Button, Row, Col, Form, Input, DatePicker, Radio, Table, Select, Spin, TreeSelect } from 'antd'
import {
Button,
Row,
Col,
Form,
Input,
DatePicker,
Radio,
Table,
Select,
Spin,
TreeSelect,
} from 'antd'
import { AntIcon } from 'components'
import { cloneDeep } from 'lodash'
import getDictData from 'util/dic'
@@ -9,25 +21,24 @@ import moment from 'moment'
const initialValues = {
sex: 0,
sysEmpParam: {}
sysEmpParam: {},
}
export default class form extends Component {
state = {
// 加载状态
loading: true,
codes: {
orgType: []
orgType: [],
},
options: {
orgData: [],
posData: []
posData: [],
},
sysEmpParam: {
extIds: []
}
extIds: [],
},
}
extColumns = [
{
@@ -45,7 +56,7 @@ export default class form extends Component {
placeholder="请选择附加组织机构"
/>
</Form.Item>
)
),
},
{
title: '附属岗位',
@@ -56,33 +67,28 @@ export default class form extends Component {
<Select
defaultValue={text}
className="w-100-p"
placeholder="请选择附加职位信息">
{
this.state.options.posData.map(item => {
return <Select.Option
key={item.id}
value={item.id}
>
{item.name}</Select.Option>
})
}
placeholder="请选择附加职位信息"
>
{this.state.options.posData.map(item => {
return (
<Select.Option key={item.id} value={item.id}>
{item.name}
</Select.Option>
)
})}
</Select>
</Form.Item>
)
),
},
{
title: '操作',
key: 'action',
width: '70px',
render: (text, record) => (
<Button
onClick={() => this.onRemoveExtData(record)}
size="small"
danger
>
<Button onClick={() => this.onRemoveExtData(record)} size="small" danger>
删除
</Button>
)
),
},
]
// 表单实例
@@ -102,11 +108,13 @@ export default class form extends Component {
* 填充数据
* 可以在设置this.record之后对其作出数据结构调整
* [异步,必要]
* @param {*} params
* @param {*} params
*/
async fillData(params) {
this.record = cloneDeep(params.record || {})
//#region 从后端转换成前段所需格式
if (params.id) {
this.record = (await api.sysUserDetail({ id: params.id })).data
}
const orgData = await this.loadOrgData()
const posData = await this.loadPosData()
const codes = await getDictData('org_type')
@@ -118,17 +126,17 @@ export default class form extends Component {
// 提交的时候是"param",而获取下来却是"info",在这里转换一下
if (this.record.sysEmpInfo) {
this.record.sysEmpParam = this.record.sysEmpInfo;
delete this.record.sysEmpInfo;
this.record.sysEmpParam = this.record.sysEmpInfo
delete this.record.sysEmpInfo
} else if (!this.record.sysEmpParam) {
this.record.sysEmpParam = {
extIds: [],
};
}
}
// 转换职位信息列表
if (this.record.sysEmpParam.positions) {
this.record.sysEmpParam.posIdList = this.record.sysEmpParam.positions.map((p) => p.posId);
this.record.sysEmpParam.posIdList = this.record.sysEmpParam.positions.map(p => p.posId)
}
// 附加信息
@@ -138,12 +146,12 @@ export default class form extends Component {
key: i,
orgId: p.orgId,
posId: p.posId,
};
});
}
})
}
if (params.orgId) {
this.record.sysEmpParam.orgId = params.orgId;
this.record.sysEmpParam.orgId = params.orgId
}
this.setState({
@@ -154,18 +162,18 @@ export default class form extends Component {
posData,
},
sysEmpParam: {
...this.record.sysEmpParam
}
...this.record.sysEmpParam,
},
})
this.record = {
...this.record
...this.record,
}
//#endregion
this.form.current.setFieldsValue(this.record)
this.setState({
loading: false
loading: false,
})
}
@@ -173,7 +181,7 @@ export default class form extends Component {
* 获取数据
* 可以对postData进行数据结构调整
* [异步,必要]
* @returns
* @returns
*/
async getData() {
const form = this.form.current
@@ -206,24 +214,26 @@ export default class form extends Component {
const record = {
key: extIds.length > 0 ? extIds[extIds.length - 1].key + 1 : 0,
orgId: undefined,
posId: undefined
posId: undefined,
}
this.setState({
sysEmpParam: {
extIds: [...extIds, record]
this.setState(
{
sysEmpParam: {
extIds: [...extIds, record],
},
},
() => {
console.log(this.form.current.getFieldsValue())
}
}, () => {
console.log(this.form.current.getFieldsValue())
})
)
}
onRemoveExtData(record) {
const ext = this.state.sysEmpParam.extIds,
remove = ext.find((p) => p.key === record.key),
index = ext.indexOf(remove);
remove = ext.find(p => p.key === record.key),
index = ext.indexOf(remove)
ext.splice(index, 1);
ext.splice(index, 1)
console.log(ext)
// this.form.current.setFieldsValue({
@@ -232,14 +242,16 @@ export default class form extends Component {
// }
// })
this.setState({
sysEmpParam: {
extIds: ext
this.setState(
{
sysEmpParam: {
extIds: ext,
},
},
() => {
//console.log(this.form.current.getFieldsValue())
}
}, () => {
//console.log(this.form.current.getFieldsValue())
})
)
}
//#endregion
renderExtInfoTable() {
@@ -251,79 +263,100 @@ export default class form extends Component {
pagination={false}
size="small"
bordered
rowKey={(record) => record.key}
footer={
() =>
<Button
block
icon={
<AntIcon type="plus" />
}
type="dashed"
onClick={() => this.onAddExtData()}>
新增一项</Button>
}
>
</Table>
rowKey={record => record.key}
footer={() => (
<Button
block
icon={<AntIcon type="plus" />}
type="dashed"
onClick={() => this.onAddExtData()}
>
新增一项
</Button>
)}
></Table>
)
}
render() {
return (
<Form
initialValues={initialValues}
ref={this.form}
className="yo-form"
>
<Spin
spinning={this.state.loading}
indicator={<AntIcon type="loading" />}>
<Form initialValues={initialValues} ref={this.form} className="yo-form">
<Spin spinning={this.state.loading} indicator={<AntIcon type="loading" />}>
<h3 className="h3">基本信息</h3>
<div className="yo-form-group">
<Form.Item label="账号" name="account" rules={[{ required: true, message: '请输入账号', trigger: 'blur' }]}>
<Form.Item
label="账号"
name="account"
rules={[{ required: true, message: '请输入账号', trigger: 'blur' }]}
>
<Input autoComplete="off" placeholder="请输入账号" />
</Form.Item>
<Form.Item label="姓名" name="name" rules={[{ required: true, message: '请输入姓名', trigger: 'blur' }]}>
<Form.Item
label="姓名"
name="name"
rules={[{ required: true, message: '请输入姓名', trigger: 'blur' }]}
>
<Input autoComplete="off" placeholder="请输入姓名" />
</Form.Item>
{this.props.mode == 'add' && <>
<Form.Item label="密码" name="password" rules={[{ required: true, message: '请输入密码', trigger: 'blur' }]}>
<Input.Password autoComplete="off" placeholder="请输入密码" />
</Form.Item>
<Form.Item label="确认密码" name="confirm" rules={[{ required: true, message: '请确认密码', trigger: 'blur' }]}>
<Input.Password autoComplete="off" placeholder="请确认密码" />
</Form.Item>
</>
}
<Form.Item label="昵称" name="nickName" >
{this.props.mode == 'add' && (
<>
<Form.Item
label="密码"
name="password"
rules={[
{ required: true, message: '请输入密码', trigger: 'blur' },
]}
>
<Input.Password autoComplete="off" placeholder="请输入密码" />
</Form.Item>
<Form.Item
label="确认密码"
name="confirm"
rules={[
{ required: true, message: '请确认密码', trigger: 'blur' },
]}
>
<Input.Password autoComplete="off" placeholder="请确认密码" />
</Form.Item>
</>
)}
<Form.Item label="昵称" name="nickName">
<Input autoComplete="off" placeholder="请输入昵称" />
</Form.Item>
<Form.Item label="生日" name="birthday" >
<Form.Item label="生日" name="birthday">
<DatePicker className="w-100-p" />
</Form.Item>
<Form.Item label="性别" name="sex" >
<Radio.Group >
<Form.Item label="性别" name="sex">
<Radio.Group>
<Radio.Button value={0}>
<AntIcon className="mr-xxs" type="stop" />
<span>保密</span>
</Radio.Button>
<Radio.Button value={1}>
<AntIcon style={{ color: '#1890ff' }} className="mr-xxs" type="man" />
<AntIcon
style={{ color: '#1890ff' }}
className="mr-xxs"
type="man"
/>
<span></span>
</Radio.Button>
<Radio.Button value={2}>
<AntIcon style={{ color: '#eb2f96' }} className="mr-xxs" type="woman" />
<AntIcon
style={{ color: '#eb2f96' }}
className="mr-xxs"
type="woman"
/>
<span></span>
</Radio.Button>
</Radio.Group>
</Form.Item>
<Form.Item label="邮箱" name="email" >
<Form.Item label="邮箱" name="email">
<Input autoComplete="off" placeholder="请输入邮箱" />
</Form.Item>
<Form.Item label="手机号" name="phone" >
<Form.Item label="手机号" name="phone">
<Input autoComplete="off" placeholder="请输入手机号" />
</Form.Item>
<Form.Item label="电话" name="tel" >
<Form.Item label="电话" name="tel">
<Input autoComplete="off" placeholder="请输入电话" />
</Form.Item>
</div>
@@ -332,7 +365,8 @@ export default class form extends Component {
<Form.Item
label="所属组织机构"
name={['sysEmpParam', 'orgId']}
rules={[{ required: true, message: '所属组织机构' }]}>
rules={[{ required: true, message: '所属组织机构' }]}
>
<TreeSelect
treeData={this.state.options.orgData}
dropdownStyle={{ maxHeight: '300px', overflow: 'auto' }}
@@ -340,26 +374,18 @@ export default class form extends Component {
placeholder="请选择所属组织机构"
/>
</Form.Item>
<Form.Item
label="工号"
name={['sysEmpParam', 'jobNum']} >
<Input
autoComplete="off"
placeholder="请输入工号" />
<Form.Item label="工号" name={['sysEmpParam', 'jobNum']}>
<Input autoComplete="off" placeholder="请输入工号" />
</Form.Item>
<Form.Item label="职位信息" name={['sysEmpParam', 'posIdList']}>
<Select
mode="multiple"
placeholder="请选择职位信息">
{
this.state.options.posData.map(item => {
return <Select.Option
key={item.id}
value={item.id}
>
{item.name}</Select.Option>
})
}
<Select mode="multiple" placeholder="请选择职位信息">
{this.state.options.posData.map(item => {
return (
<Select.Option key={item.id} value={item.id}>
{item.name}
</Select.Option>
)
})}
</Select>
</Form.Item>
</div>

View File

@@ -155,12 +155,12 @@ export default class index extends Component {
/**
* 打开新增/编辑弹窗
* @param {*} modal
* @param {*} record
* @param {*} id
*/
onOpen(modal, record) {
onOpen(modal, id) {
modal.current.open({
orgId: this.selectId,
record,
id,
})
}
@@ -191,24 +191,25 @@ export default class index extends Component {
//#region 自定义方法
renderItem(record) {
const { id, account, name, nickName, avatar, sex, phone, email, status } = record
return (
<List.Item
key={record.id}
key={id}
actions={[
<Auth auth="sysUser:edit">
<a onClick={() => this.onOpen(this.editForm, record)}>编辑</a>
<a onClick={() => this.onOpen(this.editForm, id)}>编辑</a>
</Auth>,
<Auth auth="sysOrg:delete">
<Popconfirm
placement="topRight"
title="是否确认删除"
onConfirm={() => this.onDelete(record)}
onConfirm={() => this.onDelete(id)}
>
<a>删除</a>
</Popconfirm>
</Auth>,
<Auth aut="sysUser:resetPwd">
<a onClick={() => this.onResetPassword(record)}>重置密码</a>
<a onClick={() => this.onResetPassword(id)}>重置密码</a>
</Auth>,
<Auth auth={{ sysUser: [['grantRole'], ['grantData']] }}>
<Dropdown
@@ -217,14 +218,14 @@ export default class index extends Component {
<Menu>
{auth('sysUser:grantRole') && (
<Menu.Item key="1">
<a onClick={() => this.onOpen(this.roleForm, record)}>
<a onClick={() => this.onOpen(this.roleForm, id)}>
授权角色
</a>
</Menu.Item>
)}
{auth('sysUser:grantData') && (
<Menu.Item key="2">
<a onClick={() => this.onOpen(this.dataForm, record)}>
<a onClick={() => this.onOpen(this.dataForm, id)}>
授权额外数据
</a>
</Menu.Item>
@@ -246,29 +247,28 @@ export default class index extends Component {
type="avatar"
shape="square"
size={48}
id={record.avatar}
id={avatar}
icon={<AntIcon type="user" />}
/>
}
title={record.nickName || record.name}
description={record.account}
title={nickName || name}
description={account}
/>
<Descriptions className="flex-1" column={2}>
<Descriptions.Item label="性别">
{this.bindCodeValue(record.sex, 'sex')}
{this.bindCodeValue(sex, 'sex')}
</Descriptions.Item>
<Descriptions.Item label="手机">{record.phone || '未设置'}</Descriptions.Item>
<Descriptions.Item label="邮箱">{record.email || '未设置'}</Descriptions.Item>
<Descriptions.Item label="手机">{phone || '未设置'}</Descriptions.Item>
<Descriptions.Item label="邮箱">{email || '未设置'}</Descriptions.Item>
</Descriptions>
<div className="yo-list-content--h">
<Auth auth="sysUser:changeStatus">
<div className="yo-list-content--h--item text-center">
<Switch
checked={!record.status}
loading={record.statusChanging}
checked={!status}
checkedChildren={this.bindCodeValue(0, 'common_status')}
unCheckedChildren={this.bindCodeValue(1, 'common_status')}
onChange={checked => this.onSetUserStatus(record, checked)}
onChange={checked => this.onSetUserStatus(id, checked)}
/>
</div>
</Auth>
@@ -277,12 +277,12 @@ export default class index extends Component {
)
}
onSetUserStatus(record, checked) {
this.onAction(apiAction.changeStatus({ id: record.id, status: +!checked }), '设置成功')
onSetUserStatus(id, checked) {
this.onAction(apiAction.changeStatus({ id, status: +!checked }), '设置成功')
}
onResetPassword(record) {
this.onAction(apiAction.resetPwd(record), '重置成功')
onResetPassword(id) {
this.onAction(apiAction.resetPwd({ id }), '重置成功')
}
//#endregion

View File

@@ -19,7 +19,7 @@ export default class role extends Component {
form = React.createRef()
// 初始化数据
record = {}
id = ''
/**
* mount后回调
@@ -28,10 +28,10 @@ export default class role extends Component {
this.props.created && this.props.created(this)
}
async fillData(params) {
this.record = cloneDeep(params.record)
this.id = params.id
//#region 从后端转换成前段所需格式
const roleData = await this.loadRoleData()
const roles = await this.loadRole(this.record.id)
const roles = await this.loadRole(this.id)
this.setState({
options: {
roleData,
@@ -39,7 +39,7 @@ export default class role extends Component {
roles,
})
this.form.current.setFieldsValue({
id: this.record.id,
id: this.id,
grantRoleIdList: roles,
})
@@ -59,8 +59,8 @@ export default class role extends Component {
const valid = await form.validateFields()
if (valid) {
const postData = form.getFieldsValue()
if (this.record) {
postData.id = this.record.id
if (this.id) {
postData.id = this.id
}
//#region 从前段转换后端所需格式
//#endregion