<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){
|
|
//去掉这个验证,可以允许多次下发出库指令 【EditBy shaocx,2022-10-16】
|
/*
|
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>
|