SelectStaffCode.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <template>
  2. <el-select v-model="selectValue" :remote-method="methodStaff"
  3. :style="{width: props.width}" :clearable="props.clearable" filterable
  4. remote @change="changeStaff" @clear="clear"
  5. ref="selectRef">
  6. <el-option v-for="item in staffList" :key="item.code" :label="item.name"
  7. :value="item.code ">
  8. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  9. <el-divider direction="vertical"></el-divider>
  10. <span style="color:#67C23A">{{ item.name }}</span>
  11. <el-divider direction="vertical"></el-divider>
  12. <span style="color:#E6A23C">{{ item.deptName }}</span>
  13. <el-divider direction="vertical"></el-divider>
  14. <span style="color:#a5673f">{{ item.empTitName }}</span>
  15. <el-divider direction="vertical"></el-divider>
  16. <span style="color:#a5673f">{{ item.ybCode }}</span>
  17. </el-option>
  18. </el-select>
  19. </template>
  20. <script setup>
  21. import {getRenYuan} from "@/api/public-api";
  22. import {stringNotBlank} from "@/utils/blank-utils";
  23. import store from "@/store";
  24. const props = defineProps({
  25. modelValue: {
  26. type: Object,
  27. default: ''
  28. },
  29. name: {
  30. type: Array,
  31. default: ['code', 'name']
  32. },
  33. width: {
  34. type: String,
  35. default: '220px'
  36. },
  37. clearable: {
  38. type: Boolean,
  39. default: true
  40. },
  41. deptCode: {
  42. type: Boolean,
  43. default: false
  44. }
  45. })
  46. const staffList = ref([])
  47. const selectValue = ref()
  48. const modelChange = () => {
  49. selectValue.value = props.modelValue[props.name[0]]
  50. if (stringNotBlank(selectValue.value)) {
  51. for (let i = 0, len = staffList.value.length; i < len; i++) {
  52. if (selectValue.value === staffList.value[i].code) {
  53. return
  54. }
  55. }
  56. getRenYuan(selectValue.value).then(res => {
  57. staffList.value = res
  58. })
  59. }
  60. }
  61. onMounted(() => {
  62. modelChange()
  63. })
  64. watch(() => props.modelValue[props.name[0]], () => {
  65. modelChange()
  66. })
  67. let deptCode = props.deptCode ? store.state.user.info.deptCode : ''
  68. const methodStaff = (val) => {
  69. if (val.length === 0) {
  70. return
  71. }
  72. getRenYuan(val, deptCode).then(res => {
  73. staffList.value = res
  74. });
  75. }
  76. const selectRef = ref()
  77. const changeStaff = async () => {
  78. await nextTick()
  79. props.modelValue[props.name[0]] = selectRef.value?.selected?.value
  80. props.modelValue[props.name[1]] = selectRef.value?.selected?.currentLabel
  81. }
  82. const clear = () => {
  83. selectValue.value = ''
  84. props.modelValue[props.name[0]] = ''
  85. props.modelValue[props.name[1]] = ''
  86. }
  87. </script>
  88. <style lang="scss" scoped>
  89. </style>