Blame view

ant-design-vue-jeecg/src/components/jeecgbiz/JSelectDepart.vue 4.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
<template>
  <div class="components-input-demo-presuffix">
    <!---->
    <a-input @click="openModal" placeholder="请点击选择部门" v-model="departNames" readOnly :disabled="disabled">
      <a-icon slot="prefix" type="cluster" title="部门选择控件"/>
      <a-icon v-if="departIds" slot="suffix" type="close-circle" @click="handleEmpty" title="清空"/>
    </a-input>

    <j-select-depart-modal
      ref="innerDepartSelectModal"
      :modal-width="modalWidth"
      :multi="multi"
      :rootOpened="rootOpened"
14
      :depart-id="departIds"
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
      @ok="handleOK"
      @initComp="initComp"/>
  </div>
</template>

<script>
  import JSelectDepartModal from './modal/JSelectDepartModal'
  export default {
    name: 'JSelectDepart',
    components:{
      JSelectDepartModal
    },
    props:{
      modalWidth:{
        type:Number,
        default:500,
        required:false
      },
      multi:{
        type:Boolean,
        default:false,
        required:false
      },
      rootOpened:{
        type:Boolean,
        default:true,
        required:false
      },
      value:{
        type:String,
        required:false
      },
      disabled:{
        type: Boolean,
        required: false,
        default: false
51
52
53
54
55
      },
      // 自定义返回字段,默认返回 id
      customReturnField: {
        type: String,
        default: 'id'
56
57
58
59
60
      },
      backDepart: {
        type: Boolean,
        default: false,
        required: false
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
      }
    },
    data(){
      return {
        visible:false,
        confirmLoading:false,
        departNames:"",
        departIds:''
      }
    },
    mounted(){
      this.departIds = this.value
    },
    watch:{
      value(val){
76
77
        //update-begin-author:wangshuai date:20201124 for:组件 JSelectDepart.vue不是默认id时新内容编辑问题 gitee I247X2
        // if (this.customReturnField === 'id') {
78
          this.departIds = val
79
80
        // }
        //update-end-author:wangshuai date:20201124 for:组件 JSelectDepart.vue不是默认id时新内容编辑问题 gitee I247X2
81
82
83
84
85
      }
    },
    methods:{
      initComp(departNames){
        this.departNames = departNames
86
87
88
89
90
91
92
93
94
95
96
97
        //update-begin-author:lvdandan date:20200513 for:TESTA-438 部门选择组件自定义返回值,数据无法回填
        //TODO 当返回字段为部门名称时会有问题,因为部门名称不唯一
        //返回字段不为id时,根据返回字段获取id
        if(this.customReturnField !== 'id' && this.value){
          const dataList = this.$refs.innerDepartSelectModal.dataList;
          console.log('this.value',this.value)
          this.departIds = this.value.split(',').map(item => {
            const data = dataList.filter(d=>d[this.customReturnField] === item)
            return data.length > 0 ? data[0].id : ''
          }).join(',')
        }
        //update-end-author:lvdandan date:20200513 for:TESTA-438 部门选择组件自定义返回值,数据无法回填
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
        this.backDeparInfo()
      },
      //返回选中的部门信息
      backDeparInfo(){
        if(this.backDepart===true){
          if(this.departIds && this.departIds.length>0){
            let arr1 = this.departIds.split(',')
            let arr2 = this.departNames.split(',')
            let info = []
            for(let i=0;i<arr1.length;i++){
              info.push({
                value: arr1[i],
                text: arr2[i]
              })
            }
            this.$emit('back', info)
          }
        }
116
117
118
119
      },
      openModal(){
        this.$refs.innerDepartSelectModal.show()
      },
120
121
122
      handleOK(rows, idstr) {
        let value = ''
        if (!rows && rows.length <= 0) {
123
          this.departNames = ''
124
125
126
127
128
          this.departIds = ''
        } else {
          value = rows.map(row => row[this.customReturnField]).join(',')
          this.departNames = rows.map(row => row['departName']).join(',')
          this.departIds = idstr
129
        }
130
        this.$emit("change", value)
131
132
133
134
135
136
137
      },
      getDepartNames(){
        return this.departNames
      },
      handleEmpty(){
        this.handleOK('')
      }
138
139
140
141
    },
    model: {
      prop: 'value',
      event: 'change'
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
    }
  }
</script>

<style scoped>
  .components-input-demo-presuffix .anticon-close-circle {
    cursor: pointer;
    color: #ccc;
    transition: color 0.3s;
    font-size: 12px;
  }
  .components-input-demo-presuffix .anticon-close-circle:hover {
    color: #f5222d;
  }
  .components-input-demo-presuffix .anticon-close-circle:active {
    color: #666;
  }
</style>