部门管理新增分包单位选项

This commit is contained in:
Teo
2025-07-18 19:22:36 +08:00
parent d03efb8d6f
commit 5d76471571
17 changed files with 141 additions and 89 deletions

View File

@ -47,6 +47,11 @@
>
<el-table-column prop="deptName" label="部门名称" width="260"></el-table-column>
<el-table-column prop="deptCategory" align="center" label="类别编码" width="200"></el-table-column>
<el-table-column prop="deptType" align="center" label="部门类型" width="200">
<template #default="scope">
<dict-tag :options="sys_dept_type" :value="scope.row.deptType" />
</template>
</el-table-column>
<el-table-column prop="orderNum" align="center" label="排序" width="200"></el-table-column>
<el-table-column prop="status" align="center" label="状态" width="100">
<template #default="scope">
@ -63,7 +68,7 @@
<el-tooltip content="修改" placement="top">
<el-button v-hasPermi="['system:dept:edit']" link type="primary" icon="Edit" @click="handleUpdate(scope.row)" />
</el-tooltip>
<el-tooltip content="新增" placement="top" v-if="scope.row.isSubset != '0'">
<el-tooltip content="新增" placement="top" v-if="scope.row.deptType != '2' && scope.row.deptType != '4'">
<el-button v-hasPermi="['system:dept:add']" link type="primary" icon="Plus" @click="handleAdd(scope.row)" />
</el-tooltip>
<el-tooltip content="删除" placement="top">
@ -129,20 +134,26 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否拥有子级">
<el-radio-group v-model="form.isSubset" @change="handleChangeisSubset">
<el-radio value="1"></el-radio>
<el-radio value="0"></el-radio>
</el-radio-group>
<el-form-item label="部门类型">
<el-select v-model="form.deptType" placeholder="请选择部门类型" @change="changeProject">
<el-option v-for="dict in sys_dept_type" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12" v-if="form.isSubset == '0'">
<el-col :span="12" v-if="form.deptType == '3'">
<el-form-item label="所属项目" prop="projectId">
<el-select v-model="form.projectId" placeholder="请选择所属项目">
<el-option v-for="item in projectList" :key="item.id" :label="item.projectName" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12" v-if="form.deptType == '4'">
<el-form-item label="分包单位" prop="contractorId">
<el-select v-model="form.contractorId" placeholder="请选择分包单位">
<el-option v-for="item in contractorList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
@ -156,7 +167,7 @@
</template>
<script setup name="Dept" lang="ts">
import { listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild, getDeptList } from '@/api/system/dept';
import { listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild, getDeptList, optionProjectSelect } from '@/api/system/dept';
import { DeptForm, DeptQuery, DeptVO } from '@/api/system/dept/types';
import { UserVO } from '@/api/system/user/types';
import { listUserByDeptId } from '@/api/system/user';
@ -168,7 +179,7 @@ interface DeptOptionsType {
}
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { sys_normal_disable } = toRefs<any>(proxy?.useDict('sys_normal_disable'));
const { sys_normal_disable, sys_dept_type } = toRefs<any>(proxy?.useDict('sys_normal_disable', 'sys_dept_type'));
const deptList = ref<DeptVO[]>([]);
const loading = ref(true);
@ -182,6 +193,8 @@ const dialog = reactive<DialogOption>({
title: ''
});
const projectList = ref([]);
const contractorList = ref([]);
const deptTableRef = ref<ElTableInstance>();
const queryFormRef = ref<ElFormInstance>();
const deptFormRef = ref<ElFormInstance>();
@ -196,8 +209,10 @@ const initFormData: DeptForm = {
phone: undefined,
email: undefined,
isShow: undefined,
isSubset: undefined,
deptType: undefined,
projectId: undefined,
contractorId: undefined,
rowProjectId: undefined,
status: '0'
};
const initData: PageData<DeptForm, DeptQuery> = {
@ -209,7 +224,7 @@ const initData: PageData<DeptForm, DeptQuery> = {
deptCategory: undefined,
status: undefined,
isShow: undefined,
isSubset: undefined
deptType: undefined
},
rules: {
parentId: [{ required: true, message: '上级部门不能为空', trigger: 'blur' }],
@ -251,6 +266,7 @@ const cancel = () => {
const reset = () => {
form.value = { ...initFormData };
projectList.value = [];
contractorList.value = [];
deptFormRef.value?.resetFields();
};
@ -265,13 +281,6 @@ const resetQuery = () => {
handleQuery();
};
const handleChangeisSubset = async (value: string) => {
if (value == '0' && (!projectList.value || !projectList.value.length)) {
const res = await getDeptList();
projectList.value = res.data;
}
};
/** 展开/折叠操作 */
const handleToggleExpandAll = () => {
isExpandAll.value = !isExpandAll.value;
@ -288,6 +297,7 @@ const toggleExpandAll = (data: DeptVO[], status: boolean) => {
/** 新增按钮操作 */
const handleAdd = async (row?: DeptVO) => {
reset();
form.value.rowProjectId = row?.projectId;
const res = await listDept();
const data = proxy?.handleTree<DeptOptionsType>(res.data, 'deptId');
if (data) {
@ -303,6 +313,7 @@ const handleAdd = async (row?: DeptVO) => {
/** 修改按钮操作 */
const handleUpdate = async (row: DeptVO) => {
reset();
form.value.rowProjectId = row?.projectId;
//查询当前部门所有用户
getDeptAllUser(row.deptId);
const res = await getDept(row.deptId);
@ -324,6 +335,17 @@ const handleUpdate = async (row: DeptVO) => {
dialog.visible = true;
dialog.title = '修改部门';
};
const changeProject = async (val: any) => {
if (val == '3' && (!projectList.value || !projectList.value.length)) {
const res = await getDeptList();
projectList.value = res.data;
} else if (val == '4' && (!contractorList.value || !contractorList.value.length)) {
const res = await optionProjectSelect(form.value.rowProjectId);
contractorList.value = res;
}
};
/** 提交按钮 */
const submitForm = () => {
deptFormRef.value?.validate(async (valid: boolean) => {