| <template> | 
|   <div ref="container" class="page-list-container"> | 
|     <!--数据Table--> | 
|     <yrt-data-list :ref="dataListRef" :editor-ref="editorRef" :data-options="dataOptions" :fields.sync="dataListOptions.fields" :buttons="dataListOptions.buttons" :button-click="buttonClick" :data-list-selections.sync="dataListSelections" :auth-nodes="authNodes" @on-super-reset="onSuperReset"> | 
|       <template slot="common-column-slot" slot-scope="{ row, col }"> | 
|   | 
|         <template v-if="col.prop == 'statusText'"> | 
|           <template> | 
|             <el-tag v-if="row[col.prop] == '新建'" color="#ffff33" style="color:black;border:0"> | 
|               {{ $refs[dataListRef].translateText( col.prop, row[col.prop], col.dropdown_Id ) }} | 
|             </el-tag> | 
|             <el-tag v-else-if="row[col.prop] == '部分出库'" color="#6699FF" style="color:black;border:0"> | 
|               {{ $refs[dataListRef].translateText( col.prop, row[col.prop], col.dropdown_Id ) }} | 
|             </el-tag> | 
|             <el-tag v-else-if="row[col.prop] == '已分配'" color="#6699FF" style="color:black;border:0"> | 
|               {{ $refs[dataListRef].translateText( col.prop, row[col.prop], col.dropdown_Id ) }} | 
|             </el-tag> | 
|             <el-tag v-else-if="row[col.prop] == '已完成'" color="#6699FF" style="color:black;border:0"> | 
|               {{ $refs[dataListRef].translateText( col.prop, row[col.prop], col.dropdown_Id ) }} | 
|             </el-tag> | 
|             <el-tag v-else-if="row[col.prop] == '待下架'" color="#ff0000" style="color:black;border:0;color:#fff;"> | 
|               {{ $refs[dataListRef].translateText( col.prop, row[col.prop], col.dropdown_Id ) }} | 
|             </el-tag> | 
|             <el-tag v-else-if="row[col.prop] == 5" color="#6699FF" style="color:black;border:0;color:#fff;"> | 
|               {{ $refs[dataListRef].translateText( col.prop, row[col.prop], col.dropdown_Id ) }} | 
|             </el-tag> | 
|             <span v-else> | 
|               {{ row[col.prop] }} | 
|             </span> | 
|           </template> | 
|         </template> | 
|         <!--分拣状态字段--> | 
|         <template v-else-if="col.prop == 'sortingStatus'"> | 
|           <template> | 
|             <el-tag v-if="row[col.prop] == 1" color="#ffff33" style="color:black;border:0"> | 
|               {{ $refs[dataListRef].translateText( col.prop, row[col.prop], col.dropdown_Id ) }} | 
|             </el-tag> | 
|             <el-tag v-else-if="row[col.prop] == 2" color="#00ff99" style="color:black;border:0"> | 
|               {{ $refs[dataListRef].translateText( col.prop, row[col.prop], col.dropdown_Id ) }} | 
|             </el-tag> | 
|             <el-tag v-else-if="row[col.prop] == 3" color="#ff0000" style="color:black;border:0;color:#fff;"> | 
|               {{ $refs[dataListRef].translateText( col.prop, row[col.prop], col.dropdown_Id ) }} | 
|             </el-tag> | 
|             <el-tag v-else-if="row[col.prop] == 5" color="#6699FF" style="color:black;border:0;color:#fff;"> | 
|               {{ $refs[dataListRef].translateText( col.prop, row[col.prop], col.dropdown_Id ) }} | 
|             </el-tag> | 
|             <span v-else> | 
|               {{ row[col.prop] }} | 
|             </span> | 
|           </template> | 
|         </template> | 
|         <!--连接字段--> | 
|         <template v-else-if="col.prop == dataOptions.linkColumn"> | 
|           <el-link type="primary" @click.native="() => {linkEditor(row[dataOptions.idField]);}">{{ row[col.prop] }}</el-link> | 
|         </template> | 
|         <template v-else-if="col.options && col.options.dropdown_Id > 0"> | 
|           {{ $refs[dataListRef].translateText( col.prop, row[col.prop], col.options.dropdown_Id ) }} | 
|         </template> | 
|         <template v-else> | 
|           <template v-if="['date', 'datetime'].indexOf(col.dataType)>=0 && col.formatter"> | 
|             {{ common.formatDate(row[col.prop], col.formatter) }} | 
|           </template> | 
|           <template v-else-if="['byte', 'int32', 'int64', 'decimal', 'double'].indexOf(col.dataType)>=0 && col.formatter"> | 
|             {{ common.formatNumber(row[col.prop], col.formatter) }} | 
|           </template> | 
|           <template v-else> | 
|             {{ row[col.prop] }} | 
|           </template> | 
|         </template> | 
|       </template> | 
|     </yrt-data-list> | 
|     <!--数据编辑器Editor--> | 
|     <yrt-editor :ref="editorRef" :data-list-ref="dataListRef" v-bind="editorOptions" :data-options="dataOptions" :action.sync="editorOptions.action" :top.sync="editorOptions.top" :visible.sync="editorOptions.config.visible" :default-value="defaultValue" :detail-button-click="detailButtonClick" :auth-nodes="authNodes" :btn-read-only="btnReadOnly" :detail-button-custom="true" :before-close="beforeClose" :use-detail-slot="['sortingStatus', 'lackStorage']" :on-save-before="onSaveBefore" :use-label-slot="useLabelSlot" @on-change="onChange" @on-item-click="(ref, val, itemData, field, formData)=>{onChange(ref, val, field, formData, itemData)}" @on-add-load-after="onAddLoadAfter" @on-edit-load-after="onEditLoadAfter" @on-detail-change="onDetailChange" @on-row-change="onRowChange" @on-load-dropdown-after="onLoadDropdownAfter" @on-save-after="onSaveAfter"> | 
|       <!--快递名称字段自定义标签插槽--> | 
|       <template slot="label-expressCorpName"> | 
|         快递名 | 
|         <a href="javascript:;" style="color:blue;" @click="updateExpressCorp(1)">修改</a> | 
|       </template> | 
|       <template slot="label-expressCode"> | 
|         快递号 | 
|         <a href="javascript:;" style="color:blue;" @click="updateExpressCode(1)">修改</a> | 
|       </template> | 
|       <template slot="label-feeItem_Ids"> | 
|         一次性收费项 | 
|         <a href="javascript:;" style="color:blue;" @click="showFeeTtemPopup()">修改</a> | 
|       </template> | 
|       <!--自定义字段插槽--> | 
|       <template slot="detail-column-slot" slot-scope="{ row, col }"> | 
|         <template v-if="col.prop == 'extendField03'"> | 
|           <detailstate-flow :load-options="stateLoadOptionsDetail" :where="{detailID: row.orderList_Id}"> | 
|             <template slot="content"> | 
|               <el-tag v-if="row[col.prop] == '新建'" color="#ffff33" style="color:black;border:0;cursor:pointer;"> | 
|                 {{ $refs[dataListRef].translateText( col.prop, row[col.prop], col.dropdown_Id ) }} | 
|               </el-tag> | 
|               <el-tag v-else-if="row[col.prop] == '待下架'" color="#00ff99" style="color:black;border:0;cursor:pointer;"> | 
|                 {{ $refs[dataListRef].translateText( col.prop, row[col.prop], col.dropdown_Id ) }} | 
|               </el-tag> | 
|               <el-tag v-else-if="row[col.prop] == '已分配'" color="green" style="color:black;border:0;color:#fff;cursor:pointer;"> | 
|                 {{ $refs[dataListRef].translateText( col.prop, row[col.prop], col.dropdown_Id ) }} | 
|               </el-tag> | 
|               <el-tag v-else-if="row[col.prop] == 5" color="#6699FF" style="color:black;border:0;color:#fff;cursor:pointer;"> | 
|                 {{ $refs[dataListRef].translateText( col.prop, row[col.prop], col.dropdown_Id ) }} | 
|               </el-tag> | 
|               <el-tag v-else-if="row[col.prop] == 3" color="#6699FF" style="color:black;border:0;color:#fff;cursor:pointer;"> | 
|                 {{ $refs[dataListRef].translateText( col.prop, row[col.prop], col.dropdown_Id ) }} | 
|               </el-tag> | 
|               <el-tag v-else-if="row[col.prop] == 6" color="#6699FF" style="color:black;border:0;color:#fff;cursor:pointer;"> | 
|                 {{ $refs[dataListRef].translateText( col.prop, row[col.prop], col.dropdown_Id ) }} | 
|               </el-tag> | 
|               <el-tag v-else-if="row[col.prop] == 7" color="#6699FF" style="color:black;border:0;color:#fff;cursor:pointer;"> | 
|                 {{ $refs[dataListRef].translateText( col.prop, row[col.prop], col.dropdown_Id ) }} | 
|               </el-tag> | 
|               <span v-else> | 
|                 {{ row[col.prop] }} | 
|               </span> | 
|             </template> | 
|           </detailstate-flow> | 
|         </template> | 
|       </template> | 
|       <!--自定义按钮插槽--> | 
|       <template slot="footer-button-region" slot-scope="{ formData }"> | 
|         <!--自定义审核按钮--> | 
|         <!-- <el-button :disabled="btnReadOnly.confirm" type="success" icon="el-icon-yrt-qiyong" @click.native="multiAuditing([formData])">审核</el-button> | 
|         <el-button :disabled="btnReadOnly.sorting" type="success" icon="el-icon-yrt-shuaxin" @click.native="multiBatchSort([formData])">分拣</el-button> --> | 
|       </template> | 
|     </yrt-editor> | 
|   | 
|     <!--明细选择器--> | 
|     <yrt-selector ref="selector-dialog" :config="selectorConfig" :visible.sync="selectorConfig.visible" @on-selected="onSelected"></yrt-selector> | 
|     <!--物料库存选择器--> | 
|     <yrt-selector ref="selector-position-dialog" :config="selectorPositionConfig" :visible.sync="selectorPositionConfig.visible" :url="selectorPositionConfig.url" @on-selected="onPositionSelected"></yrt-selector> | 
|     <!--更改快递公司--> | 
|     <el-dialog v-dialogDrag :visible.sync="expressDialogVisible" title="更改快递公司" width="500px"> | 
|       <el-form :label-width="formLabelWidth"> | 
|         <el-form-item label="快递类别"> | 
|           <el-select v-model="expressCorpType" filterable clearable placeholder="请选择快递类别" @change="changeExpressCorpType"> | 
|             <el-option v-for="(item, index) in expressCorpTypeList" :key="index" :label="item.name" :value="item.value"> | 
|             </el-option> | 
|           </el-select> | 
|         </el-form-item> | 
|         <el-form-item label="快递名称"> | 
|           <el-select v-model="expressCorpName" filterable clearable placeholder="请选择快递名称" @change="changeExpressCorp"> | 
|             <el-option v-for="(item, index) in expressCorpNameList" :key="index" :label="item.expressCorpName" :value="item.expressCorp_Id"> | 
|             </el-option> | 
|           </el-select> | 
|         </el-form-item> | 
|       </el-form> | 
|       <div slot="footer" class="dialog-footer"> | 
|         <el-button @click="expressDialogVisible=false">取 消</el-button> | 
|         <el-button type="primary" @click="updateExpressCorp(2)">确 定</el-button> | 
|       </div> | 
|     </el-dialog> | 
|     <el-dialog :visible.sync="dialogExpressCode" title="更改快递单号" width="500px"> | 
|       <el-form :label-width="formLabelWidth"> | 
|         <el-form-item label="快递单号" style="width:320px;"> | 
|           <el-input v-model="expressCode" type="text" placeholder="请输快递单号"></el-input> | 
|         </el-form-item> | 
|       </el-form> | 
|       <div slot="footer" class="dialog-footer"> | 
|         <el-button @click="dialogExpressCode=false">取 消</el-button> | 
|         <el-button type="primary" @click="updateExpressCode(2)">确 定</el-button> | 
|       </div> | 
|     </el-dialog> | 
|   | 
|     <!-- 设置订单明细分拣规则 --> | 
|     <el-dialog v-dialogDrag :visible.sync="winSortingRuleVisible" width="800px" title="设置订单明细分拣规则"> | 
|       <div class="dialog-info"> | 
|         <div class="dialog-left"> | 
|           <el-form :model="sortingRuleForm" label-width="120px"> | 
|             <el-form-item label="物料编号"> | 
|               <el-input v-model="sortingRuleForm.productCode" :readonly="true" type="text" placeholder="请输入物料编号"></el-input> | 
|             </el-form-item> | 
|             <el-form-item label="拣货货位"> | 
|               <el-input v-model="sortingRuleForm.positionName" type="text" placeholder="请输入出库货位名称"></el-input> | 
|             </el-form-item> | 
|             <!-- <el-form-item label="批次号"> | 
|               <el-input v-model="sortingRuleForm.batchNumber" type="text" placeholder="请输入批次号"></el-input> | 
|             </el-form-item> --> | 
|             <el-form-item label="生产日期"> | 
|               <el-date-picker v-model="sortingRuleForm.produceDate" type="date" placeholder="选择日期" value-format="yyyy-MM-dd" format="yyyy-MM-dd" style="width: 100%;"></el-date-picker> | 
|             </el-form-item> | 
|             <el-form-item label="托盘"> | 
|               <el-input v-model="sortingRuleForm.plateCode" type="text" placeholder="请输入拍号"></el-input> | 
|             </el-form-item> | 
|             <!-- <el-form-item label="唯一码"> | 
|               <el-input v-model="sortingRuleForm.singleSignCode" type="text" placeholder="请输入唯一码"></el-input> | 
|             </el-form-item> --> | 
|             <el-form-item> | 
|               <el-button type="primary" @click="submitSortingRuleData()">添加</el-button> | 
|               <detail-roleflow :load-options="productPositionDetail" :where="{productCode: sortingRuleForm.productCode, storage_Id: formData.storage_Id}"> | 
|                 <template slot="content"> | 
|                   <el-button type="primary">查看库存</el-button> | 
|                 </template> | 
|               </detail-roleflow> | 
|             </el-form-item> | 
|           </el-form> | 
|         </div> | 
|         <div class="dialog-right"> | 
|           <div v-if="sortingRuleList.length==0" class="tip"> | 
|             <p>[暂无规则]</p> | 
|           </div> | 
|           <div v-for="item in sortingRuleList" :key="item.rule_Id" class="tip"> | 
|             <p>物料编号:{{ item.productCode }} | 
|               <span class="deleteRule-span" style="float:right" @click="deleteRule(item.rule_Id)">[关闭] | 
|               </span> | 
|             </p> | 
|             <p v-if="item.positionName">拣货货位:{{ item.positionName }}</p> | 
|             <!-- <p v-if="item.batchNumber">批次号:{{ item.batchNumber }}</p> --> | 
|             <p v-if="item.produceDate">生产日期:{{ common.formatDate(item.produceDate, "yyyy-MM-dd") }}</p> | 
|             <p v-if="item.plateCode">托盘:{{ item.plateCode }}</p> | 
|             <!-- <p v-if="item.positionName">唯一码:{{ item.singleSignCode }}</p> --> | 
|           </div> | 
|         </div> | 
|       </div> | 
|       <div slot="footer" class="dialog-footer"> | 
|         <el-button @click="winSortingRuleVisible = false">关闭</el-button> | 
|         <!-- <el-button type="primary" @click="winSortingRuleVisible = false">添加</el-button> --> | 
|       </div> | 
|     </el-dialog> | 
|   | 
|     <!-- 合并单据 --> | 
|     <el-dialog :visible.sync="dialogOrderMerge" title="合并单据" width="500px"> | 
|       <el-form :label-width="formLabelWidth"> | 
|         <el-form-item label="请选择主订单" style="width:320px;"> | 
|           <el-radio-group v-model="mainid"> | 
|             <el-radio v-for="(item,index) in orderMergeList" :key="index" :label="item.orderCode"></el-radio> | 
|           </el-radio-group> | 
|         </el-form-item> | 
|       </el-form> | 
|       <div slot="footer" class="dialog-footer"> | 
|         <el-button @click="dialogOrderMerge=false">取 消</el-button> | 
|         <el-button type="primary" @click="addOrderMerge()">确 定</el-button> | 
|       </div> | 
|     </el-dialog> | 
|   | 
|     <!-- 拆分单据 --> | 
|     <el-dialog :visible.sync="dialogSplitOrder" title="拆分单据" width="800px"> | 
|       <el-form :label-width="formLabelWidth"> | 
|         <el-form-item style="width:90%;"> | 
|           <el-alert width="90%" title="提示:下面可改变需要拆分到新订单的实际数量。注意:拆单成功后,请及时审核,否则再次同步该订单,会覆盖该订单明细,导致明细重复。" type="info"> | 
|           </el-alert> | 
|           <el-table :data="splitDetails" style="width: 100%"> | 
|             <el-table-column prop="orderList_Id" label="明细id" width="180"> | 
|             </el-table-column> | 
|             <el-table-column prop="productModel" label="条形码" width="180"> | 
|             </el-table-column> | 
|             <el-table-column prop="quantityOrder" label="预出库数量"> | 
|               <template slot-scope="scope"> | 
|                 <el-form :model="scope.row"> | 
|                   <el-form-item prop="login"> | 
|                     <el-input v-show="true" v-model="scope.row.quantityOrder" placeholder="请输入拆分数量" /> | 
|                   </el-form-item> | 
|                 </el-form> | 
|               </template> | 
|             </el-table-column> | 
|           </el-table> | 
|         </el-form-item> | 
|       </el-form> | 
|       <div slot="footer" class="dialog-footer"> | 
|         <el-button @click="dialogSplitOrder=false">取 消</el-button> | 
|         <el-button type="primary" @click="addSplitOrder()">确 定</el-button> | 
|       </div> | 
|     </el-dialog> | 
|   | 
|     <!-- 明细导入 --> | 
|     <el-dialog :visible.sync="dialogLandingdetail" title="出库单明细批量导入"> | 
|       <el-form> | 
|         <el-upload ref="upload" :on-preview="handlePreviewdetail" :on-remove="handleRemovedetail" :on-success="handleSuccessdetail" :file-list="fileListdetail" :auto-upload="true" :action="detaliupLoadUrl()" :limit="1" class="upload-bill"> | 
|           <el-button slot="trigger" size="small" type="primary">选取文件</el-button> | 
|           <el-button style="margin-left: 10px;" size="small" type="success" @click="detailImport()">开始导入</el-button> | 
|           <el-button style="margin-left: 10px;" size="small" type="primary" plain> | 
|             <a :href="common.ossDomain+'/node-wms/template/出库单明细导入模板.xlsx'" style="color:while;font-size:12px;">下载模板</a> | 
|           </el-button> | 
|           <div slot="tip" class="el-upload__tip">只能上传扩展名为.xlsx的excel文件</div> | 
|         </el-upload> | 
|       </el-form> | 
|       <div class="margin-10" v-html="importMsg">{{ importMsg }}</div> | 
|       <div slot="footer" class="dialog-footer"> | 
|         <!-- <el-button type="primary" @click="EditlogLandingTimesave">确 定</el-button> --> | 
|       </div> | 
|     </el-dialog> | 
|   | 
|     <!-- 主表批量导入 --> | 
|     <import-dialog :visible.sync="orderImportConfig.isShowDialog" :import-config="orderImportConfig" :before-import-submit="beforeImportSubmit"> | 
|     </import-dialog> | 
|   | 
|     <!--一次性收费项--> | 
|     <el-dialog :visible.sync="isFeeTtemPopup" title="一次性收费项" width="500px"> | 
|       <el-form :label-width="formLabelWidth"> | 
|         <el-form-item label="一次性收费项"> | 
|           <el-select v-model="feeItem_Ids" multiple placeholder="请选择"> | 
|             <el-option v-for="item in feeTtemList" :key="item.value" :label="item.label" :value="item.value"> | 
|             </el-option> | 
|           </el-select> | 
|         </el-form-item> | 
|       </el-form> | 
|       <div slot="footer" class="dialog-footer"> | 
|         <el-button @click="isFeeTtemPopup=false">取 消</el-button> | 
|         <el-button type="primary" @click="modifyfeeItems()">确 定</el-button> | 
|       </div> | 
|     </el-dialog> | 
|     <!-- 新建 --> | 
|     <order-add ref="addDialog" :visible.sync="addVisible"></order-add> | 
|   | 
|   </div> | 
| </template> | 
|   | 
| <script> | 
| import baseLayout from "@/components/common/base-layout.vue"; | 
| import orderMixin from "./components/order-mixin.vue"; | 
| import orderMixinStatus from "./components/order-mixin-status.vue"; | 
| import orderMixinSelect from "./components/order-mixin-select.vue"; | 
| import orderMixinEvent from "./components/order-mixin-event.vue"; | 
| import orderMixinButton from "./components/order-mixin-button.vue"; | 
| import yrtSelector from "@/components/common/yrtSelector.vue"; | 
| import stateFlow from "@/components/common/components/stateflow.vue"; | 
| import detailstateFlow from "@/components/common/components/detailstateflow.vue"; | 
| import detailRoleflow from "@/components/common/components/detailRoleflow.vue"; | 
| import ImportDialog from "@/components/common/components/import-common-dialog"; | 
| import orderAdd from "./components/order-add.vue"; | 
| import { parseTime } from "@/utils"; | 
| // import returnVue from "../../inbound/purchase/return.vue"; | 
|   | 
| export default { | 
|   name: "outbound-sale-order", | 
|   components: { | 
|     yrtSelector, | 
|     stateFlow, | 
|     detailstateFlow, | 
|     detailRoleflow, | 
|     ImportDialog, | 
|     orderAdd | 
|   }, | 
|   mixins: [baseLayout, orderMixin, orderMixinStatus, orderMixinSelect, orderMixinEvent, orderMixinButton], | 
|   // 自定义处理权限函数 | 
|   doAuth(the) { | 
|     // 判断当前版本是否拥有导入权限 | 
|     var authList = [{ name: "出库单批量导入", auth: "allImport" }]; | 
|     const names = authList.map(item => { | 
|       return item.name; | 
|     }); | 
|     the.common.isSaaSAuth(names, res => { | 
|       authList.forEach(node => { | 
|         let hasAuth = res.result; | 
|         if (hasAuth) { | 
|           hasAuth = res.data.some(item => { | 
|             return item.moduleName === node.name; | 
|           }); | 
|         } | 
|         the.authNodes[node.auth] = hasAuth; | 
|       }); | 
|     }); | 
|   }, | 
|   data() { | 
|     return { | 
|       // 出库输送线ID | 
|       transList: [12, 19, 30, 34, 51, 64, 67], | 
|       taskForm: { | 
|         outTransId: "", | 
|         productStorage: 0, | 
|         validQty: 0, | 
|         orderType: "SAP生产订单" | 
|       }, | 
|       destinationList: [], | 
|       ALLdestinationList: [], | 
|       productList: [], | 
|       aLLproductList: [], | 
|       formLabelWidth: "120px", | 
|       dialogFormVisible: false, | 
|       // 明细拆分列表 | 
|       splitDetails: [], | 
|       // 表单默认值,新建时用 | 
|       defaultValue: { | 
|         statusID: 1, | 
|         statusText: "新建", | 
|         consignor_Id: 30, | 
|         consignorCode: "HZ20180002", | 
|         consignorName: "默认货主" | 
|       }, | 
|       form: { | 
|         storage_Id: null, | 
|         consignor_Id: null, | 
|         consignorName: null | 
|       }, | 
|       storageNames: [], | 
|       // 货主 | 
|       consignorNames: [], | 
|       // 编辑页面主表标签使用插槽的字段 | 
|       useLabelSlot: ["expressCorpName", "expressCode", "feeItem_Ids"], | 
|       sortingRuleForm: { | 
|         productCode: "", | 
|         positionName: "", | 
|         batchNumber: "", | 
|         produceDate: "", | 
|         plateCode: "", | 
|         singleSignCode: "" | 
|       }, | 
|       winSortingRuleVisible: false, | 
|       sortingRuleList: [], | 
|       selectRuleRow: null, | 
|       // 当前编辑数据 | 
|       formData: { | 
|         storage_Id: 87, | 
|         storageName: "立体库" | 
|       }, | 
|       // 出库单导入对话框参数 | 
|       orderImportConfig: { | 
|         // 显示导入对话框 | 
|         isShowDialog: false, | 
|         title: "出库单批量导入", | 
|         // 导入地址 | 
|         url: "/api/outbound/order/importExcel", | 
|         // 模板地址 | 
|         templateUrl: "https://auod-beijing.oss-cn-beijing.aliyuncs.com/node-wms/template/订单信息导入模板.xlsx" | 
|       }, | 
|       lackList: null, | 
|       // 出库区域 | 
|       orderExitList: [ | 
|         { | 
|           key: 1, | 
|           value: "西边焊接区" | 
|         }, | 
|         { | 
|           key: 2, | 
|           value: "西边分拣区" | 
|         }, | 
|         { | 
|           key: 4, | 
|           value: "东边分拣区" | 
|         }, | 
|         { | 
|           key: 5, | 
|           value: "东边冲压区" | 
|         } | 
|       ] | 
|     }; | 
|   }, | 
|   mounted() { | 
|     this.getStorageList(); | 
|     this.getConsignorList(); | 
|     this.getAllproductList(); | 
|     this.getAlldestinationList(); | 
|   }, | 
|   // 自定义初始化数据 | 
|   init(the) { | 
|     var userInfo = the.common.getUserInfo(); | 
|     // 设置经手人不是超级管理员,不允许编辑 | 
|     if (!userInfo.isAdministrator) { | 
|       the.editorOptions.fields.forEach(cols => { | 
|         cols.columns && | 
|           cols.columns.forEach(col => { | 
|             col.fields.forEach(item => { | 
|               if (item.options.prop === "userTrueName") { | 
|                 item.options.disabled = true; | 
|               } | 
|             }); | 
|           }); | 
|       }); | 
|     } | 
|   }, | 
|   methods: { | 
|     destinationChange() { | 
|       // 通过目的地寻找物料信息 | 
|       // var destination_Id = this.taskForm.destination_Id; | 
|       // var productList = this.aLLproductList.filter(v => v.destinationName.indexOf(destination_Id) !== -1); | 
|       // this.productList = JSON.parse(JSON.stringify(productList)); | 
|     }, | 
|     // 获取库存数据 | 
|     productChange() { | 
|       // 通过物料信息找出目的地 | 
|       var product_Id = this.taskForm.product_Id; | 
|       var productInfo = this.aLLproductList.find(v => v.product_Id === product_Id); | 
|       var destinations = productInfo.destinationName.split("/"); | 
|       var destinationList = this.ALLdestinationList.filter(v => destinations.some(x => parseInt(x) === parseInt(v.destination_Id))); | 
|       this.destinationList = destinationList; | 
|       this.taskForm.packingQuantity = productInfo.packingQuantity; | 
|       this.taskForm.orderType = productInfo.orderType; | 
|       // 合计库存数量 | 
|       this.getStockNumByProductId(); | 
|     }, | 
|     getStockNumByProductId() { | 
|       const url = "api/basicInfo/base/productInfo/getStockNumByProductId"; | 
|       const params = { id: this.taskForm.product_Id }; | 
|       var callback = res => { | 
|         if (res.result) { | 
|           this.taskForm.validQty = res.data.validQty; | 
|           this.taskForm.productStorage = res.data.productStorage; | 
|         } | 
|       }; | 
|       this.common.ajax(url, params, callback, true); | 
|     }, | 
|     getAllproductList() { | 
|       const url = "api/basicInfo/base/productInfo/getList"; | 
|       const params = {}; | 
|       var callback = res => { | 
|         if (res.result) { | 
|           this.aLLproductList = res.data; | 
|           this.productList = res.data; | 
|         } | 
|       }; | 
|       this.common.ajax(url, params, callback, true); | 
|     }, | 
|     // 获取目的地,焊装工位 | 
|     getAlldestinationList() { | 
|       const url = "api/basicInfo/base/destination/getList"; | 
|       const params = {}; | 
|       var callback = res => { | 
|         if (res.result) { | 
|           this.ALLdestinationList = res.data; | 
|           this.destinationList = res.data; | 
|           console.log(this.destinationList); | 
|         } | 
|       }; | 
|       this.common.ajax(url, params, callback, true); | 
|     }, | 
|     addNewOrder() { | 
|       const url = "api/outbound/order/addNewOrder"; | 
|       const params = { taskForm: this.taskForm }; | 
|       var callback = res => { | 
|         this.common.showMsg(res); | 
|         if (res.result) { | 
|           this.dataList.reload(); | 
|           this.dialogFormVisible = false; | 
|         } | 
|       }; | 
|       this.common.ajax(url, params, callback, true); | 
|     }, | 
|     // 列表页面按钮点击事件 | 
|     buttonClick(authNode) { | 
|       switch (authNode) { | 
|         // case "addOrder": | 
|         //   this.dialogFormVisible = true; | 
|         //   return true; | 
|         case "outCommand": | 
|           this.outCommand(); | 
|           return true; | 
|         case "delete": | 
|           // 删除 | 
|           this.delete(); | 
|           return false; | 
|         // case "quickOut": | 
|         //   this.quickOut(); | 
|       } | 
|     }, | 
|     // 一键出库 | 
|     quickOut() { | 
|       // 获得已选中的ID | 
|       var flag = false; | 
|       const ids = this.dataListSelections.map((item, index, Array) => { | 
|         if (item.statusText !== "下架中") { | 
|           flag = true; | 
|         } | 
|         if (item.sortingStatus !== 2) { | 
|           flag = true; | 
|         } | 
|         return item.order_Id; | 
|       }); | 
|       if (flag) { | 
|         this.$message({ | 
|           message: "只有已分配且下架中的可以进行一键出库", | 
|           type: "warning" | 
|         }); | 
|         return; | 
|       } | 
|       if (ids.length !== 1) { | 
|         this.$message({ | 
|           message: "请选中一行!", | 
|           type: "warning" | 
|         }); | 
|         return; | 
|       } | 
|       const ref = this.dataList; | 
|       var id = ids[0]; | 
|       const url = "api/outbound/order/QingqiQuickOut"; | 
|       const params = { | 
|         id: id | 
|       }; | 
|       var callback = res => { | 
|         this.common.showMsg(res); | 
|         if (res.result) { | 
|           ref.loadData(); | 
|         } | 
|       }; | 
|       this.common.ajax(url, params, callback, true); | 
|     }, | 
|     // 出库指令 | 
|     outCommand() { | 
|       var _this=this; | 
|       // 获得已选中的ID | 
|         const ids = this.dataListSelections.map((item, index, Array) => { | 
|           return item.order_Id; | 
|         }); | 
|         if(ids.length==0){ | 
|            this.$message({ | 
|           message: "请至少选中一行!", | 
|           type: "warning" | 
|         }); | 
|           return; | 
|         } | 
|         var valdiateResult=true; | 
|         this.dataListSelections.forEach(function(item,index){ | 
|           //debugger | 
|           //console.log(item.statusText); | 
|           if(item.statusText!='新建'){ | 
|               _this.$message({ | 
|           message: "非‘新建’状态的订单不能下发出库指令!", | 
|           type: "warning" | 
|         }); | 
|             valdiateResult=false; | 
|             return; | 
|           } | 
|   | 
|           if(item.outNumber<=0){ | 
|               _this.$message({ | 
|           message: "出库套数小于等于0,不能下发出库指令!", | 
|           type: "warning" | 
|         }); | 
|             valdiateResult=false; | 
|             return; | 
|           } | 
|            if(item.outNumber>item.materialCount){ | 
|               _this.$message({ | 
|           message: "出库套数大于套数,不能下发出库指令!", | 
|           type: "warning" | 
|         }); | 
|             valdiateResult=false; | 
|             return; | 
|           } | 
|         }); | 
|         if(!valdiateResult){ | 
|           return; | 
|         } | 
|       this.$confirm("您确定要发送出库指令给这"+ids.length+"条订单吗, 是否继续?", "提示", { | 
|         confirmButtonText: "确定", | 
|         cancelButtonText: "取消", | 
|         type: "warning" | 
|       }) | 
|         .then(() => { | 
|           submit(); | 
|         }) | 
|         .catch(() => { | 
|           this.$message({ | 
|             type: "info", | 
|             message: "已取消" | 
|           }); | 
|         }); | 
|   | 
|       const submit = () => { | 
|         // 获得已选中的ID | 
|         const ids = this.dataListSelections.map((item, index, Array) => { | 
|           return item.order_Id; | 
|         }); | 
|         const ref = this.dataList; | 
|         const url = "api/outbound/order/outCommand"; | 
|         const params = { ids: ids }; | 
|         var callback = res => { | 
|           this.common.showMsg(res); | 
|           if (res.result) { | 
|             ref.loadData(); | 
|           } | 
|         }; | 
|         this.common.ajax(url, params, callback, true); | 
|       }; | 
|     }, | 
|     // 缺料分析 | 
|     lackAnalysis() { | 
|       this.$confirm("确定要进行缺料分析吗, 是否继续?", "提示", { | 
|         confirmButtonText: "确定", | 
|         cancelButtonText: "取消", | 
|         type: "warning" | 
|       }) | 
|         .then(() => { | 
|           // submit(); | 
|           submit(); | 
|         }) | 
|         .catch(() => { | 
|           this.$message({ | 
|             type: "info", | 
|             message: "已取消" | 
|           }); | 
|         }); | 
|   | 
|       const submit = () => { | 
|         // 获得已选中的ID | 
|         // debugger; | 
|         // const ids = this.masterData.order_Id; | 
|         // const ref = this.dataList; | 
|         // const url = "/api/task/getLackList"; | 
|         // const params = { ids: ids }; | 
|         // var callback = res => { | 
|         //   this.common.showMsg(res); | 
|         //   if (res.result) { | 
|         //     ref.loadData(); | 
|   | 
|         //     window.open(this.common.domain + "/api/common/download?url=" + res.data.url); | 
|         //     this.editor.reload(); // 刷新编辑器数据 | 
|         //   } | 
|         // }; | 
|         // this.common.ajax(url, params, callback, true); | 
|   | 
|         const url = "/api/task/getLackList"; | 
|         const ids = this.masterData.orderCode; | 
|         const params = { | 
|           lackOrderId: ids | 
|         }; | 
|         var callback = res => { | 
|           if (res.result === true) { | 
|             this.lackList = res.data; | 
|              | 
|             if(this.lackList==null || this.lackList.length==0){//增加对无缺料信息的验证 【EditBy shaocx,2022-05-31】 | 
|               this.$message({ | 
|                  message: '无缺料信息', | 
|                  type: 'warning' | 
|               }); | 
|               return; | 
|             } | 
|   | 
|             this.exportExcel(res.statusCode); | 
|             return; | 
|           } else { | 
|             return this.$message.error("导出失败"); | 
|           } | 
|         }; | 
|         this.common.ajax(url, params, callback, true); | 
|       }; | 
|     }, | 
|     //导出缺货列表 | 
|     exportExcel(name) { | 
|       // import("@/vendor/Export2Excel") | 
|       //this.downloadLoading = true; | 
|       import("@/vendor/Export2Excel").then(excel => { | 
|         const tHeader = ["销售单号", "销售项号", "物料编号", "物料名称", "缺料数量", "暂存区数量", "立库区数量", "库存单位"]; | 
|         const filterVal = [ | 
|           "saleCode", | 
|           "saleCodeItem", | 
|           "materailCode", | 
|           "materailName", | 
|           "lackQuantity", | 
|           "temporaryQuantity", | 
|           "storageQuantity", | 
|           "storageUnit" | 
|         ]; | 
|         const data = this.formatJson(filterVal, this.lackList); | 
|         debugger; | 
|         excel.export_json_to_excelHead({ | 
|           header: tHeader, | 
|           headerTop: name, | 
|           data, | 
|           filename: name | 
|         }); | 
|         //this.downloadLoading = false; | 
|         this.lackList = null; | 
|       }); | 
|     }, | 
|     formatJson(filterVal, jsonData) { | 
|       return jsonData.map(v => | 
|         filterVal.map(j => { | 
|           if (j === "timestamp") { | 
|             return parseTime(v[j]); | 
|           } else { | 
|             return v[j]; | 
|           } | 
|         }) | 
|       ); | 
|     }, | 
|     onChange(ref, val, field, formData) { | 
|       if (field.options.prop === "outNumber") { | 
|         if (this.editor.detailFields[0].options.detailSelections.length < 1) { | 
|           this.$message.error("至少选中一行明细数据!"); | 
|           return false; | 
|         } | 
|         var datalist = ""; | 
|   | 
|         const rows = []; | 
|         datalist = this.editor.detailFields[0].options.detailSelections.forEach(rowData => { | 
|           rows.push(rowData); | 
|         }); | 
|         datalist; | 
|         const outNumber = this.editor.formData["outNumber"]; | 
|         if (outNumber < 0) { | 
|           this.$message({ | 
|             message: "出库套数不可小于0!", | 
|             type: "warning" | 
|           }); | 
|           return; | 
|         } | 
|         // this.editor.changeValue("expandFields", 11); | 
|         const materialCount = this.editor.formData["materialCount"]; | 
|         var detailRows = rows; | 
|         detailRows.forEach(item => { | 
|           const count = item.quantityShipped / materialCount; | 
|           item.quantityOrder = (count || 0) * (outNumber || 0); | 
|           item.__ischange__ = true; | 
|         }); | 
|       } | 
|       // if (field.options.prop === "email") { | 
|       //   const email = this.editor.formData["email"]; | 
|       //   if (email === 261) { | 
|       //     var productCodeField = this.editorOptions.fields[1].columns[0].fields[2]; | 
|       //     productCodeField.readonly = true; | 
|       //   } | 
|       // } | 
|     }, | 
|     // 将选择器选择中的数据填充到明细表中 | 
|     // onPositionSelected(rows) { | 
|     //   rows.forEach(item => { | 
|     //     item.containerNo = 1; | 
|     //   }); | 
|     //   this.editor.addDetailDataRow(rows); | 
|     //   this.selectorPositionConfig.visible = false; | 
|     // }, | 
|     // 获取所属仓库下拉框 | 
|     getStorageList() { | 
|       const url = "api/basicInfo/base/storage/getList"; | 
|       const params = {}; | 
|       var callback = res => { | 
|         if (res.result) { | 
|           this.storageNames = res.data; | 
|         } | 
|       }; | 
|       this.common.ajax(url, params, callback, true); | 
|     }, | 
|     // 获取货主名称下拉框 | 
|     getConsignorList() { | 
|       const url = "/api/basicInfo/base/consignor/getList"; | 
|       const params = { | 
|         openNodeApi: true | 
|       }; | 
|       var callback = res => { | 
|         if (res.result) { | 
|           this.consignorNames = res.data; | 
|         } | 
|       }; | 
|       this.common.ajax(url, params, callback); | 
|     }, | 
|     // 设置分拣规则 | 
|     setSortingRule(row) { | 
|       this.winSortingRuleVisible = true; | 
|       this.selectRuleRow = row; | 
|       this.sortingRuleForm.productCode = this.selectRuleRow["productCode"]; | 
|       this.getSortingRuleList(); | 
|     }, | 
|     // 获取分拣列表 | 
|     getSortingRuleList() { | 
|       const url = "/api/outbound/order/getSortingRule"; | 
|       var orderList_Id = this.selectRuleRow["orderList_Id"]; | 
|       const params = { orderList_Id: orderList_Id }; | 
|       var callback = res => { | 
|         if (res.result) { | 
|           this.sortingRuleList = res.data; | 
|         } | 
|       }; | 
|       this.common.ajax(url, params, callback, true); | 
|     }, | 
|     // 提交分拣规则 | 
|     submitSortingRuleData() { | 
|       var consignor_Id = this.editor.formData["consignor_Id"]; | 
|       var consignorCode = this.editor.formData["consignorCode"]; | 
|       var consignorName = this.editor.formData["consignorName"]; | 
|       var storage_Id = this.editor.formData["storage_Id"]; | 
|       var storageName = this.editor.formData["storageName"]; | 
|   | 
|       var order_Id = this.editor.formData["order_Id"]; | 
|       var orderCode = this.editor.formData["orderCode"]; | 
|       var positionName = this.sortingRuleForm.positionName; | 
|       var batchNumber = this.sortingRuleForm.batchNumber; | 
|       var produceDate = this.sortingRuleForm.produceDate; | 
|       var plateCode = this.sortingRuleForm.plateCode; | 
|       var singleSignCode = this.sortingRuleForm.singleSignCode; | 
|       var product_Id = this.selectRuleRow["product_Id"]; | 
|       var productCode = this.selectRuleRow["productCode"]; | 
|       var productName = this.selectRuleRow["productName"]; | 
|       var orderList_Id = this.selectRuleRow["orderList_Id"]; | 
|   | 
|       const url = "/api/outbound/order/setSortingRule"; | 
|       const params = { | 
|         consignor_Id: consignor_Id, | 
|         consignorCode: consignorCode, | 
|         consignorName: consignorName, | 
|         storage_Id: storage_Id, | 
|         storageName: storageName, | 
|   | 
|         orderList_Id: orderList_Id, | 
|         order_Id: order_Id, | 
|         orderCode: orderCode, | 
|   | 
|         positionName: positionName, | 
|         batchNumber: batchNumber, | 
|         produceDate: produceDate, | 
|         plateCode: plateCode, | 
|         singleSignCode: singleSignCode, | 
|   | 
|         product_Id: product_Id, | 
|         productCode: productCode, | 
|         productName: productName | 
|       }; | 
|       var callback = res => { | 
|         if (res.result) { | 
|           this.getSortingRuleList(); | 
|           this.sortingRuleForm.positionName = ""; | 
|           this.sortingRuleForm.batchNumber = ""; | 
|           this.sortingRuleForm.produceDate = ""; | 
|           this.sortingRuleForm.plateCode = ""; | 
|           this.sortingRuleForm.singleSignCode = ""; | 
|         } | 
|       }; | 
|       this.common.ajax(url, params, callback, true); | 
|     }, | 
|     // 关闭分拣规则 | 
|     deleteRule(rule_Id) { | 
|       this.$confirm("确实要关闭当前规则吗?", "提示", { | 
|         confirmButtonText: "确定", | 
|         cancelButtonText: "取消", | 
|         type: "warning" | 
|       }) | 
|         .then(() => { | 
|           const url = "/api/outbound/order/DeleteSortingRule"; | 
|           const params = { rule_Id: rule_Id }; | 
|           var callback = res => { | 
|             this.common.showMsg(res); | 
|             if (res.result) { | 
|               this.getSortingRuleList(); | 
|             } | 
|           }; | 
|           this.common.ajax(url, params, callback, true); | 
|         }) | 
|         .catch(() => { | 
|           this.$message({ | 
|             type: "info", | 
|             message: "已取消" | 
|           }); | 
|         }); | 
|     }, | 
|     // 下拉框加载完毕后 | 
|     onLoadDropdownAfter(formData) { | 
|       // 在新间时获取工厂名称第一条数据 | 
|       const consignorDropdownList = this.editor.getDropdownData(797); | 
|       if (consignorDropdownList && consignorDropdownList.length) { | 
|         // 只有新建时,默认值 | 
|         if (!formData.order_Id) { | 
|           const firstItem = consignorDropdownList[0]; | 
|           this.defaultValue.consignor_Id = firstItem.consignor_Id; | 
|           this.defaultValue.consignorCode = firstItem.consignorCode; | 
|           this.defaultValue.consignorName = firstItem.consignorName; | 
|           this.defaultValue.storage_Id = 87; | 
|           this.defaultValue.storageName = "立体库"; | 
|           formData.consignor_Id = firstItem.consignor_Id; | 
|           formData.consignorCode = firstItem.consignorCode; | 
|           formData.storageName = "立体库"; | 
|           formData.storage_Id = 87; | 
|         } | 
|       } | 
|     }, | 
|     // 重置操作 | 
|     onSuperReset() { | 
|       this.dataList.reload(); | 
|     }, | 
|     // 保存后事件 | 
|     onSaveAfter(formData) { | 
|       var orderCode = this.masterData.orderCode; | 
|       var statusText = this.masterData.statusText; | 
|       const url = "/api/outbound/order/orderLog"; | 
|       const params = { | 
|         orderCode: orderCode, | 
|         statusText: statusText, | 
|         orderType: "出库任务" | 
|       }; | 
|       const ref = this.dataList; | 
|       var callback = res => { | 
|         this.common.showMsg(res); | 
|         if (res.result) { | 
|           ref.loadData(); | 
|         } | 
|       }; | 
|       this.common.ajax(url, params, callback, ref); | 
|     }, | 
|     // 删除 | 
|     delete() { | 
|       if (!this.dataListSelections.length) { | 
|         this.$message.error("至少选中一行!"); | 
|         return; | 
|       } | 
|       var _this=this; | 
|       var valdiateResult=true; | 
|         this.dataListSelections.forEach(function(item,index){ | 
|           //debugger | 
|           //console.log(item.statusText); | 
|           if(item.statusText!='新建'){ | 
|               _this.$message({ | 
|           message: "非‘新建’状态的订单不能被删除!", | 
|           type: "warning" | 
|         }); | 
|             valdiateResult=false; | 
|             return; | 
|           } | 
|         }); | 
|         if(!valdiateResult){ | 
|           return; | 
|         } | 
|   | 
|       const order_Id = this.dataListSelections.map((item, index, Array) => { | 
|         return item.order_Id; | 
|       }); | 
|       const orderCode = this.dataListSelections.map((item, index, Array) => { | 
|         return item.orderCode; | 
|       }); | 
|   | 
|       this.$confirm("确定要进行删除这条"+this.dataListSelections.length+"订单操作吗?", "删除", { | 
|         confirmButtonText: "确定", | 
|         cancelButtonText: "取消", | 
|         type: "warning" | 
|       }) | 
|         .then(() => { | 
|           const url = "/api/outbound/order/deleteOrderCode"; | 
|           const params = { | 
|             ids: order_Id, | 
|             orderCode: orderCode, | 
|             orderType: "出库任务" | 
|           }; | 
|           const ref = this.dataList; | 
|           var callback = res => { | 
|             this.common.showMsg(res); | 
|             if (res.result) { | 
|               ref.loadData(); | 
|             } | 
|           }; | 
|           this.common.ajax(url, params, callback, ref); | 
|         }) | 
|         .catch(() => { | 
|           this.$message({ | 
|             type: "info", | 
|             message: "已取消" | 
|           }); | 
|         }); | 
|     } | 
|   } | 
| }; | 
| </script> | 
|   | 
| <style rel="stylesheet/scss" scoped> | 
| .tip { | 
|   padding: 8px 16px; | 
|   background-color: #ecf8ff; | 
|   border-radius: 4px; | 
|   border-left: 5px solid #50bfff; | 
|   margin: 5px 0; | 
| } | 
| .dialog-info { | 
|   overflow: hidden; | 
|   width: 100%; | 
| } | 
| .dialog-left { | 
|   float: left; | 
|   width: 45%; | 
| } | 
| .dialog-right { | 
|   margin-left: 30px; | 
|   float: left; | 
|   width: 45%; | 
| } | 
| .deleteRule-span { | 
|   cursor: pointer; | 
| } | 
| .page-list-container { | 
|   min-height: calc(100vh - 110px); | 
|   overflow: hidden; | 
|   position: relative; | 
| } | 
| .scrollbar-wrap { | 
|   margin-top: 20px; | 
|   max-height: 400px; | 
|   overflow-x: hidden; | 
|   padding: 0px; | 
| } | 
| .msg-container { | 
|   margin: 0; | 
|   padding: 0; | 
|   padding-bottom: 40px; | 
| } | 
| .msg-item { | 
|   margin: 0; | 
|   padding: 5px 0; | 
|   word-wrap: break-word; | 
|   font-size: 14px; | 
| } | 
|   | 
| @media screen and (max-height: 900px) { | 
|   .page-list-container { | 
|     min-height: 600px; | 
|   } | 
| } | 
| </style> |