会员管理系统实战开发教程07-会员消费

news2025/2/22 8:09:26

上一篇我们讲解了会员的充值,会员消费和充值的逻辑类似,也是先记录消费金额,然后给会员卡余额减去消费金额,有个逻辑是如果余额不足需要提示信息。

1 创建消费记录表

我们先需要创建表来保存会员的消费记录信息,打开控制台,点击数据模型,点击+
在这里插入图片描述
输入数据源的名称消费记录
在这里插入图片描述
点击编辑按钮进入添加字段视图
在这里插入图片描述
添加字段,输入消费金额,类型选择数字
在这里插入图片描述
添加字段,输入消费日期,类型选择日期时间
在这里插入图片描述
添加字段,输入所属会员卡,类型选择关联关系,数据模型选择会员卡
在这里插入图片描述

2 生成模型页面

数据源添加好之后,打开我们的模型应用,点击新建页面
在这里插入图片描述
选择表格与表单页,数据模型选择消费记录
在这里插入图片描述
平台会根据数据源的字段自动生成相关页面
在这里插入图片描述

3 搭建消费记录新增页面

平台生成的页面是方便我们查询数据,真正的业务我们是在会员列表页面完成。切换到会员列表页面,在页面下边增加一个普通容器,下边增加一个表单容器
在这里插入图片描述
当我们点击更多图标时,会弹出功能菜单,这个时候点击消费就需要显示我们的普通容器
在这里插入图片描述
控制容器是否显示是通过组件的条件展示属性来决定的,在微搭中变量类型如果是布尔值就比较适合。布尔值有两个取值,要么为true,要么为false。条件展示如果绑定变量,我们根据变量的值来决定是否要显示组件。

在代码区创建一个布尔值变量
在这里插入图片描述
然后给普通容器绑定条件展示
在这里插入图片描述
为了让页面居中显示,我们需要设置一下样式,选择绝对定位
在这里插入图片描述

当我们点击消费按钮的时候,让我们的变量赋值为true
在这里插入图片描述
页面可以正常弹出后,我们需要增加一个关闭按钮,我们用图标来替代关闭按钮。找到表单容器的标题,在下边添加一个图标组件
在这里插入图片描述
设置普通容器的样式为两端对齐
在这里插入图片描述

self {
  display: flex;
  justify-content: space-between;
  flex-direction: row;
}

点击图标的时候我们把变量赋值为false,实现页面的关闭
在这里插入图片描述

4 配置所属会员卡

目前表单容器生成的所属会员卡下拉字段,列出了所有的会员卡,实际的规则是当选择哪个会员的时候应该显示该会员下的会员卡。我们需要给下拉选择设置筛选条件
在这里插入图片描述

4 实现消费的业务逻辑

我们消费的逻辑是先判断余额是否充足,如果充足我们就增加消费记录并且更新会员卡的余额,如果不足提示信息。首先我们需要得到需要给哪张会员卡添加消费记录,给下拉选择定义一个值改变事件
在这里插入图片描述
让我们的选中值赋值给我们的变量
在这里插入图片描述
得到卡的ID后,我们要自己实现提交的逻辑,在代码区定义一个自定义方法
在这里插入图片描述
输入如下代码

export default async function({event, data}) {
   const money =Number( $w.inputNumber4.value)
   console.log("消费金额",money)
   const currentDay = $w.date4.value
   console.log("消费日期",currentDay)
   const cardid = $w.select4.value
   console.log("卡ID",cardid)
   const card = await $w.cloud.callDataSource({
      dataSourceName: "hykxx_gmcze7h",
      methodName: "wedaGetItemV2",
      params: {
        // 筛选内容,筛选内容推荐使用编辑器数据筛选器生成
        filter: {
          where: {
            $and: [
              {
                _id: {
                  $eq:cardid, // 获取单条时,推荐传入_id数据标识进行操作
                },
              },
            ],
          },
        },
        select: {
          $master: true, // 常见的配置,返回主表
        },
      },
    });
    console.log("卡信息",card)
    const currentCardYue = card.ye
    console.log("当前余额",currentCardYue)
    if((currentCardYue-money)>=0){
      await $w.cloud.callDataSource({
      dataSourceName: "xfjl_vcdjkih",
      methodName: "wedaCreateV2",
      params: {
        data: {
          xfje: money,
          xfrq: currentDay,
          sshyk:cardid
        },
      },
    });

      await $w.cloud.callDataSource({
      dataSourceName: "hykxx_gmcze7h",
      methodName: "wedaUpdateV2",
      params: {
        // 更新数据
        data: {
          ye: currentCardYue-money,
        },
        // 筛选内容,筛选内容推荐使用编辑器数据筛选器生成
        filter: {
          where: {
            $and: [
              {
                _id: {
                  $eq: cardid, // 更新单条时,推荐传入_id数据标识进行操作
                },
              },
            ],
          },
        },
      },
    });

    }else{
      $w.utils.showToast({
        title:'余额不足',
        icon:'error'
      })
    }
}

提交方法写好之后,我们要把表单容器默认的方法改成我们的自定义方法
在这里插入图片描述
提交成功后我们要把页面关闭,再给变量赋一下值即可

总结

我们用7篇的篇幅介绍了会员管理系统的管理端如何开发,分别开发了会员的注册、开卡、充值、消费等几个基本功能。微搭是使用模型应用来开发管理端的,像基本的增删改查这些操作是由平台自动生成的,但是一些业务操作,比如我们本篇介绍的消费功能还是要自己通过写代码的方式完成业务逻辑的编制。

感兴趣的同学照着做一遍吧,马上你也可以拥有自己的会员管理软件了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1020182.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

讲座2:神经编码与解码

视频来源: 1、面向类脑视觉的生物视觉编码机制和模型(余肇飞)https://www.bilibili.com/video/BV1rR4y1K7KW/?spm_id_from333.337.search-card.all.click&vd_source897075bbdd61e45006d749612d05a2ab 2、基于视觉编解码的深度学习类脑机…

7.idea 使用 docker 构建 spring boot 项目

本文目录 step 1&#xff1a;编写 Dockerfile 文件step 2&#xff1a;pom.xml 中添加如下配置step 3&#xff1a;maven仓库 setting.xml <servers> 模块下&#xff0c;添加访问自定义仓库的用户名&#xff0c;密码step 4&#xff1a;使用 maven命令开始 clean、packagest…

蓝牙核心规范(V5.4)10.1-BLE 入门笔记(1)

ble 规范 深入了解蓝牙LE需要熟悉相关的规格。蓝牙LE的架构、程序和协议由一项关键规范完全定义,称为蓝牙核心规范。产品如何使用蓝牙以实现互操作性由两种特殊类型称为配置文件和服务的规范集合所涵盖。图1展示了BLE规范类型及其相互关系。 1.1 蓝牙核心规范 蓝牙核心规范是…

测试行业面临的问题及RunnerGo在工具层面如何解决的

RunnerGo致力于打造成一款企业级全栈测试平台&#xff0c;旨在实现产品生命周期的闭环管理&#xff0c;帮助企业在整个产品生命周期中确保质量、降低风险&#xff0c;并提供卓越的用户体验。采用了较为宽松的Apache-2.0 license开源协议&#xff0c;方便志同道合的朋友一起为开…

VEX —— Noise and Randomness

目录 Noise generators Random number generators Noise generators 噪波生成函数&#xff0c;noise、wnoise、vnoise、onoise、snoise、anoise&#xff1b;每一个函数表示生成噪波的不同算法&#xff1b; 每个噪波相对成本&#xff1a; Perlin noise&#xff08;noise&#…

五十一.DQN原理和实战

值函数近似法 经典强化学习方法的共同点是它们的求解过程都要维持一个值函数表格&#xff0c;策略函数也可以通过一个表格来表示&#xff0c;所以也称这些方法为表格法。表格法要求状态空间和动作空间都是离散的&#xff0c;这类强化学习任务只占所有强化学习任务的很小一部分…

Spring Bean的生命周期和扩展点源码解读

目录 1 Bean的生命周期2 Bean的定义、注册及创建过程3 Bean的注入过程4 Bean的销毁过程5 Bean的生命周期 1 Bean的生命周期 在Spring框架中&#xff0c;Bean对象也有着它的生命周期&#xff0c;然而对于Bean对象的生命周期&#xff0c;我们并不是很清楚&#xff0c;因为Spring帮…

学习pytorch10 神经网络-最大池化的作用

神经网络-最大池化的作用 官方文档参数说明运算演示公式最大池化 代码code 1执行结果code2执行结果 B站小土堆学习视频 https://www.bilibili.com/video/BV1hE411t7RN?p19&spm_id_frompageDriver&vd_source9607a6d9d829b667f8f0ccaaaa142fcb 官方文档 https://pytorch…

UML基础与应用之面向对象

UML&#xff08;Unified Modeling Language&#xff09;是一种用于软件系统建模的标准化语言&#xff0c;它使用图形符号和文本来描述软件系统的结构、行为和交互。在面向对象编程中&#xff0c;UML被广泛应用于软件系统的设计和分析阶段。本文将总结UML基础与应用之面向对象的…

34.KMP算法,拒绝暴力美学

概述 今天我们来聊一聊字符串匹配的问题。 比如有字符串str1 “豫章故那&#xff0c;洪都新府。星分翼轸&#xff0c;地接衡庐。襟三江而带五湖&#xff0c;控蛮荆而引瓯越。”&#xff0c;字符串str2 “襟三江而带五湖”。 现要判断str1是否含有str2&#xff0c;如果有则的…

zabbix介绍及部署(五十一)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 一、zabbix的基本概述 二、zabbix的构成 1、Server 2、web页面 3、数据库 4、proxy 5、Agent 三、zabbix的监控对象 四、zabbix的常用术语 五、zabbix的工作流程 六、za…

区域气象-大气化学在线耦合模式(WRF/Chem)在大气环境领域实践技术应用

大气污染是工农业生产、生活、交通、城市化等方面人为活动的综合结果&#xff0c;同时气象因素是控制大气污染的关键自然因素。大气污染问题既是局部、当地的&#xff0c;也是区域的&#xff0c;甚至是全球的。本地的污染物排放除了对当地造成严重影响外&#xff0c;同时还会在…

基于docker进行Grafana + prometheus实现服务监听

基于docker进行Grafana Prometheus实现服务监听 Grafana安装Prometheus安装Jvm监控配置 Grafana安装 docker pull grafana/grafanamkdir /server/grafanachmod 777 /server/grafanadocker run -d -p 3000:3000 --namegrafana -v /server/grafana:/var/lib/grafana grafana/gr…

Databend 开源周报第 111 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 理解 SHARE END…

9、DVWA——XSS(Stored)

文章目录 一、存储型XSS概述二、low2.1 源码分析2.2 通关分析 三、medium3.1 源码分析3.2 通关思路 四、high4.1 源码分析4.2 通关思路 一、存储型XSS概述 XSS&#xff0c;全称Cross Site Scripting&#xff0c;即跨站脚本攻击&#xff0c;某种意义上也是一种注入攻击&#xff…

MATLAB中filloutliers函数用法

目录 语法 说明 示例 在向量中对离群值进行插值 使用均值检测和最邻近值填充方法 使用移窗检测法 填充矩阵行中的离群值 指定离群值位置 返回离群值阈值 filloutliers函数功能是检测并替换数据中的离群值。 语法 B filloutliers(A,fillmethod) B filloutliers(A,f…

Paper Reading: RSPrompter,基于视觉基础模型的遥感实例分割提示学习

目录 简介目标工作重点方法实验总结 简介 题目&#xff1a;《RSPrompter: Learning to Prompt for Remote Sensing Instance Segmentation based on Visual Foundation Model 》&#xff0c;基于视觉基础模型的遥感实例分割提示学习 日期&#xff1a;2023.6.28 单位&#xf…

接口测试学习

1、curl 命令 无参&#xff1a;curl -X POST -H"Authorization: abcdefghijklmn" https://xxx.xxxxx.com/xxxx 有参&#xff1a;curl -X POST -H"Authorization:abcdefghijklmn " -H"Content-Type:application/json" https://xxx.xxxxx.com/…

synchronized锁详解

本文主要是对synchronized使用各个情况&#xff0c;加解锁底层原理的讲解 一&#xff0c;重量级锁 对象头 讲重量级锁之前&#xff0c;先了解一下一个对象的构成&#xff0c;一个对象是由对象头和对象体组成的&#xff0c;本文主要讲对象头&#xff0c;对象体其实就是对象的…

核心实验21_BGP高级(了解)(配置略)_ENSP

项目场景&#xff1a; 核心实验21_BGP基础_ENSP 通过bgp实现省市互通。 实搭拓扑图&#xff1a; 具体操作&#xff1a; 其他基础配置略&#xff08;接口地址&#xff0c;ospf&#xff09; 1.BGP邻居建立&#xff1a; R1: [R1]bgp 200 [R1-bgp]peer 10.2.2.2 as-number 200 …