feat: 员工管理

environments/test/deployments/1
向文可 4 years ago
parent 71773bfbe2
commit 3c0e887e43

@ -33,3 +33,10 @@ export const remove = (idList) => {
params: { idList }, params: { idList },
}); });
}; };
export const enable = (params) => {
return request({
url: '/employee/enable',
method: 'put',
params,
});
};

@ -10,30 +10,30 @@ export default [
}, },
children: [ children: [
{ {
path: 'user', path: 'employee',
name: 'UserManagement', name: 'EmployeeManagement',
component: () => import('@/views/system/user/index.vue'), component: () => import('@/views/system/employee/index.vue'),
meta: { meta: {
title: '用户管理', title: '员工管理',
icon: 'Avatar', icon: 'Avatar',
}, },
children: [ children: [
{ {
path: 'create', path: 'create',
name: 'CreateUser', name: 'CreateEmployee',
component: () => import('@/views/system/user/form.vue'), component: () => import('@/views/system/employee/form.vue'),
meta: { meta: {
title: '创建用户', title: '创建员工',
icon: 'Avatar', icon: 'Avatar',
hidden: true, hidden: true,
}, },
}, },
{ {
path: 'update/:id', path: 'update/:id',
name: 'UpdateUser', name: 'UpdateEmployee',
component: () => import('@/views/system/user/form.vue'), component: () => import('@/views/system/employee/form.vue'),
meta: { meta: {
title: '编辑用户', title: '编辑员工',
icon: 'Avatar', icon: 'Avatar',
hidden: true, hidden: true,
}, },

@ -1,4 +1,4 @@
import * as api from '@/api/system/user.js'; import * as api from '@/api/system/employee.js';
import { ElMessage, ElMessageBox } from '@/plugins/element-plus'; import { ElMessage, ElMessageBox } from '@/plugins/element-plus';
const state = () => ({ const state = () => ({
code: 'UserManagement', code: 'UserManagement',
@ -72,6 +72,15 @@ const actions = {
} }
} }
}, },
enable: async ({ dispatch }, data) => {
let res = await api.enable(data);
if (res) {
ElMessage.success((data.isEnable ? '启用' : '禁用') + '成功');
dispatch('search');
} else {
ElMessage.error((data.isEnable ? '启用' : '禁用') + '失败');
}
},
}; };
export default { export default {
state, state,

@ -62,16 +62,16 @@
employeeName: [{ required: true, message: '员工姓名不能为空' }], employeeName: [{ required: true, message: '员工姓名不能为空' }],
employeeType: [{ required: true, message: '员工类型不能为空' }], employeeType: [{ required: true, message: '员工类型不能为空' }],
}); });
const opts = computed(() => store.state.user.opts); const opts = computed(() => store.state.employee.opts);
if (!unref(opts).init) { if (!unref(opts).init) {
store.dispatch('user/load'); store.dispatch('employee/load');
} }
/* 数据 */ /* 数据 */
const handleLoad = async () => { const handleLoad = async () => {
if (route.params.id) { if (route.params.id) {
const id = +route.params.id; const id = +route.params.id;
if (form.id !== id) { if (form.id !== id) {
let res = await store.dispatch('user/detail', id); let res = await store.dispatch('employee/detail', id);
Object.assign(form, res); Object.assign(form, res);
} }
} }
@ -85,7 +85,7 @@
let data = { ...unref(form) }; let data = { ...unref(form) };
data.voucherClueUrls = data.voucherClueUrls || []; data.voucherClueUrls = data.voucherClueUrls || [];
data.voucherClueUrl = data.voucherClueUrls.join(','); data.voucherClueUrl = data.voucherClueUrls.join(',');
let res = await store.dispatch('user/save', data); let res = await store.dispatch('employee/save', data);
if (res) { if (res) {
if (!data.id) { if (!data.id) {
unref(refsForm).resetFields(); unref(refsForm).resetFields();

@ -6,7 +6,7 @@
:data="list" :data="list"
:operation="['create', 'search']" :operation="['create', 'search']"
:reset="handleReset" :reset="handleReset"
title="用户" title="员工"
:total="total" :total="total"
@create="handleCreate" @create="handleCreate"
@remove="handleRemove" @remove="handleRemove"
@ -14,11 +14,8 @@
> >
<template #search> <template #search>
<el-form inline> <el-form inline>
<el-form-item label="员工姓名" prop="employeeName"> <el-form-item label="用户名" prop="userName">
<el-input v-model="state.condition.employeeName" /> <el-input v-model="state.condition.userName" />
</el-form-item>
<el-form-item label="手机号码" prop="phone">
<el-input v-model="state.condition.phone" />
</el-form-item> </el-form-item>
</el-form> </el-form>
</template> </template>
@ -27,28 +24,27 @@
<script setup lang="jsx"> <script setup lang="jsx">
import ElButton from '@/components/extra/ElButton.vue'; import ElButton from '@/components/extra/ElButton.vue';
import { ElTag } from 'element-plus/es'; import { ElSwitch } from 'element-plus/es';
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const router = useRouter(); const router = useRouter();
const store = useStore(); const store = useStore();
const loading = ref(false); const loading = ref(false);
const code = computed(() => store.state.user.code); const code = computed(() => store.state.employee.code);
const list = computed(() => store.state.user.list); const list = computed(() => store.state.employee.list);
const total = computed(() => store.state.user.total); const total = computed(() => store.state.employee.total);
const opts = computed(() => store.state.user.opts); const opts = computed(() => store.state.employee.opts);
if (!unref(opts).init) { if (!unref(opts).init) {
store.dispatch('user/load'); store.dispatch('employee/load');
} }
const state = reactive({ const state = reactive({
condition: { condition: {
employeeName: null, userName: null,
phone: null,
}, },
}); });
watch( watch(
() => state.condition, () => state.condition,
(value) => { (value) => {
store.commit('user/setCondition', _.cloneDeep(value)); store.commit('employee/setCondition', _.cloneDeep(value));
}, },
{ immediate: true, deep: true } { immediate: true, deep: true }
); );
@ -60,7 +56,7 @@
}; };
const handleSearch = async () => { const handleSearch = async () => {
loading.value = true; loading.value = true;
await store.dispatch('user/search'); await store.dispatch('employee/search');
loading.value = false; loading.value = false;
}; };
const handleCreate = () => { const handleCreate = () => {
@ -70,10 +66,17 @@
router.push({ name: 'UpdateUser', params: { id: row.id } }); router.push({ name: 'UpdateUser', params: { id: row.id } });
}; };
const handleRemove = async (rows) => { const handleRemove = async (rows) => {
store.dispatch( loading.value = true;
'user/remove', await store.dispatch(
'employee/remove',
rows.map((item) => item.id) rows.map((item) => item.id)
); );
loading.value = false;
};
const handleEnable = async (row) => {
loading.value = true;
await store.dispatch('employee/enable', { id: row.id, isEnable: !row.isEnable });
loading.value = false;
}; };
const config = reactive({ const config = reactive({
// //
@ -114,11 +117,9 @@
{ {
label: '是否启用', label: '是否启用',
prop: 'isEnable', prop: 'isEnable',
width: 180, width: 100,
slots: { slots: {
default: ({ row }) => ( default: ({ row }) => <ElSwitch modelValue={row.isEnable} onInput={() => handleEnable(row)} />,
<ElTag type={row.isEnable ? 'success' : 'error'}>{row.isEnable ? '启用' : '禁用'}</ElTag>
),
}, },
}, },
{ {

@ -65,9 +65,9 @@
avatar: [{ required: true, message: '头像不能为空' }], avatar: [{ required: true, message: '头像不能为空' }],
enabled: [{ required: true, message: '状态不能为空' }], enabled: [{ required: true, message: '状态不能为空' }],
}); });
const opts = computed(() => store.state.user.opts); const opts = computed(() => store.state.employee.opts);
if (!unref(opts).init) { if (!unref(opts).init) {
store.dispatch('user/load'); store.dispatch('employee/load');
} }
/* 详情 */ /* 详情 */
watch( watch(
@ -76,7 +76,7 @@
// watch // watch
if (['UpdateUser', 'UserDetail'].includes(value[0]) && value[1]) { if (['UpdateUser', 'UserDetail'].includes(value[0]) && value[1]) {
loading.value = true; loading.value = true;
let res = await store.dispatch('user/detail', +value[1]); let res = await store.dispatch('employee/detail', +value[1]);
if (res) { if (res) {
Object.assign(form, res); Object.assign(form, res);
} }
@ -90,7 +90,7 @@
submitting.value = true; submitting.value = true;
try { try {
await unref(refsForm).validate(); await unref(refsForm).validate();
let res = await store.dispatch('user/save', unref(form)); let res = await store.dispatch('employee/save', unref(form));
if (res) { if (res) {
handleClose(); handleClose();
} }

@ -25,10 +25,10 @@
const router = useRouter(); const router = useRouter();
const store = useStore(); const store = useStore();
const loading = ref(false); const loading = ref(false);
const code = computed(() => store.state.user.code); const code = computed(() => store.state.employee.code);
const list = computed(() => store.state.user.list); const list = computed(() => store.state.employee.list);
const total = computed(() => store.state.user.total); const total = computed(() => store.state.employee.total);
const opts = computed(() => store.state.user.opts); const opts = computed(() => store.state.employee.opts);
const state = reactive({ const state = reactive({
condition: { condition: {
username: null, username: null,
@ -37,7 +37,7 @@
watch( watch(
() => state.condition, () => state.condition,
(value) => { (value) => {
store.commit('user/setCondition', _.cloneDeep(value)); store.commit('employee/setCondition', _.cloneDeep(value));
}, },
{ immediate: true, deep: true } { immediate: true, deep: true }
); );
@ -54,7 +54,7 @@
}; };
const handleSearch = async () => { const handleSearch = async () => {
loading.value = true; loading.value = true;
await store.dispatch('user/search'); await store.dispatch('employee/search');
loading.value = false; loading.value = false;
}; };
const handleCreate = () => { const handleCreate = () => {
@ -65,7 +65,7 @@
}; };
const handleRemove = async (rows) => { const handleRemove = async (rows) => {
store.dispatch( store.dispatch(
'user/remove', 'employee/remove',
rows.map((item) => item.id) rows.map((item) => item.id)
); );
}; };

@ -21,7 +21,7 @@ export default (configEnv) => {
open: false, open: false,
proxy: { proxy: {
'/api': { '/api': {
target: 'http://192.168.10.251:4500/', target: 'http://192.168.10.2:4500/',
// target: 'https://gateway-test.mashibing.cn', // 测试地址 // target: 'https://gateway-test.mashibing.cn', // 测试地址
// target: 'https://gateway.mashibing.cn', // 预发地址 // target: 'https://gateway.mashibing.cn', // 预发地址
// target: 'https://gateway.mashibing.com', // 生产环境 // target: 'https://gateway.mashibing.com', // 生产环境

Loading…
Cancel
Save