preinstall.vue 29.3 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">
20
          <el-option v-for="item in stateOps" :label="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">
25
          <el-option v-for="item in filingOps" :label="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">
30
          <el-option v-for="item in declarationMethodOps" :label="item.label" :value="item.value" :key="item.value"></el-option>
huhaiiqng's avatar
huhaiiqng committed
31 32
        </el-select>
      </el-form-item>
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">
43
        <el-input v-model="queryParams.weightRatioMax" placeholder="请输入 大" clearable />
huhaiiqng's avatar
huhaiiqng committed
44
      </el-form-item>
45 46
      <el-form-item label="" prop="weightRatioMin">
        <el-input v-model="queryParams.weightRatioMin" placeholder="请输入 小" 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" />
123
                    <el-table-column :label="$t('订单号')" align="center" prop="orderNo" width="120">
huhaiqing's avatar
huhaiqing committed
124 125 126 127 128
                      <template slot-scope="scope">
                        <div>
                          {{scope.row.orderNo}}
                        </div>
                        <div style="color:blue;fontWeight:bold;">
129
                          {{ scope.row.isExternalWarehouse === 1 ? '(' +$t('外部仓')+')' : ''}}
huhaiqing's avatar
huhaiqing committed
130 131 132
                        </div>
                      </template>
                    </el-table-column>
133 134
                    <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
135 136 137 138
                      <template slot-scope="scope">
                        {{formatDate(scope.row.rucangTime)}}
                      </template>
                    </el-table-column>
139 140 141
                    <el-table-column :label="$t('品名')" align="center" prop="prodTitleZh" width="120" />
                    <el-table-column :label="$t('箱数')" align="center" prop="num" />
                    <el-table-column :label="$t('体积') + '/' + $t('重量') + '/' + $t('重货比')" align="center" width="140" prop="volumeWeight">
huhaiqing's avatar
huhaiqing committed
142
                      <template slot-scope="scope">
huhaiqing's avatar
huhaiqing committed
143 144
                        <p v-if="scope.row.volume">{{getTotlContent(scope.row,['volume'])}}</p>
                        <p v-if="scope.row.weight">{{getTotlContent(scope.row,['weight'])}}</p>
145
                        <p>{{getRatioMax(scope.row)}}</p>
huhaiqing's avatar
huhaiqing committed
146 147
                      </template>
                    </el-table-column>
148
                    <el-table-column :label="$t('报关方式')" align="center" prop="customsType" width="120">
huhaiqing's avatar
huhaiqing committed
149
                      <template slot-scope="scope">
150
                        <dict-tag :type="DICT_TYPE.ECW_CUSTOMS_TYPE" :value="scope.row.customsType" />
huhaiqing's avatar
huhaiqing committed
151 152
                      </template>
                    </el-table-column>
153
                    <el-table-column :label="$t('备案')" align="center" prop="productRecord" width="100">
huhaiqing's avatar
huhaiqing committed
154
                      <template slot-scope="scope">
155
                        <dict-tag :type="DICT_TYPE.BOX_SHIPPING_BRAND_TYPE" :value="scope.row.productRecord" />
huhaiqing's avatar
huhaiqing committed
156 157
                      </template>
                    </el-table-column>
158
                    <el-table-column :label="$t('操作')" align="center" width="160" class-name="small-padding fixed-width" fixed="right">
huhaiqing's avatar
huhaiqing committed
159
                      <template slot-scope="scope">
160 161
                        <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
162
                          <el-dropdown-menu slot="dropdown">
163 164 165
                            <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
166 167
                          </el-dropdown-menu>
                        </el-dropdown>
168
                        <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
169 170 171 172 173
                      </template>
                    </el-table-column>
                  </el-table>
                </div>
              </el-collapse-transition>
huhaiqing's avatar
huhaiqing committed
174 175
            </el-row>
          </el-scrollbar>
huhaiiqng's avatar
huhaiiqng committed
176 177 178 179
        </el-col>
        <!-- 待预装订单 -->
        <el-col :span="12">
          <el-row class="preinstall-title">
180
            <div class="table-label red-label">{{$t('待预装订单')}}</div>
huhaiiqng's avatar
huhaiiqng committed
181 182
            <div class="preinstall-title preinstalled">
              <div class="red-label">
183
                <p>{{$t('筛选后待预装数量')}}</p>
huhaiqing's avatar
huhaiqing committed
184
                <p>{{getTotlContent(unloadStatistics,['num'])}}</p>
huhaiiqng's avatar
huhaiiqng committed
185 186
              </div>
              <div class="red-label">
187
                <p>{{$t('方数')}}</p>
huhaiqing's avatar
huhaiqing committed
188
                <p>{{getTotlContent(unloadStatistics,['volume'])}}</p>
huhaiiqng's avatar
huhaiiqng committed
189 190
              </div>
              <div class="red-label">
191
                <p>{{$t('重量')}}</p>
huhaiqing's avatar
huhaiqing committed
192
                <p>{{getTotlContent(unloadStatistics,['weight'])}}</p>
huhaiiqng's avatar
huhaiiqng committed
193 194 195
              </div>
            </div>
          </el-row>
huhaiqing's avatar
huhaiqing committed
196
          <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
197
          <el-scrollbar style="height:calc(100% - 75px)">
198
            <el-row v-for="(item, index) in toBePreList" :key="index" class="tobePre-row">
huhaiqing's avatar
huhaiqing committed
199 200 201 202 203
              <el-row class="preinstall-title order-title">
                <div>
                  <p>{{item.orderNo}}</p>
                </div>
                <div>
204
                  <p>{{$t('发往')}}</p>
huhaiqing's avatar
huhaiqing committed
205 206 207
                  <p>{{item.destWarehouseName}}</p>
                </div>
                <div>
huhaiqing's avatar
huhaiqing committed
208
                  <p>
209
                    <dict-tag :type="DICT_TYPE.ECW_CUSTOMS_TYPE" :value="item.customsType" />
huhaiqing's avatar
huhaiqing committed
210
                  </p>
huhaiqing's avatar
huhaiqing committed
211 212
                </div>
                <div>
213
                  <p>{{$t('入仓时间')}}</p>
214
                  <p>{{formatDate(item.rucangTime)}}</p>
huhaiqing's avatar
huhaiqing committed
215 216
                </div>
                <div>
217
                  <p>{{$t('重货比')}}</p>
huhaiqing's avatar
huhaiqing committed
218 219
                  <p>{{item.weightRatio}}</p>
                </div>
220
                <div v-if="item.isExternalWarehouse === 1" style="color:blue;fontWeight:bold;">
221
                  <p>{{$t('外部仓')}}</p>
222
                </div>
huhaiqing's avatar
huhaiqing committed
223
                <div class="table-button">
224
                  <el-dropdown trigger="click" @command="(command)=>handleGoods('all',item,command)">
225
                    <el-button type="success" size="small" :disabled="isAudit">{{$t('预装全部')}}</el-button>
226
                    <el-dropdown-menu slot="dropdown" v-if="preList.sectionGoodList">
227 228 229
                      <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
230 231 232 233
                    </el-dropdown-menu>
                  </el-dropdown>
                </div>
              </el-row>
234
              <el-table v-loading="toBePreLoading" :data="item.boxOrderItemList" border show-summary :summary-method="getSummaries">
235
                <el-table-column type="index" align="center" :label="$t('序号')" width="50" />
huhaiqing's avatar
huhaiqing committed
236
                <el-table-column :label="$t('品名')" align="center" prop="prodTitleZh" />
237
                <el-table-column :label="$t('备案')" align="center" prop="brandType">
huhaiqing's avatar
huhaiqing committed
238
                  <template slot-scope="scope">
239
                    <dict-tag :type="DICT_TYPE.BOX_SHIPPING_BRAND_TYPE" :value="scope.row.brandType" />
huhaiqing's avatar
huhaiqing committed
240 241
                  </template>
                </el-table-column>
242 243
                <el-table-column :label="$t('箱数')" align="center" prop="num" />
                <el-table-column :label="$t('体积') +'/' + $t('重量')" align="center" prop="volumeWeight">
huhaiqing's avatar
huhaiqing committed
244
                  <template slot-scope="scope">
huhaiqing's avatar
huhaiqing committed
245 246
                    <p v-if="scope.row.volume">{{getTotlContent(scope.row,['volume'])}}</p>
                    <p v-if="scope.row.weight">{{getTotlContent(scope.row,['weight'])}}</p>
huhaiqing's avatar
huhaiqing committed
247 248
                  </template>
                </el-table-column>
249
                <el-table-column :label="$t('报关方式')" align="center" prop="">
250
                  <dict-tag :type="DICT_TYPE.ECW_CUSTOMS_TYPE" :value="item.customsType" />
251
                </el-table-column>
252
                <el-table-column :label="$t('包装类型')" align="center" prop="">
253
                  <template slot-scope="scope">
254
                    <dict-tag :type="DICT_TYPE.ECW_PACKAGING_TYPE" :value="scope.row.unit" />
255 256
                  </template>
                </el-table-column>
257
                <el-table-column :label="$t('材质')" align="center" prop="material">
huhaiqing's avatar
huhaiqing committed
258
                  <template slot-scope="scope">
259
                    <dict-tag :type="DICT_TYPE.ECW_PRODUCT_MATERIAL" :value="scope.row.material" />
huhaiqing's avatar
huhaiqing committed
260 261
                  </template>
                </el-table-column>
262
                <!-- <el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width">
huhaiqing's avatar
huhaiqing committed
263
                  <template slot-scope="scope">
264
                    <el-dropdown trigger="click" @command="(command)=>handleGoods('single',scope.row,command)">
265
                      <el-button type="primary" size="small">{{$t('预装')}}</el-button>
huhaiqing's avatar
huhaiqing committed
266 267 268 269 270
                      <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>
271
                </el-table-column> -->
huhaiqing's avatar
huhaiqing committed
272
              </el-table>
huhaiiqng's avatar
huhaiiqng committed
273
            </el-row>
huhaiqing's avatar
huhaiqing committed
274
          </el-scrollbar>
huhaiiqng's avatar
huhaiiqng committed
275 276 277 278 279
        </el-col>
      </el-row>
    </el-card>

    <!-- 操作员 -->
280
    <el-row style="margin-top: 15px" v-show="!isAudit">
huhaiiqng's avatar
huhaiiqng committed
281
      <el-row>
282
        <el-form ref="operatorForm" :model="operatorData" size="small" :inline="true" label-width="120px" :rules="rules">
283 284
          <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
285 286 287 288
          </el-form-item>
        </el-form>
      </el-row>
    </el-row>
huhaiqing's avatar
huhaiqing committed
289 290

    <!-- 审核流程 -->
huhaiqing's avatar
huhaiqing committed
291
    <el-row class="process-area">
huhaiqing's avatar
huhaiqing committed
292
      <div class="process">
293
        <div>{{$t('审批流程')}}</div>
294
        <work-flow xmlkey="shipment_preassemble" v-model="selectedUsers"></work-flow>
huhaiqing's avatar
huhaiqing committed
295
      </div>
huhaiqing's avatar
huhaiqing committed
296
      <div v-show="isAudit">
297 298 299
        <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
300
      </div>
huhaiqing's avatar
huhaiqing committed
301
      <div v-show="!isAudit">
302
        <el-button type="primary" @click="onSubmit">{{$t('提交申请')}}</el-button>
huhaiqing's avatar
huhaiqing committed
303
      </div>
huhaiqing's avatar
huhaiqing committed
304
    </el-row>
huhaiqing's avatar
huhaiqing committed
305

huhaiiqng's avatar
huhaiiqng committed
306 307 308 309 310
  </div>
</template>

<script>
import { DICT_TYPE } from "@/utils/dict";
huhaiqing's avatar
huhaiqing committed
311 312 313 314 315 316 317
import {
  secGoodsList,
  preloadPage,
  createSection,
  deleteSection,
  createGoods,
  deleteGoods,
318
  changeSection,
huhaiqing's avatar
huhaiqing committed
319
  approvalCreate,
huhaiqing's avatar
huhaiqing committed
320
  approvalCancel,
321
  loadRelationOrder,
huhaiqing's avatar
huhaiqing committed
322
} from "@/api/ecw/boxSea";
huhaiqing's avatar
huhaiqing committed
323
import userSelect from "./common/userSelect.vue";
324 325 326 327 328 329 330
import {
  formatDate,
  getTotlContent,
  serviceMsg,
  getCapacity,
  toReviewDetail,
} from "../utils";
huhaiqing's avatar
huhaiqing committed
331
import dayjs from "dayjs";
huhaiqing's avatar
huhaiqing committed
332
import WorkFlow from "@/components/WorkFlow";
333
import Decimal from "decimal.js";
huhaiiqng's avatar
huhaiiqng committed
334

huhaiqing's avatar
huhaiqing committed
335 336 337
/**
 * 预装
 */
huhaiiqng's avatar
huhaiiqng committed
338 339
export default {
  name: "preinstall",
huhaiqing's avatar
huhaiqing committed
340
  inheritAttrs: false,
huhaiqing's avatar
huhaiqing committed
341
  components: { userSelect, WorkFlow },
huhaiiqng's avatar
huhaiiqng committed
342 343 344 345
  data() {
    return {
      // 状态
      stateOps: [
346 347
        { value: "1", label: this.$t("拆单") },
        { value: "2", label: this.$t("关联单") },
huhaiiqng's avatar
huhaiiqng committed
348 349 350 351 352
      ],
      // 备案
      filingOps: this.getDictDatas(DICT_TYPE.COMMISSION_PRODUCT_APPROVAL),
      // 报关方式
      declarationMethodOps: this.getDictDatas(DICT_TYPE.ECW_CUSTOMS_TYPE),
huhaiqing's avatar
huhaiqing committed
353 354 355 356
      // 查询标识
      type: "",
      // 已预装 遮罩层
      preLoading: false,
357 358 359 360 361
      preList: {
        sectionGoodList: [],
        remainWeight: 0,
        remainVolume: 0,
      },
huhaiqing's avatar
huhaiqing committed
362 363 364 365 366 367 368
      // 选中行
      selectedRows: {},

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

huhaiiqng's avatar
huhaiiqng committed
371 372
      // 显示搜索条件
      showSearch: true,
huhaiqing's avatar
huhaiqing committed
373

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

        createGoods(params).then((res) => {
587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605
          const { data } = res;
          if(data.relationMsg) {
              const msg = data.relationMsg.replaceAll(',',"");
              this.$confirm(msg, this.$t("提示"), {
                type: "warning",
              })
                .then((_) => {
                  loadRelationOrder(data).then((res) => {
                    serviceMsg(res, this).then(() => {
                      this.queryAllData();
                    })
                  })
                })
                .catch((_) => {});
          } else {
            serviceMsg(res, this).then(() => {
              this.queryAllData();
            })
          }
huhaiqing's avatar
huhaiqing committed
606
        }).catch((res) => {
607
            if(res.code === 555) {
huhaiqing's avatar
huhaiqing committed
608 609
              const msg = res.msg && res.msg.replaceAll(',',"");
              this.$confirm(msg, this.$t("提示"), {
610 611 612 613 614 615 616 617 618 619 620
                type: "warning",
              })
                .then((_) => {
                  createGoods({...params, relationStatus: 1}).then((res) => {
                    serviceMsg(res, this).then(() => {
                      this.queryAllData();
                    })
                  })
                })
                .catch((_) => {});
            }
621
          });
huhaiqing's avatar
huhaiqing committed
622
      } else {
623 624 625 626 627 628 629 630
        let params = {
          secId: part.id,
          id: item.id,
        };
        changeSection(params).then((res) => {
          serviceMsg(res, this).then(() => {
            this.queryAllData();
          });
huhaiqing's avatar
huhaiqing committed
631
        });
632
      }
huhaiqing's avatar
huhaiqing committed
633 634 635 636 637
    },
    /* 删除订单 */
    deleteOrder(type, data) {
      let ids = [];
      if (type === "selected") {
638
        // 根据parid 构建的对象
huhaiqing's avatar
huhaiqing committed
639 640
        const rows = this.selectedRows[data.id] ?? [];
        if (!rows.length) {
641
          this.$message.error(this.$t("请选择订单"));
huhaiqing's avatar
huhaiqing committed
642 643
          return;
        }
644
        ids = rows.map((item) => item.id);
huhaiqing's avatar
huhaiqing committed
645 646 647
      }

      if (type === "row") {
648
        ids.push(data.id);
huhaiqing's avatar
huhaiqing committed
649 650 651 652 653 654 655 656 657 658 659
      }

      deleteGoods(ids).then((res) => {
        serviceMsg(res, this).then(() => {
          this.queryAllData();
        });
      });
    },
    /* 查询所有数据 */
    queryAllData() {
      this.pageParam.pageNo = 1;
huhaiqing's avatar
huhaiqing committed
660
      this.getSecGoods();
huhaiqing's avatar
huhaiqing committed
661
      this.getPreLoad();
huhaiqing's avatar
huhaiqing committed
662
    },
huhaiqing's avatar
huhaiqing committed
663
    /* 获取参数 */
664 665 666 667
    getParams() {
      const { rucangtime = [] } = this.queryParams;
      return {
        ...this.queryParams,
668
        ...this.$attrs.params,
huhaiqing's avatar
huhaiqing committed
669 670 671 672 673 674
        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],
675 676
      };
    },
huhaiqing's avatar
huhaiqing committed
677 678 679 680 681 682 683 684 685
    /* 关闭弹框 */
    closeDialog() {
      this.$emit("closeDialog");
    },
    /* 取消审核 */
    canclAudit() {
      const { currNode, shipmentObj } = this.$attrs;
      const { voName } = currNode;
      approvalCancel({
686
        applyReason: this.$t("取消审核"),
huhaiqing's avatar
huhaiqing committed
687 688 689 690 691 692 693 694
        id: shipmentObj[voName].id,
        shipmentId: shipmentObj.id,
      }).then((res) => {
        serviceMsg(res, this).then(() => {
          this.$emit("closeDialog", "submit");
        });
      });
    },
695 696 697 698 699
    jumpReviewDetail() {
      const { currNode, shipmentObj } = this.$attrs;
      toReviewDetail.apply(this, [shipmentObj[currNode.voName].bpmProcessId]);
      this.$emit("closeDialog");
    },
700 701 702 703 704
    getRatioMax(row) {
      let volume = row.volume ?? 0;
      let weight = row.weight ?? 0;
      return Decimal.div(volume, weight).toFixed(2);
    },
huhaiqing's avatar
huhaiqing committed
705
  },
huhaiiqng's avatar
huhaiiqng committed
706 707 708
};
</script>

huhaiqing's avatar
huhaiqing committed
709
<style lang="scss">
huhaiiqng's avatar
huhaiiqng committed
710
.preinstall {
huhaiqing's avatar
huhaiqing committed
711 712 713
  display: flex;
  flex-direction: column;

huhaiiqng's avatar
huhaiiqng committed
714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743
  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
744 745
      font-size: 16px;
      font-weight: bolder;
huhaiiqng's avatar
huhaiiqng committed
746 747 748 749 750 751 752 753 754 755 756 757 758
    }
    .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
759
    height: calc(100% - 30px);
huhaiiqng's avatar
huhaiiqng committed
760 761 762 763 764 765 766 767
    > div {
      border: 1px solid #e6ebf5;
      padding: 10px 0px;
    }
    > div:first-child {
      margin-right: 10px;
    }
  }
huhaiqing's avatar
huhaiqing committed
768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786

  .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
787
    min-height: 550px;
huhaiqing's avatar
huhaiqing committed
788 789 790 791 792
    .el-card__body {
      height: 100%;

      .tobePre-row {
        margin-top: 10px;
793 794 795 796 797
        .el-table {
          .cell {
            white-space: pre-line;
          }
        }
huhaiqing's avatar
huhaiqing committed
798 799 800
      }
    }
  }
huhaiqing's avatar
huhaiqing committed
801 802 803 804 805 806 807 808 809 810 811 812 813 814

  .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
815 816
}
</style>