DictSelection.vue 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <template>
  2. <el-select
  3. v-model="selectVal"
  4. :disabled="isProhibit"
  5. style="width: 100%"
  6. v-bind="$attrs"
  7. v-on="$listeners"
  8. filterable
  9. >
  10. <el-option
  11. v-for="item in dictList"
  12. :key="item[valueName]"
  13. :value="item[valueName]"
  14. :label="
  15. ChinEng ? item[labelName] + '-' + item[valueName] : item[labelName]
  16. "
  17. ></el-option>
  18. </el-select>
  19. </template>
  20. <script>
  21. import dictEnum from '@/enum/dict';
  22. import { mapActions, mapGetters } from 'vuex';
  23. export default {
  24. model: {
  25. prop: 'value',
  26. event: 'updateVal'
  27. },
  28. props: {
  29. value: {
  30. type: [String, Number],
  31. default: ''
  32. },
  33. isProhibit: {
  34. type: Boolean,
  35. default: false
  36. },
  37. dictName: {
  38. type: String,
  39. required: true
  40. },
  41. labelName: {
  42. type: String,
  43. default: 'dictValue'
  44. },
  45. valueName: {
  46. type: String,
  47. default: 'dictCode'
  48. },
  49. ChinEng: {
  50. Boolean,
  51. default: false
  52. }
  53. },
  54. data() {
  55. return {};
  56. },
  57. computed: {
  58. ...mapGetters(['dict', 'getDict']),
  59. dictList() {
  60. return this.dict[dictEnum[this.dictName]] || [];
  61. },
  62. selectVal: {
  63. set(val) {
  64. this.$emit('updateVal', val);
  65. // change获取选中项所有数据
  66. this.$emit('itemChange', this.getDict(this.dictName, val));
  67. },
  68. get() {
  69. return this.value;
  70. }
  71. }
  72. },
  73. created() {
  74. if (this.dictName) {
  75. this.requestDict(this.dictName);
  76. }
  77. },
  78. methods: {
  79. ...mapActions('dict', ['requestDict'])
  80. }
  81. };
  82. </script>