From 1fd7679f4345963c41dea9ad1c4d4c3e572b6148 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期二, 25 二月 2025 22:29:59 +0800
Subject: [PATCH] 表单验证、项目信息显示bug

---
 src/views/projectEngineering/projectLibrary/component/BasicInfo.vue |  130 ++++++++++++++++++++++----------
 src/views/projectEngineering/projectLibrary/projectDetails.vue      |   59 +++++++++++++-
 2 files changed, 141 insertions(+), 48 deletions(-)

diff --git a/src/views/projectEngineering/projectLibrary/component/BasicInfo.vue b/src/views/projectEngineering/projectLibrary/component/BasicInfo.vue
index d27e24c..d1b3f82 100644
--- a/src/views/projectEngineering/projectLibrary/component/BasicInfo.vue
+++ b/src/views/projectEngineering/projectLibrary/component/BasicInfo.vue
@@ -48,7 +48,7 @@
 
           <el-row :gutter="20">
             <el-col :span="6">
-              <el-form-item label="璧勯噾绫诲瀷" label-width="100px"  style="width: 100%">
+              <el-form-item label="璧勯噾绫诲瀷" label-width="100px" prop="fundTypeList"  style="width: 100%">
                 <el-select
                   v-model="projectForm.fundTypeList"
                   clearable
@@ -119,7 +119,7 @@
 <!--            </el-col>-->
 
             <el-col :span="6">
-              <el-form-item label="椤圭洰鐘舵��" label-width="100px" prop="projectstatus" style="width: 100%">
+              <el-form-item label="椤圭洰鐘舵��" label-width="100px" prop="projectStatus" style="width: 100%">
                 <el-select v-model="projectForm.projectStatus" clearable placeholder="璇烽�夋嫨" @change="handleProjectStatusChange" style="width: 100%">
                   <el-option v-for="item in dict.type.sys_project_status" :key="item.value" :label="item.label"
                              :value="item.value"/>
@@ -154,14 +154,13 @@
               </el-form-item>
             </el-col>
             <el-col :span="6">
-              <!-- TODO锛氭殏鏃朵笉鍋� -->
-              <el-form-item label="椤圭洰涓氫富鍗曚綅" label-width="100px" prop="engineering" style="width: 100%">
+              <el-form-item label="椤圭洰涓氫富鍗曚綅" label-width="100px" prop="projectOwnerUnit" style="width: 100%">
                 <!--            <el-input v-model.trim="getEngineeringName" class="item" clearable disabled maxlength="255" placeholder="璇峰湪宸ョ▼涓�夋嫨椤圭洰" />-->
 <!--                <el-select v-model="projectForm.engineeringIdList" :multiple="true" collapse-tags placeholder="璇烽�夋嫨"-->
 <!--                           style="width: 100%">-->
 <!--                <treeselect v-model="form.parentId" :options="deptOptions" :normalizer="normalizer" placeholder="閫夋嫨涓婄骇閮ㄩ棬" />-->
 
-                <treeselect v-model="projectForm.projectOwnerUnit" :disabled="disabled" :options="selectOptions"  noChildrenText="鏃犲尮閰嶆暟鎹�" :normalizer="normalizer" placeholder="閫夋嫨鍗曚綅" />
+                <treeselect v-model="projectForm.projectOwnerUnit" :disabled="disabled" :options="selectOptions" @input="getProjectOwnerUnit" noChildrenText="鏃犲尮閰嶆暟鎹�" :normalizer="normalizer" placeholder="閫夋嫨鍗曚綅" />
                   <!--              <RemoteSelect v-if="selectOptions.length" :hasMore="hasMore" :loading="loading" :page="page" @loadMore="handleLoadMore" />-->
 <!--                </el-select>-->
               </el-form-item>
@@ -170,11 +169,11 @@
           <el-row :gutter="20">
             <el-col :span="6">
               <el-form-item label="涓荤閮ㄩ棬" label-width="100px" prop="competentDepartment" style="width: 100%">
-                <treeselect v-model="projectForm.competentDepartment" :disabled="disabled" @input="getCompetentDepartmentInfo" noChildrenText="鏃犲尮閰嶆暟鎹�" :options="approvalList"  :normalizer="normalizer" placeholder="閫夋嫨鍗曚綅" />
+                <treeselect v-model="competentDepartment" :disabled="disabled" @input="getCompetentDepartmentInfo" noChildrenText="鏃犲尮閰嶆暟鎹�" :options="approvalList"  :normalizer="normalizer" placeholder="閫夋嫨鍗曚綅" />
               </el-form-item>
             </el-col>
             <el-col :span="6">
-              <el-form-item label="涓荤閮ㄩ棬鑱旂郴浜�" label-width="140px" style="width: 100%">
+              <el-form-item label="涓荤閮ㄩ棬鑱旂郴浜�" prop="competentDepartmentPerson" label-width="140px" style="width: 100%">
                 <el-select
                   v-model="projectForm.competentDepartmentPerson"
                   clearable
@@ -194,7 +193,7 @@
               </el-form-item>
             </el-col>
             <el-col :span="6">
-              <el-form-item label="涓荤閮ㄩ棬鑱旂郴鏂瑰紡" label-width="140px" style="width: 100%">
+              <el-form-item label="涓荤閮ㄩ棬鑱旂郴鏂瑰紡" prop="competentDepartmentPhone" label-width="140px" style="width: 100%">
                 <el-input
                   v-model="projectForm.competentDepartmentPhone"
                   clearable
@@ -218,7 +217,7 @@
               </el-form-item>
             </el-col>
             <el-col :span="6">
-              <el-form-item label="绠$悊褰掑彛" label-width="100px" style="width: 100%">
+              <el-form-item label="绠$悊褰掑彛" prop="managementCentralizationList" label-width="100px" style="width: 100%">
                 <el-select
                   v-model="projectForm.managementCentralizationList"
                   clearable
@@ -234,7 +233,7 @@
           </el-row>
           <el-row :gutter="20">
             <el-col :span="6">
-              <el-form-item label="椤圭洰瀹℃壒绫诲瀷" label-width="100px" style="width: 100%">
+              <el-form-item label="椤圭洰瀹℃壒绫诲瀷" prop="projectApprovalType" label-width="100px" style="width: 100%">
                 <el-select
                   v-model="projectForm.projectApprovalType"
                   clearable
@@ -247,13 +246,13 @@
               </el-form-item>
             </el-col>
             <el-col :span="6">
-              <el-form-item label="鎶曡祫绫诲埆" label-width="100px" style="width: 100%">
+              <el-form-item label="鎶曡祫绫诲埆" prop="largeCategory" label-width="100px" style="width: 100%">
                 <el-input v-model="largeCategory" clearable disabled placeholder="璇烽�夋嫨澶х被" style="width: 49%"/>
                 <el-input v-model="subclass" clearable disabled placeholder="璇烽�夋嫨灏忕被" style="width: 49%;margin-left: 2%"/>
               </el-form-item>
             </el-col>
             <el-col :span="6">
-              <el-form-item label="閲嶇偣鍒嗙被" label-width="100px" style="width: 100%">
+              <el-form-item label="閲嶇偣鍒嗙被" prop="importanceTypeList" label-width="100px" style="width: 100%">
                 <el-select
                   v-model="projectForm.importanceTypeList"
                   :multiple="true"
@@ -265,9 +264,6 @@
                 </el-select>
               </el-form-item>
             </el-col>
-
-
-
 
           </el-row>
           <el-row :gutter="20">
@@ -281,7 +277,7 @@
               </el-form-item>
             </el-col>
             <el-col :span="6">
-              <el-form-item label="璁″垝寮�宸ユ椂闂�" label-width="100px" style="width: 100%">
+              <el-form-item label="璁″垝寮�宸ユ椂闂�" prop="planStartTime" label-width="100px" style="width: 100%">
                 <el-date-picker v-model="projectForm.planStartTime "
                                 placeholder="閫夋嫨鏃堕棿"
                                 style="width: 100%"
@@ -290,7 +286,7 @@
               </el-form-item>
             </el-col>
             <el-col :span="6">
-              <el-form-item label="璁″垝绔e伐鏃堕棿" label-width="100px" style="width: 100%">
+              <el-form-item label="璁″垝绔e伐鏃堕棿" prop="planCompleteTime" label-width="100px" style="width: 100%">
                 <el-date-picker v-model="projectForm.planCompleteTime "
                                 placeholder="閫夋嫨鏃堕棿"
                                 style="width: 100%"
@@ -302,11 +298,11 @@
           <el-row :gutter="20">
             <el-col :span="6">
               <el-form-item label="琛屼笟涓荤閮ㄩ棬" label-width="100px" prop="industryCompetentDepartment" style="width: 100%">
-                <treeselect v-model="projectForm.industryCompetentDepartment" :disabled="disabled" noChildrenText="鏃犲尮閰嶆暟鎹�" @input="getIndustryCompetentDepartmentInfo" :options="approvalList"  :normalizer="normalizer" placeholder="閫夋嫨鍗曚綅" />
+                <treeselect v-model="industryCompetentDepartment" :disabled="disabled" noChildrenText="鏃犲尮閰嶆暟鎹�" @input="getIndustryCompetentDepartmentInfo" :options="approvalList"  :normalizer="normalizer" placeholder="閫夋嫨鍗曚綅" />
               </el-form-item>
             </el-col>
             <el-col :span="6">
-              <el-form-item label="琛屼笟涓荤閮ㄩ棬鑱旂郴浜�" label-width="160px" style="width: 100%">
+              <el-form-item label="琛屼笟涓荤閮ㄩ棬鑱旂郴浜�" prop="industryCompetentDepartmentPerson" label-width="160px" style="width: 100%">
                 <el-select
                   v-model="projectForm.industryCompetentDepartmentPerson"
                   clearable
@@ -326,7 +322,7 @@
               </el-form-item>
             </el-col>
             <el-col :span="6">
-              <el-form-item label="琛屼笟涓荤閮ㄩ棬鑱旂郴鏂瑰紡" label-width="160px" style="width: 100%">
+              <el-form-item label="琛屼笟涓荤閮ㄩ棬鑱旂郴鏂瑰紡" prop="departmentPersonPhone" label-width="160px" style="width: 100%">
                 <el-input
                   v-model="projectForm.departmentPersonPhone"
                   clearable
@@ -503,6 +499,8 @@
     return {
       tagList: [],
       projectSubTypeList: [], // 椤圭洰瀛愮被鍨�
+      competentDepartment: '',
+      industryCompetentDepartment: '',
       projectForm: {
         id: '',
         projectName: '',
@@ -579,8 +577,32 @@
       mapCreateInfo: {},
       demoFormRef: null,
       rules: {
-        projectName: [{required: true, message: '璇疯緭鍏ラ」鐩悕绉�', trigger: 'blur'}]
-      }
+        projectName: [{required: true, message: '璇疯緭鍏ラ」鐩悕绉�', trigger: 'blur'}],
+        content: [{required: true, message: '璇疯緭鍏ュ缓璁惧唴瀹�', trigger: 'blur'}],
+        fundTypeList: [{required: true, message: '璇烽�夋嫨璧勯噾绫诲瀷', trigger: 'change'}],
+        investType: [{required: true, message: '璇烽�夋嫨椤圭洰鎶曡祫绫诲埆', trigger: 'change'}],
+        constructionNature: [{required: true, message: '璇烽�夋嫨寤鸿鎬ц川', trigger: 'change'}],
+        attractInvestment: [{required: true, message: '璇烽�夋嫨鏄惁鎷涘晢寮曡祫椤圭洰', trigger: 'change'}],
+        projectType: [{required: true, message: '璇烽�夋嫨椤圭洰鎺ㄨ繘绫诲瀷', trigger: 'change'}],
+        projectStatus: [{required: true, message: '璇烽�夋嫨椤圭洰鐘舵��', trigger: 'change'}],
+        projectPhase: [{required: true, message: '璇烽�夋嫨椤圭洰闃舵', trigger: 'change'}],
+        projectContactPerson: [{required: true, message: '璇疯緭鍏ラ」鐩仈绯讳汉', trigger: 'blur'}],
+        contact: [{required: true, message: '璇疯緭鍏ラ」鐩仈绯绘柟寮�', trigger: 'blur'}],
+        projectOwnerUnit: [{required: true, message: '璇烽�夋嫨椤圭洰涓氫富鍗曚綅', trigger: 'change'}],
+        competentDepartment: [{required: true, message: '璇烽�夋嫨涓荤閮ㄩ棬', trigger: 'change'}],
+        competentDepartmentPerson: [{required: true, message: '璇烽�夋嫨涓荤閮ㄩ棬鑱旂郴浜�', trigger: 'change'}],
+        competentDepartmentPhone: [{required: true, message: '璇疯緭鍏ヤ富绠¢儴闂ㄨ仈绯绘柟寮�', trigger: 'blur'}],
+        area: [{required: true, message: '璇烽�夋嫨琛屾斂鍖哄垝', trigger: 'change'}],
+        managementCentralizationList: [{required: true, message: '璇烽�夋嫨绠$悊褰掑彛', trigger: 'change'}],
+        projectApprovalType: [{required: true, message: '璇烽�夋嫨椤圭洰瀹℃壒绫诲瀷', trigger: 'change'}],
+        importanceTypeList: [{required: true, message: '璇烽�夋嫨閲嶇偣鍒嗙被', trigger: 'change'}],
+        planStartTime: [{required: true, message: '璇烽�夋嫨璁″垝寮�宸ユ椂闂�', trigger: 'change'}],
+        planCompleteTime: [{required: true, message: '璇烽�夋嫨璁″垝绔e伐鏃堕棿', trigger: 'change'}],
+        industryCompetentDepartment: [{required: true, message: '璇烽�夋嫨琛屼笟涓荤閮ㄩ棬', trigger: 'change'}],
+        industryCompetentDepartmentPerson: [{required: true, message: '璇疯緭鍏ヨ涓氫富绠¢儴闂ㄨ仈绯讳汉', trigger: 'blur'}],
+        departmentPersonPhone: [{required: true, message: '璇疯緭鍏ヨ涓氫富绠¢儴闂ㄨ仈绯绘柟寮�', trigger: 'blur'}],
+      },
+      needClearPeople: true
     };
   },
   computed: {
@@ -601,12 +623,6 @@
 
     if (projectForm) {
       this.projectForm = JSON.parse(projectForm);
-      if (this.projectForm.industryCompetentDepartment) {
-        // 鏍规嵁閫変腑鐨勯儴闂↖D鏌ヨ浜哄憳
-        getByDept(this.projectForm.industryCompetentDepartment).then((res) => {
-          this.personList = res.data;
-        })
-      }
       if (this.projectForm.projectType) {
         // 鏍规嵁椤圭洰绫诲瀷鏌ュ瓙绫诲瀷
         getDicts("sys_project_type").then(res => {
@@ -619,6 +635,8 @@
         })
       }
       this.$emit('updateIsShow', true);
+      this.competentDepartment = this.projectForm.competentDepartment
+      this.industryCompetentDepartment = this.projectForm.industryCompetentDepartment
     } else {
       this.projectForm.id = this.$route.query.projectId;
       // 鍦ㄧ粍浠跺垱寤烘椂鑾峰彇椤圭洰淇℃伅锛屽鏋� projectId 瀛樺湪
@@ -630,17 +648,29 @@
       }
       // this.handleLoadMore(1);
     }
-    console.log(this.projectForm, "鍘熷鍊�")
+
     this.$nextTick(() => {
-      console.log("璁剧疆浜�")
       this.tagList = this.projectForm.tag ? this.projectForm.tag.split(",") : []
-      console.log(this.tagList)
     })
   },
   beforeDestroy() {
     localStorage.setItem("projectForm", JSON.stringify(this.projectForm));
   },
   methods: {
+    getIndustryCompetentDepartmentPeople(deptId) {
+      // 鏍规嵁閫変腑鐨勯儴闂↖D鏌ヨ浜哄憳
+      getByDept(deptId).then((res) => {
+        this.personList = res.data;
+        this.personList.forEach(item => item.userId += '')
+      })
+    },
+    getCompetentDepartmentPeople(deptId) {
+      // 鏍规嵁閫変腑鐨勯儴闂↖D鏌ヨ浜哄憳
+      getByDept(deptId).then((res) => {
+        this.deptPersonList = res.data;
+        this.deptPersonList.forEach(item => item.userId += '')
+      })
+    },
     getTagList(list) {
       console.log("鎷垮埌浜�")
       if (!list || list.length < 1) {
@@ -691,28 +721,41 @@
     },
     getIndustryCompetentDepartmentInfo(deptId) {
       if (deptId) {
-        getByDept(deptId).then((res) => {
-          this.personList = res.data;
-        })
+        if (this.projectForm.industryCompetentDepartment != deptId) {
+          this.projectForm.industryCompetentDepartmentPerson = ""
+          this.projectForm.departmentPersonPhone = ""
+        }
+        this.projectForm.industryCompetentDepartment = deptId
+        this.getIndustryCompetentDepartmentPeople(deptId)
       } else {
+        this.projectForm.industryCompetentDepartment = ''
         this.personList = [];
+      }
+    },
+    getProjectOwnerUnit(deptId) {
+      if (deptId) {
+        this.projectForm.projectOwnerUnit = deptId
+      } else {
+        this.projectForm.projectOwnerUnit = ''
       }
     },
     getCompetentDepartmentInfo(deptId) {
       if (deptId) {
-        getByDept(deptId).then((res) => {
-          this.deptPersonList = res.data;
-        })
+        if (this.projectForm.competentDepartment != deptId) {
+          this.projectForm.competentDepartmentPerson = ""
+          this.projectForm.competentDepartmentPhone = ""
+        }
+        this.projectForm.competentDepartment = deptId
+        this.getCompetentDepartmentPeople(deptId)
       } else {
+        this.projectForm.competentDepartment = ''
         this.deptPersonList = [];
       }
     },
     handleDepartmentChange(departmentId) {
       if (departmentId) {
         // 鏍规嵁閫変腑鐨勯儴闂↖D鏌ヨ浜哄憳
-        getByDept(departmentId).then((res) => {
-          this.personList = res.data;
-        })
+        this.getIndustryCompetentDepartmentPeople(departmentId)
       } else {
         // 濡傛灉鏈�夋嫨閮ㄩ棬锛屾竻绌轰汉鍛樺垪琛�
         this.personList = [];
@@ -779,18 +822,21 @@
           this.tagList = this.projectForm.tag ? this.projectForm.tag.split(",") : []
           console.log(this.tagList)
         })
+        this.competentDepartment = this.projectForm.competentDepartment
+        this.industryCompetentDepartment = this.projectForm.industryCompetentDepartment
       });
     },
     getApprovalList() {
       approvalList().then(res => {
-        this.approvalList = this.handleTree(res.data, "deptId");;
+        this.approvalList = this.handleTree(res.data, "deptId");
+        this.approvalList.push({deptId: '', deptName: '鏃�', children: []})
       });
     },
     getDeptList(){
       listDept().then(response => {
         console.log(response.data)
-
         this.selectOptions = this.handleTree(response.data, "deptId");
+        this.selectOptions.push({deptId: '', deptName: '鏃�', children: []})
       });
     },
 
diff --git a/src/views/projectEngineering/projectLibrary/projectDetails.vue b/src/views/projectEngineering/projectLibrary/projectDetails.vue
index 0cec26a..60a7a06 100644
--- a/src/views/projectEngineering/projectLibrary/projectDetails.vue
+++ b/src/views/projectEngineering/projectLibrary/projectDetails.vue
@@ -127,6 +127,32 @@
         // },
       ],
       childRef: null,
+      rules: [
+        {name: 'projectName', message: '璇疯緭鍏ラ」鐩悕绉�'},
+        {name: 'content', message: '璇疯緭鍏ュ缓璁惧唴瀹�'},
+        {name: 'fundTypeList', message: '璇烽�夋嫨璧勯噾绫诲瀷'},
+        {name: 'investType', message: '璇烽�夋嫨椤圭洰鎶曡祫绫诲埆'},
+        {name: 'constructionNature', message: '璇烽�夋嫨寤鸿鎬ц川'},
+        {name: 'attractInvestment', message: '璇烽�夋嫨鏄惁鎷涘晢寮曡祫椤圭洰'},
+        {name: 'projectType', message: '璇烽�夋嫨椤圭洰鎺ㄨ繘绫诲瀷'},
+        {name: 'projectStatus', message: '璇烽�夋嫨椤圭洰鐘舵��'},
+        {name: 'projectPhase', message: '璇烽�夋嫨椤圭洰闃舵'},
+        {name: 'projectContactPerson', message: '璇疯緭鍏ラ」鐩仈绯讳汉'},
+        {name: 'contact', message: '璇疯緭鍏ラ」鐩仈绯绘柟寮�'},
+        {name: 'projectOwnerUnit', message: '璇烽�夋嫨椤圭洰涓氫富鍗曚綅'},
+        {name: 'competentDepartment', message: '璇烽�夋嫨涓荤閮ㄩ棬'},
+        {name: 'competentDepartmentPerson', message: '璇烽�夋嫨涓荤閮ㄩ棬鑱旂郴浜�'},
+        {name: 'competentDepartmentPhone', message: '璇疯緭鍏ヤ富绠¢儴闂ㄨ仈绯绘柟寮�'},
+        {name: 'area', message: '璇烽�夋嫨琛屾斂鍖哄垝'},
+        {name: 'managementCentralizationList', message: '璇烽�夋嫨绠$悊褰掑彛'},
+        {name: 'projectApprovalType', message: '璇烽�夋嫨椤圭洰瀹℃壒绫诲瀷'},
+        {name: 'importanceTypeList', message: '璇烽�夋嫨閲嶇偣鍒嗙被'},
+        {name: 'planStartTime', message: '璇烽�夋嫨璁″垝寮�宸ユ椂闂�'},
+        {name: 'planCompleteTime', message: '璇烽�夋嫨璁″垝绔e伐鏃堕棿'},
+        {name: 'industryCompetentDepartment', message: '璇烽�夋嫨琛屼笟涓荤閮ㄩ棬'},
+        {name: 'industryCompetentDepartmentPerson', message: '璇疯緭鍏ヨ涓氫富绠¢儴闂ㄨ仈绯讳汉'},
+        {name: 'departmentPersonPhone', message: '璇疯緭鍏ヨ涓氫富绠¢儴闂ㄨ仈绯绘柟寮�'},
+    ]
     };
   },
   methods: {
@@ -187,13 +213,34 @@
     },
     saveProject(num) {
       this.projectForm.projectInfoForm.usedStatus = num;
-      editProject(this.projectForm).then((res) => {
-        this.$message.success("淇濆瓨鎴愬姛");
-        this.$store.dispatch("tagsView/delView", this.$route);
-        this.$router.push('/projectEngineering/project/projectLibrary')
-      })
 
-    }
+      const msg = this.formValidate()
+      if (msg && num != 0) {  // 鑽夌涓嶆牎楠�
+        this.$message.error(msg)
+      } else {
+        editProject(this.projectForm).then((res) => {
+          this.$message.success("淇濆瓨鎴愬姛");
+          this.$store.dispatch("tagsView/delView", this.$route);
+          this.$router.push('/projectEngineering/project/projectLibrary')
+        })
+      }
+    },
+    /**
+     * 涓存椂浣跨敤杩欑鏂瑰紡鏍¢獙
+     */
+    formValidate() {
+      let msg = "";
+      for (let i = 0; i < this.rules.length; i++) {
+        console.log(this.projectForm)
+        console.log(this.rules[i].name)
+        console.log(this.projectForm.projectInfoForm[this.rules[i].name])
+        if (! this.projectForm.projectInfoForm[this.rules[i].name]) {
+          msg = this.rules[i].message
+          break
+        }
+      }
+      return msg;
+    },
   },
   mounted() {
     if (this.$route.query.disabled) {

--
Gitblit v1.8.0