小言_互联网的博客

【免费开放源码】审批类小程序项目实战(活动申请详解)

562人阅读  评论(0)

第一节:什么构成了微信小程序、创建一个自己的小程序

第二节:微信开发者工具使用教程

第三节:深入了解并掌握小程序核心组件

第四节:初始化云函数和数据库

第五节:云数据库的增删改查

第六节:项目大纲以及制作登录、注册页面

第七节:制作活动申请页面

第八节:活动申请页面的补充

第九节 ”我的“页面制作

第十节:活动详情页面制作

第十一节:活动历史页面制作

第十二节:预约老师页面制作

第十三节:预约历史页面制作

第十四节:活动审批端制作

第十五节:预约审批端制作

目录

前言

1.普通的输入框

2.单选器

2.1下拉单选器

2.2直接选择器 

3.时间选择器

4.提交按钮执行逻辑

题外话


前言

        由于上节代码行数较多,到后面编辑器太卡顿了连添加一个字符都很费劲。因此这一节是用来解析“活动申请”页面部分核心代码的。大致分为四个部分:普通的输入框、单选器、时间选择器、提交按钮执行逻辑。那我们现在开始吧~


1.普通的输入框

        “活动申请”页面中整个表单包含元素最多的就是普通的输入框,如活动名称、活动地点、负责人信息、预计参与人数、项目内容阐述、活动经费预算。这些都是比较简单的普通输入框。其实现的基本逻辑是:

        WXML中        创建input组件  设置输入键盘的type属性  设置占位符placeholder属性的具体字符  设置bindinput  

        JS中        在data中创建相关的空数据  使用this.setData方法将用户输入的值赋给data中的空数据  在最后提交整个表单的时候提交data里面的相关的值

这么说可能有点抽象,下面我将展示“活动名称”输入框作为例子,来实操一下(注:我这里并没有实现输入框的美化,是纯组件

WXML


  
  1. // type设置输入键盘样式,placeholder设置占位符,bindinput设置输入时触发的js函数
  2. <input type="text" placeholder="活动名称(必填*)" class="PnameInput" bindinput="huodongName"/>

JS 


  
  1. // 活动名称
  2. //设置入口参数res
  3. huodongName( res){
  4. //打印用户输入的值
  5. console. log(res. detail. value, "活动名称")
  6. //创建一个变量,并使值其等于用户输入的内容(可省略)
  7. let huodongna = res. detail. value
  8. //使用this.setData方法,令data中的huodongna的值为res.detail.value也就是用户输入的内容
  9. this. setData({
  10. huodongna
  11. })
  12. console. log(huodongna)
  13. },

最后在提交整体表单的时候将data中的相关变量提交上去 

 普通输入框的制作就是这样的一个基本流程,当然这只是实现了功能,样式没有美化,你懂了吗?


2.单选器

        在“活动申请”页面包含了两种单选器,一种是点击后下拉的单选器如所归属的组织、活动地点,一种是直接选择的单选器如是否有赞助、是否有借款、是否需要申请发放教师劳务费、是否需要上传OA。我们将按照先下拉单选器再直接选择器的顺序来解析


2.1下拉单选器

        其实就是用到了picker组件的一些相关知识,其基本逻辑是这样的。

        WXML中        创建picker组件  将其value属性与js的data的某一变量绑定  将其range属性与js的data的某一变量绑定  设置bindchange     创建一个view组件并让其显示当前的选项

        JS中        在data中创建相关的变量  使用this.setData方法将用户选择的值赋给data中的相关数据  创建变量并利用前面返回的数字值将返回的值变为汉字  再次利用setData方法 在最后提交整个表单的时候提交data里面的相关的值

同样的我将举“活动地点”的例子,来详细的说明整个流程。

这里你可以把value绑定的值理解为是选择器中的第一个元素,range绑定的值理解为选择器的内容

WXML


  
  1. //将value属性和range属性分别于js的data中相关的变量进行绑定,设置选择触发函数bindchange
  2. <picker bindchange="bindPickerChange" value="{{index}}" range="{{array}}">
  3. //使用view组件,显示当前选择的选项
  4. <view class="xuanzheyuyue">
  5. 当前选择:{{array[index]}}
  6. </view>
  7. </picker>

 JS


  
  1. data:{
  2. //注意我这里第一个是一个空的数据
  3. array: [ '', '校区1', '校区2'],
  4. index: 0,
  5. area: ""
  6. },
  7. //选择校区
  8. //设置入口参数为e
  9. bindPickerChange: function( e) {
  10. console. log( '选择校区的picker发送选择改变,携带值为', e. detail. value)
  11. //改变index的索引值
  12. this. setData({
  13. index: e. detail. value
  14. })
  15. //创建一个汉字的变量,并根据索引做出判断
  16. var area0 = "校区1"
  17. if(e. detail. value== 1){
  18. //如果索引值为1,那么就将area0赋值给data中的area
  19. this. setData({
  20. area: area0
  21. })
  22. }
  23. var area1 = "校区2"
  24. if(e. detail. value== 2){
  25. //与上述同理
  26. this. setData({
  27. area: area1
  28. })
  29. }
  30. console. log( '校区:', this. data. area)
  31. },

同样的这里也没实现CSS美化,全部的样式代码我都放在第七节了,需要的可自取


2.2直接选择器 

        这里要实现选择“是”后展现多个输入框的功能。如下图的展示

这里我们主要需要用到radio-group和label组件,其实现的基本逻辑是这样的。

        WXML中        创建radio-group组件并设置其选择函数  创建label组件用wx:for列表渲染js的data文件中的一个数组  创建radio组件并设置其value属性为列表渲染数组的value值 创建view组件并展示列表渲染数组的name值 

        JS中        在data中创建相关的数组  通过radio-group所绑定的函数判定选项  若选择的是“是”则将某一变量通过setData方法设置为true  相反若是选择了“否”则令其为false 在最后提交整个表单的时候提交data里面的相关的值

这里我将举“是否有赞助”为例子来帮助大家理解

WXML


  
  1. <!-- 是否有赞助 -->
  2. <view class="inputborder">
  3. <view class="Pname">是否有赞助 <view class="xiaozi">* </view> </view>
  4. <view>
  5. <!-- 创建radio-group并设置其选择函数 -->
  6. <radio-group bindchange="radioChange2">
  7. <!-- 将label与js文件中的itens列表渲染 -->
  8. <label wx:for="{{itens}}" wx:key="index" class="Pnamechoose">
  9. <view>
  10. <!-- 让radio的值与渲染列表中的value进行绑定 -->
  11. <radio value="{{item.value}}"/>
  12. </view>
  13. <!-- 使用view组件来显示其name -->
  14. <view>{{item.name}}
  15. </view>
  16. </label>
  17. </radio-group>
  18. </view>
  19. <!-- hidden属性与displays的值绑定,display的值默认为ture,故不显示下列表单 -->
  20. <view hidden="{{displays}}">
  21. <view class="Pname">赞助相关信息 <view class="xiaozi">* </view> </view>
  22. <input type="text" placeholder="赞助公司(必填)" class="inputborder" bindinput="Company"/>
  23. <input type="text" placeholder="赞助形式" class="inputborder" bindinput="Form"/>
  24. <input type="number" placeholder="赞助金额(必填)" class="inputborder" bindinput="Money"/>
  25. <!-- 选择是否已经提交合同 -->
  26. <view class="Pname">是否已经提交合同 <view class="xiaozi">* </view> </view>
  27. <radio-group bindchange="radioChange2plus">
  28. <label wx:for="{{contractItens}}" wx:key="index" class="Pnamechoose">
  29. <view>
  30. <radio value="{{item.value}}"/>
  31. </view>
  32. <view>{{item.name}} </view>
  33. </label>
  34. </radio-group>
  35. </view>
  36. </view>

JS


  
  1. data:{
  2. itens: [
  3. { value: '有赞助', name: '是'},
  4. { value: '没有赞助', name: '否'},
  5. ],
  6. display: true,
  7. },
  8. //是否有赞助
  9. radioChange2( e) {
  10. console. log( 'radio发生change事件,携带value值为:', e. detail. value)
  11. const itens = this. data. itens
  12. let iten = e. detail. value
  13. this. setData({
  14. itens,
  15. iten
  16. })
  17. if(iten == "没有赞助"){
  18. this. setData({
  19. displays: true
  20. })
  21. }
  22. else{
  23. this. setData({
  24. displays: false
  25. })
  26. }
  27. console. log(iten, this. data. displays)
  28. },


3.时间选择器

        这个部分用到的就是picker的时间选择器也就是mode属性为data的picker,由于这个组件被封装的很好,没有什么额外的知识点需要拎出来理解,直接复制粘贴就好了!因此这部分就简单的略过。

 WXML


  
  1. <picker mode="date" start="2017-09-01" bindchange="bindDatechangeStart" >
  2. <view>{{liststart}}
  3. <image src="../../icon/outline.png" class="_icon"> </image>
  4. </view>
  5. </picker>

 JS


  
  1. // 起始时间选择
  2. bindDatechangeStart( e){
  3. let obj = e. detail. value
  4. this. setData({
  5. liststart:obj
  6. })
  7. console. log( "活动开始时间为", obj, this. data. liststart)
  8. },

注意:我这里为了美观加了一个图片在view里面,如果你没有相应的图片直接复制粘贴的话是会报错的,如果有需要icon文件里面所有的图片,私聊我。 


4.提交按钮执行逻辑

        虽然“提交”在wxml中的代码很少,但是它所绑定的js函数是在js文件中代码行数占比最大的,为什么呢?原因是在提交整体的表格之前的要做很多判断,有的用户很粗心,有时候会漏填许多重要的信息导致整个表单报废,浪费资源,故提交整体表单到数据库中的要做详细的判断!

举一个例子

 如果用户忘记填写“活动名称”这个输入框,那么data里面的huodongna的值就是空,在提交的时候执行到下图的时候就会显示弹窗并且返回失败。由此可类推其他的判断~

        除此之外,我在提交表单到数据库中的时候提交了state字段,并且令它的值为0

这么做是为了区别活动的状态,因为在这个项目流程中活动分为:第一次待审批、已通过、已驳回、第二次待审批、已结束。一共五种状态,故令其state值分别为0、1、2、3、4

 


题外话

这一系列文章会持续更新,手把手教你从零创建一个小程序项目!并且免费提供源码。如果有什么疑问欢迎大家在底下留言讨论!你的赞和收藏是我最大的动力!! 


转载:https://blog.csdn.net/Zchengjisihan/article/details/128423596
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场