<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'">
|
<state-flow :load-options="stateLoadOptions" :where="{order_Id: row[dataOptions.idField]}">
|
<template slot="content">
|
<el-tag :color="setStatusBgColor(row[col.prop])" :style="setStatusColor(row[col.prop])" class="cursor-pointer">
|
{{ row[col.prop] }}
|
</el-tag>
|
</template>
|
</state-flow>
|
</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" :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">
|
<!--快递名称字段自定义标签插槽-->
|
<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 == 'sortingStatus'">
|
<detailstate-flow :load-options="stateLoadOptionsDetail" :where="{detailID: row.orderList_Id}">
|
<template slot="content">
|
<el-tag v-if="row[col.prop] == 1" 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] == 2" 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] == 3" color="#ff0000" 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>
|
<span v-else>
|
{{ row[col.prop] }}
|
</span>
|
</template>
|
</detailstate-flow>
|
</template>
|
<template v-else-if="col.prop == 'lackStorage'">
|
<!-- <div v-if="row[col.prop]||row[col.prop]==0">{{ row[col.prop] }}</div> -->
|
<!-- <div v-else> -->
|
<div> {{ row[col.prop] }}
|
<el-link type="primary" @click="setSortingRule(row)">设置规则</el-link>
|
</div>
|
<!-- </div> -->
|
</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">
|
<el-form :model="form">
|
<el-form-item label="所属仓库">
|
<el-select v-model="form.storage_Id" placeholder="请选择">
|
<el-option v-for="item in storageNames" :key="item.storage_Id" :label="item.storageName" :value="item.storage_Id">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="货主名称">
|
<el-select v-model="form.consignor_Id" placeholder="请选择" class="w-250">
|
<el-option v-for="item in consignorNames" :key="item.consignor_Id" :label="item.consignorName" :value="item.consignor_Id">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
</el-form>
|
|
</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>
|
|
<el-dialog v-dialogDrag :visible.sync="dialogFormVisible" width="400" title="调件出库任务-新建" @open="productChange">
|
<el-form :label-width="formLabelWidth">
|
<el-form-item label="输送线编号">
|
<el-select v-model="taskForm.transId" placeholder="请选择输送线编号" class="w-250">
|
<el-option v-for="item in transList" :key="item" :label="item" :value="item">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="目的地">
|
<el-select v-model="taskForm.destination_Id" placeholder="请选择目的地" class="w-250" @change="destinationChange">
|
<el-option v-for="item in destinationList" :key="item.destination_Id" :label="item.destinationName" :value="item.destination_Id">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<!-- <el-form-item label="出库区域" required>
|
<el-select v-model="taskForm.orderExit" placeholder="请选择出库区域" class="w-250">
|
<el-option v-for="item in orderExitList" :key="item.key" :label="item.value" :value="item.key">
|
</el-option>
|
</el-select>
|
</el-form-item> -->
|
<el-form-item label="物料号" required>
|
<el-select v-model="taskForm.product_Id" placeholder="请选择物料号" class="w-250" @change="productChange">
|
<el-option v-for="item in productList" :key="item.product_Id" :label="item.productCode" :value="item.product_Id">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="单据类型">
|
<el-input v-model="taskForm.orderType" :readonly="true" :disabled="true" class="w-250"></el-input>
|
</el-form-item>
|
<el-form-item label="装箱数量">
|
<el-input v-model="taskForm.packingQuantity" :readonly="true" :disabled="true" class="w-250"></el-input>
|
</el-form-item>
|
<el-form-item label="出库数量">
|
<el-input v-model="taskForm.validQty" class="w-250"></el-input>
|
</el-form-item>
|
<el-form-item label="总库存数量">
|
<el-input v-model="taskForm.productStorage" :readonly="true" :disabled="true" class="w-250"></el-input>
|
</el-form-item>
|
|
</el-form>
|
<div slot="footer" class="dialog-footer">
|
<el-button @click="dialogFormVisible = false">取 消</el-button>
|
<el-button type="primary" @click="addNewOrder">确 定</el-button>
|
</div>
|
</el-dialog>
|
</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 returnVue from "../../inbound/purchase/return.vue";
|
|
export default {
|
name: "outbound-sale-order-tj",
|
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: {
|
transId: "",
|
productStorage: 0,
|
validQty: 0,
|
orderType: "调件出库"
|
},
|
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: {},
|
// 出库单导入对话框参数
|
orderImportConfig: {
|
// 显示导入对话框
|
isShowDialog: false,
|
title: "出库单批量导入",
|
// 导入地址
|
url: "/api/outbound/order/importExcel",
|
// 模板地址
|
templateUrl: "https://auod-beijing.oss-cn-beijing.aliyuncs.com/node-wms/template/订单信息导入模板.xlsx"
|
},
|
// 出库区域
|
orderExitList: [
|
{
|
key: 1,
|
value: "西边焊接区"
|
},
|
{
|
key: 2,
|
value: "西边分拣区"
|
},
|
{
|
key: 4,
|
value: "东边分拣区"
|
},
|
{
|
key: 5,
|
value: "东边冲压区"
|
}
|
]
|
};
|
},
|
mounted() {
|
this.getStorageList();
|
this.getConsignorList();
|
this.getAllproductList();
|
this.getAlldestinationList();
|
},
|
// 页面激活
|
activated() {},
|
// 自定义初始化数据
|
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 = {
|
orderType: "调件出库"
|
};
|
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 "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() {
|
this.$confirm("确定要发送出库指令吗, 是否继续?", "提示", {
|
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);
|
};
|
},
|
// 将选择器选择中的数据填充到明细表中
|
// 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: "已取消"
|
});
|
});
|
},
|
// 重置操作
|
onSuperReset() {
|
this.dataList.reload();
|
}
|
}
|
};
|
</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>
|