management/src/views/invoicing/supplier_manage/purchase_detail.vue

581 lines
22 KiB
Vue

<template>
<div class="app-container">
<div class="head-container">
<el-radio-group v-model="query.time" @change="timeChange">
<el-radio-button :label="item.value" v-for="item in timeList" :key="item.label">{{ item.label
}}</el-radio-button>
</el-radio-group>
</div>
<div class="head-container" v-if="query.time == 'custom'">
<el-date-picker v-model="query.createdAt" type="daterange" range-separator="至" start-placeholder="开始日期"
end-placeholder="结束日期" value-format="yyyy-MM-dd HH:mm:ss" @change="getTableData">
</el-date-picker>
</div>
<div class="head-container">
<div class="filter_wrap">
<el-select v-model="query.status" placeholder="付款状态">
<el-option label="待支付" value="0"></el-option>
<el-option label="已付款" value="1"></el-option>
</el-select>
<el-select v-model="query.type" placeholder="选择类型">
<el-option label="进货" value="purveyor"></el-option>
<el-option label="退货" value="reject"></el-option>
</el-select>
<el-button type="primary" @click="getTableData">查询</el-button>
<el-button @click="resetHandle">重置</el-button>
</div>
</div>
<div class="head-container">
<div class="info_list">
<div class="item">
<div class="icon_wrap" style="background-color: #F2D7FF;">
<i class="icon el-icon-info" style="color:#C978EE;"></i>
</div>
<div class="info">
<div class="n">¥{{ info.totalAmount }}</div>
<div class="intro">总交易{{ info.waitCount }}笔</div>
</div>
</div>
<div class="item">
<div class="icon_wrap" style="background-color: #DFFECC;">
<i class="icon el-icon-success" style="color:#47B505;"></i>
</div>
<div class="info">
<div class="n">¥{{ info.paidAmount }}</div>
<div class="intro">已支付金额</div>
</div>
</div>
<div class="item">
<div class="icon_wrap" style="background-color: #FFE7D6;">
<i class="icon el-icon-circle-plus" style="color: #FF6B00;"></i>
</div>
<div class="info">
<div class="n">¥{{ info.waitAmount }}</div>
<div class="intro">待支付金额</div>
</div>
</div>
<div class="item">
<div class="icon_wrap" style="background-color: #FFF1D5;">
<i class="icon el-icon-warning" style="color: #FEB420;"></i>
</div>
<div class="info">
<div class="n">{{ info.waitNumber }}</div>
<div class="intro">待支付笔数</div>
</div>
</div>
</div>
</div>
<!-- <div class="head-container">
<div class="select_count_wrap">
<div class="select_count">
<i class="icon el-icon-warning"></i>
已选中
<span class="n">{{ selectCount }}</span>
</div>
<el-button>批量付款</el-button>
</div>
</div> -->
<div class="head-container">
<el-table :data="tableData.list" v-loading="tableData.loading" @select="selectHandle"
@select-all="selectHandle">
<el-table-column type="selection" width="55" align="center"></el-table-column>
<el-table-column label="创建日期" prop="createdAt">
<template v-slot="scope">
{{ dayjs(scope.row.createdAt).format('YYYY-MM-DD HH:mm:ss') }}
</template>
</el-table-column>
<el-table-column label="类型" prop="type">
<template v-slot="scope">
{{ scope.row.type | typeFilter }}
</template>
</el-table-column>
<el-table-column label="应付金额" prop="totalAmount">
<template v-slot="scope">
¥{{ scope.row.totalAmount }}
</template>
</el-table-column>
<el-table-column label="已付款金额" prop="totalAmount">
<template v-slot="scope">
<span style="color: #47B505;">
¥{{ scope.row.paidAmount }}
</span>
</template>
</el-table-column>
<el-table-column label="待付款金额" prop="waitAmount">
<template v-slot="scope">
<span class="num"> ¥{{ scope.row.waitAmount }}</span>
</template>
</el-table-column>
<el-table-column label="状态" prop="status">
<template v-slot="scope">
<el-tag type="info">
{{ types.find(item => item.value == scope.row.status).label }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="付款方式" prop="payType"></el-table-column>
<el-table-column label="备注" prop="remark"></el-table-column>
<el-table-column label="付款时间" prop="updatedAt">
<template v-slot="scope">
{{ scope.row.paidAt && dayjs(scope.row.paidAt).format('YYYY-MM-DD HH:mm:ss') }}
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<template v-slot="scope">
<el-button type="text" size="mini" round @click="Uppop(scope.row.id)">付款</el-button>
<el-button type="text" size="mini"
@click="typedialogshowsumbit(scope.row.id)">账单付款记录</el-button>
<el-button type="text" size="mini" @click="stockData.size = 10,
stockData.page = 0, gettbConsInfoFlowstock(scope.row)">出入库记录</el-button>
</template>
</el-table-column>
</el-table>
</div>
<el-pagination :total="tableData.total" :current-page="tableData.page + 1" :page-size="tableData.size"
@current-change="paginationChange" layout="total, sizes, prev, pager, next, jumper"></el-pagination>
<!-- 付款弹窗组件 -->
<el-dialog title="" :visible.sync="dialogTableVisible" width="350px">
<el-form :rules="rules" ref="ruleForm" :model="ruleForm">
<el-form-item label="付款金额" label-width="80px" prop="montey">
<el-input v-model="ruleForm.montey" placeholder="请输入金额" type="number" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="付款方式" label-width="80px">
<el-input v-model="ruleForm.payType" placeholder="请输入付款方式" type="text"
autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="备注" label-width="80px">
<el-input v-model="ruleForm.remark" placeholder="请输备注" type="text" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogTableVisible = false; ruleForm.montey = ''; ruleForm.payType = ''">取
消</el-button>
<el-button type="primary" @click="sumbit('ruleForm')">确 定</el-button>
</div>
</el-dialog>
<el-dialog title="账单付款记录" :visible.sync="typedialogshow">
<div class="head-container">
<el-input v-model="querytypedialogshow.type" size="small" clearable placeholder="支付方式"
style="width: 100%;" class="filter-item" @keyup.enter.native="getTableDatatype" />
<div style="margin-top: 10px;">
<el-button type="primary" @click="getTableDatatype">查询</el-button>
<el-button @click="resetHandletype">重置</el-button>
</div>
</div>
<el-table ref="table" :data="tableDatatype.data" v-loading="tableDatatype.loading" row-key="id">
<el-table-column label="支付方式" prop="payType" />
<el-table-column label="支付金额" prop="paidAmount" />
<el-table-column label="备注" prop="remark" />
<el-table-column label="创建时间" prop="createTime">
<template v-slot="scope">
{{ dayjs(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
</template>
</el-table-column>
</el-table>
</el-dialog>
<!--入库记录 -->
<el-dialog title="出入库记录" :visible.sync="variabilityshow" width="75%">
<div class="head-container">
<el-table ref="table" :data="stockData.data" v-loading="stockData.loading" row-key="id" height="450">
<el-table-column label="类型" prop="type">
<template v-slot="scope">
{{ scope.row.type == 'reject' ? '退货出库' : '供应商入库' }}
</template>
</el-table-column>
<el-table-column label="状态" prop="status">
<template v-slot="scope">
{{ scope.row.status == 'status' ? '正常 ' : '作废' }}
</template>
</el-table-column>
<el-table-column label="备注" prop="remark">
</el-table-column>
<el-table-column label="创建时间" prop="stockTime">
<template v-slot="scope">
{{ dayjs(scope.row.stockTime).format('YYYY-MM-DD HH:mm:ss') }}
</template>
</el-table-column>
</el-table>
</div>
<div class="head-container">
<el-pagination :total="stockData.total" :current-page="stockData.page + 1" :page-size="stockData.size"
layout="total, sizes, prev, pager, next, jumper" @current-change="wstockChange" @size-change="(e) => {
stockData.size = e;
stockData.page = 0;
gettbConsInfoFlowstock();
}" />
</div>
</el-dialog>
</div>
</template>
<script>
import dayjs from 'dayjs'
import { tbShopPurveyorTransactInfo, paidAmount, dictDetail, tbShopPurveyorTransactSum, tbShopPurveyorTransacttransactPayInfos, tbProductStockOperatepage } from '@/api/invoicing'
export default {
data() {
return {
// 付款当前的id
idinfo: "",
dayjs,
dialogTableVisible: false,
timeList: [
{
label: '全部',
value: 'all'
},
{
label: '今天',
value: '0'
},
{
label: '昨天',
value: '-1'
},
{
label: '最近7天',
value: '-7'
},
{
label: '最近30天',
value: '-30'
},
{
label: '本周',
value: 'week'
},
{
label: '本月',
value: 'moth'
},
{
label: '自定义',
value: 'custom'
}
],
types: [
{
value: 0,
label: '待付款'
},
{
value: 1,
label: '已付款'
},
{
value: '-1',
label: '作废'
}
],
ruleForm: {
montey: null,
payType: null,
remark: ""
},
selectCount: 0,
query: {
type: '',
status: '',
time: 'all',
createdAt: []
},
tableData: {
page: 0,
size: 10,
total: 0,
sort: 'id',
loading: false,
list: []
},
info: '',
rules: {
montey: [
{ required: true, message: '请输入金额', trigger: 'blur' },
],
},
typedialogshow: false,//查看详情
querytypedialogshow: {
type: '',
id: ''
},
tableDatatype: {
page: 0,
size: 10,
total: 0,
loading: false,
list: []
},
variabilityshow: false,
variabilitytitle: '',
stockData: {
data: [],
page: 0,
size: 10,
loading: false,
total: 0,
id: ''
},
}
},
filters: {
typeFilter(t) {
const m = {
purveyor: '进货单',
reject: '退货单',
cons_in: '耗材入库',
cons_out: '耗材出库'
}
return m[t]
}
},
mounted() {
this.getTableData()
},
methods: {
Uppop(id) {
this.dialogTableVisible = true
this.idinfo = id
},
sumbit(formName) {
this.$refs[formName].validate(async (valid) => {
if (valid) {
this.dialogTableVisible = false
const res = await paidAmount({
id: this.idinfo,
paidAmount: this.ruleForm.montey,
payType: this.ruleForm.payType,
remark: this.ruleForm.remark
})
this.$message({ type: 'success', message: '付款成功!' });
this.ruleForm.montey = ''
this.ruleForm.payType = ''
this.getTableData()
} else {
return false;
}
});
},
async getTableData() {
this.tableData.loading = true
try {
const res = await tbShopPurveyorTransactInfo({
page: this.tableData.page,
size: this.tableData.size,
sort: this.tableData.sort,
purveyorId: this.$route.query.purveyorId,
status: this.query.status,
type: this.query.type,
createdAt: this.query.createdAt,
})
this.tableData.loading = false
this.tableData.list = res.content
this.tableData.total = res.totalElements
this.tbShopPurveyorTransactSum()
} catch (error) {
console.log(error);
}
},
// 重置查询
resetHandle() {
this.query.time = 'all'
this.query.createdAt = []
this.tableData.page = 0;
this.query.type = ''
this.query.status = ''
this.getTableData()
},
// 分页回调
paginationChange(e) {
this.tableData.page = e - 1
this.getTableData()
},
// 选择时间
timeChange(e) {
this.query.createdAt = []
const format0 = 'YYYY-MM-DD 00:00:00'
const format1 = 'YYYY-MM-DD 23:59:59'
switch (e) {
case '0':
this.query.createdAt = [dayjs().format(format0), dayjs().format(format1)]
break;
case '-1':
this.query.createdAt = [dayjs().add(-1, 'day').format(format0), dayjs().add(-1, 'day').format(format1)]
break;
case '-7':
this.query.createdAt = [dayjs().add(-7, 'day').format(format0), dayjs().format(format1)]
break;
case '-30':
this.query.createdAt = [dayjs().add(-30, 'day').format(format0), dayjs().format(format1)]
break;
case 'week':
this.query.createdAt = [dayjs().startOf('week').format(format0), dayjs().endOf('week').format(format1)]
break;
case 'moth':
this.query.createdAt = [dayjs().startOf('month').format(format0), dayjs().endOf('month').format(format1)]
break;
default:
break;
}
this.getTableData()
},
selectHandle(selection, row) {
this.selectCount = 0
this.selectCount = selection.length
},
async tbShopPurveyorTransactSum() {
this.info = await tbShopPurveyorTransactSum({ purveyorId: this.$route.query.purveyorId, type: this.query.type })
},
//记录分页
paginationChangetype(e) {
this.tableDatatype.page = e - 1
this.getTableDatatype()
},
// 记录重置查询
resetHandletype() {
this.querytypedialogshow.type = ''
this.tableData.page = 0
this.getTableDatatype()
},
typedialogshowsumbit(ID) {
this.querytypedialogshow.id = ID
this.getTableDatatype()
},
//记录列表
async getTableDatatype() {
this.tableDatatype.loading = true
try {
const res = await tbShopPurveyorTransacttransactPayInfos({
// page: this.tableDatatype.page,
// size: this.tableDatatype.size,
type: this.querytypedialogshow.type,
id: this.querytypedialogshow.id
})
this.typedialogshow = true
this.tableDatatype.loading = false
this.tableDatatype.data = res
this.tableDatatype.total = res.totalElements
} catch (error) {
console.log(error)
}
},
wstockChange(e) {
this.stockData.page = e - 1;
this.gettbConsInfoFlowstock();
},
async gettbConsInfoFlowstock(item) {
if (item) {
this.stockData.id = item.id
}
this.variabilityshow = true
this.stockData.loading = true;
let arr = []
// if (this.query.createdAt.length) {
// arr = [this.query.createdAt[0] + ' 00:00:00', this.query.createdAt[1] + ' 23:59:59']
// } else {
// arr = []
// }
let res = await tbProductStockOperatepage({
page: this.stockData.page,
size: this.stockData.size,
shopId: localStorage.getItem("shopId"),
type: ["cons_in", "cons_out"],//预留耗材id
purveyorId: this.stockData.id,//列名
createdAt: arr//耗材id
})
this.stockData.loading = false;
this.stockData.data = res.content;
this.stockData.total = res.totalElements;
},
}
}
</script>
<style scoped lang="scss">
.select_count_wrap {
display: flex;
align-items: center;
.select_count {
display: flex;
align-items: center;
justify-content: center;
background-color: #e7f3ff;
width: 120px;
height: 40px;
font-size: 14px;
margin-right: 10px;
border-radius: 4px;
.icon {
margin-right: 4px;
}
.n {
margin: 0 4px;
}
.icon,
.n {
color: #409EFF;
}
}
}
.num {
color: #F56C6C;
font-weight: bold;
}
.count {
color: #409EFF;
}
.info_list {
display: flex;
gap: 20px;
.item {
flex: 1;
background-color: #fff;
padding: 20px;
display: flex;
align-items: center;
background-color: #f5f5f5;
.icon_wrap {
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
padding: 2px;
.icon {
font-size: 40px;
}
}
.info {
flex: 1;
display: flex;
flex-direction: column;
padding-left: 20px;
.n {
font-size: 28px;
text-indent: -6px;
}
.intro {
font-size: 12px;
color: #999;
}
}
}
}
</style>
<!-- <style>
/deep/ .el-dialog__body{
padding-right: 20px!important;
}
</style> -->