SceneSelect.vue 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <template>
  2. <el-select
  3. v-model="vModel"
  4. placeholder="请选择"
  5. filterable
  6. clearable
  7. v-bind="$attrs"
  8. @change="onChange"
  9. >
  10. <el-option
  11. v-for="item in options"
  12. :key="item.value"
  13. :label="item.label"
  14. :value="item.value"
  15. >
  16. </el-option>
  17. </el-select>
  18. </template>
  19. <script>
  20. import { getPage } from '@/api/scene';
  21. export default {
  22. name: 'SceneSelect',
  23. props: {
  24. value: {
  25. type: String,
  26. default: ''
  27. }
  28. },
  29. data() {
  30. return {
  31. vModel: this.value,
  32. options: []
  33. };
  34. },
  35. watch: {
  36. value: {
  37. handler(val) {
  38. this.vModel = val;
  39. },
  40. immediate: true
  41. }
  42. },
  43. mounted() {
  44. this.loadData();
  45. },
  46. methods: {
  47. onChange(value) {
  48. console.log(value);
  49. this.$emit('input', value || null);
  50. },
  51. async loadData() {
  52. const { success, data, msg } = await getPage({
  53. isDel: false,
  54. auditStatus: 1,
  55. page: 1,
  56. size: 999999
  57. });
  58. if (success) {
  59. this.options = data.data.map(x => ({
  60. value: x.id,
  61. label: x.name
  62. }));
  63. }
  64. }
  65. }
  66. };
  67. </script>
  68. <style lang="scss" scoped></style>