支付宝/钉钉小程序-请假审批列表组件与页面

页面效果图
在这里插入图片描述

待办按钮显示已提交表单,已办按钮显示审批通过表单

可以左右滚动,点击最右或最左会自动移动

切换时会默认切换到全部并且下方列表会滚动到顶部

点击不同类别通过a:if渲染不同数据

可以上下滚动,for循环渲染数据

组件

axml

<view class="pages">
  <!-- 代办和已办tabbar -->
  <tabs class="mytab" tabs="{{tabs}}" tabsName="activeTab" showPlus="{{false}}" onTabClick="handleTabClick" onChange="handleTabChange" activeTab="{{activeTab}}" swipeable="{{false}}" capsule="{{true}}"/>
  <view class="container">
    <!-- 上侧滚动栏 -->
    <scroll-view class="left" scroll-x="{{true}}"  scroll-into-view="{{toView}}">
      <view a:for="{{array}}" onTap="isActive" class="{{index===currentIndex?'active':''}}" data-index="{{index}}" data-title="{{item}}" id="{{index+1}}"> 
        {{item}}
      </view>
    </scroll-view>
    <!-- 下侧滚动栏   -->
    <scroll-view class="right" scroll-y  scroll-top="{{scrollTop}}" >
       <!--                                                                     默认0是全部并且根据代办已办来变化                  显示数据等于上方类别并且根据代办已办来变化 -->
      <view class="rightcontent" a:for="{{list}}" a:for-index="item1" a:if="{{currentIndex===0&&item.spproval===isApproval?true:item.type===showdata&&item.spproval===isApproval}}">
        <view class="title">
          <image mode="scaleToFill" src="/images/audit.png"/>
          <text>
          OA审批
          </text>
          <text>
          {{activeTab===1?'已办':'待办'}}
          </text>
        </view>
        <text>
          {{item.title}}提交的{{pages}}
        </text>
        <text>
          {{pages}}类型:{{item.type}}
        </text>
        <text>
          开始时间:{{item.starttime}}
        </text>
        <text>
          结束时间:{{item.endtime}}
        </text>
          <text>
          查看详情
          </text>
      </view>
    </scroll-view>
  </view>
</view>

js

Component({
  data: {
    scrollTop: -1
  },
  mixins: [],
  props: {
    isApproval: '已提交',
  },
  didMount() {
    // 默认是全部选项
    this.setData({
      currentIndex: 0,
    })
  },
  didUpdate() { },
  didUnmount() { },
  methods: {
    // 切换tab导航栏
    handleTabClick(e) {
      this.setData({
        activeTab: e.index
      })

      if (e.index === 1) {
        this.setData({
          isApproval: '审批通过',
          toView: e.index,
          currentIndex: 0,
          scrollTop:0
        })
      }
      if (e.index === 0) {
        this.setData({
          isApproval: '已提交',
          toView: e.index + 1,
          currentIndex: 0,
          scrollTop:0.01
        })
      }
    },
    totop(e) {
      console.log(e);
    },
    // 切换上侧分类栏
    isActive(e) {
      const { index } = e.currentTarget.dataset;
      const { title } = e.currentTarget.dataset;
      console.log(this.props.scrollTop);

      this.setData({
        currentIndex: index,
        showdata: title,
        toView: index,
      })
      dd.pageScrollTo({
        scrollTop: 0,
      })
    }
  },
});

json

{
  "component": true,
  "usingComponents": {
    "tabs": "mini-ali-ui/es/tabs/index"
  }
}

acss

.pages{
  background-color: #F7F7F7;
  height: 100%;
}
.mytab{
  height: 120rpx;
}
.container{
  height: calc( 100vh - 120rpx );
  background-color: #E5E5E5;
  display: flex;
  flex-direction: column;
  overflow:visible;
}
.left{
  flex: 0.5;
  background-color: white;
  display: flex;
  white-space: nowrap;
  width: 100%;
}
.left view{
  font-size: 40rpx;
  flex: 1;
  margin-left: 20rpx;
  padding:0rpx 20rpx;
  display: flex;
  justify-content: center;
  align-items: center;
}
.left view:first-child{
  margin-left: 0rpx;
}
.left view:last-child{
  padding:0rpx 20rpx;
}
.right{
  flex: 5;
  background-color: #E5E5E5;
}
.active{
  color: #409EFF;
  /* border-left: 9rpx solid currentColor; */
  border-bottom: 9rpx solid currentColor;
  height:auto!important;
}
.rightcontent{
  display: flex;
  margin: 40rpx 45rpx;
  flex-direction: column;
  background-color: #fff;
  border-radius: 20rpx;
  padding:10rpx 25rpx;
  cursor: pointer;
}
.title {
  display: flex;
  height: 55rpx;
}
.title image{
  width: 55rpx;
  height: 100%;
  margin-left: 20rpx;
  justify-content: space-between;
}
.title :nth-child(2){
  font-size: 40rpx!important;
  color: #FF943D!important;
  line-height: 40rpx;
  margin-left: -20rpx;
  flex: 2.5;
}
.title :nth-child(3){
  font-size: 38rpx!important;
  line-height: 50rpx;
  color: #1677FF;
  flex: 1;
}
.rightcontent :nth-child(2){
  font-size: 39rpx;
}
.rightcontent text{
  font-size: 32rpx;
  padding:10rpx 25rpx;
}
.rightcontent :nth-child(6){
  color: #409EFF;
}

页面
acss 无
axml

<approvalscroll  tabs="{{tabs}}" list="{{list}}" array="{{array}}" pages="{{pages}}"/>

js

Page({
  data: {
    currentIndex: 0,
    activeTab: 0,
    pages:'请假',
    tabs: [{
      title: '待办'
    },
    {
      title: '已办'
    }],
    array: ['全部','年假', '年假', '年假', '事假','婚假','婚假', '病假'],
    list: [
      {
      title: "王昭",
      type: "事假",
      starttime: "2020-3-21",
      endtime: "2020-11-22",
      spproval: "审批通过",
      pk_leave: "3"
    },
    {
      title: "王昭",
      type: "事假",
      starttime: "2020-3-21",
      endtime: "2020-11-22",
      spproval: "审批通过",
      pk_leave: "3"
    },
    {
      title: "王昭",
      type: "事假",
      starttime: "2020-3-21",
      endtime: "2020-11-22",
      spproval: "审批通过",
      pk_leave: "3"
    },
    {
      title: "王昭",
      type: "事假",
      starttime: "2020-3-21",
      endtime: "2020-11-22",
      spproval: "审批通过",
      pk_leave: "3"
    },
    {
      title: "王昭",
      type: "事假",
      starttime: "2020-3-21",
      endtime: "2020-11-22",
      spproval: "已提交",
      pk_leave: "3"
    },
    {
      title: "王昭",
      type: "年假",
      starttime: "2020-3-21",
      endtime: "2020-11-22",
      spproval: "已提交",
      pk_leave: "3"
    },
    {
      title: "王昭",
      type: "婚假",
      starttime: "2020-3-21",
      endtime: "2020-11-22",
      spproval: "已提交",
      pk_leave: "3"
    },
    {
      title: "王昭",
      type: "病假",
      starttime: "2020-3-21",
      endtime: "2020-11-22",
      spproval: "已提交",
      pk_leave: "3"
    }
   ] 
  },
  });

json

{
  "defaultTitle": "请假审批",
  "usingComponents": {
    "tabs": "mini-ali-ui/es/tabs/index",
    "approvalscroll":"/components/approvalscroll/approvalscroll"
  }
}
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个简单的钉钉小程序审批相关代码示例: 1. 首先,在您的小程序页面中添加一个审批列表组件: ``` <view> <dd-list type="approve" bind:approveclick="onApproveClick"></dd-list> </view> ``` 2. 在您的小程序 JS 文件中,定义一个审批列表的数据源: ``` Page({ data: { approveList: [ { id: '001', title: '请假申请', status: '待审批', applicant: '张三', applyTime: '2021-09-01 10:00:00' }, { id: '002', title: '报销申请', status: '已通过', applicant: '李四', applyTime: '2021-09-02 14:00:00' }, { id: '003', title: '加班申请', status: '已拒绝', applicant: '王五', applyTime: '2021-09-03 18:00:00' } ] }, onApproveClick: function (event) { // 处理审批列表项点击事件 } }) ``` 3. 在您的小程序 JS 文件中,处理审批列表项的点击事件: ``` Page({ onApproveClick: function (event) { var approveId = event.currentTarget.dataset.id; // 根据 approveId 获取审批详情并展示 } }) ``` 4. 在您的小程序 JS 文件中,添加一个审批详情页面: ``` Page({ data: { approveDetail: {} }, onLoad: function (options) { var approveId = options.id; // 根据 approveId 获取审批详情并更新页面数据 } }) ``` 5. 在您的小程序页面中,添加一个审批详情的组件: ``` <view> <dd-card title="{{approveDetail.title}}" status="{{approveDetail.status}}"> <view> <text>申请人:{{approveDetail.applicant}}</text> <text>申请时间:{{approveDetail.applyTime}}</text> <text>审批意见:</text> <textarea bindinput="onOpinionInput"></textarea> <dd-button type="primary" bind:tap="onApprove">通过</dd-button> <dd-button type="warn" bind:tap="onReject">拒绝</dd-button> </view> </dd-card> </view> ``` 6. 在您的小程序 JS 文件中,添加一个处理审批意见输入的方法: ``` Page({ onOpinionInput: function (event) { var opinion = event.detail.value; // 更新页面数据中的审批意见 } }) ``` 7. 在您的小程序 JS 文件中,添加一个处理审批通过的方法: ``` Page({ onApprove: function () { var opinion = this.data.approveDetail.opinion; // 调用审批通过的接口并更新页面数据 } }) ``` 8. 在您的小程序 JS 文件中,添加一个处理审批拒绝的方法: ``` Page({ onReject: function () { var opinion = this.data.approveDetail.opinion; // 调用审批拒绝的接口并更新页面数据 } }) ``` 9. 最后,您可以根据您的实际需求,进一步完善该小程序审批相关功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值