干燥机配套车间生产管理系统/云平台服务端
baoshiwei
2023-03-10 1fb197352b6a263646e4ccd3ed1c7854ede031dd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<template>
  <div>
    <a-row class="j-select-row" type="flex" :gutter="8">
      <a-col class="left" :class="{ full: !showButton }">
        <a-select
          ref="select"
          v-model:value="selectValues.value"
          :mode="multiple"
          :open="false"
          :options="options"
          @change="handleChange"
          style="width: 100%"
        />
      </a-col>
      <a-col v-if="showButton" class="right">
        <a-button type="primary" @click="openModal">选择</a-button>
      </a-col>
    </a-row>
  </div>
</template>
<script lang="ts">
  import { defineComponent, ref, inject, reactive } from 'vue';
  import { propTypes } from '/@/utils/propTypes';
  import { useAttrs } from '/@/hooks/core/useAttrs';
 
  export default defineComponent({
    name: 'JSelectBiz',
    components: {},
    inheritAttrs: false,
    props: {
      showButton: propTypes.bool.def(true),
      // 是否支持多选,默认 true
      multiple: {
        type: Boolean,
        default: 'multiple',
      },
    },
    emits: ['btnOk'],
    setup(props, { emit, refs }) {
      //接收下拉框选项
      const options = inject('selectOptions') || ref([]);
      //接收选择的值
      const selectValues = inject('selectValues') || ref({});
      const attrs = useAttrs();
 
      /**
       * 打开弹出框
       */
      function openModal() {
        emit('btnOk');
      }
 
      /**
       * 下拉框值改变事件
       */
      function handleChange(value) {
        selectValues.value = value;
        selectValues.change = true;
      }
 
      return {
        attrs,
        selectValues,
        options,
        handleChange,
        openModal,
      };
    },
  });
</script>
<style lang="less" scoped>
  .j-select-row {
    @width: 82px;
 
    .left {
      width: calc(100% - @width - 8px);
    }
 
    .right {
      width: @width;
    }
 
    .full {
      width: 100%;
    }
 
    :deep(.ant-select-search__field) {
      display: none !important;
    }
  }
</style>