Bläddra i källkod

pms 分配任务

zhangcl 1 månad sedan
förälder
incheckning
06dcdd3fb7

+ 2 - 1
src/config/axios/service.ts

@@ -183,7 +183,8 @@ service.interceptors.response.use(
       if (requestUrl.includes('rq/')||requestUrl.includes('system/dict')||requestUrl.includes('system/auth/get-permission-info')||requestUrl.includes('system/dept/list')
         ||requestUrl.includes('system/menu/simple-list')||requestUrl.includes('system/menu/list')||requestUrl.includes('system/dept/simple-list')
         ||requestUrl.includes('pms/')||requestUrl.includes('system/user/page')||requestUrl.includes('supplier/base/page')||requestUrl.includes('system/dept/get')
-        ||requestUrl.includes('system/user/simpleUserList')||requestUrl.includes('system/dept/companyLevelDepts')||requestUrl.includes('system/dept/companyLevelChildrenDepts')) {
+        ||requestUrl.includes('system/user/simpleUserList')||requestUrl.includes('system/dept/companyLevelDepts')||requestUrl.includes('system/dept/companyLevelChildrenDepts')
+        ||requestUrl.includes('system/user/companyDeptsEmployee')) {
         const localeStore = useLocaleStore()
         const lang = localeStore.getCurrentLocale.lang
         if (data&& data.data) {

+ 20 - 1
src/views/pms/iotprojectinfo/index.vue

@@ -111,7 +111,7 @@
         :formatter="dateFormatter"
         width="180px"
       />
-      <el-table-column label="操作" align="center" min-width="120px">
+      <el-table-column label="操作" align="center" min-width="180px">
         <template #default="scope">
           <el-button
             link
@@ -121,6 +121,14 @@
           >
             编辑
           </el-button>
+          <el-button
+            link
+            type="primary"
+            @click="assignTask(scope.row)"
+            v-hasPermi="['rq:iot-project-task:create']"
+          >
+            分配任务
+          </el-button>
           <el-button
             link
             type="danger"
@@ -213,7 +221,18 @@ const openForm = (type: string, id?: number) => {
   }else{
     push({ name: 'IotProjectInfo', params: { type,id} })
   }
+}
 
+/** 分配任务操作 */
+const assignTask = (row: IotProjectInfoVO) => {
+  push({
+    name: 'IotProjectTaskInfo',
+    query: {
+      projectId: row.id,
+      contractName: row.contractName
+    },
+    params: {type: 'create'}
+  })
 }
 
 /** 删除按钮操作 */

+ 45 - 10
src/views/pms/iotprojecttask/IotProjectTaskForm.vue

@@ -356,7 +356,7 @@ import { IotProjectInfoApi, IotProjectInfoVO } from '@/api/pms/iotprojectinfo'
 import {defaultProps,handleTree} from "@/utils/tree";
 import * as DeptApi from "@/api/system/dept";
 import CustomerList from '@/views/pms/device/CustomerList.vue'
-import {ref, reactive, computed, onMounted} from "vue";
+import {ref, reactive, computed, onMounted, watch} from "vue";
 import {useUserStore} from "@/store/modules/user";
 import {IotProjectTaskApi, IotProjectTaskVO} from "@/api/pms/iotprojecttask";
 import {ElMessageBox, ElMessage} from "element-plus";
@@ -366,9 +366,18 @@ import { IotDeviceApi, IotDeviceVO } from '@/api/pms/device'
 import * as UserApi from "@/api/system/user";
 import {UserVO} from "@/api/system/user";
 
-const { params, name } = useRoute() // 查询参数
+const { query, params, name } = useRoute() // 查询参数
 const id = params.id
-const projectId = params.projectId
+
+// 修改projectId获取逻辑:优先使用params.projectId,其次使用query.projectId
+const projectId = ref<string>('')
+// 获取projectId的逻辑
+if (params.projectId) {
+  projectId.value = Array.isArray(params.projectId) ? params.projectId[0] : params.projectId
+} else if (query.projectId) {
+  projectId.value = Array.isArray(query.projectId) ? query.projectId[0] : query.projectId as string
+}
+
 const { delView } = useTagsViewStore() // 视图操作
 const { currentRoute, push } = useRouter()
 const { t } = useI18n() // 国际化
@@ -735,18 +744,23 @@ const open = async () => {
     formType.value = 'create';
   }
   // 如果有projectId参数,自动选中对应的合同
-  if (projectId) {
-    await autoSelectContract(projectId);
+  if (projectId.value) {
+    autoSelectContract(projectId.value);
+
+    // 自动新增一行空记录
+    if (tableData.value.length === 0) {
+      addNewRow();
+    }
   }
 }
 
 defineExpose({ open }) // 提供 open 方法,用于打开弹窗
 
 /** 自动选择合同 */
-const autoSelectContract = async (projectId: number) => {
+const autoSelectContract = async (projectId: string) => {
   // 等待项目列表加载完成
-  await waitForProjectList();
-
+  // await waitForProjectList();
+  console.log('项目id:' + projectId);
   // 查找匹配的合同
   const project = projectList.value.find(item => item.id === Number(projectId));
   if (project) {
@@ -760,7 +774,7 @@ const autoSelectContract = async (projectId: number) => {
 }
 
 /** 等待项目列表加载完成 */
-const waitForProjectList = () => {
+/* const waitForProjectList = () => {
   return new Promise(resolve => {
     const checkInterval = setInterval(() => {
       if (projectList.value.length > 0) {
@@ -769,7 +783,7 @@ const waitForProjectList = () => {
       }
     }, 100);
   });
-}
+} */
 
 /** 提交表单 */
 const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
@@ -824,6 +838,22 @@ const resetForm = () => {
   }
   formRef.value?.resetFields()
 }
+
+// 监听项目列表变化,确保列表加载完成后才执行自动选择
+watch(projectList, (newVal) => {
+  if (newVal && newVal.length > 0) {
+    // 如果是编辑模式,使用任务数据中的合同ID
+    if (id && tableData.value.length > 0 && tableData.value[0].projectId) {
+      autoSelectContract(tableData.value[0].projectId.toString());
+    }
+    // 如果是新增模式且有传递的projectId,使用传递的projectId
+    else if (!id && projectId.value) {
+      console.log('watch-新增模式且有传递的projectId' + projectId.value + ' projectId not found');
+      autoSelectContract(projectId.value);
+    }
+  }
+});
+
 onMounted(async () => {
   // deptList.value = handleTree(await DeptApi.getSimpleDeptList())
   // 查询当前登录人所属公司下的所有部门
@@ -832,6 +862,11 @@ onMounted(async () => {
   projectList.value = await IotProjectInfoApi.getIotProjectInfoUser(deptId);
   // 查询当前任务已经选中的设备信息
   open();
+
+  // 如果有项目 ID 但合同未选中,尝试再次选择
+  /* if (projectId && !formData.value.contractId) {
+    setTimeout(() => autoSelectContract(projectId), 500);
+  } */
 })
 
 // 计算正在编辑的行数