zhouwx
2025-07-09 0524bcc28832ea9d55e7d5fbc8438bc2f7d59097
src/views/build/conpanyFunctionConsult/orgStructure/departManage/index.vue
@@ -18,7 +18,7 @@
        <el-form-item >
          <el-button v-if="isAdmin" type="primary" @click="getList">查询</el-button>
          <el-button v-if="isAdmin" type="primary" plain @click="reset">重置</el-button>
          <el-button type="primary" @click="initDistribute">生成智能分配表</el-button>
          <el-button type="primary" @click="initDistribute">生成职能分配表</el-button>
        </el-form-item>
      </el-form>
    </div>
@@ -27,14 +27,16 @@
      <el-table-column label="序号" type="index" align="center" width="80" />
      <el-table-column label="部门名称" prop="deptName" align="center"  />
      <el-table-column label="负责人" prop="leaderName" align="center" />
      <el-table-column label="主要负责部门" prop="parentName" align="center"/>
      <el-table-column label="主要负责部门" prop="parentName" align="center">
        <template #default="scope">
            <span>
              {{scope.row.sysDeptManageVoList?.map(i=>i.subDeptName).join('、')}}
            </span>
        </template>
      </el-table-column>
      <el-table-column label="部门涉及条款" prop="userTypeName" align="center" width="150">
        <template #default="scope">
          <div v-if="scope.row.caluseVO1List">
            <div v-for="(item,index) in scope.row.caluseVO1List" :key="index">
              {{ item.clauseNum + ' ' + item.content}}
            </div>
          </div>
              {{sortVersionNumbers(scope.row.caluseVO1List?.map(i=>i.clauseNum)).join('、')}}
        </template>
      </el-table-column>
      <el-table-column label="部门职责表" prop="userTypeName" align="center" width="150">
@@ -66,7 +68,14 @@
<script setup>
import {getCurrentInstance, onMounted, onUnmounted, reactive, ref, toRefs} from "vue";
import {ElMessage, ElMessageBox} from "element-plus";
import {getDepart, delDepart, getCompany, getDeptInfo, initDistribution} from "@/api/orgStructure/depart";
import {
  getDepart,
  delDepart,
  getCompany,
  getDeptInfo,
  initDistribution,
  getDepartByPage
} from "@/api/orgStructure/depart";
import departDialog from './components/departDialog.vue'
import dutyDialog from './components/dutyDialog.vue'
import {generateWordDocument} from "./components/exportWord.js";
@@ -117,9 +126,9 @@
const getList = async () => {
  loading.value = true
  const res = await getDepart(data.queryParams)
  const res = await getDepartByPage(data.queryParams)
  if(res.code == 200){
    data.dataList = res.data || []
    data.dataList = res.data.list || []
    data.total = res.data.total
  }else{
    ElMessage.warning(res.message)
@@ -128,6 +137,9 @@
}
const initDistribute = async ()=>{
  if(!data.queryParams.companyId){
    ElMessage.warning('请先选择要生成的企业')
  }
  ElMessageBox.confirm(
      '重新生成将重置原有分配信息,是否继续?',
      '提示',
@@ -219,6 +231,7 @@
        tableData.tableData = sortResponsibilities(res.data.sysDeptResponsibilitys.map(i=>{
          return {
            ...i,
            leader: i.leader || '',
            evidenceMaterials: i.evidenceMaterials || '',
            managementDocuments: i.managementDocuments || '',
            technicalDocuments: i.technicalDocuments || '',
@@ -226,15 +239,16 @@
          }
        }))
      }else{
        tableData.tableData = [...data.firstFive,...res.data.sysDeptResponsibilitys.map(i=>{
        tableData.tableData = [...data.firstFive,...res.data.sysDeptResponsibilitys,...data.lastTwo].map(i=>{
          return {
            ...i,
            leader: i.leader || '',
            evidenceMaterials: i.evidenceMaterials || '',
            managementDocuments: i.managementDocuments || '',
            technicalDocuments: i.technicalDocuments || '',
            existingRecords: i.existingRecords || '',
          }
        }),...data.lastTwo]
        })
      }
      return tableData
    }else{
@@ -244,7 +258,22 @@
    ElMessage.warning(res.message)
  }
}
const sortVersionNumbers = (versions) => {
  return versions.sort((a, b) => {
    const partsA = a.split('.').map(Number);
    const partsB = b.split('.').map(Number);
    const maxLength = Math.max(partsA.length, partsB.length)
    for (let i = 0; i < maxLength; i++) {
      const numA = partsA[i] || 0
      const numB = partsB[i] || 0
      if (numA !== numB) {
        return numA - numB
      }
    }
    return 0
  });
}
const sortResponsibilities = (list) => {
  // 提取firstFive和lastTwo的clauseNum作为排序依据
  const firstFiveClauses = data.firstFive.map(item => item.clauseNum)