瀏覽代碼

reactor:优化左右布局可拖动;

zhangchong 1 年之前
父節點
當前提交
f488c2d05b

+ 1 - 0
package.json

@@ -33,6 +33,7 @@
 		"qs": "^6.11.0",
 		"screenfull": "^6.0.2",
 		"sortablejs": "^1.15.0",
+		"splitpanes": "^3.1.5",
 		"vue": "^3.2.45",
 		"vue-router": "^4.1.6",
 		"vue3-seamless-scroll": "^2.0.1",

+ 1 - 0
src/theme/index.scss

@@ -7,3 +7,4 @@
 @import './waves.scss';
 @import './dark.scss';
 @import "./iconfont/iconfont.css";
+@import "./splitpanes.css";

+ 31 - 0
src/theme/splitpanes.css

@@ -0,0 +1,31 @@
+.splitpanes {
+	background-color: var(--el-color-white);
+}
+
+.splitpanes__splitter {
+	background-color: var(--el-border-color);
+	position: relative;
+	margin:0 10px;
+}
+.splitpanes__splitter:before {
+	content: '';
+	position: absolute;
+	left: 0;
+	top: 0;
+	transition: opacity 0.4s;
+	opacity: 0;
+	z-index: 1;
+}
+.splitpanes__splitter:hover:before {
+	opacity: 1;
+}
+.splitpanes--vertical > .splitpanes__splitter:before {
+	left: -5px;
+	right: -5px;
+	height: 100%;
+}
+.splitpanes--horizontal > .splitpanes__splitter:before {
+	top: -5px;
+	bottom: -5px;
+	width: 100%;
+}

+ 83 - 82
src/views/knowledge/index/index.vue

@@ -1,77 +1,75 @@
 <template>
 	<div class="knowledge-index-container layout-padding">
 		<el-card shadow="never" class="h100">
-			<el-row :gutter="20" class="h100">
-				<el-col :xs="6" :sm="6" :md="6" :lg="4" :xl="4" class="orgTree">
-					<div class="h100 pr10">
-						<el-tabs v-model="state.activeName" stretch @tab-change="resetNode">
-							<el-tab-pane label="部门" name="0">
-								<el-input v-model="filterOrg" placeholder="请输入部门名称" class="input-with-select mt10 mb10" clearable @input="onQueryChanged">
-								</el-input>
-							</el-tab-pane>
-							<el-tab-pane label="知识分类" name="1">
-								<el-input v-model="filterType" placeholder="请输入知识分类名称" class="input-with-select mt10 mb10" clearable> </el-input>
-							</el-tab-pane>
-							<el-tab-pane label="热点" name="2">
-								<el-input v-model="filterHot" placeholder="请输入热点名称" class="input-with-select mt10 mb10" clearable> </el-input>
-							</el-tab-pane>
-						</el-tabs>
-						<el-scrollbar style="height: calc(100% - 100px);'" ref="scrollBarRef">
-							<el-tree-v2
-								v-show="state.activeName === '0'"
-								:data="state.orgData"
-								highlight-current
-								:expand-on-click-node="false"
-								:props="{ children: 'children', label: 'name' }"
-								@node-click="handleNodeClick"
-								ref="orgRef"
-								:filter-method="filterNode"
-								:item-size="40"
-								:height="treeHeight"
-								empty-text="暂无组织数据"
-							>
-								<template #default="{ node }">
-									<span :title="node.label">{{ node.label }}</span>
-								</template>
-							</el-tree-v2>
-							<el-tree
-								:data="state.knowledgeOptions"
-								highlight-current
-								:expand-on-click-node="false"
-								:props="{ children: 'children', label: 'name' }"
-								@node-click="handleNodeClick"
-								ref="typeRef"
-								v-loading="state.loading"
-								:filter-node-method="filterNodeType"
-								node-key="id"
-								:style="state.activeName === '1' ? 'min-width: 100%; display: inline-block' : 'display:none'"
-								:default-expanded-keys="state.defaultExpandedTypeKeys"
-							>
-							</el-tree>
-							<el-tree
-								filterable
-								highlight-current
-								placeholder="请选择热点分类"
-								:props="HotspotProps"
-								@node-click="handleNodeClick"
-								lazy
-								:load="load"
-								node-key="id"
-								ref="hotRef"
-								:filter-node-method="filterNodeHot"
-								:expand-on-click-node="false"
-								:style="state.activeName === '2' ? 'min-width: 100%; display: inline-block' : 'display:none'"
-							>
-								<template #default="{ data }">
-									<span :title="data.hotSpotName">
-										{{ data.hotSpotName }}
-									</span>
-								</template>
-							</el-tree>
-						</el-scrollbar>
-					</div>
-				</el-col>
-				<el-col :xs="18" :sm="18" :md="18" :lg="20" :xl="20" class="rightContent">
+			<splitpanes class="h100" :horizontal="horizontal">
+				<pane min-size="16" max-size="25" size="16">
+					<el-tabs v-model="state.activeName" stretch @tab-change="resetNode">
+						<el-tab-pane label="部门" name="0">
+							<el-input v-model="filterOrg" placeholder="请输入部门名称" class="input-with-select mt10 mb10" clearable @input="onQueryChanged">
+							</el-input>
+						</el-tab-pane>
+						<el-tab-pane label="知识分类" name="1">
+							<el-input v-model="filterType" placeholder="请输入知识分类名称" class="input-with-select mt10 mb10" clearable> </el-input>
+						</el-tab-pane>
+						<el-tab-pane label="热点" name="2">
+							<el-input v-model="filterHot" placeholder="请输入热点名称" class="input-with-select mt10 mb10" clearable> </el-input>
+						</el-tab-pane>
+					</el-tabs>
+					<el-scrollbar style="height: calc(100% - 100px);'" ref="scrollBarRef">
+						<el-tree-v2
+							v-show="state.activeName === '0'"
+							:data="state.orgData"
+							highlight-current
+							:expand-on-click-node="false"
+							:props="{ children: 'children', label: 'name' }"
+							@node-click="handleNodeClick"
+							ref="orgRef"
+							:filter-method="filterNode"
+							:item-size="40"
+							:height="treeHeight"
+							empty-text="暂无组织数据"
+						>
+							<template #default="{ node }">
+								<span :title="node.label">{{ node.label }}</span>
+							</template>
+						</el-tree-v2>
+						<el-tree
+							:data="state.knowledgeOptions"
+							highlight-current
+							:expand-on-click-node="false"
+							:props="{ children: 'children', label: 'name' }"
+							@node-click="handleNodeClick"
+							ref="typeRef"
+							v-loading="state.loading"
+							:filter-node-method="filterNodeType"
+							node-key="id"
+							:style="state.activeName === '1' ? 'min-width: 100%; display: inline-block' : 'display:none'"
+							:default-expanded-keys="state.defaultExpandedTypeKeys"
+						>
+						</el-tree>
+						<el-tree
+							filterable
+							highlight-current
+							placeholder="请选择热点分类"
+							:props="HotspotProps"
+							@node-click="handleNodeClick"
+							lazy
+							:load="load"
+							node-key="id"
+							ref="hotRef"
+							:filter-node-method="filterNodeHot"
+							:expand-on-click-node="false"
+							:style="state.activeName === '2' ? 'min-width: 100%; display: inline-block' : 'display:none'"
+						>
+							<template #default="{ data }">
+								<span :title="data.hotSpotName">
+									{{ data.hotSpotName }}
+								</span>
+							</template>
+						</el-tree>
+					</el-scrollbar>
+				</pane>
+				<pane>
 					<el-scrollbar class="pr10 scrollbar__view">
 						<el-tabs v-model="state.queryParams.Status" @tab-change="handleClick">
 							<el-tab-pane label="全部" name=" "></el-tab-pane>
@@ -201,15 +199,15 @@
 										上架
 									</el-button>
 									<!--									<el-button
-										link
-										type="primary"
-										@click="onAudit(row)"
-										title="审批"
-										v-if="[1, 2].includes(row.status) && row.isCanHandle"
-										v-auth="'business:order:handle'"
-									>
-										审批
-									</el-button>-->
+                    link
+                    type="primary"
+                    @click="onAudit(row)"
+                    title="审批"
+                    v-if="[1, 2].includes(row.status) && row.isCanHandle"
+                    v-auth="'business:order:handle'"
+                  >
+                    审批
+                  </el-button>-->
 									<el-button link type="primary" @click="onPreview(row)" title="查看" v-if="[1, 2, 3, 4, 5, 6].includes(row.newStatus)">
 										查看
 									</el-button>
@@ -228,8 +226,8 @@
 						/>
 						<el-backtop target=".scrollbar__view > div" />
 					</el-scrollbar>
-				</el-col>
-			</el-row>
+				</pane>
+			</splitpanes>
 		</el-card>
 		<!-- 流程审批 -->
 		<process-audit ref="processAuditRef" @orderProcessSuccess="queryList" />
@@ -247,6 +245,8 @@ import { KnowledgePaged, KnowledgeOffShelf, KnowledgeOnTheShelf, baseData, Knowl
 import { getOrgList } from '/@/api/system/organize';
 import { treeList } from '/@/api/knowledge/type';
 import { hotSpotType } from '/@/api/business/order';
+import { Splitpanes, Pane } from 'splitpanes';
+import 'splitpanes/dist/splitpanes.css';
 
 // 引入组件
 const ProcessAudit = defineAsyncComponent(() => import('/@/components/ProcessAudit/index.vue')); // 流程审批
@@ -275,6 +275,7 @@ const state = reactive<any>({
 });
 const router = useRouter(); //路由
 const ruleFormRef = ref<FormInstance>(); //表单ref
+const horizontal = ref(false);
 // 热点分类远程搜索
 const HotspotProps = {
 	label: 'hotSpotFullName',

+ 81 - 84
src/views/knowledge/retrieval/index.vue

@@ -6,77 +6,75 @@
 				<el-tab-pane label="中心知识库" name="中心知识库"></el-tab-pane>
 				<el-tab-pane label="部门知识库" name="部门知识库"></el-tab-pane>
 			</el-tabs>
-			<el-row :gutter="20" class="h100">
-				<el-col :xs="6" :sm="6" :md="6" :lg="4" :xl="4" class="left-container">
-					<div class="h100 pr10">
-						<el-tabs v-model="state.activeName" stretch @tab-change="resetNode">
-							<el-tab-pane label="部门" name="0">
-								<el-input v-model="filterOrg" placeholder="请输入部门名称" class="input-with-select mt10 mb10" clearable @input="onQueryChanged"> </el-input>
-							</el-tab-pane>
-							<el-tab-pane label="知识分类" name="1">
-								<el-input v-model="filterType" placeholder="请输入知识分类名称" class="input-with-select mt10 mb10" clearable> </el-input>
-							</el-tab-pane>
-							<el-tab-pane label="热点" name="2">
-								<el-input v-model="filterHot" placeholder="请输入热点名称" class="input-with-select mt10 mb10" clearable> </el-input>
-							</el-tab-pane>
-						</el-tabs>
-						<el-scrollbar style="height: calc(100% - 100px);'" ref="scrollBarRef">
-							<el-tree-v2
-								v-show="state.activeName === '0'"
-								:data="state.orgData"
-								highlight-current
-								:expand-on-click-node="false"
-								:props="{ children: 'children', label: 'name' }"
-								@node-click="handleNodeClick"
-								ref="orgRef"
-								:filter-method="filterNode"
-								:item-size="40"
-								:height="treeHeight"
-								empty-text="暂无组织数据"
-							>
-								<template #default="{ node }">
-									<span :title="node.label">{{ node.label }}</span>
-								</template>
-							</el-tree-v2>
-							<el-tree
-								:data="state.knowledgeOptions"
-								highlight-current
-								:expand-on-click-node="false"
-								:props="{ children: 'children', label: 'name' }"
-								@node-click="handleNodeClick"
-								ref="typeRef"
-								v-loading="state.loading"
-								:filter-node-method="filterNodeType"
-								node-key="id"
-								:style="state.activeName === '1' ? 'min-width: 100%; display: inline-block' : 'display:none'"
-								:default-expanded-keys="state.defaultExpandedTypeKeys"
-							>
-							</el-tree>
-							<el-tree
-								filterable
-								highlight-current
-								placeholder="请选择热点分类"
-								:props="HotspotProps"
-								@node-click="handleNodeClick"
-								lazy
-								:load="load"
-								node-key="id"
-								ref="hotRef"
-								:filter-node-method="filterNodeHot"
-								:expand-on-click-node="false"
-								:style="state.activeName === '2' ? 'min-width: 100%; display: inline-block' : 'display:none'"
-							>
-								<template #default="{ data }">
-									<span :title="data.hotSpotName">
-										{{ data.hotSpotName }}
-									</span>
-								</template>
-							</el-tree>
-						</el-scrollbar>
-					</div>
-				</el-col>
-
-				<el-col :xs="12" :sm="12" :md="14" :lg="14" :xl="14" class="center-container">
+			<splitpanes class="h100" Vertical>
+				<pane min-size="16" max-size="25" size="16" class="left-container">
+					<el-tabs v-model="state.activeName" stretch @tab-change="resetNode">
+						<el-tab-pane label="部门" name="0">
+							<el-input v-model="filterOrg" placeholder="请输入部门名称" class="input-with-select mt10 mb10" clearable @input="onQueryChanged">
+							</el-input>
+						</el-tab-pane>
+						<el-tab-pane label="知识分类" name="1">
+							<el-input v-model="filterType" placeholder="请输入知识分类名称" class="input-with-select mt10 mb10" clearable> </el-input>
+						</el-tab-pane>
+						<el-tab-pane label="热点" name="2">
+							<el-input v-model="filterHot" placeholder="请输入热点名称" class="input-with-select mt10 mb10" clearable> </el-input>
+						</el-tab-pane>
+					</el-tabs>
+					<el-scrollbar style="height: calc(100% - 100px);'" ref="scrollBarRef">
+						<el-tree-v2
+							v-show="state.activeName === '0'"
+							:data="state.orgData"
+							highlight-current
+							:expand-on-click-node="false"
+							:props="{ children: 'children', label: 'name' }"
+							@node-click="handleNodeClick"
+							ref="orgRef"
+							:filter-method="filterNode"
+							:item-size="40"
+							:height="treeHeight"
+							empty-text="暂无组织数据"
+						>
+							<template #default="{ node }">
+								<span :title="node.label">{{ node.label }}</span>
+							</template>
+						</el-tree-v2>
+						<el-tree
+							:data="state.knowledgeOptions"
+							highlight-current
+							:expand-on-click-node="false"
+							:props="{ children: 'children', label: 'name' }"
+							@node-click="handleNodeClick"
+							ref="typeRef"
+							v-loading="state.loading"
+							:filter-node-method="filterNodeType"
+							node-key="id"
+							:style="state.activeName === '1' ? 'min-width: 100%; display: inline-block' : 'display:none'"
+							:default-expanded-keys="state.defaultExpandedTypeKeys"
+						>
+						</el-tree>
+						<el-tree
+							filterable
+							highlight-current
+							placeholder="请选择热点分类"
+							:props="HotspotProps"
+							@node-click="handleNodeClick"
+							lazy
+							:load="load"
+							node-key="id"
+							ref="hotRef"
+							:filter-node-method="filterNodeHot"
+							:expand-on-click-node="false"
+							:style="state.activeName === '2' ? 'min-width: 100%; display: inline-block' : 'display:none'"
+						>
+							<template #default="{ data }">
+								<span :title="data.hotSpotName">
+									{{ data.hotSpotName }}
+								</span>
+							</template>
+						</el-tree>
+					</el-scrollbar>
+				</pane>
+				<pane class="center-container">
 					<div class="input-box">
 						<el-select v-model="state.queryParams.RetrievalType" placeholder="请选择" style="width: 120px" @change="queryList">
 							<el-option label="全文" :value="0" />
@@ -157,9 +155,8 @@
 						v-model:limit="state.queryParams.PageSize"
 						@pagination="queryList"
 					/>
-				</el-col>
-
-				<el-col :xs="6" :sm="6" :md="6" :lg="6" :xl="6" class="right-container">
+				</pane>
+				<pane min-size="20" max-size="30" size="20" class="right-container">
 					<p class="flex-center-between pt10">
 						<span class="font16">常用知识前10</span>
 						<el-button link type="primary" @click="querySearchNum"><SvgIcon name="ele-Refresh" class="mr4" /> 刷新</el-button>
@@ -184,8 +181,8 @@
 							<Empty />
 						</template>
 					</div>
-				</el-col>
-			</el-row>
+				</pane>
+			</splitpanes>
 		</el-card>
 	</div>
 </template>
@@ -201,6 +198,8 @@ import { getOrgList } from '/@/api/system/organize';
 import { treeList } from '/@/api/knowledge/type';
 import { formatDate } from '/@/utils/formatTime';
 import { throttle } from '/@/utils/tools';
+import { Splitpanes, Pane } from 'splitpanes';
+import 'splitpanes/dist/splitpanes.css';
 
 const state = reactive<any>({
 	queryParams: {
@@ -240,12 +239,12 @@ const load = async (node: any, resolve: any) => {
 const filterOrg = ref('');
 const orgRef = ref<RefType>();
 const onQueryChanged = (query: string) => {
-  if (query) {
-    orgRef.value!.filter(query);
-  } else {
-    orgRef.value!.filter(query);
-    orgRef.value?.setExpandedKeys([]);
-  }
+	if (query) {
+		orgRef.value!.filter(query);
+	} else {
+		orgRef.value!.filter(query);
+		orgRef.value?.setExpandedKeys([]);
+	}
 };
 const filterNode = (value: string, data: any) => {
 	if (!value) return true;
@@ -427,11 +426,9 @@ onActivated(() => {
 <style scoped lang="scss">
 .knowledge-retrieval-container {
 	.left-container {
-		border-right: 1px solid var(--el-border-color);
 		height: 100%;
 	}
 	.center-container {
-		border-right: 1px solid var(--el-border-color);
 		height: 100%;
 		.input-box {
 			display: flex;

+ 16 - 17
src/views/system/config/dict/index.vue

@@ -1,9 +1,8 @@
 <template>
 	<div class="system-dict-container layout-padding">
 		<div class="layout-padding-auto layout-padding-view pd20">
-			<el-row :gutter="20" class="h100">
-				<!-- 左侧组织树 -->
-				<el-col :xs="6" :sm="6" :md="6" :lg="4" :xl="4" class="orgTree">
+			<splitpanes class="h100" Vertical>
+				<pane min-size="16" max-size="25" size="16" class="orgTree">
 					<el-input v-model="filterText" placeholder="类型名称" clearable />
 					<el-scrollbar style="height: calc(100% - 40px)" class="pr10 mt10">
 						<template v-if="state.dicTypeList.length">
@@ -26,9 +25,8 @@
 							<Empty description="暂无字典类型" />
 						</template>
 					</el-scrollbar>
-				</el-col>
-				<!-- 右侧表格 -->
-				<el-col :xs="18" :sm="18" :md="18" :lg="20" :xl="20" class="rightContent">
+				</pane>
+				<pane class="rightContent">
 					<el-scrollbar class="pr10">
 						<div class="flex-column">
 							<el-row class="mb20" :gutter="10">
@@ -76,7 +74,7 @@
 										fixed
 										:width="width"
 										:height="height"
-                    ref="virtuallyTableRef"
+										ref="virtuallyTableRef"
 									>
 										<template #empty>
 											<Empty />
@@ -86,21 +84,23 @@
 							</el-auto-resizer>
 						</div>
 					</el-scrollbar>
-				</el-col>
-			</el-row>
+				</pane>
+			</splitpanes>
 		</div>
 		<dict-add ref="dictAddRef" @updateList="handleQuery" :dicTypeList="state.dicTypeList" />
 		<dict-edit ref="dickEditRef" @updateList="handleQuery" :dicTypeList="state.dicTypeList" />
 	</div>
 </template>
 <script lang="tsx" setup name="systemDict">
-import {defineAsyncComponent, onActivated, onMounted, reactive, ref, watch} from 'vue';
+import { defineAsyncComponent, onActivated, onMounted, reactive, ref, watch } from 'vue';
 import type { FormInstance } from 'element-plus';
 import { ElMessage } from 'element-plus';
 import { formatDate } from '/@/utils/formatTime';
 import { auth } from '/@/utils/authFunction';
 import other from '/@/utils/other';
 import { dicTypeList, getDataByTypeId } from '/@/api/system/dict';
+import { Splitpanes, Pane } from 'splitpanes';
+import 'splitpanes/dist/splitpanes.css';
 
 // 引入组件
 const DictAdd = defineAsyncComponent(() => import('/@/views/system/config/dict/component/Dict-add.vue')); // 新增组件
@@ -187,7 +187,7 @@ const handleQuery = () => {
 		state.expandedRowKeys = getExpand(state.tableData);
 		state.tableLoading = false;
 	} else {
-		getList();
+		queryList();
 	}
 };
 const expand = () => {
@@ -218,7 +218,7 @@ const getDictTypeList = () => {
 			.then((res: any) => {
 				state.dicTypeList = res?.result ?? [];
 				state.queryParams.typeid = res?.result[0].id ?? '';
-				getList();
+				queryList();
 				state.loading = false;
 			})
 			.catch(() => {
@@ -227,7 +227,7 @@ const getDictTypeList = () => {
 	}
 };
 /* 获取字典列表 */
-const getList = () => {
+const queryList = () => {
 	if (!auth('system:dict:query')) ElMessage.error('抱歉,您没有权限获取字典列表!');
 	else {
 		state.tableLoading = true;
@@ -293,7 +293,7 @@ const onOpenEditUser = (row: any) => {
 const resetQuery = (formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.resetFields();
-	getList();
+	queryList();
 	state.expandedRowKeys = [];
 	emptyArr = [];
 };
@@ -329,18 +329,17 @@ onMounted(() => {
 });
 const virtuallyTableRef = ref<RefType>();
 onActivated(() => {
-  virtuallyTableRef.value.scrollToTop(0); // 回到顶部
+	virtuallyTableRef.value.scrollToTop(0); // 回到顶部
 });
 </script>
 <style lang="scss" scoped>
 .system-dict-container {
 	.orgTree {
-		border-right: 1px solid var(--el-border-color);
 		height: 100%;
 	}
-
 	.rightContent {
 		height: 100%;
+    width: 100%;
 		.flex-column {
 			display: flex;
 			flex-direction: column;

+ 29 - 31
src/views/system/user/index.vue

@@ -1,34 +1,30 @@
 <template>
 	<div class="system-user-container layout-padding">
 		<div class="layout-padding-auto layout-padding-view pd20">
-			<el-row :gutter="20" class="h100">
-				<!-- 左侧组织树 -->
-				<el-col :xs="6" :sm="6" :md="6" :lg="4" :xl="4" class="orgTree" v-loading="state.loading">
-					<div class="h100 pr10">
-						<el-input v-model="filterOrg" placeholder="请输入部门名称" class="input-with-select mt10 mb10" clearable @input="onQueryChanged">
-						</el-input>
-						<el-scrollbar style="height: calc(100% - 40px);'" ref="scrollBarRef">
-							<el-tree-v2
-								:data="state.orgData"
-								:filter-method="filterNodeOrg"
-								ref="treRef"
-								highlight-current
-								:expand-on-click-node="false"
-								@node-click="handleNodeClick"
-								:item-size="40"
-								:height="treeHeight"
-								empty-text="暂无组织数据"
-								:props="{ label: 'name', value: 'id' }"
-							>
-								<template #default="{ node }">
-									<span>{{ node.label }}</span>
-								</template>
-							</el-tree-v2>
-						</el-scrollbar>
-					</div>
-				</el-col>
-				<!-- 右侧表格 -->
-				<el-col :xs="18" :sm="18" :md="18" :lg="20" :xl="20" class="h100">
+			<splitpanes class="h100" Vertical>
+				<pane min-size="16" max-size="25" size="16">
+					<el-input v-model="filterOrg" placeholder="请输入部门名称" class="input-with-select mt10 mb10" clearable @input="onQueryChanged">
+					</el-input>
+					<el-scrollbar style="height: calc(100% - 40px);'" ref="scrollBarRef">
+						<el-tree-v2
+							:data="state.orgData"
+							:filter-method="filterNodeOrg"
+							ref="treRef"
+							highlight-current
+							:expand-on-click-node="false"
+							@node-click="handleNodeClick"
+							:item-size="40"
+							:height="treeHeight"
+							empty-text="暂无组织数据"
+							:props="{ label: 'name', value: 'id' }"
+						>
+							<template #default="{ node }">
+								<span>{{ node.label }}</span>
+							</template>
+						</el-tree-v2>
+					</el-scrollbar>
+				</pane>
+				<pane>
 					<el-scrollbar class="pr10 scrollbar__view" ref="rightScrollRef">
 						<el-form :model="state.queryParams" ref="ruleFormRef" :inline="true" @submit.native.prevent>
 							<el-form-item label="关键字" prop="Keyword">
@@ -102,8 +98,8 @@
 						/>
 						<el-backtop target=".scrollbar__view > div" />
 					</el-scrollbar>
-				</el-col>
-			</el-row>
+				</pane>
+			</splitpanes>
 		</div>
 		<user-add
 			ref="userAddRef"
@@ -125,7 +121,7 @@
 </template>
 
 <script lang="ts" setup name="systemUser">
-import { computed, defineAsyncComponent, nextTick, onActivated, onMounted, reactive, ref, watch } from 'vue';
+import { defineAsyncComponent, nextTick, onActivated, onMounted, reactive, ref, watch } from 'vue';
 import type { FormInstance } from 'element-plus';
 import { ElMessage, ElMessageBox } from 'element-plus';
 import { formatDate } from '/@/utils/formatTime';
@@ -133,6 +129,8 @@ import { auth } from '/@/utils/authFunction';
 import { throttle } from '/@/utils/tools';
 import { delUser, getBaseData, getCanUseOrg, getRoles, getUserListPaged, restPwd } from '/@/api/system/user';
 import { getTelList } from '/@/api/public/wex';
+import { Splitpanes, Pane } from 'splitpanes';
+import 'splitpanes/dist/splitpanes.css';
 
 // 引入组件
 const UserAdd = defineAsyncComponent(() => import('/@/views/system/user/component/User-add.vue')); // 新增用户组件