refactor: 结构调整

fix/0524_ch
向文可 2 years ago
parent a41dce5af6
commit c4cbcc91d7

@ -18,6 +18,37 @@ export default [
icon: 'organization-chart',
},
},
{
path: 'employee',
name: 'EmployeeManagement',
component: () => import('@/views/permission/employee/index.vue'),
meta: {
title: '员工管理',
icon: 'Avatar',
},
children: [
{
path: 'create',
name: 'CreateEmployee',
component: () => import('@/views/permission/employee/form.vue'),
meta: {
title: '创建员工',
icon: 'Avatar',
hidden: true,
},
},
{
path: 'update/:id',
name: 'UpdateEmployee',
component: () => import('@/views/permission/employee/form.vue'),
meta: {
title: '编辑员工',
icon: 'Avatar',
hidden: true,
},
},
],
},
],
},
];

@ -9,37 +9,6 @@ export default [
layout: true,
},
children: [
{
path: 'employee',
name: 'EmployeeManagement',
component: () => import('@/views/system/employee/index.vue'),
meta: {
title: '员工管理',
icon: 'Avatar',
},
children: [
{
path: 'create',
name: 'CreateEmployee',
component: () => import('@/views/system/employee/form.vue'),
meta: {
title: '创建员工',
icon: 'Avatar',
hidden: true,
},
},
{
path: 'update/:id',
name: 'UpdateEmployee',
component: () => import('@/views/system/employee/form.vue'),
meta: {
title: '编辑员工',
icon: 'Avatar',
hidden: true,
},
},
],
},
{
path: 'customer',
name: 'CustomerManagement',

@ -0,0 +1,76 @@
import * as api from '@/api/permission/dept.js';
import { ElMessage, ElMessageBox } from '@/plugins/element-plus';
const state = () => ({
code: 'DeptEmployeeManagement',
condition: {},
list: [],
total: 0,
opts: {
init: false,
},
});
const getters = {};
const mutations = {
setCondition: (state, data) => (state.condition = data),
setList: (state, data) => (state.list = data),
setTotal: (state, data) => (state.total = data),
setOpts: (state, data) => (state.opts = data),
};
const actions = {
search: async ({ state, commit }) => {
let res = await api.searchEmployee(state.condition);
commit('setList', res || []);
if (!res) {
ElMessage.error('查询部门员工失败');
}
return res;
},
load: async ({ state, commit }) => {
commit('setOpts', {
init: true,
...state.opts,
});
},
detail: async (context, id) => {
let res = await api.detail(id);
if (!res) {
ElMessage.error('加载详情失败');
}
return res;
},
save: async ({ dispatch }, data) => {
let save = data.id ? api.update : api.create;
let res = await save(data);
if (res) {
ElMessage.success('保存成功');
dispatch('search');
} else {
ElMessage.error('保存失败');
}
return res;
},
remove: async ({ dispatch }, idList) => {
if (!idList.length) {
ElMessage.warning('请选择要删除的数据');
} else {
try {
await ElMessageBox.confirm('数据删除后无法恢复,确定要删除吗?', '危险操作');
let res = await api.remove(idList.join(','));
if (res) {
ElMessage.success('删除成功');
dispatch('search');
} else {
ElMessage.error('删除失败');
}
} catch (e) {
console.info('取消删除', e);
}
}
},
};
export default {
state,
getters,
mutations,
actions,
};

@ -14,9 +14,7 @@
</template>
<script setup lang="jsx">
import ElButton from '@/components/extra/ElButton.vue';
import ElSwitch from '@/components/extra/ElSwitch.vue';
const router = useRouter();
// const router = useRouter();
const store = useStore();
const loading = ref(false);
const code = computed(() => store.state.customerService.code);
@ -46,14 +44,14 @@
};
onActivated(handleSearch);
const handleHistory = async (row) => {
router.push({
name: 'ChatHistory',
params: {
id: row.id,
},
});
};
// const handleHistory = async (row) => {
// router.push({
// name: 'ChatHistory',
// params: {
// id: row.id,
// },
// });
// };
const config = reactive({
//
columns: [
@ -72,27 +70,20 @@
prop: 'waiterNickname',
minWidth: 160,
},
{
label: '是否启用',
slots: {
default: ({ row }) => <ElSwitch v-model={row.isEnable} />,
},
width: 120,
},
{
label: '操作',
fixed: 'right',
slots: {
default: ({ row }) => (
<div>
<ElButton type="text" onClick={() => handleHistory([row])}>
会话记录
</ElButton>
</div>
),
},
width: 120,
},
// {
// label: '',
// fixed: 'right',
// slots: {
// default: ({ row }) => (
// <div>
// <ElButton type="text" onClick={() => handleHistory([row])}>
//
// </ElButton>
// </div>
// ),
// },
// width: 120,
// },
],
});
</script>

@ -80,30 +80,60 @@
</div>
</div>
<div class="content">
<table-list
ref="refsTable"
v-loading="loading2"
:code="employeeCode"
:config="employeeConfig"
:data="employeeList"
:operation="['search']"
:total="employeeTotal"
@search="handleSearchEmployee"
>
<template #search>
<el-form inline :model="state.condition2">
<el-form-item label="姓名" prop="employeeName">
<el-input v-model="state.condition2.employeeName" />
</el-form-item>
<el-form-item label="花名" prop="userName">
<el-input v-model="state.condition2.userName" />
</el-form-item>
<el-form-item label="手机号" prop="phone">
<el-input v-model="state.condition2.phone" />
</el-form-item>
</el-form>
</template>
</table-list>
<el-tabs v-model="currentTab" type="border-card">
<el-tab-pane label="员工" name="employee">
<table-list
ref="refsTable"
v-loading="loading2"
:code="employeeCode"
:config="employeeConfig"
:data="employeeList"
:operation="['search']"
:total="employeeTotal"
@search="handleSearchEmployee"
>
<template #search>
<el-form inline :model="state.condition2">
<el-form-item label="姓名" prop="employeeName">
<el-input v-model="state.condition2.employeeName" />
</el-form-item>
<el-form-item label="花名" prop="userName">
<el-input v-model="state.condition2.userName" />
</el-form-item>
<el-form-item label="手机号" prop="phone">
<el-input v-model="state.condition2.phone" />
</el-form-item>
</el-form>
</template>
</table-list>
</el-tab-pane>
<el-tab-pane label="角色" name="role">
<table-list
ref="refsTable2"
v-loading="loading2"
:code="employeeCode"
:config="employeeConfig"
:data="employeeList"
:operation="['search']"
:total="employeeTotal"
@search="handleSearchEmployee"
>
<template #search>
<el-form inline :model="state.condition2">
<el-form-item label="姓名" prop="employeeName">
<el-input v-model="state.condition2.employeeName" />
</el-form-item>
<el-form-item label="花名" prop="userName">
<el-input v-model="state.condition2.userName" />
</el-form-item>
<el-form-item label="手机号" prop="phone">
<el-input v-model="state.condition2.phone" />
</el-form-item>
</el-form>
</template>
</table-list>
</el-tab-pane>
</el-tabs>
</div>
</div>
</template>
@ -140,16 +170,18 @@
{ immediate: true, deep: true }
);
const currentTab = ref('employee');
/* 查询员工 */
const loading2 = ref(false);
const refsTable = ref(null);
const employeeCode = computed(() => store.state.dept.employeeCode);
const employeeList = computed(() => _.cloneDeep(store.state.dept.employeeList));
const employeeTotal = computed(() => store.state.dept.employeeTotal);
const employeeCode = computed(() => store.state.deptEmployee.employeeCode);
const employeeList = computed(() => _.cloneDeep(store.state.deptEmployee.employeeList));
const employeeTotal = computed(() => store.state.deptEmployee.employeeTotal);
const handleSearchEmployee = async () => {
if (state.condition2.departmentId) {
loading2.value = true;
await store.dispatch('dept/searchEmployee');
await store.dispatch('deptEmployee/search');
loading2.value = false;
} else {
proxy.$message.error('请先选择部门');
@ -158,8 +190,8 @@
watch(
() => state.condition2,
(value) => {
let search = value?.departmentId && value?.departmentId !== store.state.dept.condition2.departmentId;
store.commit('dept/setCondition2', _.cloneDeep(value));
let search = value?.departmentId && value?.departmentId !== store.state.deptEmployee.condition.departmentId;
store.commit('deptEmployee/setCondition', _.cloneDeep(value));
if (search) {
handleSearchEmployee();
}
@ -329,5 +361,18 @@
}
}
}
.content {
.el-tabs {
height: 100%;
display: flex;
flex-direction: column;
:deep(.el-tabs__content) {
height: 100%;
.el-tab-pane {
height: 100%;
}
}
}
}
}
</style>

@ -97,10 +97,20 @@
minWidth: 160,
},
{
label: '手机',
label: '手机',
prop: 'phone',
width: 160,
},
{
label: '所在组织',
prop: 'depts',
minWidth: 160,
},
{
label: '拥有角色',
prop: 'roles',
minWidth: 160,
},
{
label: '邮箱',
prop: 'email',
Loading…
Cancel
Save