import request from ‘@/utils/request’;
import type { ListParamsType } from ‘@/services/data’
import type { AccountInfoType } from ‘./data’
/**
列表数据
@param params
@returns
*/
export async function getUserList(params: ListParamsType): Promise {
return request(’/Admin/UserList’, {
method: ‘POST’,
data: { …params },
requestType: ‘form’
});
}
/**
獲取账户信息
@param params
@returns
*/
export async function getUserInfo(params: { id: string }): Promise {
return request(’/Admin/UserAdd’, {
method: ‘GET’,
params: { …params },
requestType: ‘form’
});
}
/**
用户添加
@param params
@returns
*/
export async function userAdd(params: AccountInfoType): Promise {
return request(’/Admin/UserAdd’, {
method: ‘POST’,
data: { …params },
requestType: ‘form’
});
}
/**
冻结
@param params
@returns
*/
export async function userFrozen(params: { id: string }): Promise {
return request(’/Admin/UserFroze’, {
method: ‘POST’,
data: { …params },
requestType: ‘form’
});
}
/**
*/
export type SingleUserListType = {
id: number,
level?: number,
account?: string,
password?: string,
contact_name?: string,
contact_mobile?: string,
remark?: string,
role_id?: number,
is_enable?: number,
ctime?: string,
uptime?: string,
role_name?: string,
ctime_str: string,
}
/**
*/
export type UserAddType = {
user_id?: number,
account?: string,
account_password?: string,
contact_name?: string,
contact_mobile?: number,
role_id?: number,
};
/**
*/
export type AccountInfoType = {
user_id?: number,
account?: string,
password?: string,
contact_name?: string,
contact_mobile?: number,
role_id?: number,
id?: number
};
/**
*/
export type AccountRoleListType = {
ctime?: number,
ctime_str?: string,
id?: number,
is_enable?: number,
menu_ids?: string,
role_name?: string,
uptime?: number,
value?:number,
label?:string,
disabled?:boolean
};
import { Effect, Reducer } from ‘umi’;
//导入service远端数据请求
import { getUserList, getUserInfo, userAdd, userFrozen } from ‘./service’
import { SingleUserListType, AccountI
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
nfoType, AccountRoleListType } from ‘./data’
import { message } from ‘antd’;
export type AccountListState = {
rows: SingleUserListType[];
total: number;
info: AccountInfoType;
role_list: AccountRoleListType[]
}
interface AccountListModelType {
namespace: string
state: AccountListState;//封装后台返回的数据
effects: {
getRemoteUserList: Effect;
getRemoteUserInfoData: Effect;
postRemoteUserAdd: Effect;
postRemoteUserFrozen: Effect;
};
reducers: {
getUserList: Reducer,
getUserInfoData: Reducer,
};
}
const AccountListModel: AccountListModelType = {
namespace: ‘accountListData’,
state: {
rows: [],
total: 0,
info: {},
role_list: []
},
effects: {
*getRemoteUserList({ payload }, { call, put }) {
//从service中获取数据(service主要用于接口请求)
const response = yield call(getUserList, { …payload })
if (response && response instanceof Object) {
yield put({
type: ‘getUserList’,//这个是将数据给reducers中哪个方法
payload: response.data //注意这里传递一个数组会出问题,原因待定
})
}
},
//獲取账户信息
*getRemoteUserInfoData({ payload }, { call, put }) {
const response = yield call(getUserInfo, { …payload })
if (response && response instanceof Object) {
let { role_list } = response.data
role_list.forEach((element: AccountRoleListType) => {
element.value = element.id,
element.label = element.role_name,
element.disabled = element.is_enable == 0
})
response.data.role_list = role_list
response.data.info = { …response.data.info, role_id: (response.data.info.role_id == 0 ? ‘’ : response.data.info.role_id) }
yield put({
type: ‘getUserInfoData’,
payload: response.data
})
}
},
//用户添加
*postRemoteUserAdd({ payload }, { call, put }) {
const response = yield call(userAdd, { …payload })
if (response && response instanceof Object) {
message.success(response.message)
}
},
//冻结
*postRemoteUserFrozen({ payload }, { call, put }) {
const response = yield call(userFrozen, { …payload })
if (response && response instanceof Object) {
message.success(response.message)
}
}
},
//同步
reducers: {
getUserList(state, action) {
return {
…state,
…action.payload,
};
},
getUserInfoData(state, action) {
return {
…state,
…action.payload,
};
}
},
}
export default AccountListModel;
import React, { useRef, FC } from ‘react’;
import type { ProColumns, ActionType } from ‘@ant-design/pro-table’;
import { PageContainer, WaterMark } from ‘@ant-design/pro-layout’;
import { Card, Space } from ‘antd’;
import { connect, Dispatch, AccountListState } from ‘umi’;
import type { ListParamsType } from ‘@/services/data’
import { SingleUserListType, UserAddType } from ‘./data’
import ProTable from ‘@ant-design/pro-table’
import ‘./index.less’
import AddAccountModal from ‘./components/addaccountmodal’
/**
*/
type accountListPageProps = {
listData: AccountListState,
dispatch: Dispatch
}
const AccountListPage: FC = (props) => {
//获取从model中来的数据
const { listData, dispatch } = props
//配置ProTable
const ref = useRef();
/**
*/
const requestHandler = async (params: ListParamsType) => {
await dispatch({
type: ‘accountListData/getRemoteUserList’,
payload: params = { …params }
})
return {}
}
//提交数据
const onCreateFinish = async (values: UserAddType) => {
await dispatch({
type: ‘accountListData/postRemoteUserAdd’,
payload: { …values }
})
ref.current?.reload();
return true
}
/**
启用或停用
@param id
*/
const onAccountTypeClick = async (id: number) => {
await dispatch({
type: ‘accountListData/postRemoteUserFrozen’,
payload: { id: id }
})
ref.current?.reload();
}
const columns: ProColumns[] = [
{
title: ‘ID’,
dataIndex: ‘id’,
width: 128,
search: false,
align: ‘left’
},
{
title: ‘账号名称’,
dataIndex: ‘account’,
align: ‘left’,
},
{
title: ‘状态’,
dataIndex: ‘is_enable’,
search: false,
align: ‘left’,
render: (text) => {text == 1 ? 启用
: 停用
},
},
{
title: ‘联系人姓名’,
dataIndex: ‘contact_name’,
hideInTable: true,
},
{
title: ‘创建时间’,
dataIndex: ‘ctime_str’,
search: false,
align: ‘left’
},
{
title: ‘操作’,
align: ‘center’,
render: (text, record) => (
<AddAccountModal
userId={record.id}
itemInfo={listData.info}
roleList={listData.role_list}
dispatch={dispatch}
showType={1}
onCreateFinish={onCreateFinish} />
{
record.is_enable == 0 ? <a className=“start-using” onClick={() => onAccountTypeClick(record.id)}>启用 :
<a className=“stop-using” onClick={() => onAccountTypeClick(record.id)}>停用
}
),
},
];
return (
<ProTable
actionRef={ref}
request={requestHandler}
columns={columns}
dataSource={listData.rows}
rowKey=“id”
search={{
labelWidth: ‘auto’,
}}
pagination={{
showQuickJumper: true,
pageSize: 10,
total: listData.total
}}
form={{
span: 6
}}
toolBarRender={() => [
<AddAccountModal
userId={0}
itemInfo={listData.info}
roleList={listData.role_list}
dispatch={dispatch}
showType={0}
onCreateFinish={onCreateFinish} />
]}
/>
)
}
const mapStateToProps = ({ accountListData }: { accountListData: AccountListState }) => {
return {
listData: accountListData,//这里的usersData就是model中的namespace
}
}
export default connect(mapStateToProps)(AccountListPage)
import React, { useEffect, FC } from ‘react’
import { Button, Form } from ‘antd’;
import {
ModalForm,
ProFormText,
ProFormSelect,
} from ‘@ant-design/pro-form’;
import { PlusOutlined } from ‘@ant-design/icons’;
import type { UserAddType } from ‘…/data’
import { Dispatch } from ‘umi’;
type AddAccountModalProps = {
showType: number
onCreateFinish: (values: UserAddType) => void
dispatch: Dispatch
userId: number
itemInfo: any
roleList: any
}
const AddAccountModal: FC = (props) => {
const { showType, onCreateFinish, dispatch, userId, itemInfo, roleList } = props
useEffect(() => {
form.setFieldsValue({
…itemInfo,
})
}, [itemInfo])
const [form] = Form.useForm();
const layout = {
labelCol: { span: 5 },
};
//ModalForm状态改变
const onVisibleChange = async (value: boolean) => {
if (value) {
await dispatch({
type: ‘accountListData/getRemoteUserInfoData’,
payload: { id: userId }
})
}
}
return (
<ModalForm<{
account: string;
account_password: string;
contact_name: string;
contact_mobile: number;
role_id: number;
user_id: number
}>
width=“35%”
{…layout}
form={form}
title={showType === 0 ? 添加账户
: 编辑账户
}
trigger={
showType === 0 ? (
添加账户
) : (
编辑
)
}
onFinish={async (values) => {
return onCreateFinish(values = { …values, user_id: userId });
}}
onVisibleChange={onVisibleChange}
<ProFormText name=“account”
label=“账户名称:”
placeholder=“请填写账户名称”
disabled={showType !== 0}
rules={[{ required: true, message: ‘您还没填写账户名称’ }]}