feat(oa): 优化出差申请表单和查询功能

- 在编辑模式下实现抄送人员的自动设置功能,默认添加部门负责人和分管副总
- 将申请人姓名和部门查询字段改为选择器组件,支持下拉选择
- 添加业务方向的选择器组件替换输入框
- 集成用户和部门列表数据用于查询条件筛选
- 实现页面初始化时异步加载用户和部门数据
dev
Yangk 1 week ago
parent dfc776a3c3
commit 01914add57

@ -91,7 +91,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="12">
<el-form-item label="交流目的" prop="exchangePurpose">
<el-input v-model="form.exchangePurpose" placeholder="请输入交流目的" :disabled="isFormDisabled" />
</el-form-item>
@ -390,6 +390,31 @@ onMounted(async () => {
if (form.value.copyUserIds && typeof form.value.copyUserIds === 'string') {
form.value.copyUserIds = (form.value.copyUserIds as string).split(',').filter((id) => id);
}
//
if (routeParams.value.type === 'update' && (!form.value.copyUserIds || form.value.copyUserIds.length === 0)) {
// ID
const deptInfo = deptInfoList.value.find((d: any) => d.deptId === form.value.deptId);
if (deptInfo) {
const deptLeaderId = deptInfo.leader;
const vicePresidentId = deptInfo.vicePresident;
//
const deptCopyIds: string[] = [];
if (deptLeaderId) deptCopyIds.push(String(deptLeaderId));
if (vicePresidentId) deptCopyIds.push(String(vicePresidentId));
//
const defaultCopyIds = userList.value.filter((u: any) => defaultCopyUserNames.includes(u.nickName)).map((u: any) => String(u.userId));
// /()
form.value.copyUserIds = [...new Set([...defaultCopyIds, ...deptCopyIds])];
}
}
// variables
if (!form.value.variables) {
form.value.variables = {};
}
}
});
});

@ -12,11 +12,15 @@
<el-option v-for="dict in trip_type" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="申请人姓名" prop="applicantName">
<el-input v-model="queryParams.applicantName" placeholder="请输入申请人姓名" clearable @keyup.enter="handleQuery" />
<el-form-item label="申请人姓名" prop="applicantId">
<el-select v-model="queryParams.applicantId" placeholder="请选择申请人" clearable filterable style="width: 200px">
<el-option v-for="user in userList" :key="user.userId" :label="user.nickName" :value="user.userId" />
</el-select>
</el-form-item>
<el-form-item label="申请人部门" prop="deptName">
<el-input v-model="queryParams.deptName" placeholder="请输入申请人部门" clearable @keyup.enter="handleQuery" />
<el-form-item label="申请人部门" prop="deptId">
<el-select v-model="queryParams.deptId" placeholder="请选择部门" clearable filterable style="width: 200px">
<el-option v-for="dept in deptList" :key="dept.deptId" :label="dept.deptName" :value="dept.deptId" />
</el-select>
</el-form-item>
<el-form-item label="出差地点" prop="tripLocation">
<el-input v-model="queryParams.tripLocation" placeholder="请输入出差地点" clearable @keyup.enter="handleQuery" />
@ -28,7 +32,9 @@
<el-date-picker clearable v-model="queryParams.endTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择结束日期" />
</el-form-item>
<el-form-item label="业务方向" prop="businessDirection">
<el-input v-model="queryParams.businessDirection" placeholder="请输入业务方向" clearable @keyup.enter="handleQuery" />
<el-select v-model="queryParams.businessDirection" placeholder="请选择业务方向" clearable filterable style="width: 200px">
<el-option v-for="dict in business_direction" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="申请状态" prop="tripStatus">
<el-select v-model="queryParams.tripStatus" placeholder="请选择申请状态" clearable>
@ -192,6 +198,10 @@
<script setup name="BusinessTripApply" lang="ts">
import { listBusinessTripApply, delBusinessTripApply, updateBusinessTripApply } from '@/api/oa/crm/businessTripApply';
import { BusinessTripApplyVO, BusinessTripApplyQuery } from '@/api/oa/crm/businessTripApply/types';
import { listUser } from '@/api/system/user';
import { UserVO } from '@/api/system/user/types';
import { listDept } from '@/api/system/dept';
import { DeptVO } from '@/api/system/dept/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { trip_status, trip_type, business_direction } = toRefs<any>(proxy?.useDict('trip_status', 'trip_type', 'business_direction'));
@ -204,6 +214,8 @@ const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const router = useRouter();
const userList = ref<UserVO[]>([]);
const deptList = ref<DeptVO[]>([]);
const queryFormRef = ref<ElFormInstance>();
@ -339,7 +351,14 @@ const handleExport = () => {
);
};
onMounted(() => {
onMounted(async () => {
//
const userRes = await listUser({ pageNum: 1, pageSize: 1000 });
userList.value = userRes.rows;
//
const deptRes = await listDept();
deptList.value = deptRes.data;
//
getList();
});

Loading…
Cancel
Save