guoxiaohuan 4 år sedan
förälder
incheckning
704a0d4406
100 ändrade filer med 2243 tillägg och 2 borttagningar
  1. 4 2
      package.json
  2. 309 0
      src/components/Select/Drop.vue
  3. 940 0
      src/components/Select/Select.vue
  4. 23 0
      src/components/Select/clickoutside.js
  5. 24 0
      src/components/Select/directive/clickoutside.js
  6. 8 0
      src/components/Select/directive/dispatchZindex.js
  7. 227 0
      src/components/Select/directive/dom.js
  8. 69 0
      src/components/Select/directive/transfer-dom.js
  9. 8 0
      src/components/Select/dispatchZindex.js
  10. 86 0
      src/components/Select/dropdown.js
  11. 32 0
      src/components/Select/popover.js
  12. 132 0
      src/components/Select/popover.vue
  13. 9 0
      src/components/Select/static/iconSvg/action/AIS.svg
  14. 15 0
      src/components/Select/static/iconSvg/action/AIS_filled.svg
  15. 8 0
      src/components/Select/static/iconSvg/action/BIAM.svg
  16. 1 0
      src/components/Select/static/iconSvg/action/BIAM_filled.svg
  17. 10 0
      src/components/Select/static/iconSvg/action/EHM.svg
  18. 1 0
      src/components/Select/static/iconSvg/action/EHM_filled.svg
  19. 10 0
      src/components/Select/static/iconSvg/action/EMS.svg
  20. 1 0
      src/components/Select/static/iconSvg/action/EMS_filled.svg
  21. 8 0
      src/components/Select/static/iconSvg/action/EOM.svg
  22. 1 0
      src/components/Select/static/iconSvg/action/EOM_filled.svg
  23. 8 0
      src/components/Select/static/iconSvg/action/EQM.svg
  24. 1 0
      src/components/Select/static/iconSvg/action/EQM_filled.svg
  25. 10 0
      src/components/Select/static/iconSvg/action/GC.svg
  26. 1 0
      src/components/Select/static/iconSvg/action/GC_filled.svg
  27. 9 0
      src/components/Select/static/iconSvg/action/HRM.svg
  28. 1 0
      src/components/Select/static/iconSvg/action/HRM_filled.svg
  29. 9 0
      src/components/Select/static/iconSvg/action/ICSOCS.svg
  30. 1 0
      src/components/Select/static/iconSvg/action/ICSOCS_filled.svg
  31. 8 0
      src/components/Select/static/iconSvg/action/IM.svg
  32. 1 0
      src/components/Select/static/iconSvg/action/IM_filled.svg
  33. 10 0
      src/components/Select/static/iconSvg/action/OMS.svg
  34. 1 0
      src/components/Select/static/iconSvg/action/OMS_filled.svg
  35. 8 0
      src/components/Select/static/iconSvg/action/PAM.svg
  36. 1 0
      src/components/Select/static/iconSvg/action/PAM_filled.svg
  37. 9 0
      src/components/Select/static/iconSvg/action/PDM.svg
  38. 1 0
      src/components/Select/static/iconSvg/action/PDM_filled.svg
  39. 11 0
      src/components/Select/static/iconSvg/action/PES.svg
  40. 1 0
      src/components/Select/static/iconSvg/action/PES_filled.svg
  41. 11 0
      src/components/Select/static/iconSvg/action/SCM.svg
  42. 1 0
      src/components/Select/static/iconSvg/action/SCM_filled.svg
  43. 8 0
      src/components/Select/static/iconSvg/action/SRM.svg
  44. 1 0
      src/components/Select/static/iconSvg/action/SRM_filled.svg
  45. 10 0
      src/components/Select/static/iconSvg/action/WFM.svg
  46. 1 0
      src/components/Select/static/iconSvg/action/WFM_filled.svg
  47. 11 0
      src/components/Select/static/iconSvg/action/addCollection.svg
  48. 11 0
      src/components/Select/static/iconSvg/action/adjustTimeRange.svg
  49. 12 0
      src/components/Select/static/iconSvg/action/alarm.svg
  50. 8 0
      src/components/Select/static/iconSvg/action/analysis.svg
  51. 14 0
      src/components/Select/static/iconSvg/action/apply.svg
  52. 1 0
      src/components/Select/static/iconSvg/action/ascendingOrder.svg
  53. 14 0
      src/components/Select/static/iconSvg/action/assign.svg
  54. 14 0
      src/components/Select/static/iconSvg/action/audit.svg
  55. 1 0
      src/components/Select/static/iconSvg/action/backLog.svg
  56. 7 0
      src/components/Select/static/iconSvg/action/boiler.svg
  57. 1 0
      src/components/Select/static/iconSvg/action/bottomSetting.svg
  58. 1 0
      src/components/Select/static/iconSvg/action/calendar.svg
  59. 7 0
      src/components/Select/static/iconSvg/action/camera.svg
  60. 1 0
      src/components/Select/static/iconSvg/action/cease.svg
  61. 1 0
      src/components/Select/static/iconSvg/action/chainRatio.svg
  62. 1 0
      src/components/Select/static/iconSvg/action/close.svg
  63. 1 0
      src/components/Select/static/iconSvg/action/collection.svg
  64. 1 0
      src/components/Select/static/iconSvg/action/complaint.svg
  65. 1 0
      src/components/Select/static/iconSvg/action/complete.svg
  66. 11 0
      src/components/Select/static/iconSvg/action/computerTerminal.svg
  67. 9 0
      src/components/Select/static/iconSvg/action/confirm.svg
  68. 1 0
      src/components/Select/static/iconSvg/action/contrast.svg
  69. 1 0
      src/components/Select/static/iconSvg/action/control.svg
  70. 1 0
      src/components/Select/static/iconSvg/action/coolingRoom.svg
  71. 1 0
      src/components/Select/static/iconSvg/action/coolingStation.svg
  72. 1 0
      src/components/Select/static/iconSvg/action/coolingTower.svg
  73. 1 0
      src/components/Select/static/iconSvg/action/copy.svg
  74. 1 0
      src/components/Select/static/iconSvg/action/cost.svg
  75. 1 0
      src/components/Select/static/iconSvg/action/data.svg
  76. 1 0
      src/components/Select/static/iconSvg/action/delete.svg
  77. 10 0
      src/components/Select/static/iconSvg/action/deleteUpload.svg
  78. 12 0
      src/components/Select/static/iconSvg/action/department.svg
  79. 1 0
      src/components/Select/static/iconSvg/action/descendingOrder.svg
  80. 1 0
      src/components/Select/static/iconSvg/action/details.svg
  81. 15 0
      src/components/Select/static/iconSvg/action/dimission.svg
  82. 1 0
      src/components/Select/static/iconSvg/action/distribution.svg
  83. 1 0
      src/components/Select/static/iconSvg/action/dominate.svg
  84. 1 0
      src/components/Select/static/iconSvg/action/download.svg
  85. 1 0
      src/components/Select/static/iconSvg/action/edit.svg
  86. 1 0
      src/components/Select/static/iconSvg/action/electricCabinet.svg
  87. 1 0
      src/components/Select/static/iconSvg/action/electricalSubstation.svg
  88. 1 0
      src/components/Select/static/iconSvg/action/elevator.svg
  89. 1 0
      src/components/Select/static/iconSvg/action/evaluate.svg
  90. 1 0
      src/components/Select/static/iconSvg/action/expandItem.svg
  91. 1 0
      src/components/Select/static/iconSvg/action/expandPage.svg
  92. 1 0
      src/components/Select/static/iconSvg/action/export.svg
  93. 1 0
      src/components/Select/static/iconSvg/action/fastForward.svg
  94. 1 0
      src/components/Select/static/iconSvg/action/favorites.svg
  95. 1 0
      src/components/Select/static/iconSvg/action/filter.svg
  96. 1 0
      src/components/Select/static/iconSvg/action/firePumpHouse.svg
  97. 1 0
      src/components/Select/static/iconSvg/action/handOver.svg
  98. 1 0
      src/components/Select/static/iconSvg/action/heatExchangerRoom.svg
  99. 1 0
      src/components/Select/static/iconSvg/action/heatPumpUnit.svg
  100. 0 0
      src/components/Select/static/iconSvg/action/hide.svg

+ 4 - 2
package.json

@@ -32,10 +32,12 @@
         "babel-plugin-component": "^1.1.1",
         "eslint": "^5.16.0",
         "eslint-plugin-vue": "^5.0.0",
-        "less": "^3.0.4",
         "fengmap": "^2.5.3",
-        "polybooljs": "^1.2.0",
+        "less": "^3.0.4",
         "less-loader": "^5.0.0",
+        "polybooljs": "^1.2.0",
+        "stylus": "^0.54.7",
+        "stylus-loader": "^3.0.2",
         "vue-template-compiler": "^2.6.10"
     }
 }

+ 309 - 0
src/components/Select/Drop.vue

@@ -0,0 +1,309 @@
+<template>
+    <transition name="selectDownUpExtend">
+        <div class="p-select-option-box"  v-show="dropVisible">
+            <div >
+                <ul class="p-select-option-menu"  v-show="data.length" @mousewheel.stop @click.stop>
+                    <template v-for="(option, index) in data" >
+                        <li v-if="option.classify"  @click.stop="handlePrevent" class="p-select-option-classify" :key="index+option.classify">{{option.classify}}</li>
+                        <li v-else
+                            :class="['p-select-option', option.divider && 'p-select-option-divider',option.disabled ? 'p-select-option-disabled' : option.selected ? 'p-select-option-selected' : '']"
+                            :key="index"
+                            @click.stop="clickHandle(option,index)"
+                        >
+                            <div class="p-select-option-content" >
+                                <div class="p-select-option-wraper" v-if="option.src || option.label">
+                                    <div v-if="option.src" class="p-select-option-avatar"  >
+                                        <!-- <Avatar :size="option.sub? 'large':'medium'">
+                                            <img :src="option.src">
+                                        </Avatar> -->
+                                    </div>
+                                    <span v-if="option.label" :style="labelStyle(index)" class="p-select-option-label">{{option.label}}</span>
+                                </div>
+                                <div>
+                                    <section v-if="option.display" :style="widthStyle(option)" :class="['p-select-option-main', option.disabled ? 'p-select-option-main-disabled' :option.selected ? 'p-select-option-main-selected' : '' ]" :title="option.name" v-html="option.display"></section>
+                                    <section v-else :style="widthStyle(option)" :class="['p-select-option-main', option.disabled ? 'p-select-option-main-disabled' :option.selected ? 'p-select-option-main-selected' : '' ]" :title="option.name">{{option.name}}</section>
+                                    <section v-if="option.sub" :style="widthStyle(option)" :class="['p-select-option-desc', option.disabled ? 'p-select-option-desc-disabled' :option.selected ? 'p-select-option-desc-selected' : '' ]" :title="option.sub">{{option.sub}}</section>
+                                </div>
+                            </div>
+                            <div class="p-select-multiple-icon" v-if="multiple&&option.selected"></div>
+                        </li>
+                    </template>
+                </ul>
+                <div @click.stop="() => false" v-if="multiple&&data.length" :class="['p-select-confirm-panel', data.length > 5 ? 'p-select-panel-shadow': '' ]">
+                    <span @click.stop.capture="cancel">取消</span>
+                    <span @click.stop.capture="confirm" :class="[disableConfirm ? 'disabled-confirm-button' : '']">确定</span>
+                </div>
+            </div>
+            <div ref='notfound' class="p-select-not-found"  v-show="(query && !data.length) || !data.length" >没有找到任何内容</div>
+        </div>
+    </transition>
+</template>
+
+<script>
+import './static/stylus/animate/selectDownUpExtend.styl'
+import selected from './static/iconSvg/selected.svg'
+// import Avatar from '../Avatar'
+export default {
+    name:'selectDrop',
+    props:{
+        /**
+         * 是否多选
+         */
+        multiple:{
+            type:Boolean,
+            default: false
+        },
+        /**
+         * 搜索内容
+         */
+        query:{
+            type:String,
+            default: ''
+        },
+        /**
+         * 下拉框数据
+         */
+        data:{
+            type:Array,
+            default: () => []
+        },
+        width:{
+            type:[String, Number]
+        }
+    },
+    computed:{
+        tagBgColors () {  //标签背景颜色
+            return  ['#E1F2FF' , '#D5F6F2', '#D9F5D6', '#FAF1D1', '#FEEAD2', '#FDE3E2', '#FDDDEF', '#ECE2FE' ,'#B2E6F2', '#EFF0F1']
+        },
+        tagTextColors () { // 标签字体颜色
+            return ['#0065B3', '#078372', '#237B19', '#AA7803', '#B26206', '#AC2F28', '#8C218C', '#4E1BA7', '#161FA2', '#373C43']
+        },
+    },
+    data () {
+        return {
+            dropVisible:false,
+            value:'',
+            disableConfirm: true
+        }
+    },
+    watch:{
+        value:{
+            handler(n, o) {
+                if (n !== o) {
+                    this.selectById()
+                }
+            },
+            immediate :true
+        },
+    },
+    components:{selected,},  //√ 图标
+    methods:{
+        widthStyle (option) {
+            let width = 0
+            if (option.src) {
+                width = option.sub ? this.width - 68  : this.width - 60 // 有头像的情况
+            } else if (option.label) {
+                width = this.width - 76   // 有标签的情况
+            } else {
+                width = this.width - 24   // 只有文字的情况
+            }
+            if (this.multiple) {
+                width = width - 28   // 多选情况下还要再减去右边勾选图标的宽度
+            }
+            return {width : width + 'px'}
+        },
+        handlePrevent (e) {
+            return false
+        },
+        /**
+         * description 如果用户设置了默认选中项 则默认选中
+         */
+        selectById () {
+            const index = this.data.findIndex(item => {
+                return item.id === this.value
+            })
+            if (index > -1) {
+                this.data[index].selected = true
+            }
+        },
+        /**
+         * description 设置标签的样式
+         * params  index: 序号
+        */
+        labelStyle (index) {
+            return {
+                color:this.tagTextColors[index],
+                backgroundColor:this.tagBgColors[index]
+            }
+        },
+        /**
+         * description 处理点击操作 向上传递事件和选中项
+         * params  option:当前项个   index: 序号
+        */
+        clickHandle (option) {
+            if (option.disabled) {
+                return
+            }
+            option.selected = !option.selected
+            this.$emit('change', option)
+        },
+        /**
+         * description 响应取消事件
+        */
+        cancel () {
+            this.$emit('cancel')
+        },
+        /**
+         * description 响应确认事件
+        */
+        confirm () {
+            if (this.disableConfirm) return;
+            this.$emit('confirm')
+        }
+    }
+}
+</script>
+ <style lang="stylus">
+.p-select-not-found
+    height 54px
+    padding 16px 0 16px 12px
+    border-radius 4px
+    line-height 22px
+    font-size 14px
+    color $grey-400
+    background: $white
+    box-sizing border-box
+    min-width 180px
+    overflow hidden
+    text-overflow ellipsis
+    white-space nowrap
+.p-select-option-box
+    position absolute
+    border 1px solid $grey-300
+    max-height 300px
+    border-radius 4px
+    box-shadow $box-shadow-bottom
+    background $white
+    font-size 0
+    .p-select-option-menu
+        font-size 0
+        padding-top 8px
+        padding-bottom 8px
+        max-height 248px
+        overflow auto
+        .p-select-option-selected
+            background-color $blue-100
+        .p-select-option
+            display flex
+            align-items center
+            justify-content space-between
+            position relative
+            width 100%
+            box-size border-box
+            border-radius 0
+            padding 8px 0 8px 12px
+            cursor pointer
+            overflow hidden
+            text-overflow ellipsis
+            white-space nowrap
+            &:hover
+                background-color $grey-100
+            .p-select-option-content
+                display flex
+                align-items center
+                justify-content: flex-start
+                font-size 0
+                .p-select-option-wraper
+                    display flex
+                    align-items center
+                    justify-content: center
+                    .p-select-option-avatar
+                        display flex
+                        align-items center
+                        justify-content: center
+                        margin 4px 0 4px 0
+                        overflow hidden
+                    .p-select-option-label
+                        display inline-block
+                        width 44px
+                        height 24px
+                        margin-right 8px
+                        line-height 24px
+                        font-size 14px
+                        text-align center
+                        overflow hidden
+                .p-select-option-main
+                    overflow hidden
+                    text-overflow ellipsis
+                    white-space nowrap
+                    font-size 14px
+                    line-height 22px
+                    color $grey-900
+                .p-select-option-main-selected
+                    color $blue-500
+                .p-select-option-main-disabled
+                    color $grey-400
+                .p-select-option-desc
+                    overflow hidden
+                    text-overflow ellipsis
+                    white-space nowrap
+                    font-size 12px
+                    line-height 18px
+                    color $grey-500
+                .p-select-option-desc-selected
+                    color $blue-500
+                .p-select-option-desc-disabled
+                    color $grey-400
+            .p-select-multiple-icon
+                position absolute
+                right 12px
+                top 50%
+                width 12px
+                height 6px
+                border:2px solid rgb(0, 145, 255)
+                border-top none
+                border-right none
+                transform translateY(-50%) rotate(-45deg)
+    .p-select-confirm-panel
+        display flex
+        justify-content flex-end
+        align-items center
+        height 46px
+        width 100%
+        span
+            font-size 14px
+            cursor pointer
+        span:first-child
+            color $grey-900
+            margin-right 16px
+        span:last-child
+            color $blue-500
+            margin-right 12px
+        span.disabled-confirm-button
+            font-size 14px
+            color $grey-400
+            cursor not-allowed
+    .p-select-panel-shadow
+        position relative
+        &::after
+            content ''
+            display block
+            position absolute
+            top 0
+            left 0
+            width 100%
+            height 100%
+            pointer-events none
+            box-shadow  $box-shadow-top
+    .p-select-option-divider
+        border-bottom 1px solid $red-200
+    .p-select-option-disabled
+        color $grey-400
+        background $red-200
+        cursor not-allowed!important
+    .p-select-option-classify
+        padding 8px 0 8px 12px
+        color $grey-500
+        font-size 14px
+        line-height 22px
+</style>

+ 940 - 0
src/components/Select/Select.vue

@@ -0,0 +1,940 @@
+<template>
+    <div  v-clickoutside="handleClose" :class="classes" ref='pSelect'>
+        <div
+            :disabled="disabled"
+            :class="headerClass"
+            @click="handleOpen"
+            @mouseenter.stop="handleHideShowClearIcon(true)"
+            @mouseleave.stop="handleHideShowClearIcon(false)"
+            :style="headerStyle" >
+            <span class="p-select-title" ref="caption" v-if="caption" >{{caption}}</span>
+            <span class="p-select-selected-box"  >
+                <input
+                    :class="[this.prefixCls + '-input']"
+                    :style="placeholderStyle"
+                    :disabled='disabled'
+                    @blur="handleBlur"
+                    @input="handleInput"
+                    @focus.stop="handleFocus"
+                    type="text"
+                    ref="input"
+                    autocomplete="off"
+                    spellcheck="false"
+                    v-model="selectedItem"
+                />
+                <span
+                    class="p-select-fakePlaceholder"
+                    :style="placeholderStyle"
+                    v-show="showPlaceholder"
+                    v-html="fakePlaceholder">
+                </span>
+            </span>
+            <Triangle v-show="!clearable" :class="triangleClass"></Triangle>
+            <Remove class="p-select-clear" @click.stop="clearAll" v-show="!hideClear && clearable"></Remove>
+        </div>
+    </div>
+</template>
+<script>
+import createPopover from './popover'
+import Drop from './Drop.vue'
+import Triangle from './static/iconSvg/triangle.svg'
+import Remove from './static/iconSvg/clear2.svg'
+import iconClose from './static/iconSvg/icon_close.svg'
+import clickoutside from './clickoutside.js'
+import Options from './dropdown'
+import {zIndexIncrease, zIndex} from './dispatchZindex'
+
+export default {
+    name: "pSelect",
+    inheritAttrs: false,
+    directives: {
+        'clickoutside':clickoutside,
+    },
+    components: { Triangle, Drop, iconClose,Remove},
+    computed:{
+        classes () {
+            return [
+                `${this.prefixCls}`,
+                {
+                    [`${this.prefixCls}-multiple`]: this.multiple,
+                }
+            ];
+        },
+        headerClass () {
+            return [
+                'p-select-header',
+                {
+                    ['p-select-header-radius']:this.radius,
+                    ['p-select-header-focused']: this.focused && !this.disabled,
+                    ['p-select-header-disabled']: this.disabled
+                }
+            ]
+        },
+        headerStyle () {
+            return {
+                width : this.width + 'px',
+                borderRadius: this.radius ? '16px' : '4px',
+                backgroundColor: this.disabled ? '#EFF0F1' :'white',
+            }
+        },
+        triangleClass () {
+            return [ 'p-select-triangle', this.dropInstance &&  this.dropInstance.dropVisible ? 'p-select-triangle-up' : 'p-select-triangle-down']
+        },
+
+        placeholderStyle () {
+            let code = 0
+            if (this.caption) {
+                code = this.caption.charCodeAt(this.caption.length - 1)
+                if (code === 65306) {
+                    return {
+                        paddingLeft : 0,
+                        transform: 'translateX(-2px)',
+                        cursor:this.disabled ? 'not-allowed': 'pointer'
+                    }
+                } else {
+                    return {
+                        paddingLeft: code === 58 ? '8px' : '12px',   // 中文冒号还是英文冒号
+                        cursor:this.disabled ? 'not-allowed': 'pointer'
+                    }
+                }
+            }
+        },
+        tipText:{
+            get(){
+                const data=JSON.parse(JSON.stringify(this.confirmedItems));
+                const len=data.length-1;
+                let text='';
+                data.forEach((d, i) => {
+                    if (i<len) {
+                        text+=d.name+'、';
+                    } else {
+                        text+=d.name;
+                    }
+                });
+                return text;
+            }
+        },
+        fakePlaceholder () {
+            if (this.multiple) {
+                const len =this.confirmedItems.length
+                if (len) {
+                        if (this.dropInstance && this.dropInstance.dropVisible) {
+                            return  `已选择<span style="margin:0 4px">${len}</span>项`
+                        } else {
+                            return  `<span style="color:#1F2329">已选择<span style="margin:0 4px; color:#0091FF">${len}</span>项</span>`
+                        }
+
+                } else {
+                    return this.placeholder
+                }
+            } else {
+                if (this.currentSelectedItem) {
+                    const name = this.currentSelectedItem.name
+                    if (this.dropInstance && this.dropInstance.dropVisible) {
+                        return  name
+                    } else {
+                        return  `<span style="color:#1F2329">${name}</span>`
+                    }
+                } else {
+                    return this.placeholder
+                }
+            }
+        },
+    },
+    watch : {
+        query (n,o) {
+            if (n === o) return;
+            if (!n && this.dropInstance) {
+                this.selectedItem = ''
+            }
+        },
+        selectedItem(n, o) {
+            if (n === o) return;
+            this.showPlaceholder = !n;
+        },
+        /**
+         * 下拉列表数据
+         */
+        selectdata:{
+            handler (n, o) {
+                if (n !== o) {
+                    console.log("data change...........")
+                    this.dropData = this.cloneDeep(n)
+                    this.dropData.forEach(item => {
+                        this.$set(item,'selected',false)
+                    })
+                    this.defaultSelect()
+                    if (this.dropInstance) {
+                        this.dropInstance.data = this.dropData
+                        this.resetDropPanelPos()
+                    }
+                }
+            },
+            deep:true,
+            immediate: true
+        },
+        /**
+         * 默认选中项
+         */
+        value:{
+            handler(n, o) {
+                if (n !== o && n) {
+                    this.defaultSelect()
+                    if (this.dropInstance) {
+                        this.dropInstance.value=n
+                    }
+                }
+            },
+            immediate:true
+        },
+    },
+    props: {
+        placeholder:{
+            type:String,
+            default:''
+        },
+        /**
+         * 是否多选
+         */
+        multiple:{
+            type: Boolean,
+            default: false
+        },
+        count:{
+            type: Boolean,
+            default: false
+        },
+        /**
+         * 绑定的v-model值
+         */
+        value: {
+            type: [String, Number, Array],
+        },
+        /**
+         * 下拉列表数据
+         */
+        selectdata: {
+            type: Array,
+            default: () => []
+        },
+        /**
+         * 宽度
+         */
+        width: {
+            type: [String, Number],
+            default: '200'
+        },
+        /**
+         * 是否设置圆角
+         */
+        radius: {
+            type: Boolean,
+            default: false
+        },
+        /**是否设置标题 */
+        caption:{
+            type: String,
+            default: ''
+        },
+        /**是否是禁止选中 */
+        disabled:{
+            type: Boolean,
+            default: false
+        },
+         // 提示框位置
+        tipPlace: {
+            type: String,
+            default: ''
+        },
+        // 是否显示触发器上的清空图标
+        hideClear: {
+            type: Boolean,
+            default: false
+        },
+        transfer:{  // 需要监听滚动的dom元素的ID
+            type:String,
+            default:''
+        }
+
+    },
+    data() {
+        return {
+            prefixCls:'p-select',
+            selectedItems:[],  // 多选条件下被选项集合
+            selectedItem:'',   // 单选条件下被选选
+            selectedItemsText:'',  // 多选条件下已选项提示框
+            dropVisible:false, // 控制下拉列表的显示隐藏,
+            getScroll:null,
+            queryItems:[],   // 搜索下拉框
+            query:'', // 搜索项
+            showPlaceholder: true,  // 是否显示占位符
+            showInputText:false, //控制输入文字的显示隐藏
+            showCount:false, // 控制显示隐藏已选项的提示文本
+            dropData:[],  // 下拉框绑定数据
+            dropInstance:null,  // 下拉框实例
+            popoverInstance:null, // 弹出框
+            currentSelectedItem: null,
+            confirmedItems: [],   // 点击确认所提交的数据
+            focused:false,   // 判断当前是否处于获取焦点的状态
+            storeInput: '',
+            storePlaceholder:'',
+            selectedTipStyle: { bottom: 0, left: 0 },
+            clearable:false,
+            timer:null,
+            timer2:null,
+            scrollDom:null
+        }
+    },
+    created(){
+
+    },
+    mounted () {
+        document.addEventListener('mousewheel', this.throttleWheel, false);
+        if (this.transfer) {
+            let transfer = this.transfer
+            if (!transfer.startsWith("#")) {
+                transfer = "#" + transfer
+            }
+            this.scrollDom = document.querySelector(transfer)
+            if (this.scrollDom) {
+                this.scrollDom.addEventListener('mousewheel', this.listenDomScroll, false)
+            }
+        }
+    },
+    methods: {
+        listenDomScroll(){
+            if (this.dropInstance) {
+                this.dropInstance.dropVisible = false
+            }
+        },
+        throttleWheel () {
+            if (this.timer2) clearTimeout(this.timer2);
+            this.timer2 = setTimeout(()=>{
+                this.wheelListenter()
+                this.timer2 = null
+            }, 300)
+        },
+        handleHideShowClearIcon (bool) {
+            this.handleTipShow(bool)
+            if (this.hideClear) return;
+            if (this.multiple) {
+                if (this.confirmedItems.length) {
+                    this.clearable = bool
+                }
+            } else {
+                if (this.currentSelectedItem) {
+                    this.clearable = bool
+                }
+            }
+        },
+        clearAll () {
+            if (this.multiple) {
+                if (this.popoverInstance) {
+                    this.popoverInstance.showTip = false
+                }
+                this.confirmedItems = []
+                this.selectedItems = []
+                this.clearable = false
+                this.selectConfirmData(this.selectedItems)
+                if (this.dropInstance) {
+                    if (this.dropInstance.dropVisible) {
+                        this.dropInstance.dropVisible = false
+                    }
+                }
+                this.$emit('input', [])
+            } else {
+                this.clearable = false
+                this.currentSelectedItem = null
+                this.selectSingleItem()
+                if (this.dropInstance) {
+                    if (this.dropInstance.dropVisible) {
+                        this.dropInstance.dropVisible = false
+                    }
+                }
+                this.$emit('input', '')
+            }
+        },
+        handleTipShow (bool) {
+            if(!this.confirmedItems.length) return;
+            if (this.dropInstance) {
+                if (this.dropInstance.showCascader) return;
+            }
+            if (this.tipText && this.tipPlace) {
+                if (this.popoverInstance) {
+                    this.resetPopoverPos()
+                    this.popoverInstance.showTip = bool
+                } else {
+                    if (this.caption) {
+                        this.captionW = this.$refs.caption.getBoundingClientRect().width
+                    }
+                    this.leftW = this.caption ? this.captionW +  68 : 68
+                    if (this.confirmedItems.length > 9) {
+                        this.leftW = this.leftW + 8
+                    }
+                    this.popoverInstance = createPopover({
+                        tag: this.$refs.pSelect ,
+                        props:{
+                            innertext: this.tipText,
+                            leftW:this.leftW,
+                            tipPlace:this.tipPlace
+                        }
+                    }).$on('sotrePOs', (pos) => {
+                        this.tDom =  pos
+                        this.popoverInstance.$nextTick(()=>{
+                            this.popoverInstance.showTip = true
+                        })
+                    })
+                }
+            }
+        },
+        resetPopoverPos ( ) {
+            if (this.popoverInstance) {
+                this.popoverInstance.innertext = this.tipText
+                const pDom = this.$refs.pSelect.getBoundingClientRect()
+                this.leftW = this.caption ? this.captionW +  68 : 68
+                if (this.confirmedItems.length > 9) {
+                    this.leftW = this.leftW + 8
+                }
+                const pos = createPopover.resetPosition(pDom, this.tDom, this.leftW, this.tipPlace, 12)
+                if (pos.finalBottom) {
+                    this.popoverInstance.popoverStyle={
+                        left: pos.finalLeft + 'px',
+                        bottom: pos.finalBottom + 'px'
+                    }
+                } else {
+                    this.popoverInstance.popoverStyle={
+                        top: pos.finalTop+ 'px',
+                        left: pos.finalLeft + 'px',
+                    }
+                }
+                if (pos.tranigleBottom) {
+                    this.popoverInstance.tranigleStyle = {
+                        bottom: pos.tranigleBottom+ 'px',
+                        left: pos.tranigleLeft + 'px'
+                    }
+                } else {
+                    this.popoverInstance.tranigleStyle = {
+                        top: pos.tranigleTop+ 'px',
+                        left: pos.tranigleLeft + 'px'
+                    }
+                }
+            }
+        },
+        wheelListenter () {
+            this.$refs.input.blur()
+            if (this.dropInstance) {
+                this.dropInstance.dropVisible = false
+            }
+            if (this.popoverInstance) {
+                this.popoverInstance.showTip = false
+            }
+        },
+        defaultSelect () {
+            if (!this.value) return;
+            if (this.multiple) {
+                if (Array.isArray(this.value) && this.value.length) {
+                    this.confirmedItems = []
+                    this.selectedItems= []
+                    this.value.forEach(val => {
+                        const index = this.dropData.findIndex(item => {return item.id === val})
+                        if (index > -1) {
+                            this.confirmedItems.push(this.dropData[index])
+                            this.selectedItems.push(this.dropData[index])
+                        }
+                    })
+                    if (this.confirmedItems.length) {
+                        this.showPlaceholder = true
+                    }
+                }
+            } else {
+                if (this.value.toString().trim()) {
+                    this.dropData.forEach(item => {
+                        if (item.id === this.value.toString().trim()) {
+                            this.currentSelectedItem = item
+                        }
+                    })
+                    this.showPlaceholder = true
+                    this.selectSingleItem()
+                }
+            }
+        },
+
+        /**
+         * description 深度克隆对象
+         * params obj 需要克隆的对象
+         */
+        cloneDeep(obj) {
+            if (typeof obj !=='object' || obj === null) {
+                return obj
+            }
+            const newObj = Array.isArray(obj) ? [] : {}
+            for (const key in obj) {
+                if (typeof obj[key] === 'object') {
+                    newObj[key]  = this.cloneDeep(obj[key] )
+                } else {
+                    newObj[key] = obj[key]
+                }
+            }
+            return newObj
+        },
+        /**
+        * description 处理用户输入事件
+        * params event事件对象
+        */
+        handleInput (event) {
+            this.query = event.target.value || event.data || ''
+            this.showPlaceholder = !this.query
+            if (!this.dropInstance) return
+            if (this.query) {
+                this.dropInstance.query = this.query
+                this.dropInstance.data = this.findSelectedItem()
+            } else {
+                if (!this.multiple) {
+                    this.selectSingleItem()
+                } else {
+                    this.dropData.forEach(item => {delete item.display})
+                }
+            }
+        },
+        selectSingleItem () {
+            if (this.currentSelectedItem) {
+                this.dropData.forEach(item => {
+                    delete item.display
+                    if (item.id === this.currentSelectedItem.id) {
+                        item.selected = true
+                    } else {
+                        item.selected = false
+                    }
+                })
+            } else {
+                this.dropData.forEach(item => {
+                    delete item.display
+                    item.selected = false
+                })
+            }
+            if ( this.dropInstance) {
+                this.dropInstance.data = this.dropData
+            }
+        },
+        /**
+        * description 处理点击事件
+        * params option 选中项
+        */
+        optionClick (option) {
+            if (option.disabled) return
+            if (this.multiple) {
+                if (option.selected) {
+                    this.selectedItems.push(option)
+                    this.$emit('change', option)
+                } else {
+                    const index = this.selectedItems.findIndex((item) => {return item.id===option.id})
+                    if (index > -1) {
+                        this.selectedItems.splice(index,1)
+                    }
+                }
+                this.disableConfirmBtn()
+            } else {
+                if (!this.dropInstance) return
+                this.currentSelectedItem = option
+                this.query = ''
+                this.selectSingleItem()
+                this.dropInstance.data = this.dropData
+                this.dropInstance.dropVisible = false
+                const emitData = this.cloneDeep(option)
+                delete emitData.index
+                delete emitData.selected
+                this.$emit('input', emitData.id)
+                this.$emit('change', emitData)
+            }
+        },
+
+         /**
+         * description 根据输入内容筛选匹配项
+         */
+        findSelectedItem () {
+            const selections = []
+            this.dropData.forEach(item => {
+                item.display = item.name
+                selections.push(item)
+            })
+            const foundItems = selections.filter(item => {
+                return item.name ? item.name.indexOf(this.query) > -1 : false
+            }).map(item => {
+                item.display = item.display.replace(new RegExp(this.query, 'g'), `<span style="color:#0091FF">${this.query}</span>`)
+                return item
+            })
+            if(foundItems.length ) {
+                foundItems.forEach(item => {
+                    const index = this.selectedItems.findIndex(option => {return item.id === option.id})
+                    if (index > -1) {
+                        item.selected = true
+                    }
+                })
+            }
+            return foundItems
+        },
+        resetDropPanelPos () {
+            const props = {
+                data: this.dropData,
+                multiple: this.multiple
+            }
+            Options.resetPos(this.dropInstance, this.$refs.pSelect, document.body,props)
+        },
+        /**
+         * description 下拉框在打开和合上之间切换状态
+         */
+        handleOpen () {
+            if (this.disabled) return
+            if (this.dropInstance) {
+                if (this.multiple && this.confirmedItems.length) {
+                    this.disableConfirmBtn()
+                }
+                this.dropInstance.dropVisible=true
+                if (this.popoverInstance) {
+                    this.popoverInstance.showTip = false
+                }
+                this.resetDropPanelPos()
+            } else {
+                zIndexIncrease()
+                const data=this.dropData, value=this.value, multiple = this.multiple
+                // 初始化实例
+                this.dropInstance=Options({
+                    tag: this.$refs.pSelect, data:{value, zIndex}, props:{multiple, query: this.query, value, data}
+                }).$on('change', (option) => {
+                    this.optionClick(option)
+                }).$on('cancel' ,() => {
+                    this.emitCancel()
+                }).$on('confirm' ,() => {
+                    this.emitConfirm()
+                })
+                if (this.multiple && this.confirmedItems.length) {
+                    this.selectConfirmData(this.confirmedItems)
+                } else {
+                    this.selectSingleItem()
+                }
+                this.dropInstance.$nextTick(() => {
+                    this.dropInstance.dropVisible=true
+                    if (this.popoverInstance) {
+                        this.popoverInstance.showTip = false
+                    }
+                })
+            }
+        },
+        /**
+         * description 处理获取焦点的事件
+         */
+        handleFocus () {
+            this.focused = true
+        },
+        /**
+         *description 输入框失去焦点的事件
+        */
+        handleBlur () {
+            this.focused = false
+        },
+        /**
+         * description 向父组件传递取消并关闭下拉框
+         */
+        emitCancel () {
+            if(this.dropInstance){
+                this.query = ''
+                this.selectedItems = []
+                this.dropInstance.dropVisible = false
+                this.selectConfirmData(this.confirmedItems)
+                this.disableConfirmBtn()
+                this.$emit('cancel')
+            }
+        },
+        /**
+         * description 向父组件传递确认事件并关闭下拉框
+         */
+        emitConfirm () {
+            if (this.dropInstance) {
+                this.dropInstance.dropVisible = false
+                this.confirmedItems = this.cloneDeep(this.selectedItems)
+                this.query = ''
+                const emitData = this.cloneDeep(this.selectedItems)
+                const ids = []
+                emitData.forEach(item=>{
+                    delete item.index
+                    delete item.selected
+                    ids.push(item.id)
+                })
+                this.$emit('input', ids)
+                this.$emit('confirm', emitData)
+
+            }
+        },
+        /**
+         * description 关闭下拉列表
+         */
+        handleClose () {
+            if (this.dropInstance) {
+                this.dropInstance.dropVisible = false
+                this.query = ''
+                if (this.multiple) {
+                    this.selectedItems = []
+                    setTimeout(()=>{
+                        this.selectConfirmData(this.confirmedItems)
+                    },500)
+                } else {
+                    setTimeout(()=>{
+                        this.selectSingleItem()
+                    },500)
+                }
+            }
+        },
+        /**
+         *
+         */
+        selectConfirmData (data) {
+            if (!this.dropInstance) return
+            this.dropData.forEach(option => {
+                const index = data.findIndex((item) => {return item.id===option.id})
+                if (index > -1) {
+                    option.selected = true
+                } else {
+                    option.selected = false
+                }
+                delete option.display
+            })
+            if (this.confirmedItems.length) {
+                this.selectedItems = this.cloneDeep(this.confirmedItems)
+            }
+            this.selectedItem = ''
+            this.dropInstance.data = this.dropData
+        },
+        disableConfirmBtn () {
+            if (!this.dropInstance) return
+            if( (this.confirmedItems.length !== this.selectedItems.length) ) {
+                this.dropInstance.disableConfirm = false
+            } else {
+                let flag = this.confirmedItems.every((item) => {
+                    return this.selectedItems.findIndex(option => { return option.id === item.id}) > -1
+                })
+                if (!this.confirmedItems.length && this.selectedItems.length) {
+                    flag = false
+                }
+                if (!this.confirmedItems.length && !this.selectedItems.length) {
+                    flag = true
+                }
+                if (flag) {
+                    this.dropInstance.disableConfirm = true
+                } else {
+                    this.dropInstance.disableConfirm = false
+                }
+            }
+        },
+    },
+    /**
+     * description 组件销毁
+     */
+    beforeDestroy() {
+        if (this.dropInstance) {
+            this.dropInstance.dropVisible = false
+            Options.remove(this.dropInstance)
+            createPopover.remove(this.popoverInstance)
+        }
+        document.removeEventListener('mousewheel',this.throttleWheel)
+        if (this.transfer) {
+            this.scrollDom.removeEventListener('mousewheel', this.listenDomScroll)
+        }
+    }
+}
+</script>
+<style lang="stylus">
+    @import "./static/stylus/animate/selectDownUp.styl"
+    @import "./static/stylus/palette.styl"
+    .p-select
+        position relative
+        display inline-block
+        vertical-align middle
+        cursor pointer
+        outline none
+        .p-select-drop-down
+            position fixed;
+            .p-select-not-found
+                height 54px
+                padding 16px 0 16px 12px
+                border 1px solid $grey-300
+                border-radius 4px
+                line-height 22px
+                font-size 14px
+                color $grey-400
+                background:$white
+                box-shadow $box-shadow-bottom
+                box-sizing border-box
+        .p-select-header
+            position relative
+            display flex
+            min-height 32px
+            height 32px
+            width 100%
+            box-sizing border-box
+            border 1px solid $grey-400
+            border-radius 4 px
+            cursor pointer
+            text-align left
+            .p-select-count
+                color $grey-900
+                font-size 14px
+                line-height 30px
+                padding-left 12px
+                .p-select-count-active
+                    color $blue-500
+                    margin 0 4px
+            .p-select-title
+                display inline-block
+                padding 0 0 0 12px
+                height 30px
+                line-height 30px
+                font-size 14px
+                flex-shrink 0
+                color $grey-500
+                pointer-events none
+            .p-select-selected-box
+                position relative
+                flex-shrink 1
+                display inline-block
+                width 100%
+                box-sizing border-box
+                color $grey-900
+                font-size 14px
+                .p-select-input, .p-select-fakePlaceholder
+                    display inline-block
+                    position absolute
+                    left 0
+                    top 0
+                    padding-left 12px
+                    line-height 30px
+                    width 100%
+                    font-size 14px
+                    border none
+                    outline none
+                .p-select-fakePlaceholder
+                    //z-index 999
+                    pointer-events none
+                    color $grey-400
+                    line-height 30px
+                    padding-right 32px
+                    overflow hidden
+                    text-overflow ellipsis
+                    white-space nowrap
+                .p-select-input
+                    //z-index 1
+                    line-height 30px
+                    height 30px
+                    padding-right 32px
+                    background transparent
+                .p-select-input-fakePlaceholder
+                    color $grey-900
+            .p-select-triangle
+                position absolute
+                //z-index 999
+                top 8px
+                right 10px
+                width 16px
+                height 16px
+                transform-origin center center
+                transform rotate(180deg)
+                transition transform 0.3s
+                will-change rotate
+            .p-select-clear
+                position absolute
+                //z-index 999
+                top 8px
+                right 10px
+                width 14px
+                height 14px
+                path
+                    fill $grey-300
+                    transition fill 0.5s
+                &:hover
+                    path
+                        fill $blue-500
+            .p-select-triangle-up
+                transform rotate(0deg)
+            .p-select-triangle-down
+                transform rotate(180deg)
+            &:hover
+                border 1px solid $blue-500
+                transition 0.3s
+            .p-select-input-tip
+                position: absolute
+                padding: 16px 20px
+                background-color: $white
+                border-radius: 4px
+                pointer-events: none
+                max-width: 280px
+                max-height: 104px
+                z-index: 100
+                &:after
+                    position: absolute
+                    display: inline-block
+                    border-style: solid
+                    border-width: 4px
+                    width: 0
+                    height: 0
+                    transform: rotate(-45deg)
+                    z-index: 0
+                    content: ''
+                .p-select-input-tip-item
+                    position: relative
+                    overflow: hidden
+                    max-height: 66px
+                    line-height: 22px
+                    font-size: 14px
+                    word-wrap: break-word
+                    word-break: break-all
+                .p-select-input-tip-overflow
+                    &:after
+                        position: absolute
+                        right: 0
+                        bottom: 0
+                        display: inline-block
+                        width: 20px
+                        height: 22px
+                        background-color: $white
+                        content: '...'
+            .p-select-input-tip-top
+                box-shadow: $box-shadow-bottom
+                &:after
+                    bottom: -4px
+                    left: 58px
+                    border-color: transparent transparent $white $white
+                    box-shadow: $box-shadow-min-top
+                    z-index: -1
+            .p-select-input-tip-bottom
+                box-shadow: $box-shadow-left
+                &:after
+                    top: -4px
+                    left: 58px
+                    border-color: $white $white transparent transparent
+                    box-shadow: $box-shadow-min-bottom
+            .p-select-input-tip-left
+                box-shadow: $box-shadow-right
+                &:after
+                    top: 49%
+                    right: -4px
+                    border-color: transparent $white $white transparent
+                    box-shadow: $box-shadow-min-right
+            .p-select-input-tip-right
+                box-shadow: $box-shadow-top
+                &:after
+                    top: 49%
+                    left: -4px
+                    border-color: $white transparent transparent $white
+                    box-shadow: $box-shadow-min-left
+        .p-select-header-radius
+            border 1px solid $grey-400
+            border-radius 12px
+        .p-select-header-focused
+            border 1px solid $blue-500
+            box-shadow $box-shadow-blue
+            transition 0.3s
+        .p-select-header-disabled
+            background:$red-200
+            cursor:not-allowed
+            &:hover
+               border 1px solid $grey-300
+</style>

+ 23 - 0
src/components/Select/clickoutside.js

@@ -0,0 +1,23 @@
+/**
+ * v-clickoutside
+ * @desc 点击元素外面才会触发的事件
+ */
+export default {
+  bind (el, binding, vnode) {
+      function documentHandler (e) {
+        if (el.contains(e.target)) { // 如果点击的是绑定元素则不执行绑定函数
+            return false;
+        }
+        let classList = e.target.classList
+        if (binding.expression && !classList.contains('p-select-count') && !classList.contains('p-select-count-active') ) { // 如果点击的不是绑定元素则执行绑定函数
+            binding.value(e);
+        }
+      }
+      el.__vueClickOutside__ = documentHandler;  
+      document.addEventListener('click', documentHandler); // 添加事件监听
+  },
+  unbind (el, binding) {
+      document.removeEventListener('click', el.__vueClickOutside__);  // 移除事件监听
+      delete el.__vueClickOutside__;
+  }
+};

+ 24 - 0
src/components/Select/directive/clickoutside.js

@@ -0,0 +1,24 @@
+
+/**
+ * v-clickoutside
+ * @desc 点击元素外面才会触发的事件
+ */
+export default {
+  bind (el, binding, vnode) {
+      function documentHandler (e) {
+        if (el.contains(e.target)) { // 如果点击的是绑定元素则不执行绑定函数
+            return false;
+        }
+        let classList = e.target.classList
+        if (binding.expression && !classList.contains('p-select-count') && !classList.contains('p-select-count-active') ) { // 如果点击的不是绑定元素则执行绑定函数
+            binding.value(e);
+        }
+      }
+      el.__vueClickOutside__ = documentHandler;  
+      document.addEventListener('click', documentHandler); // 添加事件监听
+  },
+  unbind (el, binding) {
+      document.removeEventListener('click', el.__vueClickOutside__);  // 移除事件监听
+      delete el.__vueClickOutside__;
+  }
+};

+ 8 - 0
src/components/Select/directive/dispatchZindex.js

@@ -0,0 +1,8 @@
+ 
+let zIndex = 1000;
+
+function zIndexIncrease() {
+    zIndex++;
+}
+
+export {zIndex, zIndexIncrease};

+ 227 - 0
src/components/Select/directive/dom.js

@@ -0,0 +1,227 @@
+/* istanbul ignore next */
+
+import Vue from 'vue';
+
+const isServer = Vue.prototype.$isServer;
+const SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
+const MOZ_HACK_REGEXP = /^moz([A-Z])/;
+const ieVersion = isServer ? 0 : Number(document.documentMode);
+
+/* istanbul ignore next */
+const trim = function(string) {
+  return (string || '').replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, '');
+};
+/* istanbul ignore next */
+const camelCase = function(name) {
+  return name.replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
+    return offset ? letter.toUpperCase() : letter;
+  }).replace(MOZ_HACK_REGEXP, 'Moz$1');
+};
+
+/* istanbul ignore next */
+export const on = (function() {
+  if (!isServer && document.addEventListener) {
+    return function(element, event, handler) {
+      if (element && event && handler) {
+        element.addEventListener(event, handler, false);
+      }
+    };
+  } else {
+    return function(element, event, handler) {
+      if (element && event && handler) {
+        element.attachEvent('on' + event, handler);
+      }
+    };
+  }
+})();
+
+/* istanbul ignore next */
+export const off = (function() {
+  if (!isServer && document.removeEventListener) {
+    return function(element, event, handler) {
+      if (element && event) {
+        element.removeEventListener(event, handler, false);
+      }
+    };
+  } else {
+    return function(element, event, handler) {
+      if (element && event) {
+        element.detachEvent('on' + event, handler);
+      }
+    };
+  }
+})();
+
+/* istanbul ignore next */
+export const once = function(el, event, fn) {
+  var listener = function() {
+    if (fn) {
+      fn.apply(this, arguments);
+    }
+    off(el, event, listener);
+  };
+  on(el, event, listener);
+};
+
+/* istanbul ignore next */
+export function hasClass(el, cls) {
+  if (!el || !cls) return false;
+  if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.');
+  if (el.classList) {
+    return el.classList.contains(cls);
+  } else {
+    return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1;
+  }
+};
+
+/* istanbul ignore next */
+export function addClass(el, cls) {
+  if (!el) return;
+  var curClass = el.className;
+  var classes = (cls || '').split(' ');
+
+  for (var i = 0, j = classes.length; i < j; i++) {
+    var clsName = classes[i];
+    if (!clsName) continue;
+
+    if (el.classList) {
+      el.classList.add(clsName);
+    } else if (!hasClass(el, clsName)) {
+      curClass += ' ' + clsName;
+    }
+  }
+  if (!el.classList) {
+    el.className = curClass;
+  }
+};
+
+/* istanbul ignore next */
+export function removeClass(el, cls) {
+  if (!el || !cls) return;
+  var classes = cls.split(' ');
+  var curClass = ' ' + el.className + ' ';
+
+  for (var i = 0, j = classes.length; i < j; i++) {
+    var clsName = classes[i];
+    if (!clsName) continue;
+
+    if (el.classList) {
+      el.classList.remove(clsName);
+    } else if (hasClass(el, clsName)) {
+      curClass = curClass.replace(' ' + clsName + ' ', ' ');
+    }
+  }
+  if (!el.classList) {
+    el.className = trim(curClass);
+  }
+};
+
+/* istanbul ignore next */
+export const getStyle = ieVersion < 9 ? function(element, styleName) {
+  if (isServer) return;
+  if (!element || !styleName) return null;
+  styleName = camelCase(styleName);
+  if (styleName === 'float') {
+    styleName = 'styleFloat';
+  }
+  try {
+    switch (styleName) {
+      case 'opacity':
+        try {
+          return element.filters.item('alpha').opacity / 100;
+        } catch (e) {
+          return 1.0;
+        }
+      default:
+        return (element.style[styleName] || element.currentStyle ? element.currentStyle[styleName] : null);
+    }
+  } catch (e) {
+    return element.style[styleName];
+  }
+} : function(element, styleName) {
+  if (isServer) return;
+  if (!element || !styleName) return null;
+  styleName = camelCase(styleName);
+  if (styleName === 'float') {
+    styleName = 'cssFloat';
+  }
+  try {
+    var computed = document.defaultView.getComputedStyle(element, '');
+    return element.style[styleName] || computed ? computed[styleName] : null;
+  } catch (e) {
+    return element.style[styleName];
+  }
+};
+
+/* istanbul ignore next */
+export function setStyle(element, styleName, value) {
+  if (!element || !styleName) return;
+
+  if (typeof styleName === 'object') {
+    for (var prop in styleName) {
+      if (styleName.hasOwnProperty(prop)) {
+        setStyle(element, prop, styleName[prop]);
+      }
+    }
+  } else {
+    styleName = camelCase(styleName);
+    if (styleName === 'opacity' && ieVersion < 9) {
+      element.style.filter = isNaN(value) ? '' : 'alpha(opacity=' + value * 100 + ')';
+    } else {
+      element.style[styleName] = value;
+    }
+  }
+};
+
+export const isScroll = (el, vertical) => {
+  if (isServer) return;
+
+  const determinedDirection = vertical !== null || vertical !== undefined;
+  const overflow = determinedDirection
+    ? vertical
+      ? getStyle(el, 'overflow-y')
+      : getStyle(el, 'overflow-x')
+    : getStyle(el, 'overflow');
+
+  return overflow.match(/(scroll|auto)/);
+};
+
+export const getScrollContainer = (el, vertical) => {
+  if (isServer) return;
+
+  let parent = el;
+  while (parent) {
+    if ([window, document, document.documentElement].includes(parent)) {
+      return window;
+    }
+    if (isScroll(parent, vertical)) {
+      return parent;
+    }
+    parent = parent.parentNode;
+  }
+
+  return parent;
+};
+
+export const isInContainer = (el, container) => {
+  if (isServer || !el || !container) return false;
+
+  const elRect = el.getBoundingClientRect();
+  let containerRect;
+
+  if ([window, document, document.documentElement, null, undefined].includes(container)) {
+    containerRect = {
+      top: 0,
+      right: window.innerWidth,
+      bottom: window.innerHeight,
+      left: 0
+    };
+  } else {
+    containerRect = container.getBoundingClientRect();
+  }
+
+  return elRect.top < containerRect.bottom &&
+    elRect.bottom > containerRect.top &&
+    elRect.right > containerRect.left &&
+    elRect.left < containerRect.right;
+};

+ 69 - 0
src/components/Select/directive/transfer-dom.js

@@ -0,0 +1,69 @@
+function getTarget (node) {
+    if (node === void 0) {
+        node = document.body
+    }
+    if (node === true) { return document.body }
+    return node instanceof window.Node ? node : document.querySelector(node)
+}
+
+const directive = {
+    inserted (el, { value }, vnode) {
+        if ( el.dataset && el.dataset.transfer !== 'true') return false;
+        el.className = el.className ? el.className + ' v-transfer-dom' : 'v-transfer-dom';
+        const parentNode = el.parentNode;
+        if (!parentNode) return;
+        const home = document.createComment('');
+        let hasMovedOut = false;
+
+        if (value !== false) {
+            parentNode.replaceChild(home, el); // moving out, el is no longer in the document
+            getTarget(value).appendChild(el); // moving into new place
+            hasMovedOut = true
+        }
+        if (!el.__transferDomData) {
+            el.__transferDomData = {
+                parentNode: parentNode,
+                home: home,
+                target: getTarget(value),
+                hasMovedOut: hasMovedOut
+            }
+        }
+    },
+    componentUpdated (el, { value }) {
+        if ( el.dataset && el.dataset.transfer !== 'true') return false;
+        // need to make sure children are done updating (vs. `update`)
+        const ref$1 = el.__transferDomData;
+        if (!ref$1) return;
+        // homes.get(el)
+        const parentNode = ref$1.parentNode;
+        const home = ref$1.home;
+        const hasMovedOut = ref$1.hasMovedOut; // recall where home is
+
+        if (!hasMovedOut && value) {
+            // remove from document and leave placeholder
+            parentNode.replaceChild(home, el);
+            // append to target
+            getTarget(value).appendChild(el);
+            el.__transferDomData = Object.assign({}, el.__transferDomData, { hasMovedOut: true, target: getTarget(value) });
+        } else if (hasMovedOut && value === false) {
+            // previously moved, coming back home
+            parentNode.replaceChild(el, home);
+            el.__transferDomData = Object.assign({}, el.__transferDomData, { hasMovedOut: false, target: getTarget(value) });
+        } else if (value) {
+            // already moved, going somewhere else
+            getTarget(value).appendChild(el);
+        }
+    },
+    unbind (el) {
+        if (el.dataset && el.dataset.transfer !== 'true') return false;
+        el.className = el.className.replace('v-transfer-dom', '');
+        const ref$1 = el.__transferDomData;
+        if (!ref$1) return;
+        if (el.__transferDomData.hasMovedOut === true) {
+            el.__transferDomData.parentNode && el.__transferDomData.parentNode.appendChild(el)
+        }
+        el.__transferDomData = null
+    }
+};
+
+export default directive;

+ 8 - 0
src/components/Select/dispatchZindex.js

@@ -0,0 +1,8 @@
+ 
+let zIndex = 7000;
+
+function zIndexIncrease() {
+    zIndex++;
+}
+
+export {zIndex, zIndexIncrease};

+ 86 - 0
src/components/Select/dropdown.js

@@ -0,0 +1,86 @@
+import Vue from 'vue';
+import O from './Drop';
+import CalcTargetPosition from './static/utils/CalcTargetPosition'
+const OptionsExtend=Vue.extend(O); // 继承Vue
+
+let OptionsVm=null; // 当前实例
+let domHeight = null
+let domWidth = null
+
+/**
+ * @param options
+ * tag 基于当前点击的dom对象或点击的根对象
+ * params 动态组件相关数据
+ */
+function calcHeightByData (props) {
+    let H
+    let totalH = 0
+    if (props.data.length) {
+        const item = props.data[0]
+        if (item.src && item.sub) {   // 有图片 有副标题
+            H = 58
+        } else if (item.src &&!item.sub) { // 有图片 没有副标题
+            H = 52
+        } else if (item.label ){  // 有标签
+            H = 40
+        } else if (!item.sub && !item.src && !item.label) { // 只有主标题
+            H = 40
+        } else if (item.sub && !item.src && !item.label) {  // 有副标题  没有图片 没有标签
+            H = 58
+        }
+    }
+    if (props.multiple) {
+        totalH =  H * props.data.length + 16 + 46
+    } else {
+        totalH =  H * props.data.length + 16
+    }
+    if (totalH > 300) totalH = 300
+
+    if (!props.data.length) {
+        totalH = 56
+    }
+    return totalH
+}
+
+const Options=(options) => {
+    const {tag, data, props}=options;
+    let {width}=tag.getBoundingClientRect(); // 根据当前点击的dom对象获取位置
+    //判断最大最小宽度
+    if (width<=180) {
+        width = 180
+    }
+    if (width > 600) {
+        width = 600
+    }
+    domHeight = calcHeightByData(props)
+    domWidth = width
+    const dom=document.body;
+    const {X,Y} = CalcTargetPosition(tag,dom,domHeight,width)
+    props.width = width
+    OptionsVm=new OptionsExtend({data, propsData : props}); // 实例化
+    OptionsVm=OptionsVm.$mount(); // 挂载
+
+    // 设置位置
+    OptionsVm.$el.style.top=Y + 'px';
+    OptionsVm.$el.style.left=X + 'px';
+    OptionsVm.$el.style.width=width+'px';
+    OptionsVm.$el.style.zIndex=data.zIndex;
+    dom.appendChild(OptionsVm.$el); // 插入dom
+    return OptionsVm;
+}
+
+Options.remove=(vm) => {
+    if (!vm) return;
+    if (vm._isDestroyed) return;
+    vm.$destroy();
+    const dom=vm.$el;
+    if (dom) dom.parentNode.removeChild(dom);
+}
+Options.resetPos=(vm, tag,dom, props) => {
+    const calcH = calcHeightByData(props)
+    const {X,Y} = CalcTargetPosition(tag, dom, calcH, domWidth)
+    vm.$el.style.top=Y + 'px';
+    vm.$el.style.left=X + 'px';
+}
+
+export default Options;

+ 32 - 0
src/components/Select/popover.js

@@ -0,0 +1,32 @@
+import Vue from 'vue';
+import popover from './popover.vue';
+import {calcTipPosition} from './utils'
+
+// import CalcTargetPosition from '../static/utils/CalcTargetPosition'
+// import {zIndexIncrease, zIndex} from './dispatchZindex'
+const PopoverExtend=Vue.extend(popover); // 继承Vue
+
+let PopoverVm = null
+ 
+const createPopover= (options) => {
+    let {tag, props}=options;
+    let pos=tag.getBoundingClientRect(); // 根据当前点击的dom对象获取位置
+    props.pos = pos
+    PopoverVm = new PopoverExtend({data:props})
+    PopoverVm = PopoverVm.$mount()
+    const bodyDom = document.body
+    bodyDom.appendChild(PopoverVm.$el)
+    return PopoverVm
+}
+
+createPopover.resetPosition = (pDom,tDom, leftW, tipPlace, border) => {
+    return calcTipPosition(pDom, tDom, leftW, tipPlace, border)
+}
+createPopover.remove=(vm) => {
+    if (!vm) return;
+    if (vm._isDestroyed) return;
+    vm.$destroy();
+    const dom=vm.$el;
+    if (dom) dom.parentNode.removeChild(dom);
+}
+export default createPopover

+ 132 - 0
src/components/Select/popover.vue

@@ -0,0 +1,132 @@
+ 
+<template>
+    <transition :name="'slide'+tipPlace" >
+        <div class="count-popover" ref="popover" :style="popoverStyle" v-show="showTip" >
+            <span class="count-popover-text"> {{innertext}}</span>
+            <span class="tranigle" :style="tranigleStyle"></span>
+        </div>
+    </transition>
+</template>
+<script>
+import {calcTipPosition} from './utils'
+export default {
+    data(){
+        return {
+            innertext:'',
+            pos:{},
+            popoverStyle:{
+                top:0,
+                left:0,
+                bottom:0
+            },
+            tranigleStyle:{
+                top:0,
+                left:0,
+                bottom:0
+            },
+            tipPlace:'',
+            showTip:false
+        }
+    },
+    watch:{
+        innertext:{
+            handler(n,o) {
+                this.$nextTick(()=>{
+                    let tDom = this.getClientBoxWH()
+                    let pos = calcTipPosition(this.pos, tDom, this.leftW, this.tipPlace, 12)
+                    if (pos.finalBottom) {
+                        this.popoverStyle={
+                            bottom: pos.finalBottom + 'px'
+                        }
+                    } else {
+                        this.popoverStyle={
+                            top: pos.finalTop+ 'px',
+                        }
+                    }
+                    if (pos.tranigleBottom) {
+                        this.tranigleStyle = {
+                            bottom: pos.tranigleBottom+ 'px',
+                        }
+                    } else {
+                        this.tranigleStyle = {
+                            top: pos.tranigleTop+ 'px',
+                        }
+                    }
+                    this.popoverStyle.left = pos.finalLeft + 'px',
+                    this.tranigleStyle.left = pos.tranigleLeft + 'px'
+                    this.$emit('sotrePOs', tDom)
+                })
+            },
+            immediate:true
+        }
+    },
+    mounted() {
+        
+    },
+    methods: {
+        getClientBoxWH () {
+            const body=document.body
+            let tag = document.createElement('div')
+            let html = ''
+            tag.className = 'count-popover'
+            tag.innerHTML= `<span>${this.innertext}</span>`
+            body.appendChild(tag)
+            let {width, height} = tag.getBoundingClientRect()
+            body.removeChild(tag)
+            return {width, height}
+        }
+    }
+}
+</script>
+<style lang="stylus">
+.count-popover
+    position absolute
+    z-index 7600
+    display inline-block
+    padding 8px 12px
+    background-color $white
+    border-radius 4px
+    max-width 480px
+    max-height 420px
+    word-wrap break-word
+    word-break:normal
+    pointer-events none
+    box-shadow $box-shadow-bottom
+    .tranigle
+        position: absolute
+        display: inline-block
+        width 12px
+        height 12px
+        background $white
+        transform rotate(-45deg)
+        z-index: 10
+        // border 1px solid red
+    .count-popover-text
+        display inline-block
+        width 100%
+        height 100%
+        overflow hidden
+@keyframes slidetop
+  from
+    opacity: 0
+    transform: translateY(32px)
+  to
+    opacity: 1
+    transform: translateY(0)
+.slidetop-enter-active
+  animation: slidetop 0.3s
+.slidetop-leave-active
+  animation: slidetop 0.3s reverse
+
+@keyframes slidebottom
+  from
+    opacity: 0
+    transform: translateY(-32px)
+  to
+    opacity: 1
+    transform: translateY(0)
+.slidebottom-enter-active
+  animation: slidebottom 0.3s
+.slidebottom-leave-active
+  animation: slidebottom 0.3s reverse
+</style>

+ 9 - 0
src/components/Select/static/iconSvg/action/AIS.svg

@@ -0,0 +1,9 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+        "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg viewBox="0 0 1024 1024" version="1.1"
+     xmlns="http://www.w3.org/2000/svg">
+    <path fill="#fff" d="M317.397333 677.632h392.533334c25.6 0 42.666667 17.066667 42.666666 42.666667s-17.066667 42.666667-42.666666 42.666666h-392.533334c-25.6 0-42.666667-17.066667-42.666666-42.666666 0-21.333333 17.066667-42.666667 42.666666-42.666667z"/>
+    <path d="M172.330667 41.898667h674.133333c51.2 0 89.6 38.4 89.6 85.333333v768c0 46.933333-38.4 85.333333-89.6 85.333333h-674.133333c-51.2 0-89.6-38.4-89.6-85.333333v-768c4.266667-46.933333 42.666667-85.333333 89.6-85.333333z m0 85.333333v768h674.133333v-768h-674.133333z"
+          fill="#80A0BA"/>
+    <path fill="#fff" d="M496.597333 494.165333l-98.133333-102.4c-12.8-17.066667-38.4-17.066667-55.466667 0s-17.066667 38.4-4.266666 51.2l162.133333 166.4 238.933333-290.133333c12.8-17.066667 12.8-42.666667-4.266666-55.466667s-42.666667-12.8-55.466667 4.266667l-183.466667 226.133333z"/>
+</svg>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 15 - 0
src/components/Select/static/iconSvg/action/AIS_filled.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 8 - 0
src/components/Select/static/iconSvg/action/BIAM.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/BIAM_filled.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 10 - 0
src/components/Select/static/iconSvg/action/EHM.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/EHM_filled.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 10 - 0
src/components/Select/static/iconSvg/action/EMS.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/EMS_filled.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 8 - 0
src/components/Select/static/iconSvg/action/EOM.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/EOM_filled.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 8 - 0
src/components/Select/static/iconSvg/action/EQM.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/EQM_filled.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 10 - 0
src/components/Select/static/iconSvg/action/GC.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/GC_filled.svg


+ 9 - 0
src/components/Select/static/iconSvg/action/HRM.svg

@@ -0,0 +1,9 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+        "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg viewBox="0 0 1024 1024" version="1.1"
+     xmlns="http://www.w3.org/2000/svg">
+    <path fill="#fff" d="M512 554.666667c140.8 0 256-115.2 256-256s-115.2-256-256-256-256 115.2-256 256 115.2 256 256 256z m0-85.333334c-93.866667 0-170.666667-76.8-170.666667-170.666666s76.8-170.666667 170.666667-170.666667 170.666667 76.8 170.666667 170.666667-76.8 170.666667-170.666667 170.666666z"/>
+    <path fill="#fff" d="M512 469.333333C251.733333 469.333333 42.666667 678.4 42.666667 938.666667c0 25.6 17.066667 42.666667 42.666666 42.666666s42.666667-17.066667 42.666667-42.666666c0-213.333333 170.666667-384 384-384 25.6 0 42.666667-17.066667 42.666667-42.666667s-17.066667-42.666667-42.666667-42.666667z"/>
+    <path d="M588.8 652.8H896c25.6 0 42.666667 17.066667 42.666667 42.666667s-17.066667 42.666667-42.666667 42.666666h-307.2c-25.6 0-42.666667-17.066667-42.666667-42.666666 0-21.333333 21.333333-42.666667 42.666667-42.666667zM588.8 832H896c25.6 0 42.666667 17.066667 42.666667 42.666667s-17.066667 42.666667-42.666667 42.666666h-307.2c-25.6 0-42.666667-17.066667-42.666667-42.666666s21.333333-42.666667 42.666667-42.666667z"
+          fill="#fff"/>
+</svg>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/HRM_filled.svg


+ 9 - 0
src/components/Select/static/iconSvg/action/ICSOCS.svg

@@ -0,0 +1,9 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+        "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg viewBox="0 0 1126 1024" version="1.1"
+     xmlns="http://www.w3.org/2000/svg">
+    <path d="M1024 0c56.32 0 102.4 46.08 102.4 102.4v665.6c0 56.32-46.08 102.4-102.4 102.4H102.4c-56.32 0-102.4-46.08-102.4-102.4V102.4C0 46.08 46.08 0 102.4 0h921.6z m0 102.4H102.4v665.6h921.6V102.4zM256 921.6h614.4c30.72 0 51.2 20.48 51.2 51.2s-20.48 51.2-51.2 51.2H256c-30.72 0-51.2-20.48-51.2-51.2s20.48-51.2 51.2-51.2z"
+          fill="#80A0BA"/>
+    <path fill="#fff" d="M256 256h614.4c30.72 0 51.2 20.48 51.2 51.2s-20.48 51.2-51.2 51.2H256c-30.72 0-51.2-20.48-51.2-51.2s20.48-51.2 51.2-51.2zM256 512h614.4c30.72 0 51.2 20.48 51.2 51.2s-20.48 51.2-51.2 51.2H256c-30.72 0-51.2-20.48-51.2-51.2s20.48-51.2 51.2-51.2z"/>
+    <path fill="#fff" d="M768 153.6c30.72 0 51.2 20.48 51.2 51.2v204.8c0 30.72-20.48 51.2-51.2 51.2s-51.2-20.48-51.2-51.2V204.8c0-30.72 20.48-51.2 51.2-51.2zM358.4 409.6c30.72 0 51.2 20.48 51.2 51.2v204.8c0 30.72-20.48 51.2-51.2 51.2s-51.2-20.48-51.2-51.2V460.8c0-30.72 20.48-51.2 51.2-51.2z"/>
+</svg>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/ICSOCS_filled.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 8 - 0
src/components/Select/static/iconSvg/action/IM.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/IM_filled.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 10 - 0
src/components/Select/static/iconSvg/action/OMS.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/OMS_filled.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 8 - 0
src/components/Select/static/iconSvg/action/PAM.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/PAM_filled.svg


+ 9 - 0
src/components/Select/static/iconSvg/action/PDM.svg

@@ -0,0 +1,9 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+        "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg viewBox="0 0 1024 1024" version="1.1"
+     xmlns="http://www.w3.org/2000/svg">
+    <path d="M128 42.666667h768c46.933333 0 85.333333 38.4 85.333333 85.333333v768c0 46.933333-38.4 85.333333-85.333333 85.333333H128c-46.933333 0-85.333333-38.4-85.333333-85.333333V128c0-46.933333 38.4-85.333333 85.333333-85.333333z m0 85.333333v768h768V128H128z"
+          fill="#80A0BA"/>
+    <path d="M106.666667 448h844.8v-85.333333H106.666667z" fill="#80A0BA"/>
+    <path fill="#fff" d="M187.733333 187.733333h106.666667v106.666667H187.733333zM366.933333 187.733333h106.666667v106.666667H366.933333zM546.133333 187.733333h106.666667v106.666667h-106.666667z"/>
+</svg>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/PDM_filled.svg


+ 11 - 0
src/components/Select/static/iconSvg/action/PES.svg

@@ -0,0 +1,11 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+        "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg viewBox="0 0 1024 1024" version="1.1"
+     xmlns="http://www.w3.org/2000/svg">
+    <path d="M375.466667 0c25.6 0 42.666667 17.066667 42.666666 42.666667v89.6c0 25.6-17.066667 42.666667-42.666666 42.666666s-42.666667-17.066667-42.666667-42.666666V42.666667c0-25.6 21.333333-42.666667 42.666667-42.666667zM661.333333 0c25.6 0 42.666667 17.066667 42.666667 42.666667v89.6c0 25.6-17.066667 42.666667-42.666667 42.666666s-42.666667-17.066667-42.666666-42.666666V42.666667c0-25.6 17.066667-42.666667 42.666666-42.666667z"
+          fill="#80A0BA"/>
+    <path fill="#fff" d="M507.733333 315.733333c25.6 0 42.666667 17.066667 42.666667 42.666667v230.4c0 25.6-17.066667 42.666667-42.666667 42.666667s-42.666667-17.066667-42.666666-42.666667V358.4c0-21.333333 17.066667-42.666667 42.666666-42.666667z"/>
+    <path fill="#fff" d="M512 729.6m-64 0a64 64 0 1 0 128 0 64 64 0 1 0-128 0Z"/>
+    <path d="M170.666667 140.8h682.666666c46.933333 0 85.333333 38.4 85.333334 85.333333V896c0 46.933333-38.4 85.333333-85.333334 85.333333H170.666667c-46.933333 0-85.333333-38.4-85.333334-85.333333V226.133333c0-46.933333 38.4-85.333333 85.333334-85.333333z m0 85.333333V896h682.666666V226.133333H170.666667z"
+          fill="#80A0BA"/>
+</svg>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/PES_filled.svg


+ 11 - 0
src/components/Select/static/iconSvg/action/SCM.svg

@@ -0,0 +1,11 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+        "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg t="1583834945538" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg">
+    <path d="M418.112 65.216h190.4c47.104 0 85.312 38.208 85.312 85.312v116.096c0 47.104-38.208 85.312-85.312 85.312H418.112A85.312 85.312 0 0 1 332.8 266.624V150.528c0-47.104 38.208-85.312 85.312-85.312z m0 85.312v116.096h190.4V150.528H418.112z"
+          fill="#FFFFFF" />
+    <path d="M129.28 674.496h190.4c47.104 0 85.312 38.208 85.312 85.312v116.096c0 47.104-38.208 85.312-85.312 85.312H129.28a85.312 85.312 0 0 1-85.312-85.312v-116.096c0-47.104 38.208-85.312 85.312-85.312z m0 85.312v116.096h190.4v-116.096H129.28zM706.944 674.496h190.336c47.168 0 85.376 38.208 85.376 85.312v116.096c0 47.104-38.208 85.312-85.376 85.312h-190.336a85.312 85.312 0 0 1-85.312-85.312v-116.096c0-47.104 38.208-85.312 85.312-85.312z m0 85.312v116.096h190.336v-116.096h-190.336z"
+          fill="#80A0BA" />
+    <path d="M267.136 558.528h492.352v136.512H844.8V548.032c0-42.496-36.288-74.88-78.72-74.88H260.544c-42.496 0-78.784 32.384-78.784 74.88v145.344h85.312V558.528z"
+          fill="#80A0BA" />
+    <path d="M477.184 351.936h72.192v143.36H477.184z" fill="#80A0BA" />
+</svg>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/SCM_filled.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 8 - 0
src/components/Select/static/iconSvg/action/SRM.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/SRM_filled.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 10 - 0
src/components/Select/static/iconSvg/action/WFM.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/WFM_filled.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 11 - 0
src/components/Select/static/iconSvg/action/addCollection.svg


+ 11 - 0
src/components/Select/static/iconSvg/action/adjustTimeRange.svg

@@ -0,0 +1,11 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+        "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg viewBox="0 0 1024 1024" version="1.1"
+     xmlns="http://www.w3.org/2000/svg">
+    <path d="M512 981.333333c259.2 0 469.333333-210.133333 469.333333-469.333333S771.2 42.666667 512 42.666667 42.666667 252.8 42.666667 512s210.133333 469.333333 469.333333 469.333333z m0-85.333333a384 384 0 1 1 0-768 384 384 0 0 1 0 768z"
+          fill="#8D9399"/>
+    <path d="M420.565333 323.925333m42.666667 0l0 0q42.666667 0 42.666667 42.666667l0 187.733333q0 42.666667-42.666667 42.666667l0 0q-42.666667 0-42.666667-42.666667l0-187.733333q0-42.666667 42.666667-42.666667Z"
+          fill="#373C43"/>
+    <path d="M760.704 526.506667m0 42.666666l0 0q0 42.666667-42.666667 42.666667l-249.813333 0q-42.666667 0-42.666667-42.666667l0 0q0-42.666667 42.666667-42.666666l249.813333 0q42.666667 0 42.666667 42.666666Z"
+          fill="#373C43"/>
+</svg>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 12 - 0
src/components/Select/static/iconSvg/action/alarm.svg


+ 8 - 0
src/components/Select/static/iconSvg/action/analysis.svg

@@ -0,0 +1,8 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+        "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg">
+    <path d="M377.941333 80.384C180.992 136.704 42.666667 318.208 42.666667 527.061333c0 256.384 206.72 464.298667 461.824 464.298667 201.472 0 377.770667-130.816 439.210666-320.341333a42.666667 42.666667 0 1 0-81.194666-26.325334c-50.090667 154.666667-193.877333 261.333333-357.973334 261.333334C296.576 906.026667 128 736.426667 128 527.061333c0-170.581333 112.896-318.762667 273.408-364.629333a42.666667 42.666667 0 0 0-23.466667-82.048z"
+          fill="#373C43"/>
+    <path d="M978.432 547.669333a42.666667 42.666667 0 0 1-42.154667 48.981334l-484.693333 0.384V85.333333A42.666667 42.666667 0 0 1 494.805333 42.666667c267.648 0 484.053333 225.365333 484.053334 498.730666 0 2.133333-0.170667 4.224-0.426667 6.272z m-85.930667-36.309333c-13.909333-198.741333-165.034667-360.106667-355.626666-381.056v381.312l355.626666-0.256z"
+          fill="#8D9399"/>
+</svg>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 14 - 0
src/components/Select/static/iconSvg/action/apply.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/ascendingOrder.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 14 - 0
src/components/Select/static/iconSvg/action/assign.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 14 - 0
src/components/Select/static/iconSvg/action/audit.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/backLog.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 7 - 0
src/components/Select/static/iconSvg/action/boiler.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/bottomSetting.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/calendar.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 7 - 0
src/components/Select/static/iconSvg/action/camera.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/cease.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/chainRatio.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/close.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/collection.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/complaint.svg


+ 1 - 0
src/components/Select/static/iconSvg/action/complete.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#333333" d="M53.333333 550.912l305.877334 347.136a85.333333 85.333333 0 0 0 132.693333-5.76l481.706667-653.653333a42.666667 42.666667 0 0 0-68.693334-50.602667l-481.706666 653.653333L117.333333 494.506667a42.666667 42.666667 0 1 0-64 56.405333z"  /></svg>

+ 11 - 0
src/components/Select/static/iconSvg/action/computerTerminal.svg

@@ -0,0 +1,11 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+        "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg viewBox="0 0 1024 1024" version="1.1"
+     xmlns="http://www.w3.org/2000/svg">
+    <g transform="translate(0, 15)">
+        <path d="M0 128v512a128 128 0 0 0 128 128h768a128 128 0 0 0 128-128V128a128 128 0 0 0-128-128H128a128 128 0 0 0-128 128z m85.333333 512V128a42.666667 42.666667 0 0 1 42.666667-42.666667h768a42.666667 42.666667 0 0 1 42.666667 42.666667v512a42.666667 42.666667 0 0 1-42.666667 42.666667H128a42.666667 42.666667 0 0 1-42.666667-42.666667z"
+              fill="#373C43"/>
+        <path d="M256 896m42.666667 0l426.666666 0q42.666667 0 42.666667 42.666667l0 0q0 42.666667-42.666667 42.666666l-426.666666 0q-42.666667 0-42.666667-42.666666l0 0q0-42.666667 42.666667-42.666667Z"
+              fill="#8D9399"/>
+    </g>
+</svg>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 9 - 0
src/components/Select/static/iconSvg/action/confirm.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/contrast.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/control.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/coolingRoom.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/coolingStation.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/coolingTower.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/copy.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/cost.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/data.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/delete.svg


+ 10 - 0
src/components/Select/static/iconSvg/action/deleteUpload.svg

@@ -0,0 +1,10 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+        "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg viewBox="0 0 1024 1024" version="1.1"
+     xmlns="http://www.w3.org/2000/svg">
+    <path d="M512 64a448 448 0 1 0 0 896A448 448 0 0 0 512 64z" fill="#8D9399"/>
+    <path d="M692.992 331.008a32 32 0 0 1 0 45.248l-316.8 316.8a32 32 0 0 1-45.184-45.248l316.8-316.8a32 32 0 0 1 45.184 0z"
+          fill="#FFFFFF"/>
+    <path d="M692.48 695.04a32 32 0 0 1-45.248 0l-316.8-316.8a32 32 0 1 1 45.248-45.312l316.8 316.8a32 32 0 0 1 0 45.248z"
+          fill="#FFFFFF"/>
+</svg>

+ 12 - 0
src/components/Select/static/iconSvg/action/department.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+        "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg">
+    <g transform="translate(0, 15)">
+        <path d="M94.53568 264.6016a81.92 81.92 0 0 0 0.94208 137.78944l350.86336 222.12608a122.88 122.88 0 0 0 131.31776 0.12288l352.6656-222.6176a81.92 81.92 0 0 0 0.8192-138.0352L579.01056 35.6352a122.88 122.88 0 0 0-134.02112 0.2048L94.53568 264.6016z m439.9104-160.27648l352.13312 228.43392-352.6656 222.57664a40.96 40.96 0 0 1-43.74528 0L139.264 333.2096l350.45376-228.80256a40.96 40.96 0 0 1 44.6464-0.08192z"
+              fill="#000000"/>
+        <path d="M517.3248 734.8224l-395.96032-234.37312a37.2736 37.2736 0 1 0-37.92896 64.06144l434.3808 257.14688 423.1168-257.35168a37.2736 37.2736 0 1 0-38.66624-63.65184l-384.98304 234.16832z"
+              fill="#979797"/>
+        <path d="M121.36448 664.28928a37.2736 37.2736 0 1 0-37.92896 64.06144l434.3808 257.14688 423.1168-257.35168a37.2736 37.2736 0 1 0-38.66624-63.65184l-384.98304 234.16832-395.91936-234.37312z"
+              fill="#979797"/>
+    </g>
+</svg>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/descendingOrder.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/details.svg


+ 15 - 0
src/components/Select/static/iconSvg/action/dimission.svg

@@ -0,0 +1,15 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+        "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg viewBox="0 0 1024 1024" version="1.1"
+     xmlns="http://www.w3.org/2000/svg">
+    <g transform="translate(0, -25)">
+        <path d="M480.256 565.589333a240.128 240.128 0 1 0 0-480.256 240.128 240.128 0 0 0 0 480.256z m0-85.333333a154.794667 154.794667 0 1 1 0-309.589333 154.794667 154.794667 0 0 1 0 309.589333z"
+              fill="#373C43"/>
+        <path d="M480.256 480.256C238.592 480.256 42.666667 676.181333 42.666667 917.845333a42.666667 42.666667 0 1 0 85.333333 0 352.256 352.256 0 0 1 352.256-352.256 42.666667 42.666667 0 0 0 0-85.333333z"
+              fill="#373C43"/>
+        <path d="M746.666667 516.266667a230.4 230.4 0 1 0 0 460.8 230.4 230.4 0 0 0 0-460.8z m0 76.8a153.6 153.6 0 1 1 0 307.2 153.6 153.6 0 0 1 0-307.2z"
+              fill="#8D9399"/>
+        <path d="M812.842667 710.4a38.4 38.4 0 0 1 4.821333 76.501333l-4.821333 0.298667h-128a38.4 38.4 0 0 1-4.778667-76.501333l4.778667-0.298667h128z"
+              fill="#8D9399"/>
+    </g>
+</svg>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/distribution.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/dominate.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/download.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/edit.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/electricCabinet.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/electricalSubstation.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/elevator.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/evaluate.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/expandItem.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/expandPage.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/export.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/fastForward.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/favorites.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/filter.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/firePumpHouse.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/handOver.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/heatExchangerRoom.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
src/components/Select/static/iconSvg/action/heatPumpUnit.svg


+ 0 - 0
src/components/Select/static/iconSvg/action/hide.svg


Vissa filer visades inte eftersom för många filer har ändrats