华西海圻ELN前端工程
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

127 lines
3.1 KiB

  1. <!-- 选择部门 -->
  2. <template>
  3. <div>
  4. <el-input v-model="selectedObj.name" :placeholder="$t('form.placeholderSelect')" readonly @click.native="showSelectDeptUser" />
  5. <el-dialog :title="$t('form.selectMember')" :visible.sync="open" width="500px" append-to-body>
  6. <el-input
  7. :placeholder="$t('form.placeholderInput')"
  8. v-model="filterText"
  9. style="margin-bottom:10px">
  10. </el-input>
  11. <el-tree
  12. class="filter-tree"
  13. :data="list"
  14. :props="defaultProps"
  15. :default-expand-all="selected==''"
  16. :default-expanded-keys="selected=='' ? []:[selected]"
  17. :filter-node-method="filterNode"
  18. ref="tree"
  19. @node-click="handleChange"
  20. node-key="id"
  21. >
  22. <span class="custom-tree-node" slot-scope="{ node, data }">
  23. <el-radio :ref="'radio'+data.id" v-if="data.type===7" v-model="selected" :label="data.id">{{ data.name }}</el-radio>
  24. <span v-else>{{ data.name }}</span>
  25. </span>
  26. </el-tree>
  27. <div slot="footer" class="dialog-footer">
  28. <el-button @click="open=false">{{$t('form.cancel')}}</el-button>
  29. <el-button type="primary" @click="save">{{$t('form.saveConfirm')}}</el-button>
  30. </div>
  31. </el-dialog>
  32. </div>
  33. </template>
  34. <script>
  35. import { deptUserList } from "@/api/system/user"
  36. export default {
  37. name: "SelectDeptUser",
  38. components: {},
  39. props: {
  40. value: {
  41. type: [Number, String , Array],
  42. default: ''
  43. },
  44. },
  45. watch: {
  46. value: {
  47. immediate: true,
  48. handler(v) {
  49. this.selected = v ?((v+'').indexOf('u_')>-1? v:('u_'+v)):''
  50. debugger
  51. this.selectedObj = {
  52. id:this.selected,
  53. name:this.getName(this.selected)
  54. }
  55. }
  56. },
  57. filterText(val) {
  58. this.$refs.tree.filter(val);
  59. }
  60. },
  61. data() {
  62. return {
  63. open:false,
  64. selected: '',
  65. selectedObj :{
  66. id:'',
  67. name:''
  68. },
  69. listData: [],
  70. list: [],
  71. filterText:'',
  72. defaultProps: {
  73. children: 'children',
  74. label: 'name'
  75. }
  76. };
  77. },
  78. mounted() {
  79. this.getList()
  80. },
  81. methods: {
  82. filterNode(value, data) {
  83. if (!value) return true;
  84. return data.name.indexOf(value) !== -1;
  85. },
  86. showSelectDeptUser(){
  87. this.open = true
  88. this.filterText = ''
  89. },
  90. getList() {
  91. this.listData = []
  92. this.list = []
  93. deptUserList().then(response => {
  94. this.listData = response.data
  95. this.list = this.handleTree(response.data, "id")
  96. })
  97. },
  98. handleChange(data) {
  99. if(data && data.type===7){
  100. this.selected = data.id
  101. this.selectedObj = data
  102. }
  103. },
  104. getName(id){
  105. debugger
  106. let name = ''
  107. let arr = _.filter(this.listData, (o)=> { return o.id===id })
  108. if(arr && arr.length>0){
  109. name = arr[0].name
  110. }
  111. return name
  112. },
  113. save(){
  114. this.$emit('change', this.selectedObj)
  115. this.$emit('input', this.selectedObj && this.selectedObj.id?this.selectedObj.id.replace('u_',''):'')
  116. debugger
  117. this.open = false
  118. },
  119. }
  120. };
  121. </script>