fix-0609-xwk
向文可 3 years ago
parent 63f7926a7c
commit 4f59674e77

@ -32,8 +32,8 @@ const mutations = {
setOpts: (state, data) => (state.opts = data), setOpts: (state, data) => (state.opts = data),
}; };
const actions = { const actions = {
search: async ({ state, commit }) => { search: async ({ state, commit }, condition) => {
let res = await api.search(state.condition); let res = await api.search(condition || state.condition);
commit('setList', res || []); commit('setList', res || []);
if (!res) { if (!res) {
ElMessage.error('查询失败'); ElMessage.error('查询失败');

@ -111,52 +111,7 @@
</el-form> </el-form>
</template> </template>
</table-list> </table-list>
<el-dialog v-model="transferState.transferVisible" title="员工调动"> <employee-transfer ref="refsTransfer" @save="handleSearchEmployee" />
<el-form
ref="refsForm2"
v-loading="loading5"
label-width="130px"
:model="transferState.transferForm"
:rules="transferState.transferRules"
>
<el-form-item label="原所在组织">
<el-cascader
v-model="state.condition2.departmentId"
disabled
:options="list"
:props="{
label: 'name',
value: 'id',
trigger: 'hover',
checkStrictly: true,
emitPath: false,
children: 'childDepartment',
}"
/>
</el-form-item>
<el-form-item label="调动到目标组织" prop="departmentId">
<el-cascader
v-model="transferState.transferForm.departmentId"
:options="list"
:props="{
label: 'name',
value: 'id',
trigger: 'hover',
checkStrictly: true,
emitPath: false,
children: 'childDepartment',
}"
/>
</el-form-item>
<el-form-item label="选择角色权限" prop="handType">
<el-radio-group v-model="transferState.transferForm.handType" :opts="opts.handType" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="transferState.transferVisible = false">取消</el-button>
<el-button :loading="loading5" type="primary" @click="handleSaveTransfer"></el-button>
</template>
</el-dialog>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="角色" name="role"> <el-tab-pane label="角色" name="role">
<template v-if="state.condition2.departmentId"> <template v-if="state.condition2.departmentId">
@ -228,6 +183,7 @@
<script setup lang="jsx"> <script setup lang="jsx">
import ElButton from '@/components/extra/ElButton.vue'; import ElButton from '@/components/extra/ElButton.vue';
import ElSwitch from '@/components/extra/ElSwitch.vue'; import ElSwitch from '@/components/extra/ElSwitch.vue';
import EmployeeTransfer from '../employee/transfer.vue';
const router = useRouter(); const router = useRouter();
const store = useStore(); const store = useStore();
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
@ -297,35 +253,11 @@
}, },
}); });
}; };
const transferState = reactive({ const refsTransfer = ref(null);
transferVisible: false,
transferForm: {
employeeId: null,
departmentId: null,
handType: null,
},
transferRules: {
departmentId: [{ required: true, message: '调动到目标组织不能为空' }],
handType: [{ required: true, message: '选择角色权限不能为空' }],
},
});
const refsForm2 = ref(null);
const loading5 = ref(false);
const handleTransferEmployee = (row) => { const handleTransferEmployee = (row) => {
transferState.transferVisible = true; unref(refsTransfer).show(row);
transferState.transferForm = { employeeId: row.id, departmentI: null, handType: 1 };
};
const handleSaveTransfer = async () => {
try {
await proxy.$validate(refsForm2);
loading5.value = true;
await store.dispatch('deptEmployee/transfer', transferState.transferForm);
loading5.value = false;
transferState.transferVisible = false;
} catch (e) {
console.log('取消调动', e);
}
}; };
let employeeConfig = reactive({ let employeeConfig = reactive({
page: false, page: false,
columns: [ columns: [

@ -191,7 +191,7 @@
loading2.value = false; loading2.value = false;
}; };
const handleDelRole = (id) => { const handleDelRole = (id) => {
form.roleIds.splice(form.roleIds.findIndex(id), 1); form.roleIds.splice(form.roleIds.indexOf(id), 1);
permissionList.splice( permissionList.splice(
permissionList.findIndex((item) => item.id === id), permissionList.findIndex((item) => item.id === id),
1 1

@ -1,42 +1,45 @@
<template> <template>
<table-list <div class="list-container">
v-loading="loading" <table-list
:code="code" v-loading="loading"
:config="config" :code="code"
:data="list" :config="config"
:operation="['create', 'search', 'remove']" :data="list"
:reset="handleReset" :operation="['create', 'search', 'remove']"
title="员工" :reset="handleReset"
:total="total" title="员工"
@create="handleCreate" :total="total"
@remove="handleRemove" @create="handleCreate"
@search="handleSearch" @remove="handleRemove"
> @search="handleSearch"
<template #search> >
<el-form inline> <template #search>
<el-form-item label="姓名/花名" prop="userName"> <el-form inline>
<el-input v-model="state.condition.userName" /> <el-form-item label="姓名/花名" prop="userName">
</el-form-item> <el-input v-model="state.condition.userName" />
<el-form-item label="手机号" prop="phone"> </el-form-item>
<el-input v-model="state.condition.phone" /> <el-form-item label="手机号" prop="phone">
</el-form-item> <el-input v-model="state.condition.phone" />
<el-form-item label="所在组织" prop="departmentId"> </el-form-item>
<el-cascader <el-form-item label="所在组织" prop="departmentId">
v-model="state.condition.departmentId" <el-cascader
:options="opts.dept" v-model="state.condition.departmentId"
:props="{ :options="opts.dept"
label: 'name', :props="{
value: 'id', label: 'name',
trigger: 'hover', value: 'id',
checkStrictly: true, trigger: 'hover',
emitPath: false, checkStrictly: true,
children: 'childDepartment', emitPath: false,
}" children: 'childDepartment',
/> }"
</el-form-item> />
</el-form> </el-form-item>
</template> </el-form>
</table-list> </template>
</table-list>
<employee-transfer ref="refsTransfer" @save="handleSearch" />
</div>
</template> </template>
<script setup lang="jsx"> <script setup lang="jsx">
@ -44,6 +47,7 @@
import ElSwitch from '@/components/extra/ElSwitch.vue'; import ElSwitch from '@/components/extra/ElSwitch.vue';
import { ElTag } from 'element-plus/es/components/tag/index'; import { ElTag } from 'element-plus/es/components/tag/index';
import 'element-plus/es/components/tag/style/css'; import 'element-plus/es/components/tag/style/css';
import EmployeeTransfer from './transfer.vue';
const router = useRouter(); const router = useRouter();
const store = useStore(); const store = useStore();
const loading = ref(false); const loading = ref(false);
@ -102,6 +106,12 @@
await store.dispatch('employee/enable', { id: row.id, isEnable: !row.isEnable }); await store.dispatch('employee/enable', { id: row.id, isEnable: !row.isEnable });
loading.value = false; loading.value = false;
}; };
const refsTransfer = ref(null);
const handleTransfer = (row) => {
unref(refsTransfer).show(row);
};
const config = reactive({ const config = reactive({
// //
columns: [ columns: [
@ -180,7 +190,7 @@
{ {
label: '操作', label: '操作',
fixed: 'right', fixed: 'right',
width: 180, width: 230,
slots: { slots: {
default: ({ row }) => ( default: ({ row }) => (
<div> <div>
@ -190,6 +200,9 @@
<ElButton type="text" onClick={() => handleRemove([row])}> <ElButton type="text" onClick={() => handleRemove([row])}>
删除 删除
</ElButton> </ElButton>
<ElButton type="text" onClick={() => handleTransfer(row)}>
调动
</ElButton>
<ElButton type="text" onClick={() => handleResetPassword(row)}> <ElButton type="text" onClick={() => handleResetPassword(row)}>
重置密码 重置密码
</ElButton> </ElButton>

@ -0,0 +1,94 @@
<template>
<el-dialog v-model="state.visible" title="员工调动">
<el-form ref="refsForm" v-loading="state.loading" label-width="130px" :model="state.form" :rules="state.rules">
<el-form-item label="原所在组织">
{{ state.form.oldDept }}
</el-form-item>
<el-form-item label="调动到目标组织" prop="departmentId">
<el-cascader
v-model="state.form.departmentId"
:options="list"
:props="{
label: 'name',
value: 'id',
trigger: 'hover',
checkStrictly: true,
emitPath: false,
children: 'childDepartment',
}"
/>
</el-form-item>
<el-form-item label="选择角色权限" prop="handType">
<el-radio-group v-model="state.form.handType" :opts="state.opts.handType" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="state.visible = false">取消</el-button>
<el-button :loading="state.loading" type="primary" @click="handleSave"></el-button>
</template>
</el-dialog>
</template>
<script setup>
const store = useStore();
const emits = defineEmits(['save']);
const { proxy } = getCurrentInstance();
const list = computed(() => store.state.dept.list);
const state = reactive({
visible: false,
loading: false,
form: {
employeeId: null,
oldDept: null,
departmentId: null,
handType: null,
},
rules: {
departmentId: [{ required: true, message: '调动到目标组织不能为空' }],
handType: [{ required: true, message: '选择角色权限不能为空' }],
},
opts: {
handType: [
{
label: '删除原组织权限并调动',
value: 1,
},
{
label: '删除所有权限并调动',
value: 2,
},
{
label: '保留所有权限并调动',
value: 3,
},
],
},
});
const refsForm = ref(null);
const handleShow = (row) => {
state.visible = true;
state.form = { employeeId: row.id, oldDept: row.departmentNameChain, departmentId: null, handType: 1 };
store.dispatch('dept/search', { hiddenDisable: true });
};
const handleClose = () => {
state.visible = false;
};
const handleSave = async () => {
try {
await proxy.$validate(refsForm);
state.loading = true;
await store.dispatch('deptEmployee/transfer', state.form);
state.loading = false;
state.visible = false;
emits('save');
} catch (e) {
console.log('取消调动', e);
}
};
defineExpose({
show: handleShow,
close: handleClose,
});
</script>
<style lang="less" scoped></style>

@ -131,7 +131,7 @@
<el-tree <el-tree
ref="refsTree3" ref="refsTree3"
:data="opts.dept" :data="opts.dept"
:default-checked-keys="formState.form.departmentList.map((item) => item.id)" :default-checked-keys="formState.form.departmentList"
default-expand-all default-expand-all
:expand-on-click-node="false" :expand-on-click-node="false"
highlight-current highlight-current
@ -227,7 +227,7 @@
isEnable: true, isEnable: true,
menuIds: [], menuIds: [],
permissionIds: [], permissionIds: [],
departmentList: [2], departmentList: [],
}, },
rules1: { rules1: {
systemId: [{ required: true, message: '所属系统不能为空' }], systemId: [{ required: true, message: '所属系统不能为空' }],
@ -277,8 +277,9 @@
}; };
const refsTree3 = ref(null); const refsTree3 = ref(null);
const handleCheckDept = async (data, checked, childChecked) => { const handleCheckDept = async (data, checked, childChecked) => {
formState.submitting = true;
if (checked || childChecked) { if (checked || childChecked) {
formState.form.departmentList.push(data); formState.form.departmentList.push(data.id);
} else { } else {
formState.form.departmentList.splice(formState.form.departmentList.indexOf(data.id), 1); formState.form.departmentList.splice(formState.form.departmentList.indexOf(data.id), 1);
} }
@ -290,15 +291,29 @@
roleIds: [formState.form.id], roleIds: [formState.form.id],
} }
: { departmentId: data.id, isDeleteDepartmentOfEmployeeRole: true, roleId: formState.form.id }; : { departmentId: data.id, isDeleteDepartmentOfEmployeeRole: true, roleId: formState.form.id };
store.dispatch('role/updateDept', params); await store.dispatch('role/updateDept', params);
nextTick(() => { nextTick(() => {
try { try {
unref(refsForm3).validate(); unref(refsForm3).validate();
} catch (e) { } catch (e) {
console.info(e); console.info(e);
} }
unref(refsTree3).setCheckedKeys(formState.form.departmentList);
formState.submitting = false;
}); });
}; };
watch(
() => formState.currentTab,
(value) => {
if (value === '3') {
nextTick(() => {
if (!formState.form.departmentList.length) {
handleCheckDept({ id: 2 }, true, false);
}
});
}
}
);
const handleDetail = async () => { const handleDetail = async () => {
formState.submitting = true; formState.submitting = true;
if (formState.currentTab === '1' && formState.form.id) { if (formState.currentTab === '1' && formState.form.id) {
@ -330,16 +345,18 @@
Object.assign( Object.assign(
formState.form, formState.form,
_.cloneDeep( _.cloneDeep(
row || { row
id: null, ? { ...row, departmentList: row.departmentList.map((item) => item.id) }
systemId: null, : {
roleName: null, id: null,
roleDesc: null, systemId: null,
isEnable: true, roleName: null,
menuIds: [], roleDesc: null,
permissionIds: [], isEnable: true,
departmentList: [2], menuIds: [],
} permissionIds: [],
departmentList: [],
}
) )
); );
}; };

@ -237,7 +237,7 @@
router.push({ router.push({
name: 'CustomerManagement', name: 'CustomerManagement',
query: { query: {
account: state.form.userPhone, phone: state.form.userPhone,
}, },
}); });
}; };

@ -12,8 +12,8 @@
> >
<template #search> <template #search>
<el-form inline> <el-form inline>
<el-form-item label="账号" prop="account"> <el-form-item label="手机号" prop="phone">
<el-input v-model="state.condition.account" /> <el-input v-model="state.condition.phone" />
</el-form-item> </el-form-item>
<el-form-item label="昵称" prop="nickname"> <el-form-item label="昵称" prop="nickname">
<el-input v-model="state.condition.nickname" /> <el-input v-model="state.condition.nickname" />
@ -47,7 +47,7 @@
} }
const state = reactive({ const state = reactive({
condition: { condition: {
account: null, phone: null,
nickname: null, nickname: null,
dateRange: [], dateRange: [],
}, },
@ -61,14 +61,14 @@
); );
const handleReset = () => { const handleReset = () => {
state.condition = { state.condition = {
account: null, phone: null,
nickname: null, nickname: null,
dateRange: [], dateRange: [],
}; };
}; };
const handleSearch = async () => { const handleSearch = async () => {
if (route.query.account && !state.condition.account) { if (route.query.phone && !state.condition.phone) {
state.condition.account = route.query.account; state.condition.phone = route.query.phone;
store.commit('customer/setCondition', _.cloneDeep(state.condition)); store.commit('customer/setCondition', _.cloneDeep(state.condition));
} }
loading.value = true; loading.value = true;

@ -157,7 +157,7 @@
}, },
{ {
label: '发布人员', label: '发布人员',
prop: 'createUser', prop: 'createUserName',
width: 160, width: 160,
}, },
{ {

Loading…
Cancel
Save