doum
2025-09-04 9d901b4215323c97a00a068cd962f5c9c04dadfa
small-program/pages/index/index.vue
@@ -20,19 +20,17 @@
            </view>
         </view>
         <view class="index-j-list">
            <view class="index-list-item" v-for="(item, index) in orderList" :key="index">
            <view class="index-list-item" v-if="orderList && orderList.length" v-for="(item, index) in orderList" :key="index">
               <view class="index-list-item-head">
                  <view class="index-list-item-head-l">
                     <view class="xoam"></view>
                     <text v-if="item.type === 0 && item.workType === 0">用工单 - 采摘工</text>
                     <text v-else-if="item.type === 0 && item.workType === 1">用工单 - 分拣工</text>
                     <text v-else-if="item.type === 0 && item.workType === 2">用工单 - 包装工</text>
                     <text v-else-if="item.type === 1">运货单-{{item.categoryName}}-{{item.carUnit}}</text>
                     <text v-else-if="item.type === 1">运货单-{{item.categoryName}}</text>
                     <text v-else-if="item.type === 2">订餐单</text>
                  </view>
                  <view class="index-list-item-head-r">距离 {{item.distance}}km</view>
                  <view class="index-list-item-head-r">{{item.distance}}km</view>
               </view>
               <view class="index-list-item-info" v-if="item.type === 0 && item.workType === 0">
                  {{item.categoryName}}|{{item.priceNum1}}斤
@@ -44,7 +42,7 @@
                  {{item.categoryName}}|{{item.priceNum1}}人
               </view>
               <view class="index-list-item-info" v-if="item.type === 1">
                  {{item.transportTypeName}} | {{item.transportNum}}{{item.transportUnit}}|用车{{item.priceNum1}}天
               {{item.carUnit}} | {{item.transportTypeName}} | {{item.transportNum}}{{item.transportUnit}}|用车{{item.priceNum1}}天
               </view>
               <view class="index-list-item-info" v-if="item.type === 2">
                  {{item.wayInfoCopy}}
@@ -52,7 +50,7 @@
               
               <view class="address" v-if="item.type === 1">
                  <view class="address-xian"></view>
                  <view class="address-row" v-for="(address, i) in item.wayInfo" :key="i">
                  <view class="address-row" v-if="item.wayInfo" v-for="(address, i) in item.wayInfo" :key="i">
                     <image src="/static/icon/ic_qidian@2x.png" mode="widthFix" v-if="i === 0"></image>
                     <image src="/static/icon/ic_jingguo@2x.png" mode="widthFix" v-else-if="i !== 0 && i !== item.wayInfo.length - 1"></image>
                     <image src="/static/icon/ic_zhongdian@2x.png" mode="widthFix" v-else-if="i === item.wayInfo.length - 1"></image>
@@ -78,6 +76,8 @@
                  <view class="eidt-btn" @click="show1 = true, orderId = item.id">抢单</view>
               </view>
            </view>
            <view v-if="orderList && orderList.length&& !next" class="more">已加载全部</view>
            <view v-if="(!orderList || !orderList.length)&& !next"  class="more">暂无订单哦</view>
         </view>
      </view>
      
@@ -93,6 +93,7 @@
         
         <view class="index-c-cate">
            <view
               v-if="type"
               :class="typeId === item.id ? 'index-c-cate-item active' : 'index-c-cate-item'"
               v-for="(item, index) in type"
               :key="index"
@@ -116,11 +117,11 @@
                  <view class="list-item-row">
                     <view class="list-item-row-label">用餐时间<b>*</b></view>
                     <view class="list-item-row-radio">
                        <view class="radio-item" v-for="(item, index) in orderFood" :key="index">
                        <view class="radio-item" v-if="orderFood" v-for="(item, index) in orderFood" :key="index">
                           <view class="radio-item-label">{{item.name}}</view>
                           <view class="radio-item-list">
                              <view class="radio-item-list-l">
                                 <view :class="child.active ? 'radio-item-list-item active' : 'radio-item-list-item'" v-for="(child, childIndex) in item.list" :key="childIndex" @click="selectMenu(index, childIndex)">{{child.price}}元</view>
                                 <view v-if="item.list" :class="child.active ? 'radio-item-list-item active' : 'radio-item-list-item'" v-for="(child, childIndex) in item.list" :key="childIndex" @click="selectMenu(index, childIndex)">{{child.price||0}}元</view>
                              </view>
                              <view class="radio-item-list-data">
                                 <text style="flex-shrink: 0;">份数:</text>
@@ -154,7 +155,7 @@
                  <view class="list-item-row" v-if="viewStatus">
                     <view class="list-item-row-label">图片</view>
                     <view class="list-item-row-upload">
                        <view class="upload-item" v-for="(item, index) in form.multifileList" :key="index">
                        <view class="upload-item" v-if=" form.multifileList" v-for="(item, index) in form.multifileList" :key="index">
                           <image :src="item.url" mode="widthFix"></image>
                           <image class="upload-item-dele" @click="form.multifileList.splice(index, 1)" src="/static/icon/ic_delete1@2x.png" mode="widthFix"></image>
                        </view>
@@ -196,7 +197,7 @@
               </view>
               <view class="box-hz-btn" :style="{ backgroundImage: 'url(' + btn + ')' }">
                  <view class="box-hz-btn-kf" @click="contactPhone()">客服</view>
                  <view class="box-hz-btn-next" @click="submit">下一步</view>
                  <view class="box-hz-btn-next" @click="submit">立即下单</view>
               </view>
            </view>
         </template>
@@ -207,7 +208,7 @@
               <!-- 用工 -->
               <template v-if="typeId === 0">
                  <view class="box-hz-cate">
                     <view :class="form.workType === item.id ? 'box-hz-cate-item active' : 'box-hz-cate-item'" v-for="(item, index) in typeWork" :key="index" @click="clickTypeWork(item.id)">
                     <view v-if="typeWork" :class="form.workType === item.id ? 'box-hz-cate-item active' : 'box-hz-cate-item'" v-for="(item, index) in typeWork" :key="index" @click="clickTypeWork(item.id)">
                        <text>{{item.name}}</text>
                        <view class="box-hz-cate-item-x" v-if="form.workType === item.id"></view>
                     </view>
@@ -238,12 +239,13 @@
               
               <!-- 运货 -->
               <template v-if="typeId === 1">
                  <view class="box-hz-cate">
                     <view :class="form.categoryId === item.id ? 'box-hz-cate-item active' : 'box-hz-cate-item'" v-for="(item, index) in car" :key="index" @click="clickCar(item)">
                  <scroll-view class="nav-scroll" scroll-x="true">
                     <view v-if="car" :class="form.categoryId === item.id ? 'nav-item active' : 'nav-item'" v-for="(item, index) in car" :key="index" @click="clickCar(item)">
                        <text>{{item.name}}</text>
                        <view class="box-hz-cate-item-x" v-if="form.categoryId === item.id"></view>
                        <view class="nav-item-x" v-if="form.categoryId === item.id"></view>
                     </view>
                  </view>
                  </scroll-view>
                  <view class="box-hz-car">
                     <view class="box-hz-car-image">
                        <image :src="carImage" mode="widthFix"></image>
@@ -258,14 +260,14 @@
                        <view :class="form.startDate ? 'box-hz-list-item-val active' : 'box-hz-list-item-val'">
                           <view class="box-hz-list-item-val-left">
                              <image class="icon" src="/static/icon/ic_time@2x.png" mode="widthFix"></image>
                              <text>{{ form.startDate ? form.startDate + ' 至 ' + form.endDate : '请选择用工时间'}}</text>
                              <text>{{ form.startDate ? form.startDate + ' 至 ' + form.endDate : '请选择用车时间'}}</text>
                           </view>
                           <u-icon name="arrow-right" color="#111111" size="16"></u-icon>
                        </view>
                     </view>
                     <view class="box-hz-list-item">
                        <view class="box-hz-list-item-label">
                           <text>用车时间:</text>
                           <text>用车地点:</text>
                           <text @click="addAddr">+增加途经点</text>
                        </view>
                        <view class="item-d">
@@ -278,7 +280,7 @@
                                 <u-icon name="arrow-right" color="#111111" size="16"></u-icon>
                              </view>
                           </view>
                           <view class="item-d-row" v-for="(item, index) in form.wayInfoDTOList" :key="index" @click="selectAddress(4, index)">
                           <view class="item-d-row" v-if="form.wayInfoDTOList" v-for="(item, index) in form.wayInfoDTOList" :key="index" @click="selectAddress(4, index)">
                              <view class="item-d-row-icon">
                                 <image src="/static/icon/ic_jingguo@2x.png" mode="widthFix"></image>
                              </view>
@@ -303,10 +305,10 @@
                     </view>
                  </view>
               </template>
               <view class="box-hz-btn" :style="{ backgroundImage: 'url(' + btn + ')' }">
                  <view class="box-hz-btn-kf"  @click="contactPhone()" >客服</view>
                  <view class="box-hz-btn-next" @click="jump()">下一步</view>
                  <view class="box-hz-btn-next"  @click="jump()" v-if="typeId  == 2">立即下单</view>
                  <view class="box-hz-btn-next"  @click="jump()" v-if="typeId !== 2">下一步</view>
               </view>
            </view>
         </view>
@@ -321,7 +323,7 @@
               <view></view>
               <text>客服电话</text> 
            </view>
             <view class="phone-item" v-for="(item,index) in serverPhone"    :key="item" @click="contactPhoneDo(item)">
             <view class="phone-item" v-if="serverPhone" v-for="(item,index) in serverPhone"    :key="item" @click="contactPhoneDo(item)">
                <view></view>
                <text>{{item}}</text> 
             </view>  
@@ -342,6 +344,20 @@
         <view slot="confirmButton" style="display: flex; justify-content: space-between; align-items: center; width: 100%;">
            <view class="btn1" @click="show1 = false">取消</view>
            <view class="btn2" @click="getaccept1">确认</view>
         </view>
      </u-modal>
      <u-modal
         title="支付未成功"
         :show="show2"
         closeOnClickOverlay
         showCancelButton
      >
         <view class="slot-content">
            请确认是否取消支付或查看订单继续支付?
         </view>
         <view slot="confirmButton" style="display: flex; justify-content: space-between; align-items: center; width: 100%;">
            <view class="btn1" @click="show2 = false;payOrderId=null">取消支付</view>
            <view class="btn2" @click="goOrderDetail(payOrderId)">查看订单</view>
         </view>
      </u-modal>
   </view>
@@ -431,7 +447,9 @@
            
            isOnce: true,
            show1: false,
            orderId: null
            show2: false,
            orderId: null,
            payOrderId:null
         }
      },
      async onLoad() { 
@@ -461,7 +479,7 @@
            this.form.location = ''
            this.form.locationEnd = ''
            this.form.wayInfoDTOList = []
            this.form.workType = 0
            this.form.workType = 0
            this.form.days = ''
            this.form.locationRemark = ''
            this.form.supplement = ''
@@ -469,6 +487,7 @@
            this.form.estimatedAccount = ''
            this.form.price = ''
            this.form.address = ''
            this.clearAll()
         })
         // 刷新首页数据
         uni.$on('refresh', () => {
@@ -482,8 +501,6 @@
      },
      async onShow(options) {
         await this.$onLaunched;
         console.log('2')
         if(this.token && this.token != '' && this.userInfo && JSON.stringify(this.userInfo) != '{}') {
            console.log('已登陆')
            this.isLogin = true
@@ -502,27 +519,12 @@
            this.isLogin = false
            console.log('未登陆')
         }
         this.payOrderId=null
      },
      watch: {
         typeId: {
            handler(news, old) {
               console.log('typeId')
               this.form.startDate = ''
               this.form.address = ''
               this.form.endDate = ''
               this.form.latitude = ''
               this.form.longitude = ''
               this.form.location = ''
               this.form.locationEnd = ''
               this.form.wayInfoDTOList = []
               this.form.workType = 0
               this.form.days = ''
               this.form.locationRemark = ''
               this.form.supplement = ''
               this.form.multifileList = []
               this.form.estimatedAccount = ''
               this.form.price = ''
               this.viewStatus = false
               this.clearFormParam()
            }
         },
         orderFood: {
@@ -540,12 +542,14 @@
                     price += num * item.num
                  }
               })
               console.log("========================",price)
               this.form.price = price
            }
         },
         'form.price': {
            handler(news, old) {
               if (news > 0) {
               console.log(news,"==========",old)
               if (news != old) {
                  this.getPrice()
               }
            }
@@ -557,11 +561,46 @@
         }
      },
      methods: {
         goOrderDetail(id){
            uni.navigateTo({
               url: `/pages/order-details/order-details?id=`+id
            })
            this.orderId=null
            this.payOrderId=null
            this.show2=false
         },
         clearFormParam(){
            this.form.startDate = ''
            this.form.address = ''
            this.form.endDate = ''
            this.form.latitude = ''
            this.form.longitude = ''
            this.form.location = ''
            this.form.locationEnd = ''
            this.form.wayInfoDTOList = []
            this.form.workType = 0
            this.form.days = ''
            this.form.locationRemark = ''
            this.form.supplement = ''
            this.form.multifileList = []
            this.form.estimatedAccount = ''
            this.form.price = ''
            this.viewStatus = false
            this.clearAll()
         },
         clear(index) {
            this.orderFood[index].num = ''
            this.orderFood[index].list.forEach(item => {
               item.active = false
            })
            })
         },
         clearAll() {
            this.orderFood.forEach(p=>{
               p.num=null
               p.list.forEach(item => {
                  item.active = false
               })
            })
         },
         getDictInfo(){
            var that = this;
@@ -592,6 +631,7 @@
                        that.next = true
                        that.orderList = []
                        that.getOrderList()
                        that.goOrderDetail(that.orderId)
                     }, 2000)
                  }
               })
@@ -600,7 +640,7 @@
            var that = this;
            this.show1 = false
            uni.requestSubscribeMessage({
               tmplIds: ['tDpYImlrdv-0d3euTrHbYZ1cEZvjVHTNlqHvV0tpLHg'],
               tmplIds: ['AA97cHjvlPiNO4viMkVe4JifCf9TD5b5Eb7s6El3VS8','3YSC7gouRlSjHXz4CrWOGFzPmGwEBtFj4snwdfMvKHk','tDpYImlrdv-0d3euTrHbYZ1cEZvjVHTNlqHvV0tpLHg'],
               success(res) {
                  that.getaccept()
               },
@@ -662,11 +702,35 @@
         // 提交订单
         submit() {
            var that = this
            this.payOrderId=null
            if (!this.form.startDate) {
               return uni.showToast({ title: '请选择用餐时间', icon: 'none' })
            }
            let cateringDTOList = []
            let valid = true
            let msg ='请选择'
            that.orderFood.forEach(item => {
               item.list.forEach(child => {
                  if (child.active) {
                     // (Number(child.price) * Number(item.num))
                     if( !item.num){
                        msg =msg +'【'+item.name+'】';
                        valid =false
                     }
                     cateringDTOList.push({
                        id:item.id,
                        name: item.name,
                        num: item.num,
                        price: child.price * 100
                     })
                  }
               })
            })
            if(!valid){
               return uni.showToast({ title: msg+'用餐份数', icon: 'none' })
            }
            if (this.form.price === 0) {
               return uni.showToast({ title: '请选择用餐时间', icon: 'none' })
            if (cateringDTOList.length === 0) {
               return uni.showToast({ title: '请选择用餐标准', icon: 'none' })
            }
            if (!this.form.address) {
               return uni.showToast({ title: '请选择用餐地点', icon: 'none' })
@@ -675,21 +739,8 @@
               return uni.showToast({ title: '请输入联系电话', icon: 'none' })
            }
            uni.requestSubscribeMessage({
               tmplIds: ['oVjOBLcHxIlGzOMJsdInmgI5CHGXh-UTvMzQqfFOnIg'],
               success(res) {
                  let cateringDTOList = []
                  that.orderFood.forEach(item => {
                     item.list.forEach(child => {
                        if (child.active) {
                           // (Number(child.price) * Number(item.num))
                           cateringDTOList.push({
                              name: item.name,
                              num: item.num,
                              price: child.price * 100
                           })
                        }
                     })
                  })
               tmplIds: ['oVjOBLcHxIlGzOMJsdInmgI5CHGXh-UTvMzQqfFOnIg','AA97cHjvlPiNO4viMkVe4JifCf9TD5b5Eb7s6El3VS8'],
               success(res) {
                  that.$u.api.release({
                     ...that.form,
                     type: 2,
@@ -701,6 +752,7 @@
                     cateringDTOList
                  }).then(res => {
                     if (res.code == 200) {
                        that.clearFormParam();
                        wx.requestPayment({
                           timeStamp: res.data.object.timeStamp,
                           nonceStr: res.data.object.nonceStr,
@@ -718,6 +770,8 @@
                              }
                           },
                           fail(err) {
                              that.payOrderId = res.data.id
                              that.show2=true
                              console.log(err)
                           }
                        })
@@ -768,6 +822,8 @@
                     that.form.estimatedAccount = res.data
                  }
               })
            }else{
               that.form.estimatedAccount = 0
            }
         },
         addAddr() {
@@ -792,18 +848,19 @@
         selectAddress(type, index) {
            uni.chooseLocation({
               success: (res) => { 
                  console.log("==================",res)
                  if ([1,2].includes(type)) {
                     this.form.latitude = res.latitude
                     this.form.longitude = res.longitude
                     this.form.address = res.address
                     this.form.address = res.name ||res.address
                  } else if (type === 3) {
                     this.form.locationEnd = res.address
                     this.form.locationEnd = res.name ||res.address
                     this.form.latEnd = res.latitude
                     this.form.lgtEnd = res.longitude
                  } else if (type === 4) {
                     this.form.wayInfoDTOList[0].lat = res.latitude
                     this.form.wayInfoDTOList[0].lgt = res.longitude
                     this.form.wayInfoDTOList[0].location = res.address
                     this.form.wayInfoDTOList[index].lat = res.latitude
                     this.form.wayInfoDTOList[index].lgt = res.longitude
                     this.form.wayInfoDTOList[index].location = res.name||  res.address
                  }else if (type == -1) {
                     console.log(res)
                     this.location.latitude = res.latitude
@@ -1073,6 +1130,13 @@
            width: 100%;
            padding: 24rpx 30rpx;
            box-sizing: border-box;
            .more{
               width: 100%;
               margin-top: 40rpx;
               text-align: center;
               font-size: 24rpx;
               color: #666666;
            }
            .index-list-item {
               width: 100%;
               padding: 30rpx;
@@ -1717,6 +1781,44 @@
                     margin-top: 30rpx;
                  }
               }
               .nav-scroll {
                   white-space: nowrap; /* 防止导航项换行 */
                  margin-bottom: 50rpx;
                  height: 66rpx;
                   overflow: auto; /* 允许滚动条出现 */
                  .nav-item {
                    display: inline-block; /* 使导航项水平排列 */
                    margin-right: 60rpx;
                    position: relative;
                    text {
                       font-weight: 400;
                       font-size: 30rpx;
                       color: #666666;
                    }
                    .nav-item-x {
                       width: 40rpx;
                       height: 6rpx;
                       position: absolute;
                       bottom: -10rpx;
                       left: 50%;
                       transform: translate(-50%, 0);
                       background: #FF5A40;
                       border-radius: 3rpx;
                    }
                    // padding: 10px 20px; /* 设置内边距 */
                    // margin-right: 10px; /* 设置右边距 */
                    // background-color: #f0f0f0; /* 设置背景色 */
                    // border: 1px solid #ddd; /* 设置边框 */
                    // border-radius: 5px; /* 设置圆角 */
                 }
                 .active {
                    text {
                       font-weight: 600 !important;
                       font-size: 32rpx !important;
                       color: #222222 !important;
                    }
                 }
               }
               .box-hz-cate {
                  width: 100%;
                  display: flex;