From be57c60a2b1ce03ebdd264176149c52870c0b760 Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: 星期二, 11 十一月 2025 10:52:28 +0800
Subject: [PATCH] 企业改成单位
---
src/views/build/conpanyFunctionConsult/orgStructure/departManage/index.vue | 204 ++++++++++++++++++++++++++++++++++-----------------
1 files changed, 136 insertions(+), 68 deletions(-)
diff --git a/src/views/build/conpanyFunctionConsult/orgStructure/departManage/index.vue b/src/views/build/conpanyFunctionConsult/orgStructure/departManage/index.vue
index 7963c91..7164f35 100644
--- a/src/views/build/conpanyFunctionConsult/orgStructure/departManage/index.vue
+++ b/src/views/build/conpanyFunctionConsult/orgStructure/departManage/index.vue
@@ -3,9 +3,9 @@
<div style="display: flex;justify-content: space-between">
<el-form :inline="true" style="display: flex;align-items: center;flex-wrap: wrap;" >
<el-form-item>
- <el-button type="primary" plain icon="Plus" @click="openDialog('add',{})">新增</el-button>
+ <el-button type="primary" plain icon="Plus" @click="openDialog('add',{})" v-hasPermi="['orgStructure:departManage:add']">新增</el-button>
</el-form-item>
- <el-form-item v-if="isAdmin" label="企业:" >
+ <el-form-item v-if="isAdmin" label="单位:" >
<el-select v-model="data.queryParams.companyId" placeholder="请选择" clearable>
<el-option
v-for="item in companyList"
@@ -19,58 +19,85 @@
<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">
+ <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">
- <span>
- {{scope.row.sysDeptManageVoList?.map(i=>i.subDeptName).join('、')}}
- </span>
+ {{sortVersionNumbers(scope.row.caluseVO1List?.map(i=>i.clauseNum)).join('、')}}
</template>
</el-table-column>
- <el-table-column label="部门涉及条款" prop="userTypeName" align="center" width="150">
- <template #default="scope">
- <span>
- {{scope.row.caluseVO1List?.map(i=>i.clauseNum).join('、')}}
- </span>
- </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="danger" @click="handleDelete(scope.row)">删除</el-button>
+ <el-button link type="primary" @click="openDialog('edit',scope.row)" v-hasPermi="['orgStructure:departManage:edit']">编辑</el-button>
+ <el-button link type="primary" @click="openDialog('add',scope.row)" v-hasPermi="['orgStructure:departManage:add']">新增</el-button>
+ <el-button link type="danger" @click="handleDelete(scope.row)" v-hasPermi="['orgStructure:departManage:del']">删除</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>
<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";
@@ -82,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')){
@@ -119,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 getDepart(data.queryParams)
if(res.code == 200){
- data.dataList = res.data || []
- 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)
}
@@ -132,6 +189,9 @@
}
const initDistribute = async ()=>{
+ if(!data.queryParams.companyId){
+ ElMessage.warning('请先选择要生成的企业')
+ }
ElMessageBox.confirm(
'重新生成将重置原有分配信息,是否继续?',
'提示',
@@ -219,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('暂无部门信息')
@@ -250,7 +297,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)
@@ -289,3 +351,9 @@
}
</script>
+<style scoped lang="scss">
+.deptTreeBox{
+ width: 100%;
+ height: 800px;
+}
+</style>
--
Gitblit v1.9.2