【实训项目】“优品果园”-线上水果商城小程序

简介: 【实训项目】“优品果园”-线上水果商城小程序

1.项目背景

随着现代人对消费水平的追求以及对食物安全的需要,无污染、产地直销的有机水果受到越来越多市民的喜欢。交易过程的简洁化是现代消费者的追求,产地直销也是近期流行的一种新型的交易模式。产地直销的交易模式使得交易过程更加简便快捷,也使消费也更透明化,有助于增加消费者对商家的信任和认可。有机食物又被誉为“朝阳产业”,具有良好的市场,同时,我们对安全食物的需要日益剧烈,对透明化消费的追求日益迫切,因此我们认为国内市场远景非常豁达。

2.项目目标

主要针对上班族以及中老年等人群,可以满足他们对于有机水果的需求,同时也满足其对于透明化消费的需求,以求达到双赢。

3.项目总体描述

3.1发展成果

我们的项目名称是“优品果源”,采用的是C2C模式。我们的程序包括了水果模板、新鲜到家、购物车和会员中心四个主要界面。

我们所设计的小程序主要是为消费者提供有机水果产地直销。在这个小程序里,我们会提供一定的经营产地,并为消费者提供产地全部信息,同时用户可以在线上对自己选择的产地进行实时观测,了解水果的长势,收货等全部过程,还也可以模拟体验农耕各项流程线上体验,(播种、施肥、浇水、除草、采摘)。

3.2功能描述

(1)用户注册

用户在使用“优品果源”时需要必须进行实名注册,包括姓名、年龄、性别、手机号、身份证号

(2)用户订单 包括

用户选择直销产地、购买水果等。

(3)交易中心

用户之间可以将多余的水果信息上传进行交易,也可以与农场之间进行交易。

(4)我的产地

提供一定的经营产地,并为消费提供产地全部信息,同时用户可以在线上对自己选择的产地进行实时观测,了解水果的长势,收货等全部过程。

(5)通知信息

后台会根据用户水果产地的生长情况,定时向客户发送提示信息; 资讯类信息,会根据季节实时发送一些水果种植信息,丰富地主的农耕经验,切实体验种植生活。

(6)客服中心

用户有任何问题可以咨询客服或者投诉商家。

4.项目成果

5.核心代码展示

<view class="goods marUpTop">
  <text class="total">共{{totalNum}}条</text>
  <view class="good" wx:for="{{goods}}" wx:key="id" wx:for-item="good">
    <image class="image" src="{{good.icon}}"></image>
    <text class="name" style='width:{{windowWidth - 80}}px;'>{{good.name}}</text>
  </view>
  <text class="bottomLoad" bindtap='bottomLoad' hidden='{{initLoadDataNum < pageSize}}'>{{bottomLoadMsg}}</text>
</view>
<view class="swiper-tab">  
    <view class="swiper-tab-list {{currentTab==0 ? 'on' : ''}}" data-current="0" bindtap="swichNav">未开始({{notStartTotalNums}})</view>  
    <view class="swiper-tab-list {{currentTab==1 ? 'on' : ''}}" data-current="1" bindtap="swichNav">进行中({{progressTotalNums}})</view>  
    <view class="swiper-tab-list {{currentTab==2 ? 'on' : ''}}" data-current="2" bindtap="swichNav">已结束({{doneTotalNums}})</view>  
</view> 
<swiper current="{{currentTab}}" class="swiper-box" duration="300" style="height:{{winHeight - 40}}px;" bindchange="bindChange">  
    <swiper-item>  
      <scroll-view  style="height: {{winHeight - 80}}px;" scroll-y>
        <view wx:for="{{notStartDatas}}" wx:for-item="notStart" wx:key="id" wx:for-index="index">
          <view class="list" style="background-color:{{index % 2 == 0 ? '#F6F6F6' : '#ffffff'}}" data-taskId="{{notStart.id}}" >
            <image bindtap="toTaskDetail" src="/images/notStart.png" class="icon" data-taskId="{{notStart.id}}"></image>
            <text bindtap="toTaskDetail" style="width:{{winWidth - 140}}px;" class="name" data-taskId="{{notStart.id}}">{{notStart.name}}</text>
            <button open-type="share" data-taskId="{{notStart.id}}" data-hookName="{{notStart.userName}}" type='primary' style="background-color: #265a88;" class='btn invite'>邀请</button>
            <form bindsubmit='del' report-submit data-taskId="{{notStart.id}}">
              <button form-type='submit' type='primary' style="background-color: red;" class='btn delete'>删除</button>
            </form>
          </view> 
        </view>
      </scroll-view>
      <view class="pageCmp">
        <image class="page" bindtap='upPage' src="{{notStartCurPage == 1 ? '/images/up-grey.png' : '/images/up.png'}}"/>
        <text class="page-no">{{notStartCurPage}}/{{notStartTotalPage}}</text>
        <image class="page" bindtap='downPage' src="{{notStartCurPage == notStartTotalPage ? '/images/down-grey.png' : '/images/down.png'}}"/>
      </view>
    </swiper-item>
    <swiper-item>  
      <scroll-view  style="height: {{winHeight - 80}}px;" scroll-y>
        <view wx:for="{{progressDatas}}" wx:for-item="progress" wx:key="id" wx:for-index="index">
          <view class="list" style="background-color:{{index % 2 == 0 ? '#F6F6F6' : '#ffffff'}}" data-taskId="{{progress.id}}" bindtap="toTaskDetail">
            <image src="/images/doing.png" class="icon" data-taskId="{{progress.id}}"></image>
            <text class="name" style="width:{{winWidth - 140}}px;" data-taskId="{{progress.id}}">{{progress.name}}</text>
            <progress class="progress" data-taskId="{{progress.id}}" activeColor="{{progress.activeColor}}" percent="{{progress.progress}}" show-info="true" active/>
          </view>
        </view>
      </scroll-view>
      <view class="pageCmp">
        <image class="page" bindtap='upPage' src="{{progressCurPage == 1 ? '/images/up-grey.png' : '/images/up.png'}}"/>
        <text class="page-no">{{progressCurPage}}/{{progressTotalPage}}</text>
        <image class="page" bindtap='downPage' src="{{progressCurPage == progressTotalPage ? '/images/down-grey.png' : '/images/down.png'}}"/>
      </view>
    </swiper-item>  
    <swiper-item>  
      <scroll-view  style="height: {{winHeight - 80}}px;" scroll-y>
        <view wx:for="{{doneDatas}}" wx:for-item="done" wx:key="id" wx:for-index="index">
          <view class="list" style="background-color:{{index % 2 == 0 ? '#F6F6F6' : '#ffffff'}}" data-taskId="{{done.id}}">
            <image src="/images/done.png" class="icon" data-taskId="{{done.id}}" bindtap="toTaskDetail"></image>
            <text style="width:{{winWidth - 95}}px;" class="name" data-taskId="{{done.id}}" bindtap="toTaskDetail">{{done.name}}</text>
            <form bindsubmit='del' report-submit data-taskId="{{done.id}}">
              <button form-type='submit' type='primary' style="background-color: red;" class='btn delete'>删除</button>
            </form>
          </view> 
        </view>
      </scroll-view>
      <view class="pageCmp">
        <image class="page" bindtap='upPage' src="{{doneCurPage == 1 ? '/images/up-grey.png' : '/images/up.png'}}"/>
        <text class="page-no">{{doneCurPage}}/{{doneTotalPage}}</text>
        <image class="page" bindtap='downPage' src="{{doneCurPage == doneTotalPage ? '/images/down-grey.png' : '/images/down.png'}}"/>
      </view>
    </swiper-item>  
</swiper>
<template name="normal">
  <view class="content-msg">{{msg}}</view>
</template>
<template name="apv">
  <view class="content-msg apv">
    <view class="apv-title">审批提醒</view>
    <view class="apv-content">{{msg}}</view>
    <view class="apv-do" data-id="{{id}}" data-attValue="{{attValue}}" bindtap="detail">
      <text>审批</text>
      <image class="right-image" src="/images/right.png"/>
    </view>
  </view>
</template>
<template name="end">
  <view class="msg-end" style='width:{{windowWidth - 70}}px;'>
    <image class="end-image" src="/images/{{attValue.suc ? 'success.png' : 'failure.png'}}"></image>
    <view style="width:{{windowWidth - 145}}px;" class="end-msg">{{msg}}<text style="color:#5D718D;" data-id="{{attValue.id}}" bindtap='endDetail'> [详情]</text></view>
  </view>
</template>
<view wx:if="{{isRefresh}}" class="fresh">
    <image src="/images/timer.gif" class="timer"></image>
</view>
<scroll-view  style="height: {{windowHeight}}px;" scroll-y  bindscroll="scroll" scroll-into-view="msgId_{{scrollInitId}}" bindtouchstart="start" bindtouchend="end" bindscrolltolower="hiddenDownBtn">
  <view class="msg-item" wx:for="{{msgs}}" wx:for-item="msg" wx:key="id" id="msgId_{{msg.id}}">
    <view>
      <image src="{{msg.icon}}" class="msg-icon"></image>
    </view>
    <view class="msg-content">
      <text class="name-time" decode="true">{{msg.sendName}} {{msg.createTime}}</text>
      <block wx:if="{{msg.type == 1}}"><template is="apv" data="{{...msg}}"/></block>
      <block wx:elif="{{msg.type == 2}}"><template is="end" data="{{...msg, windowWidth}}"/></block>
      <block wx:else><template is="normal" data="{{...msg}}"/></block>
    </view>
  </view>
  <form bindsubmit='jumpToUpUnRead' report-submit>
    <button class="toUpUnRead" form-type='submit' hidden='{{upBtnHidden}}'>☝ <text>{{unReadNum}}</text>条未读</button>
  </form>
  <form bindsubmit='jumpToDownUnRead' report-submit>
    <button class="toDownUnRead" form-type='submit' hidden='{{downBtnHidden}}'>︾ <text>{{downUnReadNum}}</text>条未读</button>
  </form>
</scroll-view>
<view class="swiper-tab">
    <view class="swiper-tab-list {{currentTab==0 ? 'on' : ''}}" data-current="0" bindtap="swichNav">进行中({{progressTotalNums}})</view>  
    <view class="swiper-tab-list {{currentTab==1 ? 'on' : ''}}" data-current="1" bindtap="swichNav">已结束({{doneTotalNums}})</view>  
</view> 
<swiper current="{{currentTab}}" class="swiper-box" duration="300" style="height:{{winHeight - 40}}px" bindchange="bindChange">  
    <swiper-item>
      <scroll-view  style="height: {{winHeight - 80}}px;" scroll-y>  
        <view wx:for="{{progressDatas}}" wx:for-item="progress" wx:key="id" wx:for-index="index">
          <view class="list" style="background-color:{{index % 2 == 0 ? '#F6F6F6' : '#ffffff'}}" data-taskId="{{progress.id}}" bindtap="toTaskDetail">
            <image src="/images/doing.png" class="icon" data-taskId="{{progress.id}}"></image>
            <text class="name" style="width:{{winWidth - 140}}px;" data-taskId="{{progress.id}}">{{progress.name}}</text>
            <progress class="progress" data-taskId="{{progress.id}}" activeColor="{{progress.activeColor}}" percent="{{progress.progress}}" show-info="true" active/>
          </view>
        </view>
      </scroll-view>
      <view class="pageCmp">
        <image class="page" bindtap='upPage' src="{{progressCurPage == 1 ? '/images/up-grey.png' : '/images/up.png'}}"/>
        <text class="page-no">{{progressCurPage}}/{{progressTotalPage}}</text>
        <image class="page" bindtap='downPage' src="{{progressCurPage == progressTotalPage ? '/images/down-grey.png' : '/images/down.png'}}"/>
      </view>
    </swiper-item>  
    <swiper-item>  
      <scroll-view  style="height: {{winHeight - 80}}px;" scroll-y>
        <view wx:for="{{doneDatas}}" wx:for-item="done" wx:key="id" wx:for-index="index">
          <view class="list" style="background-color:{{index % 2 == 0 ? '#F6F6F6' : '#ffffff'}}" data-taskId="{{done.id}}" bindtap="toTaskDetail">
            <image src="/images/done.png" class="icon" data-taskId="{{done.id}}"></image>
            <text class="name" style="width:{{winWidth - 55}}px;" data-taskId="{{done.id}}">{{done.name}}</text>
          </view> 
        </view>
      </scroll-view>
      <view class="pageCmp">
        <image class="page" bindtap='upPage' src="{{doneCurPage == 1 ? '/images/up-grey.png' : '/images/up.png'}}"/>
        <text class="page-no">{{doneCurPage}}/{{doneTotalPage}}</text>
        <image class="page" bindtap='downPage' src="{{doneCurPage == doneTotalPage ? '/images/down-grey.png' : '/images/down.png'}}"/>
      </view>
    </swiper-item>  
</swiper>
<view class="layout-column marUpTop" style="padding: 5px 15px;">
    拉钩创建成功,邀请Ta和你拉钩吧。
    <button open-type="share" type='primary' style="background-color: #265a88;width:100%;" size='default' class='marUpTop'>邀请</button>
</view>
<form bindsubmit="formSubmit" report-submit>
  <view class="layout-column marUpTop">
    <textarea class="desc border" placeholder="请描述反馈意见" name="content" maxlength="1000"/>
    <view class="marTop border">
      <button type="primary" size="default" style="background-color: #265a88;" formType="submit" disabled='{{disableBtn}}'>提交</button>
    </view>
    <modal hidden="{{formMsgHidden}}" title="提示" confirm-text="去完善" no-cancel="true" bindcancel="cancel" bindconfirm="hiddenFromMsg">
    意见不能为空
    </modal>
  </view>
</form>
<view class="goods marUpTop">
  <text class="total">共{{totalNum}}条</text>
  <view class="good" wx:for="{{goods}}" wx:key="id" wx:for-item="good">
    <image class="image" src="{{good.icon}}"></image>
    <text class="name" style='width:{{windowWidth - 80}}px;'>{{good.name}}</text>
  </view>
  <text class="bottomLoad" bindtap='bottomLoad' hidden='{{initLoadDataNum < pageSize}}'>{{bottomLoadMsg}}</text>
</view>
<view class="swiper-tab">  
    <view class="swiper-tab-list {{currentTab==0 ? 'on' : ''}}" data-current="0" bindtap="swichNav">未开始({{notStartTotalNums}})</view>  
    <view class="swiper-tab-list {{currentTab==1 ? 'on' : ''}}" data-current="1" bindtap="swichNav">进行中({{progressTotalNums}})</view>  
    <view class="swiper-tab-list {{currentTab==2 ? 'on' : ''}}" data-current="2" bindtap="swichNav">已结束({{doneTotalNums}})</view>  
</view> 
<swiper current="{{currentTab}}" class="swiper-box" duration="300" style="height:{{winHeight - 40}}px;" bindchange="bindChange">  
    <swiper-item>  
      <scroll-view  style="height: {{winHeight - 80}}px;" scroll-y>
        <view wx:for="{{notStartDatas}}" wx:for-item="notStart" wx:key="id" wx:for-index="index">
          <view class="list" style="background-color:{{index % 2 == 0 ? '#F6F6F6' : '#ffffff'}}" data-taskId="{{notStart.id}}" >
            <image bindtap="toTaskDetail" src="/images/notStart.png" class="icon" data-taskId="{{notStart.id}}"></image>
            <text bindtap="toTaskDetail" style="width:{{winWidth - 140}}px;" class="name" data-taskId="{{notStart.id}}">{{notStart.name}}</text>
            <button open-type="share" data-taskId="{{notStart.id}}" data-hookName="{{notStart.userName}}" type='primary' style="background-color: #265a88;" class='btn invite'>邀请</button>
            <form bindsubmit='del' report-submit data-taskId="{{notStart.id}}">
              <button form-type='submit' type='primary' style="background-color: red;" class='btn delete'>删除</button>
            </form>
          </view> 
        </view>
      </scroll-view>
      <view class="pageCmp">
        <image class="page" bindtap='upPage' src="{{notStartCurPage == 1 ? '/images/up-grey.png' : '/images/up.png'}}"/>
        <text class="page-no">{{notStartCurPage}}/{{notStartTotalPage}}</text>
        <image class="page" bindtap='downPage' src="{{notStartCurPage == notStartTotalPage ? '/images/down-grey.png' : '/images/down.png'}}"/>
      </view>
    </swiper-item>
    <swiper-item>  
      <scroll-view  style="height: {{winHeight - 80}}px;" scroll-y>
        <view wx:for="{{progressDatas}}" wx:for-item="progress" wx:key="id" wx:for-index="index">
          <view class="list" style="background-color:{{index % 2 == 0 ? '#F6F6F6' : '#ffffff'}}" data-taskId="{{progress.id}}" bindtap="toTaskDetail">
            <image src="/images/doing.png" class="icon" data-taskId="{{progress.id}}"></image>
            <text class="name" style="width:{{winWidth - 140}}px;" data-taskId="{{progress.id}}">{{progress.name}}</text>
            <progress class="progress" data-taskId="{{progress.id}}" activeColor="{{progress.activeColor}}" percent="{{progress.progress}}" show-info="true" active/>
          </view>
        </view>
      </scroll-view>
      <view class="pageCmp">
        <image class="page" bindtap='upPage' src="{{progressCurPage == 1 ? '/images/up-grey.png' : '/images/up.png'}}"/>
        <text class="page-no">{{progressCurPage}}/{{progressTotalPage}}</text>
        <image class="page" bindtap='downPage' src="{{progressCurPage == progressTotalPage ? '/images/down-grey.png' : '/images/down.png'}}"/>
      </view>
    </swiper-item>  
    <swiper-item>  
      <scroll-view  style="height: {{winHeight - 80}}px;" scroll-y>
        <view wx:for="{{doneDatas}}" wx:for-item="done" wx:key="id" wx:for-index="index">
          <view class="list" style="background-color:{{index % 2 == 0 ? '#F6F6F6' : '#ffffff'}}" data-taskId="{{done.id}}">
            <image src="/images/done.png" class="icon" data-taskId="{{done.id}}" bindtap="toTaskDetail"></image>
            <text style="width:{{winWidth - 95}}px;" class="name" data-taskId="{{done.id}}" bindtap="toTaskDetail">{{done.name}}</text>
            <form bindsubmit='del' report-submit data-taskId="{{done.id}}">
              <button form-type='submit' type='primary' style="background-color: red;" class='btn delete'>删除</button>
            </form>
          </view> 
        </view>
      </scroll-view>
      <view class="pageCmp">
        <image class="page" bindtap='upPage' src="{{doneCurPage == 1 ? '/images/up-grey.png' : '/images/up.png'}}"/>
        <text class="page-no">{{doneCurPage}}/{{doneTotalPage}}</text>
        <image class="page" bindtap='downPage' src="{{doneCurPage == doneTotalPage ? '/images/down-grey.png' : '/images/down.png'}}"/>
      </view>
    </swiper-item>  
</swiper>
<template name="normal">
  <view class="content-msg">{{msg}}</view>
</template>
<template name="apv">
  <view class="content-msg apv">
    <view class="apv-title">审批提醒</view>
    <view class="apv-content">{{msg}}</view>
    <view class="apv-do" data-id="{{id}}" data-attValue="{{attValue}}" bindtap="detail">
      <text>审批</text>
      <image class="right-image" src="/images/right.png"/>
    </view>
  </view>
</template>
<template name="end">
  <view class="msg-end" style='width:{{windowWidth - 70}}px;'>
    <image class="end-image" src="/images/{{attValue.suc ? 'success.png' : 'failure.png'}}"></image>
    <view style="width:{{windowWidth - 145}}px;" class="end-msg">{{msg}}<text style="color:#5D718D;" data-id="{{attValue.id}}" bindtap='endDetail'> [详情]</text></view>
  </view>
</template>
<view wx:if="{{isRefresh}}" class="fresh">
    <image src="/images/timer.gif" class="timer"></image>
</view>
<scroll-view  style="height: {{windowHeight}}px;" scroll-y  bindscroll="scroll" scroll-into-view="msgId_{{scrollInitId}}" bindtouchstart="start" bindtouchend="end" bindscrolltolower="hiddenDownBtn">
  <view class="msg-item" wx:for="{{msgs}}" wx:for-item="msg" wx:key="id" id="msgId_{{msg.id}}">
    <view>
      <image src="{{msg.icon}}" class="msg-icon"></image>
    </view>
    <view class="msg-content">
      <text class="name-time" decode="true">{{msg.sendName}} {{msg.createTime}}</text>
      <block wx:if="{{msg.type == 1}}"><template is="apv" data="{{...msg}}"/></block>
      <block wx:elif="{{msg.type == 2}}"><template is="end" data="{{...msg, windowWidth}}"/></block>
      <block wx:else><template is="normal" data="{{...msg}}"/></block>
    </view>
  </view>
  <form bindsubmit='jumpToUpUnRead' report-submit>
    <button class="toUpUnRead" form-type='submit' hidden='{{upBtnHidden}}'>☝ <text>{{unReadNum}}</text>条未读</button>
  </form>
  <form bindsubmit='jumpToDownUnRead' report-submit>
    <button class="toDownUnRead" form-type='submit' hidden='{{downBtnHidden}}'>︾ <text>{{downUnReadNum}}</text>条未读</button>
  </form>
</scroll-view>
<view class="swiper-tab">
    <view class="swiper-tab-list {{currentTab==0 ? 'on' : ''}}" data-current="0" bindtap="swichNav">进行中({{progressTotalNums}})</view>  
    <view class="swiper-tab-list {{currentTab==1 ? 'on' : ''}}" data-current="1" bindtap="swichNav">已结束({{doneTotalNums}})</view>  
</view> 
<swiper current="{{currentTab}}" class="swiper-box" duration="300" style="height:{{winHeight - 40}}px" bindchange="bindChange">  
    <swiper-item>
      <scroll-view  style="height: {{winHeight - 80}}px;" scroll-y>  
        <view wx:for="{{progressDatas}}" wx:for-item="progress" wx:key="id" wx:for-index="index">
          <view class="list" style="background-color:{{index % 2 == 0 ? '#F6F6F6' : '#ffffff'}}" data-taskId="{{progress.id}}" bindtap="toTaskDetail">
            <image src="/images/doing.png" class="icon" data-taskId="{{progress.id}}"></image>
            <text class="name" style="width:{{winWidth - 140}}px;" data-taskId="{{progress.id}}">{{progress.name}}</text>
            <progress class="progress" data-taskId="{{progress.id}}" activeColor="{{progress.activeColor}}" percent="{{progress.progress}}" show-info="true" active/>
          </view>
        </view>
      </scroll-view>
      <view class="pageCmp">
        <image class="page" bindtap='upPage' src="{{progressCurPage == 1 ? '/images/up-grey.png' : '/images/up.png'}}"/>
        <text class="page-no">{{progressCurPage}}/{{progressTotalPage}}</text>
        <image class="page" bindtap='downPage' src="{{progressCurPage == progressTotalPage ? '/images/down-grey.png' : '/images/down.png'}}"/>
      </view>
    </swiper-item>  
    <swiper-item>  
      <scroll-view  style="height: {{winHeight - 80}}px;" scroll-y>
        <view wx:for="{{doneDatas}}" wx:for-item="done" wx:key="id" wx:for-index="index">
          <view class="list" style="background-color:{{index % 2 == 0 ? '#F6F6F6' : '#ffffff'}}" data-taskId="{{done.id}}" bindtap="toTaskDetail">
            <image src="/images/done.png" class="icon" data-taskId="{{done.id}}"></image>
            <text class="name" style="width:{{winWidth - 55}}px;" data-taskId="{{done.id}}">{{done.name}}</text>
          </view> 
        </view>
      </scroll-view>
      <view class="pageCmp">
        <image class="page" bindtap='upPage' src="{{doneCurPage == 1 ? '/images/up-grey.png' : '/images/up.png'}}"/>
        <text class="page-no">{{doneCurPage}}/{{doneTotalPage}}</text>
        <image class="page" bindtap='downPage' src="{{doneCurPage == doneTotalPage ? '/images/down-grey.png' : '/images/down.png'}}"/>
      </view>
    </swiper-item>  
</swiper>
<view class="layout-column marUpTop" style="padding: 5px 15px;">
    拉钩创建成功,邀请Ta和你拉钩吧。
    <button open-type="share" type='primary' style="background-color: #265a88;width:100%;" size='default' class='marUpTop'>邀请</button>
</view>
<form bindsubmit="formSubmit" report-submit>
  <view class="layout-column marUpTop">
    <textarea class="desc border" placeholder="请描述反馈意见" name="content" maxlength="1000"/>
    <view class="marTop border">
      <button type="primary" size="default" style="background-color: #265a88;" formType="submit" disabled='{{disableBtn}}'>提交</button>
    </view>
    <modal hidden="{{formMsgHidden}}" title="提示" confirm-text="去完善" no-cancel="true" bindcancel="cancel" bindconfirm="hiddenFromMsg">
    意见不能为空
    </modal>
  </view>
</form>
<view class="goods marUpTop">
  <text class="total">共{{totalNum}}条</text>
  <view class="good" wx:for="{{goods}}" wx:key="id" wx:for-item="good">
    <image class="image" src="{{good.icon}}"></image>
    <text class="name" style='width:{{windowWidth - 80}}px;'>{{good.name}}</text>
  </view>
  <text class="bottomLoad" bindtap='bottomLoad' hidden='{{initLoadDataNum < pageSize}}'>{{bottomLoadMsg}}</text>
</view>
<view class="swiper-tab">  
    <view class="swiper-tab-list {{currentTab==0 ? 'on' : ''}}" data-current="0" bindtap="swichNav">未开始({{notStartTotalNums}})</view>  
    <view class="swiper-tab-list {{currentTab==1 ? 'on' : ''}}" data-current="1" bindtap="swichNav">进行中({{progressTotalNums}})</view>  
    <view class="swiper-tab-list {{currentTab==2 ? 'on' : ''}}" data-current="2" bindtap="swichNav">已结束({{doneTotalNums}})</view>  
</view> 
<swiper current="{{currentTab}}" class="swiper-box" duration="300" style="height:{{winHeight - 40}}px;" bindchange="bindChange">  
    <swiper-item>  
      <scroll-view  style="height: {{winHeight - 80}}px;" scroll-y>
        <view wx:for="{{notStartDatas}}" wx:for-item="notStart" wx:key="id" wx:for-index="index">
          <view class="list" style="background-color:{{index % 2 == 0 ? '#F6F6F6' : '#ffffff'}}" data-taskId="{{notStart.id}}" >
            <image bindtap="toTaskDetail" src="/images/notStart.png" class="icon" data-taskId="{{notStart.id}}"></image>
            <text bindtap="toTaskDetail" style="width:{{winWidth - 140}}px;" class="name" data-taskId="{{notStart.id}}">{{notStart.name}}</text>
            <button open-type="share" data-taskId="{{notStart.id}}" data-hookName="{{notStart.userName}}" type='primary' style="background-color: #265a88;" class='btn invite'>邀请</button>
            <form bindsubmit='del' report-submit data-taskId="{{notStart.id}}">
              <button form-type='submit' type='primary' style="background-color: red;" class='btn delete'>删除</button>
            </form>
          </view> 
        </view>
      </scroll-view>
      <view class="pageCmp">
        <image class="page" bindtap='upPage' src="{{notStartCurPage == 1 ? '/images/up-grey.png' : '/images/up.png'}}"/>
        <text class="page-no">{{notStartCurPage}}/{{notStartTotalPage}}</text>
        <image class="page" bindtap='downPage' src="{{notStartCurPage == notStartTotalPage ? '/images/down-grey.png' : '/images/down.png'}}"/>
      </view>
    </swiper-item>
    <swiper-item>  
      <scroll-view  style="height: {{winHeight - 80}}px;" scroll-y>
        <view wx:for="{{progressDatas}}" wx:for-item="progress" wx:key="id" wx:for-index="index">
          <view class="list" style="background-color:{{index % 2 == 0 ? '#F6F6F6' : '#ffffff'}}" data-taskId="{{progress.id}}" bindtap="toTaskDetail">
            <image src="/images/doing.png" class="icon" data-taskId="{{progress.id}}"></image>
            <text class="name" style="width:{{winWidth - 140}}px;" data-taskId="{{progress.id}}">{{progress.name}}</text>
            <progress class="progress" data-taskId="{{progress.id}}" activeColor="{{progress.activeColor}}" percent="{{progress.progress}}" show-info="true" active/>
          </view>
        </view>
      </scroll-view>
      <view class="pageCmp">
        <image class="page" bindtap='upPage' src="{{progressCurPage == 1 ? '/images/up-grey.png' : '/images/up.png'}}"/>
        <text class="page-no">{{progressCurPage}}/{{progressTotalPage}}</text>
        <image class="page" bindtap='downPage' src="{{progressCurPage == progressTotalPage ? '/images/down-grey.png' : '/images/down.png'}}"/>
      </view>
    </swiper-item>  
    <swiper-item>  
      <scroll-view  style="height: {{winHeight - 80}}px;" scroll-y>
        <view wx:for="{{doneDatas}}" wx:for-item="done" wx:key="id" wx:for-index="index">
          <view class="list" style="background-color:{{index % 2 == 0 ? '#F6F6F6' : '#ffffff'}}" data-taskId="{{done.id}}">
            <image src="/images/done.png" class="icon" data-taskId="{{done.id}}" bindtap="toTaskDetail"></image>
            <text style="width:{{winWidth - 95}}px;" class="name" data-taskId="{{done.id}}" bindtap="toTaskDetail">{{done.name}}</text>
            <form bindsubmit='del' report-submit data-taskId="{{done.id}}">
              <button form-type='submit' type='primary' style="background-color: red;" class='btn delete'>删除</button>
            </form>
          </view> 
        </view>
      </scroll-view>
      <view class="pageCmp">
        <image class="page" bindtap='upPage' src="{{doneCurPage == 1 ? '/images/up-grey.png' : '/images/up.png'}}"/>
        <text class="page-no">{{doneCurPage}}/{{doneTotalPage}}</text>
        <image class="page" bindtap='downPage' src="{{doneCurPage == doneTotalPage ? '/images/down-grey.png' : '/images/down.png'}}"/>
      </view>
    </swiper-item>  
</swiper>
<template name="normal">
  <view class="content-msg">{{msg}}</view>
</template>
<template name="apv">
  <view class="content-msg apv">
    <view class="apv-title">审批提醒</view>
    <view class="apv-content">{{msg}}</view>
    <view class="apv-do" data-id="{{id}}" data-attValue="{{attValue}}" bindtap="detail">
      <text>审批</text>
      <image class="right-image" src="/images/right.png"/>
    </view>
  </view>
</template>
<template name="end">
  <view class="msg-end" style='width:{{windowWidth - 70}}px;'>
    <image class="end-image" src="/images/{{attValue.suc ? 'success.png' : 'failure.png'}}"></image>
    <view style="width:{{windowWidth - 145}}px;" class="end-msg">{{msg}}<text style="color:#5D718D;" data-id="{{attValue.id}}" bindtap='endDetail'> [详情]</text></view>
  </view>
</template>
<view wx:if="{{isRefresh}}" class="fresh">
    <image src="/images/timer.gif" class="timer"></image>
</view>
<scroll-view  style="height: {{windowHeight}}px;" scroll-y  bindscroll="scroll" scroll-into-view="msgId_{{scrollInitId}}" bindtouchstart="start" bindtouchend="end" bindscrolltolower="hiddenDownBtn">
  <view class="msg-item" wx:for="{{msgs}}" wx:for-item="msg" wx:key="id" id="msgId_{{msg.id}}">
    <view>
      <image src="{{msg.icon}}" class="msg-icon"></image>
    </view>
    <view class="msg-content">
      <text class="name-time" decode="true">{{msg.sendName}} {{msg.createTime}}</text>
      <block wx:if="{{msg.type == 1}}"><template is="apv" data="{{...msg}}"/></block>
      <block wx:elif="{{msg.type == 2}}"><template is="end" data="{{...msg, windowWidth}}"/></block>
      <block wx:else><template is="normal" data="{{...msg}}"/></block>
    </view>
  </view>
  <form bindsubmit='jumpToUpUnRead' report-submit>
    <button class="toUpUnRead" form-type='submit' hidden='{{upBtnHidden}}'>☝ <text>{{unReadNum}}</text>条未读</button>
  </form>
  <form bindsubmit='jumpToDownUnRead' report-submit>
    <button class="toDownUnRead" form-type='submit' hidden='{{downBtnHidden}}'>︾ <text>{{downUnReadNum}}</text>条未读</button>
  </form>
</scroll-view>
<view class="swiper-tab">
    <view class="swiper-tab-list {{currentTab==0 ? 'on' : ''}}" data-current="0" bindtap="swichNav">进行中({{progressTotalNums}})</view>  
    <view class="swiper-tab-list {{currentTab==1 ? 'on' : ''}}" data-current="1" bindtap="swichNav">已结束({{doneTotalNums}})</view>  
</view> 
<swiper current="{{currentTab}}" class="swiper-box" duration="300" style="height:{{winHeight - 40}}px" bindchange="bindChange">  
    <swiper-item>
      <scroll-view  style="height: {{winHeight - 80}}px;" scroll-y>  
        <view wx:for="{{progressDatas}}" wx:for-item="progress" wx:key="id" wx:for-index="index">
          <view class="list" style="background-color:{{index % 2 == 0 ? '#F6F6F6' : '#ffffff'}}" data-taskId="{{progress.id}}" bindtap="toTaskDetail">
            <image src="/images/doing.png" class="icon" data-taskId="{{progress.id}}"></image>
            <text class="name" style="width:{{winWidth - 140}}px;" data-taskId="{{progress.id}}">{{progress.name}}</text>
            <progress class="progress" data-taskId="{{progress.id}}" activeColor="{{progress.activeColor}}" percent="{{progress.progress}}" show-info="true" active/>
          </view>
        </view>
      </scroll-view>
      <view class="pageCmp">
        <image class="page" bindtap='upPage' src="{{progressCurPage == 1 ? '/images/up-grey.png' : '/images/up.png'}}"/>
        <text class="page-no">{{progressCurPage}}/{{progressTotalPage}}</text>
        <image class="page" bindtap='downPage' src="{{progressCurPage == progressTotalPage ? '/images/down-grey.png' : '/images/down.png'}}"/>
      </view>
    </swiper-item>  
    <swiper-item>  
      <scroll-view  style="height: {{winHeight - 80}}px;" scroll-y>
        <view wx:for="{{doneDatas}}" wx:for-item="done" wx:key="id" wx:for-index="index">
          <view class="list" style="background-color:{{index % 2 == 0 ? '#F6F6F6' : '#ffffff'}}" data-taskId="{{done.id}}" bindtap="toTaskDetail">
            <image src="/images/done.png" class="icon" data-taskId="{{done.id}}"></image>
            <text class="name" style="width:{{winWidth - 55}}px;" data-taskId="{{done.id}}">{{done.name}}</text>
          </view> 
        </view>
      </scroll-view>
      <view class="pageCmp">
        <image class="page" bindtap='upPage' src="{{doneCurPage == 1 ? '/images/up-grey.png' : '/images/up.png'}}"/>
        <text class="page-no">{{doneCurPage}}/{{doneTotalPage}}</text>
        <image class="page" bindtap='downPage' src="{{doneCurPage == doneTotalPage ? '/images/down-grey.png' : '/images/down.png'}}"/>
      </view>
    </swiper-item>  
</swiper>
<view class="layout-column marUpTop" style="padding: 5px 15px;">
    拉钩创建成功,邀请Ta和你拉钩吧。
    <button open-type="share" type='primary' style="background-color: #265a88;width:100%;" size='default' class='marUpTop'>邀请</button>
</view>
<form bindsubmit="formSubmit" report-submit>
  <view class="layout-column marUpTop">
    <textarea class="desc border" placeholder="请描述反馈意见" name="content" maxlength="1000"/>
    <view class="marTop border">
      <button type="primary" size="default" style="background-color: #265a88;" formType="submit" disabled='{{disableBtn}}'>提交</button>
    </view>
    <modal hidden="{{formMsgHidden}}" title="提示" confirm-text="去完善" no-cancel="true" bindcancel="cancel" bindconfirm="hiddenFromMsg">
    意见不能为空
    </modal>
  </view>
</form>

6.PPT展示

相关文章
|
7月前
|
缓存 小程序 前端开发
商城/点餐/家政类小程序源码合集_微信抖音小程序源码开发从入门到精通实战
本文系统讲解如何利用现有源码快速开发商城、点餐、家政类微信/抖音小程序,涵盖环境搭建、核心功能实现、多平台部署与优化,提供完整技术方案。实战导向,助力开发者高效入门与落地。
|
7月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
7月前
|
人工智能 监控 小程序
【快递鸟】选择对接你的物流商城/小程序的物流API平台
在电商竞争日益激烈的今天,物流体验已成为影响用户留存和复购的关键因素。一个高效、透明、稳定的物流系统,对于物流商城或小程序来说至关重要。然而,自建物流查询系统需要对接众多快递公司,开发周期长、维护成本高、数据整合困难。
382 0
|
9月前
|
人工智能 小程序 前端开发
小程序、网站 vs. APP:成本差异究竟在哪里?技术栈如何决定项目上限?优雅草卓伊凡
小程序、网站 vs. APP:成本差异究竟在哪里?技术栈如何决定项目上限?优雅草卓伊凡
548 0
小程序、网站 vs. APP:成本差异究竟在哪里?技术栈如何决定项目上限?优雅草卓伊凡
|
人工智能 小程序 NoSQL
【一步步开发AI运动小程序】二十一、如何将AI运动项目配置持久化到后端?
本文介绍基于云智「Ai运动识别引擎」的运动配置持久化方案,旨在优化小程序或Uni APP中AI运动识别能力。通过将运动检测参数(如`Key`、`Name`、`TickMode`、`rules`或`samples`)持久化到后端,可避免因频繁调整运动参数而重新发布应用,提升用户体验。持久化数据结构支持规则和姿态样本存储,适用于关系数据库、文件或文档数据库(如MongoDB)。此外,云智还提供运动自动适配工具及「AI乐运动」产品,助力快速实现AI体育、全民健身等场景。
|
移动开发 小程序
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
722 0
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
441 1
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
4263 3
|
XML 小程序 JavaScript
小程序入门之项目配置说明和数据绑定
小程序入门之项目配置说明和数据绑定
196 1
|
存储 运维 小程序
后端开发零负担!揭秘支付宝小程序云开发的高效与安全,你的项目也能飞速上线?
【8月更文挑战第27天】支付宝小程序云开发是由阿里云提供的集成开发环境,助力开发者高效、安全地构建小程序后端服务,免去服务器搭建,显著提高开发效率并降低运维成本。它集成了云函数、云数据库及云存储等功能,便于快速搭建后端逻辑。例如,仅需简单几行代码即可创建HTTP接口或进行数据管理。这使得开发者能更专注于业务逻辑和用户体验优化,同时平台还提供了强大的安全保障措施,确保数据安全和用户隐私。无论对于初创团队还是成熟企业,支付宝小程序云开发都能有效提升产品迭代速度和市场竞争力。
473 1

热门文章

最新文章

下一篇
开通oss服务