You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
udiwms-vue/src/views/inout/IOErrorOrder.vue

629 lines
22 KiB
Vue

<template>
<div>
<el-form :inline="true" :model="filterQuery" class="query-form" size="mini">
<el-row>
<el-form-item class="query-form-item">
<el-input v-model="filterQuery.id" placeholder="单号"></el-input>
</el-form-item>
<el-form-item class="query-form-item">
<el-select v-model="filterQuery.mainAction" placeholder="出入库类型">
<el-option label="全部" value=""></el-option>
<el-option label="入库" value="WareHouseIn"></el-option>
<el-option label="出库" value="WareHouseOut"></el-option>
</el-select>
</el-form-item>
<el-form-item class="query-form-item">
<el-select v-model="filterQuery.action" placeholder="请选择业务类型">
<el-option
v-for="item in busTypes"
:key="item.name"
:label="item.name"
:value="item.action">
<span style="float: left">{{ item.name }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item class="query-form-item">
<el-select v-model="filterQuery.locStorageCode" placeholder="请选择当前仓库" clearable="true"
@change="invChange"
size="mini">
<el-option
v-for="item in storageList"
:key="item.name"
:label="item.name"
:value="item.code">
<span style="float: left">{{ item.name }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item class="query-form-item">
<el-select v-model="filterQuery.invWarehouseCode" placeholder="请选择当前分库" clearable="true"
size="mini">
<el-option
v-for="item in subInvList"
:key="item.name"
:label="item.name"
:value="item.code">
<span style="float: left">{{ item.name }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button-group>
<el-button
type="primary"
icon="el-icon-refresh"
@click="onReset"
></el-button>
<el-button type="primary" icon="search" @click="onSubmit"
>查询
</el-button
>
</el-button-group>
</el-form-item>
</el-row>
</el-form>
<el-table v-loading="loading" :data="list" style="width: 100%">
<el-table-column label="序号" type="index"></el-table-column>
<el-table-column label="扫码单据类型" prop="action">
<template slot-scope="scope">
<span>{{ getActionName(scope.row.action) }}</span>
</template>
</el-table-column>
<el-table-column label="订单号" prop="id" show-overflow-tooltip></el-table-column>
<el-table-column label="来源订单号" prop="corpOrderId" show-overflow-tooltip></el-table-column>
<el-table-column label="来源" prop="fromType">
<template slot-scope="scope">
<span>{{ fromTypeMap[scope.row.fromType] }}</span>
</template>
</el-table-column>
<el-table-column label="往来单位" prop="fromCorp" width="220">
<!-- <template slot-scope="scope">-->
<!-- <p v-if="scope.row.fromCorp == null">-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- size="mini"-->
<!-- @click.native.stop="handleUnitClick(scope.row)"-->
<!-- >选择往来单位-->
<!-- </el-button-->
<!-- >-->
<!-- </p>-->
<!-- <p v-if="scope.row.fromCorp !== null">-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- size="mini"-->
<!-- @click.native.stop="handleUnitClick(scope.row)"-->
<!-- >{{ scope.row.fromCorp }}-->
<!-- </el-button-->
<!-- >-->
<!-- </p>-->
<!-- </template>-->
</el-table-column>
<el-table-column label="创建时间" prop="actDate" show-overflow-tooltip>
<template slot-scope="scope">
<i class="el-icon-time"></i>
<span>{{ scope.row.actDate }}</span>
</template>
</el-table-column>
<el-table-column label="校验状态" prop="status" width="100">
<template slot-scope="scope">
<el-tag :type="(scope.row.status == 3) | statusFilterType">{{
checkStatus[scope.row.status]
}}
</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="250" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
size="small"
v-if="scope.row.status === -1"
@click.native.stop="addOrders(scope.row)"
>编辑
</el-button
>
<el-button
type="text"
size="small"
v-if="scope.row.status !== -1"
@click.native.stop="intentDetail(scope.row)"
>详情
</el-button
>
<el-button
type="text"
size="small"
v-if="scope.row.status !== -1"
@click.native.stop="handleErrorDetail(scope.$index)"
>错误详情
</el-button
>
<el-button
type="text"
size="small"
@click.native.stop="deleteDialog(scope.row.id)"
>删除
</el-button
>
<el-button
type="text"
size="small"
v-if="scope.row.status !== -1"
@click.native.stop="onUpload(scope.row.id)"
>重新提交
</el-button
>
</template>
</el-table-column>
</el-table>
<el-dialog title="错误信息" :visible.sync="dialogVisible" width="30%" :append-to-body='true'>
<span>{{ errorDetail }}</span>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="dialogVisible = false"
>关 闭</el-button
>
</span>
</el-dialog>
<el-dialog
title="选择往来单位"
:close-on-click-modal="false"
:close-on-press-escape="false"
:visible.sync="dialogTableVisible"
append-to-body
width="70%"
>
<el-form :inline="true" :model="unitquery" class="query-form" size="mini">
<el-form-item class="query-form-item">
<el-input v-model="unitquery.key" placeholder="搜索"></el-input>
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="search"
@click.native.stop="getUnitList()"
>查询
</el-button
>
</el-form-item>
</el-form>
<el-table
v-loading="loading"
:data="unitlist"
style="width: 100%"
@row-click="selectUnit"
>
<el-table-column
label="往来单位ID"
prop="erpId"
show-overflow-tooltip
></el-table-column>
<el-table-column
label="往来单位名称"
prop="name"
show-overflow-tooltip
></el-table-column>
<el-table-column
label="往来单位简写"
prop="spell"
show-overflow-tooltip
></el-table-column>
<el-table-column
label="地址"
prop="addr"
show-overflow-tooltip
></el-table-column>
<el-table-column label="状态" prop="status"></el-table-column>
<el-table-column label="类型" prop="type"></el-table-column>
</el-table>
</el-dialog>
<el-dialog
title="选择仓库信息"
:visible.sync="dialogStorageVisible"
width="70%"
append-to-body
:close-on-click-modal="false"
:close-on-press-escape="false"
v-if="dialogStorageVisible"
>
<dialogSelectInvStorage v-on:selectStorage="selectStorage"></dialogSelectInvStorage>
</el-dialog>
<el-dialog
title="单号详情"
:visible.sync="codeDetailVisible"
:close-on-click-modal="false"
:close-on-press-escape="false"
width="80%" append-to-body
v-if="codeDetailVisible"
>
<codeDetail
:idQuery="idQuery"
v-on:closeDetailDialog="closeDetailDialog"
></codeDetail>
</el-dialog>
<el-pagination
:page-size="filterQuery.limit"
@current-change="handleCurrentChange"
layout="prev, pager, next"
:total="total"
:current-page="filterQuery.page"
></el-pagination>
</div>
</template>
<script>
import {
orderListError,
codeList,
filterOrder,
deleteByOrderId,
commitOrder,
updateUnit,
} from "../../api/inout/order";
import draggable from "vuedraggable";
import {saveAs} from "file-saver";
import codeDetail from "./errorCode";
import dialogSelectInvStorage from "./DialogSelectInvStorage";
import addOrder from "./IOAddOrder";
import store from "../../store";
import {getBussinessType} from "../../api/basic/bussinessType";
import {getBasicUnitMaintains} from "@/api/basic/basicUnitMaintain";
import {getLocalJoinByUser} from "@/api/basic/busLocalType";
import {filterAllByUser} from "@/api/basic/invWarehouse";
import {filterSubByInv} from "@/api/basic/invSubWarehouse";
const formJson = {
site_id: "",
site_name: "",
describe: "",
ads: [],
};
export default {
data() {
return {
filterQuery: {
id: "",
mainAction: null,
action: null,
page: 1,
status: 3,
limit: 20,
locStorageCode: this.$store.getters.locInvCode,
invWarehouseCode: this.$store.getters.locSubInvCode,
},
checkStatus: {
'-1': "等待提交",
// 1: "等待处理",
1: "等待校验",
2: "等待校验",
3: "校验异常",
4: "校验成功",
},
curIndex: "",
unitquery: {key: "", page: 1, limit: 20},
unitlist: [],
unitUpdateQuery: {
id: "",
fromCorpId: "",
fromCorp: "",
},
idQuery: {
id: "",
},
fromTypeMap: {
"1": "UDIMS平台",
"2": "网页新增",
"3": "pda即时校验",
"4": "pda未校验",
"5": "pc端扫码精灵",
"6": "缺量补录单据",
"7": "UDI供应商平台",
"8": "平衡补录单据",
"10": "手动补单",
"11": "仓库盘点"
},
storageList: [],
subInvList: [],
list: [],
adId: [],
adSelectList: [],
adList: {},
adListNoDataText: "无数据",
queryAdIdAsyncLoading: false,
codeDetailVisible: false,
dialogStorageVisible: false,
total: 0,
loading: true,
index: null,
formName: null,
errorDetail: "1111111111111",
formMap: {
add: "新增",
edit: "编辑",
},
deleteData: {
id: "",
status: 3,
},
dialogTableVisible: false,
formLoading: false,
dialogVisible: false,
formData: formJson,
deleteLoading: false,
busTypes: [],
};
},
components: {
draggable,
codeDetail,
dialogSelectInvStorage,
addOrder,
},
methods: {
onReset() {
this.$router.push({
path: "",
});
this.filterQuery = {
page: 1,
limit: 20,
};
this.getList();
},
onSubmit() {
this.loading = true;
this.getList();
},
handleSizeChange(val) {
this.filterQuery.limit = val;
this.getList();
},
handleCurrentChange(val) {
this.filterQuery.page = val;
this.getList();
},
handleUnitClick(row) {
this.curIndex = row.id;
let actionItem = this.getActionItem(row.action);
if (actionItem.corpType == 0) {//选择供应商
this.dialogTableVisible = true;
} else {
this.dialogStorageVisible = true;
}
},
closeDetailDialog(val) {
this.codeDetailVisible = false;
},
closeDialog() {
this.getList();
},
getUnitList() {
this.loading = true;
getBasicUnitMaintains(this.unitquery)
.then((response) => {
this.loading = false;
this.unitlist = response.data.page.list || [];
})
.catch(() => {
this.loading = false;
});
},
selectUnit(row) {
console.log(row.id);
this.unitUpdateQuery.id = this.curIndex;
this.unitUpdateQuery.fromCorp = row.name;
this.unitUpdateQuery.fromCorpId = row.erpId;
updateUnit(this.unitUpdateQuery)
.then((response) => {
this.dialogTableVisible = false;
this.getList();
})
.catch(() => {
this.dialogTableVisible = false;
});
},
selectStorage(row) {
console.log(row.id);
this.unitUpdateQuery.id = this.curIndex;
this.unitUpdateQuery.fromCorp = row.name;
this.unitUpdateQuery.fromCorpId = row.code;
updateUnit(this.unitUpdateQuery)
.then((response) => {
this.dialogStorageVisible = false;
this.getList();
})
.catch(() => {
this.dialogStorageVisible = false;
});
},
//获取订单列表
getList() {
this.loading = true;
this.filterQuery.status = 3;
this.filterQuery.customerId = store.getters.customerId;
filterOrder(this.filterQuery)
.then((response) => {
this.loading = false;
if (response.code == 20000) {
this.list = response.data.list || [];
this.total = response.data.total || 0;
} else {
this.$message.error(response.message);
}
})
.catch(() => {
this.loading = false;
this.list = [];
this.total = 0;
});
},
deleteOrders(data) {
this.loading = true;
this.deleteData.id = data;
deleteByOrderId(this.deleteData)
.then((response) => {
if (response.code == 20000) {
this.getList();
this.$message({
type: "success",
message: "删除成功!",
});
} else if (response.code == 520) {
this.$message.error("异常扫码单据列表已不存在该扫码单据!");
this.getList();
}
})
.catch(() => {
});
},
deleteDialog(rowId) {
this.$confirm("此操作将永久删除该订单, 是否继续?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.deleteOrders(rowId);
})
.catch(() => {
});
},
onUpload(data) {
this.loading = true;
var idQuery = {
orderId: "",
};
idQuery.orderId = data;
commitOrder(idQuery)
.then((response) => {
if (response.code === 20000) {
this.$message.success(response.data);
this.getList();
} else {
this.$message.error(response.message);
}
})
.catch(() => {
});
},
handleErrorDetail(poistion) {
var mOrder = this.list[poistion];
var corpOrderId = mOrder.remark;
this.errorDetail = mOrder.remark;
console.log(corpOrderId + " " + mOrder + " " + mOrder.remark);
this.dialogVisible = true;
},
intentDetail(row) {
this.codeDetailVisible = true;
this.idQuery.id = row.id;
},
getBusType() {
let query = {
enabled: true,
};
getLocalJoinByUser(query)
.then((response) => {
this.busTypes = response.data.list || [];
this.filterQuery.billAction = this.busTypes[0].action;
// this.getList();
})
.catch(() => {
});
},
getActionName(action) {
for (let i = 0; i < this.busTypes.length; i++) {
if (this.busTypes[i].action === action) {
return this.busTypes[i].name;
}
}
},
getActionItem(action) {
for (let i = 0; i < this.busTypes.length; i++) {
if (this.busTypes[i].action === action) {
return this.busTypes[i];
}
}
},
getStorage() {
this.storageList = [];
filterAllByUser()
.then((response) => {
this.storageList = response.data || [];
if (this.storageList.length > 0) {
this.invChange();
this.getList();
}
})
.catch(() => {
});
},
invChange() {
this.subInvList = [];
this.filterQuery.invWarehouseCode = "";
let query = {
pcode: this.filterQuery.locStorageCode
};
filterSubByInv(query)
.then((response) => {
this.subInvList = response.data || [];
})
.catch(() => {
});
},
},
filters: {
statusFilterType(status) {
const statusMap = {
false: "success",
true: "danger",
};
return statusMap[status];
},
},
mounted() {
document.body.ondrop = function (event) {
event.preventDefault();
event.stopPropagation();
};
},
created() {
this.getBusType();
let query = this.$route.query;
this.filterQuery = Object.assign(this.filterQuery, query);
this.filterQuery.limit = parseInt(this.filterQuery.limit);
// 加载表格数据
this.getStorage();
},
};
</script>
<style type="text/scss" lang="scss">
</style>