index.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <template>
  2. <div>
  3. <ele-tree-select
  4. clearable
  5. :data="deptTreeList"
  6. v-model="selectVal"
  7. valueKey="id"
  8. labelKey="name"
  9. :show-checkbox="true"
  10. :check-strictly="true"
  11. multiple
  12. collapseTags
  13. filterable
  14. placeholder="请选择"
  15. default-expand-all
  16. />
  17. </div>
  18. </template>
  19. <script>
  20. import { mapGetters } from 'vuex';
  21. export default {
  22. name: 'index',
  23. model: {
  24. prop: 'value',
  25. event: 'updateVal'
  26. },
  27. props: {
  28. value: {
  29. type: [String, Array],
  30. default: ''
  31. },
  32. dataType: {
  33. type: String,
  34. default: 'String'
  35. }
  36. },
  37. data() {
  38. return {
  39. deptTreeList: []
  40. };
  41. },
  42. computed: {
  43. ...mapGetters(['user']),
  44. selectVal: {
  45. set(val) {
  46. switch (this.dataType) {
  47. case 'Array':
  48. this.$emit('updateVal', val);
  49. break;
  50. default:
  51. this.$emit('updateVal', val.join(','));
  52. }
  53. },
  54. get() {
  55. switch (this.dataType) {
  56. case 'Array':
  57. return this.value || [];
  58. default:
  59. return this.value ? this.value.split(',') : [];
  60. }
  61. }
  62. }
  63. },
  64. mounted() {
  65. this.deptTreeList = this.$util.toTreeData({
  66. data: this.user?.authorityDept?.groupList || [],
  67. idField: 'id',
  68. parentIdField: 'parentId'
  69. });
  70. }
  71. };
  72. </script>
  73. <style scoped lang="scss"></style>