| @ -1,89 +1,126 @@ | |||||
| <!-- 选择部门 --> | <!-- 选择部门 --> | ||||
| <template> | <template> | ||||
| <treeselect | |||||
| ref="treeselectRef" | |||||
| v-model="selected" | |||||
| :options="list" | |||||
| :show-count="true" | |||||
| :disabled="readonly" | |||||
| :placeholder="$t('form.placeholderSelect')" | |||||
| @select="handleChange" | |||||
| :normalizer="normalizer" | |||||
| :style="{width:width}" /> | |||||
| <!-- :flat="true" --> | |||||
| <div> | |||||
| <el-input v-model="selectedObj.name" :placeholder="$t('form.placeholderSelect')" readonly @click.native="showSelectDeptUser" /> | |||||
| <el-dialog :title="$t('form.selectMember')" :visible.sync="open" width="500px" append-to-body> | |||||
| <el-input | |||||
| :placeholder="$t('form.placeholderInput')" | |||||
| v-model="filterText" | |||||
| style="margin-bottom:10px"> | |||||
| </el-input> | |||||
| <el-tree | |||||
| class="filter-tree" | |||||
| :data="list" | |||||
| :props="defaultProps" | |||||
| :default-expand-all="selected==''" | |||||
| :default-expanded-keys="selected=='' ? []:[selected]" | |||||
| :filter-node-method="filterNode" | |||||
| ref="tree" | |||||
| @node-click="handleChange" | |||||
| node-key="id" | |||||
| > | |||||
| <span class="custom-tree-node" slot-scope="{ node, data }"> | |||||
| <el-radio :ref="'radio'+data.id" v-if="data.type===7" v-model="selected" :label="data.id">{{ data.name }}</el-radio> | |||||
| <span v-else>{{ data.name }}</span> | |||||
| </span> | |||||
| </el-tree> | |||||
| <div slot="footer" class="dialog-footer"> | |||||
| <el-button @click="open=false">{{$t('form.cancel')}}</el-button> | |||||
| <el-button type="primary" @click="save">{{$t('form.saveConfirm')}}</el-button> | |||||
| </div> | |||||
| </el-dialog> | |||||
| </div> | |||||
| </template> | </template> | ||||
| <script> | <script> | ||||
| import Treeselect from "@riophae/vue-treeselect" | |||||
| import { deptUserList } from "@/api/system/user" | import { deptUserList } from "@/api/system/user" | ||||
| import "@riophae/vue-treeselect/dist/vue-treeselect.css" | |||||
| export default { | export default { | ||||
| name: "SelectDept", | |||||
| components: {Treeselect}, | |||||
| name: "SelectDeptUser", | |||||
| components: {}, | |||||
| props: { | props: { | ||||
| value: { | value: { | ||||
| type: [Number, String , Array], | type: [Number, String , Array], | ||||
| default: null, | |||||
| }, | |||||
| readonly: { | |||||
| type: Boolean, | |||||
| default: false | |||||
| default: '' | |||||
| }, | }, | ||||
| width:{ | |||||
| type:String, | |||||
| default:'100%' | |||||
| } | |||||
| }, | }, | ||||
| watch: { | watch: { | ||||
| value: { | value: { | ||||
| immediate: true, | immediate: true, | ||||
| handler(v) { | handler(v) { | ||||
| this.selected = v ?((v+'').indexOf('u_')>-1? v:('u_'+v)):'' | |||||
| debugger | debugger | ||||
| this.selected = v?((v+'').indexOf('u_')>-1? v:('u_'+v)):null | |||||
| this.selectedObj = { | |||||
| id:this.selected, | |||||
| name:this.getName(this.selected) | |||||
| } | |||||
| } | } | ||||
| }, | }, | ||||
| filterText(val) { | |||||
| this.$refs.tree.filter(val); | |||||
| } | |||||
| }, | }, | ||||
| data() { | data() { | ||||
| return { | return { | ||||
| selected: null, | |||||
| open:false, | |||||
| selected: '', | |||||
| selectedObj :{ | |||||
| id:'', | |||||
| name:'' | |||||
| }, | |||||
| listData: [], | |||||
| list: [], | list: [], | ||||
| filterText:'', | |||||
| defaultProps: { | |||||
| children: 'children', | |||||
| label: 'name' | |||||
| } | |||||
| }; | }; | ||||
| }, | }, | ||||
| mounted() { | mounted() { | ||||
| this.getList() | this.getList() | ||||
| }, | }, | ||||
| methods: { | methods: { | ||||
| filterNode(value, data) { | |||||
| if (!value) return true; | |||||
| return data.name.indexOf(value) !== -1; | |||||
| }, | |||||
| showSelectDeptUser(){ | |||||
| this.open = true | |||||
| this.filterText = '' | |||||
| }, | |||||
| getList() { | getList() { | ||||
| this.listData = [] | |||||
| this.list = [] | this.list = [] | ||||
| deptUserList().then(response => { | deptUserList().then(response => { | ||||
| // response.data.forEach(element => { | |||||
| // element.isDisabled = element.type!==7 | |||||
| // }) | |||||
| this.listData = response.data | |||||
| this.list = this.handleTree(response.data, "id") | this.list = this.handleTree(response.data, "id") | ||||
| }) | }) | ||||
| }, | }, | ||||
| handleChange(val) { | |||||
| if(val){ | |||||
| if(val.type!==7){ | |||||
| this.$message.error(`只能选择人员`) | |||||
| this.selected = null | |||||
| this.$refs.treeselectRef.clear(); | |||||
| }else{ | |||||
| this.$emit('input', val.id? val.id.split('_')[1] : '') | |||||
| this.$emit('change', val.id? val.id.split('_')[1] : '') | |||||
| } | |||||
| handleChange(data) { | |||||
| if(data && data.type===7){ | |||||
| this.selected = data.id | |||||
| this.selectedObj = data | |||||
| } | } | ||||
| }, | }, | ||||
| normalizer(node) { | |||||
| if (node.children && !node.children.length) { | |||||
| delete node.children; | |||||
| getName(id){ | |||||
| debugger | |||||
| let name = '' | |||||
| let arr = _.filter(this.listData, (o)=> { return o.id===id }) | |||||
| if(arr && arr.length>0){ | |||||
| name = arr[0].name | |||||
| } | } | ||||
| return { | |||||
| id: node.id, | |||||
| label: node.name, | |||||
| children: node.children, | |||||
| // isDisabled:node.isDisabled | |||||
| }; | |||||
| return name | |||||
| }, | |||||
| save(){ | |||||
| this.$emit('change', this.selectedObj) | |||||
| this.$emit('input', this.selectedObj && this.selectedObj.id?this.selectedObj.id.replace('u_',''):'') | |||||
| debugger | |||||
| this.open = false | |||||
| }, | }, | ||||
| } | } | ||||
| }; | }; | ||||