<template> <view> <u-form-item :label="label" :prop="prop" :required="required" @click="fnShowPicker" > <view class="select_content"> <u-input :value="name || '请选择'" border="none" input-align="right" readonly /> <u-icon name="arrow-right"></u-icon> </view> </u-form-item> <u-line/> <u-picker :show="visible" :columns="[columns]" key-name="NAME" :default-index="[defaultIndex]" @cancel="visible = false" @confirm="fnConfirm" /> </view> </template> <script> import {getPersonnelList} from "@/api/api"; export default { props: { name: { type: String, required: true, default: "", }, id: { type: String, required: true, default: "", }, label: { type: String, default: "人员", }, prop: { type: String, default: "", }, required: { type: Boolean, default: true, }, disabled: { type: Boolean, default: false, }, departmentId: { type: String, required: false, }, corpInfoId: { type: String, required: false, }, // 是否允许选择当前登录人 isAllowSelectionCurrentPerson: { type: Boolean, default: true, }, }, data() { return { visible: false, columns:[], defaultIndex:0 } }, methods: { async fnGetData() { const resData = await getPersonnelList({ DEPARTMENT_ID: this.departmentId, NOMAIN: "1", loading: false, postMethod: 'application/json', }); this.columns = resData.userList; }, fnShowPicker(){ if (this.disabled) return; if (this.columns.length === 0) { uni.showToast({ title: "暂无可选人员", icon: "none", }); return; } this.visible = true; this.defaultIndex = 0; for (let i = 0; i < this.columns.length; i++) { if (this.columns[i].USER_ID === this.id) { this.defaultIndex = i; break; } } }, fnConfirm(event){ if (!this.isAllowSelectionCurrentPerson) { if (event.value[0].USER_ID === this.$store.getters.getUserInfo.USER_ID) { uni.showToast({ title: "不能选择当前登录人", icon: "none", }); return; } } this.$emit("update:id", event.value[0].USER_ID); this.$emit("update:name", event.value[0].NAME); this.$emit("confirm", event.value[0]); this.visible = false; } }, watch:{ departmentId(val) { if (val) this.fnGetData(); else this.columns = []; } } } </script> <style scoped lang="scss"></style>