diff --git a/src/api/system/user.js b/src/api/system/user.js index 345e8ec..c4213e2 100644 --- a/src/api/system/user.js +++ b/src/api/system/user.js @@ -4,37 +4,55 @@ const mock = (data) => resolve(data); }, Math.random() * 1500 + 500); }); +let list = [ + { + id: 1, + username: 'user001', + nickname: '张三', + sex: 1, + avatar: 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fup.enterdesk.com%2Fedpic%2Ffd%2Ff1%2Fda%2Ffdf1dacb8ff0b8f13ed29bcbee42f328.jpeg&refer=http%3A%2F%2Fup.enterdesk.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1650201540&t=ba213738d8f11e79302fab71602856f2', + loginTime: Date.now(), + enabled: true, + }, + { + id: 2, + username: 'user003', + nickname: '李四', + sex: 0, + avatar: 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fup.enterdesk.com%2Fedpic%2Ffd%2Ff1%2Fda%2Ffdf1dacb8ff0b8f13ed29bcbee42f328.jpeg&refer=http%3A%2F%2Fup.enterdesk.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1650201540&t=ba213738d8f11e79302fab71602856f2', + loginTime: Date.now(), + enabled: true, + }, + { + id: 3, + username: 'user003', + nickname: '王五', + sex: 1, + avatar: 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fup.enterdesk.com%2Fedpic%2Ffd%2Ff1%2Fda%2Ffdf1dacb8ff0b8f13ed29bcbee42f328.jpeg&refer=http%3A%2F%2Fup.enterdesk.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1650201540&t=ba213738d8f11e79302fab71602856f2', + loginTime: Date.now(), + enabled: false, + }, +]; export const findUserList = (data) => { - return mock({ - content: [ - { - id: 1, - username: 'user001', - nickname: '张三', - sex: 1, - avatar: 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fup.enterdesk.com%2Fedpic%2Ffd%2Ff1%2Fda%2Ffdf1dacb8ff0b8f13ed29bcbee42f328.jpeg&refer=http%3A%2F%2Fup.enterdesk.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1650201540&t=ba213738d8f11e79302fab71602856f2', - loginTime: Date.now(), - enabled: true, - }, - { - id: 2, - username: 'user003', - nickname: '李四', - sex: 0, - avatar: 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fup.enterdesk.com%2Fedpic%2Ffd%2Ff1%2Fda%2Ffdf1dacb8ff0b8f13ed29bcbee42f328.jpeg&refer=http%3A%2F%2Fup.enterdesk.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1650201540&t=ba213738d8f11e79302fab71602856f2', - loginTime: Date.now(), - enabled: true, - }, - { - id: 3, - username: 'user003', - nickname: '王五', - sex: 1, - avatar: 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fup.enterdesk.com%2Fedpic%2Ffd%2Ff1%2Fda%2Ffdf1dacb8ff0b8f13ed29bcbee42f328.jpeg&refer=http%3A%2F%2Fup.enterdesk.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1650201540&t=ba213738d8f11e79302fab71602856f2', - loginTime: Date.now(), - enabled: false, - }, - ], - totalElements: 3, - }); + return mock({ content: list, totalElements: list.length }); +}; +export const createUser = (data) => { + data = { + id: new Date().getTime(), + ...data, + }; + list.push(data); + return mock(data); +}; +export const updateUser = (data) => { + let old = list.find((item) => item.id === data.id); + Object.assign(old, data); + return mock(old); +}; +export const removeUser = (ids) => { + list = list.filter((item) => !ids.includes(item.id)); + return mock(true); +}; +export const getUserDetail = (id) => { + return mock(list.find((item) => item.id === id)); }; diff --git a/src/components/extra/ElUploadImage.vue b/src/components/extra/ElUploadImage.vue index 98c958e..09f2126 100644 --- a/src/components/extra/ElUploadImage.vue +++ b/src/components/extra/ElUploadImage.vue @@ -32,6 +32,11 @@ }, multiple: { type: Boolean, + defualt: false, + }, + disabled: { + type: Boolean, + defualt: false, }, limit: { type: Number, @@ -122,9 +127,13 @@ {unref(imgList).map((item, index) => (
-
handleDeleteImage(index)}> - -
+ {!props.disabled ? ( +
handleDeleteImage(index)}> + +
+ ) : ( + '' + )}
))} {props.limit != unref(imgList).length ? ( diff --git a/src/layouts/components/main.vue b/src/layouts/components/main.vue index 6dbbb47..4d89576 100644 --- a/src/layouts/components/main.vue +++ b/src/layouts/components/main.vue @@ -24,6 +24,12 @@ width: 100%; height: @layout-main-height; padding: @layout-space-large; + &.form-container { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } } } } diff --git a/src/router/modules/system.js b/src/router/modules/system.js index 9d630c3..dd51137 100644 --- a/src/router/modules/system.js +++ b/src/router/modules/system.js @@ -38,6 +38,16 @@ export default [ hidden: true, }, }, + { + path: 'detail/:id', + name: 'UserDetail', + component: () => import('@/views/system/user/form.vue'), + meta: { + title: '用户详情', + icon: 'user-1-fill', + hidden: true, + }, + }, ], }, ], diff --git a/src/store/modules/system/user.js b/src/store/modules/system/user.js index 43d7b4e..6864b25 100644 --- a/src/store/modules/system/user.js +++ b/src/store/modules/system/user.js @@ -1,34 +1,76 @@ import * as api from '@/api/system/user.js'; -import { ElMessage } from '@/plugins/element-plus'; +import { ElMessage, ElMessageBox } from '@/plugins/element-plus'; const state = () => ({ - loading: false, list: [], total: 0, + page: { pageIndex: 1, length: 10 }, opts: { - sex: [ - { label: '男', value: 1 }, - { label: '女', value: 0 }, - ], + init: false, + sex: [], }, }); const getters = {}; const mutations = { - setLoading: (state, data) => (state.loading = data), setList: (state, data) => (state.list = data), setTotal: (state, data) => (state.total = data), + setOpts: (state, data) => (state.opts = data), }; const actions = { - search: async ({ commit }, data) => { - commit('setLoading', true); - let res = await api.findUserList(data); + search: async ({ state, commit }, data = {}) => { + let res = await api.findUserList({ ...state.page, ...data }); if (res) { commit('setList', res.content); commit('setTotal', res.totalElements); } else { - ElMessage.error('查询用户失败'); + ElMessage.error('查询失败'); commit('setList', []); } - commit('setLoading', false); + return res; + }, + load: async ({ commit }) => { + commit('setOpts', { + init: true, + sex: [ + { label: '男', value: 1 }, + { label: '女', value: 0 }, + ], + }); + }, + detail: async ({ state }, id) => { + let res = await api.getUserDetail(id); + if (!res) { + ElMessage.error('加载详情失败'); + } + return res; + }, + save: async ({ dispatch }, data) => { + let save = data.id ? api.updateUser : api.createUser; + let res = await save(data); + if (res) { + ElMessage.success('保存成功'); + dispatch('search'); + } else { + ElMessage.error('保存失败'); + } + return res; + }, + remove: async ({ dispatch }, ids) => { + if (!ids.length) { + ElMessage.warning('请选择要删除的数据'); + } else { + try { + await ElMessageBox.confirm('数据删除后无法恢复,确定要删除吗?', '危险操作'); + let res = await api.removeUser(ids); + if (res) { + ElMessage.success('删除成功'); + dispatch('search'); + } else { + ElMessage.error('删除失败'); + } + } catch (e) { + console.info('取消删除', e); + } + } }, }; export default { diff --git a/src/views/system/user/form.vue b/src/views/system/user/form.vue index d996e42..9870934 100644 --- a/src/views/system/user/form.vue +++ b/src/views/system/user/form.vue @@ -1,20 +1,115 @@ diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue index e026b91..8b63346 100644 --- a/src/views/system/user/index.vue +++ b/src/views/system/user/index.vue @@ -23,7 +23,7 @@