当前位置:首页 > VUE

vue实现银行列表

2026-02-24 00:06:30VUE

实现银行列表的Vue组件

创建一个Vue组件来展示银行列表,需要包含银行名称、图标、编号等基本信息。以下是一个基础的实现示例:

<template>
  <div class="bank-list">
    <div v-for="bank in banks" :key="bank.id" class="bank-item">
      <img :src="bank.logo" :alt="bank.name" class="bank-logo">
      <span class="bank-name">{{ bank.name }}</span>
      <span class="bank-code">{{ bank.code }}</span>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      banks: [
        { id: 1, name: '中国工商银行', code: 'ICBC', logo: 'icbc-logo.png' },
        { id: 2, name: '中国建设银行', code: 'CCB', logo: 'ccb-logo.png' },
        { id: 3, name: '中国银行', code: 'BOC', logo: 'boc-logo.png' },
        { id: 4, name: '中国农业银行', code: 'ABC', logo: 'abc-logo.png' }
      ]
    }
  }
}
</script>

<style scoped>
.bank-list {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.bank-item {
  display: flex;
  align-items: center;
  padding: 10px;
  border: 1px solid #eee;
  border-radius: 4px;
}

.bank-logo {
  width: 30px;
  height: 30px;
  margin-right: 10px;
}

.bank-name {
  flex: 1;
}

.bank-code {
  color: #666;
}
</style>

从API获取银行数据

实际项目中,银行列表通常从后端API获取:

<script>
export default {
  data() {
    return {
      banks: [],
      isLoading: false,
      error: null
    }
  },
  async created() {
    try {
      this.isLoading = true
      const response = await fetch('/api/banks')
      this.banks = await response.json()
    } catch (err) {
      this.error = err.message
    } finally {
      this.isLoading = false
    }
  }
}
</script>

添加搜索和筛选功能

为银行列表添加搜索和筛选功能:

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索银行..." class="search-input">

    <div class="filter-options">
      <label v-for="type in bankTypes" :key="type.value">
        <input type="checkbox" v-model="selectedTypes" :value="type.value">
        {{ type.label }}
      </label>
    </div>

    <div v-if="filteredBanks.length === 0">未找到匹配的银行</div>
    <bank-list :banks="filteredBanks" />
  </div>
</template>

<script>
import BankList from './BankList.vue'

export default {
  components: { BankList },
  data() {
    return {
      searchQuery: '',
      selectedTypes: [],
      bankTypes: [
        { value: 'state', label: '国有银行' },
        { value: 'commercial', label: '商业银行' },
        { value: 'foreign', label: '外资银行' }
      ],
      allBanks: [] // 从API获取的数据
    }
  },
  computed: {
    filteredBanks() {
      return this.allBanks.filter(bank => {
        const matchesSearch = bank.name.includes(this.searchQuery) || 
                            bank.code.includes(this.searchQuery)
        const matchesType = this.selectedTypes.length === 0 || 
                          this.selectedTypes.includes(bank.type)
        return matchesSearch && matchesType
      })
    }
  }
}
</script>

实现分页功能

对于大量银行数据,添加分页功能:

<template>
  <div>
    <bank-list :banks="paginatedBanks" />
    <div class="pagination">
      <button @click="prevPage" :disabled="currentPage === 1">上一页</button>
      <span>第 {{ currentPage }} 页</span>
      <button @click="nextPage" :disabled="currentPage === totalPages">下一页</button>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    banks: Array,
    itemsPerPage: {
      type: Number,
      default: 10
    }
  },
  data() {
    return {
      currentPage: 1
    }
  },
  computed: {
    totalPages() {
      return Math.ceil(this.banks.length / this.itemsPerPage)
    },
    paginatedBanks() {
      const start = (this.currentPage - 1) * this.itemsPerPage
      const end = start + this.itemsPerPage
      return this.banks.slice(start, end)
    }
  },
  methods: {
    nextPage() {
      if (this.currentPage < this.totalPages) {
        this.currentPage++
      }
    },
    prevPage() {
      if (this.currentPage > 1) {
        this.currentPage--
      }
    }
  }
}
</script>

银行卡片组件

创建一个更美观的银行卡片组件:

vue实现银行列表

<template>
  <div class="bank-card" @click="selectBank">
    <div class="bank-card-header">
      <img :src="bank.logo" :alt="bank.name" class="bank-card-logo">
      <h3 class="bank-card-name">{{ bank.name }}</h3>
    </div>
    <div class="bank-card-body">
      <p>银行代码: {{ bank.code }}</p>
      <p>客服电话: {{ bank.servicePhone }}</p>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    bank: {
      type: Object,
      required: true
    }
  },
  methods: {
    selectBank() {
      this.$emit('select', this.bank)
    }
  }
}
</script>

<style scoped>
.bank-card {
  border: 1px solid #ddd;
  border-radius: 8px;
  padding: 15px;
  margin: 10px;
  cursor: pointer;
  transition: all 0.3s;
}

.bank-card:hover {
  box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}

.bank-card-header {
  display: flex;
  align-items: center;
  margin-bottom: 10px;
}

.bank-card-logo {
  width: 40px;
  height: 40px;
  margin-right: 10px;
}

.bank-card-name {
  margin: 0;
  font-size: 16px;
}

.bank-card-body {
  color: #666;
  font-size: 14px;
}
</style>

这些代码示例展示了如何实现一个功能完整的银行列表组件,包括基本展示、API数据获取、搜索筛选、分页和卡片式布局等功能。根据实际项目需求,可以进一步调整样式和功能。

标签: 银行列表
分享给朋友:

相关文章

vue列表怎么实现

vue列表怎么实现

Vue 列表实现方法 使用 v-for 指令 Vue 中列表渲染主要通过 v-for 指令实现,可以遍历数组或对象。 <template> <ul> <li…

vue实现竖向列表

vue实现竖向列表

Vue 实现竖向列表的方法 使用 v-for 指令 通过 Vue 的 v-for 指令可以轻松渲染一个竖向列表。假设有一个数组 items,可以通过以下方式渲染: <template>…

vue实现卡片列表

vue实现卡片列表

Vue 实现卡片列表 使用 v-for 动态渲染卡片列表 通过 Vue 的 v-for 指令可以动态渲染卡片列表,数据通常存储在组件的 data 或通过 API 获取。 <template&g…

vue实现多级列表

vue实现多级列表

实现多级列表的两种常见方法 递归组件法 通过组件递归调用自身实现嵌套渲染,适合动态层级数据。 定义组件时通过name属性使其可递归调用。 模板中使用v-for遍历数据,嵌套部分通过条件渲染递…

vue实现新建列表

vue实现新建列表

Vue 实现新建列表的方法 在 Vue 中实现新建列表功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-for 动态渲染列表 通过数据驱动视图的方式,利用 v-for 指令动态渲染列表项…

vue实现模拟列表

vue实现模拟列表

使用 Vue 实现模拟列表 在 Vue 中实现模拟列表可以通过多种方式完成,常见的方法包括使用 v-for 指令动态渲染数据、结合计算属性或方法进行列表操作。以下是一个完整的实现方案: 基础列表渲染…