This commit is contained in:
2025-08-28 23:35:13 +08:00
11 changed files with 140 additions and 129 deletions

View File

@ -12,7 +12,7 @@ VITE_APP_BASE_API = 'http://192.168.110.180:8899'
# 罗成 # 罗成
# VITE_APP_BASE_API = 'http://192.168.110.213:8899' # VITE_APP_BASE_API = 'http://192.168.110.213:8899'
# 朱银 # 朱银
# VITE_APP_BASE_API = 'http://192.168.110.180:8899' # VITE_APP_BASE_API = 'http://192.168.110.149:8899'
#曾涛 #曾涛
# VITE_APP_BASE_API = 'http://192.168.110.171:8899' # VITE_APP_BASE_API = 'http://192.168.110.171:8899'

View File

@ -54,6 +54,14 @@ export interface ContractorForm extends BaseEntity {
* 主键id * 主键id
*/ */
id?: string | number; id?: string | number;
/**
* 供应商id
*/
supplierId?: string | number;
/**
* 供应商
*/
supplier?: string;
/** /**
* 主键id * 主键id

View File

@ -8,7 +8,7 @@ import { SupplierInputVO, SupplierInputForm, SupplierInputQuery } from '@/api/su
* @returns {*} * @returns {*}
*/ */
export const listSupplierInput = (query?: SupplierInputQuery): AxiosPromise<SupplierInputVO[]> => { export const listSupplierInput = (query?: any): AxiosPromise<SupplierInputVO[]> => {
return request({ return request({
url: '/supplierInput/supplierInput/list', url: '/supplierInput/supplierInput/list',
method: 'get', method: 'get',

View File

@ -56,7 +56,13 @@ const handleSelect = async (projectId: string) => {
text: '项目切换中...', text: '项目切换中...',
background: 'rgba(0, 0, 0, 0.7)' background: 'rgba(0, 0, 0, 0.7)'
}); });
setTimeout(() => {
if (loadingInstance && loadingInstance.visible) {
loadingInstance.close();
}
}, 3000);
await changeProject(projectId); await changeProject(projectId);
console.log('切换项目', selectedProject);
// 更新项目 & 权限 // 更新项目 & 权限
userStore.setSelectedProject(selectedProject); userStore.setSelectedProject(selectedProject);

View File

@ -10,6 +10,8 @@ import useUserStore from '@/store/modules/user';
import useSettingsStore from '@/store/modules/settings'; import useSettingsStore from '@/store/modules/settings';
import usePermissionStore from '@/store/modules/permission'; import usePermissionStore from '@/store/modules/permission';
let isFirst = false;
NProgress.configure({ showSpinner: false }); NProgress.configure({ showSpinner: false });
const whiteList = ['/login', '/register', '/social-callback', '/register*', '/register/*', '/materials/purchaseDoc/uploadCode']; const whiteList = ['/login', '/register', '/social-callback', '/register*', '/register/*', '/materials/purchaseDoc/uploadCode'];
@ -17,56 +19,64 @@ const isWhiteList = (path: string) => {
return whiteList.some((pattern) => isPathMatch(pattern, path)); return whiteList.some((pattern) => isPathMatch(pattern, path));
}; };
router.beforeEach(async (to, from, next) => { router.beforeEach(async (to, from) => {
NProgress.start(); NProgress.start();
if (to.path == '/indexEquipment' || to.path == '/materials/purchaseDoc/uploadCode' || to.path == '/codeDetail') {
next(); // 特殊页面放行
} else if (getToken()) { if (['/indexEquipment', '/materials/purchaseDoc/uploadCode', '/codeDetail'].includes(to.path)) {
to.meta.title && useSettingsStore().setTitle(to.meta.title); return true;
/* has token*/ }
// 已登录
if (getToken()) {
if (to.meta.title) useSettingsStore().setTitle(to.meta.title);
if (to.path === '/login') { if (to.path === '/login') {
next({ path: '/' });
NProgress.done(); NProgress.done();
} else if (isWhiteList(to.path)) { return { path: '/' };
next(); }
} else {
if (useUserStore().roles.length === 0 || $cache.local.getJSON('isCheckRole')) { if (isWhiteList(to.path)) {
return true;
}
if ((!isFirst && useUserStore().roles.length === 0) || $cache.local.getJSON('isCheckRole') === 'true') {
isFirst = true;
isRelogin.show = true; isRelogin.show = true;
// 判断当前用户是否已拉取完user_info信息
const [err] = await tos(useUserStore().getInfo()); const [err] = await tos(useUserStore().getInfo());
if (err) { if (err) {
await useUserStore().logout(); await useUserStore().logout();
ElMessage.error(err); ElMessage.error(err);
next({ path: '/' }); NProgress.done();
} else { return { path: '/' };
}
isRelogin.show = false; isRelogin.show = false;
const accessRoutes = await usePermissionStore().generateRoutes(); const accessRoutes = await usePermissionStore().generateRoutes();
// 根据roles权限生成可访问的路由表
accessRoutes.forEach((route) => { accessRoutes.forEach((route) => {
if (!isHttp(route.path)) { if (!isHttp(route.path)) router.addRoute(route);
router.addRoute(route); // 动态添加可访问路由表
}
}); });
$cache.local.remove('isCheckRole'); $cache.local.remove('isCheckRole');
// @ts-expect-error hack方法 确保addRoutes已完成 // 确保路由已添加后再跳转
next({ path: to.path, replace: true, params: to.params, query: to.query, hash: to.hash, name: to.name as string }); // hack方法 确保addRoutes已完成 return { ...to, replace: true };
} }
return true;
} else { } else {
next(); isFirst = false;
} }
}
} else { // 未登录
// 没有token
if (isWhiteList(to.path)) { if (isWhiteList(to.path)) {
// 在免登录白名单,直接进入 return true;
next(); }
} else {
const redirect = encodeURIComponent(to.fullPath || '/'); const redirect = encodeURIComponent(to.fullPath || '/');
next(`/login?redirect=${redirect}`); // 否则全部重定向到登录页
NProgress.done(); NProgress.done();
} return { path: `/login?redirect=${redirect}` };
}
}); });
router.afterEach(() => { router.afterEach(() => {

View File

@ -28,7 +28,6 @@ const getSelectedProjectFromStorage = () => {
const getProjectTeamListFromStorage = () => { const getProjectTeamListFromStorage = () => {
const stored = $cache.local.getJSON('ProjectTeamList'); const stored = $cache.local.getJSON('ProjectTeamList');
console.log('获取缓存的项目班组列表:', stored); console.log('获取缓存的项目班组列表:', stored);
return stored ? stored : null; return stored ? stored : null;
}; };
@ -75,9 +74,7 @@ export const useUserStore = defineStore('user', () => {
id: p.projectId, id: p.projectId,
name: p.projectName || '未知项目' name: p.projectName || '未知项目'
})); }));
setProjects(projectList); setProjects(projectList);
// 如果有缓存的选中项目,且该项目在当前项目列表中存在,则使用缓存的项目 // 如果有缓存的选中项目,且该项目在当前项目列表中存在,则使用缓存的项目
const storedProject = getSelectedProjectFromStorage(); const storedProject = getSelectedProjectFromStorage();
if (storedProject && projectList.some((p) => p.id === storedProject.id)) { if (storedProject && projectList.some((p) => p.id === storedProject.id)) {
@ -88,16 +85,14 @@ export const useUserStore = defineStore('user', () => {
} }
} }
const [err, res] = await to(getUserInfo()); const [err, res] = await to(getUserInfo());
if (res) { if (res) {
const data = res.data; const data = res.data;
const user = data.user; const user = data.user;
const profile = user.avatar == '' || user.avatar == null ? defAva : user.avatar; const profile = user.avatar == '' || user.avatar == null ? defAva : user.avatar;
if (data.roles && data.roles.length > 0) { if (data.roles && data.roles.length > 0) {
setRoles();
permissionList.value = data.permissions; permissionList.value = data.permissions;
roleList.value = data.roles; roleList.value = data.roles;
setRoles();
} else { } else {
roles.value = ['ROLE_DEFAULT']; roles.value = ['ROLE_DEFAULT'];
} }
@ -112,19 +107,16 @@ export const useUserStore = defineStore('user', () => {
} }
return Promise.reject(err); return Promise.reject(err);
}; };
const setInfo = async () => { const setInfo = async () => {
const [err, res] = await to(getUserInfo()); const [err, res] = await to(getUserInfo());
if (res) { if (res) {
const data = res.data; const data = res.data;
const user = data.user; const user = data.user;
const profile = user.avatar == '' || user.avatar == null ? defAva : user.avatar; const profile = user.avatar == '' || user.avatar == null ? defAva : user.avatar;
if (data.roles && data.roles.length > 0) { if (data.roles && data.roles.length > 0) {
setRoles();
permissionList.value = data.permissions; permissionList.value = data.permissions;
roleList.value = data.roles; roleList.value = data.roles;
setRoles();
} else { } else {
roles.value = ['ROLE_DEFAULT']; roles.value = ['ROLE_DEFAULT'];
} }

View File

@ -133,8 +133,8 @@
></el-col> ></el-col>
<el-col :span="12" :offset="0" <el-col :span="12" :offset="0"
><el-form-item label="供应商" prop="supplier"> ><el-form-item label="供应商" prop="supplier">
<el-select v-model="form.supplier" value-key="id" placeholder="请选择供应商" clearable filterable @change=""> <el-select v-model="form.supplierId" value-key="id" placeholder="请选择供应商" clearable filterable @change="">
<el-option v-for="item in supplierOptions" :key="item.id" :label="item.name" :value="item.name"> </el-option> <el-option v-for="item in supplierOptions" :key="item.id" :label="item.supplierName" :value="item.id"> </el-option>
</el-select> </el-form-item </el-select> </el-form-item
></el-col> ></el-col>
<el-col :span="12" :offset="0" <el-col :span="12" :offset="0"
@ -268,6 +268,7 @@ import { useUserStoreHook } from '@/store/modules/user';
import { getToken } from '@/utils/auth'; import { getToken } from '@/utils/auth';
import logisticsDetail from './comm/logisticsDetail.vue'; import logisticsDetail from './comm/logisticsDetail.vue';
import { FormRules } from 'element-plus'; import { FormRules } from 'element-plus';
import { listSupplierInput } from '@/api/supplierInput/supplierInput';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const route = useRoute(); const route = useRoute();
const router = useRouter(); const router = useRouter();
@ -307,6 +308,8 @@ const initFormData: any = {
docCode: undefined, docCode: undefined,
supplier: undefined, supplier: undefined,
reason: undefined, reason: undefined,
supplierId: undefined,
name: undefined, name: undefined,
arrivalDate: undefined, arrivalDate: undefined,
designDirectorTel: undefined, designDirectorTel: undefined,
@ -479,6 +482,7 @@ const submitForm = () => {
form.value.associationList = form.value.planId?.map((item: any) => ({ form.value.associationList = form.value.planId?.map((item: any) => ({
planId: item planId: item
})); }));
form.value.supplier = supplierOptions.value.find((item) => item.id == form.value.supplierId)?.supplierName;
if (form.value.id) { if (form.value.id) {
await updatePurchaseDoc(form.value).finally(() => (buttonLoading.value = false)); await updatePurchaseDoc(form.value).finally(() => (buttonLoading.value = false));
@ -514,10 +518,10 @@ const getBatchList = async () => {
}; };
const getSupplierList = async () => { const getSupplierList = async () => {
const res = await listContractor({ const res = await listSupplierInput({
projectId: currentProject.value?.id, projectId: currentProject.value?.id,
pageNum: 1, pageNum: 1,
contractorType: 4, state: 'finish',
pageSize: 10000 pageSize: 10000
}); });
supplierOptions.value = res.rows; supplierOptions.value = res.rows;

View File

@ -81,6 +81,11 @@
<el-form-item label="公司名称" prop="name"> <el-form-item label="公司名称" prop="name">
<el-input v-model="form.name" placeholder="请输入公司名称" /> <el-input v-model="form.name" placeholder="请输入公司名称" />
</el-form-item> </el-form-item>
<el-form-item label="供应商" prop="supplier">
<el-select v-model="form.supplierId" value-key="id" placeholder="请选择供应商" clearable filterable @change="">
<el-option v-for="item in supplierOptions" :key="item.id" :label="item.supplierName" :value="item.id"> </el-option>
</el-select>
</el-form-item>
<el-form-item label="负责人" prop="principal"> <el-form-item label="负责人" prop="principal">
<el-input v-model="form.principal" placeholder="请输入负责人" /> <el-input v-model="form.principal" placeholder="请输入负责人" />
</el-form-item> </el-form-item>
@ -121,6 +126,7 @@ import { ContractorForm, ContractorQuery, ContractorVO } from '@/api/project/con
import ContractorFileDialog from '@/views/project/contractor/component/ContractorFileDialog.vue'; import ContractorFileDialog from '@/views/project/contractor/component/ContractorFileDialog.vue';
import { useUserStoreHook } from '@/store/modules/user'; import { useUserStoreHook } from '@/store/modules/user';
import { getDicts, listData } from '@/api/system/dict/data'; import { getDicts, listData } from '@/api/system/dict/data';
import { listSupplierInput } from '@/api/supplierInput/supplierInput';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@ -152,6 +158,8 @@ const initFormData: ContractorForm = {
principalPhone: undefined, principalPhone: undefined,
custodian: undefined, custodian: undefined,
custodianPhone: undefined, custodianPhone: undefined,
supplierId: undefined,
supplier: undefined,
contractorType: undefined, contractorType: undefined,
fileMap: undefined, fileMap: undefined,
remark: undefined, remark: undefined,
@ -257,6 +265,8 @@ const submitForm = () => {
if (valid) { if (valid) {
form.value.projectId = currentProject.value?.id; form.value.projectId = currentProject.value?.id;
buttonLoading.value = true; buttonLoading.value = true;
form.value.supplier = supplierOptions.value.find((item) => item.id == form.value.supplierId)?.supplierName;
if (form.value.id) { if (form.value.id) {
await updateContractor(form.value).finally(() => (buttonLoading.value = false)); await updateContractor(form.value).finally(() => (buttonLoading.value = false));
} else { } else {
@ -278,15 +288,16 @@ const handleDelete = async (row?: ContractorVO) => {
await getList(); await getList();
}; };
/** 导出按钮操作 */ /** 获取供应商 */
const handleExport = () => { const supplierOptions = ref([]);
proxy?.download( const getSupplierList = async () => {
'project/contractor/export', const res = await listSupplierInput({
{ projectId: currentProject.value?.id,
...queryParams.value pageNum: 1,
}, state: 'finish',
`contractor_${new Date().getTime()}.xlsx` pageSize: 10000
); });
supplierOptions.value = res.rows;
}; };
/** 文件操作 **/ /** 文件操作 **/
@ -304,6 +315,7 @@ const listeningProject = watch(
queryParams.value.projectId = nid; queryParams.value.projectId = nid;
form.value.projectId = nid; form.value.projectId = nid;
console.log('监听项目id', queryParams.value.projectId, form.value.projectId); console.log('监听项目id', queryParams.value.projectId, form.value.projectId);
getSupplierList();
getList(); getList();
} }
); );
@ -314,5 +326,6 @@ onUnmounted(() => {
onMounted(() => { onMounted(() => {
getDictList(); getDictList();
getList(); getList();
getSupplierList();
}); });
</script> </script>

View File

@ -1,7 +1,6 @@
<template> <template>
<div class="p-2"> <div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
:leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
@ -9,13 +8,11 @@
<el-input v-model="queryParams.deptName" placeholder="请输入部门名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.deptName" placeholder="请输入部门名称" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="类别编码" prop="deptCategory"> <el-form-item label="类别编码" prop="deptCategory">
<el-input v-model="queryParams.deptCategory" placeholder="请输入类别编码" clearable style="width: 240px" <el-input v-model="queryParams.deptCategory" placeholder="请输入类别编码" clearable style="width: 240px" @keyup.enter="handleQuery" />
@keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="部门状态" clearable> <el-select v-model="queryParams.status" placeholder="部门状态" clearable>
<el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" <el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
:value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@ -31,8 +28,7 @@
<template #header> <template #header>
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button v-hasPermi="['system:dept:add']" type="primary" plain icon="Plus" @click="handleAdd()">新增 <el-button v-hasPermi="['system:dept:add']" type="primary" plain icon="Plus" @click="handleAdd()">新增 </el-button>
</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="info" plain icon="Sort" @click="handleToggleExpandAll">展开/折叠</el-button> <el-button type="info" plain icon="Sort" @click="handleToggleExpandAll">展开/折叠</el-button>
@ -41,8 +37,14 @@
</el-row> </el-row>
</template> </template>
<el-table ref="deptTableRef" v-loading="loading" :data="deptList" row-key="deptId" <el-table
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }" :default-expand-all="isExpandAll"> ref="deptTableRef"
v-loading="loading"
:data="deptList"
row-key="deptId"
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
:default-expand-all="isExpandAll"
>
<el-table-column prop="deptName" label="部门名称" width="260"></el-table-column> <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="deptCategory" align="center" label="类别编码" width="200"></el-table-column>
<el-table-column prop="deptType" align="center" label="部门类型" width="200"> <el-table-column prop="deptType" align="center" label="部门类型" width="200">
@ -64,16 +66,13 @@
<el-table-column fixed="right" align="center" label="操作"> <el-table-column fixed="right" align="center" label="操作">
<template #default="scope"> <template #default="scope">
<el-tooltip content="修改" placement="top"> <el-tooltip content="修改" placement="top">
<el-button v-hasPermi="['system:dept:edit']" link type="primary" icon="Edit" <el-button v-hasPermi="['system:dept:edit']" link type="primary" icon="Edit" @click="handleUpdate(scope.row)" />
@click="handleUpdate(scope.row)" />
</el-tooltip> </el-tooltip>
<el-tooltip content="新增" placement="top" v-if="scope.row.deptType != '2' && scope.row.deptType != '5'"> <el-tooltip content="新增" placement="top">
<el-button v-hasPermi="['system:dept:add']" link type="primary" icon="Plus" <el-button v-hasPermi="['system:dept:add']" link type="primary" icon="Plus" @click="handleAdd(scope.row)" />
@click="handleAdd(scope.row)" />
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button v-hasPermi="['system:dept:remove']" link type="primary" icon="Delete" <el-button v-hasPermi="['system:dept:remove']" link type="primary" icon="Delete" @click="handleDelete(scope.row)" />
@click="handleDelete(scope.row)" />
</el-tooltip> </el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
@ -85,9 +84,14 @@
<el-row> <el-row>
<el-col v-if="form.parentId !== 0" :span="24"> <el-col v-if="form.parentId !== 0" :span="24">
<el-form-item label="上级部门" prop="parentId"> <el-form-item label="上级部门" prop="parentId">
<el-tree-select v-model="form.parentId" :data="deptOptions" <el-tree-select
:props="{ value: 'deptId', label: 'deptName', children: 'children' }" value-key="deptId" v-model="form.parentId"
placeholder="选择上级部门" check-strictly /> :data="deptOptions"
:props="{ value: 'deptId', label: 'deptName', children: 'children' }"
value-key="deptId"
placeholder="选择上级部门"
check-strictly
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -108,8 +112,7 @@
<el-col :span="12"> <el-col :span="12">
<el-form-item label="负责人" prop="leader"> <el-form-item label="负责人" prop="leader">
<el-select v-model="form.leader" placeholder="请选择负责人"> <el-select v-model="form.leader" placeholder="请选择负责人">
<el-option v-for="item in deptUserList" :key="item.userId" :label="item.userName" <el-option v-for="item in deptUserList" :key="item.userId" :label="item.userName" :value="item.userId" />
:value="item.userId" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -126,32 +129,17 @@
<el-col :span="12"> <el-col :span="12">
<el-form-item label="部门状态"> <el-form-item label="部门状态">
<el-radio-group v-model="form.status"> <el-radio-group v-model="form.status">
<el-radio v-for="dict in sys_normal_disable" :key="dict.value" :value="dict.value">{{ dict.label <el-radio v-for="dict in sys_normal_disable" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
}}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="部门类型"> <el-form-item label="部门类型">
<el-select v-model="form.deptType" placeholder="请选择部门类型" @change="changeProject"> <el-select v-model="form.deptType" placeholder="请选择部门类型">
<el-option v-for="dict in sys_dept_type" :key="dict.value" :label="dict.label" :value="dict.value" /> <el-option v-for="dict in sys_dept_type" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12" v-if="form.deptType == '4'">
<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 == '5'">
<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-row>
</el-form> </el-form>
<template #footer> <template #footer>
@ -336,16 +324,6 @@ const handleUpdate = async (row: DeptVO) => {
dialog.title = '修改部门'; dialog.title = '修改部门';
}; };
const changeProject = async (val: any) => {
if (val == '4' && (!projectList.value || !projectList.value.length)) {
const res = await getDeptList();
projectList.value = res.data;
} else if (val == '5' && (!contractorList.value || !contractorList.value.length)) {
const res = await optionProjectSelect(form.value.rowProjectId);
contractorList.value = res;
}
};
/** 提交按钮 */ /** 提交按钮 */
const submitForm = () => { const submitForm = () => {
deptFormRef.value?.validate(async (valid: boolean) => { deptFormRef.value?.validate(async (valid: boolean) => {

View File

@ -324,6 +324,7 @@ import { globalHeaders } from '@/utils/request';
import { to } from 'await-to-js'; import { to } from 'await-to-js';
import { getProjectByDeptId, getRoleList, optionselect } from '@/api/system/post'; import { getProjectByDeptId, getRoleList, optionselect } from '@/api/system/post';
import ShuttleFrame from '../../project/projectRelevancy/component/ShuttleFrame.vue'; import ShuttleFrame from '../../project/projectRelevancy/component/ShuttleFrame.vue';
import { listProject } from '@/api/project/project';
const router = useRouter(); const router = useRouter();
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@ -484,6 +485,8 @@ const getDeptTree = async () => {
const res = await api.deptTreeSelect({ isShow: '1' }); const res = await api.deptTreeSelect({ isShow: '1' });
deptOptions.value = res.data; deptOptions.value = res.data;
enabledDeptOptions.value = filterDisabledDept(res.data); enabledDeptOptions.value = filterDisabledDept(res.data);
const projectList = await listProject();
projectOptions.value = projectList.rows;
}; };
/** 过滤禁用的部门 */ /** 过滤禁用的部门 */
@ -672,8 +675,6 @@ const handleUpdate = async (row?: UserForm) => {
form.value.projectRoles = data.projectRoles; form.value.projectRoles = data.projectRoles;
form.value.password = ''; form.value.password = '';
const roleList = await getRoleList(form.value.deptId); const roleList = await getRoleList(form.value.deptId);
const projectList = await getProjectByDeptId(form.value.deptId);
projectOptions.value = projectList.data;
roleOptions.value = roleList.data; roleOptions.value = roleList.data;
}; };
@ -736,8 +737,6 @@ onMounted(() => {
async function handleDeptChange(value: number | string) { async function handleDeptChange(value: number | string) {
const response = await optionselect(value); const response = await optionselect(value);
const roleList = await getRoleList(value); const roleList = await getRoleList(value);
const projectList = await getProjectByDeptId(value);
projectOptions.value = projectList.data;
roleOptions.value = roleList.data; roleOptions.value = roleList.data;
postOptions.value = response.data; postOptions.value = response.data;

View File

@ -275,6 +275,7 @@
<el-row class="mb-4"> <el-row class="mb-4">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="入库资料" prop="inputFile"> <el-form-item label="入库资料" prop="inputFile">
<template #label> <span class="text-red">*</span> 入库资料 </template>
<file-upload <file-upload
v-model="form.inputFile" v-model="form.inputFile"
:fileType="['doc', 'docx', 'pdf']" :fileType="['doc', 'docx', 'pdf']"