diff --git a/mock/user.js b/mock/user.js index d82e079d58c..18bb0043921 100644 --- a/mock/user.js +++ b/mock/user.js @@ -1,4 +1,3 @@ - const tokens = { admin: { token: 'admin-token' @@ -23,6 +22,18 @@ const users = { } } +// 模拟用户列表数据 +const userList = [ + { id: 1, name: '张三', phone: '13800138001', role: 'super_admin', createTime: '2023-01-01 10:00:00', status: 1 }, + { id: 2, name: '李四', phone: '13800138002', role: 'admin', createTime: '2023-01-02 10:00:00', status: 1 }, + { id: 3, name: '王五', phone: '13800138003', role: 'user', createTime: '2023-01-03 10:00:00', status: 0 }, + { id: 4, name: '赵六', phone: '13800138004', role: 'user', createTime: '2023-01-04 10:00:00', status: 1 }, + { id: 5, name: '孙七', phone: '13800138005', role: 'user', createTime: '2023-01-05 10:00:00', status: 1 }, + { id: 6, name: '周八', phone: '13800138006', role: 'user', createTime: '2023-01-06 10:00:00', status: 0 }, + { id: 7, name: '吴九', phone: '13800138007', role: 'user', createTime: '2023-01-07 10:00:00', status: 1 }, + { id: 8, name: '郑十', phone: '13800138008', role: 'user', createTime: '2023-01-08 10:00:00', status: 1 } +] + module.exports = [ // user login { @@ -80,5 +91,52 @@ module.exports = [ data: 'success' } } + }, + + // user list + { + url: '/vue-element-admin/user/list', + type: 'get', + response: config => { + const { page, size, phone, role, createTime, status } = config.query + let filteredList = [...userList] + + // 手机号模糊匹配 + if (phone) { + filteredList = filteredList.filter(user => user.phone.includes(phone)) + } + + // 角色精准筛选 + if (role) { + filteredList = filteredList.filter(user => user.role === role) + } + + // 创建时间范围筛选 + if (createTime) { + const [startTime, endTime] = createTime.split(',') + filteredList = filteredList.filter(user => { + const userTime = new Date(user.createTime).getTime() + return userTime >= new Date(startTime).getTime() && userTime <= new Date(endTime).getTime() + }) + } + + // 用户状态筛选 + if (status && status.length > 0) { + filteredList = filteredList.filter(user => status.includes(user.status.toString())) + } + + // 分页 + const startIndex = (page - 1) * size + const endIndex = startIndex + parseInt(size) + const paginatedList = filteredList.slice(startIndex, endIndex) + + return { + code: 20000, + data: { + list: paginatedList, + total: filteredList.length + } + } + } } -] +] \ No newline at end of file diff --git a/src/api/user.js b/src/api/user.js index b8b8741caff..de3e40804e6 100644 --- a/src/api/user.js +++ b/src/api/user.js @@ -22,3 +22,11 @@ export function logout() { method: 'post' }) } + +export function fetchUserList(params) { + return request({ + url: '/vue-element-admin/user/list', + method: 'get', + params + }) +} diff --git a/src/views/user/index.vue b/src/views/user/index.vue new file mode 100644 index 00000000000..f134f2dd5f7 --- /dev/null +++ b/src/views/user/index.vue @@ -0,0 +1,311 @@ + + + + + diff --git a/src/views/user/list.vue b/src/views/user/list.vue new file mode 100644 index 00000000000..f134f2dd5f7 --- /dev/null +++ b/src/views/user/list.vue @@ -0,0 +1,311 @@ + + + + +