feat: 员工管理

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

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

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

@ -62,16 +62,16 @@
employeeName: [{ 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) {
store.dispatch('user/load');
store.dispatch('employee/load');
}
/* 数据 */
const handleLoad = async () => {
if (route.params.id) {
const id = +route.params.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);
}
}
@ -85,7 +85,7 @@
let data = { ...unref(form) };
data.voucherClueUrls = data.voucherClueUrls || [];
data.voucherClueUrl = data.voucherClueUrls.join(',');
let res = await store.dispatch('user/save', data);
let res = await store.dispatch('employee/save', data);
if (res) {
if (!data.id) {
unref(refsForm).resetFields();

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

@ -65,9 +65,9 @@
avatar: [{ 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) {
store.dispatch('user/load');
store.dispatch('employee/load');
}
/* 详情 */
watch(
@ -76,7 +76,7 @@
// watch
if (['UpdateUser', 'UserDetail'].includes(value[0]) && value[1]) {
loading.value = true;
let res = await store.dispatch('user/detail', +value[1]);
let res = await store.dispatch('employee/detail', +value[1]);
if (res) {
Object.assign(form, res);
}
@ -90,7 +90,7 @@
submitting.value = true;
try {
await unref(refsForm).validate();
let res = await store.dispatch('user/save', unref(form));
let res = await store.dispatch('employee/save', unref(form));
if (res) {
handleClose();
}

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

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

Loading…
Cancel
Save