微信小程序实现删除功能

news2024/11/25 13:46:15

 1. 前端

项目列表展示是使用的wx:for遍历

每个项目展示有3个模块

1. project-title

2. project-content

3. project-foot

 全部代码如下

<t-sticky>
  <view class="search">
    <t-search model:value="{{conditions.keyword}}" placeholder="输入 户名 手机号 省份 城市 查询" center bind:change="inputKeyword" bind:clear="clearKeyword" bind:submit="doSearch" />
  </view>
  <t-dropdown-menu>
    <t-dropdown-item label="选择状态" optionsColumns="2" options="{{workflows}}" value="{{conditions.selectedWorkflows}}" bindchange="selectWorkflow" bindconfirm="confirmSelectWorkflow" default-value="{{conditions.selectedWorkflows}}" multiple />
    <t-dropdown-item label="选择城市" bindchange="selectCity" bindconfirm="confirmSelectCity" optionsColumns="3" options="{{cities}}" value="{{conditions.selectedCities}}" default-value="{{conditions.selectedCities}}" multiple />
    <t-dropdown-item label="选择用户" bindchange="selectUser" bindconfirm="confirmSelectUser" wx:if="{{user.admin}}" optionsColumns="3" options="{{users}}" value="{{conditions.selectedUsers}}" default-value="{{conditions.selectedUsers}}" multiple />
  </t-dropdown-menu>
</t-sticky>


<list-rack length="{{records.length}}" loading="{{loading}}" list-end="{{dataEnd}}">
  <block wx:for="{{records}}" wx:key="id">
    <view class="project-title">
      <view class="left">#{{item.serialNo}}</view>
      <view class="right" bind:tap="onAction" data-id="{{item.id}}">
        <t-icon name="ellipsis" size="48rpx" />
      </view>
    </view>
    <view class="project-content">
      <view class="basic-info" bind:tap="view">
        <view class="left">
          <view>
            <text class="name" data-id="{{item.id}}">{{item.name}}</text>
            <text class="phone">{{item.phone}}</text>
          </view>
          <view class="city">{{item.province}}-{{item.city}}</view>
        </view>
        <view class="right">
          <t-tag class="margin-16" theme="success" variant="light" size="large">
            {{item.workflow}}
          </t-tag>
        </view>
      </view>
      <view class="address">
        {{item.address}}
      </view>
    </view>
    <view class="project-foot">
      <view class="left">业务员:{{item.userName}} 工程人员: {{item.builderName}}</view>
      <view class="right">{{item.createAt}}</view>
    </view>
  </block>
</list-rack>

<t-action-sheet id="t-action-sheet" bind:selected="handleAction" />
<t-fab icon="add" bind:click="addProject" text="项目"></t-fab>

 点击删除的功能是定义在

project-title

中 bind:tap绑定了onAction(e)方法,点击时触发 ,自定义属性data-id绑定了当前项目的id值

js页面如下:

全部js代码,找一下onAction(e)方法

import Project from '../../../api/project'
import ActionSheet, { ActionSheetTheme } from '../../../miniprogram_npm/tdesign-miniprogram/action-sheet/index';

import I18n from '../../../i18n/index'
import PageList from '../../../behaviors/page-list'

Page({

  behaviors: [I18n, PageList],

  /**
   * 页面的初始数据
   */
  data: {
    workflows: [],
    cities: [],
    users: [],
    conditions: {
      keyword: null,
      selectedWorkflows: [],
      selectedCities: [],
      selectedUsers: [],
      pageSize: 20,
      currentPage: 1
    },

    project: [],
    user: {},
    true: true
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log("project index onload:。。。。")
    let self = this
    //城市列表数据从Project归属地中查询
    Project.findAllCities().then((res) => {
      console.log("获取到城市有:" + res.data)
      let cs = res.data.map(city => {
        return {
          value: city,
          label: city
        }
      })
      self.setData({
        cities: cs
      })
    })
    //用户列表数据从Project所有userId中查询
    Project.findAllUsers().then((res) => {
      console.log("获取到的user有:" + res.data)
      let rcds = res.data.map((rd) => {
        return {
          value: rd.id,
          label: rd.name
        }
      })
      self.setData({
        users: rcds
      })
    })
    //设置审核状态
    this.setData({
      //新的/审核信息不完整(newly),待审核(apply),审核通过(approved)/挂起(pending);
      //施工中/整改(building), 施工验收(builded-check)验收通过(check-passed),项目完成(finish)
      workflows: [{
        value: 'newly',
        label: this.$t('projectWorkflowNewly')
      },
      {
        value: 'apply',
        label: this.$t('projectWorkflowApply')
      },
      {
        value: 'approved',
        label: this.$t('projectWorkflowApproved')
      },
      {
        value: 'building',
        label: this.$t('projectWorkflowBuilding')
      },
      {
        value: 'builded-check',
        label: this.$t('projectWorkflowBuildedCheck')
      },
      {
        value: 'check-passed',
        label: this.$t('projectWorkflowCheckPassed')
      },
      {
        value: 'finish',
        label: this.$t('projectWorkflowFinish')
      },
      {
        value: 'pending',
        label: this.$t('projectWorkflowPending')
      }
      ]
    });

    this.setData({
      user: getApp().globalData.user
    })

    this.resetData();
    //console.log('====', Permit.canAccess(this.data.user, 'project'))
  },

  injectEntity() {
    return Project
  },

  onTabsChange(tabVal) {
    console.log(tabVal.detail.value)
  },

  addProject() {
    wx.redirectTo({
      url: '/pages/project/new/firstStep/firstStep',
    })
  },

  selectWorkflow(e) {
    console.log(e)
    this.setData({
      "conditions.selectedWorkflows": e.detail.value
    })
  },

  selectCity(e) {
    console.log(e)
    this.setData({
      "conditions.selectedCities": e.detail.value
    })
  },

  selectUser(e) {
    console.log(e)
    this.setData({
      "conditions.selectedUsers": e.detail.value
    })
  },


  inputKeyword(e) {
    this.setData({
      'conditions.keyword': e.detail.value
    })
  },

  clearKeyword(e) {
    this.setData({
      'conditions.keyword': null
    })
  },

  onAction(e) {
    this.setData({ selectedRecord: this.pickRecord(e.currentTarget.dataset.id) })
    let menuItems = [
      // {label: '编辑', action: 'edit'},
      { label: '删除', action: 'delete' }
    ];

    ActionSheet.show({
      theme: ActionSheetTheme.List,
      selector: '#t-action-sheet',
      context: this,
      items: menuItems,
    });

  },
  handleAction(e) {
    switch (e.detail.selected.action) {
      case 'edit':
        this.edit()
        break;
      case 'delete':
        this.delete()
        break;
    }
  },
  delete() {
    console.log(this.data.selectedRecord.id)

  },

  edit() {

  },

  confirmSelectWorkflow() {
    this.resetData()
  },

  confirmSelectCity() {
    this.resetData()
  },

  confirmSelectUser() {
    this.resetData()
  }
})

 其他导入的这些js文件:(都是定义好的,直接拿来用!)

这个miniprogram_npm文件夹中的所有代码是tdesign模版中自带的,具体看这篇文章

微信小程序项目开发Day1【项目搭建】_素心如月桠的博客-CSDN博客

js代码我上传了

【免费】微信小程序通用的js代码资源-CSDN文库

百度网盘:

链接:https://pan.baidu.com/s/1nN2ZlQsYqqL7Ibk2KzshIg?pwd=fhv4 
提取码:fhv4

回到onAction(e)方法里面

 调用逻辑如下箭头所示

最后调用的是  handleAction(e) 

 

 

 这个id是哪来的?一定要自己前端定义好,不是直接就能哪的

自定义属性就是data-开头后面跟自定义的名字,这里我就写的id:data-id

 取值的时候,

点击这个view标签,绑定的onAction(e)

id值就在参数e里面

this.setData({ selectedRecord: this.pickRecord(e.currentTarget.dataset.id) })

setData到selectRecord可以打印到控制台如下:

 

 selectRecord定义在page-list.js里面,import导入进来就相对于把代码直接复制到当前页面,所以直接用就行

接下来实现删除方法

springboot后端delete的Controller写好

回顾一下重点就这一块和

 

  onAction(e) {
    this.setData({ selectedRecord: this.pickRecord(e.currentTarget.dataset.id) })
    console.log("当前selectedRecord的id值:" + this.data.selectedRecord.id)
    let menuItems = [
      // {label: '编辑', action: 'edit'},
      { label: '删除', action: 'delete' }
    ];

    ActionSheet.show({
      theme: ActionSheetTheme.List,
      selector: '#t-action-sheet',
      context: this,
      items: menuItems,
    });

  },
  handleAction(e) {
    switch (e.detail.selected.action) {
      case 'edit':
        this.edit()
        break;
      case 'delete':
        this.delete()
        break;
    }
  },
  delete() {
    console.log(this.data.selectedRecord.id)
    Project.delete(this.data.selectedRecord.id).then((res) => {
      console.log(res)
      if (res.data.code == 200) {
        this.resetData();
      }
    })
  },

删除代码如下:

  delete() {
    console.log(this.data.selectedRecord.id)
    Project.delete(this.data.selectedRecord.id).then((res) => {
      console.log(res)
      if (res.data.code == 200) {
        this.resetData();
      }
    })
  },

 

实现成功:

 

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

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

相关文章

adb shell命令查看当前屏幕可见最顶层Activity和Fragment及其调用栈

adb shell命令查看当前屏幕可见最顶层Activity和Fragment及其调用栈 &#xff08;1&#xff09;当前屏幕可见页面最顶层是哪个Activity: adb shell "dumpsys activity top | grep ACTIVITY | tail -n 1"&#xff08;2&#xff09;当前屏幕可见页面最顶层是哪个Fragm…

mac使用指南

新公司给配备了mac&#xff0c;可惜土鳖的我不会用&#xff0c;所以特地写了一篇文章记录学习mac的过程 快捷键 删除&#xff1a;commanddelete 光标移至最右/左&#xff1a;command右/左箭头 截图&#xff1a;commandshift3/4/5&#xff0c;3代表截全屏&#xff0c;4代表选…

PDF合并和拆分软件 PDF Merge PDF Splitter mac中文版v6.3.9

PDF Merge PDF Splitter mac是一款用于合并和拆分PDF文件的工具。它可以将多个PDF文件合并为一个&#xff0c;也可以将一个PDF文件拆分为多个文件。 合并PDF文件&#xff1a;用户可以将多个PDF文件合并为一个文件。合并后的PDF文件保留原有的文档结构和格式&#xff0c;包括书签…

Winform直接与Wpf交互

Winform项目中&#xff0c;可以直接使用wpf中的自定义控件和窗体 测试环境&#xff1a; vistual studio 2017 window 10 一 winform直接使用wpf的自定义控件 步骤如下&#xff1a; 1 新建winfrom项目&#xff0c;名为WinFormDemo&#xff0c;默认有一个名为Form1的窗体…

方案:基于AI烟火识别与视频技术的秸秆焚烧智能化监控预警方案

一、方案背景 为严控秸秆露天焚烧&#xff0c;改善环境空气质量&#xff0c;各省相继发布秸秆禁烧工作内容。以安徽省为例&#xff0c;大气污染防治联席会议下发了该省2020年秸秆禁烧工作部署通知。2020年起&#xff0c;气象局将对全省秸秆焚烧火点实施卫星全年全时段监测&…

Ruijie未授权访问

本文由掌控安全学院 - 杳若 投稿 漏洞成因 没进行权限校验。 影响范围 Ruijie 发现方式 一、fofa发现 1. title"Ruijie Easy-Smart Switch"利用方式 访问之后直接是进入后台的样子~ 实战 修复方式 对于鉴权类型的漏洞&#xff0c;主要的修复方式是全局增加…

BUUCTF:[GYCTF2020]FlaskApp

Flask的网站&#xff0c;这里的功能是Base64编码解码&#xff0c;并输出 并且是存在SSTI的 /hint 提示PIN码 既然提示PIN&#xff0c;那应该是开启了Debug模式的&#xff0c;解密栏那里随便输入点什么报错看看&#xff0c;直接报错了&#xff0c;并且该Flask开启了Debug模式&am…

[PyTorch][chapter 55][GAN- 3]

前言&#xff1a; 这里面主要结合GAN 损失函数&#xff0c;讲解一下JS散度缺陷问题。 目录&#xff1a; GAN 优化回顾 JS 散度缺陷 一 GAN 优化回顾 1.1 GAN 损失函数 1.2 固定生成器G,最优鉴别器 为 此刻优化目标为 1.3 得到最优鉴别器后&#xff0c;最优编码器G为 优化目标…

机器学习算法基础--逻辑回归简单处理mnist数据集项目

目录 1.项目背景介绍 2.Mnist数据导入 3.数据标签提取且划分数据集 4.数据特征标准化 5.模型建立与训练 6.后验概率判断及预测 7.处理模型阈值及准确率 8.阈值分析的可视化绘图 9.模型精确性的评价标准 1.项目背景介绍 """ MNIST数据集是美国国家标准与…

【论文阅读 08】Adaptive Anomaly Detection within Near-regular Milling Textures

2013年&#xff0c;太老了&#xff0c;先不看 比较老的一篇论文&#xff0c;近规则铣削纹理中的自适应异常检测 1 Abstract 在钢质量控制中的应用&#xff0c;我们提出了图像处理算法&#xff0c;用于无监督地检测隐藏在全局铣削模式内的异常。因此&#xff0c;我们考虑了基于…

with ldid... /opt/MonkeyDev/bin/md: line 326: ldid: command not found

吐槽傻逼xcode 根据提示 执行了这个脚本/opt/MonkeyDev/bin/md 往这里面添加你brew install 安装文件的目录即可

ETLCloud工具让美团数据管理更简单

美团为第三方开发者和商家提供了一系列开放的API接口和工具&#xff0c;使其可以与美团的业务进行对接和集成&#xff0c;从而获得更多的业务机会和增长空间。 通过美团开放平台&#xff0c;第三方开发者和商家可以实现以下功能&#xff1a; 开放接口&#xff1a;美团开放平台…

联想y7000 y7000p 2018/2019 不插电源 不插充电器, 直接关机 ,电量一直89%/87%/86%,V0005如何解决?

这种问题&#xff0c;没有外力破坏的话&#xff0c;电池不可能突然出事。这种一般是联想的固件问题&#xff0c;有可能发生在系统更新&#xff0c;或者突然的不正常关机或长时间电池过热&#xff0c;原因我不是很清楚。 既然发生了&#xff0c;根据我收集的解决方法&#xff0c…

软件测试-基本概念

软件测试-基本概念 1.什么是软件测试 测试指的是对我们生产出来的产品特性进行一些校验&#xff0c;例如对传感器、手机等的测试&#xff0c;而软件测试是对我们开发出的软件进行校验是否存在问题&#xff0c;测试软件特性是否符合用户需求。 2.软件测试的基本概念 软件测试…

Itsycal for Mac: 精美日历软件的魅力之旅

在这个数字化时代&#xff0c;管理时间和日程变得尤为重要。macOS 平台上的 Itsycal 日历软件可以帮助你有效管理你的日程和时间。 Itsycal 是一款轻量级且直观的日历应用程序&#xff0c;专门为 macOS 用户设计。通过这款软件&#xff0c;你可以轻松查看、管理和跟踪你的日常…

分布式多级缓存SDK设计的思考

分布式多级缓存SDK设计的思考 背景整体架构多层级组装回调埋点分区处理一致性问题缓存与数据库之间的一致性问题不同层级缓存之间的一致性问题不同微服务实例上&#xff0c;非共享缓存之间的一致性问题 小结 之前实习期间编写过一个简单的多级缓存SDK&#xff0c;后面了解到一些…

Postman脚本——断言测试

pm对象提供了测试相关功能&#xff1a; pm.test(testName:String, specFunction:Function):Function&#xff1a;测试函数。pm.expect(assertion:*):Function → Assertion&#xff1a;允许在响应数据上做测试&#xff0c;使用ChaiJS expect BDD语法。 可以使用pm.response.t…

SQL模板-用户留存率计算

在这段实习中&#xff0c;我遇到了用户留存率计算的需求&#xff0c;这里做个总结。 首先来讲下&#xff0c;什么是用户留存&#xff1f; 在互联网行业中&#xff0c;用户在某段时间内开始使用应用&#xff0c;经过一段时间后&#xff0c;仍然继续使用该应用的用户。用户留存一…

Windows账号和密码的获取与破解 相关工具集合

Windows账号和密码的获取与破解 相关工具集合 1.概述2.GetHashes3.gsecdump4.SAMInside5.oclHashcat 1.概述 在通过SQL注入等方式获取网站的WebShell后&#xff0c;就可以利用系统的各种漏洞进行提权&#xff0c;提权成功后&#xff0c;就可以通过远程终端登录系统。此时&…

什么是设备运维管理系统?它对企业有什么帮助?

如果企业在生产过程中遭遇设备故障的突发情况&#xff0c;不仅会对生产计划产生直接的影响&#xff0c;还会导致生产成本的不必要增加。这就是没有采用设备运维管理系统的潜在风险和问题。因此&#xff0c;许多制造企业已开始积极引入并实施设备运维管理系统&#xff0c;其主要…