From 44f5d94e592a3b4e1b14c56f642dcc05e3414062 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E8=AF=BA?= <1253070437@qq.com>
Date: Thu, 6 Jul 2023 01:30:45 +0800
Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=8D=87=E7=BA=A7=E3=80=91=E6=96=B0?=
 =?UTF-8?q?=E5=A2=9ExnPageSelect=E5=88=86=E9=A1=B5=E7=BB=84=E4=BB=B6?=
 =?UTF-8?q?=EF=BC=8C=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86=E5=9D=87=E5=B7=B2?=
 =?UTF-8?q?=E4=BD=BF=E7=94=A8=E8=AF=A5=E6=96=B0=E7=BB=84=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
 .../src/components/XnPageSelect/index.vue     | 144 +++++++++++++++
 snowy-admin-web/src/views/biz/user/form.vue   | 170 +++++++++---------
 snowy-admin-web/src/views/sys/user/form.vue   | 158 ++++++++--------
 3 files changed, 319 insertions(+), 153 deletions(-)
 create mode 100644 snowy-admin-web/src/components/XnPageSelect/index.vue
diff --git a/snowy-admin-web/src/components/XnPageSelect/index.vue b/snowy-admin-web/src/components/XnPageSelect/index.vue
new file mode 100644
index 00000000..f1f67b8d
--- /dev/null
+++ b/snowy-admin-web/src/components/XnPageSelect/index.vue
@@ -0,0 +1,144 @@
+
+	
+		
+	
+
+
+
diff --git a/snowy-admin-web/src/views/biz/user/form.vue b/snowy-admin-web/src/views/biz/user/form.vue
index f2a829e2..16519683 100644
--- a/snowy-admin-web/src/views/biz/user/form.vue
+++ b/snowy-admin-web/src/views/biz/user/form.vue
@@ -76,28 +76,26 @@
 						
 						
 							
-								
-								
+									:page-function="selectApiFunction.positionSelector"
+									:echo-function="selectApiFunction.echoPosition"
+								/>
 							
 						
 						
 							
-								
-								
+									:page-function="selectApiFunction.userSelector"
+									:echo-function="selectApiFunction.echoUser"
+								/>
 							
 						
 					
@@ -139,7 +137,6 @@
 									>
 										
 									
 								
@@ -157,28 +154,26 @@
 										:name="['positionJson', index, 'positionId']"
 										:rules="{ required: true, message: '请选择岗位' }"
 									>
-										
-										
+											:page-function="selectApiFunction.childPositionSelector"
+											:echo-function="selectApiFunction.echoPosition"
+										/>
 									
 								
 								
 									
-										
-										
+											:page-function="selectApiFunction.childUserSelector"
+											:echo-function="selectApiFunction.echoUser"
+										/>
 									
 								
 								
@@ -331,27 +326,26 @@
 	import bizUserApi from '@/api/biz/bizUserApi'
 	import { required } from '@/utils/formRules'
 	import tool from '@/utils/tool'
+	import userCenterApi from '@/api/sys/userCenterApi'
 	// 默认是关闭状态
-	let visible = $ref(false)
+	const visible = ref(false)
 	const formRef = ref()
 	const activeTabsKey = ref('1')
 	const emit = defineEmits({ successful: null })
 	const formLoading = ref(false)
 	const treeData = ref([])
 	const treeDefaultExpandedKeys = ref([])
-	// 主职职位数据
-	let positionData = ref([])
-	// 主职主管人员数据
-	let directorData = ref([])
-
-	// 定义一个装机构跟职位的壳
-	let childrenOrgPosArray = ref([])
+	// 分页select组件dom定义
+	const xnPositionPageSelectRef = ref()
+	const xnUserPageSelectRef = ref()
+	const xnChildPositionPageSelectRef = ref()
+	const xnChildUserPageSelectRef = ref()
 	// 表单数据
-	let formData = ref({})
+	const formData = ref({})
 
 	// 打开抽屉
 	const onOpen = (record, orgId) => {
-		visible = true
+		visible.value = true
 		formData.value = {
 			gender: '男',
 			positionJson: []
@@ -392,9 +386,7 @@
 	const onClose = () => {
 		treeData.value = []
 		treeDefaultExpandedKeys.value = []
-		positionData.value = []
-		directorData.value = []
-		visible = false
+		visible.value = false
 	}
 	// 回显数据
 	const convertFormData = (record) => {
@@ -404,14 +396,18 @@
 		// 查询详情
 		bizUserApi.userDetail(param).then((data) => {
 			if (data.positionJson) {
-				const positionJsonLocal = JSON.parse(data.positionJson).map((item) => {
-					childOrgSelect(item)
-					return item
-				})
 				// 替换表单中的格式与后端查到的
-				data.positionJson = positionJsonLocal
+				data.positionJson = JSON.parse(data.positionJson)
 			}
 			formData.value = Object.assign(formData.value, data)
+			// 这里再写一次是因为上面需要先加载增行,下面再进行循环赋值
+			if (data.positionJson) {
+				// 遍历进行补充
+				data.positionJson.map((item, index) => {
+					childOrgSelect(item, 1, index)
+					return item
+				})
+			}
 			selePositionData(formData.value.orgId)
 		})
 	}
@@ -426,16 +422,14 @@
 	// 机构选择后查询对应的职位
 	const selePositionData = (orgId, type) => {
 		if (orgId) {
-			const param = {
-				orgId: orgId,
-				size: -1
+			const xnPositionPageSelectParam = {
+				orgId: orgId
 			}
-			bizUserApi.userPositionSelector(param).then((data) => {
-				positionData.value = data.records
-			})
-			bizUserApi.userSelector().then((data) => {
-				directorData.value = data.records
-			})
+			xnPositionPageSelectRef.value.onPage(xnPositionPageSelectParam)
+			const xnUserPageSelectParam = {
+				orgId: orgId
+			}
+			xnUserPageSelectRef.value.onPage(xnUserPageSelectParam)
 			// 此类型代表选择的时候重置后面的职位
 			if (type === 0) {
 				formData.value.positionId = undefined
@@ -446,6 +440,40 @@
 			formData.value.directorId = undefined
 		}
 	}
+	// 传递选择组件需要的API
+	const selectApiFunction = {
+		positionSelector: (param) => {
+			return bizUserApi.userPositionSelector(param).then((data) => {
+				return Promise.resolve(data)
+			})
+		},
+		userSelector: (param) => {
+			return bizUserApi.userSelector(param).then((data) => {
+				return Promise.resolve(data)
+			})
+		},
+		childPositionSelector: (param) => {
+			return bizUserApi.userPositionSelector(param).then((data) => {
+				return Promise.resolve(data)
+			})
+		},
+		childUserSelector: (param) => {
+			return bizUserApi.userSelector(param).then((data) => {
+				return Promise.resolve(data)
+			})
+		},
+		// 通过id回显数据接口
+		echoPosition: (param) => {
+			return userCenterApi.userCenterGetPositionListByIdList(param).then((data) => {
+				return Promise.resolve(data)
+			})
+		},
+		echoUser: (param) => {
+			return userCenterApi.userCenterGetUserListByIdList(param).then((data) => {
+				return Promise.resolve(data)
+			})
+		}
+	}
 	// 附属职位信息增行
 	const addDomains = () => {
 		if (formData.value.positionJson === null) {
@@ -462,11 +490,11 @@
 		formData.value.positionJson.splice(index, 1)
 	}
 	// 子表行内选择机构
-	const childOrgSelect = async (data, type) => {
+	const childOrgSelect = async (data, type, index) => {
 		// 说明正在切换机构,我们就将他的后面的设置空
 		if (type === 0) {
-			formData.value.positionJson.filter((item) => {
-				if (item.orgId === data.orgId) {
+			formData.value.positionJson.filter((item, serial) => {
+				if (item.orgId === data.orgId && serial === index) {
 					item.positionId = undefined
 					item.directorId = undefined
 				}
@@ -475,30 +503,10 @@
 		const param = {
 			orgId: data.orgId
 		}
-		// 查询职位
-		const posList = await bizUserApi.userPositionSelector(param)
-		// 查询人员
-		const userList = await bizUserApi.userSelector(param)
-		const obj = {
-			orgId: data.orgId,
-			posList: posList.records,
-			userList: userList.records
-		}
-		childrenOrgPosArray.value.push(obj)
-	}
-	// 获取行内职位数据
-	const childPosData = (value) => {
-		const resultData = childrenOrgPosArray.value.filter((item) => item.orgId === value)
-		if (resultData.length > 0) {
-			return resultData[0].posList
-		}
-	}
-	// 获取行内人员数据
-	const childUserData = (value) => {
-		const resultData = childrenOrgPosArray.value.filter((item) => item.orgId === value)
-		if (resultData.length > 0) {
-			return resultData[0].userList
-		}
+		nextTick(() => {
+			xnChildPositionPageSelectRef.value[index].onPage(param)
+			xnChildUserPageSelectRef.value[index].onPage(param)
+		})
 	}
 	// 验证并提交数据
 	const onSubmit = () => {
diff --git a/snowy-admin-web/src/views/sys/user/form.vue b/snowy-admin-web/src/views/sys/user/form.vue
index 837a55b7..1f835a7f 100644
--- a/snowy-admin-web/src/views/sys/user/form.vue
+++ b/snowy-admin-web/src/views/sys/user/form.vue
@@ -76,25 +76,25 @@
 						
 						
 							
-								
 							
 						
 						
 							
-								
 							
 						
@@ -137,7 +137,6 @@
 									>
 										
 									
 								
@@ -155,25 +154,25 @@
 										:name="['positionJson', index, 'positionId']"
 										:rules="{ required: true, message: '请选择职位' }"
 									>
-										
 									
 								
 								
 									
-										
 									
 								
@@ -327,29 +326,28 @@