cargoControl.vue 15 KB
Newer Older
dragondean@qq.com's avatar
dragondean@qq.com committed
1 2 3 4 5
<template>
  <div class="app-container">

    <!-- 搜索工作栏 -->
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
6
      <el-form-item :label="$t('日期筛选')">
7
        <dict-selector defaultable :type="DICT_TYPE.ECW_BEGINTIME_TYPE_ENDTIME" v-model="dateFilterType" class="w-100 mr-10" />
dragondean@qq.com's avatar
dragondean@qq.com committed
8
        <el-date-picker v-model="dateFilter" type="daterange" range-separator="-"  :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')" value-format="yyyy-MM-dd HH:mm:ss" @change="handleQuery"></el-date-picker>
dragondean@qq.com's avatar
dragondean@qq.com committed
9
      </el-form-item>
dragondean@qq.com's avatar
dragondean@qq.com committed
10
      <el-form-item :label="$t('始发仓')" prop="startWarehouseId">
dragondean@qq.com's avatar
dragondean@qq.com committed
11
        <el-select v-model="queryParams.startWarehouseId" :placeholder="$t('请选择始发地')" clearable  @change="handleQuery">
dragondean@qq.com's avatar
dragondean@qq.com committed
12
          <el-option v-for="item in exportWarehouseList" :label="item.titleZh" :value="item.id" :key="item.id"></el-option>
dragondean@qq.com's avatar
dragondean@qq.com committed
13 14
        </el-select>
      </el-form-item>
dragondean@qq.com's avatar
dragondean@qq.com committed
15
      <el-form-item :label="$t('目的仓')" prop="destWarehouseId">
dragondean@qq.com's avatar
dragondean@qq.com committed
16
        <el-select v-model="queryParams.destWarehouseId" :placeholder="$t('请选择目的地')" clearable @change="handleQuery">
dragondean@qq.com's avatar
dragondean@qq.com committed
17
          <el-option v-for="item in importWarehouseList" :label="item.titleZh" :value="item.id" :key="item.id"></el-option>
dragondean@qq.com's avatar
dragondean@qq.com committed
18 19
        </el-select>
      </el-form-item>
20
      <el-form-item :label="$t('运输方式')" prop="transportId">
dragondean@qq.com's avatar
dragondean@qq.com committed
21
        <dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model.number="queryParams.transportId" clearable  @change="handleQuery"/>
dragondean@qq.com's avatar
dragondean@qq.com committed
22
      </el-form-item>
23 24
      <el-form-item :label="$t('订单编号')" prop="orderNo">
        <el-input v-model="queryParams.orderNo" :placeholder="$t('订单编号')" clearable @keyup.enter.native="handleQuery" />
dragondean@qq.com's avatar
dragondean@qq.com committed
25
      </el-form-item>
26
      <el-form-item :label="$t('品名')" prop="prodId">
dragondean@qq.com's avatar
dragondean@qq.com committed
27
        <product-selector v-model="queryParams.prodId" @keyup.enter.native="handleQuery" clearable  @change="handleQuery"/>
dragondean@qq.com's avatar
dragondean@qq.com committed
28
      </el-form-item>
29
      <el-form-item :label="$t('控货')" prop="isCargoControl">
dragondean@qq.com's avatar
dragondean@qq.com committed
30
        <dict-selector v-model="queryParams.isCargoControl" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" clearable  @change="handleQuery"/>
dragondean@qq.com's avatar
dragondean@qq.com committed
31
      </el-form-item>
32
      <el-form-item :label="$t('订单状态')" prop="status">
dragondean@qq.com's avatar
dragondean@qq.com committed
33
        <dict-selector :type="DICT_TYPE.PAY_ORDER_STATUS" v-model="queryParams.status" clearable  @change="handleQuery" />
dragondean@qq.com's avatar
dragondean@qq.com committed
34
      </el-form-item>
35 36
       <el-form-item :label="$t('提单号')" prop="tidanNo">
        <el-input v-model="queryParams.tidanNo" :placeholder="$t('提单号')" clearable @keyup.enter.native="handleQuery" />
dragondean@qq.com's avatar
dragondean@qq.com committed
37 38
      </el-form-item>
      <el-form-item label="发货人" prop="consignorId">
39
        <el-input v-model="queryParams.consignorId" :placeholder="$t('发货人')" clearable @keyup.enter.native="handleQuery" />
dragondean@qq.com's avatar
dragondean@qq.com committed
40 41
      </el-form-item>

42 43
      <el-form-item :label="$t('收货人')" prop="consigneeId">
        <el-input v-model="queryParams.consigneeId" :placeholder="$t('收货人')" clearable @keyup.enter.native="handleQuery" />
dragondean@qq.com's avatar
dragondean@qq.com committed
44 45
      </el-form-item>

46
      <el-form-item :label="$t('报关方式')" prop="customsType">
dragondean@qq.com's avatar
dragondean@qq.com committed
47
        <dict-selector :type="DICT_TYPE.ECW_CUSTOMS_TYPE" v-model="queryParams.customsType" clearable @change="handleQuery" />
dragondean@qq.com's avatar
dragondean@qq.com committed
48 49
      </el-form-item>
      
50
      <el-form-item :label="$t('唛头')" prop="marks">
dragondean@qq.com's avatar
dragondean@qq.com committed
51 52
        <el-input v-model="queryParams.marks" placeholder="唛头" clearable @keyup.enter.native="handleQuery" />
      </el-form-item>
dragondean@qq.com's avatar
dragondean@qq.com committed
53 54 55 56 57 58
      <el-form-item :label="$t('外部仓')" prop="number">
        <el-select v-model="queryParams.isExternalWarehouse" :placeholder="$t('请选择')" clearable @change="handleQuery">
          <el-option :label="$t('外部仓')" :value="1"></el-option>
          <el-option :label="$t('自有仓')" :value="0"></el-option>
        </el-select>
      </el-form-item>
dragondean@qq.com's avatar
dragondean@qq.com committed
59
      <el-form-item>
60
        <el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button>
dragondean@qq.com's avatar
dragondean@qq.com committed
61
        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
62
          :loading="exportLoading" v-hasPermi="['ecw:order:export']">{{$t('导出')}}</el-button>
dragondean@qq.com's avatar
dragondean@qq.com committed
63 64
      </el-form-item>
    </el-form>
dragondean@qq.com's avatar
dragondean@qq.com committed
65 66 67 68

    <!-- 操作工具栏 -->
    <el-row :gutter="10" class="mb8">
      <el-col :span="2">
69
        <el-button type="primary" plain icon="el-icon-setting" size="mini" :disabled="multiple" @click="batchReview">{{$t('批量复核')}}</el-button>
dragondean@qq.com's avatar
dragondean@qq.com committed
70 71 72
      </el-col>
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>
dragondean@qq.com's avatar
dragondean@qq.com committed
73 74 75 76 77
    
    <!-- 列表 -->
    <el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange">
      <el-table-column type="selection" width="55" align="center" />

78
      <el-table-column :label="$t('订单编号')" width="120px" align="center" prop="orderNo" >
dragondean@qq.com's avatar
dragondean@qq.com committed
79
        <template slot-scope="scope">
80
          <router-link :to="`detail?orderId=` + scope.row.orderId">{{ scope.row.orderNo }}</router-link>
dragondean@qq.com's avatar
dragondean@qq.com committed
81 82
        </template>
      </el-table-column>
83
      <el-table-column :label="$t('唛头')" align="center" prop="marks" />
dragondean@qq.com's avatar
dragondean@qq.com committed
84 85 86 87 88
      <el-table-column :label="$t('箱数')" align="center" prop="sumNum" >
        <template v-slot="{row}">
          {{row.inWarehouseState > 1 ? row.sumNum : row.totalNum}}
        </template>
      </el-table-column>
89
      <el-table-column :label="$t('已放箱数')" align="center" prop="sumWeight">
90
        <template slot-scope="{row}">{{row.releaseNum}}</template>
dragondean@qq.com's avatar
dragondean@qq.com committed
91
      </el-table-column>
92
      <el-table-column :label="$t('订单状态')" align="center" prop="status">
dragondean@qq.com's avatar
dragondean@qq.com committed
93 94 95 96
        <template slot-scope="scope">
          <dict-tag :type="DICT_TYPE.ORDER_STATUS" :value="scope.row.status" />
        </template>
      </el-table-column>
97
      <el-table-column :label="$t('提单号')" align="center" prop="status">
dragondean@qq.com's avatar
dragondean@qq.com committed
98 99 100 101
        <template slot-scope="scope">
          {{scope.row.tidanNo}}
        </template>
      </el-table-column>
102
      <el-table-column :label="$t('放货人')" align="center" prop="sumWeight">
103
        <template slot-scope="{row}">{{row.cargoControlName}}</template>
dragondean@qq.com's avatar
dragondean@qq.com committed
104
      </el-table-column>
105
      <el-table-column :label="$t('控货状态')" align="center" prop="transportId">
dragondean@qq.com's avatar
dragondean@qq.com committed
106
        <template slot-scope="{row}">
107
          <template v-if="row.cargoControlStatus == 1 && row.isToReview">{{$t('放货中')}}</template>
dragondean@qq.com's avatar
dragondean@qq.com committed
108
          <dict-tag v-else :type="DICT_TYPE.CONTROL_GOODS_STATUS" :value="row.cargoControlStatus" />
dragondean@qq.com's avatar
dragondean@qq.com committed
109 110 111
        </template>
      </el-table-column>
      
112
      <el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width" width="150px">
dragondean@qq.com's avatar
dragondean@qq.com committed
113
        <template slot-scope="scope">
dragondean@qq.com's avatar
dragondean@qq.com committed
114 115
          <!--控货中,已入仓-->
          <template v-if="[0,2].indexOf(scope.row.cargoControlStatus) > -1 && scope.row.sumNum > 0">
116 117
            <el-button type="text"  size="mini" @click="showReleaseOrderId=scope.row.orderId">{{$t('放货')}}</el-button>
            <el-button type="text"  size="mini" @click="showTransferOrder = scope.row" >{{$t('控货权转移')}}</el-button>
dragondean@qq.com's avatar
dragondean@qq.com committed
118
          </template>
dragondean@qq.com's avatar
dragondean@qq.com committed
119

dragondean@qq.com's avatar
dragondean@qq.com committed
120 121
          <!--部分控货-->
          <template v-if="scope.row.cargoControlStatus == 2">
122 123
            <el-button type="text"  size="mini" @click="toDetail(scope.row)" >{{$t('修改')}}</el-button>
            <el-button type="text"  size="mini" @click="toDetail(scope.row)" >{{$t('取消')}}</el-button>
dragondean@qq.com's avatar
dragondean@qq.com committed
124
            <el-button type="text"  size="mini" @click="review(scope.row)" v-if="scope.row.isToReview">{{$t('放货复核')}}</el-button>
dragondean@qq.com's avatar
dragondean@qq.com committed
125
          </template>
dragondean@qq.com's avatar
dragondean@qq.com committed
126 127 128 129

          <!--已全部放货,但是未复核-->
          <template v-if="scope.row.cargoControlStatus == 1 && scope.row.isToReview">
            <el-button type="text"  size="mini" @click="review(scope.row)">{{$t('放货复核')}}</el-button>
dragondean@qq.com's avatar
dragondean@qq.com committed
130 131
            <el-button type="text"  size="mini" @click="toDetail(scope.row)" >{{$t('修改')}}</el-button>
            <el-button type="text"  size="mini" @click="toDetail(scope.row)" >{{$t('取消')}}</el-button>
dragondean@qq.com's avatar
dragondean@qq.com committed
132 133
          </template>

dragondean@qq.com's avatar
dragondean@qq.com committed
134
          <!--已完成放货,且没有待复核;真正的放货完成-->
dragondean@qq.com's avatar
dragondean@qq.com committed
135 136 137 138 139
          <template v-if="scope.row.cargoControlStatus == 1 && !scope.row.isToReview">
            <!-- <el-button type="text"  size="mini" @click="toDetail(scope.row)" >{{$t('查看')}}</el-button> -->
            <el-button type="text"  size="mini" @click="cargoTransfer(scope.row)" >{{$t('调货')}}</el-button>
            <el-button type="text"  size="mini" @click="showFallbackOrder=scope.row" v-if="scope.row.isReleaseAfterGoods">{{$t('反复核')}}</el-button>
          </template>       
dragondean@qq.com's avatar
dragondean@qq.com committed
140
          <el-button type="text"  size="mini" @click="toDetail(scope.row)" >{{$t('查看')}}</el-button>
dragondean@qq.com's avatar
dragondean@qq.com committed
141 142 143 144 145 146 147
        </template>
      </el-table-column>
    </el-table>
    <!-- 分页组件 -->
    <pagination v-show="total > 0" :total="total" :page.sync="queryParams.page" :limit.sync="queryParams.rows"
      @pagination="getList" />

148 149
    <transfer       v-if="showTransferOrder"          v-bind="showTransferOrder"            @close="showTransferOrder=null" />
    <release        v-if="showReleaseOrderId"         :order-id="showReleaseOrderId"        @close="showReleaseOrderId=null"        @success="onReleaseSuccess" />
dragondean@qq.com's avatar
dragondean@qq.com committed
150
    <transfer-cargo v-if="showTransferCargoOrderId"   :order-id="showTransferCargoOrderId"  @close="showTransferCargoOrderId=null"  @success="onTransferCargoSuccess" :cargoControlPickId="pickInfo ? pickInfo.id : 0" />
151
    <fallback       v-if="showFallbackOrder !== null" :order="showFallbackOrder"            @close="showFallbackOrder=null"         @success="onFallbackSuccess" :index="null"   />
dragondean@qq.com's avatar
dragondean@qq.com committed
152 153 154 155 156 157 158 159
  </div>
</template>

<script>
import Selector from '@/components/Selector'
import ProductSelector from '@/components/ProductSelector'
import { getProductAttrList } from '@/api/ecw/productAttr'
import CustomerSelector from '@/components/CustomerSelector'
dragondean@qq.com's avatar
dragondean@qq.com committed
160
/* import { getTradeCityList } from '@/api/ecw/region' */
dragondean@qq.com's avatar
dragondean@qq.com committed
161 162
import Transfer from '@/views/ecw/order/components/Transfer'
import Release from './components/Release'
dragondean@qq.com's avatar
dragondean@qq.com committed
163
import CargoControlEdit from './components/CargoControlEdit'
dragondean@qq.com's avatar
dragondean@qq.com committed
164
import { getCargoControlOrderPage, batchReview, orderReview, getPickRleaseInfo } from "@/api/ecw/orderCargoControl"
165
import TransferCargo from '@/views/ecw/order/components/TransferCargo'
dragondean@qq.com's avatar
dragondean@qq.com committed
166
import Fallback from './components/Fallback'
dragondean@qq.com's avatar
dragondean@qq.com committed
167
import {getWarehouseList} from '@/api/ecw/warehouse'
dragondean@qq.com's avatar
dragondean@qq.com committed
168
export default {
dragondean@qq.com's avatar
dragondean@qq.com committed
169
  name: "EcwOrderCargonControl",
dragondean@qq.com's avatar
dragondean@qq.com committed
170
  components: {
dragondean@qq.com's avatar
dragondean@qq.com committed
171
    CustomerSelector, ProductSelector, Selector, Transfer, Release,CargoControlEdit, TransferCargo, Fallback
dragondean@qq.com's avatar
dragondean@qq.com committed
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
  },
  data() {
    return {
      // 选中数组
      ids: [],
      // 非单个禁用
      single: true,
      // 非多个禁用
      multiple: true,
      // 遮罩层
      loading: true,
      // 导出遮罩层
      exportLoading: false,
      // 显示搜索条件
      showSearch: true,
      // 总条数
      total: 0,
      // 订单列表
      list: [],
      // 弹出层标题
      title: "",
      // 查询参数
      queryParams: {
        page: 1,
        rows: 10
      },
      tradeCityList: [],
dragondean@qq.com's avatar
dragondean@qq.com committed
199
      warehouseList: [],
dragondean@qq.com's avatar
dragondean@qq.com committed
200 201 202 203 204
      productAttrList: [],  // 商品属性
      molecule: '', //重货比分子
      denominator: '', //重货比分母
      dateFilterType: '', //日期筛选类别
      dateFilter: [], //筛选日期
205
      showTransferOrder: null, // 控制权转移操作订单
dragondean@qq.com's avatar
dragondean@qq.com committed
206
      showReleaseOrderId: null, // 放货ID
207
      showTransferCargoOrderId: null, // 调货ID
dragondean@qq.com's avatar
dragondean@qq.com committed
208
      showFallbackOrder: null, // 调货订单
dragondean@qq.com's avatar
dragondean@qq.com committed
209
      pickInfo: null, // 当前操作的提货信息
dragondean@qq.com's avatar
dragondean@qq.com committed
210 211 212 213 214 215 216 217 218
    };
  },
  computed: {
    expoerCityList() {
      return this.tradeCityList.filter(item => item.type == 2)
    },
    importCityList() {
      return this.tradeCityList.filter(item => item.type == 1)
    },
dragondean@qq.com's avatar
dragondean@qq.com committed
219 220 221 222 223 224
    exportWarehouseList(){
      return this.warehouseList.filter(item => item.tradeType == 2 || item.tradeType == 3)
    },
    importWarehouseList(){
      return this.warehouseList.filter(item => item.tradeType == 1 || item.tradeType == 3)
    },
dragondean@qq.com's avatar
dragondean@qq.com committed
225 226 227 228 229 230 231 232 233
    combinedQueryParams(){
        let timeParams = {}
        if(this.dateFilterType && this.dateFilter){
          timeParams['begin' + this.dateFilterType] = this.dateFilter[0]
          timeParams['end' + this.dateFilterType] = this.dateFilter[1]
        }
        return Object.assign({}, this.queryParams, timeParams)
    }
  },
dragondean@qq.com's avatar
dragondean@qq.com committed
234 235 236
  activated(){
    this.handleQuery()
  },
dragondean@qq.com's avatar
dragondean@qq.com committed
237 238 239
  created() {
    this.getList();
    getProductAttrList().then(res => this.productAttrList = res.data)
dragondean@qq.com's avatar
dragondean@qq.com committed
240 241
    // getTradeCityList().then(res => this.tradeCityList = res.data)
    getWarehouseList().then(res => this.warehouseList = res.data)
dragondean@qq.com's avatar
dragondean@qq.com committed
242 243 244 245 246 247
  },
  methods: {
    /** 查询列表 */
    getList() {
      this.loading = true;
      // 执行查询
dragondean@qq.com's avatar
dragondean@qq.com committed
248
      getCargoControlOrderPage(this.combinedQueryParams).then(response => {
dragondean@qq.com's avatar
dragondean@qq.com committed
249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283
        this.list = response.data.list;
        this.total = response.data.total;
        this.loading = false;
      });
    },

    /** 搜索按钮操作 */
    handleQuery() {
      this.queryParams.pageNo = 1;
      this.getList();
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.resetForm("queryForm");
      this.handleQuery();
    },
    
    /** 导出按钮操作 */
    handleExport() {
      // 处理查询参数
      // 执行导出
      this.$modal.confirm('是否确认导出所有订单数据项?').then(() => {
        this.exportLoading = true;
        return exportOrderExcel(this.combinedQueryParams);
      }).then(response => {
        this.$download.excel(response, '${table.classComment}.xls');
        this.exportLoading = false;
      }).catch(() => { });
    },
    // 表格多选
    handleSelectionChange(selection) {
      this.ids = selection.map(item => item.orderId)
      this.single = selection.length !== 1
      this.multiple = !selection.length
    },
dragondean@qq.com's avatar
dragondean@qq.com committed
284 285 286
    toDetail(row){
      this.$router.push('cargo_control/detail?id=' + row.orderId)
    },
dragondean@qq.com's avatar
dragondean@qq.com committed
287 288
    // 复核
    review(row){
dragondean@qq.com's avatar
dragondean@qq.com committed
289 290 291 292
        // 未放货完成则打开详情,已完成放货则弹窗
        if(row.releaseNum < row.sumNum){
          return this.toDetail(row)
        }
dragondean@qq.com's avatar
dragondean@qq.com committed
293 294
        this.$confirm('已核实放货信息,确认放货?')
            .then(res => {
dragondean@qq.com's avatar
dragondean@qq.com committed
295 296 297 298 299
                return orderReview(row.orderId)
            })
            .then(res => {
              this.$message.success('操作成功')
              this.handleQuery()
dragondean@qq.com's avatar
dragondean@qq.com committed
300
            })
dragondean@qq.com's avatar
dragondean@qq.com committed
301
    },
dragondean@qq.com's avatar
dragondean@qq.com committed
302 303
    // 批量复核
    batchReview(){
304
      this.$confirm(this.$t('确定复核选中的订单么?')).then(() => {
dragondean@qq.com's avatar
dragondean@qq.com committed
305
        return batchReview("orderIds=" + this.ids.join(','))
dragondean@qq.com's avatar
dragondean@qq.com committed
306
      }).then(() => {
307
        this.$message.success(this.$t('操作成功'))
dragondean@qq.com's avatar
dragondean@qq.com committed
308 309 310
        this.handleQuery()
      })
    },
dragondean@qq.com's avatar
dragondean@qq.com committed
311 312 313 314 315 316 317 318 319
    cargoTransfer(row){
      getPickRleaseInfo(row.orderId).then(res => {
        if(res.data.cargoControlPickBackVOList && res.data.cargoControlPickBackVOList.length > 1){
          this.toDetail(row)
        }
        this.pickInfo = res.data.cargoControlPickBackVOList[0]
        this.showTransferCargoOrderId=row.orderId
      })
    },
dragondean@qq.com's avatar
dragondean@qq.com committed
320 321 322
    onReleaseSuccess(){
      this.showReleaseOrderId = null
      this.handleQuery()
dragondean@qq.com's avatar
dragondean@qq.com committed
323 324 325
    },
    onFallbackSuccess(){
      this.showFallbackOrder = null
326 327
      this.handleQuery()
    },
328
    onTransferCargoSuccess(){
329 330
      this.showTransferCargoOrderId = null
      this.handleQuery()
dragondean@qq.com's avatar
dragondean@qq.com committed
331
    }
dragondean@qq.com's avatar
dragondean@qq.com committed
332 333 334
  }
};
</script>