- table表格组件,分享给各位
前言 移动端的页面本应该很少有table表格这样的展示、操作,但总归有这样的需求,然而平时用的vant和iview的小程序组件库都没有table组件,这里将自己编写的table组件展示一下供大家查看。 小程序实现table的问题在于,自定义td的实现,而小程序没办法像react一样使用[代码]jsx[代码],也没办法像vue一样用[代码]作用域插槽[代码]传row行的信息给slot,但是小程序还是留有一样东西可以完成自定义td的功能。 抽象节点 这个特性自小程序基础库版本 1.9.6 开始支持。 有时,自定义组件模板中的一些节点,其对应的自定义组件不是由自定义组件本身确定的,而是自定义组件的调用者确定的。这时可以把这个节点声明为“抽象节点”。 微信官方api地址 通过抽象节点我们可以做到使用自定义组件通过key值分发组件内容到不同的td里。 具体的源码地址可点击下方查看,如果对你有帮助请点个star~~ 源码地址 具体的实现效果可以扫描下方小程序码。 [图片] API prop 参数 说明 类型 默认值 是否必填 columns 表格的配置 Columns[] [] true dataList 数据 any[] [] true getListLoading 请求列表的loading boolean false true showTipImage 无数据时的提示文本图片 boolean false true rowKey 用于指明行的唯一标识符,在勾选中有使用 string id false scrollViewHeight 控制可滚动区域高度。 string 600rpx false tipTitle 无数据时的提示文本主标题 string 提示 false tipSubtitle 无数据时的提示文本副标题 string 暂无数据 false scrollX 是否需要X轴滚动。 boolean false false select 控制是否出现勾选。 boolean false false selectKeys 勾选的初始值 any[] [] false generic:action-td 当列表项内具有操作列,需要在[代码]columns[代码]内添加[代码]type:action[代码]的一项,操作列的内容往往需要自定义,小程序不提供react,vue的[代码]rander函数[代码],所以使用到了抽象节点,该属性指明抽象节点的组件。操作列位置可以不固定,点击事件由[代码]bindclickaction[代码]触发 component undefined false isExpand 控制是否点击展开。 boolean false false expandValueKey 展开信息的key值 string false initExpandValue 当展开信息为空时的默认提示语 string ‘暂无信息’ false expandStyle 展开信息的最外层的样式 string ‘’ false generic:expand-component 如果展开区域的内容需要自定义,[代码]expandValueKey[代码]设置为空字符串,则切换到组件模式,传一个组件进来,展开区域的点击事件由[代码]bindclickexpand[代码]触发 component undefined false dynamicValue 给自定义内容的动态值,用于改变状态 ,建议{value:放的数据} object {} false Events 事件 解释 类型 bindclicklistitem 点击列表行事件 Function(e); e.detail.value = {index:number(当前行序号),item: any(当前行的内容)} bindclickexpand 点击展开内容事件 Function(e); e.detail.value = {type:(这个按钮的含义字段,如‘close’),index:(当前的行),item:(当前行的数据)};(这是我这里定义的结构,具体可以自己定义在expand-component里)} bindclickaction 点击抽象节点事件 Function(e); e.detail.value = {type:(这个按钮的含义字段,如‘close’),index:(当前的行),item:(当前行的数据)};(这是我这里定义的结构,具体可以自己定义在action-td里)} bindcheckkey 勾选事件 返回被勾选项的rowKey数组 Function(e); e.detail.value = any[]//(数组内每一项是rowKey字段定义的数据的toString()结果) bindscrolltolower 滚动触底 Function() bindscrolltoupper 滚动触顶 Function() column 列描述数据对象,是 columns 中的一项,Column 使用相同的 API。 事件 解释 类型 必填 title 字段名中文含义 string true key 字段名 string true width 单元格宽度 string false type 判断字段是否是自定义组件 ‘action’/undefined false render td内内容由函数返回 (value: any, item: any, index: number, data?: 当前页面的this.data) => any,// 设置内容 function false
2022-11-24 - 微信支付在小程序、H5、APP中的概述与实战总结
随着近期完成的一个微信小程序项目,本文将从微信支付的重要性及其在不同平台的应用出发,详细总结小程序、H5 和 APP 中微信支付的实现逻辑与最佳实践。 1. 微信支付概述1.1 微信支付的重要性微信支付是中国领先的移动支付解决方案之一,具备以下优势: 便捷性:用户体验流畅,覆盖多种支付场景。 安全性:通过多重加密和风险控制机制,确保交易安全。 广泛应用:日交易量已超十亿笔,涵盖电商、线下门店等领域。 微信支付的普及,不仅方便用户,也为商家带来了极大的商业价值,成为开发者实现支付功能时的首选。 1.2 微信支付在不同平台的应用微信支付广泛应用于多个平台,其集成逻辑因平台而异: 微信小程序支付用户在小程序内完成购买后,可直接调用微信支付,无需跳转到外部应用,极大地提升了支付流畅性。 H5 支付(公众号支付)适用于微信公众号访问的 H5 页面,用户可以通过 JSAPI 调起微信支付,为公众号运营者提供了便捷的支付功能。 APP 支付在移动应用中集成微信支付,用户可在 APP 内完成支付操作,提供一站式服务体验,同时增加开发者的收入来源。 2. 微信小程序支付的实现2.1 小程序支付流程1. 获取 OpenID通过调用 [代码]wx.login()[代码] 获取用户的 [代码]code[代码],后端根据 [代码]code[代码] 获取用户的 OpenID。 [图片] 2. 创建订单获取 OpenID 后,调用后端接口创建订单,后端返回订单号(orderId)。 [图片] 3. 调用支付接口获取订单号后,调用后端接口生成支付参数,然后通过 [代码]wx.requestPayment[代码] 发起支付。 [图片] 3. H5 支付(公众号支付)的实现3.1 JSAPI 支付流程1. 获取支付参数通过后端生成 JSAPI 支付所需的核心参数,包括: appId: 公众号 ID timeStamp: 时间戳 nonceStr: 随机字符串 package: 包含 [代码]prepay_id[代码] signType: 签名类型 paySign: 签名 示例: [图片] 2. 调用微信支付通过 [代码]WeixinJSBridge[代码] 调起支付: [图片] 4. APP 内支付的实现4.1 APP 支付流程1. 获取 OpenID使用 [代码]uni.login[代码] 获取用户登录状态并获取 OpenID。 [图片] 2. 创建订单调用后端接口创建订单并获取订单 ID。 [图片]3. 发起支付 使用 [代码]uni.requestPayment[代码] 发起支付。 [图片] 5. 常见问题与解决方法问题 1:支付场景非法原因:支付类型([代码]trade_type[代码])设置不正确。 解决:确保 [代码]trade_type[代码] 设置为对应平台要求的类型(如 [代码]JSAPI[代码]、[代码]APP[代码])。 问题 2:签名失败原因:使用了错误的密钥或 APPID。 解决:检查密钥、APPID 和签名参数是否匹配。 问题 3:调用失败或超时原因:网络问题或服务器响应慢。 解决:优化服务器性能,并检查网络连接。 6. 安全性与最佳实践安全措施使用 HTTPS 确保数据传输安全。 将支付签名逻辑放在后端,避免泄露密钥。 定期更换支付密钥。 实现支付回调接口验证订单状态。 最佳实践使用日志记录支付请求和响应,便于问题追踪。 对用户输入的金额和订单信息进行严格校验,防止篡改。 提供明确的支付状态反馈,提升用户体验。
2024-11-28