index.vue 1.6 KB

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