|
@@ -0,0 +1,177 @@
|
|
|
+<template>
|
|
|
+ <div class="change-hands-dropdown">
|
|
|
+ <Layout
|
|
|
+ ref="layoutRef"
|
|
|
+ :type="type"
|
|
|
+ :placeholder="placeholder"
|
|
|
+ :trigger="trigger"
|
|
|
+ :value="computedVal"
|
|
|
+ >
|
|
|
+ <div slot="empty" class="filter-list">
|
|
|
+ <div class="filter-item"
|
|
|
+ :class="{'active': selected.value === item.value}"
|
|
|
+ v-for="item in options"
|
|
|
+ :key="item.label"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value"
|
|
|
+ @click="handleChange(item)"
|
|
|
+ >
|
|
|
+ {{ item.label }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </Layout>
|
|
|
+ <el-tooltip effect="dark" placement="top">
|
|
|
+ <div slot="content" style="width:300px; font-size: 14px;line-height: 24px;">
|
|
|
+ <span>"换手率说明:采购单位的历史物业项目中标单位更换频次统计。</span>
|
|
|
+ </div>
|
|
|
+ <i class="icon-help-img" ></i>
|
|
|
+ </el-tooltip>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import Layout from '@/components/filter-items/Layout.vue'
|
|
|
+export default {
|
|
|
+ name: 'ChangeHands',
|
|
|
+ props: {
|
|
|
+ type: {
|
|
|
+ type: String,
|
|
|
+ default: 'dropdown'
|
|
|
+ },
|
|
|
+ trigger: {
|
|
|
+ type: String,
|
|
|
+ default: 'hover'
|
|
|
+ },
|
|
|
+ placeholder: {
|
|
|
+ type: String,
|
|
|
+ default: '换手率'
|
|
|
+ },
|
|
|
+ value: {
|
|
|
+ type: [String, Number],
|
|
|
+ default: null
|
|
|
+ },
|
|
|
+ beforeChange: Function
|
|
|
+ },
|
|
|
+ components: {
|
|
|
+ Layout
|
|
|
+ },
|
|
|
+ data () {
|
|
|
+ return {
|
|
|
+ options: [
|
|
|
+ {
|
|
|
+ label: "不限",
|
|
|
+ value: "1"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "到期换手率高",
|
|
|
+ value: "2"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ selected: {
|
|
|
+ label: '',
|
|
|
+ value: this.value
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ computedVal () {
|
|
|
+ if (this.selected.value) {
|
|
|
+ return this.selected.label
|
|
|
+ } else {
|
|
|
+ return ''
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ model: {
|
|
|
+ prop: 'value',
|
|
|
+ event: 'change'
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ value: {
|
|
|
+ immediate: true,
|
|
|
+ handler(n) {
|
|
|
+ this.setState(n)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ handleChange (item) {
|
|
|
+ const beforeChange = this.beforeChange
|
|
|
+ if (beforeChange) {
|
|
|
+ const pass = beforeChange(item)
|
|
|
+ if (pass) {
|
|
|
+ this.onChange(item)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ this.onChange(item)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onChange (item) {
|
|
|
+ const { layoutRef } = this.$refs
|
|
|
+ try {
|
|
|
+ layoutRef.$refs.dropdownRef.hide()
|
|
|
+ } catch (error) {}
|
|
|
+ this.$emit('change', item.value)
|
|
|
+ this.selected.value = item.value
|
|
|
+ this.selected.label = item.label
|
|
|
+ },
|
|
|
+ getState () {
|
|
|
+ return this.selected.value
|
|
|
+ },
|
|
|
+ setState (value = this.selected.value) {
|
|
|
+ this.selected.value = value
|
|
|
+ this.options.forEach(option => {
|
|
|
+ if (option.value === value) {
|
|
|
+ this.selected.label = option.label
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+.change-hands-dropdown{
|
|
|
+ min-width:96px;
|
|
|
+ display: flex;
|
|
|
+ height: 24px;
|
|
|
+}
|
|
|
+.filter-list{
|
|
|
+ min-width: 140px;
|
|
|
+ padding: 8px 0;
|
|
|
+ border: 1px solid $color_main;
|
|
|
+ background: #fff;
|
|
|
+ border-radius: 5px;
|
|
|
+ margin-top: 2px;
|
|
|
+ .filter-item{
|
|
|
+ padding: 4px 16px;
|
|
|
+ font-size: 14px;
|
|
|
+ line-height: 22px;
|
|
|
+ color: #1d1d1d;
|
|
|
+ text-align: left;
|
|
|
+ cursor: pointer;
|
|
|
+ white-space: nowrap;
|
|
|
+ &:hover{
|
|
|
+ background: #ECECEC;
|
|
|
+ }
|
|
|
+ &.active{
|
|
|
+ // color: $color_main;
|
|
|
+ background: #ECECEC;
|
|
|
+ }
|
|
|
+ span{
|
|
|
+ display: inline-block;
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+.icon-help-img {
|
|
|
+ display: inline-block;
|
|
|
+ width: 16px;
|
|
|
+ height: 16px;
|
|
|
+ margin-top:6px;
|
|
|
+ margin-left: 6px;
|
|
|
+ background: url("~@/assets/images/icon/help.png") no-repeat center;
|
|
|
+ background-size: contain;
|
|
|
+ cursor: pointer;
|
|
|
+}
|
|
|
+</style>
|