Forráskód Böngészése

船主注册及信息完善,报港预约

shasha 4 napja
szülő
commit
92376f0b62

+ 16 - 0
app.js

@@ -188,6 +188,22 @@ App({
         "selectedIconPath": "wode-active",
         "text": "我的"
       }],
+      list6: [{ //ship
+        "pagePath": "/pages/index/index",
+        "iconPath": "gonghuiyuyue-wodeyuyuelan",
+        "selectedIconPath": "yuyue1",
+        "text": "扫码预约"
+      },{
+        "pagePath": "/otherPages/loadArrive/index",
+        "iconPath": "loadArrive",
+        "selectedIconPath": "yundans-fill",
+        "text": "报港预约"
+      },{
+        "pagePath": "/pages/mine/index",
+        "iconPath": "wode2",
+        "selectedIconPath": "wode-active",
+        "text": "我的"
+      }],
     }],
 
   }

+ 6 - 1
app.json

@@ -45,6 +45,7 @@
     "pages/operationExecution/waterHandle",
     "pages/operationExecution/hygieneHandle"
 
+
   ],
 
   "subpackages": [
@@ -71,7 +72,11 @@
         "reportFault/info",
         "reportFault/report",
 
-        "parkConfig/index"
+        "parkConfig/index",
+        "loadArrive/index",
+        "loadArrive/add",
+        "loadArrive/edit",
+        "loadArrive/info"
 
       ],
       "independent": false

+ 10 - 1
custom-tab-bar/index.js

@@ -91,7 +91,7 @@ Component({
         "selectedIconPath": "wode-active",
         "text": "我的"
       }],
-      list6: [{ //shipowner
+      list6: [{ //ship
         "pagePath": "/pages/index/index",
         "iconPath": "gonghuiyuyue-wodeyuyuelan",
         "selectedIconPath": "yuyue1",
@@ -101,6 +101,11 @@ Component({
         "iconPath": "yundans",
         "selectedIconPath": "yundans-fill",
         "text": "物流订单"
+      },{
+        "pagePath": "/otherPages/loadArrive/index",
+        "iconPath": "loadArrive",
+        "selectedIconPath": "yundans-fill",
+        "text": "报港预约"
       },{
         "pagePath": "/pages/mine/index",
         "iconPath": "wode2",
@@ -129,6 +134,10 @@ Component({
       this.setData({
         list: this.data.allList[0].list5
       })
+    } else if (roleCodeList=='ship') {
+      this.setData({
+        list: this.data.allList[0].list6
+      })
     } else if (roleCodeList=='driver'||roleCodeList==''){
       this.setData({
         list: this.data.allList[0].list1

+ 281 - 0
otherPages/loadArrive/add.js

@@ -0,0 +1,281 @@
+// pages/loadArrive/add.js
+const app = getApp()
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    showModal: false,
+    defaultText: '请选择',
+    isSubmitting: false,
+
+    loadappointArray:[], //起卸预约
+    loadappointIndex:null,
+
+    fileList:[],
+
+    minHour: 0,
+    maxHour: 24,
+    minDate: new Date().getTime(),
+    maxDate: new Date(9999, 12, 31).getTime(),
+    currentDate: new Date().getTime(),
+    show: false,
+    currentChoose: ''
+  },
+  openPicker() {
+    this.setData({ show: true })
+  },
+  onConfirm(e) {
+    this.setData({ show: false, currentChoose: this.formatDate(new Date(e.detail)) })
+  },
+  onClose() {
+    this.setData({ show: false })
+  },
+  onCancel() {
+    this.setData({ show: false })
+  },
+  formatDate(date) {
+    let taskStartTime
+    if (date.getMonth() < 9) {
+      taskStartTime = date.getFullYear() + "-0" + (date.getMonth() + 1) + "-"
+    } else {
+      taskStartTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-"
+    }
+    if (date.getDate() < 10) {
+      taskStartTime += "0" + date.getDate()
+    } else {
+      taskStartTime += date.getDate()
+    }
+    if (date.getHours() < 10) {
+      taskStartTime += " " + "0" + date.getHours()
+    } else {
+      taskStartTime += " " + date.getHours()
+    }
+    if (date.getMinutes() < 10) {
+      taskStartTime += ":" + "0" + date.getMinutes()
+    } else {
+      taskStartTime += ":" + date.getMinutes()
+    }
+    this.setData({
+      taskStartTime: taskStartTime,
+    })
+    return taskStartTime;
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function (options) {
+    //预约审核状态
+    let treeData = app.globalData.treeArr
+    for (const element of treeData) {
+      let arrStr;
+      switch (element.dictValue) {
+        case 'arrive_status':
+          arrStr = "arriveStatusArray";
+          break;
+      }
+      this.setData({
+        [arrStr]: element.children
+      })
+    }
+
+    //获取起卸预约信息
+    this.getLoadappointData()
+  },
+
+  //选择起卸预约
+  getLoadappointData:function(){
+    app.request.GET({
+      url: app.API.bizloadappointList,
+      params: {},
+      page: this,
+      successFun: true
+    }).then(res => {
+      let appointList = res.data.data
+      appointList.forEach((element,index) => {
+        // appointList[index].name = element.loadNumber + '-' + element.orderPrice
+        appointList[index].name = element.loadNumber
+      });
+      this.setData({
+        loadappointArray: appointList
+      })
+    })
+  },
+
+  //下拉选择
+  bindPickerChange: function (e) { //下拉菜单
+    let { pickername } = e.target.dataset
+    let getIndex = pickername + 'Index'
+    app.util.getPickerIndex(this, getIndex, e);
+    // switch (pickername) {
+    //   case 'appointId': //报港预约
+    //     this.getSaleOrderData()
+    //     break;
+    // }
+  },
+
+  //图片上传
+  afterRead:function(event){
+    const { file } = event.detail;
+    const { type } = event.currentTarget.dataset
+    app.request.uploadDIY({
+      url: app.API.uploadImgMap,
+      page: this,
+      filePaths:file.url,
+      setfiled:'file',
+      params: {},
+      //isToken: false,
+      isLoading: false,
+      successFun: true
+    }).then(res => {
+        const imgArray = this.data[type];
+        imgArray.push({
+          ...file,
+          url: app.host.BASEIMG_URL + JSON.parse(res.data).data.imageFile,
+          imgUrl: JSON.parse(res.data).data.imageFile
+        });
+        this.setData({
+          [type]: imgArray
+        });
+    })
+  },
+
+  // 删除图片
+  deleteImg: function (event) {
+    const { type } = event.currentTarget.dataset
+    let getFileList = this.data[type];
+    getFileList.splice(event.detail.index, 1)
+    this.setData({
+      [type]: getFileList
+    })
+  },
+
+  // 单选
+  dangerStatusChange: function (e) {
+    this.setData({
+      [e.currentTarget.dataset.radiotype]: e.detail.value
+    })
+  },
+  //多选
+  checkboxChange: function (e) {
+    this.setData({
+      [e.currentTarget.dataset.checkboxtype]: e.detail
+    })
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  bindscrolltolowerFun() {
+    
+  },
+
+  //表单提交 carTaskAdd
+  formSubmit: function ({detail:{value}}) {
+    var warn = ""; //弹框时提示的内容
+    if (value.appointId == '') {
+      warn = "请选择起卸预约订单!";
+    } else if(value.shipNo == ''){
+      warn = "请输入船号!";
+    } else if(value.arriveNumber == ''){
+      warn = "请输入报港数量!";
+    } else if(value.arriveTime == ''){
+      warn = "请选择到港时间!";
+    } 
+
+    /** 图片处理 START **/
+    let getfileList = this.data.fileList
+    if(getfileList.length < 1){
+      warn = "请上传发航单!";
+    }
+    let fileNameList = []
+    let filePathList = []
+    getfileList.forEach((element,index) => {
+      fileNameList.push('图片'+(index+1)+'.'+element.imgUrl.split('.')[1])
+      filePathList.push(element.imgUrl)
+    });
+    value.fileNameList = fileNameList
+    value.filePathList = filePathList
+    /** 图片处理 END **/
+
+    // 处理时间
+    value.arriveTime = value.arriveTime + ":00"
+
+    if (warn != '') {
+      app.util.checkForm(warn);
+    } else {
+      app.request.POST({
+        url: app.API.bizloadarriveAdd,
+        params: value,
+        page: this,
+        isLoadingTxt: '提交中...',
+        isSubmitting: true,
+        successFun: true
+      }).then(res => {
+        wx.showToast({
+          title: '新增成功',
+          icon: 'success',
+          duration: 2000,
+          mask:true,
+          complete: function () {
+            setTimeout(() => {
+              wx.navigateBack()
+            }, 1500) //延迟时间  
+          }
+        })
+      })
+
+    }
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function () {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function () {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function () {
+    
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function () {
+
+  }
+})

+ 18 - 0
otherPages/loadArrive/add.json

@@ -0,0 +1,18 @@
+{
+  "navigationBarTitleText": "新增报港预约",
+  "usingComponents": {
+    "van-checkbox": "@vant/weapp/checkbox/index",
+    "van-checkbox-group": "@vant/weapp/checkbox-group/index",
+    "van-uploader": "@vant/weapp/uploader/index",
+    "car-num-input": "/components/CarNumInput/index",
+    "van-icon": "@vant/weapp/icon/index",
+    "van-cell": "@vant/weapp/cell/index",
+    "van-cell-group": "@vant/weapp/cell-group/index",
+    "van-field": "@vant/weapp/field/index",
+    "van-button": "@vant/weapp/button/index",
+    "van-popup": "@vant/weapp/popup/index",
+    "van-datetime-picker": "@vant/weapp/datetime-picker/index",
+    "van-action-sheet": "@vant/weapp/action-sheet/index",
+    "van-search": "@vant/weapp/search/index"
+  }
+}

+ 55 - 0
otherPages/loadArrive/add.wxml

@@ -0,0 +1,55 @@
+<!--pages/loadArrive/add.wxml-->
+<view class="container" style="padding-bottom:100px;">
+  <view class="height20"></view>
+  <view>
+    <form bindsubmit="formSubmit">
+      <view class="part">
+        <!-- 起卸预约订单 -->
+        <van-field label="起卸预约订单" required input-align="right">
+          <view slot="input" style="width: 100%;">
+            <input name="appointId" value='{{loadappointArray[loadappointIndex].id}}' hidden='true' />
+            <picker bindchange="bindPickerChange" value="{{loadappointIndex}}" range="{{loadappointArray}}" range-key="name" data-pickername='loadappoint'>
+              <view wx:if="{{loadappointArray[loadappointIndex].name}}"> {{loadappointArray[loadappointIndex].name}}</view>
+              <view wx:else class="selectPlaceholder">{{ defaultText }}</view>
+            </picker>
+          </view>
+          <view slot="right-icon">
+            <van-icon name="arrow" />
+          </view>
+        </van-field>
+
+        <van-field label="船号" required name="shipNo" value="{{ shipNo }}" placeholder="请填写船号" input-align="right" ></van-field>
+
+        <van-field label="报港数量" type="digit" required name="arriveNumber" value="{{ arriveNumber }}" placeholder="请输入报港数量" input-align="right" border="{{ false }}">
+          <view slot="right-icon">
+            <text>吨</text>
+          </view>
+        </van-field>
+
+        <van-field label="到港时间" required name="arriveTime" value="{{ currentChoose }}" placeholder="请选择到港时间" input-align="right" bind:tap="openPicker">
+        </van-field>
+        <van-action-sheet show="{{ show }}" bind:close="onClose" bind:getuserinfo="onGetUserInfo">
+          <van-datetime-picker type="datetime" value="{{ currentDate }}" min-date="{{ minDate }}" max-date="{{ maxDate }}" bind:cancel="onCancel" bind:confirm="onConfirm"  bind:change="onChange" />
+        </van-action-sheet>
+        
+        <view class="topItem">
+          <van-field label="发航单上传" required readonly input-align="right" border="{{false}}" />
+          <van-field name="" model:value="" label="" class="uploadBox">
+            <view slot="input" class="uploadboxView">
+              <van-uploader name="" deletable="{{true}}" data-type="fileList" file-list="{{ fileList }}" bind:after-read="afterRead" bind:delete="deleteImg" max-count="6" preview-size="110" />
+            </view>
+          </van-field>
+        </view>
+
+      </view>
+
+      <view class="fixedBtn submitBtn">
+        <van-button loading="{{isSubmitting}}" round block disabled="{{isSubmitting}}" loading-text="{{isSubmitting?'提交中...':''}}" type="info" form-type="submit">确定
+        </van-button>
+      </view>
+
+    </form>
+  </view>
+</view>
+
+<wxs module="filters" src="../../utils/filter.wxs"></wxs>

+ 209 - 0
otherPages/loadArrive/add.wxss

@@ -0,0 +1,209 @@
+/* pages/loadArrive/add.wxss */
+.van-field__label {
+  width: 240rpx !important;
+}
+
+.formTopBlueBg {
+  height: 144rpx;
+  background-color: #0396FF;
+}
+
+.part {
+  border-radius: 16rpx;
+  padding: 20rpx 00rpx;
+  background: #fff;
+  margin-bottom: 20rpx;
+}
+
+picker view {
+  line-height: normal !important;
+}
+
+.heightAuto .van-field__control--right {
+  height: auto !important;
+}
+
+.topProJectInfo {
+  padding: 26rpx 40rpx;
+}
+.labelTitle{
+  padding: 0 16px;
+  color: #323233;
+  font-size: 14px;
+}
+.topItem1 .van-cell {
+  padding-top: 6rpx !important;
+  padding-bottom: 6rpx !important;
+}
+.topItem {
+  position: relative;
+  padding-bottom: 16rpx;
+}
+.topItem2::after{
+  border:0 none !important
+}
+.topItem::after {
+  border-bottom: 1px solid #ebedf0;
+  bottom: 0;
+  box-sizing: border-box;
+  content: " ";
+  left: 16px;
+  pointer-events: none;
+  position: absolute;
+  right: 16px;
+  transform: scaleY(.5);
+  transform-origin: center;
+  border-bottom-width: 1px;
+  border-bottom-style: solid;
+  border-bottom-color: rgb(235, 237, 240);
+}
+
+.proTitle {
+  font-size: 36rpx;
+  font-weight: bold;
+  color: rgba(0, 0, 0, 0.85);
+}
+
+.proJectInfoCode {
+  width: 100%;
+  display: flex;
+  padding: 10rpx 10rpx 0 0rpx;
+  color: rgba(0, 0, 0, 0.65);
+  justify-content: space-between;
+}
+
+.proJectInfoCode>view:last-child {
+  padding: 0 16rpx;
+  display: flex;
+  height: 40rpx;
+  line-height: 40rpx;
+  color: #2C6CEC;
+  font-size: 20rpx;
+  border-radius: 20rpx;
+  border: 1px solid #2C6CEC;
+  align-items: center;
+  white-space: nowrap;
+}
+
+.radioHeight .radioHeightBx {
+  width: 100%;
+}
+radio-group {
+  text-align: right;
+}
+.fieldAutoHeight .van-field__body,.fieldAutoHeight .van-field__control {
+  height: auto !important;
+  text-align: left;
+  line-height: 30px;
+}
+.ysType{
+  flex: 1;
+  text-align: right;
+}
+.ysType text:first-child{
+  margin-right: 12rpx;
+}
+.ysType text{
+  display: inline-block;
+  width: 80rpx;
+  height: 48rpx;
+  line-height: 48rpx;
+  text-align: center;
+  background: #E1E1E1;
+  border: 1px solid #E1E1E1;
+  border-radius: 4rpx;
+  box-sizing: border-box;
+}
+.ysType .active{
+  color: #2C6CEC;
+  border: 1rpx solid #2C6CEC;
+  background: transparent;
+}
+
+.otherInfo{
+  padding: 10rpx 10rpx 0 0rpx;
+  color: rgba(0, 0, 0, 0.65);
+}
+.otherInfo .status {
+  clear: both;
+}
+
+.type{
+  display: inline-block;
+  padding: 4rpx 10rpx;
+  color: #2C6CEC;
+  background: rgba(44,108,236,0.1);
+}
+.type1{
+  color: #52C41A;
+  background: rgba(82,196,26,0.1);
+}
+.type2{
+  color: #FAAD14;
+  background: rgba(250,173,20,0.1);
+}
+
+.setHeight{
+  height: 120rpx !important;
+}
+.radioHeight .radioHeightBx{
+  width: 100%;
+}
+.radioHeight .van-field__body {
+  height: 28px;
+  line-height: 25px;
+}
+.bottomBtn view:first-child {
+  flex: 1;
+}
+.chooseDriver{
+  width: 600rpx;
+  height: 100vh;
+  display: flex;
+  flex-direction: column;
+}
+.dialogUser {
+  flex: 1;
+  width: 100%;
+  padding: 30rpx 0;
+  box-sizing: border-box;
+  overflow-y: auto;
+}
+.spacialName {
+  display: inline-block;
+  width: 64rpx;
+  height: 64rpx;
+  line-height: 64rpx;
+  margin: 0 20rpx 0 10rpx;
+  border-radius: 50%;
+  text-align: center;
+  color: #3764FF;
+  font-size: 24rpx;
+  background-color: rgba(55, 100, 255, 0.0510);
+}
+.bottomBtn {
+  display: flex;
+  width: 100%;
+  padding: 20rpx;
+  font-size: 28rpx;
+  box-sizing: border-box;
+  align-items: center;
+  justify-content: space-around;
+  border-top: 1px solid #f9f7f9;
+}
+
+/* 选人弹窗 */
+.chooseUserMain {
+  width: 600rpx;
+  height: 100vh;
+  display: flex;
+  flex-direction: column;
+}
+
+.dialogUser {
+  flex: 1;
+  width: 100%;
+  padding: 30rpx 0;
+  box-sizing: border-box;
+  overflow-y: auto;
+}

+ 282 - 0
otherPages/loadArrive/edit.js

@@ -0,0 +1,282 @@
+// pages/loadArrive/edit.js
+const app = getApp()
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    showModal: false,
+    defaultText: '请选择',
+    isSubmitting: false,
+
+    orderTypeArray:[],//订单类型
+    saleOrderType:'',
+
+    customerArray:[], //客户
+    customerIndex:null,
+
+    saleOrderArray:[], //销售订单
+    saleOrderIndex:null,
+
+    confTimeArray:[], //提货时间
+    confTimeIndex:null,
+
+    supplierArray:[],//供应商
+    supplierIndex:null,
+
+    freightPrice:'',//运费单价
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function (options) {
+    var pages = getCurrentPages();
+    var prevPage = pages[pages.length - 2];
+    let getInfo = prevPage.data.resData[options.index]
+    this.setData({
+      info: getInfo,
+      saleOrderWeight:getInfo.orderWeight,
+      saleOrderType:getInfo.orderType,
+      freightPrice:getInfo.freightPrice
+    })
+    //订单类型
+    let treeData = app.globalData.treeArr
+    for (const element of treeData) {
+      let arrStr;
+      switch (element.dictValue) {
+        case 'order_type':
+          arrStr = "orderTypeArray";
+          break;
+      }
+      this.setData({
+        [arrStr]: element.children
+      })
+    }
+
+    //获取客户列表接口
+    this.getCustomerData()
+    //供应商
+    this.getsupplierData()
+  },
+
+  //选择客户
+  getCustomerData:function(){
+    //收货单位列表接口
+    app.request.GET({
+      url: app.API.getCustomerList,
+      params: {},
+      page: this,
+      successFun: true
+    }).then(res => {
+      this.setData({
+        customerArray:res.data.data,
+        customerIndex: app.util.getDicIndex(res.data.data, this.data.info.customerId, 'id')
+      })
+      this.getSaleOrderData('info')
+    })
+  },
+
+  //选择供应商
+  getsupplierData:function(){
+    //收货单位列表接口
+    app.request.GET({
+      url: app.API.supplierPage,
+      params: {},
+      page: this,
+      successFun: true
+    }).then(res => {
+      this.setData({
+        supplierArray:res.data.data,
+        supplierIndex: app.util.getDicIndex(res.data.data, this.data.info.supplierId, 'id')
+      })
+    })
+  },
+
+  //下拉选择
+  bindPickerChange: function (e) { //下拉菜单
+    let { pickername } = e.target.dataset
+    let getIndex = pickername + 'Index'
+    app.util.getPickerIndex(this, getIndex, e);
+    switch (pickername) {
+      case 'customer': //客户
+        this.setData({
+          confTimeArray:[],
+          confTimeIndex:null,
+          saleOrderArray:[],
+          saleOrderIndex:null,
+          orderType:''
+        })
+        this.getSaleOrderData() //获取销售订单
+        break;
+      case 'saleOrder': //销售订单
+        this.setData({
+          saleOrderType:this.data.saleOrderArray[this.data.saleOrderIndex].saleOrderType,
+          confTimeArray:[],
+          confTimeIndex:null,
+          saleOrderWeight:this.data.saleOrderArray[this.data.saleOrderIndex].saleOrderWeight
+        })
+        this.getConfTimeData() //获取提货时间段
+        break;
+    }
+  },
+
+  //选择销售订单
+  getSaleOrderData:function(type){
+    app.request.GET({
+      url: app.API.getOrderByCustomerId,
+      params: {
+        id:this.data.customerArray[this.data.customerIndex].id
+      },
+      page: this,
+      successFun: true
+    }).then(res => {
+      let orderList = res.data.data
+      orderList.forEach((element,index) => {
+        orderList[index].name = element.saleGoodsName + '-' + element.saleOrderNumber
+      });
+      this.setData({
+        saleOrderArray:orderList,
+        saleOrderIndex: type?app.util.getDicIndex(orderList, this.data.info.saleOrderInfo, 'id'):null
+      })
+      if(type){
+        this.getConfTimeData('info')
+      }
+      
+    })
+  },
+
+  //提货时间
+  getConfTimeData:function(type){
+    app.request.GET({
+      url: app.API.getTakeList,
+      params: {
+        goodsName:this.data.saleOrderArray[this.data.saleOrderIndex].saleGoodsName,
+        needWeight:this.data.saleOrderArray[this.data.saleOrderIndex].saleOrderWeight,
+        goodsCode:this.data.saleOrderArray[this.data.saleOrderIndex].saleGoodsCode
+      },
+      page: this,
+      successFun: true
+    }).then(res => {
+      let resData  = res.data.data
+      resData.forEach((element,index) => {
+        resData[index].timeRange = element.confStartTime + '至' + element.confEndTime
+      });
+      this.setData({
+        confTimeArray:resData,
+        confTimeIndex: type?app.util.getDicIndex(resData, this.data.info.deliveryTimeId, 'id'):null
+      })
+    })
+  },
+
+  // 单选
+  dangerStatusChange: function (e) {
+    this.setData({
+      [e.currentTarget.dataset.radiotype]: e.detail.value
+    })
+  },
+  //多选
+  checkboxChange: function (e) {
+    this.setData({
+      [e.currentTarget.dataset.checkboxtype]: e.detail
+    })
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  bindscrolltolowerFun() {
+    
+  },
+
+  //表单提交 carTaskAdd
+  formSubmit: function ({detail:{value}}) {
+    var warn = ""; //弹框时提示的内容
+    if (value.customerId == '') {
+      warn = "请选择客户!";
+    } else if(value.orderName == ''){
+      warn = "请选择销售订单!";
+    } else if(value.deliveryTimeId == ''){
+      warn = "请选择提货时间!";
+    } else if(value.supplierId == ''){
+      warn = "请选择供应商!";
+    } else if(value.freightPrice == ''){
+      warn = "请输入运费单价!";
+    }
+    if (warn != '') {
+      app.util.checkForm(warn);
+    } else {
+      app.request.POST({
+        url: app.API.orderEdit,
+        params: value,
+        page: this,
+        isLoadingTxt: '提交中...',
+        isSubmitting: true,
+        successFun: true
+      }).then(res => {
+        wx.showToast({
+          title: '修改成功',
+          icon: 'success',
+          duration: 2000,
+          mask:true,
+          complete: function () {
+            setTimeout(() => {
+              wx.navigateBack()
+            }, 1500) //延迟时间  
+          }
+        })
+      })
+
+    }
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function () {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function () {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function () {
+    
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function () {
+
+  }
+})

+ 19 - 0
otherPages/loadArrive/edit.json

@@ -0,0 +1,19 @@
+{
+  "navigationBarTitleText": "修改物流订单",
+  "usingComponents": {
+    "van-checkbox": "@vant/weapp/checkbox/index",
+    "van-checkbox-group": "@vant/weapp/checkbox-group/index",
+    "van-uploader": "@vant/weapp/uploader/index",
+    "car-num-input": "/components/CarNumInput/index",
+    "van-icon": "@vant/weapp/icon/index",
+    "van-cell": "@vant/weapp/cell/index",
+    "van-cell-group": "@vant/weapp/cell-group/index",
+    "van-field": "@vant/weapp/field/index",
+    "van-button": "@vant/weapp/button/index",
+    "van-popup": "@vant/weapp/popup/index",
+    "van-datetime-picker": "@vant/weapp/datetime-picker/index",
+    "van-radio": "@vant/weapp/radio/index",
+    "van-radio-group": "@vant/weapp/radio-group/index",
+    "van-search": "@vant/weapp/search/index"
+  }
+}

+ 1 - 0
otherPages/loadArrive/edit.less

@@ -0,0 +1 @@
+/* pages/loadArrive/edit.wxss */

+ 106 - 0
otherPages/loadArrive/edit.wxml

@@ -0,0 +1,106 @@
+<!--pages/loadArrive/edit.wxml-->
+<view class="container" style="padding-bottom:100px;">
+  <view class="height20"></view>
+  <view>
+    <form bindsubmit="formSubmit">
+      <input name="id" value='{{info.id}}' hidden='true' />
+      <view class="part">
+        <!-- 客户 -->
+        <van-field label="客户" required input-align="right" bindtap="hideKeybord">
+          <view slot="input" style="width: 100%;">
+            <input name="customerId" value='{{customerArray[customerIndex].id}}' hidden='true' />
+            <picker bindchange="bindPickerChange" value="{{customerIndex}}" range="{{customerArray}}" range-key="name" data-pickername='customer'>
+              <view wx:if="{{customerArray[customerIndex].name}}"> {{customerArray[customerIndex].name}}</view>
+              <view wx:else class="selectPlaceholder">{{defaultText}}</view>
+            </picker>
+          </view>
+          <view slot="right-icon">
+            <van-icon name="arrow" />
+          </view>
+        </van-field>
+
+        <!-- 销售订单 -->
+        <van-field label="销售订单" required input-align="right" wx:if="{{saleOrderArray.length>0}}">
+          <view slot="input" style="width: 100%;">
+            <picker bindchange="bindPickerChange" value="{{saleOrderIndex}}" range="{{saleOrderArray}}" range-key="name" data-pickername='saleOrder'>
+              <view wx:if="{{saleOrderArray[saleOrderIndex].name}}"> {{saleOrderArray[saleOrderIndex].name}}</view>
+              <view wx:else class="selectPlaceholder">{{ defaultText }}</view>
+            </picker>
+          </view>
+          <view slot="right-icon">
+            <van-icon name="arrow" />
+          </view>
+        </van-field>
+        <van-field required wx:else label="销售订单" name="" value="" readonly input-align="right" placeholder="请先选择客户" placeholder-style="color:red;" />
+
+        <van-field label="送货地址" required name="shipAddress" readonly value="{{ saleOrderArray[saleOrderIndex].shipAddress }}" placeholder="选择销售订单自动填入" input-align="right">
+        </van-field>
+
+        <van-field label="订单类型" name="orderType" value="{{ saleOrderType }}" required input-align="right" class="radioHeight fieldAutoHeight">
+          <view slot="input" class="radioHeightBx">
+            <radio-group class="radio-group" bindchange="dangerStatusChange" data-radioType="orderType">
+              <label class="radio" style="margin-right:20rpx;" wx:for="{{ orderTypeArray }}" wx:key="index">
+                <radio value="{{ item.dictValue }}" checked="{{ orderTypeArray[index].dictValue == saleOrderType }}" disabled color="#1989fa" />{{ item.dictLabel }}
+              </label>
+            </radio-group>
+          </view>
+        </van-field>
+
+        <van-field label="订单重量" type="digit" required name="orderWeight" value="{{ saleOrderWeight }}" placeholder="选择销售订单自动填入" input-align="right">
+          <view slot="right-icon">
+            <text>吨</text>
+          </view>
+        </van-field>
+        <!-- <van-field label="销售订单信息" required value="{{saleOrderIndex||saleOrderIndex==0?saleOrderArray[saleOrderIndex].saleOrderName+'-'+saleOrderArray[saleOrderIndex].saleOrderNumber+'-'+saleOrderArray[saleOrderIndex].goodsName+'-'+saleOrderArray[saleOrderIndex].orderWeight+'-'+saleOrderArray[saleOrderIndex].orderType:''}}" placeholder="选择销售订单自动填入" input-align="right" readonly></van-field> -->
+
+        <input name="saleOrderInfo" value='{{saleOrderArray[saleOrderIndex].id}}' hidden='true' />
+        <!-- <van-field label="订单名称" required name="orderName" value="{{saleOrderArray[saleOrderIndex].saleOrderName}}" placeholder="选择销售订单自动填入" input-align="right" readonly></van-field> -->
+        <van-field label="订单编号" required name="orderNumber" value="{{saleOrderArray[saleOrderIndex].saleOrderNumber}}" placeholder="选择销售订单自动填入" input-align="right" readonly></van-field>
+
+        <!-- 提货时间 -->
+        <van-field label="提货时间" required input-align="right" wx:if="{{confTimeArray.length>0}}" type="textarea" autosize border="{{ false }}">
+          <view slot="input" style="width: 100%;">
+            <input name="deliveryTimeId" value='{{confTimeArray[confTimeIndex].id}}' hidden='true' />
+            <picker bindchange="bindPickerChange" value="{{confTimeIndex}}" range="{{confTimeArray}}" range-key="timeRange" data-pickername='confTime'>
+              <view wx:if="{{confTimeArray[confTimeIndex].timeRange}}"> {{confTimeArray[confTimeIndex].timeRange}}</view>
+              <view wx:else class="selectPlaceholder">{{ defaultText }}</view>
+            </picker>
+          </view>
+          <view slot="right-icon">
+            <van-icon name="arrow" />
+          </view>
+        </van-field>
+        <van-field required wx:else label="提货时间" name="deliveryTimeId" value="" readonly input-align="right" placeholder="请先选择销售订单" placeholder-style="color:red;" />
+
+        <!-- 供应商 -->
+        <van-field label="供应商" required input-align="right" bindtap="hideKeybord">
+          <view slot="input" style="width: 100%;">
+            <input name="supplierId" value='{{supplierArray[supplierIndex].id}}' hidden='true' />
+            <picker bindchange="bindPickerChange" value="{{supplierIndex}}" range="{{supplierArray}}" range-key="supplierName" data-pickername='supplier'>
+              <view wx:if="{{supplierArray[supplierIndex].supplierName}}"> {{supplierArray[supplierIndex].supplierName}}</view>
+              <view wx:else class="selectPlaceholder">{{defaultText}}</view>
+            </picker>
+          </view>
+          <view slot="right-icon">
+            <van-icon name="arrow" />
+          </view>
+        </van-field>
+
+        <van-field label="运费单价" type="digit" required name="freightPrice" value="{{ freightPrice }}" placeholder="选择输入运费单价" input-align="right" bind:change="freightPriceChange" border="{{ false }}">
+          <view slot="right-icon">
+            <text>元</text>
+          </view>
+        </van-field>
+
+      </view>
+
+      <view class="fixedBtn submitBtn">
+        <van-button loading="{{isSubmitting}}" round block disabled="{{isSubmitting}}" loading-text="{{isSubmitting?'提交中...':''}}" type="info" form-type="submit">确定
+        </van-button>
+      </view>
+
+    </form>
+  </view>
+</view>
+
+<wxs module="filters" src="../../utils/filter.wxs"></wxs>

+ 452 - 0
otherPages/loadArrive/index.js

@@ -0,0 +1,452 @@
+// pages/loadArrive/index.js
+const app = getApp()
+var startPoint
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    str:'&emsp;',
+    str2: '&ensp;',
+
+    filterWidth: 0, //获取顶部筛选宽度
+    filterHeight: 0, //获取顶部筛选高度
+    safeAreaHeight: 0, //底部安全区域的高度
+    //按钮位置参数
+    buttonTop: 0,
+    buttonLeft: 0,
+    windowHeight: '',
+    windowWidth: '',
+
+    loginStatus: wx.getStorageSync('loginStatus') ? wx.getStorageSync('loginStatus') : false,
+    roleCodeList: wx.getStorageSync('roleCodeList') ? wx.getStorageSync('roleCodeList') : '',
+    searchVal: '',
+
+    arriveStatusArray: [{
+      dictValue: "",
+      dictLabel: "全部状态"
+    }],
+    arriveStatusIndex: 0,
+
+    //分页
+    limit: 10,
+    requestStatu: '加载中...',
+    page: 1,
+    totalPages: 1,
+    more: false,
+    nomore: '',
+
+    resData:[],
+
+    show: false,
+    auditFlag:true,
+    orderReason:'',//审核备注
+
+    requestStatu2: '加载中...',
+    page2: 1,
+    totalPages2: 1,
+    more2: false,
+    nomore2: '',
+    saleArr:[],
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad(options) {
+    //预约审核状态
+    let treeData = app.globalData.treeArr
+    for (const element of treeData) {
+      let arrStr;
+      switch (element.dictValue) {
+        case 'arrive_status':
+          arrStr = "arriveStatusArray";
+          break;
+      }
+      let getArray =[{
+        dictValue: "",
+        dictLabel: "全部状态"
+      }]
+      this.setData({
+        [arrStr]: getArray.concat(element.children)
+      })
+    }
+
+    this.setData({
+      safeAreaHeight: app.globalData.windowInfo.screenHeight - app.globalData.systemInfo.safeArea.bottom
+    })
+
+    // 使用选择器选择节点
+    this.getFilterHeight()
+  //获取页面高度设置新增按钮的初始位置
+    var that = this;
+    wx.getSystemInfo({
+      success: function (res) {
+        // 高度,宽度 单位为px
+        that.setData({
+          windowHeight: res.windowHeight, //屏幕宽度、高度
+          windowWidth: res.windowWidth,
+          buttonTop: res.windowHeight * 0.8 - that.data.safeAreaHeight-50, //这里定义按钮的初始位置
+          buttonLeft: res.windowWidth * 0.80, //这里定义按钮的初始位置
+        })
+      }
+    })
+  },
+
+  //获取顶部筛选区域的高度
+  getFilterHeight:function(){
+    let that = this;
+    // 使用顶部筛选高度选择器选择节点的高度
+    const query = wx.createSelectorQuery();
+    query.select('.topSeach').boundingClientRect(function (rect) {
+      if(rect){
+        that.setData({
+          filterWidth: rect.width,
+          filterHeight: rect.height,
+        });
+      }
+    }).exec();
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow() {
+    const roleCodeList = wx.getStorageSync('roleCodeList')
+    let loginStatus = wx.getStorageSync('loginStatus')
+    this.setData({
+      searchVal: '',
+      roleCodeList: roleCodeList ? roleCodeList : '',
+      loginStatus: loginStatus ? loginStatus : false
+    })
+
+    this.setData({
+      requestStatu:'加载中...',
+    })
+    if (wx.getStorageSync('loginStatus')) {
+      this.getListFun();
+    }
+  },
+
+  //下拉选择
+  bindPickerChange: function (e) { //下拉菜单
+    //方法一动态的
+    let getIndex = e.target.dataset.pickername + 'Index'
+    app.util.getPickerIndex(this, getIndex, e);
+    this.getListFun()
+  },
+
+  //搜索框请求S
+  onChange(e) {
+    this.setData({
+      searchVal: e.detail,
+    });
+  },
+  onSearch: function (event) {
+    this.setData({
+      searchVal: event.detail
+    })
+    this.getListFun();
+  },
+  onCancel: function () {
+    this.setData({})
+  },
+  toSearch: function (event) {
+    this.getListFun();
+  },
+
+  //列表
+  getListFun: function () {
+    this.setData({
+      page: 1
+    })
+    let params = {
+      current    : this.data.page,
+      size       : this.data.limit,
+      searchKey  : this.data.searchVal,
+      status     : this.data.arriveStatusArray[this.data.arriveStatusIndex].dictValue
+    }
+    app.request.pageFirst({
+      url: app.API.bizloadarrivePage,
+      page: this,
+      params: params,
+    })
+  },
+
+  //页面跳转
+  toLink: function (e) {
+    let { url } = e.currentTarget.dataset
+    wx.navigateTo({
+      url: url
+    })
+  },
+
+  //删除
+  delFun: function (e) {
+    let _this = this
+    let { id, arriveNumber } = e.currentTarget.dataset
+    wx.showModal({
+      title: '提示!',
+      content: `删除【${arriveNumber}】后不可恢复。确定要删除吗?`,
+      confirmColor: '#FF5B5B',
+      success: function (res) {
+        if (res.confirm) {
+          app.request.POST({
+            url: app.API.bizloadarriveDelete,
+            params: [{
+              id: id
+            }],
+            page: _this,
+            isLoadingTxt: '删除中...',
+            successFun: true
+          }).then(res => {
+            wx.showToast({
+              title: '删除成功',
+              icon: 'success',
+              duration: 1000,
+              mask: true
+            })
+            _this.getListFun(); //刷新列表
+          })
+        } else if (res.cancel) {
+
+        }
+      }
+    })
+  },
+
+  //业务员进行确认
+  comform: function (e) {
+    let _this = this
+    let { id, orderNumber } = e.currentTarget.dataset
+    wx.showModal({
+      title: '提示!',
+      content: `确认【${orderNumber}】后不可取消。确定现在确认订单吗?`,
+      confirmColor: '#FF5B5B',
+      success: function (res) {
+        if (res.confirm) {
+          app.request.POST({
+            url: app.API.orderConfirm,
+            params: {
+              id: id
+            },
+            page: _this,
+            isLoadingTxt: '确认中...',
+            successFun: true
+          }).then(res => {
+            wx.showToast({
+              title: '确认成功',
+              icon: 'success',
+              duration: 1000,
+              mask: true
+            })
+            _this.getListFun(); //刷新列表
+          })
+        } else if (res.cancel) {
+
+        }
+      }
+    })
+  },
+
+  // 审核S
+  showPopup(e) {
+    let { id } = e.currentTarget.dataset
+    this.setData({
+      show: true,
+      orderReason: '',
+      id: id,
+    });
+    /*wx.navigateTo({
+      url: '/pages/appointment/review?id='+e.currentTarget.dataset.id
+    })*/
+  },
+  onClose() {
+    this.setData({
+      show: false,
+      auditFlag:'false',
+      orderReason:'',
+      id: ''
+    });
+  },
+  // 单选
+  dangerStatusChange: function (e) {
+    this.setData({
+      [e.currentTarget.dataset.radiotype]: e.detail.value
+    })
+    if (e.detail.value == '1') {
+      this.setData({
+        appointmentReason: ''
+      })
+    }
+  },
+  //审核
+  formSubmit: function (e) {
+    let formData = e.detail.value;
+    var warn = ""; //弹框时提示的内容
+    if (formData.auditFlag=='true' && formData.orderReason == '') {
+      warn = "审核不通过时备注不能为空!";
+    }
+    formData.auditFlag = formData.auditFlag=='true'
+    if (warn != '') {
+      app.util.checkForm(warn);
+    } else {
+      app.request.POST({
+        url: app.API.bizloadarriveAudit,
+        params: formData,
+        page: this,
+        isLoadingTxt: '审核中...',
+        successFun: true
+      }).then(res => {
+        wx.showToast({
+          title: '审核成功',
+          icon: 'success',
+          duration: 1000,
+          mask: true
+        })
+        this.onClose()
+        this.getListFun(); //刷新列表
+      })
+    }
+  },
+  // 审核E
+
+
+  //提交
+  orderSubmit: function (e) {
+    let _this = this
+    let { id, orderNumber } = e.currentTarget.dataset
+    wx.showModal({
+      title: '提示!',
+      content: `确认提交【${orderNumber}】订单?`,
+      confirmColor: '#FF5B5B',
+      success: function (res) {
+        if (res.confirm) {
+          app.request.POST({
+            url: app.API.orderSubmit,
+            params: {
+              id: id
+            },
+            page: _this,
+            isLoadingTxt: '操作中...',
+            successFun: true
+          }).then(res => {
+            wx.showToast({
+              title: '提交成功',
+              icon: 'success',
+              duration: 1000,
+              mask: true
+            })
+            _this.getListFun(); //刷新列表
+          })
+        } else if (res.cancel) {
+
+        }
+      }
+    })
+  },
+
+  //申请
+  changeAdd() {
+    wx.navigateTo({
+      url: 'add'
+    })
+  },
+
+  
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function () {
+    this.setData({
+      searchVal: ''
+    })
+    if (wx.getStorageSync('loginStatus')) {
+      this.getListFun();
+    } else {
+      wx.stopPullDownRefresh();
+    }
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function () {
+    this.data.page++;
+    let params = {
+      current: this.data.page,
+      size: this.data.limit,
+      searchKey:this.data.searchVal,
+      arriveStatus:this.data.arriveStatusArray[this.data.arriveStatusIndex].dictValue
+    }
+    app.request.pageOther({
+      url: app.API.bizloadarrivePage,
+      page: this,
+      params: params,
+      loadType: true //加载类型,是否是下拉加载
+    });
+  },
+
+
+  //以下是按钮拖动事件
+  buttonStart: function (e) {
+    startPoint = e.touches[0] //获取拖动开始点
+  },
+  buttonMove: function (e) {
+    var endPoint = e.touches[e.touches.length - 1] //获取拖动结束点
+    //计算在X轴上拖动的距离和在Y轴上拖动的距离
+    var translateX = endPoint.clientX - startPoint.clientX
+    var translateY = endPoint.clientY - startPoint.clientY
+    startPoint = endPoint //重置开始位置
+    var buttonTop = this.data.buttonTop + translateY
+    var buttonLeft = this.data.buttonLeft + translateX
+    //判断是移动否超出屏幕
+    if (buttonLeft + 60 >= this.data.windowWidth) {
+      buttonLeft = this.data.windowWidth - 60;
+    }
+    if (buttonLeft <= 0) {
+      buttonLeft = 0;
+    }
+    if (buttonTop <= this.data.filterHeight) {
+      buttonTop = this.data.filterHeight
+    }
+    if (buttonTop + 60 + 48 + this.data.safeAreaHeight >= this.data.windowHeight) {
+      buttonTop = this.data.windowHeight - 60 - 48 - this.data.safeAreaHeight;
+    }
+    this.setData({
+      buttonTop: buttonTop,
+      buttonLeft: buttonLeft
+    })
+  },
+  buttonEnd: function (e) {},
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage() {
+
+  }
+})

+ 15 - 0
otherPages/loadArrive/index.json

@@ -0,0 +1,15 @@
+{
+  "navigationBarTitleText": "报港预约",
+  "backgroundTextStyle": "dark",
+  "enablePullDownRefresh": true,
+  "usingComponents": {
+    "van-field": "@vant/weapp/field/index",
+    "van-popup": "@vant/weapp/popup/index",
+    "van-sticky": "@vant/weapp/sticky/index",
+    "van-search": "@vant/weapp/search/index",
+    "van-icon": "@vant/weapp/icon/index",
+    "van-empty": "@vant/weapp/empty/index",
+    "van-button": "@vant/weapp/button/index",
+    "van-loading": "@vant/weapp/loading/index"
+  }
+}

+ 44 - 0
otherPages/loadArrive/index.less

@@ -0,0 +1,44 @@
+/* pages/loadArrive/index.wxss */
+page{
+  --cell-vertical-padding:12rpx;
+  --cell-horizontal-padding:0;
+  --cell-background-color:transparent;
+}
+.bottomBtn{
+  padding-top: 20rpx;
+  text-align: right;
+}
+.bottomBtn button {
+  margin-left: 0 !important;
+}
+.orderLoadBox{
+  > .title{
+    height: 100rpx;
+    line-height: 100rpx;
+    font-weight: bold;
+    font-size: 40rpx;
+    color: #14284A;
+    text-align: center;
+    background: linear-gradient( 180deg, #D4E1F6 0%, #FFFFFF 100%);
+  }
+  .dialogUser{
+    height: 50vh;
+    padding-top: 30rpx;
+    .saleItem{
+      width: 700rpx;
+      margin:0 auto 30rpx;
+      padding-bottom: 20rpx;
+      border-bottom: 1px solid #eee;
+      .title{
+        font-size: 36rpx;
+        display: flex;
+        justify-content: space-between;
+      }
+      .time{
+        margin-top: 10rpx;
+        color: #666;
+        font-size: 24rpx;
+      }
+    }
+  }
+}

+ 120 - 0
otherPages/loadArrive/index.wxml

@@ -0,0 +1,120 @@
+<!--pages/loadArrive/index.wxml-->
+<view class="container listMain">
+  <block wx:if="{{loginStatus}}">
+    <view url="" class="addBtn" catch:tap="changeAdd" hover-class="none" catchtouchmove="buttonMove" bindtouchstart="buttonStart" bindtouchend="buttonEnd" style="top:{{buttonTop}}px;left:{{buttonLeft}}px;" wx:if="{{roleCodeList == 'ship'}}">
+      <van-icon name="plus" size="30px" />
+    </view>
+    <van-sticky>
+      <view class="topSeach">
+        <view class="rightBox" style="position: relative;">
+          <van-search value="{{ searchVal }}" shape="round" placeholder="请输入预约单号/客户名称/货品名称" bind:change="onChange" bind:search="onSearch" bind:cancel="onCancel" use-action-slot>
+            <view slot="label" style="width:160rpx;margin-right: 20rpx;">
+                  <van-field label="" input-align="center" style="width: 100%;">
+                    <view slot="input" style="width: 100%;">
+                      <input name="status" value='{{arriveStatusArray[arriveStatusIndex].dictValue}}' hidden='true' />
+                      <picker bindchange="bindPickerChange" value="{{arriveStatusIndex}}" range="{{arriveStatusArray}}" range-key="dictLabel" data-pickername='arriveStatus'>
+                        <view wx:if="{{arriveStatusArray[arriveStatusIndex].dictLabel}}" style="font-size: 12px;white-space: nowrap;"> {{arriveStatusArray[arriveStatusIndex].dictLabel}}</view>
+                        <view wx:else class="selectPlaceholder" style="font-size: 12px;white-space: nowrap;">{{defaultText}}</view>
+                      </picker>
+                    </view>
+                    <view slot="right-icon">
+                      <van-icon name="arrow-down" />
+                    </view>
+                  </van-field>
+                </view>
+            <van-icon slot="action" class-prefix="iconfont" name="arrow3-right_fill" size="28px" color="#4B70EA" bind:tap="toSearch" />
+          </van-search>
+        </view>
+      </view>
+    </van-sticky>
+
+    <view class="width710">
+      <block wx:if="{{!requestStatu}}">
+        <block wx:if="{{resData.length>0}}">
+          <block wx:for="{{resData}}" wx:key="index">
+            <navigator url="info?id={{item.id}}&name={{item.name}}&index={{index}}" class="listItem">
+              <view class="title van-ellipsis">
+                <van-icon class='iconfont' name='/images/codeNumber.png' size="36rpx"></van-icon>
+                <text>{{item.loadNumber}}</text>
+                <text wx:if="{{item.status}}" class="status orderStatus{{item.status}}">{{item.statusName}}</text>
+              </view>
+              <view class="info">
+                <text>客户名称:{{item.customerName?item.customerName:'未填写'}}</text>
+              </view>
+              <view class="info">
+                <text decode="{{true}}">货品信息:{{item.goodsName?item.goodsName:'未填写'}}/{{item.goodsModel?item.goodsModel:'未填写'}}</text>
+              </view>
+              <view class="info"><text>船号:{{item.shipNo?item.shipNo:'未填写'}}</text><text>报港数量:{{item.arriveNumber?item.arriveNumber+' 吨':''}}</text></view>
+              <view class="info"><text>预约单号:{{ item.arriveNumber }}</text></view>
+              <view class="time"><text>到港时间:{{item.arriveTime?filters.tosubStr(item.arriveTime,0,16):''}}</text></view>
+              
+              <view class="bottomBtn" wx:if="{{ (roleCodeList == 'ship' && item.status != '2') || (roleCodeList == 'bizAdmin' && item.status == '2') }}">
+                <!-- <van-button type="info" size="small" data-url="edit?index={{index}}" catchtap="toLink" style="margin-right: 20rpx;" wx:if="{{roleCodeList == 'ship' && item.status != '1'}}">修改</van-button> -->
+
+                <van-button type="danger" size="small" data-id="{{item.id}}" data-arrive-number="{{item.arriveNumber}}" catchtap="delFun" style="margin-right: 20rpx;" wx:if="{{roleCodeList == 'ship' && item.status != '2'}}">删除</van-button>
+                
+                <van-button type="primary" size="small" data-id="{{item.id}}" data-approve-type="one" catchtap="showPopup" wx:if="{{roleCodeList == 'bizAdmin' && item.status == '2'}}">审核</van-button>
+                
+              </view>
+            </navigator>
+          </block>
+          <!-- 底部加载动画 -->
+          <view class='more'>
+            <block wx:if="{{more}}">
+              <van-loading size="24px" color="#1989fa">加载中...</van-loading>
+            </block>
+            <block wx:else>{{nomore}}</block>
+          </view>
+          <view style="height: 200rpx;"> </view>
+        </block>
+        <block wx:else>
+          <van-empty description="未搜索到相关记录" image="/images/null5.png" />
+        </block>
+      </block>
+    </view>
+  </block>
+  <block wx:else>
+    <view>
+      <van-empty image="/images/loginNull.png">
+        <view slot="description" style="text-align: center;">
+          <text style="display:block;margin-bottom: 20rpx;">您还未登录,登录后查看更多~</text>
+          <van-button type="info" bindtap="toLogin">立即登录</van-button>
+        </view>
+      </van-empty>
+    </view>
+  </block>
+</view>
+
+<!-- 弹窗 -->
+<van-popup show="{{ show }}" position="bottom" round closeable custom-style="width:100%;padding:0rpx 30rpx 160rpx;" bind:close="onClose">
+  <view style="height: 90rpx;line-height: 90rpx;text-align: center;">审核</view>
+  <form bindsubmit="formSubmit">
+    <view class="part">
+      <view class="height20"> </view>
+      <view class="height20"> </view>
+      <input name="id" value='{{id}}' hidden='true' />
+      <van-field label="审核结果" name="auditFlag" value="{{ auditFlag }}" required input-align="right" class="radioHeight fieldAutoHeight">
+        <view slot="input" class="radioHeightBx">
+          <radio-group class="radio-group" bindchange="dangerStatusChange" data-radioType="auditFlag">
+            <label class="radio">
+              <radio value="false" checked="{{auditFlag=='false'}}" color="#4B70EA" />通过
+            </label>
+            <label class="radio">
+              <radio value="true" checked="{{auditFlag=='true'}}" color="#4B70EA" />不通过
+            </label>
+          </radio-group>
+        </view>
+      </van-field>
+      <van-field label="审核备注" required="{{auditFlag=='true'}}" name="orderReason" value="{{ orderReason }}" type="textarea" input-align="right" placeholder="请输入审核备注" autosize></van-field>
+    </view>
+
+    <view class="submitBtn">
+      <view style="padding-top: 60rpx;">
+        <van-button block round type="info" form-type="submit" color="#0396FF">确认</van-button>
+      </view>
+    </view>
+  </form>
+</van-popup>
+
+
+<wxs module="filters" src="../../utils/filter.wxs"></wxs>

+ 42 - 0
otherPages/loadArrive/index.wxss

@@ -0,0 +1,42 @@
+/* pages/loadArrive/index.wxss */
+page {
+  --cell-vertical-padding: 12rpx;
+  --cell-horizontal-padding: 0;
+  --cell-background-color: transparent;
+}
+.bottomBtn {
+  padding-top: 20rpx;
+  text-align: right;
+}
+.bottomBtn button {
+  margin-left: 0 !important;
+}
+.orderLoadBox > .title {
+  height: 100rpx;
+  line-height: 100rpx;
+  font-weight: bold;
+  font-size: 40rpx;
+  color: #14284A;
+  text-align: center;
+  background: linear-gradient(180deg, #D4E1F6 0%, #FFFFFF 100%);
+}
+.orderLoadBox .dialogUser {
+  height: 50vh;
+  padding-top: 30rpx;
+}
+.orderLoadBox .dialogUser .saleItem {
+  width: 700rpx;
+  margin: 0 auto 30rpx;
+  padding-bottom: 20rpx;
+  border-bottom: 1px solid #eee;
+}
+.orderLoadBox .dialogUser .saleItem .title {
+  font-size: 36rpx;
+  display: flex;
+  justify-content: space-between;
+}
+.orderLoadBox .dialogUser .saleItem .time {
+  margin-top: 10rpx;
+  color: #666;
+  font-size: 24rpx;
+}

+ 130 - 0
otherPages/loadArrive/info.js

@@ -0,0 +1,130 @@
+// pages/loadArrive/info.js
+const app = getApp()
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    info: {},
+    arriveStatusArray:[], //预约状态
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad(options) {
+    //字典数据
+    let treeData = app.globalData.treeArr
+    for (const element of treeData) {
+      let arrStr;
+      switch (element.dictValue) {
+        case 'arrive_status':
+          arrStr = "arriveStatusArray";
+          break;
+      }
+      this.setData({
+        [arrStr]: element.children
+      })
+    }
+    //获取详情
+    var pages = getCurrentPages();
+    var prevPage = pages[pages.length - 2];
+    let getInfo = prevPage.data.resData[options.index]
+    //司机回签图片
+    let fileList = []
+    if(getInfo.sailFilePath){
+      let unloadImgArr = getInfo.sailFilePath.split(',')
+      unloadImgArr.forEach(element => {
+        fileList.push({
+          url: app.host.BASEIMG_URL+element,
+          isImage:true
+        })
+      });
+    }
+    this.setData({
+      info     : getInfo,
+      fileList : fileList
+    })
+    //this.getInfo(options.id)
+  },
+
+  // //查询详情
+  // getInfo: function (id) {
+  //   app.request.GET({
+  //     url: app.API.bizloadarriveDetail,
+  //     page: this,
+  //     params: {
+  //       'id': id
+  //     },
+  //     successFun: true
+  //   }).then(res => {
+  //     let getInfo = res.data.data;
+  //     //司机回签图片
+  //     let fileList = []
+  //     if(getInfo.unloadImg){
+  //       let unloadImgArr = getInfo.unloadImg.split(',')
+  //       unloadImgArr.forEach(element => {
+  //         fileList.push({
+  //           url: app.host.BASEIMG_URL+element,
+  //           isImage:true
+  //         })
+  //       });
+  //     }
+  //     this.setData({
+  //       info              : getInfo,
+  //       fileList          : fileList,
+  //       accessControlAuth : JSON.parse(getInfo.accessControlAuth)
+  //     })
+  //   })
+  // },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage() {
+
+  }
+})

+ 16 - 0
otherPages/loadArrive/info.json

@@ -0,0 +1,16 @@
+{
+  "navigationBarTitleText": "报港预约详情",
+  "enablePullDownRefresh": true,
+  "usingComponents": {
+    "van-checkbox": "@vant/weapp/checkbox/index",
+    "van-checkbox-group": "@vant/weapp/checkbox-group/index",
+    "van-uploader": "@vant/weapp/uploader/index",
+    "car-num-input": "/components/CarNumInput/index",
+    "van-icon": "@vant/weapp/icon/index",
+    "van-cell-group": "@vant/weapp/cell-group/index",
+    "van-field": "@vant/weapp/field/index",
+    "van-button": "@vant/weapp/button/index",
+    "van-tag": "@vant/weapp/tag/index",
+    "van-image": "@vant/weapp/image/index"
+  }
+}

+ 1 - 0
otherPages/loadArrive/info.less

@@ -0,0 +1 @@
+/* pages/loadArrive/info.wxss */

+ 34 - 0
otherPages/loadArrive/info.wxml

@@ -0,0 +1,34 @@
+<!--pages/loadArrive/info.wxml-->
+<view class="container">
+  <view class="part">
+    <van-field label="起卸预约单号" input-align="right" value="{{info.loadNumber}}" readonly></van-field>
+    <van-field label="船号" input-align="right" value="{{info.shipNo}}" readonly></van-field>
+    <van-field label="客户名称" input-align="right" value="{{info.customerName}}" readonly></van-field>
+    <van-field label="联系人" input-align="right" value="{{info.customerContact}}" readonly></van-field>
+    <van-field label="手机号" input-align="right" value="{{info.customerPhone}}" readonly></van-field>
+    <van-field label="客户地址" input-align="right" value="{{info.customerAddress}}" readonly></van-field>
+    <van-field label="货品名称" input-align="right" value="{{info.goodsName}}" readonly></van-field>
+    <van-field label="货品编码" input-align="right" value="{{info.goodsCode}}" readonly></van-field>
+    <van-field label="报港数量(吨)" input-align="right" value="{{info.arriveNumber}}" readonly></van-field>
+    <van-field label="到港时间" input-align="right" value="{{info.arriveTime}}" readonly></van-field>
+    <!-- <van-field label="创建人" input-align="right" value="{{info.createUserName}}" readonly></van-field>
+    <van-field label="创建时间" input-align="right" value="{{info.createTime}}" readonly></van-field> -->
+    <van-field label="预约状态" input-align="right" readonly>
+      <text slot="button" class="status status{{info.status}}">{{filters.codeAnalysis(arriveStatusArray, info.status, 'dictValue', 'dictLabel')}} 
+      </text>
+    </van-field>
+  </view>
+  <view class="part">
+    <van-field label="发航单" readonly border="{{false}}"></van-field>
+    <van-cell-group wx:if="{{ fileList.length>0 }}">
+      <van-field name="" model:value="" label="" class="checkbox">
+        <view slot="input" class="checkboxView">
+          <van-uploader name="" deletable="{{false}}" file-list="{{ fileList }}" max-count="{{fileList.length}}" preview-size="80" />
+        </view>
+      </van-field>
+    </van-cell-group>
+  </view>
+  <view style="height: 50px;"></view>
+</view>
+
+<wxs module="filters" src="../../utils/filter.wxs"></wxs>

+ 0 - 30
otherPages/parkConfig/index.js

@@ -131,36 +131,6 @@ Page({
       loginStatus: loginStatus ? loginStatus : false
     })
 
-    //动态tabbar
-    // let selected = 1
-    // if (roleCodeList == 'bizAdmin') {
-    //   this.getTabBar().setData({
-    //     list: app.globalData.allList[0].list2,
-    //   })
-    // } else if(roleCodeList == 'send') {
-    //   this.getTabBar().setData({
-    //     list: app.globalData.allList[0].list3,
-    //   })
-    // } else if(roleCodeList == 'sale') {
-    //   this.getTabBar().setData({
-    //     list: app.globalData.allList[0].list4,
-    //   })
-    //   selected = 0
-    // } else if(roleCodeList == 'customer') {
-    //   this.getTabBar().setData({
-    //     list: app.globalData.allList[0].list5,
-    //   })
-    // } else if (roleCodeList=='driver'||roleCodeList==''){
-    //   this.getTabBar().setData({
-    //     list: app.globalData.allList[0].list1,
-    //   })
-    // }
-    // if (typeof this.getTabBar === 'function' && this.getTabBar()) {
-    //   this.getTabBar().setData({
-    //     selected: selected
-    //   })
-    // }
-
     this.setData({
       requestStatu:'加载中...',
     })

+ 185 - 0
pages/register/indexShip.js

@@ -0,0 +1,185 @@
+// pages/register/indexShip.js
+const app = getApp()
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    showModal: false,
+    isSubmitting:false,
+    defaultText: '请选择',
+    userId:'',
+    name:'',
+    phone:'',
+    nickname: '',
+    // fileList:[],
+  },
+
+  toLogin:function(){
+    wx.navigateBack()
+  },
+
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function (options) {
+    this.setData({
+      loginStatus: wx.getStorageSync('loginStatus') ? wx.getStorageSync('loginStatus') : false,
+      userId:wx.getStorageSync('id'),
+      name:wx.getStorageSync('name'),
+      phone:wx.getStorageSync('phone'),
+      nickname: wx.getStorageSync('nickname'),
+      roleName: "2",
+    })
+  },
+
+  // //图片上传
+  // afterRead:function(event){
+  //   const { file } = event.detail;
+  //   const { type } = event.currentTarget.dataset
+  //   app.request.uploadDIY({
+  //     url: app.API.uploadImgMap,
+  //     page: this,
+  //     filePaths:file.url,
+  //     setfiled:'file',
+  //     params: {},
+  //     //isToken: false,
+  //     isLoading: false,
+  //     successFun: true
+  //   }).then(res => {
+  //       const imgArray = this.data[type];
+  //       imgArray.push({
+  //         ...file,
+  //         url: app.host.BASEIMG_URL + JSON.parse(res.data).data.imageFile,
+  //         imgUrl: JSON.parse(res.data).data.imageFile
+  //       });
+  //       this.setData({
+  //         [type]: imgArray
+  //       });
+  //   })
+  // },
+
+  // // 删除图片
+  // deleteImg: function (event) {
+  //   const { type } = event.currentTarget.dataset
+  //   let getFileList = this.data[type];
+  //   getFileList.splice(event.detail.index, 1)
+  //   this.setData({
+  //     [type]: getFileList
+  //   })
+  // },
+
+  //表单提交
+  formSubmit: function (e) {
+    let formData = e.detail.value;
+    let reg = /^1[3-9]\d{9}$/;
+    var mobile = /^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/;
+    var warn = ""; //弹框时提示的内容
+    if (formData.account == '') {
+      warn = "请输入账号!";
+    } else if (formData.name == '') {
+      warn = "请输入船主姓名!";
+    } else if (formData.phone == '') {
+      warn = "请输入船主手机号!";
+    } else if(!reg.test(formData.phone)){
+      warn = "请确认手机号格式!";
+    } else if (formData.nickname == '') {
+      warn = "请输入船舶号!";
+    } 
+
+    // /** 图片处理 START **/
+    // let getfileList = this.data.fileList
+    // if(getfileList.length < 1){
+    //   warn = "请上传船舶证书图片!";
+    // }
+    // let fileNameList = []
+    // let filePathList = []
+    // getfileList.forEach((element,index) => {
+    //   console.log("element-----" + JSON.stringify(element))
+    //   fileNameList.push('图片'+(index+1)+'.'+element.imgUrl.split('.')[1])
+    //   filePathList.push(element.imgUrl)
+    // });
+    // formData.fileNameList = fileNameList
+    // formData.filePathList = filePathList
+    // /** 图片处理 END **/
+
+    if (warn != '') {
+      app.util.checkForm(warn);
+    } else {
+      app.request.POST({
+        url: app.API.register,
+        params: formData,
+        page: this,
+        isLoadingTxt: '船主注册中...',
+        isToken:false,
+        isSubmitting: true,
+        successFun: true
+      }).then(res => {
+        let _this = this
+        wx.showToast({
+          title: '注册成功',
+          icon: 'success',
+          duration: 1500,
+          mask:true,
+          complete: function () {
+            setTimeout( ()=> {
+              wx.setStorageSync('name', formData.name); //用户姓名
+              wx.setStorageSync('nickname', formData.nickname); //船舶号
+              wx.navigateBack()
+            }, 1500) //延迟时间  
+          }
+        })
+      })
+    }
+  },
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function () {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function () {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function () {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function () {
+
+  }
+})

+ 14 - 0
pages/register/indexShip.json

@@ -0,0 +1,14 @@
+{
+  "navigationBarTitleText": "船主注册",
+  "navigationBarBackgroundColor": "#2C6CEC",
+  "navigationBarTextStyle":"white",
+  "usingComponents": {
+    "car-num-input": "/components/CarNumInput/index",
+    "van-icon": "@vant/weapp/icon/index",
+    "van-cell-group": "@vant/weapp/cell-group/index",
+    "van-field": "@vant/weapp/field/index",
+    "van-button": "@vant/weapp/button/index",
+    "van-uploader": "@vant/weapp/uploader/index"
+  }
+}
+

+ 55 - 0
pages/register/indexShip.wxml

@@ -0,0 +1,55 @@
+<!--pages/register/index.wxml-->
+<view class="container">
+<view class="height20"></view>
+  <!-- <form bindsubmit="formSubmit" class="registerForm">
+    <view class="inputItem"><input type="text" name="phone" placeholder="请输入手机号" placeholder-style="color:rgba(255, 255, 255, 0.85);font-size:28rpx"/></view>
+    <view style="font-size: 24rpx;color: rgba(255, 255, 255, .5);padding-left:50rpx;margin-top: 10rpx;">注册默认密码:123456</view>
+    <view class="submitBtn width508">
+      <van-button block round color="#2C6CEC" plain type="info" form-type="submit">注册</van-button>
+      <view style="font-size: 24rpx;color: #FFFFFF;text-align: center;margin-top: 50rpx;" bindtap="toLogin">已有账号?去登录</view>
+    </view>
+  </form> -->
+
+  <form bindsubmit="formSubmit">
+      <view class="part">
+        <view class="topItem topItem1">
+          <input name="roleName" value='{{roleName}}' hidden='true' />
+          <van-field label="账号" required readonly input-align="right" border="{{false}}" />
+          <van-field label="" name="account" placeholder="请输入账号" border="{{false}}" />
+        </view>
+
+        <view class="topItem topItem1">
+          <van-field label="姓名" required readonly input-align="right" border="{{false}}" />
+          <van-field label="" name="name" placeholder="请输入船主姓名" border="{{false}}" />
+        </view>
+
+        <view class="topItem topItem1">
+          <van-field label="手机号" required readonly input-align="right" border="{{false}}" />
+          <van-field label="" name="phone" placeholder="请输入船主手机号" border="{{false}}" />
+        </view>
+
+        <view class="topItem topItem1">
+          <van-field label="船舶号" required readonly input-align="right" border="{{false}}" />
+          <van-field label="" name="nickname" placeholder="请输入船舶号" border="{{false}}" />
+        </view>
+
+        <!-- <view class="topItem">
+          <van-field label="船舶证书上传" required readonly input-align="right" border="{{false}}" />
+          <van-field name="" model:value="" label="" class="uploadBox">
+            <view slot="input" class="uploadboxView">
+              <van-uploader name="" deletable="{{true}}" data-type="fileList" file-list="{{ fileList }}" bind:after-read="afterRead" bind:delete="deleteImg" max-count="6" preview-size="110" />
+            </view>
+          </van-field>
+        </view> -->
+        
+        <view style="font-size: 24rpx;color: #1989fa;padding-left:50rpx;margin-top: 10rpx;">注册默认密码:123456<text style="font-size: 24rpx;color: #ee0a24;text-align: left;margin-top: 50rpx;margin-left: 20rpx;" bindtap="toLogin">已有账号?去登录</text>
+        </view>
+      </view>
+      
+      <view class="fixedBtn submitBtn">
+        <van-button loading="{{isSubmitting}}" round block disabled="{{isSubmitting}}" loading-text="{{isSubmitting?'提交中...':''}}"  type="info" form-type="submit">注册成为船主
+        </van-button>
+      </view>
+
+    </form>
+</view>

+ 120 - 0
pages/register/indexShip.wxss

@@ -0,0 +1,120 @@
+/* pages/register/index.wxss */
+/* pages/updateInfo/index.wxss */
+.van-field__label {
+  width: 240rpx !important;
+}
+
+.formTopBlueBg {
+  height: 144rpx;
+  background-color: #0396FF;
+}
+
+.part {
+  border-radius: 16rpx;
+  padding: 20rpx 00rpx;
+  background: #fff;
+  margin-bottom: 20rpx;
+}
+
+picker view {
+  line-height: normal !important;
+}
+
+.heightAuto .van-field__control--right {
+  height: auto !important;
+}
+
+.topProJectInfo {
+  padding: 26rpx 40rpx;
+}
+.labelTitle{
+  padding: 10px 16px 0;
+  color: #323233;
+  font-size: 14px;
+}
+.topItem1 .van-cell {
+  padding-top: 6rpx !important;
+  padding-bottom: 6rpx !important;
+}
+.topItem {
+  position: relative;
+  padding-bottom: 16rpx;
+}
+.topItem2::after{
+  border:0 none !important
+}
+.topItem::after {
+  border-bottom: 1px solid #ebedf0;
+  bottom: 0;
+  box-sizing: border-box;
+  content: " ";
+  left: 16px;
+  pointer-events: none;
+  position: absolute;
+  right: 16px;
+  transform: scaleY(.5);
+  transform-origin: center;
+  border-bottom-width: 1px;
+  border-bottom-style: solid;
+  border-bottom-color: rgb(235, 237, 240);
+}
+
+.proTitle {
+  font-size: 36rpx;
+  font-weight: bold;
+  color: rgba(0, 0, 0, 0.85);
+}
+
+.proJectInfoCode {
+  display: flex;
+  padding: 10rpx 10rpx 0 30rpx;
+  color: rgba(0, 0, 0, 0.65);
+  justify-content: space-between;
+}
+
+.proJectInfoCode>view:last-child {
+  padding: 0 16rpx;
+  display: flex;
+  height: 40rpx;
+  line-height: 40rpx;
+  color: #2C6CEC;
+  font-size: 20rpx;
+  border-radius: 20rpx;
+  border: 1px solid #2C6CEC;
+  align-items: center;
+}
+
+.radioHeight .radioHeightBx {
+  width: 100%;
+}
+radio-group {
+  text-align: right;
+}
+.fieldAutoHeight .van-field__body,.fieldAutoHeight .van-field__control {
+  height: auto !important;
+  text-align: left;
+  line-height: 30px;
+}
+.ysType{
+  flex: 1;
+  text-align: right;
+}
+.ysType text:first-child{
+  margin-right: 12rpx;
+}
+.ysType text{
+  display: inline-block;
+  width: 80rpx;
+  height: 48rpx;
+  line-height: 48rpx;
+  text-align: center;
+  background: #E1E1E1;
+  border: 1px solid #E1E1E1;
+  border-radius: 4rpx;
+  box-sizing: border-box;
+}
+.ysType .active{
+  color: #2C6CEC;
+  border: 1rpx solid #2C6CEC;
+  background: transparent;
+}

+ 203 - 0
pages/updateInfo/indexShip.js

@@ -0,0 +1,203 @@
+// pages/updateInfo/indexShip.js
+const app = getApp()
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    loginStatus: wx.getStorageSync('loginStatus') ? wx.getStorageSync('loginStatus') : false,
+    showModal: false,
+    isSubmitting:false,
+    defaultText: '请选择',
+    userId:'',
+    name:'',
+    phone:'',
+    nickname: '',
+    fileList:[],
+  },
+  
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function (options) {
+    ///证书图片
+    let fileList = []
+    if(null != wx.getStorageSync('unloadImg') && "" != wx.getStorageSync('unloadImg')){
+      let unloadImg = wx.getStorageSync('unloadImg');
+      console.log("unloadImg---" + unloadImg);
+      let unloadImgArray = unloadImg.split(',');
+      unloadImgArray.forEach(element => {
+        fileList.push({
+          url     : app.host.BASEIMG_URL + element,
+          imgUrl  : element
+        })
+      });
+    }
+
+    this.setData({
+      loginStatus : wx.getStorageSync('loginStatus') ? wx.getStorageSync('loginStatus') : false,
+      userId      : wx.getStorageSync('id'),
+      name        : wx.getStorageSync('name'),
+      phone       : wx.getStorageSync('phone'),
+      nickname    : wx.getStorageSync('nickname'),
+      fileList    : fileList,//证书图片
+    })
+  },
+
+  //图片上传
+  afterRead:function(event){
+    const { file } = event.detail;
+    const { type } = event.currentTarget.dataset
+    app.request.uploadDIY({
+      url: app.API.uploadImgMap,
+      page: this,
+      filePaths:file.url,
+      setfiled:'file',
+      params: {},
+      //isToken: false,
+      isLoading: false,
+      successFun: true
+    }).then(res => {
+        const imgArray = this.data[type];
+        imgArray.push({
+          ...file,
+          url: app.host.BASEIMG_URL + JSON.parse(res.data).data.imageFile,
+          imgUrl: JSON.parse(res.data).data.imageFile
+        });
+        this.setData({
+          [type]: imgArray
+        });
+    })
+  },
+
+  // 删除图片
+  deleteImg: function (event) {
+    const { type } = event.currentTarget.dataset
+    let getFileList = this.data[type];
+    getFileList.splice(event.detail.index, 1)
+    this.setData({
+      [type]: getFileList
+    })
+  },
+
+  //表单提交
+  formSubmit: function (e) {
+    let formData = e.detail.value;
+    let reg = /^1[3-9]\d{9}$/;
+    var mobile = /^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/;
+    var warn = ""; //弹框时提示的内容
+    if (formData.account == '') {
+      warn = "请输入账号!";
+    } else if (formData.name == '') {
+      warn = "请输入船主姓名!";
+    } else if (formData.phone == '') {
+      warn = "请输入船主手机号!";
+    } else if(!reg.test(formData.phone)){
+      warn = "请确认手机号格式!";
+    } else if (formData.nickname == '') {
+      warn = "请输入船舶号!";
+    } 
+
+    /** 图片处理 START **/
+    let getfileList = this.data.fileList
+    if(getfileList.length < 1){
+      warn = "请上传船舶证书图片!";
+    }
+    let fileNameList = []
+    let filePathList = []
+    let unloadImg = ""
+
+    getfileList.forEach((element,index) => {
+      fileNameList.push('图片'+(index+1)+'.'+element.imgUrl.split('.')[1])
+      filePathList.push(element.imgUrl)
+      if(""!=unloadImg){
+        unloadImg = unloadImg + "," + element.imgUrl
+      }else{
+        unloadImg = element.imgUrl
+      }
+    });
+    formData.fileNameList = fileNameList
+    formData.filePathList = filePathList
+    /** 图片处理 END **/
+
+    if (warn != '') {
+      app.util.checkForm(warn);
+    } else {
+      app.request.POST({
+        url: app.API.updateUserInfo,
+        params: formData,
+        page: this,
+        isLoadingTxt: '处理中...',
+        isSubmitting: true,
+        successFun: true
+      }).then(res => {
+        let _this = this
+        wx.showToast({
+          title: '修改成功',
+          icon: 'success',
+          duration: 1500,
+          mask:true,
+          complete: function () {
+            setTimeout( ()=> {
+              wx.setStorageSync('name', formData.name); //用户姓名
+              wx.setStorageSync('nickname', formData.nickname); //车牌号
+              wx.setStorageSync('unloadImg', unloadImg); //证书图片
+              wx.navigateBack()
+            }, 1500) //延迟时间  
+          }
+        })
+      })
+
+
+    }
+  },
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function () {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function () {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function () {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function () {
+
+  }
+})

+ 11 - 0
pages/updateInfo/indexShip.json

@@ -0,0 +1,11 @@
+{
+  "navigationBarTitleText": "船主信息修改",
+  "usingComponents": {
+    "car-num-input": "/components/CarNumInput/index",
+    "van-icon": "@vant/weapp/icon/index",
+    "van-cell-group": "@vant/weapp/cell-group/index",
+    "van-field": "@vant/weapp/field/index",
+    "van-button": "@vant/weapp/button/index",
+    "van-uploader": "@vant/weapp/uploader/index"
+  }
+}

+ 37 - 0
pages/updateInfo/indexShip.wxml

@@ -0,0 +1,37 @@
+<!--pages/updateInfo/index.wxml-->
+<view class="container">
+  <view class="height20"></view>
+  <view>
+    <form bindsubmit="formSubmit">
+      <view class="part">
+        <input name="id" value='{{userId}}' hidden='true' />
+        <view class="topItem topItem1">
+          <van-field label="姓名" required name="name" model:value="{{name}}" placeholder="请输入司机姓名" border="{{false}}" />
+        </view>
+
+        <view class="topItem topItem1">
+          <van-field label="手机号" required name="phone" model:value="{{phone}}" placeholder="请输入船主手机号" border="{{false}}" />
+        </view>
+
+        <view class="topItem topItem1">
+          <van-field label="船舶号" required name="nickname" model:value="{{nickname}}" placeholder="请输入船舶号" border="{{false}}" />
+        </view>
+
+        <view class="topItem">
+          <van-field label="船舶证书上传" required readonly input-align="right" border="{{false}}" />
+          <van-field name="" model:value="" label="" class="uploadBox">
+            <view slot="input" class="uploadboxView">
+              <van-uploader name="" deletable="{{true}}" data-type="fileList" file-list="{{ fileList }}" max-count="4" bind:after-read="afterRead" bind:delete="deleteImg" preview-size="120" />
+            </view>
+          </van-field>
+        </view>
+      </view>
+
+      <view class="fixedBtn submitBtn">
+        <van-button loading="{{isSubmitting}}" round block disabled="{{isSubmitting}}" loading-text="{{isSubmitting?'提交中...':''}}" type="info" form-type="submit">确定
+        </van-button>
+      </view>
+
+    </form>
+  </view>
+</view>

+ 119 - 0
pages/updateInfo/indexShip.wxss

@@ -0,0 +1,119 @@
+/* pages/updateInfo/index.wxss */
+.van-field__label {
+  width: 240rpx !important;
+}
+
+.formTopBlueBg {
+  height: 144rpx;
+  background-color: #0396FF;
+}
+
+.part {
+  border-radius: 16rpx;
+  padding: 20rpx 00rpx;
+  background: #fff;
+  margin-bottom: 20rpx;
+}
+
+picker view {
+  line-height: normal !important;
+}
+
+.heightAuto .van-field__control--right {
+  height: auto !important;
+}
+
+.topProJectInfo {
+  padding: 26rpx 40rpx;
+}
+.labelTitle{
+  padding: 10px 16px 0;
+  color: #323233;
+  font-size: 14px;
+}
+.topItem1 .van-cell {
+  padding-top: 6rpx !important;
+  padding-bottom: 6rpx !important;
+}
+.topItem {
+  position: relative;
+  padding-bottom: 16rpx;
+}
+.topItem2::after{
+  border:0 none !important
+}
+.topItem::after {
+  border-bottom: 1px solid #ebedf0;
+  bottom: 0;
+  box-sizing: border-box;
+  content: " ";
+  left: 16px;
+  pointer-events: none;
+  position: absolute;
+  right: 16px;
+  transform: scaleY(.5);
+  transform-origin: center;
+  border-bottom-width: 1px;
+  border-bottom-style: solid;
+  border-bottom-color: rgb(235, 237, 240);
+}
+
+.proTitle {
+  font-size: 36rpx;
+  font-weight: bold;
+  color: rgba(0, 0, 0, 0.85);
+}
+
+.proJectInfoCode {
+  display: flex;
+  padding: 10rpx 10rpx 0 30rpx;
+  color: rgba(0, 0, 0, 0.65);
+  justify-content: space-between;
+}
+
+.proJectInfoCode>view:last-child {
+  padding: 0 16rpx;
+  display: flex;
+  height: 40rpx;
+  line-height: 40rpx;
+  color: #2C6CEC;
+  font-size: 20rpx;
+  border-radius: 20rpx;
+  border: 1px solid #2C6CEC;
+  align-items: center;
+}
+
+.radioHeight .radioHeightBx {
+  width: 100%;
+}
+radio-group {
+  text-align: right;
+}
+.fieldAutoHeight .van-field__body,.fieldAutoHeight .van-field__control {
+  height: auto !important;
+  text-align: left;
+  line-height: 30px;
+}
+.ysType{
+  flex: 1;
+  text-align: right;
+}
+.ysType text:first-child{
+  margin-right: 12rpx;
+}
+.ysType text{
+  display: inline-block;
+  width: 80rpx;
+  height: 48rpx;
+  line-height: 48rpx;
+  text-align: center;
+  background: #E1E1E1;
+  border: 1px solid #E1E1E1;
+  border-radius: 4rpx;
+  box-sizing: border-box;
+}
+.ysType .active{
+  color: #2C6CEC;
+  border: 1rpx solid #2C6CEC;
+  background: transparent;
+}

+ 4 - 0
pages/workstand/index.js

@@ -18,6 +18,8 @@ Page({
       {url:'/pages/deliveryConfirm/index',flowName:'发货确认',flowIcon:'',iconfont:'daifahuo1',color:"#FF9237",role:["send"]},
 
       {url:'/pages/signReview/index',flowName:'签收审核',flowIcon:'',iconfont:'qianshou',color:"#e17055",role:["sale"]},
+
+      {url:'/otherPages/loadArrive/index',flowName:'报港预约',flowIcon:'',iconfont:'loadArrive',color:"#20A0E3",role:["ship", "bizAdmin"]},
       
       // 新增功能模块,包含列表、详情、新增,后续其他页面可复制,修改页面参数显示、接口地址即可
       // url:表示页面地址  role:有权限的角色名
@@ -33,6 +35,8 @@ Page({
     //   {url:'',flowName:'工序任务',flowIcon:'',iconfont:'gongxu',color:"#20A0E3",role:["工序操作员"]},
 
     //   {url:'',flowName:'保洁任务',flowIcon:'',iconfont:'baojie-chulizhong',color:"#20A0E3",role:["保洁员"]},
+
+
     ]
   },
 

+ 17 - 0
utils/api.js

@@ -83,8 +83,25 @@ const api = {
   'bizparkconfigAdd':'/biz/bizparkconfig/add',//添加
   'bizparkconfigEdit':'/biz/bizparkconfig/edit',//编辑
   'bizparkconfigDelete':'/biz/bizorderload/delete',//删除
+
+  //起卸预约
+  'bizloadappointList':'/biz/bizloadappoint/getList',//列表
+  'bizloadappointDetail':'/biz/bizloadappoint/detail',//详情
+  
+  //报港预约
+  'bizloadarrivePage':'/biz/bizloadarrive/page',//分页列表
+  'bizloadarriveAdd':'/biz/bizloadarrive/add',//添加
+  'bizloadarriveDetail':'/biz/bizloadarrive/detail',//详情
+  'bizloadarriveEdit':'/biz/bizloadarrive/edit',//编辑
+  'bizloadarriveDelete':'/biz/bizloadarrive/delete',//删除
+  'bizloadarriveAudit':'/biz/bizloadarrive/auditArrive',//审核
+
+  
   
   
+  
+
+  
 }
 
 module.exports = {

+ 1 - 1
utils/env.js

@@ -2,7 +2,7 @@ const accountInfo = wx.getAccountInfoSync();
 const envVersion = accountInfo.miniProgram.envVersion; //'develop' | 'trial' | 'release'
 const URLMap = {
   develop: { // 开发版
-    BASE_URL: 'http://120.46.83.155:18999' + '/api', //接口地址
+    BASE_URL: 'http://192.168.0.120:83', //接口地址
     BASEIMG_URL: 'https://wx.js-whzl.com:8055/preview/', //图片预览上传地址
   },
   trial: { // 体验版

+ 4 - 0
utils/iconfont.wxss

@@ -110,6 +110,10 @@
   content: "\e66c";
 }
 
+.iconfont-loadArrive:before {
+  content: "\e66c";
+}
+
 .iconfont-xiaoguan-begin:before {
   content: "\e604";
 }