-
zhangwei
2025-03-06 02ad32582e3a3b0e6f4b2d1b50593eff1d0558e3
src/pages/delivergoods/query.vue
@@ -1,8 +1,522 @@
<template>
   <up-sticky bgColor="#fff">
      <view class="coreshop-ff content c-p-10">
         <view class="coreshop-ff content c-p-l-10 c-p-t-10 c-p-r-10">
            <up-search placeholder="请点击选择日期" @click='clickTime' :show-action="false" @clear='init' disabled
               v-model="workTime" search-icon="calendar" @search='init'></up-search>
         </view>
         <view class="coreshop-ff content c-p-10 chuany-flex chuany-justify-between">
            <!-- <view class="chuany-width82"> -->
            <up-search placeholder="请点击选择司机" @click="clickAction('driver7')" @clear='init' disabled @change='init'
               action-text="查询" v-model="deliverKeyName" @search='init' @custom='init'></up-search>
            <!-- </view>
            <up-text align="right" text='送货安排' size='14' @click="() => show7 = true"></up-text> -->
         </view>
      </view>
      <up-subsection :list="list" current='1' activeColor="#f9ae3d" @change="sectionChange"></up-subsection>
   </up-sticky>
   <view class="c-p-b-100">
      <view class="c-p-l-20 c-p-r-20" v-if="orderList&&orderList.length>0">
         <view class="listrecord c-p-t-20" v-for="(item,index) in orderList" :key="item.keyid"
            @click='goDetail(item)'>
            <view class="coreshop-ff chuany-bradius20">
               <view class="chuany-font26">
                  <view class="chuany-flex chuany-justify-between">
                     <text class="chuany-width7">{{index+1}}</text>
                     <view class="chuany-width15">
                        {{$util.formatDate(item.createTime,'riqi')}}
                     </view>
                     <view class="chuany-width73">
                        <u-text size='14' :text="item.remark" lines="1">
                        </u-text>
                     </view>
                     <!-- <view class="chuany-width5" @tap.stop='editOrder(item)'>
                        <up-icon name="edit-pen"></up-icon>
                     </view> -->
                  </view>
               </view>
            </view>
         </view>
         <up-loadmore :status="loadStatus" />
      </view>
      <view v-else>
         <up-empty text='暂无' icon="/static/order.png">
         </up-empty>
      </view>
      <up-modal title="送货安排" :show="show7" showCancelButton @confirm="confirmSave" @cancel='cancelModal'
         :asyncClose="true">
         <up-form labelPosition="left" :model="arrangeInfo" ref="formRef" labelWidth='140rpx'>
            <up-form-item label="送货日期" prop="deliverTime" required :borderBottom='false' ref="item1"
               @click="clickShouTime">
               <!-- <up-input v-model="arrangeInfo.deliverTime" readonly border="none"
                  placeholder="点击选择工作日期"></up-input> -->
               <up-datetime-picker hasInput @confirm='confirmDate' :show="shougHuoshow" v-model="deliverTime"
                  mode="date" placeholder="点击选择工作日期" :minDate='Number(new Date(minDate))'
                  @cancel='() => shougHuoshow = false'></up-datetime-picker>
            </up-form-item>
            <up-form-item label="司机" prop="driverId" required :borderBottom='false' @click="clickAction('driver')"
               ref="item1">
               <up-input v-model="driverName" disabled border="none" disabledColor="#ffffff"
                  placeholder="请选择司机"></up-input>
            </up-form-item>
            <up-form-item label="收货单位" prop="buyerId" required :borderBottom='false' ref="item1">
               <up-input v-model="arrangeInfo.companyName" placeholder="请选择收货单位" border="none">
                  <template #suffix>
                     <up-button @tap="clickAction" text="点击选择" type="primary" size="mini"></up-button>
                  </template>
               </up-input>
            </up-form-item>
            <up-form-item label="联系人" prop="lianxiren" :borderBottom='false' ref="item1">
               <up-input v-model="arrangeInfo.lianxiren" border="none" placeholder="请输入联系人"></up-input>
            </up-form-item>
            <up-form-item label="联系电话" prop="dianhua" required :borderBottom='false' ref="item1">
               <up-input v-model="arrangeInfo.dianhua" border="none" placeholder="请输入联系电话"></up-input>
            </up-form-item>
            <up-form-item label="送货地址" prop="dizhi" required :borderBottom='false' ref="item1">
               <up-input v-model="arrangeInfo.dizhi" border="none" placeholder="请输入送货地址"></up-input>
            </up-form-item>
            <up-form-item label="送货事由" prop="remark" required :borderBottom='false' ref="item1">
               <up-textarea v-model="arrangeInfo.remark" border="none" placeholder="请输入送货事由"></up-textarea>
            </up-form-item>
         </up-form>
      </up-modal>
      <fui-date-picker range :show="datePickerShow" :value="getFirstDayOfMonth()" type="3" zIndex="10000"
         @change="changePicker" :minDate='minDate' :maxDate='maxDate' @cancel="clickTime"></fui-date-picker>
      <up-action-sheet :show="showActions" :actions="actions" title="请选择" @close="showActions = false"
         wrapMaxHeight='500px' @select="selectItem">
      </up-action-sheet>
   </view>
</template>
<script>
   import {
      mapGetters
   } from 'vuex'
   export default {
      data() {
         return {
            list: ['全部', '未送', '已送'],
            datePickerShow: false,
            shougHuoshow: false,
            workTime: '',
            orderList: [],
            loadStatus: 'loadmore',
            pageIndex: 1,
            pageSize: 20,
            contentVal: '',
            customerList: [],
            isEdit: false,
            editItem: {},
            isLoading: false,
            show7: false,
            showActions: false,
            driverName: '',
            actions: [],
            selectAc: '',
            deliveredState:'Undeliver',
            minDate: this.$util.formatDate(new Date(), null, -7),
            maxDate: this.$util.formatDate(new Date(), null, 7),
            deliverTime: Number(new Date(this.$util.formatDate(new Date(), null, 1))),
            arrangeInfo: {
               deliverTime: this.$util.formatDate(new Date(), null, 1),
               driverId: '',
               buyerId: '',
               dianhua: '',
               remark: '',
               lianxiren: '',
               dizhi: '',
               companyName: ''
            },
            rules: {
               'deliverTime': {
                  type: 'string',
                  required: true,
                  message: '请选择日期',
                  trigger: ['blur', 'change']
               },
               'arrangeInfo.driverId': {
                  type: 'string',
                  max: 1,
                  required: true,
                  message: '请选择司机',
                  trigger: ['blur', 'change']
               },
               'arrangeInfo.dianhua': {
                  type: 'string',
                  max: 1,
                  required: true,
                  message: '请输入联系电话',
                  trigger: ['blur', 'change']
               },
               'arrangeInfo.dizhi': {
                  type: 'string',
                  max: 1,
                  required: true,
                  message: '请输入送货地址',
                  trigger: ['blur', 'change']
               },
               'arrangeInfo.remark': {
                  type: 'string',
                  max: 1,
                  required: true,
                  message: '请输入送货事由',
                  trigger: ['blur', 'change']
               },
            },
            radio: '',
            switchVal: false,
            driverList: [],
            buyerName: '',
            timeStart: '',
            timeEnd: '',
            sevenDaysDriver: [],
            deliverKeyID: '',
            deliverKeyName: ''
         }
      },
      onShow() {
         this.init()
      },
      computed: {
         ...mapGetters(['userInfo']),
         isAdmin() {
            return this.userInfo.userCompany ? this.userInfo.userCompany.isAdmin : false
         },
      },
      onReady() {
         this.$refs.formRef.setRules(this.rules);
      },
      onLoad() {
         this.Getdrivers()
         this.getCustomer()
         this.GetDriversOfWithin7days()
      },
      onReachBottom() {
         if (this.loadStatus != 'nomore') {
            this.getList()
         }
      },
      onPullDownRefresh() {
         this.startDate = ''
         this.endDate = ''
         this.workTime = ''
         this.deliverKeyName = ''
         this.init()
         uni.stopPullDownRefresh();
      },
      methods: {
         sectionChange(val) {
            switch (val) {
               case 0:
                  this.deliveredState = null
                  break;
               case 1:
                  this.deliveredState = 'Undeliver'
                  break;
               case 2:
                  this.deliveredState = 'Delivered'
                  break;
            }
            this.init()
         },
         goDetail(item) {
            uni.navigateTo({
               url: `/pages/delivergoods/querydetail?KeyId=${item.keyid}&isAdmin=${this.isAdmin}`
            });
         },
         GetDriversOfWithin7days() {
            this.$api.GetDriversOfWithin7days().then(res => {
               if (res.code == 1) {
                  this.sevenDaysDriver = res.data
               }
            })
         },
         changePicker(val) {
            console.log(val);
            this.workTime = val.startDate.result + '至' + val.endDate.result
            this.timeStart = new Date(val.startDate.result) //工作开始时间
            this.timeEnd = new Date(val.endDate.result)
            this.datePickerShow = !this.datePickerShow
            this.getList()
         },
         confirmDate(val) {
            console.log(val);
            this.arrangeInfo.deliverTime = val
            this.shougHuoshow = false
         },
         getCustomer() {
            this.$api.GeCorporateClients().then(res => {
               if (res.code == 1) {
                  this.customerList = res.data
                  this.customerList.forEach(item => {
                     item.name = item.companyName
                  })
               }
            })
         },
         selectItem(item) {
            if (this.selectAc == 'driver') {
               this.driverName = item.name
               this.arrangeInfo.driverId = item.keyid
            } else if (this.selectAc == 'driver7') {
               this.deliverKeyID = item.keyid
               this.deliverKeyName = item.name
               this.init()
            } else {
               this.buyerName = item.name
               this.arrangeInfo.buyerId = item.keyid
               this.arrangeInfo.dizhi = item.adder
               this.arrangeInfo.dianhua = item.companyPhone
               this.arrangeInfo.lianxiren = item.businessManagers
               this.arrangeInfo.companyName = item.companyName
            }
            this.selectAc = ''
         },
         getFirstDayOfMonth() {
            var currentDate = new Date();
            // currentDate.setDate(1); // 将日期设为1
            return this.$util.formatDate(currentDate);
         },
         clickTime() {
            this.datePickerShow = !this.datePickerShow
         },
         clickShouTime() {
            this.shougHuoshow = !this.shougHuoshow
         },
         clickAction(val) {
            switch (val) {
               case 'driver':
                  this.actions = this.driverList
                  break
               case 'driver7':
                  this.actions = this.sevenDaysDriver
                  break
               default:
                  this.actions = this.customerList
                  break
            }
            this.selectAc = val
            this.showActions = true
            uni.hideKeyboard()
         },
         editOrder(item) {
            this.isEdit = true
            this.arrangeInfo = {
               deliverTime: this.$util.formatDate(new Date(), null, 1),
               driverId: item.driverId,
               buyerId: item.buyerId,
               dianhua: item.dianhua,
               remark: item.remark,
               lianxiren: item.lianxiren,
               dizhi: item.dizhi,
               keyid: item.keyid,
               companyName: item.companyName
            }
            this.show7 = true
            this.driverName = item.driver.name
            // let obj = this.customerList.find(ite => {
            //    return ite.keyid == item.buyerId
            // })
            // this.buyerName = obj.companyName
         },
         delOrder(item) {
            let that = this
            uni.showModal({
               title: '提示',
               content: '确认删除该送货吗?',
               success: function(res) {
                  if (res.confirm) {
                     // 执行确认后的操作
                     that.$api.DelAppointmentDeliver({
                        keyid: item.keyid
                     }).then(req => {
                        if (req.code == 1) {
                           that.$util.showToast({
                              title: '删除成功!'
                           })
                           that.init()
                        } else {
                           that.$util.showToast({
                              title: req.error
                           })
                        }
                     })
                  } else {
                     // 执行取消后的操作
                  }
               }
            })
         },
         init() {
            this.pageIndex = 1
            this.pageSize = 20
            this.loadStatus = 'loadmore'
            this.orderList = []
            this.contentVal = ''
            this.getList()
         },
         confirmSave() {
            this.$refs.formRef.validate().then(res => {
               if (this.isEdit) {
                  this.$api.UpDataDeliverPlans(this.arrangeInfo).then(res => {
                     if (res.code == 1) {
                        this.isEdit = false
                        this.arrangeInfo = {
                           deliverTime: this.$util.formatDate(new Date(), null, 1),
                           driverId: '',
                           buyerId: '',
                           dianhua: '',
                           remark: '',
                           lianxiren: '',
                           dizhi: '',
                        }
                        this.show7 = false
                        this.driverName = ''
                        this.buyerName = ''
                        this.init()
                     } else {
                        this.$util.showToast({
                           title: res.error
                        })
                     }
                     this.isLoading = false
                  })
                  return
               }
               this.$api.CreatDeliverPlan(this.arrangeInfo).then(res => {
                  if (res.code == 1) {
                     this.arrangeInfo = {
                        deliverTime: this.$util.formatDate(new Date(), null, 1),
                        driverId: '',
                        buyerId: '',
                        dianhua: '',
                        remark: '',
                        lianxiren: '',
                        dizhi: '',
                     }
                     this.show7 = false
                     this.driverName = ''
                     this.buyerName = ''
                     this.init()
                  } else {
                     this.$util.showToast({
                        title: res.error
                     })
                  }
                  this.isLoading = false
               })
            })
         },
         cancelModal() {
            this.arrangeInfo = {
               deliverTime: this.$util.formatDate(new Date(), null, 1),
               driverId: '',
               buyerId: '',
               dianhua: '',
               remark: '',
               lianxiren: '',
               dizhi: '',
            }
            this.show7 = false
            this.driverName = ''
            this.buyerName = ''
         },
         Getdrivers() {
            this.$api.Getdrivers().then(res => {
               if (res.code == 1) {
                  this.driverList = res.data
               }
            })
         },
         getList() {
            this.deliverKeyName == '' ? this.deliverKeyID = '' : null
            let data = {
               deliveredState:this.deliveredState,
               page: {
                  pageIndex: this.pageIndex,
                  pageSize: this.pageSize,
               }
            }
            if (this.timeStart) {
               data.timeStart = this.timeStart
            }
            if (this.timeEnd) {
               data.timeEnd = this.timeEnd
            }
            if (this.deliverKeyID) {
               data.deliverKeyID = this.deliverKeyID
            }
            let getListApi = null
            if (this.isAdmmin) {
               getListApi = this.$api.GetDeliverPlans
            } else {
               getListApi = this.$api.workerGetDeliverPlans
            }
            getListApi(data).then(res => {
               if (res.code == 1) {
                  if (this.pageIndex == 1) {
                     this.orderList = res.data.data
                  } else {
                     this.orderList = this.orderList.concat(...res.data.data)
                  }
                  console.log(this.orderList, 'orderList’');
                  // totalPages = res.data.totalCount
                  // 根据count数量判断是否还有数据
                  if (res.data.page.totalCount > this.orderList.length) {
                     this.loadStatus = 'loadmore'
                     this.pageIndex++
                  } else {
                     // 数据已加载完毕
                     this.loadStatus = 'nomore'
                  }
               } else {
                  // _that.$refs.uToast.show({ message: res.msg, type: 'error' });
               }
            })
         },
         accept(item) {
            let that = this
            uni.showModal({
               title: '提示',
               content: '确认受理该送货吗?',
               success: function(res) {
                  if (res.confirm) {
                     // 执行确认后的操作
                     that.$api.AcceptAppointmentDeliver(item.keyid).then(req => {
                        if (req.code == 1) {
                           that.$util.showToast({
                              title: '受理成功!'
                           })
                           that.init()
                        } else {
                           that.$util.showToast({
                              title: req.error
                           })
                        }
                     })
                  } else {
                     // 执行取消后的操作
                  }
               }
            })
         },
         actionClick(item, e) {
            console.log(e);
            if (e.index == 0) {
               this.contentVal = item.remark
            }
         }
      }
   }
</script>
<style>
   .u-textarea {
      padding: 0 !important;
   }
   .u-form-item__body {
      padding: 5px 0 !important;
   }
</style>