From 71bd99c8b54c9be24bde2e491be2d60f96c5f21f Mon Sep 17 00:00:00 2001 From: Casper <2529670555@qq.com> Date: Sat, 14 Aug 2021 16:45:45 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E5=B0=8F=E7=BB=86=E8=8A=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/styles/main.scss | 3 ++- src/views/auth/menu/index.scss | 1 + src/views/auth/user/index.scss | 5 ++++- src/views/auth/user/index.tsx | 11 ++++++----- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/styles/main.scss b/src/styles/main.scss index ffa78ff..81c41a3 100644 --- a/src/styles/main.scss +++ b/src/styles/main.scss @@ -1,4 +1,5 @@ // 所有页面主样式 body{ background:#fff; -} \ No newline at end of file + min-width: 980px; +} diff --git a/src/views/auth/menu/index.scss b/src/views/auth/menu/index.scss index 9ae09be..4628fdc 100644 --- a/src/views/auth/menu/index.scss +++ b/src/views/auth/menu/index.scss @@ -8,6 +8,7 @@ display: flex; align-items: center; width: 30%; + min-width: 320px; max-width: 500px; .search-btn { margin-left: 5px; diff --git a/src/views/auth/user/index.scss b/src/views/auth/user/index.scss index b438ccc..ff0eb4a 100644 --- a/src/views/auth/user/index.scss +++ b/src/views/auth/user/index.scss @@ -8,8 +8,11 @@ flex-wrap: wrap; .ant-form-item { width: 33%; - max-width: 450px; + max-width: 350px; padding: 0 20px; + .ant-form-item-label { + min-width: 75px; + } } } } diff --git a/src/views/auth/user/index.tsx b/src/views/auth/user/index.tsx index d6ba5e9..894a572 100644 --- a/src/views/auth/user/index.tsx +++ b/src/views/auth/user/index.tsx @@ -3,7 +3,7 @@ import React, { FC } from 'react' import { useAntdTable } from 'ahooks' import { getUserList } from '@/api/auth/user' import { PaginatedParams } from 'ahooks/lib/useAntdTable' -import { Button, Form, Input, Popconfirm, Row, Table, Tooltip } from 'antd' +import { Button, Form, Input, Popconfirm, Table, Tooltip } from 'antd' import { DeleteOutlined, FormOutlined, PlusOutlined } from '@ant-design/icons' import { UserListParams, UserListRes } from '@/interface/auth/user' import { antdTableResult } from '@/interface/ahooks' @@ -11,8 +11,9 @@ import './index.scss' /** * @description: 定义useAntdTable第一个参数,调用获取表格数据接口 - * @param {*} 传入current,size和筛选表单 + * @param {formData} 传入current,size和筛选表单 * @return {*} 表格数据和total + * @param formData */ const getUserData = async ( { current, pageSize }: PaginatedParams[0], @@ -152,10 +153,10 @@ const AuthUser:FC = () => { - + - - + +
-- Gitee From fdf0ef1a54101aebbc510922bb6006ddead5808d Mon Sep 17 00:00:00 2001 From: Casper <2529670555@qq.com> Date: Sun, 15 Aug 2021 05:23:03 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=9D=83=E9=99=90=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/auth/user.ts | 22 ++++-- src/hooks/auth/user.ts | 37 +++++---- src/interface/auth/user.ts | 46 +++++------ src/views/auth/user/index.tsx | 139 ++++++++++++++++++++++++---------- 4 files changed, 154 insertions(+), 90 deletions(-) diff --git a/src/api/auth/user.ts b/src/api/auth/user.ts index e931a57..7f47834 100644 --- a/src/api/auth/user.ts +++ b/src/api/auth/user.ts @@ -1,11 +1,19 @@ import request from '@/utils/request' -import { UserListParams } from '@/interface/auth/user' +import { UserAddParams, UserListParams, UserListRes } from '@/interface/auth/user' -/** - * 获取用户列表 - * @param {UserListParams} data - * return - */ -export function getUserList(data: UserListParams): Promise { +// 获取用户列表 +export function getUserList(data: UserListParams): Promise { return request.get('/api/auth/user/page', data) } +// 新增用户 +export function addUserApi(data: UserAddParams) { + return request.post('/api/auth/user', data) +} +// 修改用户 +export function updateUserApi(id:number, data:UserAddParams) { + return request.put(`/api/auth/user/${id}`, data) +} +// 删除用户 +export function deleteUserApi(id:number) { + return request.delete(`/api/auth/user/${id}`) +} diff --git a/src/hooks/auth/user.ts b/src/hooks/auth/user.ts index e897bad..db2aa9f 100644 --- a/src/hooks/auth/user.ts +++ b/src/hooks/auth/user.ts @@ -1,20 +1,25 @@ import { getUserList } from '@/api/auth/user' -import { useEffect, useState } from 'react' -import { UserListParams } from '@/interface/auth/user' +import { UserListParams, UserListRes } from '@/interface/auth/user' +import { PaginatedParams } from 'ahooks/lib/useAntdTable' +import { antdTableResult } from '@/interface/ahooks' -export function useUserTable() { - const [userList, setUserList] = useState([]) - const [loading, setLoading] = useState(false) - const [tableParams, setTableParams] = useState({ current: 1, size: 10 }) - // 获取用户表格数据 - const getUserData = async (params: UserListParams) => { - const res = await getUserList(params) - setUserList(res) +/** + * @description: 定义useAntdTable第一个参数,调用获取表格数据接口 + * @param current 当前页 + * @param pageSize 每页条数 + * @param formData 表格参数 + * @return {*} 表格数据和total + */ +export const getUserData = async ( + { current, pageSize }: PaginatedParams[0], + formData: UserListParams, +): Promise> => { + const params = { ...formData } + params.current = current + params.size = pageSize + const res: any = await getUserList(params) + return { + total: res.total, + list: res.records, } - useEffect(() => { - setLoading(true) - getUserData(tableParams) - }, [tableParams]) - - return { loading, userList, setUserList, setTableParams } } diff --git a/src/interface/auth/user.ts b/src/interface/auth/user.ts index 911a003..851954f 100644 --- a/src/interface/auth/user.ts +++ b/src/interface/auth/user.ts @@ -1,7 +1,4 @@ -// 获取用户列表的参数 -export interface UserListParams { - current: number - size: number +interface UserType { loginName?: string nickName?: string isLockout?: string @@ -10,36 +7,35 @@ export interface UserListParams { createTimeStart?: string createTimeEnd?: string } - +// 获取用户列表的参数 +export interface UserListParams extends UserType{ + current: number + size: number +} +// 用户列表表格数据 +export interface UserTableType extends UserType{ + id: number + password: string + lockTime?: string + psdWrongTime?: number + storeId?: number + lastLoginTime?: string +} // 用户列表接口返回值 export interface UserListRes { - countId?: string current: number - hitCount?: boolean - maxLimit?: number - optimizeCountSql?: boolean pages: number orders?: Array records: Array - searchCount?: boolean size: number total: number [props: string]: any } - -// 用户列表表格数据 -export interface UserTableType { - id: number - password: string +// 新增用户接口参数 +export interface UserAddParams { loginName: string - isLockout?: number - lockTime?: string - nickName?: string - protectEmail?: string - protectPhone?: string - psdWrongTime?: number - storeId?: number - createTime?: string - updateTime?: string - lastLoginTime?: string + nickName: string + password: string + protectEmail: string + protectPhone: string } diff --git a/src/views/auth/user/index.tsx b/src/views/auth/user/index.tsx index 894a572..0d0cdec 100644 --- a/src/views/auth/user/index.tsx +++ b/src/views/auth/user/index.tsx @@ -1,53 +1,91 @@ import View from '@/components/View' -import React, { FC } from 'react' -import { useAntdTable } from 'ahooks' -import { getUserList } from '@/api/auth/user' -import { PaginatedParams } from 'ahooks/lib/useAntdTable' -import { Button, Form, Input, Popconfirm, Table, Tooltip } from 'antd' +import { Button, DatePicker, Form, Input, message, Modal, Popconfirm, Select, Table, Tooltip } from 'antd' import { DeleteOutlined, FormOutlined, PlusOutlined } from '@ant-design/icons' -import { UserListParams, UserListRes } from '@/interface/auth/user' -import { antdTableResult } from '@/interface/ahooks' +import React, { FC, useState } from 'react' +import { useAntdTable, useBoolean } from 'ahooks' +import { getUserData } from '@/hooks/auth/user' +import { addUserApi, deleteUserApi, updateUserApi } from '@/api/auth/user' +// import { UserAddParams } from '@/interface/auth/user' import './index.scss' -/** - * @description: 定义useAntdTable第一个参数,调用获取表格数据接口 - * @param {formData} 传入current,size和筛选表单 - * @return {*} 表格数据和total - * @param formData - */ -const getUserData = async ( - { current, pageSize }: PaginatedParams[0], - formData: UserListParams, -): Promise> => { - const params = { ...formData } - params.current = current - params.size = pageSize - const res: any = await getUserList(params) - return { - total: res.total, - list: res.records, - } +// userForm配置 +const userFormConfig = [ + { label: '登录名', name: 'loginName', rules: [{ required: true, message: '请输入内容' }] }, + { label: '昵称', name: 'nickName', rules: [{ required: true, message: '请输入内容' }] }, + { label: '密码', name: 'password', rules: [{ required: true, message: '请输入内容' }] }, + { label: '密保邮箱', name: 'protectEmail', rules: [{ required: true, message: '请输入内容' }] }, + { label: '密码手机', name: 'protectPhone', rules: [{ required: true, message: '请输入内容' }] }, +] +// 创建FormItem +const getUserFormItem = () => { + const children = [] + userFormConfig.forEach((item, index) => { + children.push( + + + , + ) + }) + return children } const AuthUser:FC = () => { // 获取表单实例 - const [form] = Form.useForm() + const [tableForm] = Form.useForm() + const [userForm] = Form.useForm() + const { Option } = Select + // 弹窗标题、控制、加载变量 + const [modalTitle, setModalTitle] = useState('创建用户') + const [visible, { setTrue, setFalse }] = useBoolean(false) + const [loading, { setTrue: loadingTrue, setFalse: loadingFalse }] = useBoolean(false) + const [currentId, setCurrentId] = useState(null) // ahooks定义表格数据和方法 const { tableProps, search } = useAntdTable(getUserData, { defaultPageSize: 10, - form, + form: tableForm, }) // 表单重置和搜索方法 const { submit, reset } = search - const addUser = () => { - console.log(1) + const addUserModal = () => { + setModalTitle('创建用户') + userForm.resetFields() + setTrue() } - const editUser = (params) => { - console.log(params) + const updateUserModal = (params) => { + setCurrentId(params.id) + setModalTitle('修改用户') + userForm.setFieldsValue(params) + setTrue() } - const deleteUser = (id) => { - console.log(id) + const submitUserForm = () => { + loadingTrue() + userForm.validateFields().then((values) => { + if (modalTitle === '创建用户') { + addUserApi(values).then(() => { + message.success('创建用户成功') + setFalse() + loadingFalse() + reset() + }).catch(loadingFalse) + } else if (modalTitle === '修改用户') { + updateUserApi(currentId, values).then(() => { + message.success('修改用户成功') + setFalse() + loadingFalse() + reset() + }).catch(loadingFalse) + } + }).catch((info) => { + loadingFalse() + console.log(info) + }) + } + const deleteUserBtn = (id: number) => { + deleteUserApi(id).then(() => { + message.success('删除用户成功!') + reset() + }) } const columns = [ { @@ -105,13 +143,13 @@ const AuthUser:FC = () => { shape="circle" style={{ marginRight: '5px' }} type="primary" - onClick={() => editUser(record)} + onClick={() => updateUserModal(record)} icon={} /> deleteUser(record.id)} + onConfirm={() => deleteUserBtn(record.id)} okText="确认" cancelText="取消" > @@ -130,7 +168,7 @@ const AuthUser:FC = () => { labelCol={{ span: 6 }} wrapperCol={{ span: 18 }} name="menu-item-form" - form={form} + form={tableForm} > @@ -139,7 +177,10 @@ const AuthUser:FC = () => { - + @@ -148,10 +189,7 @@ const AuthUser:FC = () => { - - - - + @@ -160,11 +198,28 @@ const AuthUser:FC = () => {
- +
record.id} {...tableProps} /> + +
+ {getUserFormItem} + +
) } -- Gitee