This commit is contained in:
DESKTOP-369JRHT\12997 2023-10-28 09:04:27 +08:00
parent 2a586c09ba
commit 70553d8615
3 changed files with 927 additions and 0 deletions

View File

@ -0,0 +1,60 @@
import request from '@/utils/request'
/**
* 订单
*/
export function getReturnsPageApi(query) {
return request({
url: '/business/convenience/mtReturns/getListByPage',
method: 'get',
params: query
})
}
// 新增
export function addReturnsApi(data) {
return request({
url: '/business/convenience/mtReturns',
method: 'post',
data: data
})
}
// 修改
export function editReturnsApi(data) {
return request({
url: '/business/convenience/mtReturns',
method: 'put',
data: data
})
}
/**
* 订单详情
*/
export function getReturnsDetailsPageApi(query) {
return request({
url: '/business/convenience/mtReturnsDetails/getListByPage',
method: 'get',
params: query
})
}
export function delDetailsApi(query) {
return request({
url: '/business/convenience/mtReturnsDetails',
method: 'delete',
params: query
})
}
export function batchProcessingApi(data) {
return request({
url: '/business/convenience/mtReturnsDetails/batchProcessing',
method: 'post',
data: data
})
}

View File

@ -0,0 +1,645 @@
<template>
<div class="app-container">
<el-card >
<div slot="header" class="clearfix">
<i class="el-icon-back" @click="goToAbout">返回 | </i>
<!-- <el-link icon="el-icon-edit" :underline="false" @click="goToAbout">编辑</el-link>-->
<span> 退货详情</span>
</div>
<div style="height: 90px; display: flex; justify-content: space-between;">
<div style="height: 100%; width: 50%; display: flex; justify-content: space-between;">
<div style="height: 100%; width: 70%; display: flex; justify-content: space-between;">
<div class="box">
<span>{{returnsForm.totalAmount}}</span>
<span>总金额</span>
</div>
<div class="box">
<span>{{returnsForm.productQuantity}}</span>
<span>商品数量</span>
</div>
<div class="box">
<span>{{returnsForm.returnQuantity}}</span>
<span>退货数量</span>
</div>
</div>
<div style="height: 100%; width: 30%; display: flex; flex-direction: column; justify-content: space-between;">
<el-form ref="myForm" label-width="100px">
<el-form-item label="退货单号">
<el-input v-model="returnsForm.orderNumber"
style="width: 220Px">
<el-button slot="append" @click="refresh()" icon="el-icon-refresh"></el-button>
</el-input>
</el-form-item>
<el-form-item label="退货时间" >
<el-date-picker
style="width: 220Px"
v-model="returnsForm.orderDate"
type="date"
placeholder="选择日期">
</el-date-picker>
</el-form-item>
</el-form>
</div>
</div>
<div style="height: 100%; width: 30%; display: flex; align-items: center; justify-content: flex-end;">
<el-button type="primary" v-if="state=='await'" :disabled="saveFlag" @click="save()">保存</el-button>
<el-button type="success" v-if="state=='await'" :disabled="auditFlag" @click="audit">保存并审核</el-button>
<el-button type="success" v-if="state=='ysh'" :disabled="auditFlag" @click="storage">退货处理库存</el-button>
<el-button type="warning" v-if="state =='await' || state=='ysh'" :disabled="voidFlag" @click="abolition()">作废</el-button>
</div>
</div>
</el-card>
<el-card style="margin-top: 20px" >
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
icon="el-icon-plus"
@click="commodityAdd"
>添加退货</el-button>
</el-col>
<!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
</el-row>
<el-table ref="tables"
v-loading="loading"
:data="detailsList"
:default-sort="defaultSort">
<el-table-column label="商品名称" align="center" prop="commodityName"/>
<el-table-column label="分类名称" prop="cvsGoodId" align="center">
<template slot-scope="scope">
<span>{{ getName(cvsGoodList, scope.row.cvsGoodId) }}</span>
</template>
</el-table-column>
<el-table-column label="供应商" prop="supplierId" align="center">
<template slot-scope="scope">
<span>{{ getName(supplierList, scope.row.supplierId) }}</span>
</template>
</el-table-column>
<el-table-column label="单位" align="center" prop="unit">
<template slot-scope="scope">
<span>{{ scope.row.unit == null?"-":scope.row.unit}}</span>
</template>
</el-table-column>
<el-table-column label="入库前库存" align="center" prop="preInboundInventory"/>
<el-table-column label="退货数量" align="center" prop="returnQuantity">
<template slot-scope="scope">
<el-input-number :disabled="numberInput" v-model="scope.row.returnQuantity" @change="change(scope.row,1)" controls-position="right" :min="0" :max="100000000" :step="1" style="max-width: 100%"></el-input-number>
</template>
</el-table-column>
<el-table-column label="退货单价" align="center" prop="returnPrice">
<template slot-scope="scope">
<el-input-number :disabled="numberInput" v-model="scope.row.returnPrice" @change="change(scope.row,2)" controls-position="right" :min="0" :max="100000000" :step="1" style="max-width: 100%"></el-input-number>
</template>
</el-table-column>
<el-table-column label="小计金额" align="center" prop="subtotalAmount">
<template slot-scope="scope">
<el-input-number :disabled="numberInput" v-model="scope.row.subtotalAmount" @change="change(scope.row,3)" controls-position="right" :min="0" :max="100000000" :step="1" style="max-width: 100%"></el-input-number>
</template>
</el-table-column>
<el-table-column v-if="state =='await' || state=='ysh'"label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="commodityDel(scope.row)"
>删除</el-button>
</template>
<!-- v-hasPermi="['']"-->
</el-table-column>
</el-table>
<!-- <pagination-->
<!-- v-show="total>0"-->
<!-- :total="total"-->
<!-- :page.sync="queryParams.page"-->
<!-- :limit.sync="queryParams.pageSize"-->
<!-- @pagination="getList"-->
<!-- />-->
</el-card>
<el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body :close-on-click-modal="false">
<el-container>
<el-header style="">
<el-form ref="tankForm" :model="commodityForm" label-width="80px">
<el-row :gutter="24">
<el-col :span="6">
<el-form-item label="商品分类">
<el-select
v-model="commodityForm.cvsGoodId"
placeholder="全部"
clearable
>
<el-option v-for="item in cvsGoodList" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="供应商" prop="supplierId">
<el-select
v-model="commodityForm.supplierId"
placeholder="全部"
clearable
>
<el-option v-for="item in supplierList" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="详细信息">
<el-input v-model="commodityForm.detailed" placeholder="商品名称,拼音码,条形码等信息" ></el-input>
</el-form-item>
</el-col>
<el-col :span="4">
<el-button type="primary" @click="inquire()">查询</el-button>
</el-col>
</el-row>
</el-form>
</el-header>
<el-main>
<el-table ref="tables"
v-loading="loading"
:data="commodityList"
@selection-change="handleSelectionChange"
border
:default-sort="defaultSort">
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column label="商品名称" align="center" prop="name"/>
<el-table-column label="商品编码" align="center" prop="goodsNo"/>
<el-table-column label="分类名称" prop="cvsGoodId" align="center">
<template slot-scope="scope">
<span>{{ getName(cvsGoodList, scope.row.cvsGoodId) }}</span>
</template>
</el-table-column>
<el-table-column label="供应商" prop="supplierId" align="center">
<template slot-scope="scope">
<span>{{ getName(supplierList, scope.row.supplierId) }}</span>
</template>
</el-table-column>
<el-table-column label="单位" align="center" prop="unit"/>
<el-table-column label="当前库存" align="center" prop="stock"/>
</el-table>
</el-main>
</el-container>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="addCommodity"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {getAuditPremApi} from "@/api/oilConfig/staff";
import {
abolitionInventoryApi,
auditInventoryApi,
delInventoryOrderApi,
storageInventoryApi
} from "@/api/oilConfig/oilInventory";
import {BigNumber} from "bignumber.js";
import {listLJGoods} from "@/api/convenienceStore/ljgoods";
import {getName,parseTime} from "../../../utils/fuint";
import {selectParentById, selectTree} from "@/api/convenienceStore/goods";
import {listSupplier} from "@/api/convenienceStore/supplier";
import {
getReturnsDetailsPageApi,
delDetailsApi,
editReturnsApi,
addReturnsApi,
batchProcessingApi
} from "@/api/convenienceStore/returns";
export default {
name: "details",
props:[
'PreturnsId',
'PorderNumber',
'PorderDate',
'PapprovalStatus'
],
data() {
return {
detailsList: [],
commodityList: [],
ReturnsId:null,
commodityForm:{
cvsGoodId: "",
cvsGood: "",
supplierId: "",
supplier: "",
detailed: "",
page: 1,
pageSize: 10,
isRecovery:0,
},
returnsForm: {
orderNumber: null,
approvalStatus: "",
orderDate: null,
totalAmount: 0, //
productQuantity: 0, //
returnQuantity: 0 //
} ,
//
cvsGoodList:[],
//
supplierList:[],
state:'await',
saveFlag:false,
auditFlag:false,
voidFlag:false,
storageFlag:true,
multipleSelection:[], //
//
title:'选择商品',
//
showSearch: true,
disableInput: false, //
//
open: false,
//
total: 0,
//
queryParams: {
supplierId: '',
inventoryId: null,
page:null,
pageSize:null
},
//
loading: false,
//
defaultSort: {prop: 'createTime', order: 'descending'},
//
rules: {
supplierName: [
{ required: true, message: "供应商名称不能为空", trigger: "blur" },
],
},
}
},
async created() {
this.returnsForm.returnsId = this.$props.PreturnsId
this.returnsId = this.$props.PreturnsId
this.returnsForm.orderNumber = this.$props.PorderNumber
this.returnsForm.orderDate = this.$props.PorderDate
this.returnsForm.approvalStatus = this.$props.PapprovalStatus
this.state = this.$props.PapprovalStatus
if ( this.state == null) {
this.state = 'await'
}
if (this.state=='await') {
this.numberInput = false
}else {
this.numberInput = true
}
console.log("this.returnsForm",this.returnsForm)
if (this.returnsForm.orderNumber == null) {
this.refresh();
}
if (this.returnsForm.orderDate == null) {
this.returnsForm.orderDate =new Date()
}
this.getDetailsList();
this.getQueryList();
},
methods: {
getDetailsList() {
let this_ = this
getReturnsDetailsPageApi().then(res=>{
this_.detailsList = res.data.records;
this.total = res.data.total;
this.sumMethod(res.data.records);
})
},
getCommodityList() {
let this_ = this
listLJGoods(this_.commodityForm).then(res=>{
this_.commodityList = res.data.records;
this_.sumMethod(res.data.records);
// this.total = response.data.total;
})
},
//
goToAbout() {
this.$router.push('/convenienceStore/returns/index');
},
commodityAdd() {
this.open = true;
},
commodityDel(data) {
if (data.id != null) {
delDetailsApi(data).then(res=>{
})
}
const index = this.detailsList.indexOf(data); //
if (index !== -1) {
this.detailsList.splice(index, 1); // 使splice
}
},
//
inquire() {
this.getCommodityList();
},
//
change(data,flag) {
let returnQuantity = new BigNumber( data.returnQuantity);
let returnPrice = new BigNumber( data.returnPrice);
let subtotalAmount = new BigNumber(data.subtotalAmount);
data.subtotalAmount = returnQuantity.times(returnPrice)
if (flag == 3) {
data.returnPrice = subtotalAmount.dividedBy(returnQuantity);
}
this.sumMethod(this.detailsList);
console.log("this.detailsList",this.detailsList)
//
// this.detailsList = data
// this.edit()
},
// header
sumMethod(data) {
let this_ = this
if (data.length>0) {
this_.returnsForm.totalAmount = data.length
} else {
this_.returnsForm.totalAmount = 0
}
this_.returnsForm.productQuantity = data.length,
this_.returnsForm.totalAmount = new BigNumber(0),
this_.returnsForm.returnQuantity = new BigNumber(0),
data.forEach(da => {
if (da.returnPrice != null) {
this_.returnsForm.returnQuantity= this_.returnsForm.returnQuantity.plus(da.returnQuantity)
}
if (da.subtotalAmount != null) {
this_.returnsForm.totalAmount= this_.returnsForm.totalAmount.plus(da.subtotalAmount)
}
})
},
addCommodity () {
let this_ = this
this.multipleSelection.forEach(mul=>{
let now = {
goodsId: mul.id,
commodityName: mul.name,
supplierId: mul.supplierId,
cvsGoodId: mul.cvsGoodId,
unit:mul.unit,
preInboundInventory:mul.stock,
returnQuantity: 0,
returnPrice: 0,
subtotalAmount: 0
}
this_.detailsList.push(now)
})
this_.open = false
this_.sumMethod(this_.detailsList);
},
//
getQueryList(){
selectTree().then(response => {
this.cvsGoodList = response.data.records
});
listSupplier().then(response => {
this.supplierList = response.data.records
})
},
cancel() {
this.open = false;
},
//
handleSelectionChange(val) {
this.multipleSelection = val;
},
//
refresh() {
let timestamp = new Date().getTime();
let min = 100; // 1000
let max = 999; // 9999
let randomFourDigitNumber = Math.floor(Math.random() * (max - min + 1)) + min;
this.returnsForm.orderNumber = timestamp+randomFourDigitNumber.toString();
},
//
async JudgmentButton(){
let judgmentPermissions1 = await this.judgmentPermissions("盘点审核");
if (judgmentPermissions1 > 0){
this.auditFlag=false,
this.voidFlag=false
}
let judgmentPermissions2 = await this.judgmentPermissions("盘点入库");
if (judgmentPermissions2 > 0){
this.storageFlag = false
}
let judgmentPermissions3 = await this.judgmentPermissions("盘点废止");
if (judgmentPermissions3 > 0){
this.voidFlag=false
}else {
this.voidFlag=true
}
},
//
async judgmentPermissions(data) {
let fil ={
auditPrem:data
}
return await getAuditPremApi(fil).then(res => {
return res.data
});
},
async save(){
let this_ = this
//
if (this_.returnsForm.orderNumber == null) {
this.$modal.msgError("进货单号不能为空");
return -1;
}else if (this_.returnsForm.orderDate == null) {
this.$modal.msgError("进货时间不能为空");
return -1;
}else if(this_.detailsList.length<=0) {
this.$modal.msgError("进货单不能为空");
return -1;
}
if (this_.returnsId == null) {
//
this_.returnsForm.approvalStatus = 'await'
await addReturnsApi(this_.returnsForm).then(res=>{
this_.returnsId = res.data.id
}).catch(res=>{
this.$modal.msgError("保存失败");
return;
})
}else {
//
this_.returnsForm.id = this_.returnsId
await editReturnsApi(this_.returnsForm).then(res=> {
}).catch(res=>{
this.$modal.msgError("保存失败");
return;
})
}
//
this_.detailsList.forEach(data=>{
data.returnsId = this_.returnsId
})
await batchProcessingApi(this_.detailsList).then(res=>{
this.$modal.msgSuccess("保存成功");
this.goToAbout();
}).catch(res=>{
this.$modal.msgError("保存失败");
})
},
//
audit(){
//
let number = this.save();
if (number != -1) {
//
let fil ={
id: this.inventoryId
}
console.log(" id: this.ReturnsId",fil)
auditInventoryApi(fil).then(res => {
this.state = 'ysh'
this.$modal.msgWarning("审核成功");
this.goToAbout()
})
}
},
//
storage() {
let this_ = this;
if (this_.inventoryNo.inventoryNo == null) {
this.$modal.msgWarning("请先选择进货单号");
return;
}else if (this_.inventoryNo.inventoryDate==null) {
this.$modal.msgWarning("请先选择进货时间");
return;
}
this.$confirm('确认后盘点中的对应油品入库油罐库存将发生变化,且不可逆,确认已按照盘点数量入库吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
//
let fil ={
id: this.inventoryId
}
storageInventoryApi(fil).then(res => {
this.state = 'qrts'
this.$modal.msgWarning("入库成功");
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消'
});
});
},
//
abolition(){
if (this.inventoryId < 0) {
this.$modal.msgWarning("数据未保存,不可废弃");
return;
}
this.$confirm('确定要废弃盘点好的数据吗', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
let fil ={
id: this.inventoryId
}
abolitionInventoryApi(fil).then(res => {
if (res.data) {
this.state = 'yzf'
this.$modal.msgWarning("作废成功");
this.goToAbout()
} else {
this.$modal.msgWarning("暂无作废权限");
}
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消'
});
})
},
}
}
</script>
<style scoped>
.app-container{
width: 100%;
height: 100%;
background: #f6f8f9;
}
.box {
height: 100%;
width: 50%;
margin-right: 10px;
background-color: rgba(204, 204, 204, 0.3);
border-radius: 10px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
}
</style>

View File

@ -0,0 +1,222 @@
<template>
<div class="app-container">
<el-card >
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="业务单号" prop="orderNumber">
<el-input v-model="queryParams.orderNumber" placeholder="请输入业务单号" />
</el-form-item>
<el-form-item label="供应商" v-model="queryParams.supplierId" prop="status">
<el-select
v-model="queryParams.supplierId"
placeholder="全部"
clearable
style="width: 230px"
>
<el-option v-for="item in supplierList" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
<el-form-item label="状态" v-model="queryParams.approvalStatus" prop="status">
<el-select v-model="queryParams.approvalStatus" placeholder="请选择状态" style="150px">
<el-option
v-for="dict in dict.type.oilReturnsdStatus"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label="日期选择" prop="status">
<el-date-picker
v-model="queryParams.dateRange"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</el-form-item> -->
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card style="margin-top: 20px" >
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
icon="el-icon-plus"
@click="detailsAdd"
>新增退货订单</el-button>
</el-col>
<!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
</el-row>
<el-table ref="tables"
v-loading="loading"
:data="returnsList"
:default-sort="defaultSort">
<el-table-column label="业务单号" align="center" prop="orderNumber"/>
<el-table-column label="供应商" align="center" prop="supplierName"/>
<el-table-column label="退货数量" align="center" prop="returnQuantity"/>
<el-table-column label="单据金额" align="center" prop="totalAmount"/>
<el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope">
<div slot="reference" class="name-wrapper">
<el-tag v-if ="scope.row.approvalStatus == 'await'" size="medium">待审核</el-tag>
<el-tag v-if ="scope.row.approvalStatus == 'qrts'" type="success" size="medium">已审核入库</el-tag>
<el-tag v-if ="scope.row.approvalStatus == 'yzf'" type="danger" size="medium">已作废</el-tag>
<el-tag v-if ="scope.row.approvalStatus == 'ysh'" type="danger" size="medium">已审核</el-tag>
</div>
</template>
</el-table-column>
<el-table-column label="制单人" align="center" prop="createByName"/>
<el-table-column label="制单日期" align="center" prop="orderDate" width="200">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.orderDate) }}</span>
</template>
</el-table-column>
<el-table-column label="审核人" align="center" prop="approverName"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="dispose(scope.row)"
>处理单据</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.page"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</el-card>
</div>
</template>
<script>
import {delInventoryApi, getInventoryApi} from "@/api/oilConfig/oilInventory";
import {getReturnsPageApi} from "@/api/convenienceStore/returns";
import {listSupplier} from "@/api/convenienceStore/supplier";
export default {
name: "index",
dicts: ['oilReturnsdStatus'],
data() {
return {
returnsList:[],
//
supplierList:[],
//
title:'',
//
showSearch: true,
disableInput: false, //
//
open: false,
//
total: 0,
//
queryParams: {
orderNumber: "",
approvalStatus: "",
status: '',
supplierId: '',
dateRange: '',
page: null,
pageSize: null,
},
//
loading: false,
//
defaultSort: {prop: 'createTime', order: 'descending'},
}
},
async created() {
await this.getList();
this.getQueryList();
},
methods: {
//
getList(){
this.loading = true;
getReturnsPageApi(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.returnsList = response.data.records;
this.total = response.data.total;
})
this.loading = false;
},
//
getQueryList(){
listSupplier().then(response => {
this.supplierList = response.data.records
})
},
detailsAdd() {
this.$router.push({
name: 'returns-details'
});
},
//
dispose(data) {
this.$router.push({
name: 'returns-details',
params: {
PreturnsId: data.id,
PorderNumber: data.orderNumber,
PorderDate: data.orderDate,
PapprovalStatus: data.approvalStatus
},
});
},
//
resetQuery() {
this.queryParams = {}
},
//
handleDel(data) {
delInventoryApi(data).then(response => {
this.$modal.msgSuccess("删除成功");
this.getList();
})
},
//
handleQuery() {
this.queryParams.page = 1;
this.getList();
},
}
}
</script>
<style scoped>
.app-container{
width: 100%;
height: 100%;
background: #f6f8f9;
}
</style>