소스 검색

评分人改为创建人,bug调整

hzj18279462576@163.com 6 달 전
부모
커밋
804d8a7ac3
5개의 변경된 파일1758개의 추가작업 그리고 197개의 파일을 삭제
  1. 1 1
      src/store/modules/user.js
  2. 109 9
      src/views/homePage/homePage.vue
  3. 373 181
      src/views/project/project.vue
  4. 1195 0
      src/views/user/user copy1.vue
  5. 80 6
      src/views/user/user.vue

+ 1 - 1
src/store/modules/user.js

@@ -9,8 +9,8 @@ const state = {
   activeIndex: "", // 记录当前路由
   username: "",
   password: "",
+  // api: "/kpi/template", // 线上
   api: "/kpi/template", // 线上
-  // api: "/jgcloudApi/jgcloud/api", // 测试
   roleList: [
     // {
     //   path: "homePage",

+ 109 - 9
src/views/homePage/homePage.vue

@@ -320,11 +320,11 @@
               >查询</el-button
             > -->
           </div>
-          <!-- <div class="fil">
-            <el-button type="primary" class="search" @click="searchBtn"
+          <div class="fil">
+            <el-button type="primary" class="search" @click="importProject"
               >导出</el-button
             >
-          </div> -->
+          </div>
         </div>
         <div class="huizong">
           <!-- <el-table
@@ -477,11 +477,11 @@
               >查询</el-button
             >
           </div>
-          <!-- <div class="fil">
-                <el-button type="primary" class="search" @click="searchBtn"
-                  >导出</el-button
-                >
-              </div> -->
+          <div class="fil">
+            <el-button type="primary" class="search" @click="importProject"
+              >导出</el-button
+            >
+          </div>
         </div>
         <div class="mingxi">
           <el-table
@@ -1404,7 +1404,9 @@ const warningClick = (val) => {
   warningList();
 };
 const warningList = lodash.debounce(async () => {
-  detailref.value.$el.querySelector('.el-table__body-wrapper .el-scrollbar .el-scrollbar__wrap').scrollTop = 0
+  detailref.value.$el.querySelector(
+    ".el-table__body-wrapper .el-scrollbar .el-scrollbar__wrap"
+  ).scrollTop = 0;
   currentPageDetail.value = 1;
   warnData();
 }, 300);
@@ -1509,6 +1511,103 @@ const warnData = async () => {
   }
 };
 
+const importProject = async () => {
+  if (warningFlag.value == 1) {
+    let data = {
+      organize: warnCollect.organize, // 主办部门
+      // updateBy: warnCollect.updateBy, // 时间类型:有:【最近7日】,【本月】,【本季度】,【2024-12-01,2024-12-30】
+    };
+    if (warnCollect.updateBy == "自定义") {
+      if (warnCollect.time) {
+        data.updateBy = warnCollect.time.join(",");
+      } else {
+        data.updateBy = null;
+      }
+    } else {
+      // 时间类型:有:【最近7日】,【本月】,【本季度】,【2024-12-01,2024-12-30】,null全部
+      data.updateBy = warnCollect.updateBy;
+    }
+    let res = await axios({
+      method: "post",
+      url: api.value + "/api/sysProject/queryMessageTjExport",
+      responseType: "blob",
+      headers: {
+        tokenP: sessionStorage.getItem("tokenP"),
+        user_head: sessionStorage.getItem("userhead"),
+      },
+      data,
+    });
+    console.log(res, "预警消息汇总");
+    if (res.status == 200) {
+      let url = window.URL.createObjectURL(res.data);
+      let elink = document.createElement("a");
+      elink.download = "预警消息汇总.xlsx";
+      elink.style.display = "none";
+      elink.href = url;
+      document.body.appendChild(elink);
+      elink.click();
+      document.body.removeChild(elink);
+    } else {
+      ElMessage({
+        type: "error",
+        showClose: true,
+        message: res.data.message,
+        center: true,
+      });
+    }
+  } else if (warningFlag.value == 2) {
+    let data = {
+      organize: warnCollect.organize, // 主办部门
+      projectName: warnCollect.projectName, // 项目名称
+      projectFrom: warnCollect.projectFrom, // 项目来源
+      projectLevel: warnCollect.projectLevel, // 项目等级
+      state: warnCollect.state, // 1、正常在办,2、预警在办,3、超时在办,4、正常办结,5、超时办结
+      coOrganize: warnCollect.coOrganize, // 协办单位
+      sposonerName: warnCollect.sposonerName, // 主办人
+      coSposonerName: warnCollect.coSposonerName, // 协办人
+      // updateBy: warnCollect.updateBy, // 时间类型:有:【最近7日】,【本月】,【本季度】,【2024-12-01,2024-12-30】
+    };
+    if (warnCollect.updateBy == "自定义") {
+      if (warnCollect.time) {
+        data.updateBy = warnCollect.time.join(",");
+      } else {
+        data.updateBy = null;
+      }
+    } else {
+      // 时间类型:有:【最近7日】,【本月】,【本季度】,【2024-12-01,2024-12-30】,null全部
+      data.updateBy = warnCollect.updateBy;
+    }
+    let res = await axios({
+      method: "post",
+      url: api.value + "/api/sysProject/queryMessageExport",
+      responseType: "blob",
+      headers: {
+        tokenP: sessionStorage.getItem("tokenP"),
+        user_head: sessionStorage.getItem("userhead"),
+      },
+      data,
+    });
+    console.log(res, "预警消息明细");
+    if (res.status == 200) {
+      let url = window.URL.createObjectURL(res.data);
+      let elink = document.createElement("a");
+      elink.download = "预警消息明细.xlsx";
+      elink.style.display = "none";
+      elink.href = url;
+      document.body.appendChild(elink);
+      elink.click();
+      document.body.removeChild(elink);
+    } else {
+      ElMessage({
+        type: "error",
+        showClose: true,
+        message: res.data.message,
+        center: true,
+      });
+    }
+  }
+};
+
 const detailTableScroll = (ele) => {
   // ele : 绑定的表格元素
   // console.log(ele.layout.table, "priceTable.value.bodyWrapper");
@@ -1653,6 +1752,7 @@ const getList = async () => {
     }
   }
 };
+
 // 搜索框主办单位  根据部门获取用户
 const getUser1 = async (val) => {
   console.log(val);

+ 373 - 181
src/views/project/project.vue

@@ -332,13 +332,17 @@
           <!-- <el-button @click="searchBtn" color="rgba(212, 48, 48, 1)"
             >删除</el-button
           > -->
-          <!-- <el-button type="primary" class="search" @click="searchBtn"
+          <el-button type="primary" class="search" @click="reportProject"
             >导出</el-button
-          > -->
+          >
         </div>
       </div>
       <div class="project">
-        <el-card v-for="i in tableData.list" @click="projectCard(i)">
+        <el-card
+          v-for="i in tableData.list"
+          @click="projectCard(i)"
+          :key="i.id"
+        >
           <div class="title">
             <div class="name">
               <el-tooltip
@@ -404,7 +408,7 @@
                       "
                       >删除</el-dropdown-item
                     >
-                    <el-dropdown-item
+                    <!-- <el-dropdown-item
                       v-if="
                         ((activeName == 3 && i.scorerFlag == 1) ||
                           (activeName == 6 && i.scorerFlag == 1)) &&
@@ -412,6 +416,18 @@
                       "
                       @click.stop="scoreProject(i)"
                       >评分</el-dropdown-item
+                    > -->
+
+                    <!-- 改版后的评分人规则:只有创建人才能评分 -->
+                    <el-dropdown-item
+                      v-if="
+                        ((activeName == 3 && i.createBy == userId) ||
+                          (activeName == 6 && i.createBy == userId) ||
+                          (activeName == 5 && i.createBy == userId)) &&
+                        btnFlag('project-pingfen')
+                      "
+                      @click.stop="scoreProject(i)"
+                      >评分</el-dropdown-item
                     >
                   </el-dropdown-menu>
                 </template>
@@ -419,9 +435,16 @@
             </div>
           </div>
           <div class="info">
-            <div class="item">主办单位:{{ i.organize }}</div>
-            <div class="item">主办人:{{ i.sposonerName }}</div>
-            <div class="item">协办人:{{ i.coSposonerName }}</div>
+            <!-- <el-tooltip
+              class="box-item"
+              effect="dark"
+              :content="i.organizeCopy"
+              placement="bottom"
+            >
+            </el-tooltip> -->
+            <div class="item unit">主办单位:{{ i.organizeCopy }}</div>
+            <div class="item unit">主办人:{{ i.sposonerName }}</div>
+            <div class="item unit">协办人:{{ i.coSposonerName }}</div>
             <div class="item">
               项目周期:{{ i.startTime }} ~ {{ i.endTime }}
             </div>
@@ -527,7 +550,7 @@
             >
               <el-button type="primary">上传附件</el-button>
               <template #tip>
-                <div class="el-upload__tip" style="color: darkorange;">
+                <div class="el-upload__tip" style="color: darkorange">
                   附件仅支持'.jpeg'、'.png'、'.pdf'、'.docx'、'.xlsx'、'.xls'格式
                 </div>
               </template>
@@ -676,7 +699,7 @@
           </el-select>
         </el-form-item>
         <el-form-item label="评分人" prop="scorer">
-          <!-- <el-select
+          <el-select
             v-model="projectRuleForm.scorer"
             placeholder="请选择评分人"
             clearable
@@ -694,8 +717,8 @@
               :label="item.userName"
               :value="item.id.toString()"
             />
-          </el-select> -->
-          <el-select
+          </el-select>
+          <!-- <el-select
             v-model="projectRuleForm.scorer"
             popper-class="more-tag-data"
             multiple
@@ -712,14 +735,6 @@
             :value="item.id.toString()"
             >
               <span style="float: left">{{ item.userName }}</span>
-              <!-- <span
-                style="
-                  float: right;
-                  color: var(--el-text-color-secondary);
-                  font-size: 13px;
-                "
-                >{{ item.department }}</span
-              > -->
             </el-option>
             <template #footer>
               <div class="addStudentMore">
@@ -733,7 +748,7 @@
                 >
               </div>
             </template>
-          </el-select>
+          </el-select> -->
         </el-form-item>
         <el-form-item class="options">
           <el-button
@@ -1060,7 +1075,7 @@
             v-if="activeName == 3 || activeName == 5"
             >添加任务</el-button
           >
-          <el-button
+          <!-- <el-button
             v-if="
               (activeName == 3 && cardInfo.scorerFlag == 1) ||
               (activeName == 6 && cardInfo.scorerFlag == 1)
@@ -1069,6 +1084,20 @@
             style="margin: 0 0 20px 0"
             @click="scoreProjects"
             >评分</el-button
+          > -->
+
+          <!-- 改版后的评分人规则:只有创建人才能评分 -->
+          <el-button
+            v-if="
+              ((activeName == 3 && cardInfo.createBy == userId) ||
+                (activeName == 6 && cardInfo.createBy == userId) ||
+                (activeName == 5 && cardInfo.createBy == userId)) &&
+              btnFlag('project-pingfen')
+            "
+            type="primary"
+            style="margin: 0 0 20px 0"
+            @click="scoreProjects"
+            >评分</el-button
           >
         </div>
         <div v-if="logFlag == 2">
@@ -1160,7 +1189,7 @@
             >
               <el-button type="primary">上传附件</el-button>
               <template #tip>
-                <div class="el-upload__tip" style="color: darkorange;">
+                <div class="el-upload__tip" style="color: darkorange">
                   附件仅支持'.jpeg'、'.png'、'.pdf'、'.docx'、'.xlsx'、'.xls'格式
                 </div>
               </template>
@@ -1306,10 +1335,10 @@
           >
             <el-button type="primary">上传附件</el-button>
             <template #tip>
-                <div class="el-upload__tip" style="color: darkorange;">
-                  附件仅支持'.jpeg'、'.png'、'.pdf'、'.docx'、'.xlsx'、'.xls'格式
-                </div>
-              </template>
+              <div class="el-upload__tip" style="color: darkorange">
+                附件仅支持'.jpeg'、'.png'、'.pdf'、'.docx'、'.xlsx'、'.xls'格式
+              </div>
+            </template>
           </el-upload>
           <div v-if="fileListAttachment" class="fileList">
             <div class="files" v-for="i in fileListAttachment">
@@ -1372,7 +1401,7 @@
           <div class="continer" v-if="pdfFlag == 4">
             <vue-office-excel
               :src="previewPdfUrl"
-              style="height: 100vh;"
+              style="height: 100vh"
               @rendered="renderedHandler"
               @error="errorHandler"
             />
@@ -1411,9 +1440,9 @@ import VueOfficeDocx from "@vue-office/docx";
 import "@vue-office/docx/lib/index.css";
 
 //引入VueOfficeExcel组件
-import VueOfficeExcel from '@vue-office/excel'
+import VueOfficeExcel from "@vue-office/excel";
 //引入相关样式
-import '@vue-office/excel/lib/index.css'
+import "@vue-office/excel/lib/index.css";
 
 const store = useStore();
 const router = useRouter();
@@ -1485,11 +1514,11 @@ const projectRef = ref();
 const searchOrganizeData = ref(); // 搜索框用主办协办人员
 const organizeData = ref(); // 添加项目用主办协办人员
 
- // 评分人下拉
-const scorePage=ref(1);
-const scoreCurrent=ref(20);
-const scoreTotalPage=ref();
-const scoreNameSea=ref();
+// 评分人下拉
+const scorePage = ref(1);
+const scoreCurrent = ref(20);
+const scoreTotalPage = ref();
+const scoreNameSea = ref();
 const scorerData = ref(); // 评分人
 
 const organizeProps = {
@@ -1616,7 +1645,7 @@ const cardInfo = reactive({
   projectContent: "", // 描述
   fileUrl: "", // 附件
   organize: "", // 主办单位
-  organizeCopy:"",// 主办单位去重
+  organizeCopy: "", // 主办单位去重
   sposonerName: "", // 主办人
   coOrganizeCopy: "", // 协办单位去重展示用
   coOrganize: "", // 协办单位
@@ -1629,6 +1658,7 @@ const cardInfo = reactive({
   leaderName: "", // 分管领导
   scorerName: "", // 评分人
   scorer: "", // 评分人对应id
+  createBy: "", // 当前项目创建人Id
   scorerFlag: "", // 分管领导是否有资格评分
 });
 
@@ -1739,26 +1769,42 @@ const getList = async () => {
     params: params,
     data: data,
   });
+
   console.log(res, "项目分页数据");
   if (res.data.code == 200) {
-    let userId = sessionStorage.getItem("id");
-    if (activeName.value == 3) {
-      res.data.data.project.rows.forEach((item) => {
-        item.scorerFlag = 1;
-      });
-    } else if (activeName.value == 6) {
-      res.data.data.project.rows.forEach((item) => {
-        let flag = item.scorer.split(",").some((i) => {
-          return userId == i;
+    // let userId = sessionStorage.getItem("id");
+    // if (activeName.value == 3) {
+    //   res.data.data.project.rows.forEach((item) => {
+    //     item.scorerFlag = 1;
+    //   });
+    // } else if (activeName.value == 6) {
+    //   res.data.data.project.rows.forEach((item) => {
+    //     let flag = item.scorer.split(",").some((i) => {
+    //       return userId == i;
+    //     });
+    //     if (flag) {
+    //       item.scorerFlag = 1;
+    //     } else {
+    //       item.scorerFlag = 0;
+    //     }
+    //   });
+    // }
+    tableData.list = res.data.data.project.rows;
+    // 主办单位去重展示用
+    res.data.data.project.rows.forEach((i) => {
+      let arr1 = [];
+      // console.log(i);
+      i.organize.split(",").forEach((item) => {
+        let flag = arr1.some((i) => {
+          return i == item;
         });
-        if (flag) {
-          item.scorerFlag = 1;
-        } else {
-          item.scorerFlag = 0;
+        if (!flag) {
+          arr1.push(item);
         }
       });
-    }
-    tableData.list = res.data.data.project.rows;
+      i.organizeCopy = arr1.join(",");
+    });
+
     cardInfo.progress = res.data.data.config[2].configValue;
     total.value = res.data.data.project.total;
     totalPage.value = res.data.data.project.totalPage;
@@ -1785,29 +1831,70 @@ const getList = async () => {
     }
   }
 };
-// 评分人数据
-const scorerList=async ()=>{
-  let params={
-    page:scorePage.value,
-    rows:scoreCurrent.value
+
+const reportProject = async () => {
+  let data = {
+    type: activeName.value, // 1我关注的、2我收藏的、3我负责的、4我协办的、null
+    project: {
+      projectName: searchInput.projectName, // 项目名称
+      projectFrom: searchInput.projectFrom, // 项目来源
+      projectLevel: searchInput.projectLevel, // 项目等级
+      state: searchInput.state, // 1、正常在办,2、预警在办,3、超时在办,4、正常办结,5、超时办结
+      organize: searchInput.organize, // 主办单位-单选
+      coOrganize: searchInput.coOrganize, // 协办单位-多选
+      sposonerName: searchInput.sposonerName, // 主办人
+      coSposonerName: searchInput.coSposonerName, // 协办人
+      scoreState: searchInput.scoreState, // 是否已评分:1已评分,0未评分,null全部
+      collect: searchInput.collect, // 是否已关注,1收藏,0未收藏,null全部
+      hasTask: searchInput.hasTask, // 是否有任务:1有任务,0没有任务,null全部
+      isScore: searchInput.isScore, // 是否我评分,1是我,0不是我,null全部
+    },
+    // "t1": null, // 创建开始时间
+    // "t2": null, // 创建结束时间
+    // "t3": "2024-12-01", // 周期开始时间
+    // "t4": "2024-12-31", // 周期结束时间
+    // "t5": null, // 完成开始时间
+    // "t6": null // 完成结束时间
+  };
+
+  if (searchInput.createTime) {
+    data.t1 = searchInput.createTime[0];
+    data.t2 = searchInput.createTime[1];
+  }
+  if (searchInput.periodTime) {
+    data.t3 = searchInput.periodTime[0];
+    data.t4 = searchInput.periodTime[1];
   }
-  let data={
-    "userName": scoreNameSea.value, // 姓名
+  if (searchInput.finishTime) {
+    data.t5 = searchInput.finishTime[0];
+    data.t6 = searchInput.finishTime[1];
+  }
+  if (activeName.value == 3 || activeName.value == 4) {
+    searchInput.organize = null;
+    searchInput.sposonerName = null;
+    searchInput.coOrganize = null;
+    searchInput.coSposonerName = null;
   }
   let res = await axios({
     method: "post",
-    url: api.value + "/api/sysUser/queryPage",
+    url: api.value + "/api/sysProject/queryPageExport",
+    responseType: "blob",
     headers: {
       tokenP: sessionStorage.getItem("tokenP"),
       user_head: sessionStorage.getItem("userhead"),
     },
-    data,
-    params
+    data: data,
   });
-  console.log(res, "评分人数据列表");
-  if (res.data.code == 200) {
-    scorerData.value = res.data.data.rows;
-    scoreTotalPage.value=res.data.data.totalPage
+  console.log(res, "项目导出");
+  if (res.status == 200) {
+    let url = window.URL.createObjectURL(res.data);
+    let elink = document.createElement("a");
+    elink.download = "项目导出列表.xlsx";
+    elink.style.display = "none";
+    elink.href = url;
+    document.body.appendChild(elink);
+    elink.click();
+    document.body.removeChild(elink);
   } else {
     ElMessage({
       type: "error",
@@ -1816,7 +1903,8 @@ const scorerList=async ()=>{
       center: true,
     });
   }
-}
+};
+
 // 部门数据
 const departmentList = async () => {
   // let res = await axios({
@@ -2059,16 +2147,20 @@ const projectCard = async (row) => {
 
   // 协办单位去重展示用
   let arrs = [];
-  console.log(row.coOrganize.split(","));
-  row.coOrganize.split(",").forEach((item) => {
-    let flag = arrs.some((i) => {
-      return i == item;
+  console.log(row.coOrganize);
+  if (row.coOrganize != "") {
+    row.coOrganize.split(",").forEach((item) => {
+      let flag = arrs.some((i) => {
+        return i == item;
+      });
+      if (!flag) {
+        arrs.push(item);
+      }
     });
-    if (!flag) {
-      arrs.push(item);
-    }
-  });
-  cardInfo.coOrganizeCopy = arrs.join(",");
+    cardInfo.coOrganizeCopy = arrs.join(",");
+  } else {
+    cardInfo.coOrganizeCopy = "";
+  }
 
   cardInfo.coOrganize = row.coOrganize;
   console.log(cardInfo.coOrganize);
@@ -2078,7 +2170,8 @@ const projectCard = async (row) => {
   cardInfo.endTime = row.endTime;
   cardInfo.leaderName = row.leaderName;
   cardInfo.scorer = row.scorer;
-  cardInfo.scorerFlag = row.scorerFlag;
+  // cardInfo.scorerFlag = row.scorerFlag;
+  cardInfo.createBy = row.createBy;
   cardInfo.scorerName = row.scorerName;
   taskRuleForm.projectId = row.id;
   console.log(row.coSposonerName, row.coSposoner);
@@ -2089,16 +2182,32 @@ const projectCard = async (row) => {
       arr.push({ name: item, id: row.coSposoner.split(",")[ind] });
     });
   }
-  let flag = arr.some((i) => {
-    // "判断协办人里面是否有负责人"
-    return i.id == row.sposoner;
-  });
-  console.log(flag);
-  if (!flag) {
-    arr.unshift({ name: row.sposonerName, id: row.sposoner });
+  if (row.sposonerName) {
+    row.sposonerName.split(",").forEach((item, ind) => {
+      arr.push({ name: item, id: row.sposoner.split(",")[ind] });
+    });
   }
+  // let flag = arr.some((i) => {
+  //   // "判断协办人里面是否有负责人"
+  //   return i.id == row.sposoner;
+  // });
+  // console.log(flag);
+  // if (!flag) {
+  //   arr.unshift({ name: row.sposonerName, id: row.sposoner });
+  // }
   console.log(arr);
-  taskLeader.value = arr;
+
+  // 任务负责人去重
+  let jrr = [];
+  arr.forEach((item) => {
+    let flag = jrr.some((i) => {
+      return i.id == item.id;
+    });
+    if (!flag) {
+      jrr.push(item);
+    }
+  });
+  taskLeader.value = jrr;
   taskList();
 };
 // 任务进度
@@ -2267,22 +2376,22 @@ const projectScroll = async (event) => {
         console.log(res, "项目分页数据");
         if (res.data.code == 200) {
           let userId = sessionStorage.getItem("id");
-          if (activeName.value == 3) {
-            res.data.data.project.rows.forEach((item) => {
-              i.scorerFlag = 1;
-            });
-          } else if (activeName.value == 6) {
-            res.data.data.project.rows.forEach((item) => {
-              let flag = item.scorer.split(",").some((i) => {
-                return userId == i;
-              });
-              if (flag) {
-                item.scorerFlag = 1;
-              } else {
-                item.scorerFlag = 0;
-              }
-            });
-          }
+          // if (activeName.value == 3) {
+          //   res.data.data.project.rows.forEach((item) => {
+          //     i.scorerFlag = 1;
+          //   });
+          // } else if (activeName.value == 6) {
+          //   res.data.data.project.rows.forEach((item) => {
+          //     let flag = item.scorer.split(",").some((i) => {
+          //       return userId == i;
+          //     });
+          //     if (flag) {
+          //       item.scorerFlag = 1;
+          //     } else {
+          //       item.scorerFlag = 0;
+          //     }
+          //   });
+          // }
           tableData.list = [...tableData.list, ...res.data.data.project.rows];
           // total.value = res.data.data.project.total;
           // totalPage.value = res.data.data.project.totalPage;
@@ -2363,6 +2472,8 @@ const collectClick = async (row) => {
 const addProjectbtn = () => {
   projectVisible.value = true;
   projectTitle.value = "新建项目";
+  scorerData.value = []; // 将评分人置空
+  scorerList(userId.value); // 获取评分人列表
   fileList.value = [];
   projectRuleForm.projectName = "";
   projectRuleForm.projectContent = "";
@@ -2380,6 +2491,7 @@ const addProjectbtn = () => {
   projectRuleForm.projectLevel = "";
   projectRuleForm.id = "";
 };
+
 // 勾选主办人
 const organizeChange = async (val) => {
   console.log(val);
@@ -2391,7 +2503,9 @@ const organizeChange = async (val) => {
   });
   projectRuleForm.organize = arr.join(",");
   projectRuleForm.sposoner = jrr.join(",");
-  console.log(arr,'//////', jrr);
+  console.log(arr, "//////", jrr);
+
+  // scoreList();
   // return new Promise(async (resolve) => {
   //   // projectRuleForm.scorer = [];
   //   if (val) {
@@ -2463,7 +2577,68 @@ const coOrganizeChange = (val) => {
     projectRuleForm.coSposoner = jrr.join(",");
     console.log(arr.join(","), jrr.join(","));
   }
+  // scoreList();
+};
+// 评分人数据(从勾选的主办和协办人员中选)
+const scoreList = async () => {
+  scorerData.value = [];
+  projectRuleForm.scorer = "";
+  console.log(projectRuleForm.sposoner, projectRuleForm.coSposoner);
+  let arr = projectRuleForm.sposoner.split(",");
+  if (projectRuleForm.coSposoner) {
+    let coSposoner = projectRuleForm.coSposoner.split(",");
+    coSposoner.forEach((i) => {
+      let flag = arr.some((j) => {
+        return i == j;
+      });
+      if (!flag) {
+        arr.push(i);
+      }
+    });
+  }
+  console.log(arr, "合并后的评分人");
+  let data = {
+    ids: arr.join(","), // 姓名
+  };
+  let res = await axios({
+    method: "post",
+    url: api.value + "/api/sysUser/queryListByIds",
+    headers: {
+      tokenP: sessionStorage.getItem("tokenP"),
+      user_head: sessionStorage.getItem("userhead"),
+    },
+    data,
+  });
+  scorerData.value = res.data.data;
+  console.log(res, "评分人列表数据");
 };
+// 评分人数据
+const scorerList = async (id) => {
+  let data = {
+    ids: id, // 姓名
+  };
+  let res = await axios({
+    method: "post",
+    url: api.value + "/api/sysUser/queryListByIds",
+    headers: {
+      tokenP: sessionStorage.getItem("tokenP"),
+      user_head: sessionStorage.getItem("userhead"),
+    },
+    data,
+  });
+  console.log(res, "评分人数据列表");
+  if (res.data.code == 200) {
+    scorerData.value = res.data.data;
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.data.message,
+      center: true,
+    });
+  }
+};
+
 //编辑项目
 const editProject = async (row) => {
   projectVisible.value = true;
@@ -2488,49 +2663,56 @@ const editProject = async (row) => {
     console.log(item, ind);
     arrs.push([item, Number(row.sposoner.split(",")[ind])]);
   });
-  sposonerVal.value =arrs
-  console.log(sposonerVal.value,'主办人员');
-  
+  sposonerVal.value = arrs;
+  console.log(sposonerVal.value, "主办人员");
 
   projectRuleForm.coSposoner = row.coSposoner;
   projectRuleForm.coOrganize = row.coOrganize;
   let arr = [];
-  if(row.coOrganize){
-      row.coOrganize.split(",").forEach((item, ind) => {
-       console.log(item, ind);
-       arr.push([item, Number(row.coSposoner.split(",")[ind])]);
-     });
-     coSposonerVal.value = arr;
-  }else{
-    coSposonerVal.value=''
+  if (row.coOrganize) {
+    row.coOrganize.split(",").forEach((item, ind) => {
+      console.log(item, ind);
+      arr.push([item, Number(row.coSposoner.split(",")[ind])]);
+    });
+    coSposonerVal.value = arr;
+  } else {
+    coSposonerVal.value = "";
   }
+  console.log(coSposonerVal.value, "协办人员");
 
   projectRuleForm.projectFrom = row.projectFrom;
   projectRuleForm.projectLevel = row.projectLevel;
   projectRuleForm.id = row.id;
   // await organizeChange([projectRuleForm.organize, projectRuleForm.sposoner]);
-  projectRuleForm.scorer = row.scorer.split(",");
-  if (row.scorer) {
-    row.scorer.split(",").forEach((item,ind) => {
-      // scorerData.value.unshift(item);
-      let flag= scorerData.value.some(j=>{
-        return item==j.id
-      })
-      if(!flag){
-        let arr={
-          userName:row.scorerName.split(',')[ind],
-          id:`${item}`
-        };
-        scorerData.value.unshift(arr)
-        console.log(arr);
-      }
-    });
-    // projectRuleForm.scorer= arr; // 联系人
-  } else {
-    // projectRuleForm.scorer = [];
-  }
+  // scoreList().then(() => {
+  //   projectRuleForm.scorer = row.scorer.split(",");
+  // });
+
+  scorerList(row.createBy).then(() => {
+    projectRuleForm.scorer = row.scorer.split(",");
+  }); // 获取评分人列表
+
+  // if (row.scorer) {
+  //   row.scorer.split(",").forEach((item, ind) => {
+  //     // scorerData.value.unshift(item);
+  //     let flag = scorerData.value.some((j) => {
+  //       return item == j.id;
+  //     });
+  //     if (!flag) {
+  //       let arr = {
+  //         userName: row.scorerName.split(",")[ind],
+  //         id: `${item}`,
+  //       };
+  //       scorerData.value.unshift(arr);
+  //       console.log(arr);
+  //     }
+  //   });
+  //   // projectRuleForm.scorer= arr; // 联系人
+  // } else {
+  //   // projectRuleForm.scorer = [];
+  // }
   console.log(projectRuleForm.scorer);
-  
+
   // organizeChange([projectRuleForm.organize, projectRuleForm.sposoner]).then(
   //   (res) => {
   //     console.log(scorerData.value,res);
@@ -2541,29 +2723,29 @@ const editProject = async (row) => {
   // );
 };
 // 评分人下拉加载数据
-const scorerChange=(query)=>{
-  console.log(query);
-  scorePage.value=1
-  scoreNameSea.value=query
-    scorerList()
-  // if (query) {
-  //   scoreNameSea.value=query
+const scorerChange = (query) => {
+  // console.log(query);
+  // scorePage.value=1
+  // scoreNameSea.value=query
   //   scorerList()
-  // } else {
-  //   scorerData.value = []
-  // }
-}
+  // // if (query) {
+  // //   scoreNameSea.value=query
+  // //   scorerList()
+  // // } else {
+  // //   scorerData.value = []
+  // // }
+};
 const addStudentListMore = async () => {
   if (scorePage.value < scoreTotalPage.value) {
     scorePage.value++;
     console.log(scorePage.value, "滚动里面");
-    let params={
-      page:scorePage.value,
-      rows:scoreCurrent.value
-    }
-    let data={
-      "userName": scoreNameSea.value, // 姓名
-    }
+    let params = {
+      page: scorePage.value,
+      rows: scoreCurrent.value,
+    };
+    let data = {
+      userName: scoreNameSea.value, // 姓名
+    };
     let res = await axios({
       method: "post",
       url: api.value + "/api/sysUser/queryPage",
@@ -2572,7 +2754,7 @@ const addStudentListMore = async () => {
         user_head: sessionStorage.getItem("userhead"),
       },
       params,
-      data
+      data,
     });
     console.log(res, "评分人列表数据");
     // let arr=[]
@@ -2584,10 +2766,7 @@ const addStudentListMore = async () => {
     //     return !flag
     //   })
     // }
-    scorerData.value = [
-      ...scorerData.value,
-      ...res.data.data.rows,
-    ];
+    scorerData.value = [...scorerData.value, ...res.data.data.rows];
   } else {
     console.log("数据全部加载完成");
   }
@@ -2615,15 +2794,15 @@ const confirmProject = (formEl) => {
       // // 判断是否有id存在,有则是修改账号
       if (projectRuleForm.id) {
         data.id = projectRuleForm.id;
-        if(projectRuleForm.coOrganize){
+        if (projectRuleForm.coOrganize) {
           data.coOrganize = projectRuleForm.coOrganize;
-        }else{
-          data.coOrganize =""
+        } else {
+          data.coOrganize = "";
         }
-        if(projectRuleForm.coOrganize){
+        if (projectRuleForm.coOrganize) {
           data.coSposoner = projectRuleForm.coSposoner;
-        }else{
-          data.coSposoner =""
+        } else {
+          data.coSposoner = "";
         }
         res = await axios({
           method: "post",
@@ -2635,15 +2814,15 @@ const confirmProject = (formEl) => {
           data: data,
         });
       } else {
-        if(projectRuleForm.coOrganize){
+        if (projectRuleForm.coOrganize) {
           data.coOrganize = projectRuleForm.coOrganize;
-        }else{
-          data.coOrganize ="null"
+        } else {
+          data.coOrganize = "null";
         }
-        if(projectRuleForm.coOrganize){
+        if (projectRuleForm.coOrganize) {
           data.coSposoner = projectRuleForm.coSposoner;
-        }else{
-          data.coSposoner ="null"
+        } else {
+          data.coSposoner = "null";
         }
         res = await axios({
           method: "post",
@@ -2838,7 +3017,7 @@ const handleUpload = async (file) => {
     file.file.type ==
       "application/vnd.openxmlformats-officedocument.wordprocessingml.document" ||
     file.file.type ==
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" || 
+      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ||
     file.file.type == "application/vnd.ms-excel"
   ) {
     if (fileList.value.length >= 3) {
@@ -2881,7 +3060,9 @@ const handleUpload = async (file) => {
       }
     }
   } else {
-    ElMessage.warning("附件仅支持'.jpeg'、'.png'、'.pdf'、'.docx'、'.xlsx'、'.xls'格式");
+    ElMessage.warning(
+      "附件仅支持'.jpeg'、'.png'、'.pdf'、'.docx'、'.xlsx'、'.xls'格式"
+    );
   }
 };
 // 删除文件
@@ -3239,8 +3420,8 @@ const handleUploadTask = async (file) => {
     file.file.type == "application/pdf" ||
     file.file.type ==
       "application/vnd.openxmlformats-officedocument.wordprocessingml.document" ||
-      file.file.type ==
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" || 
+    file.file.type ==
+      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ||
     file.file.type == "application/vnd.ms-excel"
   ) {
     if (fileListTask.value.length >= 3) {
@@ -3283,7 +3464,9 @@ const handleUploadTask = async (file) => {
       }
     }
   } else {
-    ElMessage.warning("附件仅支持'.jpeg'、'.png'、'.pdf'、'.docx'、'.xlsx'、'.xls'格式");
+    ElMessage.warning(
+      "附件仅支持'.jpeg'、'.png'、'.pdf'、'.docx'、'.xlsx'、'.xls'格式"
+    );
   }
 };
 // 删除文件
@@ -3449,7 +3632,7 @@ const handleAttachment = async (file) => {
     file.file.type ==
       "application/vnd.openxmlformats-officedocument.wordprocessingml.document" ||
     file.file.type ==
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" || 
+      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ||
     file.file.type == "application/vnd.ms-excel"
   ) {
     if (fileListAttachment.value.length >= 3) {
@@ -3492,7 +3675,9 @@ const handleAttachment = async (file) => {
       }
     }
   } else {
-    ElMessage.warning("附件仅支持'.jpeg'、'.png'、'.pdf'、'.docx'、'.xlsx'、'.xls'格式");
+    ElMessage.warning(
+      "附件仅支持'.jpeg'、'.png'、'.pdf'、'.docx'、'.xlsx'、'.xls'格式"
+    );
   }
 };
 // 删除文件
@@ -3531,18 +3716,18 @@ const pdfChange = (url) => {
     pdfFlag.value = 3;
   }
   // execl文件
-  else if(url.includes(".xlsx") || url.includes(".xls")){
+  else if (url.includes(".xlsx") || url.includes(".xls")) {
     pdfFlag.value = 4;
   }
   filePreviewPdf(url);
 };
 // execl文件预览
-const renderedHandler =()=> {
-  console.log("渲染完成")
+const renderedHandler = () => {
+  console.log("渲染完成");
+};
+const errorHandler = () => {
+  console.log("渲染失败");
 };
-const errorHandler = ()=> {
-  console.log("渲染失败")
-}
 // 查看PDF
 const filePreviewPdf = (url) => {
   console.log(url, "pdf地址信息");
@@ -3592,7 +3777,7 @@ onBeforeMount(() => {
   departmentList();
   // userList();
   users();
-  scorerList()
+  // scorerList()
 });
 onMounted(() => {
   const timer = setTimeout(() => {
@@ -3791,6 +3976,13 @@ onMounted(() => {
           .item {
             margin-bottom: 4px;
           }
+          .unit {
+            width: 330px;
+            height: 18px;
+            white-space: nowrap; /* 防止文本换行 */
+            overflow: hidden; /* 隐藏溢出的内容 */
+            text-overflow: ellipsis; /* 溢出内容显示为省略号 */
+          }
 
           .plan {
             display: flex;

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1195 - 0
src/views/user/user copy1.vue


+ 80 - 6
src/views/user/user.vue

@@ -137,14 +137,62 @@
             align="center"
             prop="department"
             label="所属部门"
-            width="300"
+            width="250"
             tooltip-effect
-          />
+          >
+          <template #default="scope">
+              <div v-if="scope.row.department">
+                <el-tag style="margin-right: 10px" type="primary">{{
+                  scope.row.departmentTag1
+                }}</el-tag>
+                <el-tooltip
+                  class="box-item"
+                  effect="light"
+                  v-if="scope.row.departmentTagNum >= 1"
+                >
+                  <template #content>
+                    <div
+                      style="
+                        display: flex;
+                        justify-content: flex-start;
+                        flex-wrap: wrap;
+                      "
+                    >
+                      <el-tag
+                        style="margin: 3px 3px"
+                        type="primary"
+                        v-for="item in scope.row.departmentTag2"
+                        >{{ item }}</el-tag
+                      >
+                    </div>
+                  </template>
+                  <el-tag type="primary"
+                    >+{{ scope.row.departmentTagNum }}</el-tag
+                  >
+                </el-tooltip>
+                <!-- <el-select
+                  v-model="scope.row.manageDepartmentArr"
+                  placeholder="请选择"
+                  style="width: 220px"
+                  collapse-tags
+                  multiple
+                  collapse-tags-tooltip
+                >
+                  <el-option
+                    v-for="item in scope.row.manageDepartmentList"
+                    :key="item.id"
+                    :label="item.name"
+                    :value="item.name"
+                  />
+                </el-select> -->
+              </div>
+            </template>
+          </el-table-column>
           <el-table-column
             align="center"
             label="分管部门"
             prop="manageDepartment"
-            width="300"
+            width="250"
             tooltip-effect
           >
             <template #default="scope">
@@ -302,6 +350,12 @@
                 v-model="accountRuleForm.department"
                 placeholder="请选择"
                 style="width: 220px"
+                collapse-tags
+                multiple
+                clearable
+                collapse-tags-tooltip
+                popper-class="custom-header"
+                :max-collapse-tags="1"
               >
                 <el-option
                   v-for="item in departmentData"
@@ -556,6 +610,25 @@ const getList = async () => {
           i.manageDepartmentTagNum = 0;
         }
       }
+      if (i.department) {
+        // i.manageDepartmentArr = i.manageDepartment.split(",");
+        let arr = i.department.split(",");
+        if (i.department.split(",").length > 1) {
+          i.departmentTag1 = arr[0];
+          i.departmentTag2 = arr.filter((val, ind) => {
+            return ind != 0;
+          });
+          i.departmentTagNum = arr.length - 1;
+        } else if (i.department.split(",").length == 1) {
+          i.departmentTag1 = arr[0];
+          i.departmentTag2 = [];
+          i.departmentTagNum = 0;
+        } else {
+          i.departmentTag1 = "";
+          i.departmentTag2 = [];
+          i.departmentTagNum = 0;
+        }
+      }
       // i.manageDepartmentList = arr;
     });
     tableData.list = res.data.data.rows;
@@ -677,7 +750,7 @@ const addProjectbtn = () => {
   accountRuleForm.roleId = "";
   accountRuleForm.mobile = "";
   accountRuleForm.manageDepartment = [];
-  accountRuleForm.department = "";
+  accountRuleForm.department = [];
   accountRuleForm.id = "";
 };
 watch(
@@ -731,7 +804,8 @@ const confirmAccount = (formEl) => {
         manageDepartment: accountRuleForm.manageDepartment
           ? accountRuleForm.manageDepartment.join(",")
           : null,
-        department: accountRuleForm.department,
+        department: accountRuleForm.department? accountRuleForm.department.join(",")
+        : null,
         mobile: accountRuleForm.mobile,
       };
       let res = "";
@@ -806,7 +880,7 @@ const edit = (row) => {
   } else {
     row.manageDepartment = null;
   }
-  accountRuleForm.department = row.department;
+  accountRuleForm.department = row.department.split(",");
   accountRuleForm.id = row.id;
   console.log(row);
 };