preinstall.vue 31 KB
Newer Older
huhaiiqng's avatar
huhaiiqng committed
1
<template>
huhaiqing's avatar
huhaiqing committed
2
  <div class="preinstall">
huhaiiqng's avatar
huhaiiqng committed
3
    <!-- 搜索工作栏 -->
4
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="90px">
5 6
      <el-form-item :label="$t('入仓时间')" prop="rucangtime">
        <el-date-picker v-model="queryParams.rucangtime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange" range-separator="-" start-:placeholder="$t('开始日期')" end-:placeholder="$t('结束日期')" />
huhaiiqng's avatar
huhaiiqng committed
7
      </el-form-item>
8 9 10
      <el-form-item :label="$t('始发地')" prop="startWarehouseId">
        <el-select v-model="queryParams.startWarehouseId" :placeholder="$t('请选择始发地')" clearable size="small">
          <el-option v-for="item in exportWarehouseList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
huhaiiqng's avatar
huhaiiqng committed
11 12
        </el-select>
      </el-form-item>
13 14 15
      <el-form-item :label="$t('目的地')" prop="destWarehouseIdList">
        <el-select v-model="queryParams.destWarehouseIdList" :placeholder="$t('请选择目的地')" multiple clearable>
          <el-option v-for="item in importWarehouseList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
huhaiiqng's avatar
huhaiiqng committed
16 17
        </el-select>
      </el-form-item>
18 19
      <el-form-item :label="$t('状态')" prop="orderStatus">
        <el-select v-model="queryParams.orderStatus" :placeholder="$t('请选择状态')" clearable size="small">
huhaiqing's avatar
huhaiqing committed
20
          <el-option v-for="item in stateOps" :label="$l(item, 'label')" :value="item.value" :key="item.value"></el-option>
huhaiiqng's avatar
huhaiiqng committed
21 22
        </el-select>
      </el-form-item>
23 24
      <el-form-item :label="$t('备案')" prop="productRecord">
        <el-select v-model="queryParams.productRecord" :placeholder="$t('请选择备案')" clearable size="small">
huhaiqing's avatar
huhaiqing committed
25
          <el-option v-for="item in filingOps" :label="$l(item, 'label')" :value="item.value" :key="item.value"></el-option>
huhaiiqng's avatar
huhaiiqng committed
26 27
        </el-select>
      </el-form-item>
28 29
      <el-form-item :label="$t('报关方式')" prop="customsType">
        <el-select v-model="queryParams.customsType" :placeholder="$t('请选择报关方式')" clearable size="small">
huhaiqing's avatar
huhaiqing committed
30
          <el-option v-for="item in declarationMethodOps" :label="$l(item, 'label')" :value="item.value" :key="item.value"></el-option>
huhaiiqng's avatar
huhaiiqng committed
31 32
        </el-select>
      </el-form-item>
huhaiqing's avatar
huhaiqing committed
33 34
      <el-form-item :label="$t('待预装订单')" prop="toBePreOrderNo">
        <el-input v-model="queryParams.toBePreOrderNo" :placeholder="$t('请输入待预装订单')" clearable />
huhaiiqng's avatar
huhaiiqng committed
35
      </el-form-item>
36 37
      <el-form-item :label="$t('已预装单号')" prop="preOrderNo">
        <el-input v-model="queryParams.preOrderNo" :placeholder="$t('请输入已预装单号')" clearable />
huhaiiqng's avatar
huhaiiqng committed
38
      </el-form-item>
39 40
      <el-form-item :label="$t('品名')" prop="itemName">
        <el-input v-model="queryParams.itemName" :placeholder="$t('请输入品名')" clearable />
huhaiiqng's avatar
huhaiiqng committed
41
      </el-form-item>
42
      <el-form-item :label="$t('重货比')" prop="weightRatioMax">
huhaiqing's avatar
huhaiqing committed
43
        <el-input v-model="queryParams.weightRatioMax" :placeholder="$t('请输入 大')" clearable />
huhaiiqng's avatar
huhaiiqng committed
44
      </el-form-item>
45
      <el-form-item label="" prop="weightRatioMin">
huhaiqing's avatar
huhaiqing committed
46
        <el-input v-model="queryParams.weightRatioMin" :placeholder="$t('请输入 小')" clearable />
huhaiiqng's avatar
huhaiiqng committed
47 48 49
      </el-form-item>

      <el-form-item>
50 51 52
        <el-button type="primary" icon="el-icon-search" @click="handleQuery('pre')">{{$t('搜索已预装订单')}}</el-button>
        <el-button type="primary" icon="el-icon-search" @click="handleQuery('toBePre')">{{$t('搜索待预装订单')}}</el-button>
        <el-button icon="el-icon-refresh" @click="resetQuery">{{$t('重置')}}</el-button>
huhaiiqng's avatar
huhaiiqng committed
53 54 55 56 57
      </el-form-item>
    </el-form>

    <!-- 操作工具栏 -->
    <el-row :gutter="10">
58
      <right-toolbar :showSearch.sync="showSearch" @queryTable="handleQuery('toBePre')"></right-toolbar>
huhaiiqng's avatar
huhaiiqng committed
59 60 61
    </el-row>

    <!-- 表格 -->
62
    <el-card style="margin-top: 15px" class="preinstall-card">
huhaiiqng's avatar
huhaiiqng committed
63 64
      <el-row class="preinstall-title">
        <div>
65
          <p>{{$t('自编号')}}</p>
huhaiqing's avatar
huhaiqing committed
66
          <p>{{shipmentObj.selfNo}}</p>
huhaiiqng's avatar
huhaiiqng committed
67 68
        </div>
        <div>
69
          <p>{{$t('柜号')}}</p>
huhaiqing's avatar
huhaiqing committed
70
          <p>{{shipmentObj.cubNo}}</p>
huhaiiqng's avatar
huhaiiqng committed
71 72
        </div>
        <div>
73
          <p>{{$t('容量')}}</p>
74
          <p>{{calcCapacity}}</p>
huhaiiqng's avatar
huhaiiqng committed
75 76
        </div>
        <div>
77
          <p>{{$t('始发地')}}</p>
huhaiqing's avatar
huhaiqing committed
78
          <p>{{importCityName(shipmentObj.startWarehouseId)}}</p>
huhaiiqng's avatar
huhaiiqng committed
79 80
        </div>
        <div>
81
          <p>{{$t('目的地')}}</p>
huhaiqing's avatar
huhaiqing committed
82
          <p>{{importCityName(shipmentObj.destWarehouseId)}}</p>
huhaiiqng's avatar
huhaiiqng committed
83 84 85 86 87 88
        </div>
      </el-row>
      <el-row class="preinstall-table">
        <!-- 已预装订单 -->
        <el-col :span="12">
          <el-row class="preinstall-title">
89
            <div class="table-label">{{$t('已预装订单')}}</div>
huhaiiqng's avatar
huhaiiqng committed
90
            <div>
91
              <p>{{$t('总计')}}</p>
92
              <p>{{getTotlContent(preList.loadStatistics)}}</p>
huhaiiqng's avatar
huhaiiqng committed
93 94
            </div>
            <div class="red-label">
95
              <p>{{$t('可预装方数')}}</p>
96
              <p>{{preList.remainVolume}}</p>
huhaiiqng's avatar
huhaiiqng committed
97 98
            </div>
            <div class="red-label">
99
              <p>{{$t('重量')}}</p>
100
              <p>{{preList.remainWeight}}kg</p>
huhaiiqng's avatar
huhaiiqng committed
101 102
            </div>
            <div class="table-button">
103
              <el-button type="success" size="small" @click="addPart" :disabled="isAudit">{{$t('增加')}}</el-button>
huhaiiqng's avatar
huhaiiqng committed
104 105
            </div>
          </el-row>
huhaiqing's avatar
huhaiqing committed
106
          <el-scrollbar style="height:calc(100% - 43px)">
107
            <el-row v-for="(part, index) in preList.sectionGoodList" :key="index" class="pre-part">
huhaiqing's avatar
huhaiqing committed
108 109
              <el-row class="preinstall-title">
                <div class="pre-part-info">
110
                  <p>{{$t('第{index}部分', {index: index+1})}}</p>
huhaiqing's avatar
huhaiqing committed
111
                  <p>{{getTotlContent(part.secStatistics)}}</p>
huhaiqing's avatar
huhaiqing committed
112 113
                </div>
                <div class="table-button">
114 115 116
                  <el-button type="danger" size="small" @click="deletePart(part)" :disabled="isAudit">{{$t('删除部分')}}</el-button>
                  <el-button type="danger" size="small" @click="deleteOrder('selected', part)" :disabled="isAudit">{{$t('删除订单')}}</el-button>
                  <el-button type="primary" size="small" @click="foldTable(index, part)">{{part.fold ? $t('展开') : $t('收起')}}</el-button>
huhaiqing's avatar
huhaiqing committed
117 118
                </div>
              </el-row>
huhaiqing's avatar
huhaiqing committed
119 120
              <el-collapse-transition>
                <div v-show="!part.fold">
121 122
                  <el-table v-loading="preLoading" border :data="part.sectionGoodsList" @select="(selection)=>checkboxSelect(selection, part)" @select-all="(selection)=>checkboxSelect(selection, part)">
                    <el-table-column type="selection" align="center" width="55" fixed="left" />
huhaiqing's avatar
huhaiqing committed
123
                    <el-table-column :label="$t('序号')" align="center" prop="tidanNum" width="50" />
124
                    <el-table-column :label="$t('订单号')" align="center" prop="orderNo" width="120">
huhaiqing's avatar
huhaiqing committed
125 126 127 128 129
                      <template slot-scope="scope">
                        <div>
                          {{scope.row.orderNo}}
                        </div>
                        <div style="color:blue;fontWeight:bold;">
130
                          {{ scope.row.isExternalWarehouse === 1 ? '(' +$t('外部仓')+')' : ''}}
huhaiqing's avatar
huhaiqing committed
131 132 133
                        </div>
                      </template>
                    </el-table-column>
134 135
                    <el-table-column :label="$t('目的地')" align="center" prop="destWarehouseName" width="120" />
                    <el-table-column :label="$t('入仓时间')" align="center" prop="rucangTime" width="120">
huhaiqing's avatar
huhaiqing committed
136 137 138 139
                      <template slot-scope="scope">
                        {{formatDate(scope.row.rucangTime)}}
                      </template>
                    </el-table-column>
huhaiqing's avatar
huhaiqing committed
140 141 142 143 144
                    <el-table-column :label="$t('品名')" align="center" prop="" width="120">
                      <template slot-scope="{row}">
                        {{$l(row,'prodTitle')}}
                      </template>
                    </el-table-column>
145
                    <el-table-column :label="$t('箱数')" align="center" prop="warehouseInInfoVO.cartonsNum" />
146
                    <el-table-column :label="$t('体积') + '/' + $t('重量') + '/' + $t('重货比')" align="center" width="140" prop="volumeWeight">
huhaiqing's avatar
huhaiqing committed
147
                      <template slot-scope="scope">
148 149 150
                        <p v-if="scope.row.warehouseInInfoVO.volume">{{getTotlContent(scope.row.warehouseInInfoVO,['volume'])}}</p>
                        <p v-if="scope.row.warehouseInInfoVO.weight">{{getTotlContent(scope.row.warehouseInInfoVO,['weight'])}}</p>
                        <p>{{getRatioMax(scope.row.warehouseInInfoVO)}}</p>
huhaiqing's avatar
huhaiqing committed
151 152
                      </template>
                    </el-table-column>
153
                    <el-table-column :label="$t('报关方式')" align="center" prop="customsType" width="120">
huhaiqing's avatar
huhaiqing committed
154
                      <template slot-scope="scope">
155 156 157
                        <div :class="scope.row.customsType !== 1 ? 'custom_type_red' : ''">
                          <dict-tag :type="DICT_TYPE.ECW_CUSTOMS_TYPE" :value="scope.row.customsType" />
                        </div>
huhaiqing's avatar
huhaiqing committed
158 159
                      </template>
                    </el-table-column>
160
                    <el-table-column :label="$t('备案')" align="center" prop="productRecord" width="100">
huhaiqing's avatar
huhaiqing committed
161 162 163
                      <template slot-scope="{row}">
                        <template v-if="row.brandName">{{row.brandName}}</template>
                        <dict-tag v-else :type="DICT_TYPE.ECW_IS_BRAND" :value="row.feeType" />
huhaiqing's avatar
huhaiqing committed
164 165
                      </template>
                    </el-table-column>
166
                    <el-table-column :label="$t('操作')" align="center" width="160" class-name="small-padding fixed-width" fixed="right">
huhaiqing's avatar
huhaiqing committed
167
                      <template slot-scope="scope">
168 169
                        <el-dropdown trigger="click" @command="(command)=>handleGoods('single',scope.row,command)" :disabled="isAudit">
                          <el-button type="primary" size="small" icon="el-icon-edit-outline" circle :disabled="isAudit"></el-button>
huhaiqing's avatar
huhaiqing committed
170
                          <el-dropdown-menu slot="dropdown">
171 172 173
                            <el-dropdown-item :command="bPart" v-for="(bPart, index) in preList.sectionGoodList" :key="bPart.id" v-show="bPart.id !== part.id">
                              {{$t('第{index}部分', {index: index+1})}}
                            </el-dropdown-item>
huhaiqing's avatar
huhaiqing committed
174 175
                          </el-dropdown-menu>
                        </el-dropdown>
176
                        <el-button type="danger" size="small" icon="el-icon-minus" circle style="margin-left:10px;" @click="deleteOrder('row',scope.row)" :disabled="isAudit"></el-button>
huhaiqing's avatar
huhaiqing committed
177 178 179 180 181
                      </template>
                    </el-table-column>
                  </el-table>
                </div>
              </el-collapse-transition>
huhaiqing's avatar
huhaiqing committed
182 183
            </el-row>
          </el-scrollbar>
huhaiiqng's avatar
huhaiiqng committed
184 185 186 187
        </el-col>
        <!-- 待预装订单 -->
        <el-col :span="12">
          <el-row class="preinstall-title">
188
            <div class="table-label red-label">{{$t('待预装订单')}}</div>
huhaiiqng's avatar
huhaiiqng committed
189 190
            <div class="preinstall-title preinstalled">
              <div class="red-label">
191
                <p>{{$t('筛选后待预装数量')}}</p>
huhaiqing's avatar
huhaiqing committed
192
                <p>{{getTotlContent(unloadStatistics,['num'])}}</p>
huhaiiqng's avatar
huhaiiqng committed
193 194
              </div>
              <div class="red-label">
195
                <p>{{$t('方数')}}</p>
huhaiqing's avatar
huhaiqing committed
196
                <p>{{getTotlContent(unloadStatistics,['volume'])}}</p>
huhaiiqng's avatar
huhaiiqng committed
197 198
              </div>
              <div class="red-label">
199
                <p>{{$t('重量')}}</p>
huhaiqing's avatar
huhaiqing committed
200
                <p>{{getTotlContent(unloadStatistics,['weight'])}}</p>
huhaiiqng's avatar
huhaiiqng committed
201 202 203
              </div>
            </div>
          </el-row>
huhaiqing's avatar
huhaiqing committed
204
          <el-pagination background layout="prev, pager, next" :current-page="pageParam.pageNo" :page-size="pageParam.pageSize" :total="total" @current-change="pageChange" v-show="total > 0"></el-pagination>
huhaiqing's avatar
huhaiqing committed
205
          <el-scrollbar style="height:calc(100% - 75px)">
206
            <el-row v-for="(item, index) in toBePreList" :key="index" class="tobePre-row">
huhaiqing's avatar
huhaiqing committed
207 208 209 210 211
              <el-row class="preinstall-title order-title">
                <div>
                  <p>{{item.orderNo}}</p>
                </div>
                <div>
212
                  <p>{{$t('发往')}}</p>
huhaiqing's avatar
huhaiqing committed
213 214 215
                  <p>{{item.destWarehouseName}}</p>
                </div>
                <div>
216
                  <p :class="item.customsType !== 1 ? 'custom_type_red' : ''">
217
                    <dict-tag :type="DICT_TYPE.ECW_CUSTOMS_TYPE" :value="item.customsType" />
huhaiqing's avatar
huhaiqing committed
218
                  </p>
huhaiqing's avatar
huhaiqing committed
219 220
                </div>
                <div>
221
                  <p>{{$t('入仓时间')}}</p>
222
                  <p>{{formatDate(item.rucangTime)}}</p>
huhaiqing's avatar
huhaiqing committed
223 224
                </div>
                <div>
225
                  <p>{{$t('重货比')}}</p>
huhaiqing's avatar
huhaiqing committed
226 227
                  <p>{{item.weightRatio}}</p>
                </div>
228
                <div v-if="item.isExternalWarehouse === 1" style="color:blue;fontWeight:bold;">
229
                  <p>{{$t('外部仓')}}</p>
230
                </div>
huhaiqing's avatar
huhaiqing committed
231
                <div class="table-button">
232
                  <el-dropdown trigger="click" @command="(command)=>handleGoods('all',item,command)">
233
                    <el-button type="success" size="small" :disabled="isAudit">{{$t('预装全部')}}</el-button>
234
                    <el-dropdown-menu slot="dropdown" v-if="preList.sectionGoodList">
235 236 237
                      <el-dropdown-item :command="part" v-for="(part, index) in preList.sectionGoodList" :key="part.id">
                        {{$t('第{index}部分', {index: index+1})}}
                      </el-dropdown-item>
huhaiqing's avatar
huhaiqing committed
238 239 240 241
                    </el-dropdown-menu>
                  </el-dropdown>
                </div>
              </el-row>
242
              <el-table v-loading="toBePreLoading" :data="item.boxOrderItemList" border show-summary :summary-method="getSummaries">
huhaiqing's avatar
huhaiqing committed
243
                <el-table-column type="index" align="center" :label="$t('序号')" width="50" />
huhaiqing's avatar
huhaiqing committed
244 245 246 247 248
                <el-table-column :label="$t('品名')" align="center" prop="">
                  <template slot-scope="{row}">
                    {{$l(row,'prodTitle')}}
                  </template>
                </el-table-column>
huhaiqing's avatar
huhaiqing committed
249 250
                <el-table-column :label="$t('备案')" align="center" prop="feeType">
                  <template slot-scope="{row}">
251 252 253
                    <template>{{row.brandName}}</template>{{ $t('(') }}
                    <dict-tag :type="DICT_TYPE.BRAND_CUSTOMER_CHARGING_MODEL" :value="row.feeType" />{{ $t('') }}
                  </template>
huhaiqing's avatar
huhaiqing committed
254
                </el-table-column>
255
                <el-table-column :label="$t('箱数')" align="center" prop="warehouseInInfoVO.cartonsNum" />
256
                <el-table-column :label="$t('体积') +'/' + $t('重量')" align="center" prop="volumeWeight">
huhaiqing's avatar
huhaiqing committed
257
                  <template slot-scope="scope">
258 259
                    <p v-if="scope.row.warehouseInInfoVO && scope.row.warehouseInInfoVO.volume">{{getTotlContent(scope.row.warehouseInInfoVO,['volume'])}}</p>
                    <p v-if="scope.row.warehouseInInfoVO && scope.row.warehouseInInfoVO.weight">{{getTotlContent(scope.row.warehouseInInfoVO,['weight'])}}</p>
huhaiqing's avatar
huhaiqing committed
260 261
                  </template>
                </el-table-column>
262
                <el-table-column :label="$t('报关方式')" align="center" prop="">
263 264 265
                  <div :class="item.customsType !== 1 ? 'custom_type_red' : ''">
                    <dict-tag :type="DICT_TYPE.ECW_CUSTOMS_TYPE" :value="item.customsType" />
                  </div>
266
                </el-table-column>
267
                <el-table-column :label="$t('包装类型')" align="center" prop="">
268
                  <template slot-scope="scope">
269
                    <dict-tag :type="DICT_TYPE.ECW_PACKAGING_TYPE" :value="scope.row.warehouseInInfoVO && scope.row.warehouseInInfoVO.unit" />
270 271
                  </template>
                </el-table-column>
Marcus's avatar
Marcus committed
272
                <el-table-column :label="$t('材质')" align="center" prop="material">{{ $t('') }}<template slot-scope="scope">
273
                    <dict-tag :type="DICT_TYPE.ECW_PRODUCT_MATERIAL" :value="scope.row.material" />
huhaiqing's avatar
huhaiqing committed
274 275
                  </template>
                </el-table-column>
276
                <!-- <el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width">
huhaiqing's avatar
huhaiqing committed
277
                  <template slot-scope="scope">
278
                    <el-dropdown trigger="click" @command="(command)=>handleGoods('single',scope.row,command)">
279
                      <el-button type="primary" size="small">{{$t('预装')}}</el-button>
huhaiqing's avatar
huhaiqing committed
280 281 282 283 284
                      <el-dropdown-menu slot="dropdown">
                        <el-dropdown-item :command="part" v-for="(part, index) in preList" :key="part.id">{{index+1}}部分</el-dropdown-item>
                      </el-dropdown-menu>
                    </el-dropdown>
                  </template>
285
                </el-table-column> -->
huhaiqing's avatar
huhaiqing committed
286
              </el-table>
huhaiiqng's avatar
huhaiiqng committed
287
            </el-row>
huhaiqing's avatar
huhaiqing committed
288
          </el-scrollbar>
huhaiiqng's avatar
huhaiiqng committed
289 290 291 292 293
        </el-col>
      </el-row>
    </el-card>

    <!-- 操作员 -->
294
    <el-row style="margin-top: 15px" v-show="!isAudit">
huhaiiqng's avatar
huhaiiqng committed
295
      <el-row>
296
        <el-form ref="operatorForm" :model="operatorData" size="small" :inline="true" label-width="120px" :rules="rules">
297 298
          <el-form-item :label="$t('目的地操作员')" prop="noticeUser">
            <userSelect v-model="operatorData.noticeUser" :placeholder="$t('请选择目的地操作员')" :allUsers="this.$attrs.allUsers" size="small" />
huhaiiqng's avatar
huhaiiqng committed
299 300 301 302
          </el-form-item>
        </el-form>
      </el-row>
    </el-row>
huhaiqing's avatar
huhaiqing committed
303 304

    <!-- 审核流程 -->
huhaiqing's avatar
huhaiqing committed
305
    <el-row class="process-area">
huhaiqing's avatar
huhaiqing committed
306
      <div class="process">
307
        <div>{{$t('审批流程')}}</div>
308
        <work-flow xmlkey="shipment_preassemble" v-model="selectedUsers"></work-flow>
huhaiqing's avatar
huhaiqing committed
309
      </div>
huhaiqing's avatar
huhaiqing committed
310
      <div v-show="isAudit">
311 312 313
        <el-button type="primary" @click="jumpReviewDetail">{{$t('审核中')}}</el-button>
        <el-button plain type="primary" @click="canclAudit">{{$t('取消审核')}}</el-button>
        <el-button plain type="primary" @click="closeDialog">{{$t('返回')}}</el-button>
huhaiqing's avatar
huhaiqing committed
314
      </div>
huhaiqing's avatar
huhaiqing committed
315
      <div v-show="!isAudit">
316
        <el-button type="primary" @click="onSubmit">{{$t('提交申请')}}</el-button>
huhaiqing's avatar
huhaiqing committed
317
      </div>
huhaiqing's avatar
huhaiqing committed
318
    </el-row>
huhaiqing's avatar
huhaiqing committed
319

huhaiiqng's avatar
huhaiiqng committed
320 321 322 323 324
  </div>
</template>

<script>
import { DICT_TYPE } from "@/utils/dict";
huhaiqing's avatar
huhaiqing committed
325 326 327 328 329 330 331
import {
  secGoodsList,
  preloadPage,
  createSection,
  deleteSection,
  createGoods,
  deleteGoods,
332
  changeSection,
huhaiqing's avatar
huhaiqing committed
333
  approvalCreate,
huhaiqing's avatar
huhaiqing committed
334
  approvalCancel,
335
  loadRelationOrder,
huhaiqing's avatar
huhaiqing committed
336
} from "@/api/ecw/boxSea";
huhaiqing's avatar
huhaiqing committed
337
import userSelect from "./common/userSelect.vue";
338 339 340 341 342 343 344
import {
  formatDate,
  getTotlContent,
  serviceMsg,
  getCapacity,
  toReviewDetail,
} from "../utils";
huhaiqing's avatar
huhaiqing committed
345
import dayjs from "dayjs";
huhaiqing's avatar
huhaiqing committed
346
import WorkFlow from "@/components/WorkFlow";
347
import Decimal from "decimal.js";
huhaiiqng's avatar
huhaiiqng committed
348

huhaiqing's avatar
huhaiqing committed
349 350 351
/**
 * 预装
 */
huhaiiqng's avatar
huhaiiqng committed
352 353
export default {
  name: "preinstall",
huhaiqing's avatar
huhaiqing committed
354
  inheritAttrs: false,
huhaiqing's avatar
huhaiqing committed
355
  components: { userSelect, WorkFlow },
huhaiiqng's avatar
huhaiiqng committed
356 357 358 359
  data() {
    return {
      // 状态
      stateOps: [
360 361
        { value: "1", label: this.$t("拆单") },
        { value: "2", label: this.$t("关联单") },
huhaiiqng's avatar
huhaiiqng committed
362 363
      ],
      // 备案
huhaiqing's avatar
huhaiqing committed
364
      filingOps: this.getDictDatas(DICT_TYPE.BRAND_CUSTOMER_CHARGING_MODEL),
huhaiiqng's avatar
huhaiiqng committed
365 366
      // 报关方式
      declarationMethodOps: this.getDictDatas(DICT_TYPE.ECW_CUSTOMS_TYPE),
huhaiqing's avatar
huhaiqing committed
367 368 369 370
      // 查询标识
      type: "",
      // 已预装 遮罩层
      preLoading: false,
371 372 373 374 375
      preList: {
        sectionGoodList: [],
        remainWeight: 0,
        remainVolume: 0,
      },
huhaiqing's avatar
huhaiqing committed
376 377 378 379 380 381 382
      // 选中行
      selectedRows: {},

      // 待预装
      toBePreLoading: false,
      toBePreList: [],
      total: 0,
383
      unloadStatistics: {},
huhaiqing's avatar
huhaiqing committed
384

huhaiiqng's avatar
huhaiiqng committed
385 386
      // 显示搜索条件
      showSearch: true,
huhaiqing's avatar
huhaiqing committed
387

huhaiiqng's avatar
huhaiiqng committed
388
      // 查询参数
huhaiqing's avatar
huhaiqing committed
389
      queryParams: {},
huhaiqing's avatar
huhaiqing committed
390
      pageParam: { pageNo: 1, pageSize: 10 },
huhaiiqng's avatar
huhaiiqng committed
391
      // 目的地操作员
huhaiqing's avatar
huhaiqing committed
392
      operatorData: {},
huhaiqing's avatar
huhaiqing committed
393
      // 校验
huhaiiqng's avatar
huhaiiqng committed
394
      rules: {
395
        noticeUser: [
396 397 398 399 400
          {
            required: true,
            message: this.$t("目的地操作员必填"),
            trigger: "change",
          },
401
        ],
huhaiiqng's avatar
huhaiiqng committed
402
      },
huhaiqing's avatar
huhaiqing committed
403 404
      // 出货信息
      shipmentObj: this.$attrs.shipmentObj,
huhaiqing's avatar
huhaiqing committed
405
      // 抄送人数组
huhaiqing's avatar
huhaiqing committed
406
      selectedUsers: [],
huhaiqing's avatar
huhaiqing committed
407 408
      // 智慧预装
      smartInstall: 1,
huhaiiqng's avatar
huhaiiqng committed
409 410 411
    };
  },
  computed: {
huhaiqing's avatar
huhaiqing committed
412
    /** 始发地 */
huhaiiqng's avatar
huhaiiqng committed
413
    exportWarehouseList() {
huhaiqing's avatar
huhaiqing committed
414
      return this.$attrs.warehouseList.filter(
huhaiiqng's avatar
huhaiiqng committed
415 416 417
        (item) => item.tradeType == "2" || item.type == "3"
      );
    },
huhaiqing's avatar
huhaiqing committed
418
    /** 目的地 */
huhaiiqng's avatar
huhaiiqng committed
419
    importWarehouseList() {
huhaiqing's avatar
huhaiqing committed
420
      return this.$attrs.warehouseList.filter(
huhaiiqng's avatar
huhaiiqng committed
421 422 423
        (item) => item.tradeType == "1" || item.type == "3"
      );
    },
huhaiqing's avatar
huhaiqing committed
424 425 426 427 428
    /* 是否审核中 */
    isAudit() {
      const { currNode, shipmentObj } = this.$attrs;
      return shipmentObj[currNode.keyName] === 23;
    },
429 430 431 432 433
    /* 容量 */
    calcCapacity() {
      const { cabinetRespVO } = this.$attrs.shipmentObj;
      return getCapacity(cabinetRespVO);
    },
huhaiiqng's avatar
huhaiiqng committed
434 435
  },
  created() {
huhaiqing's avatar
huhaiqing committed
436
    // 查询待预装
huhaiqing's avatar
huhaiqing committed
437
    this.handleQuery("toBePre");
438
    this.handleQuery("pre");
huhaiqing's avatar
huhaiqing committed
439
    this.smartInstall = 0;
huhaiiqng's avatar
huhaiiqng committed
440 441
  },
  methods: {
442
    formatDate,
huhaiqing's avatar
huhaiqing committed
443
    getTotlContent,
huhaiqing's avatar
huhaiqing committed
444 445
    /* 获取城市 */
    importCityName(id) {
huhaiqing's avatar
huhaiqing committed
446
      var arr = this.$attrs.warehouseList.filter((item) => item.id == id);
447
      return arr.length > 0 ? this.$l(arr[0], "title") : this.$t("");
huhaiqing's avatar
huhaiqing committed
448 449 450 451 452 453 454 455
    },
    /* 选中行 */
    checkboxSelect(selection, part) {
      this.selectedRows[part.id] = selection;
    },
    /* 查询已预装 */
    getSecGoods() {
      this.preLoading = true;
huhaiiqng's avatar
huhaiiqng committed
456
      // 处理查询参数
457
      let params = this.getParams();
huhaiqing's avatar
huhaiqing committed
458 459 460
      // 已预装单号
      params.orderNo = params.preOrderNo;
      params.shipmentId = this.shipmentObj.id;
huhaiqing's avatar
huhaiqing committed
461
      params.smartInstall = this.smartInstall;
huhaiqing's avatar
huhaiqing committed
462
      secGoodsList(params).then((res) => {
463 464 465 466 467 468 469 470 471 472 473 474 475
        if (res.data) {
          res.data.sectionGoodList.map((data) => {
            if (data.sectionGoodsList) {
              data.sectionGoodsList.map((data1) => {
                data1.warehouseInInfoVO = data1.warehouseInInfo
                  ? JSON.parse(data1.warehouseInInfo)
                  : {};
                return data1;
              });
            }
            return data;
          });
        }
huhaiqing's avatar
huhaiqing committed
476 477 478 479 480 481 482 483
        this.preList = res.data;
        this.preLoading = false;
      });
    },
    /* 查询待预装 */
    getPreLoad() {
      this.toBePreLoading = true;
      // 处理查询参数
484
      let params = this.getParams();
huhaiqing's avatar
huhaiqing committed
485 486 487
      // 订单号
      params.orderNo = params.toBePreOrderNo;
      preloadPage({ ...params, ...this.pageParam }).then((res) => {
488 489 490 491
        const { data } = res;
        this.toBePreList = data.dataList?.list ?? [];
        this.total = data.dataList?.total ?? 0;
        this.unloadStatistics = data.unloadStatistics ?? {};
huhaiqing's avatar
huhaiqing committed
492
        this.toBePreLoading = false;
huhaiiqng's avatar
huhaiiqng committed
493 494 495
      });
    },
    /** 搜索按钮操作 */
huhaiqing's avatar
huhaiqing committed
496 497 498 499 500 501 502
    handleQuery(type) {
      this.pageParam.pageNo = 1;
      if (type === "pre") {
        this.getSecGoods();
      } else {
        this.getPreLoad();
      }
huhaiiqng's avatar
huhaiiqng committed
503 504 505
    },
    /** 重置按钮操作 */
    resetQuery() {
506 507
      this.queryParams = {};
      this.$refs["queryForm"].resetFields();
huhaiiqng's avatar
huhaiiqng committed
508 509 510
    },
    /** 提交 */
    onSubmit() {
511 512 513
      this.$refs["operatorForm"].validate((valid, errors) => {
        if (!valid) {
          return this.$showFormValidateErrors(errors);
huhaiiqng's avatar
huhaiiqng committed
514
        }
515 516
        approvalCreate({
          ...this.operatorData,
517
          applyReason: this.$t("预装审核"),
518 519 520 521 522 523 524 525 526
          approvalStatus: 0,
          approvalType: 1, // 预装
          copyUserId: this.selectedUsers,
          shipmentId: this.$attrs.shipmentObj.id,
        }).then((res) => {
          serviceMsg(res, this).then(() => {
            this.$emit("closeDialog", "submit");
          });
        });
huhaiiqng's avatar
huhaiiqng committed
527 528
      });
    },
huhaiqing's avatar
huhaiqing committed
529 530 531 532 533 534
    /* 统计列 */
    getSummaries(param) {
      const { columns, data } = param;
      const sums = [];
      columns.forEach((column, index) => {
        if (column.property === "brandType") {
535
          sums[index] = this.$t("合计");
huhaiqing's avatar
huhaiqing committed
536 537 538
          return;
        }
        if (column.property === "num") {
539 540 541
          sums[index] = new Decimal(
            this.calcSum(column.property, data)
          ).toNumber();
huhaiqing's avatar
huhaiqing committed
542 543
        }
        if (column.property === "volumeWeight") {
544 545 546 547
          let volume = this.calcSum("volume", data);
          let weight = this.calcSum("weight", data);
          volume = volume === 0 ? volume : new Decimal(volume).toFixed(2);
          weight = weight === 0 ? weight : new Decimal(weight).toFixed(2);
huhaiqing's avatar
huhaiqing committed
548 549 550 551
          sums[index] = getTotlContent({ volume, weight }, [
            "volume",
            "weight",
          ]);
552
          sums[index] = sums[index].replace(" ", "\n");
huhaiqing's avatar
huhaiqing committed
553 554 555 556 557 558 559 560 561 562 563
        }
      });
      return sums;
    },
    /* 计算总和 */
    calcSum(key, data) {
      const values = data.map((item) => Number(item[key]));
      if (!values.every((value) => isNaN(value))) {
        return values.reduce((prev, curr) => {
          const value = Number(curr);
          if (!isNaN(value)) {
564
            return prev + curr;
huhaiqing's avatar
huhaiqing committed
565 566 567 568 569
          } else {
            return prev;
          }
        }, 0);
      }
570
      return 0;
huhaiqing's avatar
huhaiqing committed
571 572 573
    },
    /* 待预装订单分页 */
    pageChange(page) {
huhaiqing's avatar
huhaiqing committed
574
      this.pageParam.pageNo = page;
huhaiqing's avatar
huhaiqing committed
575 576 577 578 579
      this.getPreLoad();
    },
    /* 折叠 */
    foldTable(index, part) {
      part.fold = !part.fold;
580
      this.$set(this.preList.sectionGoodList, index, part);
huhaiqing's avatar
huhaiqing committed
581 582 583
    },
    /* 增加部分 */
    addPart() {
huhaiqing's avatar
huhaiqing committed
584 585 586 587 588 589 590
      createSection({ shipmentId: this.shipmentObj.id, isCover: 0 }).then(
        (res) => {
          serviceMsg(res, this).then(() => {
            this.getSecGoods();
          });
        }
      );
huhaiqing's avatar
huhaiqing committed
591 592 593
    },
    /* 删除部分 */
    deletePart(part) {
594 595 596 597 598 599 600
      this.$confirm(
        this.$t("确认删除该部分及其已预装订单?"),
        this.$t("提示"),
        {
          type: "warning",
        }
      )
huhaiqing's avatar
huhaiqing committed
601 602 603 604 605 606 607 608 609 610 611 612
        .then((_) => {
          deleteSection(part.id).then((res) => {
            serviceMsg(res, this).then(() => {
              this.getSecGoods();
            });
          });
        })
        .catch((_) => {});
    },
    /** 预装 */
    handleGoods(type, item, part) {
      if (type === "all") {
613 614 615 616 617 618 619 620 621
        let params = {
          secId: part.id,
          shipmentId: this.shipmentObj.id,
          orderId: item.orderId,
          orderItemIdList: item.boxOrderItemList.map(
            (data) => data.orderItemId
          ),
        };

622 623 624 625 626
        createGoods(params)
          .then((res) => {
            const { data } = res;
            if (data.relationMsg) {
              const msg = data.relationMsg.replaceAll(",", "");
627 628 629 630 631 632 633
              this.$confirm(msg, this.$t("提示"), {
                type: "warning",
              })
                .then((_) => {
                  loadRelationOrder(data).then((res) => {
                    serviceMsg(res, this).then(() => {
                      this.queryAllData();
634 635
                    });
                  });
636 637
                })
                .catch((_) => {});
638 639 640 641 642 643 644 645 646
            } else {
              serviceMsg(res, this).then(() => {
                this.queryAllData();
              });
            }
          })
          .catch((res) => {
            if (res.code === 555) {
              const msg = res.msg && res.msg.replaceAll(",", "");
huhaiqing's avatar
huhaiqing committed
647
              this.$confirm(msg, this.$t("提示"), {
648 649 650
                type: "warning",
              })
                .then((_) => {
651
                  createGoods({ ...params, relationStatus: 1 }).then((res) => {
652 653
                    serviceMsg(res, this).then(() => {
                      this.queryAllData();
654 655
                    });
                  });
656 657 658
                })
                .catch((_) => {});
            }
659
          });
huhaiqing's avatar
huhaiqing committed
660
      } else {
661 662 663 664 665 666 667 668
        let params = {
          secId: part.id,
          id: item.id,
        };
        changeSection(params).then((res) => {
          serviceMsg(res, this).then(() => {
            this.queryAllData();
          });
huhaiqing's avatar
huhaiqing committed
669
        });
670
      }
huhaiqing's avatar
huhaiqing committed
671 672 673 674 675
    },
    /* 删除订单 */
    deleteOrder(type, data) {
      let ids = [];
      if (type === "selected") {
676
        // 根据parid 构建的对象
huhaiqing's avatar
huhaiqing committed
677 678
        const rows = this.selectedRows[data.id] ?? [];
        if (!rows.length) {
679
          this.$message.error(this.$t("请选择订单"));
huhaiqing's avatar
huhaiqing committed
680 681
          return;
        }
682
        ids = rows.map((item) => item.id);
huhaiqing's avatar
huhaiqing committed
683 684 685
      }

      if (type === "row") {
686
        ids.push(data.id);
huhaiqing's avatar
huhaiqing committed
687 688 689 690 691 692 693 694 695 696 697
      }

      deleteGoods(ids).then((res) => {
        serviceMsg(res, this).then(() => {
          this.queryAllData();
        });
      });
    },
    /* 查询所有数据 */
    queryAllData() {
      this.pageParam.pageNo = 1;
huhaiqing's avatar
huhaiqing committed
698
      this.getSecGoods();
huhaiqing's avatar
huhaiqing committed
699
      this.getPreLoad();
huhaiqing's avatar
huhaiqing committed
700
    },
huhaiqing's avatar
huhaiqing committed
701
    /* 获取参数 */
702 703 704 705
    getParams() {
      const { rucangtime = [] } = this.queryParams;
      return {
        ...this.queryParams,
706
        ...this.$attrs.params,
huhaiqing's avatar
huhaiqing committed
707 708 709 710 711 712
        rucangTimeStart: rucangtime[0]
          ? dayjs(rucangtime[0]).format("YYYY-MM-DD 00:00:00")
          : rucangtime[0],
        rucangTimeEnd: rucangtime[1]
          ? dayjs(rucangtime[1]).format("YYYY-MM-DD 23:59:59")
          : rucangtime[1],
713 714
      };
    },
huhaiqing's avatar
huhaiqing committed
715 716 717 718 719 720 721 722 723
    /* 关闭弹框 */
    closeDialog() {
      this.$emit("closeDialog");
    },
    /* 取消审核 */
    canclAudit() {
      const { currNode, shipmentObj } = this.$attrs;
      const { voName } = currNode;
      approvalCancel({
724
        applyReason: this.$t("取消审核"),
huhaiqing's avatar
huhaiqing committed
725 726 727 728 729 730 731 732
        id: shipmentObj[voName].id,
        shipmentId: shipmentObj.id,
      }).then((res) => {
        serviceMsg(res, this).then(() => {
          this.$emit("closeDialog", "submit");
        });
      });
    },
733 734 735 736 737
    jumpReviewDetail() {
      const { currNode, shipmentObj } = this.$attrs;
      toReviewDetail.apply(this, [shipmentObj[currNode.voName].bpmProcessId]);
      this.$emit("closeDialog");
    },
738 739 740
    getRatioMax(row) {
      let volume = row.volume ?? 0;
      let weight = row.weight ?? 0;
huhaiqing's avatar
huhaiqing committed
741
      return Decimal.div(weight, volume).toFixed(2);
742
    },
huhaiqing's avatar
huhaiqing committed
743
  },
huhaiiqng's avatar
huhaiiqng committed
744 745 746
};
</script>

huhaiqing's avatar
huhaiqing committed
747
<style lang="scss">
huhaiiqng's avatar
huhaiiqng committed
748
.preinstall {
huhaiqing's avatar
huhaiqing committed
749 750 751
  display: flex;
  flex-direction: column;

huhaiiqng's avatar
huhaiiqng committed
752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781
  p {
    margin: 0;
  }
  .preinstall-title {
    display: flex;
    align-items: center;
    margin-bottom: 10px;
    padding: 0 10px;

    &.preinstalled {
      flex: 1;
      display: flex;
      justify-content: flex-end;
      > div {
        display: flex;
      }
    }

    &.order-title {
      margin-bottom: 0px;
      background-color: #e6ebf5;
      height: 45px;
    }

    > div {
      display: flex;
      margin-right: 10px;
    }

    .table-label {
huhaiqing's avatar
huhaiqing committed
782 783
      font-size: 16px;
      font-weight: bolder;
huhaiiqng's avatar
huhaiiqng committed
784 785 786 787 788 789 790 791 792 793 794 795 796
    }
    .red-label {
      color: red;
    }
    .table-button {
      flex: 1;
      margin: 0;
      display: flex;
      justify-content: flex-end;
    }
  }
  .preinstall-table {
    display: flex;
huhaiqing's avatar
huhaiqing committed
797
    height: calc(100% - 30px);
huhaiiqng's avatar
huhaiiqng committed
798 799 800 801 802 803 804 805
    > div {
      border: 1px solid #e6ebf5;
      padding: 10px 0px;
    }
    > div:first-child {
      margin-right: 10px;
    }
  }
huhaiqing's avatar
huhaiqing committed
806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824

  .pre-part {
    margin-bottom: 10px;
    margin-right: 10px;
    .pre-part-info {
      font-weight: bolder;
      > p:first-child {
        color: #13ce66;
        margin-right: 10px;
      }
      > p:last-child {
        > span {
          margin-right: 5px;
        }
      }
    }
  }

  .preinstall-card {
huhaiqing's avatar
huhaiqing committed
825
    min-height: 550px;
huhaiqing's avatar
huhaiqing committed
826 827 828 829 830
    .el-card__body {
      height: 100%;

      .tobePre-row {
        margin-top: 10px;
831 832 833 834 835
        .el-table {
          .cell {
            white-space: pre-line;
          }
        }
huhaiqing's avatar
huhaiqing committed
836 837 838
      }
    }
  }
huhaiqing's avatar
huhaiqing committed
839 840 841 842 843 844 845 846 847 848 849 850 851 852

  .process-area {
    margin-top: 15px;
    padding-bottom: 30px;
    .process {
      display: flex;
      flex-direction: column;
      > :first-child {
        color: #606266;
        font-weight: bolder;
        font-size: 16px;
      }
    }
  }
huhaiiqng's avatar
huhaiiqng committed
853 854
}
</style>