华西海圻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.

142 lines
4.2 KiB

  1. <!-- 选择部门 -->
  2. <template>
  3. <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :title="$t('form.selectMember')" :visible.sync="open" width="800px" append-to-body>
  4. <el-row style="height: 500px;overflow-y: scroll;">
  5. <el-col :span="12" class="select-user-left">
  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="true"
  16. :default-expanded-keys="selected.id=='' ? []:[selected.id]"
  17. :filter-node-method="filterNode"
  18. ref="tree"
  19. node-key="id"
  20. >
  21. <span class="custom-tree-node" slot-scope="{ node, data }">
  22. <!-- <el-radio :ref="'radio'+data.id" v-if="data.type===7" v-model="selected.id" :label="data.id" @change="handleChange(data)" class="select-dept-user-check-radio-box">{{ $i18n.locale === 'zh_CN'?data.name:data.nameEn }}</el-radio> -->
  23. <el-radio :ref="'radio'+data.id" v-if="data.type===7" v-model="selected.id" :label="data.id" @change="handleChange(data)" class="select-dept-user-check-radio-box">{{data.name }}</el-radio>
  24. <!-- <span v-else>{{ $i18n.locale === 'zh_CN'?data.name:data.nameEn }}</span> -->
  25. <span v-else>{{ data.name }}</span>
  26. </span>
  27. </el-tree>
  28. </el-col>
  29. <el-col :span="12" class="select-user-right">
  30. <div>已选</div>
  31. <div class="select-user-selected" v-if="selected.id!=''">
  32. <div class="select-user-selected-item">
  33. <!-- <div class="select-user-selected-name">{{$i18n.locale === 'zh_CN'?selected.name:selected.nameEn}}</div> -->
  34. <div class="select-user-selected-name">{{selected.name}}</div>
  35. <div class="select-user-selected-del"><i class="el-icon-delete" @click="delSelected"></i></div>
  36. </div>
  37. </div>
  38. </el-col>
  39. </el-row>
  40. <div slot="footer" class="dialog-footer">
  41. <el-button @click="open=false">{{$t('form.cancel')}}</el-button>
  42. <el-button type="primary" @click="save">{{$t('form.saveConfirm')}}</el-button>
  43. </div>
  44. </el-dialog>
  45. </template>
  46. <script>
  47. import { deptUserList } from "@/api/system/user"
  48. export default {
  49. name: "SelectDeptUserDialog",
  50. components: {},
  51. props: {
  52. },
  53. watch: {
  54. filterText(val) {
  55. this.$refs.tree.filter(val);
  56. }
  57. },
  58. data() {
  59. return {
  60. open:false,
  61. selected:{
  62. id:'',
  63. name:'',
  64. nameEn:''
  65. },
  66. listData: [],
  67. list: [],
  68. filterText:'',
  69. defaultProps: {
  70. children: 'children',
  71. label: 'name'
  72. }
  73. };
  74. },
  75. mounted() {
  76. },
  77. methods: {
  78. show(id,name,nameEn){
  79. this.getList()
  80. this.selected.id = id ?((id+'').indexOf('u_')>-1? id:('u_'+id)):''
  81. this.selected.name=name || ''
  82. this.selected.nameEn=nameEn || ''
  83. this.open = true
  84. this.filterText = ''
  85. },
  86. filterNode(value, data) {
  87. if (!value) return true;
  88. // return this.$i18n.locale === 'zh_CN'?(data.name.indexOf(value) !== -1):(data.nameEn.indexOf(value) !== -1);
  89. return data.name.indexOf(value) !== -1;
  90. },
  91. getList() {
  92. this.listData = []
  93. this.list = []
  94. deptUserList().then(response => {
  95. this.listData = response.data
  96. this.list = this.handleTree(response.data, "id")
  97. })
  98. },
  99. handleChange(data) {
  100. if(data && data.type===7){
  101. this.selected = {
  102. id:data.id,
  103. name:data.name,
  104. nameEn:data.nameEn,
  105. }
  106. }
  107. },
  108. // getName(id){
  109. // let name = ''
  110. // let arr = _.filter(this.listData, (o)=> { return o.id===id })
  111. // if(arr && arr.length>0){
  112. // name = arr[0].name
  113. // }
  114. // return name
  115. // },
  116. save(){
  117. let obj = {
  118. id:this.selected && this.selected.id?this.selected.id.replace('u_',''):'',
  119. name:this.selected.name,
  120. nameEn:this.selected.nameEn,
  121. }
  122. this.$emit('change', obj)
  123. this.$emit('input', obj.id)
  124. this.open = false
  125. },
  126. delSelected(){
  127. this.selected = {
  128. id:'',
  129. name:'',
  130. nameEn:'',
  131. }
  132. }
  133. }
  134. };
  135. </script>