cargoControl.vue 15.7 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" />
8
        <el-date-picker v-model="dateFilter" type="datetimerange" 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
      </el-form-item>
dragondean@qq.com's avatar
dragondean@qq.com committed
38 39
      <el-form-item :label="$t('发货人')" prop="consignorKey">
        <el-input v-model="queryParams.consignorKey" :placeholder="$t('发货人')" clearable @keyup.enter.native="handleQuery" />
dragondean@qq.com's avatar
dragondean@qq.com committed
40 41
      </el-form-item>

dragondean@qq.com's avatar
dragondean@qq.com committed
42 43
      <el-form-item :label="$t('收货人')" prop="consigneeKey">
        <el-input v-model="queryParams.consigneeKey" :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
      </el-form-item>
49

50
      <el-form-item :label="$t('唛头')" prop="marks">
Marcus's avatar
Marcus committed
51
        <el-input v-model="queryParams.marks" :placeholder="$t('唛头')" clearable @keyup.enter.native="handleQuery" />
dragondean@qq.com's avatar
dragondean@qq.com committed
52
      </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 v-hasPermi="['ecw:cargo_control:batch_review']" 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>
73

dragondean@qq.com's avatar
dragondean@qq.com committed
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
        </template>
      </el-table-column>
111

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" v-hasPermi="['ecw:cargo_control:release']">{{$t('放货')}}</el-button>
            <el-button type="text"  size="mini" @click="showTransferOrder = scope.row"  v-hasPermi="['ecw:cargo_control:transfer']">{{$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 124
            <el-button type="text"  size="mini" @click="toDetail(scope.row)"  v-hasPermi="['ecw:cargo_control:update']">{{$t('修改')}}</el-button>
            <el-button type="text"  size="mini" @click="toDetail(scope.row)"  v-hasPermi="['ecw:cargo_control:cancel']">{{$t('取消')}}</el-button>
            <el-button type="text"  size="mini" @click="review(scope.row)" v-if="scope.row.isToReview" v-hasPermi="['ecw:cargo_control:review']">{{$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

          <!--已全部放货,但是未复核-->
          <template v-if="scope.row.cargoControlStatus == 1 && scope.row.isToReview">
129 130 131
            <el-button type="text"  size="mini" @click="review(scope.row)" v-hasPermi="['ecw:cargo_control:review']">{{$t('放货复核')}}</el-button>
            <el-button type="text"  size="mini" @click="toDetail(scope.row)"  v-hasPermi="['ecw:cargo_control:update']">{{$t('修改')}}</el-button>
            <el-button type="text"  size="mini" @click="toDetail(scope.row)"  v-hasPermi="['ecw:cargo_control:cancel']">{{$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
          <template v-if="scope.row.cargoControlStatus == 1 && !scope.row.isToReview">
            <!-- <el-button type="text"  size="mini" @click="toDetail(scope.row)" >{{$t('查看')}}</el-button> -->
137 138
            <el-button type="text"  size="mini" @click="cargoTransfer(scope.row)"  v-hasPermi="['ecw:cargo_control:cargo_transfer']">{{$t('调货')}}</el-button>
            <el-button type="text"  size="mini" @click="showFallbackOrder=scope.row" v-if="scope.row.isReleaseAfterGoods" v-hasPermi="['ecw:cargo_control:fallback']">{{$t('反复核')}}</el-button>
139
          </template>
140
          <el-button type="text"  size="mini" @click="toDetail(scope.row)"  v-hasPermi="['ecw:cargo_control:show']">{{$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'
164
import { getCargoControlOrderPage, batchReview, orderReview, getPickRleaseInfo, exportCargoControl } 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 {
169
  name: "EcwOrderCargocontrol",
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 => {
249 250 251 252 253 254 255
        this.list = []
        // 直接更细数据,可能因为elTable的部分渲染产生bug,比如权限控制异常
        this.$nextTick( () => {
          this.list = response.data.list;
          this.total = response.data.total;
        })
        
dragondean@qq.com's avatar
dragondean@qq.com committed
256 257 258 259 260 261
        this.loading = false;
      });
    },

    /** 搜索按钮操作 */
    handleQuery() {
262
      this.queryParams.page = 1;
dragondean@qq.com's avatar
dragondean@qq.com committed
263 264 265 266 267 268 269
      this.getList();
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.resetForm("queryForm");
      this.handleQuery();
    },
270

dragondean@qq.com's avatar
dragondean@qq.com committed
271 272 273 274 275 276
    /** 导出按钮操作 */
    handleExport() {
      // 处理查询参数
      // 执行导出
      this.$modal.confirm('是否确认导出所有订单数据项?').then(() => {
        this.exportLoading = true;
277
        return exportCargoControl(this.combinedQueryParams);
dragondean@qq.com's avatar
dragondean@qq.com committed
278
      }).then(response => {
279
        this.$download.excel(response, this.$t('控货订单') + '.xlsx');
dragondean@qq.com's avatar
dragondean@qq.com committed
280 281 282 283 284 285 286 287 288
        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
289 290 291
    toDetail(row){
      this.$router.push('cargo_control/detail?id=' + row.orderId)
    },
dragondean@qq.com's avatar
dragondean@qq.com committed
292 293
    // 复核
    review(row){
dragondean@qq.com's avatar
dragondean@qq.com committed
294 295 296 297
        // 未放货完成则打开详情,已完成放货则弹窗
        if(row.releaseNum < row.sumNum){
          return this.toDetail(row)
        }
dragondean@qq.com's avatar
dragondean@qq.com committed
298 299
        this.$confirm('已核实放货信息,确认放货?')
            .then(res => {
dragondean@qq.com's avatar
dragondean@qq.com committed
300 301 302 303 304
                return orderReview(row.orderId)
            })
            .then(res => {
              this.$message.success('操作成功')
              this.handleQuery()
dragondean@qq.com's avatar
dragondean@qq.com committed
305
            })
dragondean@qq.com's avatar
dragondean@qq.com committed
306
    },
dragondean@qq.com's avatar
dragondean@qq.com committed
307 308
    // 批量复核
    batchReview(){
309
      this.$confirm(this.$t('确定复核选中的订单么?')).then(() => {
dragondean@qq.com's avatar
dragondean@qq.com committed
310
        return batchReview("orderIds=" + this.ids.join(','))
dragondean@qq.com's avatar
dragondean@qq.com committed
311
      }).then(() => {
312
        this.$message.success(this.$t('操作成功'))
dragondean@qq.com's avatar
dragondean@qq.com committed
313 314 315
        this.handleQuery()
      })
    },
dragondean@qq.com's avatar
dragondean@qq.com committed
316 317 318 319 320 321 322 323 324
    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
325 326 327
    onReleaseSuccess(){
      this.showReleaseOrderId = null
      this.handleQuery()
dragondean@qq.com's avatar
dragondean@qq.com committed
328 329 330
    },
    onFallbackSuccess(){
      this.showFallbackOrder = null
331 332
      this.handleQuery()
    },
333
    onTransferCargoSuccess(){
334 335
      this.showTransferCargoOrderId = null
      this.handleQuery()
dragondean@qq.com's avatar
dragondean@qq.com committed
336
    }
dragondean@qq.com's avatar
dragondean@qq.com committed
337 338 339
  }
};
</script>