From dd2bdb18a8394d2f2a13534a98bcadb8020e3668 Mon Sep 17 00:00:00 2001
From: 祖安之光 <11848914+light-of-zuan@user.noreply.gitee.com>
Date: 星期三, 23 七月 2025 16:09:33 +0800
Subject: [PATCH] 修改新增

---
 src/views/build/conpanyFunctionConsult/orgStructure/departManage/index.vue |  167 +++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 106 insertions(+), 61 deletions(-)

diff --git a/src/views/build/conpanyFunctionConsult/orgStructure/departManage/index.vue b/src/views/build/conpanyFunctionConsult/orgStructure/departManage/index.vue
index 6117899..abb24d7 100644
--- a/src/views/build/conpanyFunctionConsult/orgStructure/departManage/index.vue
+++ b/src/views/build/conpanyFunctionConsult/orgStructure/departManage/index.vue
@@ -19,49 +19,71 @@
           <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="generateMap">生成组织机构图</el-button>
         </el-form-item>
       </el-form>
     </div>
     <!-- 表格数据 -->
-    <el-table v-loading="loading" :data="dataList" border>
-      <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">
-        <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">
+    <el-table v-loading="loading" :data="dataList" border row-key="deptId" :default-expand-all="true" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
+      <el-table-column label="组织机构名称" prop="deptName" align="center" width="220"/>
+      <el-table-column label="排序" prop="orderNum" align="center" width="60"/>
+      <el-table-column label="负责人" prop="leaderName" align="center" width="80"/>
+<!--      <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">
         <template #default="scope">
               {{sortVersionNumbers(scope.row.caluseVO1List?.map(i=>i.clauseNum)).join('、')}}
         </template>
       </el-table-column>
-      <el-table-column label="部门职责表" prop="userTypeName" align="center" width="150">
+      <el-table-column label="部门职责表" prop="userTypeName" align="center" width="140">
         <template #default="scope">
           <el-button link type="primary" @click="openDutyDialog(scope.row)">编辑</el-button>
           <el-button link type="danger" @click="download(scope.row)">导出</el-button>
         </template>
       </el-table-column>
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" >
+      <el-table-column label="操作" align="center" width="160">
         <template #default="scope">
           <el-button link type="primary" @click="openDialog('edit',scope.row)">编辑</el-button>
+          <el-button link type="primary" @click="openDialog('add',scope.row)">新增</el-button>
           <el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
 
-    <pagination
-        v-show="total > 0"
-        :total="total"
-        v-model:page="queryParams.pageNum"
-        v-model:limit="queryParams.pageSize"
-        @pagination="getList"
-    />
+<!--    <pagination-->
+<!--        v-show="total > 0"-->
+<!--        :total="total"-->
+<!--        v-model:page="queryParams.pageNum"-->
+<!--        v-model:limit="queryParams.pageSize"-->
+<!--        @pagination="getList"-->
+<!--    />-->
     <depart-dialog ref="dialogRef" @getList=getList></depart-dialog>
     <duty-dialog ref="dutyDialogRef" @getList=getList></duty-dialog>
+    <el-dialog
+        v-model="dialogVisible"
+        title="组织机构图"
+        width="75%"
+        center
+        :before-close="handleClose"
+        :close-on-press-escape="false"
+        :close-on-click-modal="false"
+    >
+      <div class="deptTreeBox">
+        <vue3-tree-org
+            :data="deptList"
+            :horizontal="false"
+            :props="treeProps"
+            :toolBar="tools"
+            :label-style="labelStyle"
+            center
+        />
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -87,27 +109,31 @@
 const dutyDialogRef = ref()
 const data = reactive({
   queryParams: {
-    pageNum: 1,
-    pageSize: 10,
     companyId: null
   },
   total: 0,
   dataList: [],
+  deptList: {
+    id: 0,
+    deptName: "",
+    children:[]
+  },
   companyList: [],
+  companyName: '',
   isAdmin: false,
-  firstFive: [
-    {clauseNum: '5.3',content: '组织的岗位、职责和权限'},
-    {clauseNum: '4.1',content: '理解组织及其环境'},
-    {clauseNum: '4.2',content: '理解相关方的需求和期望'},
-    {clauseNum: '6.1',content: '应对风险和机遇的措施'},
-    {clauseNum: '6.2',content: '质量目标及其实现的策划'}
-  ],
-  lastTwo: [
-    {clauseNum: '9.1',content: '监视、测量、分析和评价'},
-    {clauseNum: '10',content: '改进'}
-  ]
+  dialogVisible: false,
+  treeProps: {
+    label: 'deptName'
+  },
+  tools: {
+    scale: true, restore: true, expand: false, zoom: false, fullscreen: false
+  },
+  labelStyle: {
+    border: '1px solid #ccc',
+    background: 'rgba(0,0,0,0)'
+  }
 });
-const { queryParams, total, dataList, companyList, isAdmin } = toRefs(data);
+const { queryParams, total, dataList, companyList, isAdmin, dialogVisible, deptList, treeProps, tools, labelStyle } = toRefs(data);
 const userInfo = ref()
 onMounted(async ()=>{
   if(userStore.roles.includes('admin')){
@@ -124,12 +150,38 @@
 
 })
 
+const generateMap = async ()=>{
+  if(!data.queryParams.companyId){
+    ElMessage.warning('请先选择企业')
+  }else{
+    data.deptList.deptName = data.companyList?.find(i=>i.id == data.queryParams.companyId)?.name || userStore.companyName
+    const res = await getDepart(data.queryParams)
+    if(res.code == 200){
+      const list = proxy.handleTree(res.data, "deptId")
+      data.deptList.children = list
+    }else{
+      ElMessage.warning(res.message)
+    }
+    data.dialogVisible = true
+  }
+}
+
+const handleClose = ()=>{
+  data.deptList = {
+    id: 0,
+    deptName: "",
+    children:[]
+  }
+  data.dialogVisible = false
+}
+
 const getList = async () => {
   loading.value = true
-  const res = await getDepartByPage(data.queryParams)
+  const res = await getDepart(data.queryParams)
   if(res.code == 200){
-    data.dataList = res.data.list || []
-    data.total = res.data.total
+    data.dataList = proxy.handleTree(res.data, "deptId")
+    data.deptList.children = data.dataList
+    // data.total = res.data.total
   }else{
     ElMessage.warning(res.message)
   }
@@ -227,29 +279,16 @@
   if (res.code == 200) {
     if(res.data){
       tableData = res.data
-      if(res.data.sysDeptResponsibilitys && Array.isArray(res.data.sysDeptResponsibilitys) && res.data.sysDeptResponsibilitys.find(i=>i.clauseNum == '5.3')){
-        tableData.tableData = sortResponsibilities(res.data.sysDeptResponsibilitys.map(i=>{
-          return {
-            ...i,
-            leader: i.leader || '',
-            evidenceMaterials: i.evidenceMaterials || '',
-            managementDocuments: i.managementDocuments || '',
-            technicalDocuments: i.technicalDocuments || '',
-            existingRecords: i.existingRecords || '',
-          }
-        }))
-      }else{
-        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 || '',
-          }
-        })
-      }
+      tableData.tableData = res.data.sysDeptResponsibilitys.map(i=>{
+        return {
+          ...i,
+          leader: i.leader || '',
+          evidenceMaterials: i.evidenceMaterials || '',
+          managementDocuments: i.managementDocuments || '',
+          technicalDocuments: i.technicalDocuments || '',
+          existingRecords: i.existingRecords || '',
+        }
+      })
       return tableData
     }else{
       ElMessage.warning('暂无部门信息')
@@ -312,3 +351,9 @@
 }
 
 </script>
+<style scoped lang="scss">
+.deptTreeBox{
+  width: 100%;
+  height: 800px;
+}
+</style>

--
Gitblit v1.9.2