<template>
  <div>
    <basic-container>
      <div class="home-container">
        <div style="display: flex;justify-content: center;">
          <div class="content">
            <div class="content-item" @click="handleClick('')">
              <div class="card">
                <div class="card-title card-title1">
                <span>
                  全
                </span>
                </div>
                <div class="card-content">
                  <span class="card-content-num">{{ totalData.all }}</span>
                  <span class="card-content-text">全部</span>
                </div>
              </div>
            </div>
            <div class="divider"/>
            <div class="content-item" @click="handleClick('2')">
              <div class="card">
                <div class="card-title card-title4">
                <span>
                  受
                </span>
                </div>
                <div class="card-content">
                  <span class="card-content-num">{{ totalData.two }}</span>
                  <span class="card-content-text">未受理</span>
                </div>
              </div>
            </div>
            <div class="divider"/>
            <div class="content-item" @click="handleClick('3')">
              <div class="card">
                <div class="card-title card-title5">
                <span>
                  未
                </span>
                </div>
                <div class="card-content">
                  <span class="card-content-num">{{ totalData.three }}</span>
                  <span class="card-content-text">未完工</span>
                </div>
              </div>
            </div>
            <div class="divider"/>
            <div class="content-item" @click="handleClick('4')">
              <div class="card">
                <div class="card-title card-title6">
                    <span>
                      已
                    </span>
                </div>
                <div class="card-content">
                  <span class="card-content-num">{{ totalData.four }}</span>
                  <span class="card-content-text">已完工</span>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </basic-container>
    <basic-container v-if="key>0">
      <avue-crud
          :data="goodsList"
          :option="goodsOptionCrud"
          :table-loading="loading"
          :page.sync="page"
          ref="crud"
          @on-load="onLoad"
          @resetColumn="resetColumn"
          @saveColumn="saveColumn"
          @search-change="searchChange"
          @search-criteria-switch="searchCriteriaSwitch"
          @row-save="(row,done,loading)=>{rowSave(row,0,done,loading)}"
          @row-update="rowSave">
        <template slot-scope="{row}" slot="fleetId">
          <span>{{ row.fleetName }}</span>
        </template>
        <template slot-scope="{row}" slot="fleetIdSearch">
          <crop-select
              v-model="row.fleetId"
              corpType="CD"
          ></crop-select>
        </template>
        <template slot-scope="{row,index}" slot="menu">
          <el-button
              type="text"
              size="small"
              v-if="row.status === 2"
              @click="rowSaveT(row,index)"
          >{{ row.$cellEdit ? '保 存' : '修 改' }}
          </el-button>
          <el-button
              size="small"
              type="text"
              @click="designate(row, index)"
              v-if="row.status===2"
          >受 理
          </el-button>
          <el-button
              size="small"
              type="text"
              @click="cancelDesignate(row, index)"
              v-if="row.status===6"
          >取消受理
          </el-button>
          <el-button
              size="small"
              type="text"
              @click="confirmArrival(row, index)"
              v-if="row.status === 5"
          >确认到厂
          </el-button>
          <el-button
              size="small"
              type="text"
              @click="confirmCompletion(row, index)"
              v-if="row.status === 3"
          >确认完工
          </el-button>
          <el-button
              size="small"
              type="text"
              @click="suitcase(row, index)"
              v-if="row.status === 6"
          >提箱
          </el-button>
          <el-button
              size="small"
              type="text"
              @click="annexOpen(row, index)"
          >附 件
          </el-button>
        </template>
        <template slot="addressDetail" slot-scope="{ row,index}">
          <el-tooltip class="item" effect="dark" placement="top">
            <div v-html="ToBreak(row.addressDetail)" slot="content"></div>
            <div style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;">{{row.addressDetail}}</div>
          </el-tooltip>
        </template>
      </avue-crud>
      <el-dialog
          title="附件"
          :visible.sync="dialogVisible"
          append-to-body
          width="70%">
        <c-upload
            typeUpload="GZ"
            :basic="true"
            deleteUrl="/api/blade-client/common-file/remove"
            :data="orderList"
            :disabled="form.status===4"
            :enumerationValue="76"
        ></c-upload>
        <span slot="footer" class="dialog-footer">
          <el-button @click="dialogVisible = false" size="small">取 消</el-button>
          <el-button type="primary" @click="saveAnnex" size="small" :disabled="form.status===4">保 存</el-button>
        </span>
      </el-dialog>
    </basic-container>
  </div>
</template>

<script>
import {
  driverQueryCollection,
  acceptanceCollection,
  acceptanceDispatchCollection,
  confirmCompletion,
  fleetList, motorcadeDriver, fleetDriverSave, getAttachment, saveAttached, arrival,borrow
} from "@/api/landTransportation";

export default {
  name: "index",
  data() {
    return {
      key:0,
      form: {},
      orderList:[],
      dialogVisible: false,
      loading: false,
      activeName:'',
      page: {
        pageSize: 10,
        currentPage: 1,
        total: 0,
        pageSizes: [10, 50, 100, 200, 300]
      },
      roleName: localStorage.getItem("roleName").split(',')[0],
      goodsList: [],
      goodsOptionCrud:{},
      optionList: {
        stripe:true,
        index: true,
        addBtn: false,
        delBtn: false,
        cellBtn: false,
        cancelBtn: false,
        editBtn: false,
        addRowBtn: false,
        searchIcon: true,
        searchIndex: 2,
        searchSpan: 8,
        searchMenuPosition: "right",
        searchMenuSpan: 6,
        align: 'center',
        height: "auto",
        showSummary: true,
        summaryText: "合计",
        sumColumnList: [
          {
            name: 'landWeight',
            type: 'sum',
            decimals: 2
          }, {
            name: 'landAmountC',
            type: 'sum',
            decimals: 2
          }, {
            name: 'ctnQuantity',
            type: 'count'
          },{
            name: 'oneFeeC',
            type: 'sum',
            decimals: 2
          },{
            name: 'twoFeeC',
            type: 'sum',
            decimals: 2
          },{
            name: 'threeFeeC',
            type: 'sum',
            decimals: 2
          },{
            name: 'fourFeeC',
            type: 'sum',
            decimals: 2
          },{
            name: 'fiveFeeC',
            type: 'sum',
            decimals: 2
          }],
        column: [{
          label: '货运日期',
          prop: 'arrivalTime',
          overHidden: true,
          type: "date",
          searchRange: true,
          defaultTime: ['00:00:00', '23:59:59'],
          format: "yyyy-MM-dd HH:mm:ss",
          valueFormat: "yyyy-MM-dd HH:mm:ss",
          index: 1,
          width: 140,
          search: true,
        },{
          label: '货运地点',
          index: 2,
          width: 160,
          search: true,
          prop: 'addressDetail'
        },{
          label: '提单号',
          width: 100,
          index:3,
          search: true,
          overHidden: true,
          prop: 'billNo'
        }, {
          label: '场站',
          prop: 'station',
          overHidden: true,
          index: 4,
          width: 140,
          search: true,
        },  {
          label: '车队',
          width: 200,
          search: true,
          index:5,
          overHidden: true,
          prop: 'fleetId'
        },{
          label: '车号',
          width: 150,
          prop: 'plateNo',
          overHidden: true,
          index:6,
          type: 'select',
          search: true,
          dicUrl: "/api/blade-client/land-vehicle/vehicle-list?fleetId={{key}}",
          props: {
            label: "plateNo",
            value: "plateNo"
          }
        }, {
          label: '司机',
          width: 115,
          index:7,
          search: true,
          overHidden: true,
          prop: 'driverId',
          type: 'select',
          dicUrl: "/api/blade-client/land-driver/driver-list?vehicleId={{key}}",
          props: {
            label: "name",
            value: "id"
          },
        }, {
          label: '电话',
          width: 160,
          index:8,
          overHidden: true,
          search: true,
          prop: 'tel'
        }, {
          label: '平台号',
          width: 100,
          index: 9,
          search: true,
          overHidden: true,
          prop: 'orderNo'
        }, {
          label: '箱号',
          cell: true,
          width: 245,
          index: 10,
          overHidden: true,
          search: true,
          prop: 'ctnNo'
        },{
          label: '实际到厂时间',
          prop: 'realArrivalTime',
          overHidden: true,
          type: "date",
          searchRange: true,
          defaultTime: ['00:00:00', '23:59:59'],
          format: "yyyy-MM-dd HH:mm:ss",
          valueFormat: "yyyy-MM-dd HH:mm:ss",
          index: 11,
          width: 140
        },{
          label: '受理日期',
          type: "datetime",
          format: 'yyyy-MM-dd HH:mm:ss',
          valueFormat: 'yyyy-MM-dd HH:mm:ss',
          width: 200,
          index: 12,
          prop: 'acceptTime'
        },{
          label: '提箱时间',
          type: "borrowTime",
          format: 'yyyy-MM-dd HH:mm:ss',
          valueFormat: 'yyyy-MM-dd HH:mm:ss',
          width: 200,
          index: 12,
          prop: 'acceptTime'
        },{
          label: '完工日期',
          prop: 'finishedTime',
          overHidden: true,
          type: "date",
          searchRange: true,
          defaultTime: ['00:00:00', '23:59:59'],
          format: "yyyy-MM-dd HH:mm:ss",
          valueFormat: "yyyy-MM-dd HH:mm:ss",
          index:13,
          width: 140,
          // search: true,
        },{
          label: '箱型',
          width: 100,
          search: true,
          index: 14,
          overHidden: true,
          prop: 'ctnType',
          type: 'select',
          dicUrl: "/api/blade-system/dict-biz/dictionary?code=boxType",
          props: {
            label: "dictValue",
            value: "dictValue"
          },
        }, {
          label: '箱量',
          width: 50,
          index: 15,
          prop: 'ctnQuantity'
        },{
          label: '货物名称',
          overHidden: true,
          width: 160,
          search: true,
          index: 16,
          prop: 'goods'
        }, {
          label: '件数',
          width: 100,
          search: true,
          index: 17,
          overHidden: true,
          controls: false,
          cell: true,
          prop: 'quantity',
          type: 'number',
          precision:0
        }, {
          label: '重量(吨)',
          width: 160,
          prop: 'landWeight',
          controls: false,
          overHidden: true,
          index: 18,
          precision: 2,
          type: 'number'
        },{
          label: '尺码',
          width: 100,
          // search: true,
          index:19,
          overHidden: true,
          cell: true,
          prop: 'size',
        }, {
          label: '应付陆运费',
          overHidden: true,
          index: 20,
          prop: 'landAmountC'
        }, {
          label: '委托备注',
          overHidden: true,
          width: 245,
          index: 21,
          prop: 'remarks'
        }, {
          label: '车队备注',
          overHidden: true,
          width: 245,
          index: 22,
          prop: 'fleetRemarks'
        }, {
          label: '司机备注',
          overHidden: true,
          cell: true,
          width: 245,
          index: 23,
          prop: 'driverRemarks'
        },{
          label: '场站费',
          width: 100,
          precision: 2,
          cell: true,
          index: 24,
          controls: false,
          type: 'number',
          prop: 'oneFeeC'
        }, {
          label: '港杂费',
          width: 100,
          precision: 2,
          cell: true,
          index: 25,
          controls: false,
          type: 'number',
          prop: 'twoFeeC'
        }, {
          label: '扣款',
          width: 100,
          precision: 2,
          cell: true,
          index: 26,
          controls: false,
          type: 'number',
          prop: 'threeFeeC'
        }, {
          label: '待时费',
          width: 100,
          index: 27,
          precision: 2,
          cell: true,
          controls: false,
          type: 'number',
          prop: 'fourFeeC'
        }, {
          label: '其他',
          width: 100,
          precision: 2,
          index: 28,
          cell: true,
          type: 'number',
          controls: false,
          prop: 'fiveFeeC'
        }, {
          label: '费用备注',
          width: 245,
          index: 29,
          cell: true,
          prop: 'feeRemarksC'
        },{
          label: '制单日期',
          overHidden: true,
          prop: 'createTime',
          type: "date",
          searchRange: true,
          defaultTime: ['00:00:00', '23:59:59'],
          format: "yyyy-MM-dd HH:mm:ss",
          valueFormat: "yyyy-MM-dd HH:mm:ss",
          index: 30,
          width: 140,
          search: true,
        },{
          label: '船名航次',
          prop: 'factory',
          overHidden: true,
          index: 31,
          width: 140,
          search: true,
        },{
          label: '状态',
          width: 100,
          type: 'select',
          index:32,
          overHidden: true,
          dicUrl: "/api/blade-system/dict-biz/dictionary?code=land_order_status",
          props: {
            label: "dictValue",
            value: "dictKey"
          },
          dataType: "string",
          prop: 'status'
        }
        ],
      },
      totalData:{}
    }
  },
  async created() {
    this.goodsOptionCrud = await this.getColumnData(this.getColumnName(88), this.optionList);
    this.key++
    let i = 0;
    this.goodsOptionCrud.column.forEach(item => {
      if (item.search) i++
    })
    if (i % 3 !== 0) {
      const num = 3 - Number(i % 3)
      this.goodsOptionCrud.searchMenuSpan = num * 8;
      this.goodsOptionCrud.searchMenuPosition = "right";
    }
  },
  methods: {
    //自定义列保存
    async saveColumn() {
      /**
       * 已定义全局方法，直接使用，saveColumnData保存列数据方法,参数传值(表格名称，当前表格的option数据)
       * 已定义全局方法，直接使用，getColumnName方法用来获取枚举值，参数根据自己定义的code值获取中文名
       * 一定要执行异步操作，要等接口成功返回，才能执行下一行代码
       */
      const inSave = await this.saveColumnData(this.getColumnName(88), this.goodsOptionCrud);
      if (inSave) {
        this.$message.success("保存成功");
        //关闭窗口
        this.$refs.crud.$refs.dialogColumn.columnBox = false;
      }
    },
    //自定义列重置
    async resetColumn() {
      this.goodsOptionCrud = this.optionList;
      const inSave = await this.delColumnData(this.getColumnName(88), this.optionList);
      if (inSave) {
        this.$message.success("重置成功");
        this.$refs.crud.$refs.dialogColumn.columnBox = false;
      }
    },
    // 获得高度
    searchCriteriaSwitch(type) {
      if (type) {
        this.goodsOptionCrud.height = this.goodsOptionCrud.height - 230
      } else {
        this.goodsOptionCrud.height = this.goodsOptionCrud.height + 230
      }
      this.$refs.crud.getTableHeight()
    },
    //箱信息保存
    rowSave(row, index, done, loading) {
      done()
    },
    //箱信息选择车队
    getfleetIdT(data, row) {
      this.$set(row, 'fleetName', data.cname)
    },
    //搜索
    searchChange(params, done) {
      let data = params
      if (params.arrivalTime) {
        data.beginArrivalTime = params.arrivalTime[0]
        data.endArrivalTime = params.arrivalTime[1]
      }
      if (params.createTime) {
        data.beginCrateTime = params.createTime[0]
        data.endCrateTime = params.createTime[1]
      }
      delete data.arrivalTime
      delete data.createTime
      this.onLoad(this.page, params)
      done();
    },
    //切换订单状态
    handleClick(tab) {
      this.activeName = tab
      this.onLoad(this.page)
    },
    //查询
    onLoad(page, params) {
      motorcadeDriver(4).then(res=>{
        this.totalData = res.data.data
      })
      let queryParams = {
        size: page.pageSize,
        current: page.currentPage,
        tag: '4',
        ...params
      }
      this.loading = true;
      driverQueryCollection(queryParams).then(res => {
        this.goodsList = res.data.data.records
        this.page.total = res.data.data.total
        this.goodsOptionCrud.height = window.innerHeight - 345;
      }).finally(() => {
        this.loading = false;
      })
    },
    //箱信息保存
    rowSaveT(row, index, done, loading) {
      if (row.$cellEdit){
        fleetDriverSave(row).then(res=>{
          this.$message.success("保存成功");
        })
      }
      this.$refs.crud.rowCell(row, index)
    },
    //箱信息派车
    designate(row) {
      this.$confirm('是否确定受理', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        acceptanceCollection(row).then(res => {
          this.$message.success('操作成功');
          this.onLoad(this.page)
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消'
        });
      });
    },
    //取消派车
    cancelDesignate(row) {
      this.$confirm('是否确定取消受理', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        acceptanceDispatchCollection({id: row.id}).then(res => {
          this.$message.success('操作成功');
          this.onLoad(this.page)
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消'
        });
      });
    },
    confirmCompletion(row) {
      if (row.realArrivalTime){
        this.$confirm('是否确定完工', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          confirmCompletion({id: row.id}).then(res => {
            this.$message.success('操作成功');
            this.onLoad(this.page)
          })
        }).catch(() => {
          this.$message({
            type: 'info',
            message: '已取消'
          });
        });
      }else {
        this.$message({
          type: 'warning',
          message: '请选择实际到厂时间！'
        });
      }
    },
    suitcase(row){
      this.$confirm('是否确定提箱', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        borrow({id: row.id}).then(res => {
          this.$message.success('操作成功');
          this.onLoad(this.page)
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消'
        });
      });
    },
    confirmArrival(row) {
      this.$confirm('是否确定到厂', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        arrival({id: row.id}).then(res => {
          this.$message.success('操作成功');
          this.onLoad(this.page)
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消'
        });
      });
    },
    //打开附件
    annexOpen(row, index){
      this.dialogVisible = true
      this.form = row
      getAttachment({id:row.id}).then(res=>{
        console.log(res)
        this.orderList = res.data.data
      })
    },
    //保存
    saveAnnex(){
      saveAttached({
        id:this.form.id,
        fileList:this.orderList
      }).then(res=>{
        this.annexOpen(this.form)
      })
    },
    ToBreak (val) {
      if (val)return val.replace(/\n/g, '<br/>')
    }
  }
}
</script>

<style lang="scss" scoped>
.home-container {
  padding: 0px 5px 5px 5px;
  box-sizing: border-box;
  height: 100%;

  ::v-deep .el-card__body {
    padding: 10px 15px;
    font-size: 14px;
  }

  &__card {
    width: 100%;
    height: 100%;
  }

  .title {
    display: flex;
    justify-content: space-between;

    .right {
      display: flex;
      align-items: center;

      &_but {
        margin-right: 10px;
        border: 1px solid #409eff;
        width: 80px;
        border-radius: 3px;
        display: flex;

        &_left {
          width: 40px;
          text-align: center;
          color: #409eff;
          cursor: pointer;
        }

        &_right {
          width: 40px;
          text-align: center;
          color: #409eff;
          cursor: pointer;
        }

        &_active {
          color: #fff;
          background-color: #409eff;
        }
      }
    }
  }
}

.content {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 6vh;
  width: 80vw;

  .divider {
    display: block;
    height: 0px;
    width: 100%;
    border-top: 1px dashed #dcdfe6;
  }

  &-item {
    margin-left: 1vw;

    .card {
      width: 130px;
      display: flex;
      align-items: center;

      &-title {
        width: 40px;
        height: 40px;
        text-align: center;
        border-radius: 50%;
        font-size: 20px;
        font-weight: 600;
        display: flex;
        justify-content: center;
        align-items: center;

        span {
          line-height: 20px;
        }
      }

      &-title1 {
        color: #037fe1;
        background-color: rgba(3, 127, 225, 0.15);
      }

      &-title2 {
        color: #ffa21e;
        background-color: rgba(255, 162, 30, 0.15);
      }

      &-title3 {
        color: #fb5b60;
        background-color: rgba(251, 91, 96, 0.15);
      }

      &-title4 {
        color: #42bc6f;
        background-color: rgba(66, 188, 111, 0.15);
      }

      &-title5 {
        color: #14cde1;
        background-color: rgba(52, 149, 161, 0.15);
      }

      &-title6 {
        color: rgba(4, 66, 31, 0.63);
        background-color: rgba(66, 188, 111, 0.15);
      }

      &-content {
        padding-left: 1vw;
        display: flex;
        flex-direction: column;

        &-num {
          font-size: 20px;
          font-weight: 600;
        }

        &-text {
          color: #909399;
        }
      }
    }
  }
}
</style>
