|
|
@@ -8,63 +8,25 @@
|
|
|
<el-button type="primary" :icon="Plus" @click="addTeam('parent')"> 添加组织 </el-button>
|
|
|
|
|
|
<div class="collapse-wrapper">
|
|
|
- <!-- expand-icon-position="left" 版本小了,不支持 -->
|
|
|
- <el-collapse accordion v-model="activeName" v-if="fetchSafetyOrganizationList.length > 0">
|
|
|
- <el-collapse-item :name="item.orgId" v-for="item in fetchSafetyOrganizationList">
|
|
|
- <template #title="{ isActive }">
|
|
|
- <div :class="['title-wrapper', { 'is-active': isActive }]">
|
|
|
- <span @click.stop="querySafetyTeamData('parent', item)">
|
|
|
- {{ item.orgName }}
|
|
|
- </span>
|
|
|
- <div class="handler">
|
|
|
- <el-button :icon="Plus" size="small" type="default" dashed @click.stop="handleCreateSafetySystem('children', item)"
|
|
|
- ></el-button
|
|
|
- >
|
|
|
- <el-button size="small" type="primary" link @click.stop="handleEditSafetySystem('parent', item, '')"
|
|
|
- >编辑</el-button
|
|
|
- >
|
|
|
- <el-button size="small" type="danger" link @click.stop="handleDelSafetySystem('parent', item)"
|
|
|
- >删除</el-button
|
|
|
- >
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <div class="collapse-item-content">
|
|
|
- <div v-if="item.children.length > 0">
|
|
|
- <ul>
|
|
|
- <li class="flex" v-for="children in item.children" :key="children.orgId">
|
|
|
- <span @click="querySafetyTeamData('children', children)">
|
|
|
- {{ children.orgName }}
|
|
|
- </span>
|
|
|
- <div class="handler">
|
|
|
- <el-button
|
|
|
- link
|
|
|
- size="small"
|
|
|
- type="primary"
|
|
|
- @click.stop="handleEditSafetySystem('children', children, item.orgId)"
|
|
|
- >编辑</el-button
|
|
|
- >
|
|
|
- <el-button
|
|
|
- link
|
|
|
- size="small"
|
|
|
- type="danger"
|
|
|
- @click.stop="handleDelSafetySystem('children', children)"
|
|
|
- >删除</el-button
|
|
|
- >
|
|
|
- </div>
|
|
|
- </li>
|
|
|
- </ul>
|
|
|
- </div>
|
|
|
- <div v-else>
|
|
|
- <el-empty description="未添加子组织" :image-size="40" />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </el-collapse-item>
|
|
|
- </el-collapse>
|
|
|
+ <!-- 组织树 -->
|
|
|
+ <el-collapse v-model="activeName" accordion v-if="fetchSafetyOrganizationList.length > 0">
|
|
|
+ <CollapseItem
|
|
|
+ v-for="item in fetchSafetyOrganizationList"
|
|
|
+ :key="item.id"
|
|
|
+ :data="item"
|
|
|
+ :level="level"
|
|
|
+ @click-node="querySafetyTeamData"
|
|
|
+ @create-node="handleCreateSafetySystem"
|
|
|
+ @edit-node="handleEditSafetySystem"
|
|
|
+ @delete-node="handleDelSafetySystem"
|
|
|
+ />
|
|
|
+ </el-collapse>
|
|
|
+
|
|
|
<div v-else>
|
|
|
<el-empty description="未添加组织" />
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <!-- 添加、编辑组织弹窗 -->
|
|
|
<AddSafetySystem
|
|
|
v-model:visible="addSafetySystemVisible"
|
|
|
:data="addSafetyOrganizationSystemFormData"
|
|
|
@@ -72,83 +34,15 @@
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="search-table-container table-content">
|
|
|
- <div style="margin-bottom:20px">
|
|
|
- <el-button type="primary" :icon="Plus" @click="handleCreate"> 添加 </el-button>
|
|
|
- <el-button plain @click="handleImport">导入</el-button>
|
|
|
- <!-- <el-button plain @click="handlerEdit">架构</el-button> -->
|
|
|
- </div>
|
|
|
- <header>
|
|
|
- <div class="act-search">
|
|
|
- <section class="select-box">
|
|
|
- <div class="select-box--item">
|
|
|
- <span>搜索工号/姓名:</span>
|
|
|
- <el-input
|
|
|
- v-model="tableQuery.queryParam.keyword"
|
|
|
- placeholder="搜索工号/姓名"
|
|
|
- class="act-search-input"
|
|
|
- />
|
|
|
- </div>
|
|
|
- <div class="select-box--item">
|
|
|
- <span>状态:</span>
|
|
|
- <el-select v-model="tableQuery.queryParam.status" placeholder="请选择状态" clearable>
|
|
|
- <el-option label="启用" :value="1" />
|
|
|
- <el-option label="禁用" :value="2" />
|
|
|
- </el-select>
|
|
|
- </div>
|
|
|
- <div class="select-box--item">
|
|
|
- <span>日期范围:</span>
|
|
|
- <el-date-picker
|
|
|
- v-model="dateRange"
|
|
|
- @change="onchangeDateRange"
|
|
|
- type="daterange"
|
|
|
- range-separator="至"
|
|
|
- start-placeholder="开始日期"
|
|
|
- end-placeholder="结束日期"
|
|
|
- value-format="YYYY-MM-DD"
|
|
|
- format="YYYY-MM-DD"
|
|
|
- />
|
|
|
- </div>
|
|
|
- </section>
|
|
|
- <section class="search-btn">
|
|
|
- <el-button type="primary" @click="handleSearch">查询</el-button>
|
|
|
- <el-button @click="handleReset">重置</el-button>
|
|
|
- <el-button plain @click="handleDownload">导出</el-button>
|
|
|
- </section>
|
|
|
- </div>
|
|
|
- </header>
|
|
|
-
|
|
|
- <div class="batch-table">
|
|
|
- <BasicTable
|
|
|
- ref="basicTableRef"
|
|
|
- :tableData="tableData"
|
|
|
- :tableConfig="tableConfig"
|
|
|
- @update:pageSize="handleSizeChange"
|
|
|
- @update:pageNumber="handleCurrentChange"
|
|
|
- >
|
|
|
- <template #status="scope">
|
|
|
- <span>
|
|
|
- {{ scope.row.status === 1 ? '启用' : scope.row.status === 2 ? '禁用' : '-' }}
|
|
|
- </span>
|
|
|
- </template>
|
|
|
- <template #action="scope">
|
|
|
- <div class="action-container--div" style="justify-content: left">
|
|
|
- <ActionButton text="编辑" @click="handleEdit(scope.row.id)" />
|
|
|
- <ActionButton
|
|
|
- text="删除"
|
|
|
- :popconfirm="{
|
|
|
- title: '确定要删除?',
|
|
|
- }"
|
|
|
- @confirm="handleDelete(scope.row.id)"
|
|
|
- />
|
|
|
- <ActionButton text="查看" @click="handleView(scope.row.id)" />
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </BasicTable>
|
|
|
+ <!-- 架构图 -->
|
|
|
+ <OrgChart :treeData="treeData" @node-click="handleNodeClick" />
|
|
|
+ <TeamDetailDrawer ref="teamDetailDrawerRef" :selected-team-id="selectedTeamId" />
|
|
|
+ <div class="text-right mb-4">
|
|
|
+ <el-button type="primary" @click="toStaff"> 编辑 </el-button>
|
|
|
</div>
|
|
|
- <!-- <OrgChart :treeData="treeData" @node-click="handleNodeClick" /> -->
|
|
|
</div>
|
|
|
</main>
|
|
|
- <BatchImport
|
|
|
+ <!-- <BatchImport
|
|
|
v-if="batchImportVisible"
|
|
|
:visible="batchImportVisible"
|
|
|
:import-api-url="importApiUrl"
|
|
|
@@ -157,16 +51,15 @@
|
|
|
:show-template="true"
|
|
|
@close="batchImportVisible = false"
|
|
|
@update="handleUpdate"
|
|
|
- />
|
|
|
+ /> -->
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
- import { onMounted, reactive, ref } from 'vue';
|
|
|
+ import { onMounted, reactive, ref, defineComponent } from 'vue';
|
|
|
import { ElMessage, ElMessageBox } from 'element-plus';
|
|
|
import BasicTable from '@/components/BasicTable.vue';
|
|
|
import useTableConfig from '@/hooks/useTableConfigHook';
|
|
|
- import ActionButton from '@/components/ActionButton.vue';
|
|
|
import { TABLE_OPTIONS, TABLE_COLUMNS } from './configs/tables';
|
|
|
import { useRouter } from 'vue-router';
|
|
|
import type { QueryPageRequest } from '@/types/basic-query';
|
|
|
@@ -179,22 +72,24 @@
|
|
|
delEmployee,
|
|
|
exportSafetyOrganizationSystemManagement
|
|
|
} from '@/api/safety-organization-management';
|
|
|
- import { downloadByData } from '@/utils/file/download';
|
|
|
- import BatchImport from '@/components/batch-import/BatchImport.vue';
|
|
|
- import { useGlobSetting } from '@/hooks/setting';
|
|
|
- import urlJoin from 'url-join';
|
|
|
+// import { downloadByData } from '@/utils/file/download';
|
|
|
+// import BatchImport from '@/components/batch-import/BatchImport.vue';
|
|
|
+// import { useGlobSetting } from '@/hooks/setting';
|
|
|
+// import urlJoin from 'url-join';
|
|
|
import AddSafetySystem from './components/addSafetySystem.vue';
|
|
|
import {
|
|
|
Delete,
|
|
|
Edit,
|
|
|
Plus,
|
|
|
} from '@element-plus/icons-vue'
|
|
|
- import OrgChart from '@/views/emergency/components/OrgChart.vue';
|
|
|
+ import OrgChart from './components/orgChart.vue';
|
|
|
+ import CollapseItem from './components/collapseItem.vue'
|
|
|
+ import TeamDetailDrawer from './components/TeamDetailDrawer.vue';
|
|
|
const position = ref('left')
|
|
|
|
|
|
const router = useRouter();
|
|
|
// 表格
|
|
|
- const basicTableRef = ref<InstanceType<typeof BasicTable>>();
|
|
|
+// const basicTableRef = ref<InstanceType<typeof BasicTable>>();
|
|
|
|
|
|
const { tableConfig, pagination } = useTableConfig(TABLE_COLUMNS, TABLE_OPTIONS);
|
|
|
|
|
|
@@ -203,6 +98,8 @@ const position = ref('left')
|
|
|
const fetchSafetyOrganizationList = ref<any[]>([]);
|
|
|
|
|
|
const activeName = ref('');
|
|
|
+
|
|
|
+ const level = ref(1)
|
|
|
// 日期范围(用于日期选择器)
|
|
|
const dateRange = ref<[string, string] | string>('');
|
|
|
|
|
|
@@ -226,58 +123,48 @@ const position = ref('left')
|
|
|
|
|
|
const treeData = ref<OrganizationTreeType>({
|
|
|
id: 'root',
|
|
|
- data: { name: '应急领导小组' },
|
|
|
- children: [
|
|
|
- {
|
|
|
- id: 'group1',
|
|
|
- data: { name: '应急指挥小组' },
|
|
|
- },
|
|
|
- {
|
|
|
- id: 'group2',
|
|
|
- data: { name: '应急响应小组' },
|
|
|
- },
|
|
|
- {
|
|
|
- id: 'group3',
|
|
|
- data: { name: '应急支援小组' },
|
|
|
- },
|
|
|
- ],
|
|
|
+ data: { name: '请添加组织' },
|
|
|
+ children: [],
|
|
|
});
|
|
|
-
|
|
|
- const handlerEdit = ()=>{
|
|
|
- router.push({name: 'securityOrganizationalStructure'})
|
|
|
- }
|
|
|
- const handleSizeChange = (value: number) => {
|
|
|
- pagination.pageSize = value;
|
|
|
- tableQuery.pageSize = value;
|
|
|
- getTableData();
|
|
|
- };
|
|
|
-
|
|
|
- const handleCurrentChange = (value: number) => {
|
|
|
- pagination.pageNumber = value;
|
|
|
- tableQuery.pageNumber = value;
|
|
|
- getTableData();
|
|
|
- };
|
|
|
+
|
|
|
+// const handlerEdit = ()=>{
|
|
|
+// router.push({name: 'securityOrganizationalStructure'})
|
|
|
+// }
|
|
|
+// const handleSizeChange = (value: number) => {
|
|
|
+// pagination.pageSize = value;
|
|
|
+// tableQuery.pageSize = value;
|
|
|
+// getTableData();
|
|
|
+// };
|
|
|
+
|
|
|
+// const handleCurrentChange = (value: number) => {
|
|
|
+// pagination.pageNumber = value;
|
|
|
+// tableQuery.pageNumber = value;
|
|
|
+// getTableData();
|
|
|
+// };
|
|
|
+
|
|
|
+ const teamDetailDrawerRef = ref<InstanceType<typeof TeamDetailDrawer>>();
|
|
|
+ const selectedTeamId = ref<number | null>(null);
|
|
|
const handleNodeClick = (nodeData: any) => {
|
|
|
- // selectedTeamId.value = Number(nodeData.id);
|
|
|
+ selectedTeamId.value = Number(nodeData.id);
|
|
|
|
|
|
- // teamDetailDrawerRef.value?.drawerShow();
|
|
|
+ teamDetailDrawerRef.value?.drawerShow();
|
|
|
};
|
|
|
- async function getTableData() {
|
|
|
- tableConfig.loading = true;
|
|
|
- try {
|
|
|
- const res = await fetchTableList(tableQuery);
|
|
|
- if (res) {
|
|
|
- tableData.value = res.records
|
|
|
- pagination.total = res.totalRow;
|
|
|
- }
|
|
|
- } catch (e) {
|
|
|
- console.error('获取列表失败:', e);
|
|
|
- tableData.value = [];
|
|
|
- pagination.total = 0;
|
|
|
- } finally {
|
|
|
- tableConfig.loading = false;
|
|
|
- }
|
|
|
- }
|
|
|
+// async function getTableData() {
|
|
|
+// tableConfig.loading = true;
|
|
|
+// try {
|
|
|
+// const res = await fetchTableList(tableQuery);
|
|
|
+// if (res) {
|
|
|
+// tableData.value = res.records
|
|
|
+// pagination.total = res.totalRow;
|
|
|
+// }
|
|
|
+// } catch (e) {
|
|
|
+// console.error('获取列表失败:', e);
|
|
|
+// tableData.value = [];
|
|
|
+// pagination.total = 0;
|
|
|
+// } finally {
|
|
|
+// tableConfig.loading = false;
|
|
|
+// }
|
|
|
+// }
|
|
|
|
|
|
interface addSafetyOrganizationSystemFormDataType {
|
|
|
type: String;
|
|
|
@@ -295,99 +182,88 @@ const position = ref('left')
|
|
|
action: '',
|
|
|
parentid: '',
|
|
|
});
|
|
|
- // 一级新增
|
|
|
- const addTeam = (type) => {
|
|
|
- addSafetyOrganizationSystemFormData.value = {
|
|
|
- type,
|
|
|
- action: 'add',
|
|
|
+
|
|
|
+/**
|
|
|
+ * 递归给树形结构添加 id 、data 、children 字段
|
|
|
+ * @param {Array} tree 原始树形数组
|
|
|
+ * @returns 格式化后的标准树结构
|
|
|
+ */
|
|
|
+const formatTreeData = (tree)=> {
|
|
|
+ if (!tree || !Array.isArray(tree)) return [];
|
|
|
+
|
|
|
+ return tree.map(item => {
|
|
|
+ // 给每一层节点都加上 id 和 data
|
|
|
+ const formattedItem = {
|
|
|
+ children: item.children || [],
|
|
|
+ id: `org-${item.orgId}`,
|
|
|
+ data: {
|
|
|
+ name: item.orgName
|
|
|
+ }
|
|
|
};
|
|
|
- addSafetySystemVisible.value = true;
|
|
|
- };
|
|
|
|
|
|
-// id: 'root',
|
|
|
-// data: { name: '应急领导小组' },
|
|
|
-// children: [
|
|
|
-// {
|
|
|
-// id: 'group1',
|
|
|
-// data: { name: '应急指挥小组' },
|
|
|
-// },
|
|
|
-// {
|
|
|
-// id: 'group2',
|
|
|
-// data: { name: '应急响应小组' },
|
|
|
-// },
|
|
|
-// {
|
|
|
-// id: 'group3',
|
|
|
-// data: { name: '应急支援小组' },
|
|
|
-// },
|
|
|
-// ],
|
|
|
+ // 递归处理子节点
|
|
|
+ if (formattedItem.children && formattedItem.children.length > 0) {
|
|
|
+ formattedItem.children = formatTreeData(formattedItem.children);
|
|
|
+ }
|
|
|
+
|
|
|
+ return formattedItem;
|
|
|
+ });
|
|
|
+}
|
|
|
+ function convertData(leaderTeams): OrganizationTreeType {
|
|
|
+ return {
|
|
|
+ id: `org-${leaderTeams.orgId}`,
|
|
|
+ data: {
|
|
|
+ name: leaderTeams.orgName
|
|
|
+ },
|
|
|
+ children: leaderTeams.children?.map((child) => convertData(child)),
|
|
|
+ };
|
|
|
+ }
|
|
|
// 获取组织列表
|
|
|
const fetchSafetyOrganizationTeamList = async () => {
|
|
|
try {
|
|
|
const res = await getSafetySystemList();
|
|
|
fetchSafetyOrganizationList.value = res;
|
|
|
- // treeData.value = res.map(li=>({id:li.orgId,data:{name: li.orgName}}))
|
|
|
+ // 默认选择第一个组织
|
|
|
+ if(res[0].orgId){
|
|
|
+ treeNodePreview(res[0])
|
|
|
+ activeName.value = res[0].orgId
|
|
|
+ tableQuery.queryParam.classifyName = res[0].orgId
|
|
|
+ }
|
|
|
+
|
|
|
} catch (error) {
|
|
|
ElMessage.error('获取组织列表失败');
|
|
|
}
|
|
|
};
|
|
|
- // 定义组织数据类型
|
|
|
- interface SafetySystemFormData {
|
|
|
- value: string; // 输入的组织名称
|
|
|
- action: 'add' | 'edit'; // 操作类型:新增或编辑
|
|
|
- orgId?: string | number; // 组织ID(编辑时必传)
|
|
|
- parentid?: string | number; // 父组织ID(新增子组织时必传)
|
|
|
- type?: 'children' | 'parent'; // 组织类型(子组织或根组织)
|
|
|
+ // 给架构图赋值
|
|
|
+ const treeNodePreview = (data)=>{
|
|
|
+ let TreeNode = convertData(data)
|
|
|
+ treeData.value = TreeNode
|
|
|
}
|
|
|
|
|
|
- // 保存弹窗回调
|
|
|
- const confirmAddSafetySystemCallback = async (formData: SafetySystemFormData) => {
|
|
|
- try {
|
|
|
- if (!formData.value?.trim()) {
|
|
|
- ElMessage.warning('请输入有效的组织名称!');
|
|
|
- return;
|
|
|
- }
|
|
|
- const requestData = {
|
|
|
- orgName: formData.value.trim(),
|
|
|
- id: formData.action === 'edit' ? formData.orgId : undefined,
|
|
|
- parentid: formData.action === 'add' ? formData.parentid : undefined,
|
|
|
- };
|
|
|
- // console.log(formData, 'formData')
|
|
|
- if (formData.action === 'add') {
|
|
|
- if (formData.type === 'children' && formData.orgId) {
|
|
|
- requestData.parentid = formData.orgId;
|
|
|
- }
|
|
|
- await addSafetySystem(requestData);
|
|
|
- ElMessage.success('新增组织成功!');
|
|
|
- } else {
|
|
|
- // 如果是子类,补充父级ID
|
|
|
- if (formData.type === 'children' && formData.parentid) {
|
|
|
- requestData.parentid = formData.parentid;
|
|
|
- }
|
|
|
- await updateSafetySystem(requestData);
|
|
|
- ElMessage.success('编辑组织成功!');
|
|
|
- }
|
|
|
- // 刷新列表
|
|
|
- fetchSafetyOrganizationTeamList();
|
|
|
- } catch (error) {
|
|
|
- console.error('操作失败:', error);
|
|
|
- ElMessage.error(formData.action === 'add' ? '新增组织失败!' : '编辑组织失败!');
|
|
|
- }
|
|
|
+ // 一级新增
|
|
|
+ const addTeam = (type) => {
|
|
|
+ addSafetyOrganizationSystemFormData.value = {
|
|
|
+ type,
|
|
|
+ action: 'add',
|
|
|
+ };
|
|
|
+ addSafetySystemVisible.value = true;
|
|
|
};
|
|
|
- // 二级新增
|
|
|
+ // 子级新增
|
|
|
const handleCreateSafetySystem = async (type, value) => {
|
|
|
+ // console.log('新增参数--',type, value)
|
|
|
addSafetyOrganizationSystemFormData.value = {
|
|
|
- type,
|
|
|
+ type:'children',
|
|
|
action: 'add',
|
|
|
orgName: value.orgName,
|
|
|
orgId: value.orgId,
|
|
|
};
|
|
|
addSafetySystemVisible.value = true;
|
|
|
// 打开某一个
|
|
|
- activeName.value = value.orgId;
|
|
|
+ // activeName.value = value.orgId;
|
|
|
};
|
|
|
// 编辑
|
|
|
const handleEditSafetySystem = (type, value, parentid) => {
|
|
|
- // console.log(value)
|
|
|
+ // console.log('编辑参数--', type, value, parentid)
|
|
|
addSafetySystemVisible.value = true;
|
|
|
addSafetyOrganizationSystemFormData.value = {
|
|
|
type,
|
|
|
@@ -397,130 +273,183 @@ const position = ref('left')
|
|
|
parentid,
|
|
|
};
|
|
|
};
|
|
|
+
|
|
|
// 删除
|
|
|
const handleDelSafetySystem = async (type, value) => {
|
|
|
// console.log('删除', type, value)
|
|
|
ElMessageBox.confirm('确认删除该组织吗?', '警告', { type: 'warning' }).then(async () => {
|
|
|
try {
|
|
|
+ if(value.children.length > 0){
|
|
|
+ ElMessage.error('当前一级组织存在子级数据,无法删除,请先删除子级组织')
|
|
|
+ return
|
|
|
+ }
|
|
|
await deleteSafetySystem(value.orgId);
|
|
|
-
|
|
|
ElMessage.success('删除成功');
|
|
|
- // 刷新列表
|
|
|
+ // 刷新组织列表
|
|
|
fetchSafetyOrganizationTeamList();
|
|
|
- handleReset();
|
|
|
} catch (error) {
|
|
|
ElMessage.error(error || '删除失败');
|
|
|
}
|
|
|
});
|
|
|
};
|
|
|
// 查询
|
|
|
- const querySafetyTeamData = (type, value) => {
|
|
|
- console.log(type, '查询', value);
|
|
|
+ const querySafetyTeamData = (value) => {
|
|
|
+ // console.log('查询', value);
|
|
|
tableQuery.queryParam.classifyName = value.orgId;
|
|
|
- getTableData();
|
|
|
- };
|
|
|
- // 时间查询
|
|
|
- const onchangeDateRange = () => {
|
|
|
- if (dateRange.value && Array.isArray(dateRange.value) && dateRange.value.length === 2) {
|
|
|
- tableQuery.queryParam.startTime = dateRange.value[0] || '';
|
|
|
- tableQuery.queryParam.endTime = dateRange.value[1] || '';
|
|
|
- } else {
|
|
|
- tableQuery.queryParam.startTime = '';
|
|
|
- tableQuery.queryParam.endTime = '';
|
|
|
- }
|
|
|
- getTableData();
|
|
|
- };
|
|
|
- const handleSearch = () => {
|
|
|
- pagination.pageNumber = 1;
|
|
|
- tableQuery.pageNumber = 1;
|
|
|
- getTableData();
|
|
|
- };
|
|
|
-
|
|
|
- const handleReset = () => {
|
|
|
- pagination.pageNumber = 1;
|
|
|
- tableQuery.queryParam = {
|
|
|
- classifyName: '',
|
|
|
- keyword: '',
|
|
|
- status: '', // 重置为默认启用状态
|
|
|
- startTime: '',
|
|
|
- endTime: '',
|
|
|
- };
|
|
|
- dateRange.value = '';
|
|
|
- handleSearch();
|
|
|
- };
|
|
|
-
|
|
|
- // 批量导入
|
|
|
- const batchImportVisible = ref(false);
|
|
|
- const { urlPrefix } = useGlobSetting();
|
|
|
- const importApiUrl = ref(urlJoin(urlPrefix, '/safetyorguser/importSafetyOrgUser'));
|
|
|
- const templateUrl = ref('./skyeye-file-upload/sfysecurity/TEMPLATE/安全组织体系管理导入模版.xlsx');
|
|
|
-
|
|
|
- const handleImport = () => {
|
|
|
- batchImportVisible.value = true;
|
|
|
+ treeNodePreview(value)
|
|
|
};
|
|
|
|
|
|
- const handleUpdate = () => {
|
|
|
- batchImportVisible.value = false;
|
|
|
- getTableData();
|
|
|
- };
|
|
|
-
|
|
|
- const handleDownload = async () => {
|
|
|
+ // 定义组织数据类型
|
|
|
+ interface SafetySystemFormData {
|
|
|
+ value: string; // 输入的组织名称
|
|
|
+ action: 'add' | 'edit'; // 操作类型:新增或编辑
|
|
|
+ orgId?: string | number; // 组织ID(编辑时必传)
|
|
|
+ parentid?: string | number; // 父组织ID(新增子组织时必传)
|
|
|
+ type?: 'children' | 'parent'; // 组织类型(子组织或根组织)
|
|
|
+ }
|
|
|
+ // 保存弹窗回调
|
|
|
+ const confirmAddSafetySystemCallback = async (formData: SafetySystemFormData) => {
|
|
|
try {
|
|
|
- const response = await exportSafetyOrganizationSystemManagement(tableQuery.queryParam);
|
|
|
- if (response) {
|
|
|
- const fileName = `安全组织体系管理_${new Date().toISOString().split('T')[0]}.xlsx`;
|
|
|
- downloadByData(response, fileName);
|
|
|
- ElMessage.success('导出成功');
|
|
|
+ if (!formData.value?.trim()) {
|
|
|
+ ElMessage.warning('请输入有效的组织名称!');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 新增时,传orgName(组织名称)、parentid(父组织ID)
|
|
|
+ // 编辑时,传当前ID和orgName
|
|
|
+ const requestData = {
|
|
|
+ orgName: formData.value.trim(),
|
|
|
+ id: formData.action === 'edit' ? formData.orgId : undefined,
|
|
|
+ // 第一级不需要传parentid
|
|
|
+ parentid: formData.action === 'add' ? formData.parentid : undefined,
|
|
|
+ };
|
|
|
+ console.log(formData, '参数--formData')
|
|
|
+ if (formData.action === 'add') {
|
|
|
+ if (formData.type === 'children' && formData.orgId) {
|
|
|
+ requestData.parentid = formData.orgId;
|
|
|
+ }
|
|
|
+ await addSafetySystem(requestData);
|
|
|
+ ElMessage.success('新增组织成功!');
|
|
|
+ } else {
|
|
|
+ // 如果是子类,补充父级ID
|
|
|
+ if (formData.type === 'children' && formData.parentid) {
|
|
|
+ requestData.parentid = formData.parentid;
|
|
|
+ }
|
|
|
+ await updateSafetySystem(requestData);
|
|
|
+ ElMessage.success('编辑组织成功!');
|
|
|
}
|
|
|
- } catch (e) {
|
|
|
- console.error('导出安全组织体系管理失败:', e);
|
|
|
- ElMessage.error('导出失败,请重试');
|
|
|
+ // 刷新列表
|
|
|
+ fetchSafetyOrganizationTeamList();
|
|
|
+ } catch (error) {
|
|
|
+ console.error('操作失败:', error);
|
|
|
+ ElMessage.error(formData.action === 'add' ? '新增组织失败!' : '编辑组织失败!');
|
|
|
}
|
|
|
};
|
|
|
|
|
|
- const handleCreate = () => {
|
|
|
- router.push({
|
|
|
- name: 'SafetyOrganizationSystemManagementItem',
|
|
|
- query: {
|
|
|
- operate: 'employee-create',
|
|
|
- },
|
|
|
- });
|
|
|
- };
|
|
|
-
|
|
|
- const handleEdit = (id: number) => {
|
|
|
- router.push({
|
|
|
- name: 'SafetyOrganizationSystemManagementItem',
|
|
|
- query: {
|
|
|
- id,
|
|
|
- operate: 'employee-edit',
|
|
|
- },
|
|
|
- });
|
|
|
- };
|
|
|
-
|
|
|
- const handleDelete = async (id: number) => {
|
|
|
- try {
|
|
|
- await delEmployee(id);
|
|
|
- ElMessage.success('删除成功');
|
|
|
- getTableData();
|
|
|
- } catch (e) {
|
|
|
- console.error('删除员工失败:', e);
|
|
|
- ElMessage.error('删除失败,请重试');
|
|
|
- }
|
|
|
- };
|
|
|
+ const toStaff = ()=>{
|
|
|
+ router.push({name: 'securityOrganizationalStructure', query: {id: tableQuery.queryParam.classifyName}})
|
|
|
+ }
|
|
|
+ // 时间查询
|
|
|
+// const onchangeDateRange = () => {
|
|
|
+// if (dateRange.value && Array.isArray(dateRange.value) && dateRange.value.length === 2) {
|
|
|
+// tableQuery.queryParam.startTime = dateRange.value[0] || '';
|
|
|
+// tableQuery.queryParam.endTime = dateRange.value[1] || '';
|
|
|
+// } else {
|
|
|
+// tableQuery.queryParam.startTime = '';
|
|
|
+// tableQuery.queryParam.endTime = '';
|
|
|
+// }
|
|
|
+// getTableData();
|
|
|
+// };
|
|
|
+// const handleSearch = () => {
|
|
|
+// pagination.pageNumber = 1;
|
|
|
+// tableQuery.pageNumber = 1;
|
|
|
+// getTableData();
|
|
|
+// };
|
|
|
+
|
|
|
+// const handleReset = () => {
|
|
|
+// pagination.pageNumber = 1;
|
|
|
+// tableQuery.queryParam = {
|
|
|
+// classifyName: '',
|
|
|
+// keyword: '',
|
|
|
+// status: '', // 重置为默认启用状态
|
|
|
+// startTime: '',
|
|
|
+// endTime: '',
|
|
|
+// };
|
|
|
+// dateRange.value = '';
|
|
|
+// handleSearch();
|
|
|
+// };
|
|
|
|
|
|
- const handleView = (id: number) => {
|
|
|
- router.push({
|
|
|
- name: 'SafetyOrganizationSystemManagementItem',
|
|
|
- query: {
|
|
|
- id,
|
|
|
- operate: 'employee-view',
|
|
|
- },
|
|
|
- });
|
|
|
- };
|
|
|
+ // 批量导入
|
|
|
+// const batchImportVisible = ref(false);
|
|
|
+// const { urlPrefix } = useGlobSetting();
|
|
|
+// const importApiUrl = ref(urlJoin(urlPrefix, '/safetyorguser/importSafetyOrgUser'));
|
|
|
+// const templateUrl = ref('./skyeye-file-upload/sfysecurity/TEMPLATE/安全组织体系管理导入模版.xlsx');
|
|
|
+
|
|
|
+// const handleImport = () => {
|
|
|
+// batchImportVisible.value = true;
|
|
|
+// };
|
|
|
+
|
|
|
+// const handleUpdate = () => {
|
|
|
+// batchImportVisible.value = false;
|
|
|
+// getTableData();
|
|
|
+// };
|
|
|
+
|
|
|
+// const handleDownload = async () => {
|
|
|
+// try {
|
|
|
+// const response = await exportSafetyOrganizationSystemManagement(tableQuery.queryParam);
|
|
|
+// if (response) {
|
|
|
+// const fileName = `安全组织体系管理_${new Date().toISOString().split('T')[0]}.xlsx`;
|
|
|
+// downloadByData(response, fileName);
|
|
|
+// ElMessage.success('导出成功');
|
|
|
+// }
|
|
|
+// } catch (e) {
|
|
|
+// console.error('导出安全组织体系管理失败:', e);
|
|
|
+// ElMessage.error('导出失败,请重试');
|
|
|
+// }
|
|
|
+// };
|
|
|
+
|
|
|
+// const handleCreate = () => {
|
|
|
+// router.push({
|
|
|
+// name: 'SafetyOrganizationSystemManagementItem',
|
|
|
+// query: {
|
|
|
+// operate: 'employee-create',
|
|
|
+// },
|
|
|
+// });
|
|
|
+// };
|
|
|
+
|
|
|
+// const handleEdit = (id: number) => {
|
|
|
+// router.push({
|
|
|
+// name: 'SafetyOrganizationSystemManagementItem',
|
|
|
+// query: {
|
|
|
+// id,
|
|
|
+// operate: 'employee-edit',
|
|
|
+// },
|
|
|
+// });
|
|
|
+// };
|
|
|
+
|
|
|
+// const handleDelete = async (id: number) => {
|
|
|
+// try {
|
|
|
+// await delEmployee(id);
|
|
|
+// ElMessage.success('删除成功');
|
|
|
+// getTableData();
|
|
|
+// } catch (e) {
|
|
|
+// console.error('删除员工失败:', e);
|
|
|
+// ElMessage.error('删除失败,请重试');
|
|
|
+// }
|
|
|
+// };
|
|
|
+
|
|
|
+// const handleView = (id: number) => {
|
|
|
+// router.push({
|
|
|
+// name: 'SafetyOrganizationSystemManagementItem',
|
|
|
+// query: {
|
|
|
+// id,
|
|
|
+// operate: 'employee-view',
|
|
|
+// },
|
|
|
+// });
|
|
|
+// };
|
|
|
|
|
|
onMounted(() => {
|
|
|
fetchSafetyOrganizationTeamList();
|
|
|
- getTableData();
|
|
|
+ // getTableData();
|
|
|
});
|
|
|
</script>
|
|
|
|
|
|
@@ -529,8 +458,12 @@ const position = ref('left')
|
|
|
@use '@/styles/page-main-layout.scss' as *;
|
|
|
@use '@/styles/basic-table-action.scss' as *;
|
|
|
@use '@/views/traffic/violation/style/act-search-table.scss' as *;
|
|
|
- .table-content {
|
|
|
- }
|
|
|
+ .text-right{
|
|
|
+ text-align: right;
|
|
|
+ }
|
|
|
+ .mb-4{
|
|
|
+ margin-bottom: 12px;
|
|
|
+ }
|
|
|
.nav {
|
|
|
flex: 0 0 300px;
|
|
|
margin-right: 15px;
|