职工 远程搜索优化

pull/2/head
qiuhongwu 9 months ago
parent d3f0c12030
commit f856436e96

@ -24,7 +24,7 @@
/>
</el-form-item>
<el-form-item label="负责人" prop="leaderUserId">
<UserSelect v-model="formData.leaderUserId" @update:newValue="handleSelectedUser" />
<UserSelect v-model="formData.leaderUserId" :leaderUserId="formData.leaderUserId" @update:newValue="handleSelectedUser" />
</el-form-item>
<!-- <el-form-item label="联系电话" prop="phone">
<el-input v-model="formData.phone" maxlength="11" placeholder="请输入联系电话" />

@ -22,7 +22,7 @@
</template>
<script lang="ts" setup>
import { ref, onMounted, toRefs,computed } from 'vue'
import { ref, onMounted, toRefs, computed } from 'vue'
import * as UserApi from '@/api/system/user'
interface UserVO {
@ -31,58 +31,104 @@ interface UserVO {
nickname: string
}
const props = defineProps({
initialUserList: {
type: Array as PropType<UserVO[]>,
default: () => []
leaderUserId: {
type: [Number, String],
required: true // true
}
})
const userParams = {
pageNo: 1,
pageSize: 10,
status: undefined, //
username: undefined,
nickname: undefined
}
const valueName: any = ref() //
const valueNameObject:any = ref(); //
const valueNameObject: any = ref() //
const emit = defineEmits(['update:newValue'])
const userList = ref<UserApi.UserVO[]>([]) //
const userSelectList = ref<UserApi.UserVO[]>([])
const userSelectLoading = ref(false)
const leaderUserId = toRefs(props).leaderUserId // props leaderUserId
const initialValue: any = ref(null) // ID
const gitlist = async () => {
const data = await UserApi.getUserPage(userParams)
userList.value = data.list
//
if (leaderUserId.value) {
valueName.value = leaderUserId.value
const initialUser = await UserApi.getUser(valueName.value)
// userList
let foundInitialUserInList = false
for (const user of userList.value) {
if (user.id === initialUser.id) {
foundInitialUserInList = true
break
}
}
//
if (!foundInitialUserInList && !userSelectList.value.length) {
userList.value = []
userList.value.unshift(initialUser)
}
}
remoteMethod('')
}
const remoteMethod = async (query: any) => {
userSelectLoading.value = true
userSelectList.value = []
try {
if (query) {
// username
userParams.username = query
const dataByUsername = await UserApi.getUserPage(userParams)
// username
let tempUserList = [...dataByUsername.list]
// nickname nickname username
userParams.username = undefined
userParams.nickname = query
const dataByNickname = await UserApi.getUserPage(userParams)
// nickname
tempUserList = [
...tempUserList,
...dataByNickname.list.filter(
(item) => !tempUserList.some((selectItem) => selectItem.id === item.id)
)
]
//
userSelectList.value = tempUserList
} else {
//
const data = await UserApi.getUserPage({ ...userParams, pageNo: 1 })
userList.value = [...userList.value, ...data.list]
userSelectList.value = userList.value
}
} catch (error) {
console.error(error)
} finally {
userSelectLoading.value = false
}
}
//
onMounted(async () => {
const userParams = {
pageNo: 1,
pageSize: 10,
status: undefined, //
}
try {
const data = await UserApi.getUserPage(userParams)
userList.value = data.list
//
remoteMethod('')
await gitlist()
} catch (error) {
console.error(error)
}
})
const remoteMethod = (query: any) => {
if (query) {
userSelectLoading.value = true
setTimeout(() => {
userSelectLoading.value = false
userSelectList.value = userList.value
.filter(
(item) =>
item.nickname.toLowerCase().includes(query.toLowerCase()) ||
item.username.toLowerCase().includes(query.toLowerCase())
)
.slice(0, 10) //10
}, 200)
} else {
userSelectList.value = userList.value.slice(0, 10) //10
}
}
const onSelectChange = (newValue: any) => {
valueNameObject.value = userList.value.find(user => user.id === newValue); //
valueNameObject.value = userList.value.find((user) => user.id === newValue) //
emit('update:newValue', valueNameObject.value)
}
</script>

Loading…
Cancel
Save