UNPKG

@tanzhenxing/zx-invoice-title-list

Version:

发票抬头列表组件

330 lines (275 loc) 7.62 kB
# zx-invoice-title-list `zx-invoice-title-list` 是一个发票抬头列表组件,用于展示和管理用户的发票抬头信息,支持选择、编辑、删除等操作。 ## 特性 - 支持单选和多选模式 - 支持发票抬头的增删改查操作 - 支持自定义标签和内容 - 支持默认发票抬头标识 - 支持禁用状态 - 支持空状态展示 - 完全兼容 H5、小程序、APP 多端 ## 使用方法 ```vue <template> <zx-invoice-title-list v-model="selectedId" :list="invoiceList" @add="handleAdd" @edit="handleEdit" @delete="handleDelete" @select="handleSelect" /> </template> <script setup> import { ref } from 'vue' const selectedId = ref('1') const invoiceList = ref([ { id: '1', title: '个人', type: 'normal', taxNumber: '', isDefault: true }, { id: '2', title: '北京某某科技有限公司', type: 'special', taxNumber: '91110000123456789X' } ]) const handleAdd = () => { console.log('添加发票抬头') } const handleEdit = (item, index) => { console.log('编辑发票抬头', item) } const handleDelete = (item, index) => { console.log('删除发票抬头', item) } const handleSelect = (item, index) => { console.log('选择发票抬头', item) } </script> ``` ## 属性说明 ### 基础属性 | 属性名 | 类型 | 默认值 | 说明 | | --- | --- | --- | --- | | modelValue | String/Number/Array | '' | 当前选中的发票抬头ID,支持 v-model 双向绑定 | | list | Array | [] | 发票抬头列表数据 | | multiple | Boolean | false | 是否开启多选模式 | | hideRadio | Boolean | false | 是否隐藏单选按钮 | | hideEdit | Boolean | false | 是否隐藏编辑按钮 | | hideDelete | Boolean | false | 是否隐藏删除按钮 | | hideAdd | Boolean | false | 是否隐藏添加按钮 | ### 文本配置 | 属性名 | 类型 | 默认值 | 说明 | | --- | --- | --- | --- | | addButtonText | String | '添加发票抬头' | 添加按钮的文字 | | defaultTagText | String | '默认' | 默认标签的文字 | ### 样式配置 | 属性名 | 类型 | 默认值 | 说明 | | --- | --- | --- | --- | | checkedColor | String | '#1989fa' | 选中状态的颜色 | | rightIcon | String | '' | 右侧自定义图标名称 | ## 数据结构 ### 发票抬头对象 ```javascript { id: '1', // 唯一标识 title: '个人', // 发票抬头名称 type: 'normal', // 发票类型:'normal'普通发票 | 'special'专用发票 | 'electronic'电子发票 taxNumber: '', // 税号(可选) isDefault: true, // 是否为默认发票抬头 disabled: false // 是否禁用(可选) } ``` ### 发票类型说明 | 类型值 | 数字值 | 说明 | | --- | --- | --- | | 'normal' | 2 | 增值税普通发票 | | 'special' | 1 | 增值税专用发票 | | 'electronic' | 3 | 增值税电子发票 | ## 事件说明 | 事件名 | 说明 | 回调参数 | | --- | --- | --- | | update:modelValue | 选中状态改变时触发 | value: 当前选中的ID或ID数组 | | select | 选择发票抬头时触发 | item: 发票抬头对象, index: 索引 | | add | 点击添加按钮时触发 | - | | edit | 点击编辑按钮时触发 | item: 发票抬头对象, index: 索引 | | delete | 点击删除按钮时触发 | item: 发票抬头对象, index: 索引 | | click-item | 点击发票抬头项时触发 | item: 发票抬头对象, index: 索引 | | right-icon-click | 点击右侧自定义图标时触发 | item: 发票抬头对象, index: 索引 | ## 插槽说明 | 名称 | 说明 | 参数 | | --- | --- | --- | | item-content | 自定义发票抬头内容 | item: 发票抬头对象, index: 索引 | | tag | 自定义标签内容 | item: 发票抬头对象, index: 索引 | | empty | 自定义空状态内容 | - | | bottom | 自定义底部内容 | - | ## 使用示例 ### 基础用法 ```vue <template> <zx-invoice-title-list v-model="selectedId" :list="invoiceList" @select="onSelect" /> </template> <script setup> import { ref } from 'vue' const selectedId = ref('1') const invoiceList = ref([ { id: '1', title: '个人', type: 'normal', isDefault: true }, { id: '2', title: '北京某某科技有限公司', type: 'special', taxNumber: '91110000123456789X' } ]) const onSelect = (item) => { console.log('选中了:', item.title) } </script> ``` ### 多选模式 ```vue <template> <zx-invoice-title-list v-model="selectedIds" :list="invoiceList" :multiple="true" add-button-text="批量操作" /> </template> <script setup> import { ref } from 'vue' const selectedIds = ref(['1']) const invoiceList = ref([ // ... 发票列表数据 ]) </script> ``` ### 隐藏操作按钮 ```vue <template> <zx-invoice-title-list v-model="selectedId" :list="invoiceList" :hide-edit="true" :hide-delete="true" :hide-add="true" /> </template> ``` ### 自定义内容 ```vue <template> <zx-invoice-title-list v-model="selectedId" :list="invoiceList" > <template #tag="{ item }"> <zx-tag v-if="item.id === '1'" type="success" size="mini">企业</zx-tag> </template> <template #item-content="{ item }"> <view style="font-size: 12px; color: #999; margin-top: 5px;"> 创建时间: {{ item.createTime }} </view> </template> <template #empty> <view style="text-align: center; padding: 40px; color: #999;"> <zx-icon name="invoice" size="48" color="#ddd" /> <view style="margin-top: 10px;">暂无发票抬头,请添加</view> </view> </template> </zx-invoice-title-list> </template> ``` ### 完整的增删改查示例 ```vue <template> <zx-invoice-title-list v-model="selectedId" :list="invoiceList" @add="handleAdd" @edit="handleEdit" @delete="handleDelete" @select="handleSelect" /> </template> <script setup> import { ref } from 'vue' const selectedId = ref('') const invoiceList = ref([ { id: '1', title: '个人', type: 'normal', isDefault: true }, { id: '2', title: '北京某某科技有限公司', type: 'special', taxNumber: '91110000123456789X' } ]) const handleAdd = () => { // 跳转到添加发票抬头页面 uni.navigateTo({ url: '/pages/invoice/add' }) } const handleEdit = (item) => { // 跳转到编辑发票抬头页面 uni.navigateTo({ url: `/pages/invoice/edit?id=${item.id}` }) } const handleDelete = (item, index) => { uni.showModal({ title: '确认删除', content: `确定要删除发票抬头"${item.title}"吗?`, success: (res) => { if (res.confirm) { invoiceList.value.splice(index, 1) uni.showToast({ title: '删除成功', icon: 'success' }) } } }) } const handleSelect = (item) => { uni.showToast({ title: `已选择: ${item.title}`, icon: 'none' }) } </script> ``` ## 注意事项 1. 发票抬头列表数据中的 `id` 字段是必需的,用于唯一标识每个发票抬头 2. 在多选模式下,`modelValue` 应该是一个数组 3. 组件依赖 `zx-icon`、`zx-tag`、`zx-empty` 组件,请确保这些组件已正确引入 4. 发票类型支持字符串和数字两种格式,组件会自动转换显示文本 5. 建议在删除操作前添加确认提示,避免误删 ## 兼容性 - ✅ H5 - ✅ 微信小程序 - ✅ 支付宝小程序 - ✅ 百度小程序 - ✅ 头条小程序 - ✅ QQ小程序 - ✅ App (Vue) - ✅ App (Nvue)