当前位置:首页 > 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数据获取、搜索筛选、分页和卡片式布局等功能。根据实际项目需求,可以进一步调整样式和功能。

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

相关文章

h5实现展开列表

h5实现展开列表

使用HTML5和CSS实现展开列表 在HTML5中,可以通过结合CSS和JavaScript实现展开列表效果。以下是几种常见的方法: 方法1:使用details和summary标签 HTML5提供…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

uniapp商品列表

uniapp商品列表

商品列表实现方法 在uniapp中实现商品列表功能,可以通过多种方式完成,以下是几种常见的方法: 使用scroll-view组件实现滚动列表 <scroll-view scroll-y="t…

vue 实现列表多选

vue 实现列表多选

Vue 实现列表多选的方法 使用 v-model 绑定数组 通过 v-model 绑定一个数组,可以自动处理多选逻辑。适用于复选框(checkbox)场景。 <template> &…

vue实现分类列表

vue实现分类列表

Vue 实现分类列表的方法 数据结构设计 使用数组存储分类数据,每个分类对象包含 id、name 等属性,子分类通过 children 字段嵌套。例如: categories: [ {…

vue实现横向列表

vue实现横向列表

实现横向列表的方法 在Vue中实现横向列表可以通过CSS样式控制列表项的排列方式。横向列表通常用于导航菜单、图片展示等场景。 使用flex布局实现 flex布局是实现横向列表最简单的方法之一,通过设…