小程序入门25:增加水果库存警报设置

71 阅读3分钟

写在前面

本篇文章是微信小程序开发入门的第二十五篇,增加水果库存警报设置

本来我们的想法是单独一个页面设置水果库存警报,但是我又觉得给水果一个个单独设置警报太麻烦了,所以直接把警报设置加到新增编辑页面,即在新增编辑页面加一个栏位:是否开启库存警报,如果选择开启的话,就要填写库存下限,同时增加水果类型选择栏位,我还给水果集合加了三个参数:saleNum(销售数量)、rotNum(腐烂等原因的处理数量)、typeId(所属水果类型的Id)

水果库存警报功能

云函数

首先修改新增水果的云函数,打开add\index.js文件,修改代码如下,文件edit\index.js一样修改,修改完成后将云函数重新上传并部署一下:

新增四个字段:

  • saleNum 销售数量
  • rotNum 处理数量
  • isQuaAlarm 是否开启库存警报
  • quaAlarmNum 库存下限
  • typeId 类型Id
      data: {
        name: event.name,
        oriPrice: event.oriPrice,
        quantity: event.quantity,
        unit: event.unit,
        vipPrice: event.vipPrice,
        curPrice: event.curPrice,
        intro: event.intro,
        isHot: false,
        fileID: event.fileID,
        // 新增的字段
        saleNum: event.saleNum,
        rotNum: event.rotNum,
        isQuaAlarm: event.isQuaAlarm,
        quaAlarmNum: event.quaAlarmNum,
        typeId: event.typeId,
      }

小程序端

先打开fruit-edit-add.json文件,添加如下代码:

页面中会用到radio组件来选择是否开启库存警报,用到picker组件来选择水果类型

{
  "usingComponents": {
    "t-radio": "tdesign-miniprogram/radio/radio",
    "t-radio-group": "tdesign-miniprogram/radio-group/radio-group",
    "t-picker": "tdesign-miniprogram/picker/picker",
    "t-picker-item": "tdesign-miniprogram/picker-item/picker-item"
  },
  "navigationBarTitleText": "水果信息",
  "navigationBarBackgroundColor": "#FFFFFF",
  "navigationBarTextStyle": "black"
}

再打开fruit-edit-add.js文件,在data中添加字段,并且在onLoad中也添加字段,同时执行getTypeList方法,代码如下:

typeShow用来控制水果类型选择器的显示隐藏

typeName用来显示选中的水果类型的文字

typeList是水果类型列表,通过getTypeList方法获取水果类型选择列表,同时通过find方法获取水果类型名称(即用来回显水果类型)

  data: {
    ...
    isQuaAlarm: false,
    quaAlarmNum: '',
    typeId: '',
    typeList: [],
    typeName: '',
    typeShow: false
  },
  onLoad(options) {
    if (options.info) {
      const info = JSON.parse(options.info)
      this.setData({
        ...
        isQuaAlarm: info.isQuaAlarm,
        quaAlarmNum: info.quaAlarmNum,
        typeId: info.typeId,
      })
    }
    this.getTypeList()
  },
  getTypeList() {
    wx.cloud.callFunction({
        // 云函数名称
        name: 'fruit-type',
        // 传给云函数的参数
        data: {
          type: 'search',
          limit: 100,
          page: 1
        },
      })
      .then(res => {
        const {
          data
        } = res.result.data
        let find = data.find(el => el._id === this.data.typeId)
        this.setData({
          typeList: data,
          typeName: find ? find.name : ''
        })
      })
      .catch(err => {})
  },

然后在fruit-edit-add.wxml文件中添加代码:

增加是否开启库存警报、库存下限、水果类型栏位,以及水果类型选择框

点击水果类型会调用onTypePicker,该方法会显示选择框

bindchange监听选择框点击“确定”

bindcancel监听选择框点击“取消”

keys用来定义 value / label 对应的字段别名

  <view class="info_li">
    <view class="info_title">是否开启库存警报</view>
    <view class="info_input">
      <t-radio-group value="{{isQuaAlarm}}" borderless t-class="box" bind:change="onChange">
        <t-radio block="{{false}}" label="是" value="{{1}}" style="margin-right: 60rpx;"/>
        <t-radio block="{{false}}" label="否" value="{{0}}" />
      </t-radio-group>
    </view>
  </view>
  <view class="info_li">
    <view class="info_title">库存下限</view>
    <view class="info_input">
      <input class="input_box" bindinput="emptyFun" placeholder="请输入库存下限" model:value="{{quaAlarmNum}}" />
    </view>
  </view>
  <view class="info_li">
    <view class="info_title">水果类型</view>
    <view class="info_input">
      <view bindtap="onTypePicker">
        {{typeName}}
      </view>
    </view>
  </view>
 ...
<view class="btn_box">
  <view class="edit_btn" bindtap="onEditSubmit">
    {{id?'确定编辑':'确定新增'}}
  </view>
</view>

<t-picker visible="{{typeShow}}" value="{{[typeId]}}" title="选择水果类型" cancelBtn="取消" confirmBtn="确认" bindchange="onTypeChange" bindcancel="onTypeCancel" keys="{{ { label:'name',value: '_id' } }}">
  <t-picker-item options="{{typeList}}" />
</t-picker>

接下来还要在fruit-edit-add.js文件中增加onChange方法,此时radio就能正常使用了

增加onTypePicker方法,点击后显示水果类型选择器

增加onTypeChange方法,水果类型选择框点击“确定”后隐藏水果类型选择器,同时给typeId和typeName赋值

增加onTypeCancel方法,水果类型选择框点击“取消”后隐藏水果类型选择器

同时修改onEditSubmit方法,修改或新增成功后跳转到水果管理页面

...
  onChange(e) {
    this.setData({
      isQuaAlarm: e.detail.value
    });
  },
  onTypePicker() {
    this.setData({
      typeShow: true
    });
  },
  onTypeChange(e) {
    this.setData({
      typeShow: false,
      typeId: e.detail.value[0],
      typeName: e.detail.label,
    });
  },
  onTypeCancel() {
    this.setData({
      typeShow: false,
    });
  },
  onEditSubmit() {
    ...
      if (success) {
        wx.reLaunch({
          url: `/pages/manage/fruit-manage/fruit-manage`,
        })
      }
    ...
    }).catch((e) => {});
  },

最终页面效果如下:

image.png

写在最后

以上就是增加水果库存警报设置的全部代码