当前位置: 首页 > 工具软件 > UMI Admin > 使用案例 >

umi,安卓开发指南

柴嘉石
2023-12-01
  • 网络请求接口(service.ts中)

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’

});

}

  • 取公用数据类型(data.d.ts中)

/**

  • 封装后台返回的数据

*/

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

};

  • model.ts中dva数据获取

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;

  • 首页index.tsx展示数据

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’

/**

  • 声明下方 props 类型

*/

type accountListPageProps = {

listData: AccountListState,

dispatch: Dispatch

}

const AccountListPage: FC = (props) => {

//获取从model中来的数据

const { listData, dispatch } = props

//配置ProTable

const ref = useRef();

/**

  • ProTable的网络请求 request

*/

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)

  • 弹框 addaccountmodal.tsx

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: ‘您还没填写账户名称’ }]}

 类似资料: