|
|
@@ -23,6 +23,24 @@
|
|
|
/>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
+ <el-form-item label="项目部" prop="projectDeptId">
|
|
|
+ <el-select
|
|
|
+ v-model="queryParams.projectDeptId"
|
|
|
+ :placeholder="queryParams.companyDeptId ? '请选择项目部' : '请先选择公司'"
|
|
|
+ :disabled="!queryParams.companyDeptId"
|
|
|
+ :loading="projectDeptLoading"
|
|
|
+ clearable
|
|
|
+ filterable
|
|
|
+ class="!w-240px"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in projectDeptOptions"
|
|
|
+ :key="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
<!--
|
|
|
<el-form-item label="客户名称" prop="manufactureName">
|
|
|
<el-input
|
|
|
@@ -367,14 +385,14 @@ import { IotProjectInfoApi, IotProjectInfoVO } from '@/api/pms/iotprojectinfo'
|
|
|
import { IotProjectTaskApi } from '@/api/pms/iotprojecttask'
|
|
|
import { useUserStore } from '@/store/modules/user'
|
|
|
import { DICT_TYPE, getIntDictOptions, getDictLabel, getStrDictOptions } from '@/utils/dict'
|
|
|
-import { IotDeviceApi } from '@/api/pms/device' // 引入设备API
|
|
|
-import * as UserApi from '@/api/system/user' // 引入用户API
|
|
|
-import * as DeptApi from '@/api/system/dept' // 引入部门API
|
|
|
-import { handleTree } from '@/utils/tree' // 引入树形处理工具
|
|
|
+import { IotDeviceApi } from '@/api/pms/device'; // 引入设备API
|
|
|
+import * as UserApi from '@/api/system/user'; // 引入用户API
|
|
|
+import * as DeptApi from '@/api/system/dept'; // 引入部门API
|
|
|
+import { handleTree } from '@/utils/tree'; // 引入树形处理工具
|
|
|
import { IotProjectTaskScheduleApi } from '@/api/pms/iotprojecttaskschedule'
|
|
|
import { IotRhDailyReportApi } from '@/api/pms/iotrhdailyreport'
|
|
|
import { IotRdDailyReportApi } from '@/api/pms/iotrddailyreport'
|
|
|
-import dayjs from 'dayjs' // 引入 dayjs 用于时间格式化
|
|
|
+import dayjs from 'dayjs'; // 引入 dayjs 用于时间格式化
|
|
|
import { ref, reactive, onMounted, computed, nextTick, watch } from 'vue'
|
|
|
|
|
|
/** 项目信息 列表 */
|
|
|
@@ -389,6 +407,7 @@ const taskList = ref([]) // 任务列表的数据
|
|
|
const selectedProject = ref(null) // 当前选中的项目
|
|
|
const deptList = ref([]) // 部门列表
|
|
|
const companyDeptList = ref<any[]>([]) // 在公司级部门列表
|
|
|
+const projectDeptOptions = ref<any[]>([]) // 项目部选项
|
|
|
const deviceMap = ref({}) // 设备映射表
|
|
|
const responsiblePersonList = ref([]) // 责任人列表
|
|
|
|
|
|
@@ -418,6 +437,7 @@ const queryParams = reactive({
|
|
|
pageSize: 10,
|
|
|
deptId: undefined,
|
|
|
companyDeptId: undefined,
|
|
|
+ projectDeptId: undefined,
|
|
|
deptName: undefined,
|
|
|
contractName: undefined,
|
|
|
contractCode: undefined,
|
|
|
@@ -434,6 +454,7 @@ const queryParams = reactive({
|
|
|
})
|
|
|
const queryFormRef = ref() // 搜索的表单
|
|
|
const exportLoading = ref(false) // 导出的加载中
|
|
|
+const projectDeptLoading = ref(false)
|
|
|
const { push } = useRouter() // 路由跳转
|
|
|
|
|
|
// 列宽度配置
|
|
|
@@ -612,6 +633,29 @@ const resetQuery = () => {
|
|
|
handleQuery()
|
|
|
}
|
|
|
|
|
|
+const loadProjectDeptOptions = async (companyDeptId?: number) => {
|
|
|
+ if (!companyDeptId) {
|
|
|
+ projectDeptOptions.value = []
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ projectDeptLoading.value = true
|
|
|
+ try {
|
|
|
+ const res = await DeptApi.specifiedSimpleDepts(companyDeptId)
|
|
|
+ projectDeptOptions.value = res
|
|
|
+ .map((item: any) => ({
|
|
|
+ label: item.name,
|
|
|
+ value: item.id,
|
|
|
+ raw: item
|
|
|
+ }))
|
|
|
+ .filter((item) => item.raw.type === '2')
|
|
|
+ } catch (error) {
|
|
|
+ projectDeptOptions.value = []
|
|
|
+ } finally {
|
|
|
+ projectDeptLoading.value = false
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
// 加载施工工艺数据字典选项
|
|
|
const loadTechnologyDictOptions = async (deptId: number) => {
|
|
|
// 如果正在加载或已加载,直接返回
|
|
|
@@ -1037,6 +1081,9 @@ onMounted(async () => {
|
|
|
companyDeptList.value = await DeptApi.companyLevelDepts()
|
|
|
|
|
|
deptList.value = handleTree(await DeptApi.companyLevelChildrenDepts())
|
|
|
+ if (queryParams.companyDeptId) {
|
|
|
+ await loadProjectDeptOptions(queryParams.companyDeptId)
|
|
|
+ }
|
|
|
getList()
|
|
|
// 预加载任务进度字典
|
|
|
// getTaskScheduleDictOptions()
|
|
|
@@ -1067,6 +1114,16 @@ onUnmounted(() => {
|
|
|
}
|
|
|
})
|
|
|
|
|
|
+watch(
|
|
|
+ () => queryParams.companyDeptId,
|
|
|
+ async (newVal, oldVal) => {
|
|
|
+ if (newVal === oldVal) return
|
|
|
+
|
|
|
+ queryParams.projectDeptId = undefined
|
|
|
+ await loadProjectDeptOptions(newVal)
|
|
|
+ }
|
|
|
+)
|
|
|
+
|
|
|
// 监听列表数据变化重新计算列宽
|
|
|
watch(
|
|
|
list,
|