Merge remote-tracking branch 'origin/main-20240105' into main-20240105

main-20240105
gongzeliang 8 months ago
commit d012d2c68d

@ -5,7 +5,8 @@ ENV = 'development'
VUE_APP_TITLE = 链友融财务数字一体化信息系统
# 链友融财务数字一体化信息系统/开发环境
VUE_APP_BASE_API = 'https://2537287x0n.imdo.co'
# VUE_APP_BASE_API = 'https://2537287x0n.imdo.co'
VUE_APP_BASE_API = 'https://351009q0x9.oicp.vip'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true

@ -0,0 +1,54 @@
import request from '@/plugin/axios'
// 创建银行账户信息
export function createBankAccountInfo(data) {
return request({
url: "/bs/bank-account-info/create",
method: "post",
data: data,
});
}
// 更新银行账户信息
export function updateBankAccountInfo(data) {
return request({
url: "/bs/bank-account-info/update",
method: "put",
data: data,
});
}
// 删除银行账户信息
export function deleteBankAccountInfo(id) {
return request({
url: "/bs/bank-account-info/delete?id=" + id,
method: "delete",
});
}
// 获得银行账户信息
export function getBankAccountInfo(id) {
return request({
url: "/bs/bank-account-info/get?id=" + id,
method: "get",
});
}
// 获得银行账户信息分页
export function getBankAccountInfoPage(query) {
return request({
url: "/bs/bank-account-info/page",
method: "get",
params: query,
});
}
// 导出银行账户信息 Excel
export function exportBankAccountInfoExcel(query) {
return request({
url: "/bs/bank-account-info/export-excel",
method: "get",
params: query,
responseType: "blob",
});
}

@ -61,10 +61,11 @@ export function getByPlanDetail(id) {
}
// 确认申请
export function confirmApi(id) {
export function confirmApi(data) {
return request({
url: '/bs/payment-apply/paymentAffirm?id=' + id,
method: 'get',
url: '/bs/payment-apply/paymentAffirm',
method: 'post',
data
})
}
// 取消确认

@ -0,0 +1,75 @@
import request from '@/plugin/axios'
// 创建报销-供应商信息
export function createVendor(data) {
return request({
url: '/bs/vendor/create',
method: 'post',
data: data
})
}
// 更新报销-供应商信息
export function updateVendor(data) {
return request({
url: '/bs/vendor/update',
method: 'put',
data: data
})
}
// 删除报销-供应商信息
export function deleteVendor(id) {
return request({
url: '/bs/vendor/delete?id=' + id,
method: 'delete'
})
}
// 获得报销-供应商信息
export function getVendor(id) {
return request({
url: '/bs/vendor/get?id=' + id,
method: 'get'
})
}
// 获得报销-供应商信息分页
export function getVendorPage(query) {
return request({
url: '/bs/vendor/page',
method: 'get',
params: query
})
}
// 导出报销-供应商信息 Excel
export function exportVendorExcel(query) {
return request({
url: '/bs/vendor/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}
// 百度云接口识别
export function baiduScanApi(data) {
return request({
url: '/bs/vendor/buildBusinessLicense',
method: 'post',
data
})
}
// 对公
export function vendorBankPage(query) {
return request({
url: '/bs/vendor-bank/page',
method: 'get',
params: query
})
}

@ -0,0 +1,54 @@
import request from '@/plugin/axios'
// 创建对公付款
export function createVendorPayment(data) {
return request({
url: '/bs/vendor-payment/create',
method: 'post',
data: data
})
}
// 更新对公付款
export function updateVendorPayment(data) {
return request({
url: '/bs/vendor-payment/update',
method: 'put',
data: data
})
}
// 删除对公付款
export function deleteVendorPayment(id) {
return request({
url: '/bs/vendor-payment/delete?id=' + id,
method: 'delete'
})
}
// 获得对公付款
export function getVendorPayment(id) {
return request({
url: '/bs/vendor-payment/get?id=' + id,
method: 'get'
})
}
// 获得对公付款分页
export function getVendorPaymentPage(query) {
return request({
url: '/bs/vendor-payment/page',
method: 'get',
params: query
})
}
// 导出对公付款 Excel
export function exportVendorPaymentExcel(query) {
return request({
url: '/bs/vendor-payment/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}

@ -0,0 +1,54 @@
import request from '@/plugin/axios'
// 创建对公收款
export function createVendorReceipt(data) {
return request({
url: '/bs/vendor-receipt/create',
method: 'post',
data: data
})
}
// 更新对公收款
export function updateVendorReceipt(data) {
return request({
url: '/bs/vendor-receipt/update',
method: 'put',
data: data
})
}
// 删除对公收款
export function deleteVendorReceipt(id) {
return request({
url: '/bs/vendor-receipt/delete?id=' + id,
method: 'delete'
})
}
// 获得对公收款
export function getVendorReceipt(id) {
return request({
url: '/bs/vendor-receipt/get?id=' + id,
method: 'get'
})
}
// 获得对公收款分页
export function getVendorReceiptPage(query) {
return request({
url: '/bs/vendor-receipt/page',
method: 'get',
params: query
})
}
// 导出对公收款 Excel
export function exportVendorReceiptExcel(query) {
return request({
url: '/bs/vendor-receipt/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}

@ -0,0 +1,139 @@
<template>
<div class="student-card common-list-contain">
<div class="student-base">
<div class="list-box">
<!-- <div class="box-lf">
<van-image width="3rem" height="3rem" fit="cover" :src="require('@/assets/images/invoice.png')" />
<div class="bt">{{}}</div>
</div> -->
<div class="box-cr">
<div class="cr-bt" style="margin-top: 0.6rem;">
<div class="tags" :style="`border: 1px solid ${handleFilterStatus(DICT_TYPE.BS_EXPENSE_APPLY_STATUS,itemData.status).color};color:${handleFilterStatus(DICT_TYPE.BS_EXPENSE_APPLY_STATUS,itemData.status).color}`"> {{handleFilterStatus(DICT_TYPE.BS_EXPENSE_APPLY_STATUS,itemData.status).label}}</div>
</div>
<div class="ct-md">
<div class="mt5" style="color:#333">
付款编号 {{itemData.vendorPaymentNo}}
</div>
<div style="margin-top: 0.3rem;color:#333 ">
申请人{{itemData.createName}}
</div>
<div style="margin-top: 0.3rem;color:#333 ">
申请部门{{itemData.deptName}}
</div>
<div style="margin-top: 0.3rem;color:#333 ">
项目名称{{itemData.projectName}}
</div>
<div style="margin-top: 0.3rem;color:#333 ">
项目负责人{{itemData.projectManager}}
</div>
<div style="margin-top: 0.3rem;color:#333 ">
付款类型{{getDictDataLabel(DICT_TYPE.BS_BANK_TYPE,itemData.receiptType) || ''}}
</div>
<div style="margin-top: 0.3rem;color:#333 ">
付款金额{{itemData.amount}}
</div>
<div style="margin-top: 0.3rem;color:#333 ">
审批节点
<span v-for="(items,index) in itemData.taskNames" :key="index">{{ items }} </span>
</div>
<div style="margin-top: 0.3rem;color:#333 ">
创建时间{{ dayjs(itemData.createTime).format('YYYY/MM/DD')}}
</div>
</div>
</div>
<div class="box-rt">
<van-icon class="icon-box" v-hasPermi="['bs:vendor-payment:query']" @click="handleShow(itemData.id)" name="eye-o" color="#05A9FF" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:vendor-payment:update']" @click="handleEdit(itemData.id, itemData.status, itemData.creator)" name="edit" :color="!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator)) ?'#ccc':''" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:vendor-payment:delete']" @click="handleDel(itemData.id, itemData.status, itemData.creator)" name="delete-o" :color="!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator)) ?'#ccc':'#EC3359'" size="25" />
<!-- <van-icon class="icon-box" v-hasPermi="['bs:supplier-contract:delete']" @click="handleMerge(itemData.id, itemData.status, itemData.creator)" name="envelop-o" :color="!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator)) ?'#05A9FF':'#ccc'" :size="25" /> -->
</div>
</div>
</div>
</div>
</template>
<script>
import { getDictDataLabel, handleFilterStatus } from "@/utils/dict";
import { deleteVendorPayment } from "@/api/bs/vendorPayment"
import dayjs from 'dayjs'
import { Dialog } from 'vant'
export default {
props: {
itemData: {
required: true,
default: () => { }
},
},
components: {
},
data() {
return {
jumoStudentId: null
}
},
activated() {
if (this.jumoStudentId) {
this.handleUpdataInfo()
}
},
mounted() {
},
computed: {
userInfo() {
return JSON.parse(window.localStorage.getItem('userInfo') || { dept: {} })
},
},
methods: {
handleMerge(id, status) {
if (status == 0) {
return
}
},
handleEdit(id, status,creator) {
if (!(status==0 || (status ==3 && this.userInfo.id ==creator))) {
return
}
this.jumoStudentId = id
this.$router.push({
path: '/payment',
query: { id, type: 'edit' }
})
},
handleDel(id, status,creator) {
if (!(status==0 || (status ==3 && this.userInfo.id ==creator))) {
return
}
Dialog.confirm({
title: '提示',
message: '你确定要删除吗?',
})
.then(() => {
deleteVendorPayment(id).then(() => {
this.$emit('onAllRefresh')
})
})
},
handleFilterStatus,
getDictDataLabel,
handleShow(id) {
this.jumoStudentId = id
this.$router.push({
path: '/payment',
query: { id, type: 'show' }
})
},
dayjs,
handleUpdataInfo() {
this.jumoStudentId = null
this.$emit('onUpdataInfo', this.itemData.id)
},
}
}
</script>
<style lang="scss" scoped>
@import '@/assets/style/common/newList.scss';
</style>

@ -0,0 +1,139 @@
<template>
<div class="student-card common-list-contain">
<div class="student-base">
<div class="list-box">
<!-- <div class="box-lf">
<van-image width="3rem" height="3rem" fit="cover" :src="require('@/assets/images/invoice.png')" />
<div class="bt">{{}}</div>
</div> -->
<div class="box-cr">
<div class="cr-bt" style="margin-top: 0.6rem;">
<div class="tags" :style="`border: 1px solid ${handleFilterStatus(DICT_TYPE.BS_EXPENSE_APPLY_STATUS,itemData.status).color};color:${handleFilterStatus(DICT_TYPE.BS_EXPENSE_APPLY_STATUS,itemData.status).color}`"> {{handleFilterStatus(DICT_TYPE.BS_EXPENSE_APPLY_STATUS,itemData.status).label}}</div>
</div>
<div class="ct-md">
<div class="mt5" style="color:#333">
收款编号 {{itemData.vendorReceiptNo}}
</div>
<div style="margin-top: 0.3rem;color:#333 ">
申请人{{itemData.createName}}
</div>
<div style="margin-top: 0.3rem;color:#333 ">
申请部门{{itemData.deptName}}
</div>
<div style="margin-top: 0.3rem;color:#333 ">
项目名称{{itemData.projectName}}
</div>
<div style="margin-top: 0.3rem;color:#333 ">
项目负责人{{itemData.projectManager}}
</div>
<div style="margin-top: 0.3rem;color:#333 ">
账户类型{{getDictDataLabel(DICT_TYPE.BS_BANK_TYPE,itemData.accountType) || ''}}
</div>
<div style="margin-top: 0.3rem;color:#333 ">
收款金额{{itemData.amount}}
</div>
<div style="margin-top: 0.3rem;color:#333 ">
审批节点
<span v-for="(items,index) in itemData.taskNames" :key="index">{{ items }} </span>
</div>
<div style="margin-top: 0.3rem;color:#333 ">
创建时间{{ dayjs(itemData.createTime).format('YYYY/MM/DD')}}
</div>
</div>
</div>
<div class="box-rt">
<van-icon class="icon-box" v-hasPermi="['bs:vendor-receipt:query']" @click="handleShow(itemData.id)" name="eye-o" color="#05A9FF" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:vendor-receipt:update']" @click="handleEdit(itemData.id, itemData.status, itemData.creator)" name="edit" :color="!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator)) ?'#ccc':''" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:vendor-receipt:delete']" @click="handleDel(itemData.id, itemData.status, itemData.creator)" name="delete-o" :color="!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator)) ?'#ccc':'#EC3359'" size="25" />
<!-- <van-icon class="icon-box" v-hasPermi="['bs:supplier-contract:delete']" @click="handleMerge(itemData.id, itemData.status, itemData.creator)" name="envelop-o" :color="!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator)) ?'#05A9FF':'#ccc'" :size="25" /> -->
</div>
</div>
</div>
</div>
</template>
<script>
import { getDictDataLabel, handleFilterStatus } from "@/utils/dict";
import { deleteVendorReceipt } from "@/api/bs/vendorReceipt"
import dayjs from 'dayjs'
import { Dialog } from 'vant'
export default {
props: {
itemData: {
required: true,
default: () => { }
},
},
components: {
},
data() {
return {
jumoStudentId: null
}
},
activated() {
if (this.jumoStudentId) {
this.handleUpdataInfo()
}
},
mounted() {
},
computed: {
userInfo() {
return JSON.parse(window.localStorage.getItem('userInfo') || { dept: {} })
},
},
methods: {
handleMerge(id, status) {
if (status == 0) {
return
}
},
handleEdit(id, status,creator) {
if (!(status==0 || (status ==3 && this.userInfo.id ==creator))) {
return
}
this.jumoStudentId = id
this.$router.push({
path: '/receipts',
query: { id, type: 'edit' }
})
},
handleDel(id, status,creator) {
if (!(status==0 || (status ==3 && this.userInfo.id ==creator))) {
return
}
Dialog.confirm({
title: '提示',
message: '你确定要删除吗?',
})
.then(() => {
deleteVendorReceipt(id).then(() => {
this.$emit('onAllRefresh')
})
})
},
handleFilterStatus,
getDictDataLabel,
handleShow(id) {
this.jumoStudentId = id
this.$router.push({
path: '/receipts',
query: { id, type: 'show' }
})
},
dayjs,
handleUpdataInfo() {
this.jumoStudentId = null
this.$emit('onUpdataInfo', this.itemData.id)
},
}
}
</script>
<style lang="scss" scoped>
@import '@/assets/style/common/newList.scss';
</style>

@ -37,11 +37,11 @@
<div class="box-rt">
<van-icon class="icon-box" v-hasPermi="[ listType === 'myNewClaim' ? 'bs:expense-claim:myquery' :'bs:expense-claim:query']" @click="handleShow(itemData)" name="eye-o" color="#05A9FF" size="25" />
<!-- <van-icon class="icon-box" v-hasPermi="['bs:expense-claim:create']" v-if="listType !== 'myNewClaim'" @click="handleEdit(itemData.id,itemData.status)" name="edit" :color="itemData.status!=0 && itemData.status!=3 ?'#ccc':''" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:expense-claim:delete']" v-if="listType !== 'myNewClaim'" @click="handleDel(itemData.id,itemData.status)" name="delete-o" :color="itemData.status!=0 && itemData.status!=3 ?'#ccc':'#EC3359'" size="25" />
<!-- <van-icon class="icon-box" v-hasPermi="['bs:expense-claim:create']" v-if="listType !== 'myNewClaim'" @click="handleEdit(itemData.id,itemData.status)" name="edit" :color="!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator)) ?'#ccc':''" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:expense-claim:delete']" v-if="listType !== 'myNewClaim'" @click="handleDel(itemData.id,itemData.status)" name="delete-o" :color="!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator)) ?'#ccc':'#EC3359'" size="25" />
-->
<van-icon class="icon-box" v-hasPermi="['bs:expense-claim:create']" v-if="listType == 'myNewClaim'" @click="handleEdit(itemData)" name="edit" :color="itemData.status!=0 && itemData.status!=3 ?'#ccc':''" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:expense-claim:mydelete']" v-if="listType == 'myNewClaim'" @click="handleDel(itemData.id,itemData.status)" name="delete-o" :color="itemData.status!=0 && itemData.status!=3 ?'#ccc':'#EC3359'" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:expense-claim:create']" v-if="listType == 'myNewClaim'" @click="handleEdit(itemData)" name="edit" :color="!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator)) ?'#ccc':''" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:expense-claim:mydelete']" v-if="listType == 'myNewClaim'" @click="handleDel(itemData.id,itemData.status)" name="delete-o" :color="!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator)) ?'#ccc':'#EC3359'" size="25" />
</div>
</div>
@ -98,7 +98,7 @@ export default {
},
handleEdit(obj) {
const { id, status, billType } = obj
if (status != 0 && status != 3) {
if (!(status==0 || (status ==3 && this.userInfo.id ==creator))) {
return
}
this.jumoStudentId = id
@ -107,8 +107,8 @@ export default {
query: { id, type: 'edit', listType: this.listType, billType }
})
},
handleDel(id, status) {
if (status != 0 && status != 3) {
handleDel(id, status,creator) {
if (!(status==0 || (status ==3 && this.userInfo.id ==creator))) {
return
}
Dialog.confirm({

@ -33,8 +33,8 @@
</div>
<div class="box-rt">
<van-icon class="icon-box" v-hasPermi="['bs:customer-contract:show']" @click="handleShow(itemData.id)" name="eye-o" color="#05A9FF" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:customer-contract:update']" @click="handleEdit(itemData.id, itemData.status)" name="edit" :color="itemData.status!=0 && itemData.status!=3 ?'#ccc':''" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:customer-contract:delete']" @click="handleDel(itemData.id, itemData.status)" name="delete-o" :color="itemData.status!=0 && itemData.status!=3 ?'#ccc':'#EC3359'" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:customer-contract:update']" @click="handleEdit(itemData.id, itemData.status, itemData.creator)" name="edit" :color="!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator)) ?'#ccc':''" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:customer-contract:delete']" @click="handleDel(itemData.id, itemData.status, itemData.creator)" name="delete-o" :color="!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator)) ?'#ccc':'#EC3359'" size="25" />
</div>
</div>
</div>
@ -81,8 +81,8 @@ export default {
return
}
},
handleEdit(id, status) {
if (status != 0 && status != 3 ) {
handleEdit(id, status,creator) {
if (!(status==0 || (status ==3 && this.userInfo.id ==creator)) ) {
return
}
this.jumoStudentId = id
@ -91,8 +91,8 @@ export default {
query: { id, type: 'edit' }
})
},
handleDel(id, status) {
if (status != 0 && status != 3 ) {
handleDel(id, status,creator) {
if (!(status==0 || (status ==3 && this.userInfo.id ==creator)) ) {
return
}
Dialog.confirm({

@ -17,6 +17,9 @@
<div style="margin-top: 0.3rem;color:#333 ">
合同名称{{itemData.contractName}}
</div>
<div style="margin-top: 0.3rem;color:#333 ">
分期说明{{itemData.periodName}}
</div>
<div style="margin-top: 0.3rem;color:#333 ">
供应商名称{{itemData.supplierName}}
</div>
@ -36,24 +39,27 @@
</div>
<div class="box-rt">
<!-- <van-icon class="icon-box" v-hasPermi="['procurement:payApply:show']" @click="handleShow(itemData.id)" name="eye-o" color="#05A9FF" size="25" />
<van-icon class="icon-box" v-hasPermi="['procurement:payApply:edit']" @click="handleEdit(itemData.id, itemData.status)" name="edit" :color="itemData.status!=0 && itemData.status!=3 ?'#ccc':''" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:payment-apply:delete']" @click="handleDel(itemData.id, itemData.status)" name="delete-o" :color="itemData.status!=0 && itemData.status!=3 ?'#ccc':'#EC3359'" size="25" /> -->
<van-icon class="icon-box" v-hasPermi="['procurement:payApply:edit']" @click="handleEdit(itemData.id, itemData.status, itemData.creator)" name="edit" :color="!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator)) ?'#ccc':''" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:payment-apply:delete']" @click="handleDel(itemData.id, itemData.status, itemData.creator)" name="delete-o" :color="!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator)) ?'#ccc':'#EC3359'" size="25" /> -->
<span class="icon-box" @click="handleShow(itemData.id)" v-hasPermi="['procurement:payApply:show']" :style="`color:#05A9FF;`"></span>
<span class="icon-box" @click="handleEdit(itemData.id, itemData.status)" v-hasPermi="['procurement:payApply:edit']" :style="`color:${!(itemData.status!=0 && itemData.status!=3) ?'#05A9FF':'#ccc'};`"></span>
<span class="icon-box" @click="handleDel(itemData.id, itemData.status)" v-hasPermi="['bs:payment-apply:delete']" :style="`color:${!(itemData.status!=0 && itemData.status!=3) ?'#05A9FF':'#ccc'};`"></span>
<span class="icon-box" @click="handleEdit(itemData.id, itemData.status, itemData.creator)" v-hasPermi="['procurement:payApply:edit']" :style="`color:${!(!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator))) ?'#05A9FF':'#ccc'};`"></span>
<span class="icon-box" @click="handleDel(itemData.id, itemData.status, itemData.creator)" v-hasPermi="['bs:payment-apply:delete']" :style="`color:${!(!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator))) ?'#05A9FF':'#ccc'};`"></span>
<span class="icon-box" @click="handleConfirm(itemData)" v-hasPermi="['bs:payment-apply:paymentAffirm']" :style="`color:${!(itemData.status !== 2 || (itemData.status == 2 && itemData.payMentStatus == 1) ) ?'#05A9FF':'#ccc'};`"></span>
<!-- <span class="icon-box" @click="handleConfirm(itemData)" v-hasPermi="['bs:payment-apply:paymentAffirm']"></span> -->
<span class="icon-box" @click="handleCancelConfirm(itemData)" v-hasPermi="['bs:payment-apply:paymentCancel']" :style="`color:${!(itemData.status !== 2 || (itemData.status == 2 && itemData.payMentStatus !== 1)) ?'#05A9FF':'#ccc'};`"></span>
<span class="icon-box" @click="handleUpload(itemData,itemData.payMentStatus == 1 && itemData.status == 2 )" v-hasPermi="['procurement:payApply:upload']" :style="`color:#05A9FF`"> {{ itemData.payMentStatus == 1 && itemData.status == 2 ? '' : itemData.files.length ? '' : ''}}</span>
</div>
</div>
</div>
<!-- 付款计划确认 -->
<PayConfirmToast ref="PayConfirmToast" :isShow="isShow" @onShow="handleOnShow" @onClose="isShow = false" :pId="itemData.id" @onCompelete="handleConfirmToast" />
</div>
</template>
<script>
import { getDictDataLabel, handleFilterStatus } from "@/utils/dict";
import { deletePaymentApply, confirmApi, cancelConfirmApi } from "@/api/bs/paymentApply";
import { deletePaymentApply, cancelConfirmApi } from "@/api/bs/paymentApply";
import dayjs from 'dayjs'
import { Dialog } from 'vant'
export default {
@ -65,10 +71,11 @@ export default {
},
components: {
PayConfirmToast: () => import('@/components/PayConfirmToast'),
},
data() {
return {
isShow: false,
jumoStudentId: null
}
},
@ -86,6 +93,10 @@ export default {
},
},
methods: {
handleOnShow() {
this.jumoStudentId = null
// this.$emit('onShow')
},
handleUpload(row) {
this.$emit('onFile', row)
},
@ -103,27 +114,35 @@ export default {
})
})
},
handleConfirm(row) {
if (row.status !== 2 || (row.status == 2 && row.payMentStatus == 1)) {
return
}
Dialog.confirm({
title: '提示',
message: '您确认要确认付款吗??',
})
.then(() => {
confirmApi(row.id).then(() => {
handleConfirmToast() {
this.isShow = false
this.$nextTick(() => {
this.$refs.PayConfirmToast.newIsShow = false
this.$emit('onAllRefresh')
})
})
},
handleConfirm(row) {
// if (row.status !== 2 || (row.status == 2 && row.payMentStatus == 1)) {
// return
// }
// Dialog.confirm({
// title: '',
// message: '?',
// })
// .then(() => {
// confirmApi(row.id).then(() => {
// this.$emit('onAllRefresh')
// })
// })
this.isShow = true
},
handleMerge(id, status) {
if (status == 0) {
return
}
},
handleEdit(id, status) {
if (status != 0 && status != 3) {
handleEdit(id, status, creator) {
if (!(status == 0 || (status == 3 && this.userInfo.id == creator))) {
return
}
this.jumoStudentId = id
@ -132,8 +151,8 @@ export default {
query: { id, type: 'edit' }
})
},
handleDel(id, status) {
if (status != 0 && status != 3) {
handleDel(id, status, creator) {
if (!(status == 0 || (status == 3 && this.userInfo.id == creator))) {
return
}
Dialog.confirm({

@ -36,9 +36,9 @@
</div>
<div class="box-rt">
<van-icon class="icon-box" v-hasPermi="['bs:supplier-contract:show']" @click="handleShow(itemData.id)" name="eye-o" color="#05A9FF" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:supplier-contract:update']" @click="handleEdit(itemData.id, itemData.status)" name="edit" :color="itemData.status!=0 && itemData.status!=3 ?'#ccc':''" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:supplier-contract:delete']" @click="handleDel(itemData.id, itemData.status)" name="delete-o" :color="itemData.status!=0 && itemData.status!=3 ?'#ccc':'#EC3359'" size="25" />
<!-- <van-icon class="icon-box" v-hasPermi="['bs:supplier-contract:delete']" @click="handleMerge(itemData.id, itemData.status)" name="envelop-o" :color="itemData.status!=0 && itemData.status!=3 ?'#05A9FF':'#ccc'" :size="25" /> -->
<van-icon class="icon-box" v-hasPermi="['bs:supplier-contract:update']" @click="handleEdit(itemData.id, itemData.status, itemData.creator)" name="edit" :color="!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator)) ?'#ccc':''" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:supplier-contract:delete']" @click="handleDel(itemData.id, itemData.status, itemData.creator)" name="delete-o" :color="!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator)) ?'#ccc':'#EC3359'" size="25" />
<!-- <van-icon class="icon-box" v-hasPermi="['bs:supplier-contract:delete']" @click="handleMerge(itemData.id, itemData.status, itemData.creator)" name="envelop-o" :color="!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator)) ?'#05A9FF':'#ccc'" :size="25" /> -->
</div>
</div>
</div>
@ -85,8 +85,8 @@ export default {
return
}
},
handleEdit(id, status) {
if (status != 0 && status != 3 ) {
handleEdit(id, status,creator) {
if (!(status==0 || (status ==3 && this.userInfo.id ==creator)) ) {
return
}
this.jumoStudentId = id
@ -95,8 +95,8 @@ export default {
query: { id, type: 'edit' }
})
},
handleDel(id, status) {
if (status != 0 && status != 3 ) {
handleDel(id, status,creator) {
if (!(status==0 || (status ==3 && this.userInfo.id ==creator)) ) {
return
}
Dialog.confirm({

@ -38,11 +38,11 @@
<!-- {{listType}} -->
<van-icon class="icon-box" v-hasPermi="[listType === 'myNewTrips' ? 'bs:expense-apply:myquery' : 'bs:expense-apply:query']" @click="handleShow(itemData)" name="eye-o" color="#05A9FF" size="25" />
<!-- <van-icon class="icon-box" v-hasPermi="['bs:expense-apply:create']" v-if="listType !== 'myNewTrips'" @click="handleEdit(itemData.id,itemData.status)" name="edit" :color="itemData.status!=0 && itemData.status!=3 ?'#ccc':''" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:expense-apply:delete']" v-if="listType !== 'myNewTrips'" @click="handleDel(itemData.id,itemData.status)" name="delete-o" :color="itemData.status!=0 && itemData.status!=3 ?'#ccc':'#EC3359'" size="25" />
<!-- <van-icon class="icon-box" v-hasPermi="['bs:expense-apply:create']" v-if="listType !== 'myNewTrips'" @click="handleEdit(itemData.id,itemData.status)" name="edit" :color="!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator)) ?'#ccc':''" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:expense-apply:delete']" v-if="listType !== 'myNewTrips'" @click="handleDel(itemData.id,itemData.status)" name="delete-o" :color="!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator)) ?'#ccc':'#EC3359'" size="25" />
-->
<van-icon class="icon-box" v-hasPermi="['bs:expense-apply:create']" v-if="listType == 'myNewTrips'" @click="handleEdit(itemData)" name="edit" :color="itemData.status!=0 && itemData.status!=3 ?'#ccc':''" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:expense-apply:mydelete']" v-if="listType == 'myNewTrips'" @click="handleDel(itemData.id,itemData.status)" name="delete-o" :color="itemData.status!=0 && itemData.status!=3 ?'#ccc':'#EC3359'" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:expense-apply:create']" v-if="listType == 'myNewTrips'" @click="handleEdit(itemData)" name="edit" :color="!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator)) ?'#ccc':''" size="25" />
<van-icon class="icon-box" v-hasPermi="['bs:expense-apply:mydelete']" v-if="listType == 'myNewTrips'" @click="handleDel(itemData.id,itemData.status)" name="delete-o" :color="!(itemData.status==0 || (itemData.status==3 && itemData.id ==itemData.creator)) ?'#ccc':'#EC3359'" size="25" />
</div>
</div>
@ -95,7 +95,7 @@ export default {
},
handleEdit(obj) {
const { id, status, billType } = obj
if (status != 0 && status != 3) {
if (!(status==0 || (status ==3 && this.userInfo.id ==creator))) {
return
}
this.jumoStudentId = id
@ -104,8 +104,8 @@ export default {
query: { id, type: 'edit', listType: this.listType, billType }
})
},
handleDel(id, status) {
if (status != 0 && status != 3) {
handleDel(id, status,creator) {
if (!(status==0 || (status ==3 && this.userInfo.id ==creator))) {
return
}
Dialog.confirm({

@ -0,0 +1,120 @@
<!-- 修改支付方式 -->
<template>
<div>
<van-popup v-model="newIsShow" position="bottom" :close-on-click-overlay="false" @close="hanleCancel" get-container="#app" closeable>
<div class="det-form-header">付款确认</div>
<div class="det-form">
<van-form ref="form" :show-error-message="false" validate-trigger="" :submit-on-enter="false">
<van-field label="是否核销" name="cancelAfterVerification" required input-align="right" label-width="9em" :rules="[{ required: true, message: '请选择是否核销' }]">
<template #input>
<van-radio-group v-model="form.cancelAfterVerification" direction="horizontal">
<van-radio :name="1"></van-radio>
<van-radio :name="0"></van-radio>
</van-radio-group>
</template>
</van-field>
<van-field label="附件" input-align="right" label-width="9em">
<template #input>
<UploadFile @onConfirm="handleUpload" @onShow="handleOnShow" typeStr="PayConfirmToast" :fileList="fileList" />
</template>
</van-field>
</van-form>
<div class="dept-form-footer">
<van-button class="btn" native-type="buttton" @click.stop="hanleCancel" :loading="loading">取消</van-button>
<van-button class="btn" type="info" native-type="buttton" @click.stop="handleSave" :loading="loading">确定</van-button>
</div>
</div>
</van-popup>
</div>
</template>
<script>
import { mapState } from 'vuex'
import { confirmApi } from "@/api/bs/paymentApply";
export default {
props: {
isShow: Boolean,
pId: [String, Number], // id,
},
name: '',
components: {
UploadFile: () => import('@/components/UploadFile')
},
activated() {
console.log('this.isShow...', this.isShow);
},
data() {
return {
loading: false,
form: {
cancelAfterVerification: null
},
fileList: [],
newIsShow: false
}
},
watch: {
isShow: {
handler(val) {
if (val) {
this.handleInitForm()
}
this.newIsShow = val
},
deep: true
}
},
computed: {
...mapState({
roleFlag: state => state.common.user.info.roleFlag
}),
},
methods: {
handleOnShow() {
this.$emit('onShow')
},
handleUpload(list) {
this.fileList = list
},
handleInitForm() {
this.$nextTick(() => {
this.form.cancelAfterVerification = null
this.fileList = []
this.$refs.form.resetValidation()
})
},
handleSave() {
this.$refs.form.validate().then(() => {
this.loading = true
let form = {
id: this.pId,
files: this.fileList
}
confirmApi(form).then(() => {
this.loading = false
this.$sm('付款确认成功!')
this.$emit('onCompelete')
}).catch(() => {
this.loading = false
})
}).catch((err) => {
if (err && err.length > 0 && err[0].name) {
if (err[0].name === 'cancelAfterVerification') {
this.$fm(err[0].message)
}
}
})
},
hanleCancel() {
this.$emit('onClose')
},
}
}
</script>
<style lang='scss' scoped>
// @import './index.scss';
@import '~@/assets/style/order/btnPublic.scss';
</style>

@ -1,13 +1,13 @@
<!-- 上传附件 -->
<template>
<div class="upload-box">
<div class="header-box">
<div :class="`header-box ${['PayConfirmToast'].includes(typeStr) && 'mrNone'}`">
<div class="header-item-box" v-for="(item,index) in list" :key="index" @click.stop="handleToShow(item)">
{{item.name }}
<van-icon name="cross" size="10" @click.stop="handleDel(index)" v-if="['edit','add'].includes(typeStr)" />
<van-icon name="cross" size="10" @click.stop="handleDel(index)" v-if="['edit','add','PayConfirmToast'].includes(typeStr)" />
</div>
</div>
<van-uploader accept="*" multiple :before-read="beforeRead" :after-read="handleAfterRead" v-if="['edit','add'].includes(typeStr)">
<van-uploader accept="*" multiple :before-read="beforeRead" :after-read="handleAfterRead" v-if="['edit','add','PayConfirmToast'].includes(typeStr)">
<van-button icon="plus" size="small" round type="info">上传文件</van-button>
</van-uploader>
</div>
@ -77,13 +77,13 @@ export default {
return true;
},
handleToShow(item) {
this.$emit('onShow')
this.$router.push({
path: '/fileShow',
query: {
url: item.url
}
})
console.log('val...', item);
},
handleDel(index) {
this.list.splice(index, 1)
@ -152,5 +152,9 @@ export default {
// border
}
}
.mrNone {
margin: 0;
justify-content: flex-end;
}
}
</style>

@ -17,5 +17,9 @@ export default {
{ path: '/myCustom', name: `${pre}myCustom`, component: () => import('@/views/contract/myCustom'), meta: { cache: true, title: '客户合同审批列表' } },
{ path: '/custom', name: `${pre}custom`, component: () => import('@/views/contract/custom'), meta: { cache: true, title: '客户合同审批' } },
{ path: '/pay', name: `${pre}pay`, component: () => import('@/views/contract/pay'), meta: { cache: true, title: '付款审批' } },
{ path: '/corporateReceipts', name: `${pre}corporateReceipts`, component: () => import('@/views/contract/corporateReceipts'), meta: { cache: true, title: '对公收款' } },
{ path: '/receipts', name: `${pre}receipts`, component: () => import('@/views/contract/receipts'), meta: { cache: true, title: '收款审批' } },
{ path: '/corporatePayment', name: `${pre}corporatePayment`, component: () => import('@/views/contract/corporatePayment'), meta: { cache: true, title: '对公付款' } },
{ path: '/payment', name: `${pre}payment`, component: () => import('@/views/contract/payment'), meta: { cache: true, title: '付款审批' } },
])('contract-')
}

@ -109,6 +109,16 @@ export const DICT_TYPE = {
BS_PROCUREMENT_TYPE: 'supplier_procurement_state',
// 合同类型(采购状态)
SR_CT_TYPE: 'supplier_ct_type',
// 银行账户类型
BS_BANK_TYPE: "bs_bank_account_info_account_type",
// 申请类型
BS_INDUSTRY: "bs_industry",
// 行业类型
PROJECT_TYPE: "project_type",
// 供应商等级
GYS_LEVEL: "gys_level",
// 币种类型
CURRENCY_TYPE: "currency_type",
}
/**

@ -594,8 +594,8 @@ export default {
let count = '';
for (let key in obj) {
if (Array.isArray(obj[key])) {
obj[key].forEach(function (item){
count = !count?item:count+ `${item}`
obj[key].forEach(function (item) {
count = !count ? item : count + `${item}`
})
}
}
@ -780,7 +780,7 @@ export default {
getExpenseApplyMyPage({
pageNo: 1,
pageSize: 1000,
billType: 'CLSQ',
billType: this.$route.query.billType === 'RCBX' ? 'RCSQ' : 'CLSQ',
expenseFlag: 0,
ids: [],
sortingFieldStr: encodeURIComponent(JSON.stringify([{ field: 'id', order: "desc" }]))

@ -0,0 +1,257 @@
<template>
<div id="orderHeader">
<div class="hf-l-seacrch" v-if="isActSearch">
<form action="/">
<van-search v-model="listQuery.vendorPaymentNo" shape="round" show-action placeholder="请输入付款编号" :clearable="false" @search="onKeywordSearch" @cancel="onKeywordCancel" />
</form>
</div>
<div class="header-filter" :style="isActSearch ? 'padding: 0 0 0 0.5rem' : ''">
<div class="hf-l-list" v-show="!isActSearch">
<van-dropdown-menu class="hf-l-list-menu">
<!-- 供应商名称 -->
<van-dropdown-item title="付款类型" :title-class="isHtab1 ? 'common-act-color' : ''" @open="handleDropOpen()" ref="vanDropItem1">
<div class="hf-drop-view">
<div class="hf-drop-contain">
<div class="hr-drop-filter-item" @click.stop="handleClass1(item.value)" v-for="item in accountList" :key="item.value">
<van-icon v-if="listQuery.receiptType && listQuery.receiptType == item.value" name="success" color="#0088FE" />
<span :class="{'hr-drop-filter-item-act': listQuery.receiptType && listQuery.receiptType == item.value }">{{item.label}}</span>
</div>
</div>
<div class="common-double-button">
<van-button class="common-double-button-l" @click="handleReset()"></van-button>
<van-button class="common-double-button-r" @click="handleConfirm"></van-button>
</div>
</div>
</van-dropdown-item>
<!-- 类别 -->
<van-dropdown-item title="状态" :title-class="isHtab4 ? 'common-act-color' : ''" @open="handleDropOpen()" ref="vanDropItem4">
<div class="hf-drop-view">
<div class="hf-drop-contain">
<div class="hr-drop-filter-item" @click.stop="handleClass2(item.value)" v-for="item in stateList" :key="item.value">
<van-icon v-if="listQuery.status && listQuery.status == item.value" name="success" color="#0088FE" />
<span :class="{'hr-drop-filter-item-act': listQuery.status && listQuery.status == item.value }">{{item.label}}</span>
</div>
</div>
<div class="common-double-button">
<van-button class="common-double-button-l" @click="handleReset()"></van-button>
<van-button class="common-double-button-r" @click="handleConfirm"></van-button>
</div>
</div>
</van-dropdown-item>
</van-dropdown-menu>
</div>
<div class="hf-r-list" v-show="!isActSearch">
<div class="hf-r-list-item" @click="handleSearch">
<div class="hf-r-icon-bg">
<van-icon name="search" class="hf-r-icon" />
</div>
</div>
</div>
</div>
<van-popup position="bottom" safe-area-inset-bottom v-model="moreFilterShow" :lock-scroll="true" round get-container="#app" lazy-render>
<div class="common-popup moreContain">
<div class="common-popup-header">
<div></div>
<div class="common-popup-header-title">
<span>筛选</span>
</div>
<div class="common-popup-header-close">
<van-icon name="cross" @click="moreFilterShow = false" />
</div>
</div>
<div class="common-popup-body moreContain-body">
<van-form ref="filterForm" :show-error-message="false" validate-trigger="" :submit-on-enter="false">
<RePick v-model="listQuery.remark" label="bumen" :list="areaTree" isLastSelect isCascader isShowSearch title="行程" titleKey="name" isCascaderAllLevelNameSymnol isCell clearable />
</van-form>
</div>
<div class="common-popup-footer">
<van-button style="width: 8rem; margin-right: 1rem;" round @click="handleMoreReset"></van-button>
<van-button type="info" style="width: 8rem;" round @click.stop="handleMoreConfirm">确认</van-button>
</div>
</div>
</van-popup>
</div>
</template>
<script>
import { dayTextFormatter } from '@/utils'
import dayjs from 'dayjs'
import { getDictDatas, DICT_TYPE } from "@/utils/dict";
export default {
props: {
listType: String, // 'detail'
paramProp: Object,
spList: Array, //
},
components: {
RePick: () => import('@/components/ReComponents/RePick'),
},
data() {
return {
defaultDate: null,
dayTextFormatter: dayTextFormatter,
isActSearch: false,
moreFilterShow: false,
isSearch: false,
// courseStateList: [
// { text: '', id: 25 },
// { text: '', id: 0 },
// { text: '', id: 1 }
// ],
listQuery: {},
}
},
computed: {
accountList() {
return getDictDatas(DICT_TYPE.BS_BANK_TYPE) || []
},
isHtab1() {
let isShow = false
if (this.paramProp.receiptType) isShow = true
return isShow
},
isHtab4() {
let isShow = false
if (this.paramProp.status) isShow = true
return isShow
},
areaTree() {
return this.$store.getters.areaTree
},
isMoreAct() {
let bol = false
const listQuery = this.paramProp || {}
if (listQuery.remark) {
bol = true
}
return bol
},
stateList() {
return getDictDatas(DICT_TYPE.BS_EXPENSE_APPLY_STATUS) || []
}
},
methods: {
//
handleDateReset() {
this.listQuery.startDate = null
this.listQuery.endDate = null
this.defaultDate = null
this.$refs.vanCalendar && this.$refs.vanCalendar.reset()
},
handleDateSelect(val) {
if (val.filter(item => item).length === 2) {
this.listQuery.startDate = `${dayjs(val[0]).format('YYYY/MM/DD')} 00:00:00 `
this.listQuery.endDate = `${dayjs(val[1]).format('YYYY/MM/DD')} 23:59:59 `
}
},
handleQuickDate(e) {
this.defaultDate = [dayjs(e.time[0]).toDate(), dayjs(e.time[1]).toDate()]
this.listQuery.startDate = `${e.time[0]} 00:00:00`
this.listQuery.endDate = `${e.time[1]} 23:59:59`
},
handleConfirm() {
this.$refs.vanDropItem4 && this.$refs.vanDropItem4.toggle(false)
this.$refs.vanDropItem1 && this.$refs.vanDropItem1.toggle(false)
this.$emit('onListQuery', this.listQuery)
},
onKeywordCancel() {
this.listQuery.vendorPaymentNo = null
this.isActSearch = false
this.isSearch = false
this.onKeywordSearch()
},
onKeywordSearch() {
this.$emit('onListQuery', this.listQuery)
},
//
handleClass1(val) {
this.listQuery.receiptType = val
},
handleClass2(val) {
this.listQuery.status = val
},
// type : 1 2 3
handleState(val, type) {
if (type == 1) {
const i = this.listQuery.states.findIndex(item => item === val)
if (i > -1) {
this.listQuery.states.splice(i, 1)
} else {
this.listQuery.states.push(val)
}
}
if (type == 2 || type == 3) {
const i = this.listQuery.types.findIndex(item => item === val)
if (i > -1) {
this.listQuery.types.splice(i, 1)
} else {
this.listQuery.types.push(val)
}
}
},
handleInit() {
this.listQuery = {
...this.paramProp
}
console.log('listQuery...', this.listQuery);
if (!(this.listQuery.startDate && this.listQuery.endDate)) {
this.handleDateReset()
}
},
handleDropOpen() {
this.handleInit()
},
onSearch() {
this.handleConfirm()
},
//
handleSearch() {
this.handleInit()
this.listQuery.vendorPaymentNo = this.paramProp.vendorPaymentNo
this.isActSearch = true
},
handleSearchCancel() {
this.listQuery.vendorPaymentNo = null
this.isActSearch = false
this.onKeywordSearch()
},
//
handleMoreFilter() {
this.handleInit()
this.moreFilterShow = true
},
//
handleMoreReset() {
this.listQuery.remark = null
},
handleMoreConfirm() {
this.$emit('onListQuery', this.listQuery)
this.moreFilterShow = false
},
handleReset() {
this.listQuery.status = null
this.listQuery.receiptType = null
},
},
}
</script>
<style lang="scss" scoped>
@import './index.scss';
</style>

@ -0,0 +1,220 @@
<template>
<!-- 对公收款 -->
<div>
<HeaderFilter :listType="listType" :spList="spList" @onListQuery="handleListQuery" :paramProp="listQuery" />
<RMList :moreLoading.sync="moreLoading" :refreshing.sync="refreshing" :finished.sync="finished" @onLoad="handleLoad" @onRefresh="handleRefresh" isMore :tableList="tableList">
<div>
<CorporatePaymentCard v-for="(item,index) in tableList" :key="item.id" :itemData="item" :listType="listType" @onUpdataInfo="handleUpdataInfo($event, index)" @onAllRefresh="handleAllRefresh" />
</div>
</RMList>
<div class="common-bottom-btns" style="bottom:8rem">
<div class="common-bottom-btn" @click="handleTopPage">
<img src="@/assets/images/icons/top.png" alt="">
<span>回到顶部</span>
</div>
</div>
<div class="common-bottom-btns" v-hasPermi="['bs:vendor-payment:create']" style="bottom:10rem">
<div class="common-bottom-btn" @click="handleToAdd">
<img src="@/assets/images/icons/add.png" alt="">
<span>添加付款</span>
</div>
</div>
<div class="common-bottom-btns" style="bottom:6rem">
<div class="common-bottom-btn" @click="handleBack">
<img src="@/assets/images/icons/home.png" alt="">
<span>返回首页</span>
</div>
</div>
</div>
</template>
<script>
import { getScrollTop } from '@/utils'
import { getSupplierCompanyPage } from "@/api/bs/quotationSheet";
import { getVendorPaymentPage } from "@/api/bs/vendorPayment";
import { mapState } from 'vuex'
import dayjs from 'dayjs'
export default {
props: {
listType: String // EnrollmentOrder: EnrollmentCollection: ShiftRecord: WaitPay:
},
components: {
HeaderFilter: () => import('./HeaderFilter.vue'),
RMList: () => import('@/components/ReComponents/RMList'),
CorporatePaymentCard: () => import('@/components/CorporatePaymentCard'),
},
data() {
return {
height: 0,
moreLoading: false,
refreshing: false,
finished: false,
tableList: [],
spList: [],
listQuery: {
pageNo: 1,
pageSize: 10,
receiptType: null,
projectName: null,
vendorName: null,
vendorCode: null,
vendorNature: null,
deptId: null,
createName: null,
creditCode: null,
address: null,
businessStratDate: [],
businessEndDate: [],
capital: null,
bankNumber: null,
bankOfDeposit: null,
isRegister: null,
status: null,
remark: null,
files: null,
createTime: [],
},
}
},
computed: {
...mapState({
singlePageSize: state => state.common.setting.singlePageSize,
pageSize: state => state.common.setting.pageSize,
})
},
activated() {
this.handleScrollInit()
},
deactivated() {
window.removeEventListener('scroll', this.handleScroll)
},
created() {
this.handleInit()
},
methods: {
handleBack() {
history.back()
},
handleInitSpList() {
let queryParams = {
pageNo: 1,
pageSize: this.singlePageSize,
}
getSupplierCompanyPage(queryParams).then((res) => {
this.spList = res.data.list || []
})
},
handleSetSingle(id) {
return new Promise((resolve, reject) => {
let listQuery = {
pageNo: 1,
pageSize: this.singlePageSize,
}
getVendorPaymentPage(listQuery).then((res) => {
let arr = (res.data && res.data.list || []).filter(item => item.id == id)
resolve(arr)
}).catch((err) => {
reject(err)
})
})
},
handleUpdataInfo(id, index) {
this.$loading(true, 'singleReset')
this.handleSetSingle(id).then(arr => {
if (arr.length) {
this.tableList.splice(index, 1, arr[0])
}
this.$loading(false, 'singleReset')
}).catch(() => {
this.$loading(false, 'singleReset')
})
},
handleListQuery(paramProp) {
this.listQuery = {
...paramProp,
invoiceDate: paramProp.startDate && [dayjs(paramProp.startDate).format('YYYY-MM-DD HH:ss:mm'), dayjs(paramProp.endDate).format('YYYY-MM-DD HH:ss:mm')]
}
this.finished = false
this.handleRefresh()
},
handleScroll() {
getScrollTop().then(height => {
this.height = height
})
},
handleScrollInit() {
window.addEventListener('scroll', this.handleScroll)
window.scrollTo(0, this.height)
// this.handleInit()
},
handleScrollToTop() {
window.scrollTo(0, 0)
this.height = 0
},
handleToAdd() {
this.$router.push({
path: '/payment',
query: {
type: 'add'
}
})
},
handleAllRefresh() {
// this.getTableList('refresh')
this.handleRefresh()
},
handleInit() {
this.handleInitSpList()
this.getTableList('init')
},
handleTopPage() {
window.scrollTo(0, 0)
this.$nextTick(() => {
this.height = 0
})
},
handleRefresh() {
this.listQuery.pageNo = 1
this.finished = false
this.getTableList('refresh')
},
handleLoad() {
this.listQuery.pageNo += 1
this.getTableList('more')
},
getTableList(val) {
// const { shellIdsLocal, collegeInfoIdLocal, startDate, endDate, keyword, type, method, targets, usePersonId, teacherIds, chargePersonIds } = this.listQuery
const query = {
...this.listQuery
}
this.moreLoading = true
this.$loading(true, 'tableLoading')
getVendorPaymentPage(query).then(res => {
let resList = res.data && res.data.list || []
if (['init', 'refresh'].includes(val)) {
this.tableList = resList
this.handleScrollToTop()
} else {
this.tableList = this.tableList.concat(resList)
}
if (resList.length < this.pageSize) {
this.finished = true
}
}).finally(() => {
this.$nextTick(() => {
this.moreLoading = false
this.refreshing = false
this.$loading(false, 'tableLoading')
})
// this.$loading(false, `cTableLoading_${this.listType}`)
})
},
}
}
</script>
<style scoped lang="scss">
// @import '~@/assets/style/common/list.scss';
</style>

@ -0,0 +1,163 @@
$hf-contain-p: 0 1.2rem;
$hf-contain-f: 0.76rem;
$hf-high-color: #0088fe;
//
$hf-high-color: #0088fe;
.header-filter {
.hf-r-icon-bg-act {
.van-icon {
color: $hf-high-color !important;
}
}
background: #ffffff;
display: flex;
justify-content: space-between;
align-items: center;
padding: $hf-contain-p;
.hf-l-list {
.hf-l-list-menu {
/deep/.van-dropdown-menu__bar {
height: auto;
box-shadow: none;
.van-dropdown-menu__item {
flex: inherit;
margin-right: 1rem;
.van-dropdown-menu__title {
padding: 0.6rem 0.4rem 0.6rem 0;
font-size: $hf-contain-f;
&::after {
border: 1px solid;
padding: 0.1rem;
border-color: transparent transparent #333333 #333333;
}
}
.van-dropdown-menu__title--active {
color: $hf-high-color;
&::after {
border-color: transparent transparent $hf-high-color $hf-high-color;
}
}
}
}
}
}
.hf-r-list {
display: flex;
.hf-r-list-item {
margin-left: 0.4rem;
.hf-r-icon-bg {
background: #d7d7d7;
width: 1.5rem;
height: 1.5rem;
border-radius: 1.5rem;
display: flex;
justify-content: center;
align-items: center;
color: #ffffff;
}
}
}
.hf-drop-view {
padding: $hf-contain-p;
padding-bottom: 0.8rem;
.hf-drop-contain {
display: flex;
flex-wrap: wrap;
padding-bottom: 0.8rem;
.hr-drop-filter-item {
padding: $hf-contain-p;
font-size: $hf-contain-f;
width: 50%;
box-sizing: border-box;
padding: 0.8rem 0;
}
.hr-drop-filter-item-act {
color: $hf-high-color;
}
}
//
.hf-drop-quick {
margin-top: 1rem;
.hf-drop-quick-item {
margin-bottom: 1.5rem;
.hf-drop-quick-title {
color: #333333;
font-size: 0.84rem;
}
.hf-drop-quick-list {
display: flex;
margin: 0.6rem 0;
font-size: $hf-contain-f;
.hf-drop-quick-list-item {
border: 1px solid #f3f3f3;
background: #f3f3f3;
margin-right: 0.8rem;
padding: 0.4rem 0.6rem;
border-radius: 1rem;
transition: background-color, color 0.2s linear;
}
.hf-drop-quick-list-item-act {
background: #ffffff;
color: $hf-high-color;
border: 1px solid $hf-high-color;
}
.hf-drop-quick-list-item-checkbox {
margin-right: 1rem;
/deep/.van-checkbox__label {
margin-left: 0.2rem;
}
}
}
.hf-drop-quick-calendar {
/deep/.van-calendar__header {
box-shadow: none;
border-bottom: 1px solid #eeeeee;
}
}
}
}
}
.hf-drop-contain-empty {
color: #666666;
text-align: center;
font-size: 0.8rem;
}
.searchInput {
padding: 0.3rem 0;
width: 100%;
.van-search__content {
background: #ffffff;
border: 1px solid #f3f3f3;
border-radius: 0.3rem;
/deep/input {
caret-color: #0088fe;
}
}
}
}

@ -0,0 +1,23 @@
<template>
<!-- 供应商合同 -->
<div>
<UserList listType="corporatePayment" ref="userList" />
</div>
</template>
<script>
export default {
name: 'contract-corporatePayment',
created() {
//
this.$EventBus.$emit('handleAddLive', 'contract-corporatePayment')
},
activated() {
//
this.$EventBus.$emit('handleResetLive', 'contract-payment')
},
components: {
UserList: () => import('./components/UserList')
}
}
</script>

@ -0,0 +1,257 @@
<template>
<div id="orderHeader">
<div class="hf-l-seacrch" v-if="isActSearch">
<form action="/">
<van-search v-model="listQuery.vendorReceiptNo" shape="round" show-action placeholder="请输入收款编号" :clearable="false" @search="onKeywordSearch" @cancel="onKeywordCancel" />
</form>
</div>
<div class="header-filter" :style="isActSearch ? 'padding: 0 0 0 0.5rem' : ''">
<div class="hf-l-list" v-show="!isActSearch">
<van-dropdown-menu class="hf-l-list-menu">
<!-- 供应商名称 -->
<van-dropdown-item title="账户类型" :title-class="isHtab1 ? 'common-act-color' : ''" @open="handleDropOpen()" ref="vanDropItem1">
<div class="hf-drop-view">
<div class="hf-drop-contain">
<div class="hr-drop-filter-item" @click.stop="handleClass1(item.value)" v-for="item in accountList" :key="item.value">
<van-icon v-if="listQuery.accountType && listQuery.accountType == item.value" name="success" color="#0088FE" />
<span :class="{'hr-drop-filter-item-act': listQuery.accountType && listQuery.accountType == item.value }">{{item.label}}</span>
</div>
</div>
<div class="common-double-button">
<van-button class="common-double-button-l" @click="handleReset()"></van-button>
<van-button class="common-double-button-r" @click="handleConfirm"></van-button>
</div>
</div>
</van-dropdown-item>
<!-- 类别 -->
<van-dropdown-item title="状态" :title-class="isHtab4 ? 'common-act-color' : ''" @open="handleDropOpen()" ref="vanDropItem4">
<div class="hf-drop-view">
<div class="hf-drop-contain">
<div class="hr-drop-filter-item" @click.stop="handleClass2(item.value)" v-for="item in stateList" :key="item.value">
<van-icon v-if="listQuery.status && listQuery.status == item.value" name="success" color="#0088FE" />
<span :class="{'hr-drop-filter-item-act': listQuery.status && listQuery.status == item.value }">{{item.label}}</span>
</div>
</div>
<div class="common-double-button">
<van-button class="common-double-button-l" @click="handleReset()"></van-button>
<van-button class="common-double-button-r" @click="handleConfirm"></van-button>
</div>
</div>
</van-dropdown-item>
</van-dropdown-menu>
</div>
<div class="hf-r-list" v-show="!isActSearch">
<div class="hf-r-list-item" @click="handleSearch">
<div class="hf-r-icon-bg">
<van-icon name="search" class="hf-r-icon" />
</div>
</div>
</div>
</div>
<van-popup position="bottom" safe-area-inset-bottom v-model="moreFilterShow" :lock-scroll="true" round get-container="#app" lazy-render>
<div class="common-popup moreContain">
<div class="common-popup-header">
<div></div>
<div class="common-popup-header-title">
<span>筛选</span>
</div>
<div class="common-popup-header-close">
<van-icon name="cross" @click="moreFilterShow = false" />
</div>
</div>
<div class="common-popup-body moreContain-body">
<van-form ref="filterForm" :show-error-message="false" validate-trigger="" :submit-on-enter="false">
<RePick v-model="listQuery.remark" label="bumen" :list="areaTree" isLastSelect isCascader isShowSearch title="行程" titleKey="name" isCascaderAllLevelNameSymnol isCell clearable />
</van-form>
</div>
<div class="common-popup-footer">
<van-button style="width: 8rem; margin-right: 1rem;" round @click="handleMoreReset"></van-button>
<van-button type="info" style="width: 8rem;" round @click.stop="handleMoreConfirm">确认</van-button>
</div>
</div>
</van-popup>
</div>
</template>
<script>
import { dayTextFormatter } from '@/utils'
import dayjs from 'dayjs'
import { getDictDatas, DICT_TYPE } from "@/utils/dict";
export default {
props: {
listType: String, // 'detail'
paramProp: Object,
spList: Array, //
},
components: {
RePick: () => import('@/components/ReComponents/RePick'),
},
data() {
return {
defaultDate: null,
dayTextFormatter: dayTextFormatter,
isActSearch: false,
moreFilterShow: false,
isSearch: false,
// courseStateList: [
// { text: '', id: 25 },
// { text: '', id: 0 },
// { text: '', id: 1 }
// ],
listQuery: {},
}
},
computed: {
accountList() {
return getDictDatas(DICT_TYPE.BS_BANK_TYPE) || []
},
isHtab1() {
let isShow = false
if (this.paramProp.accountType) isShow = true
return isShow
},
isHtab4() {
let isShow = false
if (this.paramProp.status) isShow = true
return isShow
},
areaTree() {
return this.$store.getters.areaTree
},
isMoreAct() {
let bol = false
const listQuery = this.paramProp || {}
if (listQuery.remark) {
bol = true
}
return bol
},
stateList() {
return getDictDatas(DICT_TYPE.BS_EXPENSE_APPLY_STATUS) || []
}
},
methods: {
//
handleDateReset() {
this.listQuery.startDate = null
this.listQuery.endDate = null
this.defaultDate = null
this.$refs.vanCalendar && this.$refs.vanCalendar.reset()
},
handleDateSelect(val) {
if (val.filter(item => item).length === 2) {
this.listQuery.startDate = `${dayjs(val[0]).format('YYYY/MM/DD')} 00:00:00 `
this.listQuery.endDate = `${dayjs(val[1]).format('YYYY/MM/DD')} 23:59:59 `
}
},
handleQuickDate(e) {
this.defaultDate = [dayjs(e.time[0]).toDate(), dayjs(e.time[1]).toDate()]
this.listQuery.startDate = `${e.time[0]} 00:00:00`
this.listQuery.endDate = `${e.time[1]} 23:59:59`
},
handleConfirm() {
this.$refs.vanDropItem4 && this.$refs.vanDropItem4.toggle(false)
this.$refs.vanDropItem1 && this.$refs.vanDropItem1.toggle(false)
this.$emit('onListQuery', this.listQuery)
},
onKeywordCancel() {
this.listQuery.vendorReceiptNo = null
this.isActSearch = false
this.isSearch = false
this.onKeywordSearch()
},
onKeywordSearch() {
this.$emit('onListQuery', this.listQuery)
},
//
handleClass1(val) {
this.listQuery.accountType = val
},
handleClass2(val) {
this.listQuery.status = val
},
// type : 1 2 3
handleState(val, type) {
if (type == 1) {
const i = this.listQuery.states.findIndex(item => item === val)
if (i > -1) {
this.listQuery.states.splice(i, 1)
} else {
this.listQuery.states.push(val)
}
}
if (type == 2 || type == 3) {
const i = this.listQuery.types.findIndex(item => item === val)
if (i > -1) {
this.listQuery.types.splice(i, 1)
} else {
this.listQuery.types.push(val)
}
}
},
handleInit() {
this.listQuery = {
...this.paramProp
}
console.log('listQuery...', this.listQuery);
if (!(this.listQuery.startDate && this.listQuery.endDate)) {
this.handleDateReset()
}
},
handleDropOpen() {
this.handleInit()
},
onSearch() {
this.handleConfirm()
},
//
handleSearch() {
this.handleInit()
this.listQuery.vendorReceiptNo = this.paramProp.vendorReceiptNo
this.isActSearch = true
},
handleSearchCancel() {
this.listQuery.vendorReceiptNo = null
this.isActSearch = false
this.onKeywordSearch()
},
//
handleMoreFilter() {
this.handleInit()
this.moreFilterShow = true
},
//
handleMoreReset() {
this.listQuery.remark = null
},
handleMoreConfirm() {
this.$emit('onListQuery', this.listQuery)
this.moreFilterShow = false
},
handleReset() {
this.listQuery.status = null
this.listQuery.accountType = null
},
},
}
</script>
<style lang="scss" scoped>
@import './index.scss';
</style>

@ -0,0 +1,220 @@
<template>
<!-- 对公收款 -->
<div>
<HeaderFilter :listType="listType" :spList="spList" @onListQuery="handleListQuery" :paramProp="listQuery" />
<RMList :moreLoading.sync="moreLoading" :refreshing.sync="refreshing" :finished.sync="finished" @onLoad="handleLoad" @onRefresh="handleRefresh" isMore :tableList="tableList">
<div>
<CorporateReceiptsCard v-for="(item,index) in tableList" :key="item.id" :itemData="item" :listType="listType" @onUpdataInfo="handleUpdataInfo($event, index)" @onAllRefresh="handleAllRefresh" />
</div>
</RMList>
<div class="common-bottom-btns" style="bottom:8rem">
<div class="common-bottom-btn" @click="handleTopPage">
<img src="@/assets/images/icons/top.png" alt="">
<span>回到顶部</span>
</div>
</div>
<div class="common-bottom-btns" v-hasPermi="['bs:vendor-receipt:create']" style="bottom:10rem">
<div class="common-bottom-btn" @click="handleToAdd">
<img src="@/assets/images/icons/add.png" alt="">
<span>添加收款</span>
</div>
</div>
<div class="common-bottom-btns" style="bottom:6rem">
<div class="common-bottom-btn" @click="handleBack">
<img src="@/assets/images/icons/home.png" alt="">
<span>返回首页</span>
</div>
</div>
</div>
</template>
<script>
import { getScrollTop } from '@/utils'
import { getSupplierCompanyPage } from "@/api/bs/quotationSheet";
import { getVendorReceiptPage } from "@/api/bs/vendorReceipt";
import { mapState } from 'vuex'
import dayjs from 'dayjs'
export default {
props: {
listType: String // EnrollmentOrder: EnrollmentCollection: ShiftRecord: WaitPay:
},
components: {
HeaderFilter: () => import('./HeaderFilter.vue'),
RMList: () => import('@/components/ReComponents/RMList'),
CorporateReceiptsCard: () => import('@/components/CorporateReceiptsCard'),
},
data() {
return {
height: 0,
moreLoading: false,
refreshing: false,
finished: false,
tableList: [],
spList: [],
listQuery: {
pageNo: 1,
pageSize: 10,
accountType: null,
projectName: null,
vendorName: null,
vendorCode: null,
vendorNature: null,
deptId: null,
createName: null,
creditCode: null,
address: null,
businessStratDate: [],
businessEndDate: [],
capital: null,
bankNumber: null,
bankOfDeposit: null,
isRegister: null,
status: null,
remark: null,
files: null,
createTime: [],
},
}
},
computed: {
...mapState({
singlePageSize: state => state.common.setting.singlePageSize,
pageSize: state => state.common.setting.pageSize,
})
},
activated() {
this.handleScrollInit()
},
deactivated() {
window.removeEventListener('scroll', this.handleScroll)
},
created() {
this.handleInit()
},
methods: {
handleBack() {
history.back()
},
handleInitSpList() {
let queryParams = {
pageNo: 1,
pageSize: this.singlePageSize,
}
getSupplierCompanyPage(queryParams).then((res) => {
this.spList = res.data.list || []
})
},
handleSetSingle(id) {
return new Promise((resolve, reject) => {
let listQuery = {
pageNo: 1,
pageSize: this.singlePageSize,
}
getVendorReceiptPage(listQuery).then((res) => {
let arr = (res.data && res.data.list || []).filter(item => item.id == id)
resolve(arr)
}).catch((err) => {
reject(err)
})
})
},
handleUpdataInfo(id, index) {
this.$loading(true, 'singleReset')
this.handleSetSingle(id).then(arr => {
if (arr.length) {
this.tableList.splice(index, 1, arr[0])
}
this.$loading(false, 'singleReset')
}).catch(() => {
this.$loading(false, 'singleReset')
})
},
handleListQuery(paramProp) {
this.listQuery = {
...paramProp,
invoiceDate: paramProp.startDate && [dayjs(paramProp.startDate).format('YYYY-MM-DD HH:ss:mm'), dayjs(paramProp.endDate).format('YYYY-MM-DD HH:ss:mm')]
}
this.finished = false
this.handleRefresh()
},
handleScroll() {
getScrollTop().then(height => {
this.height = height
})
},
handleScrollInit() {
window.addEventListener('scroll', this.handleScroll)
window.scrollTo(0, this.height)
// this.handleInit()
},
handleScrollToTop() {
window.scrollTo(0, 0)
this.height = 0
},
handleToAdd() {
this.$router.push({
path: '/receipts',
query: {
type: 'add'
}
})
},
handleAllRefresh() {
// this.getTableList('refresh')
this.handleRefresh()
},
handleInit() {
this.handleInitSpList()
this.getTableList('init')
},
handleTopPage() {
window.scrollTo(0, 0)
this.$nextTick(() => {
this.height = 0
})
},
handleRefresh() {
this.listQuery.pageNo = 1
this.finished = false
this.getTableList('refresh')
},
handleLoad() {
this.listQuery.pageNo += 1
this.getTableList('more')
},
getTableList(val) {
// const { shellIdsLocal, collegeInfoIdLocal, startDate, endDate, keyword, type, method, targets, usePersonId, teacherIds, chargePersonIds } = this.listQuery
const query = {
...this.listQuery
}
this.moreLoading = true
this.$loading(true, 'tableLoading')
getVendorReceiptPage(query).then(res => {
let resList = res.data && res.data.list || []
if (['init', 'refresh'].includes(val)) {
this.tableList = resList
this.handleScrollToTop()
} else {
this.tableList = this.tableList.concat(resList)
}
if (resList.length < this.pageSize) {
this.finished = true
}
}).finally(() => {
this.$nextTick(() => {
this.moreLoading = false
this.refreshing = false
this.$loading(false, 'tableLoading')
})
// this.$loading(false, `cTableLoading_${this.listType}`)
})
},
}
}
</script>
<style scoped lang="scss">
// @import '~@/assets/style/common/list.scss';
</style>

@ -0,0 +1,163 @@
$hf-contain-p: 0 1.2rem;
$hf-contain-f: 0.76rem;
$hf-high-color: #0088fe;
//
$hf-high-color: #0088fe;
.header-filter {
.hf-r-icon-bg-act {
.van-icon {
color: $hf-high-color !important;
}
}
background: #ffffff;
display: flex;
justify-content: space-between;
align-items: center;
padding: $hf-contain-p;
.hf-l-list {
.hf-l-list-menu {
/deep/.van-dropdown-menu__bar {
height: auto;
box-shadow: none;
.van-dropdown-menu__item {
flex: inherit;
margin-right: 1rem;
.van-dropdown-menu__title {
padding: 0.6rem 0.4rem 0.6rem 0;
font-size: $hf-contain-f;
&::after {
border: 1px solid;
padding: 0.1rem;
border-color: transparent transparent #333333 #333333;
}
}
.van-dropdown-menu__title--active {
color: $hf-high-color;
&::after {
border-color: transparent transparent $hf-high-color $hf-high-color;
}
}
}
}
}
}
.hf-r-list {
display: flex;
.hf-r-list-item {
margin-left: 0.4rem;
.hf-r-icon-bg {
background: #d7d7d7;
width: 1.5rem;
height: 1.5rem;
border-radius: 1.5rem;
display: flex;
justify-content: center;
align-items: center;
color: #ffffff;
}
}
}
.hf-drop-view {
padding: $hf-contain-p;
padding-bottom: 0.8rem;
.hf-drop-contain {
display: flex;
flex-wrap: wrap;
padding-bottom: 0.8rem;
.hr-drop-filter-item {
padding: $hf-contain-p;
font-size: $hf-contain-f;
width: 50%;
box-sizing: border-box;
padding: 0.8rem 0;
}
.hr-drop-filter-item-act {
color: $hf-high-color;
}
}
//
.hf-drop-quick {
margin-top: 1rem;
.hf-drop-quick-item {
margin-bottom: 1.5rem;
.hf-drop-quick-title {
color: #333333;
font-size: 0.84rem;
}
.hf-drop-quick-list {
display: flex;
margin: 0.6rem 0;
font-size: $hf-contain-f;
.hf-drop-quick-list-item {
border: 1px solid #f3f3f3;
background: #f3f3f3;
margin-right: 0.8rem;
padding: 0.4rem 0.6rem;
border-radius: 1rem;
transition: background-color, color 0.2s linear;
}
.hf-drop-quick-list-item-act {
background: #ffffff;
color: $hf-high-color;
border: 1px solid $hf-high-color;
}
.hf-drop-quick-list-item-checkbox {
margin-right: 1rem;
/deep/.van-checkbox__label {
margin-left: 0.2rem;
}
}
}
.hf-drop-quick-calendar {
/deep/.van-calendar__header {
box-shadow: none;
border-bottom: 1px solid #eeeeee;
}
}
}
}
}
.hf-drop-contain-empty {
color: #666666;
text-align: center;
font-size: 0.8rem;
}
.searchInput {
padding: 0.3rem 0;
width: 100%;
.van-search__content {
background: #ffffff;
border: 1px solid #f3f3f3;
border-radius: 0.3rem;
/deep/input {
caret-color: #0088fe;
}
}
}
}

@ -0,0 +1,23 @@
<template>
<!-- 供应商合同 -->
<div>
<UserList listType="corporateReceipts" ref="userList" />
</div>
</template>
<script>
export default {
name: 'contract-corporateReceipts',
created() {
//
this.$EventBus.$emit('handleAddLive', 'contract-corporateReceipts')
},
activated() {
//
this.$EventBus.$emit('handleResetLive', 'contract-receipts')
},
components: {
UserList: () => import('./components/UserList')
}
}
</script>

@ -5,14 +5,26 @@
<div class="section"> <span class="line"> </span> 审批内容</div>
<div class="trips-box">
<div class="item-box">
<RePick v-model="form.contractNumber" :disabled="['show','edit'].includes(this.$route.query.type)" @change="handleCtBlur" titleKey="contractNumberTitle" :rules="[{ required: true, message: '请选择' }]" idKey="contractNumber" label="编号" required name="contractNumber" :list="contractNumberList" isRequrie isCell clearable />
<van-field v-model="form.contractName" required placeholder="请输入" :rules="[{ required: true, message: '请输入' }]" label="名称" clear-trigger="always" input-align="right" />
<RePick v-model="form.supplierId" titleKey="companyAme" idKey="id" label="供应商名称" name="supplierId" :list="supplierList" isRequrie isCell clearable />
<van-field v-model="form.amount" type="number" name="amount" placeholder="请输入" input-align="right" required :rules="[{ required: true, message: '格式错误',validator: VerifyFunc.validatorMoney }]" label="总金额" />
<van-field v-model="form.paymentAffirmTime" v-if="disabled" label="付款确认时间" disabled placeholder="请输入" input-align="right" />
<RePick v-model="form.contractNumber" :disabled="['show','edit'].includes(this.$route.query.type)" @change="handleCtBlur" titleKey="contractNumberTitle" :rules="[{ required: true, message: '请选择' }]" idKey="contractNumber" label="合同编号" required name="contractNumber" :list="contractNumberList" isRequrie isCell clearable />
<van-field v-model="form.contractName" :disabled="disabled" required placeholder="请输入" :rules="[{ required: true, message: '请输入' }]" label="合同名称" clear-trigger="always" input-align="right" />
<van-field v-model="form.amount" :disabled="disabled" name="amount" placeholder="请输入" input-align="right" required :rules="[{ required: true, message: '格式错误',validator: VerifyFunc.validatorMoney }]" label="总金额" />
<van-field v-model="form.projectName" :disabled="disabled" name="projectName" placeholder="请输入" input-align="right" required :rules="[{ required: true, message: '请输入' }]" label="项目名称" />
<RePick v-model="form.supplierId" :disabled="disabled" titleKey="companyName" idKey="id" label="供应商名称" name="supplierId" :list="supplierList" isRequrie isCell clearable />
<van-field v-model="form.receiptBankUserName" :disabled="disabled" name="receiptBankUserName" placeholder="请输入" input-align="right" label="收款银行账号" />
<van-field v-model="form.openingBankName" :disabled="disabled" name="openingBankName" placeholder="请输入" input-align="right" label="开户行名" />
<van-field label="是否收到发票" name="receiptOfInvoice" :disabled="disabled" input-align="right" label-width="9em">
<template #input>
<van-radio-group v-model="form.receiptOfInvoice" :disabled="disabled" direction="horizontal">
<van-radio :name="1"></van-radio>
<van-radio :name="0"></van-radio>
</van-radio-group>
</template>
</van-field>
<van-field v-model="form.receiptBankName" :disabled="disabled" name="receiptBankName" placeholder="请输入" input-align="right" label="收款银行户名" />
<!-- <van-field v-model="form.paymentAffirmTime" v-if="disabled" label="付款确认时间" disabled placeholder="请输入" input-align="right" />
<van-field v-model="form.actualAmount" v-if="disabled" label="付款金额" disabled placeholder="请输入" input-align="right" />
<van-field v-model="form.affirmPersionName" v-if="disabled" label="确认人" disabled placeholder="请输入" input-align="right" />
<van-field v-model="form.remark" :disabled="['show','edit'].includes(this.$route.query.type)" label="备注" placeholder="请输入" input-align="right" />
<van-field v-model="form.affirmPersionName" v-if="disabled" label="确认人" disabled placeholder="请输入" input-align="right" /> -->
<van-field v-model="form.remark" :disabled="disabled" label="备注" placeholder="请输入" input-align="right" />
</div>
</div>
<div class="section mt5" v-if="!disabled">
@ -22,11 +34,23 @@
<div class="trips-box">
<div class="item-box" v-for="(item,index) in oaReimburseFeeitemList" :key="index">
<van-field :value="index + 1" disabled label="序号" input-align="right" />
<van-field v-model="item.keyName" label="期限名称" input-align="right" required disabled />
<van-field v-model="item.planTime" label="计付款时间" input-align="right" required disabled />
<van-field v-model="item.keyName" label="计划名称" input-align="right" required disabled />
<van-field v-model="item.planTime" label="付款时间" input-align="right" required disabled />
<van-field v-model="item.percentage" label="比例" input-align="right" required disabled />
<van-field v-model="item.actualAmount" :disabled="disabled" name="actualAmount" type="number" placeholder="请输入" input-align="right" required :rules="[{ required: true, message: '格式错误',validator: VerifyFunc.validatorMoney }]" label="实付金额" />
<!-- <UploadFile :typeStr="typeStr" @onConfirm="handleUpload" :fileList="fileList" /> -->
<van-field v-model="item.actualAmount" :disabled="disabled" name="actualAmount" type="number" placeholder="请输入" input-align="right" required :rules="[{ required: true, message: '格式错误',validator: VerifyFunc.validatorMoney }]" label="付款金额" />
<van-field v-model="item.applyForAmount" :disabled="disabled" name="applyForAmount" type="number" placeholder="请输入" input-align="right" label="申请金额" />
<van-field v-model="item.subjectsCode" label="科目代码" input-align="right" :disabled="disabled" placeholder="请输入" />
<van-field v-model="item.businessAccountingCode" label="核算代码" input-align="right" :disabled="disabled" placeholder="请输入" />
<van-field v-model="item.deductibleInvoiceAmount" :disabled="disabled" name="deductibleInvoiceAmount" type="number" placeholder="请输入" input-align="right" label="可抵扣发票含税金额" />
<van-field v-model="item.taxRate" label="税率" input-align="right" :disabled="disabled" placeholder="请输入" />
<van-field v-model="item.taxForeheads" :disabled="disabled" name="taxForeheads" type="number" placeholder="请输入" input-align="right" label="税额" />
<van-field v-model="item.remark" :disabled="disabled" name="remark" autosize rows="2" label="备注信息" clear-trigger="always" input-align="right" placeholder="请输入" type="textarea" />
</div>
</div>
<div class="section mt5"> <span class="line"> </span>附件</div>
<div class="trips-box">
<div class="item-box">
<UploadFile :typeStr="typeStr" @onConfirm="handleUpload" :fileList="fileList" />
</div>
</div>
<div class="section mt5" v-if="['show'].includes(typeStr)"> <span class="line"> </span>审批流程</div>
@ -57,6 +81,7 @@ export default {
name: 'contract-pay',
props: {},
components: {
UploadFile: () => import('@/components/UploadFile'),
RePick: () => import('@/components/ReComponents/RePick'),
ApprovalProcess: () => import('@/components/ApprovalProcess'),
SpList: () => import('./components/SpList'),
@ -144,11 +169,17 @@ export default {
this.oaReimburseFeeitemList = (newArr || []).map(item => {
return {
...item,
actualAmount: Math.floor(Number(item.actualAmount) * 100) / 100
actualAmount: Math.floor(Number(item.actualAmount) * 100) / 100,
applyForAmount: undefined,
subjectsCode: null,
businessAccountingCode: null,
deductibleInvoiceAmount: null,
taxRate: undefined,
taxForeheads: undefined,
remark: null,
}
})
this.isShow = false
console.log('arr', arr, this.oaReimburseFeeitemList);
},
handleGetPay() {
if (this.form.contractNumber) {
@ -219,14 +250,21 @@ export default {
// /
let newForm = []
this.oaReimburseFeeitemList.forEach(v => {
console.log('this.form..', this.form);
newForm.push({
...this.form,
actualAmount: v.actualAmount,
status: key,
percentage: v.percentage,
planTime: v.planTime,
paymentPlanDetailId: v.id
paymentPlanDetailId: v.id,
applyForAmount: v.applyForAmount,
subjectsCode: v.subjectsCode,
businessAccountingCode: v.businessAccountingCode,
deductibleInvoiceAmount: v.deductibleInvoiceAmount,
taxRate: v.taxRate,
taxForeheads: v.taxForeheads,
remark: v.remark,
files: this.fileList
})
})
this.$loading(true, 'form')
@ -269,6 +307,23 @@ export default {
this.$loading(true, 'loadingSb')
getPaymentApply(id).then((res) => {
this.form = res.data || {};
const { percentage, actualAmount, taxForeheads, remark, applyForAmount, subjectsCode, businessAccountingCode, taxRate, deductibleInvoiceAmount } = this.form
const { keyName, planTime } = this.form.paymentPlanDetailDO
console.log('keyName...', keyName);
this.oaReimburseFeeitemList = [{
percentage: percentage,
id: this.form.paymentPlanDetailId,
actualAmount: actualAmount,
keyName,
planTime,
applyForAmount,
subjectsCode,
businessAccountingCode,
deductibleInvoiceAmount,
taxRate,
taxForeheads,
remark,
}]
this.form = {
...this.form,
time: [this.form.startTime, this.form.endTime],
@ -281,19 +336,7 @@ export default {
this.handleChange(this.form.departmentId, 1)
this.fileList = res.data.files || []
this.isAuthorised = res.data.isAuthorised
// this.oaReimburseFeeitemList = [{
// percentage: this.form.percentage,
// id: this.form.paymentPlanDetailId,
// actualAmount: this.form.actualAmount,
// planTime: dayjs(this.form.planTime).format('YYYY/MM/DD HH:ss')
// }]
// this.oaReimburseFeeitemList = [{
// percentage: this.form.percentage,
// id: this.form.paymentPlanDetailId,
// actualAmount: this.form.actualAmount,
// planTime: dayjs(this.form.planTime).format('YYYY/MM/DD HH:ss')
// }]
this.oaReimburseFeeitemList = this.form.paymentPlanDetailDO
// this.oaReimburseFeeitemList = this.form.paymentPlanDetailDO
this.$nextTick(() => {
this.$refs.BottomBtn.handleFilterBtnList()
})

@ -0,0 +1,241 @@
<template>
<div class="common-list-contain">
<div class="common-form">
<van-form ref="form" :show-error-message="false" validate-trigger="" :submit-on-enter="false" label-width="8rem">
<div class="section"> <span class="line"> </span> 基本信息</div>
<div class="trips-box">
<div class="item-box">
<van-field v-model="form.vendorReceiptNo" v-if="form.vendorReceiptNo" disabled label="单号" clear-trigger="always" input-align="right" />
<van-field v-model="cn" disabled label="公司名称" clear-trigger="always" input-align="right" />
<van-field v-model="form.projectName" :disabled="disabled" label="项目名称" clear-trigger="always" placeholder="请输入" input-align="right" />
<van-field v-model="userInfo.nickname" disabled label="申请人" clear-trigger="always" input-align="right" maxlength="50" placeholder="请输入" />
<van-field v-model="userInfo.dept.name" disabled label="申请部门" clear-trigger="always" input-align="right" maxlength="50" placeholder="请输入" />
<RePick v-model="form.receiptType" :disabled="disabled" label="付款类型" name="accountType" :list="accountList" title="账户类型" titleKey="label" idKey="value" isCell clearable />
<RePick v-model="form.currency" :disabled="disabled" label="付款币种" name="currency" :list="moneyList" title="收取币种" titleKey="label" idKey="value" isCell clearable />
<van-field v-model="form.amount" type="number" name="amount" :disabled="disabled" placeholder="请输入" input-align="right" required :rules="[{ required: true, message: '付款金额格式错误',validator: VerifyFunc.validatorMoney }]" label="付款金额" />
<RePick v-model="form.responsibleDeptId" @change="handleDept($event,1)" isRequrie :rules="[{ required: true, message: '请选择' }]" required :disabled="disabled" label="承担部门" name="responsibleDeptId" isShowSearch :list="userDeptTree" title="承担部门" titleKey="name" isCascader isCell clearable />
<RePick v-model="form.responsibleId" isRequrie :rules="[{ required: true, message: '请选择' }]" required :disabled="disabled" label="承担人" name="responsibleId" isShowSearch :list="userList" title="承担人" isCell titleKey="nickname" clearable />
<RePick v-model="form.vendorIds" isRequrie :rules="[{ required: true, message: '请选择' }]" required :disabled="disabled" label="关联供应商" name="vendorIds" isShowSearch :list="allGysList" title="关联供应商" :isUseLimitPage="allGysList.length > 300" isCell clearable />
<van-field v-model="form.projectManager" required :rules="[{ required: true, message: '请输入' }]" :disabled="disabled" label="项目负责人" clear-trigger="always" input-align="right" maxlength="50" placeholder="请输入" />
<van-field v-model="form.reason" laceholder="请输入" :disabled="disabled" autosize rows="1" type="textarea" :rules="[{ required: true, message: '请输入' }]" label="申请事由" required clear-trigger="always" input-align="right" />
<van-field v-model="form.remark" placeholder="请输入" :disabled="disabled" autosize rows="1" type="textarea" label="备注信息" clear-trigger="always" input-align="right" />
</div>
</div>
<div class="section mt5"> <span class="line"> </span>附件</div>
<div class="trips-box">
<div class="item-box">
<UploadFile :typeStr="typeStr" @onConfirm="handleUpload" :fileList="fileList" />
</div>
</div>
<div class="section mt5" v-if="['show'].includes(typeStr)"> <span class="line"> </span>审批流程</div>
<ApprovalProcess v-if="['show'].includes(typeStr)" :processInstanceId="form.processInstanceId" @onSetId="handleSetAccessId" />
</van-form>
</div>
<BottomBtn ref="BottomBtn" :isAuthorised="isAuthorised" @onBtConfirm="handleBtConfirm" :accessId="accessId" />
</div>
</template>
<script>
import { createVendorPayment, getVendorPayment, updateVendorPayment } from "@/api/bs/vendorPayment";
import VerifyFunc from '@/utils/verify'
import { getDictDatas, DICT_TYPE } from "@/utils/dict";
import { getVendorPage } from "@/api/bs/vendor";
import { getBankAccountInfoPage } from "@/api/bs/bankAccountInfo";
import { listUser } from "@/api/system/user";
export default {
//import使
props: {},
name: 'contract-payment',
components: {
BottomBtn: () => import('@/components/BottomBtn'),
ApprovalProcess: () => import('@/components/ApprovalProcess'),
RePick: () => import('@/components/ReComponents/RePick'),
UploadFile: () => import('@/components/UploadFile'),
},
// 访this
created() {
this.handleInitList().then(() => {
this.handleInitForm()
})
},
// 访DOM
mounted() {
},
data() {
return {
userList: [],
form: {},
allBankList: [],
allGysList: [],
isAuthorised: false,
accessId: null,
VerifyFunc,
isAuthority: 0,
typeStr: null, // show: edit: :
fileList: [],
btnList: [
{ title: '暂存', icon: 'star-o', color: "#909399", key: 0 },
{ title: '提交', icon: 'edit', color: "#ff9900", key: 1 },
{ title: '同意', icon: 'certificate', color: "#19be6b", key: 2 },
{ title: '驳回', icon: 'exchange', color: "#fa3534", key: 3 },
],
};
},
//
// bs_fee_type
computed: {
accountList() {
return getDictDatas(DICT_TYPE.BS_BANK_TYPE) || []
},
moneyList() {
return getDictDatas(DICT_TYPE.CURRENCY_TYPE) || []
},
areaTree() {
return this.$store.getters.areaTree
},
userDeptTree() {
return this.$store.getters.userDeptTree
},
cn() {
return window.localStorage.getItem('cn')
},
userInfo() {
return JSON.parse(window.localStorage.getItem('userInfo') || { dept: {} })
},
disabled() {
return ['show'].includes(this.$route.query.type)
}
},
//
methods: {
/** 查询用户列表 */
getList(id) {
return new Promise((resolve) => {
let queryParams = {
pageNo: 1,
pageSize: 100,
username: undefined,
mobile: undefined,
status: undefined,
deptId: id,
createTime: []
}
listUser(queryParams).then(response => {
resolve(response.data && response.data.list || [])
})
})
},
handleDept(val, type) {
if (val) {
this.getList(val).then((res) => {
this.userList = res || []
if (type) {
this.$set(this.form, 'responsibleId', null)
}
})
} else {
this.userList = []
this.$set(this.form, 'responsibleId', null)
}
},
handleUpload(list) {
this.fileList = list
},
handleBtConfirm(key) {
if (key == 2 || key == 3) {
return
}
this.$nextTick(() => {
this.$refs.form.validate().then(() => {
// /
let newForm = {
...this.form,
files: this.fileList,
vendorIds: [this.form.vendorIds],
status: key
}
this.$loading(true, 'form')
let api = newForm.id ? updateVendorPayment : createVendorPayment
api(newForm).then(() => {
this.$loading(false, 'form')
this.$sm(`${this.form.id ? '修改成功!' : '新增成功!'}`)
//
if (!newForm.id) {
this.$EventBus.$emit('handleResetLive', 'contract-corporatePayment')
}
history.back()
}).catch(() => {
this.$loading(false, 'form')
})
}).catch((err) => {
this.$loading(false, 'form')
if (err && err.length > 0 && err[0].name) {
if (err[0].name === 'amount') {
this.$fm(err[0].message)
}
const fieldElement = this.$refs.form.$el.querySelector(`[name="${err[0].name}"]`);
const fieldHeight = fieldElement.offsetHeight;
const scrollHeight = fieldHeight + 50; // 50px
this.$refs.form.scrollToField(err[0].name, scrollHeight);
}
})
})
},
handleSetAccessId(id) {
this.accessId = id
},
handleInitForm() {
this.typeStr = this.$route.query.type
//
this.$EventBus.$emit('handleAddLive', 'contract-payment')
if (this.$route.query.id) {
this.$loading(true, 'loadingSb')
let api = getVendorPayment
api(this.$route.query.id).then((res) => {
this.form = {
...(res.data || {}),
responsibleId: res.data.responsibleId ? Number(res.data.responsibleId) : null,
vendorIds: Array.isArray(res.data.vendorIds) && res.data.vendorIds.length ? Number(res.data.vendorIds[0]) : null
}
if (this.form.responsibleDeptId) {
this.handleDept(this.form.responsibleDeptId)
}
this.fileList = res.data.files || []
this.isAuthorised = res.data.isAuthorised
this.$nextTick(() => {
this.$refs.BottomBtn.handleFilterBtnList()
})
}).finally(() => {
this.$loading(false, 'loadingSb')
})
}
},
handleInitList() {
this.$loading(true, 'demo1')
return new Promise((resolve) => {
Promise.all([
getVendorPage({ pageNo: 1, pageSize: 999 }),
]).then(responses => {
//
this.allGysList = (responses[0].data.list || []).map(item => {
return {
id: item.id,
title: item.vendorName
}
});
this.$loading(false, 'demo1')
resolve()
}).catch(error => {
//
console.error('Error:', error);
});
})
}
},
}
</script>
<style scoped lang="scss">
@import '~@/assets/style/common/form.scss';
</style>

@ -0,0 +1,215 @@
<template>
<div class="common-list-contain">
<div class="common-form">
<van-form ref="form" :show-error-message="false" validate-trigger="" :submit-on-enter="false" label-width="8rem">
<div class="section"> <span class="line"> </span> 基本信息</div>
<div class="trips-box">
<div class="item-box">
<van-field v-model="form.vendorReceiptNo" v-if="form.vendorReceiptNo" disabled label="单号" clear-trigger="always" input-align="right" />
<van-field v-model="cn" disabled label="公司名称" clear-trigger="always" input-align="right" />
<van-field v-model="form.projectName" :disabled="disabled" label="项目名称" clear-trigger="always" placeholder="请输入" input-align="right" />
<van-field v-model="userInfo.nickname" disabled label="申请人" clear-trigger="always" input-align="right" maxlength="50" placeholder="请输入" />
<van-field v-model="userInfo.dept.name" disabled label="申请部门" clear-trigger="always" input-align="right" maxlength="50" placeholder="请输入" />
<RePick v-model="form.accountType" :disabled="disabled" label="账户类型" name="accountType" :list="accountList" title="账户类型" titleKey="label" idKey="value" isCell clearable />
<RePick v-model="form.currency" :disabled="disabled" label="收取币种" name="currency" :list="moneyList" title="收取币种" titleKey="label" idKey="value" isCell clearable />
<van-field v-model="form.amount" type="number" name="amount" :disabled="disabled" placeholder="请输入" input-align="right" required :rules="[{ required: true, message: '收款金额格式错误',validator: VerifyFunc.validatorMoney }]" label="收款金额" />
<van-field v-model="form.projectManager" :disabled="disabled" label="项目负责人" :rules="[{ required: true, message: '请输入' }]" required placeholder="请输入" clear-trigger="always" input-align="right" />
<RePick v-model="form.vendorIds" isRequrie :rules="[{ required: true, message: '请选择' }]" required :disabled="disabled" label="关联供应商" name="vendorIds" isShowSearch :list="allGysList" title="关联供应商" :isUseLimitPage="allGysList.length > 300" isCell clearable />
<RePick v-model="form.receiptBankIds" isRequrie :rules="[{ required: true, message: '请选择' }]" required :disabled="disabled" label="关收款账户" name="currency" isShowSearch :list="allBankList" title="关收款账户" :isUseLimitPage="allBankList.length > 300" isCell clearable />
<van-field v-model="form.reason" laceholder="请输入" :disabled="disabled" autosize rows="1" type="textarea" :rules="[{ required: true, message: '请输入' }]" label="申请事由" required clear-trigger="always" input-align="right" />
<van-field v-model="form.remark" placeholder="请输入" :disabled="disabled" autosize rows="1" type="textarea" label="备注信息" clear-trigger="always" input-align="right" />
</div>
</div>
<div class="section mt5"> <span class="line"> </span>附件</div>
<div class="trips-box">
<div class="item-box">
<UploadFile :typeStr="typeStr" @onConfirm="handleUpload" :fileList="fileList" />
</div>
</div>
<div class="section mt5" v-if="['show'].includes(typeStr)"> <span class="line"> </span>审批流程</div>
<ApprovalProcess v-if="['show'].includes(typeStr)" :processInstanceId="form.processInstanceId" @onSetId="handleSetAccessId" />
</van-form>
</div>
<BottomBtn ref="BottomBtn" :isAuthorised="isAuthorised" @onBtConfirm="handleBtConfirm" :accessId="accessId" />
</div>
</template>
<script>
import { createVendorReceipt, getVendorReceipt, updateVendorReceipt } from "@/api/bs/vendorReceipt";
import VerifyFunc from '@/utils/verify'
import { getDictDatas, DICT_TYPE } from "@/utils/dict";
import { getVendorPage } from "@/api/bs/vendor";
import { getBankAccountInfoPage } from "@/api/bs/bankAccountInfo";
export default {
//import使
props: {},
name: 'contract-receipts',
components: {
BottomBtn: () => import('@/components/BottomBtn'),
ApprovalProcess: () => import('@/components/ApprovalProcess'),
RePick: () => import('@/components/ReComponents/RePick'),
UploadFile: () => import('@/components/UploadFile'),
},
// 访this
created() {
this.handleInitList().then(() => {
this.handleInitForm()
})
},
// 访DOM
mounted() {
},
data() {
return {
form: {},
allBankList: [],
allGysList: [],
isAuthorised: false,
accessId: null,
VerifyFunc,
isAuthority: 0,
typeStr: null, // show: edit: :
fileList: [],
btnList: [
{ title: '暂存', icon: 'star-o', color: "#909399", key: 0 },
{ title: '提交', icon: 'edit', color: "#ff9900", key: 1 },
{ title: '同意', icon: 'certificate', color: "#19be6b", key: 2 },
{ title: '驳回', icon: 'exchange', color: "#fa3534", key: 3 },
],
};
},
//
// bs_fee_type
computed: {
accountList() {
return getDictDatas(DICT_TYPE.BS_BANK_TYPE) || []
},
moneyList() {
return getDictDatas(DICT_TYPE.CURRENCY_TYPE) || []
},
areaTree() {
return this.$store.getters.areaTree
},
userDeptTree() {
return this.$store.getters.userDeptTree
},
cn() {
return window.localStorage.getItem('cn')
},
userInfo() {
return JSON.parse(window.localStorage.getItem('userInfo') || { dept: {} })
},
userList() {
return this.$store.getters.userList
},
disabled() {
return ['show'].includes(this.$route.query.type)
}
},
//
methods: {
handleUpload(list) {
this.fileList = list
},
handleBtConfirm(key, ignoreFeeTip) {
if (key == 2 || key == 3) {
return
}
this.$nextTick(() => {
this.$refs.form.validate().then(() => {
// /
let newForm = {
...this.form,
files: this.fileList,
receiptBankIds: [this.form.receiptBankIds],
vendorIds: [this.form.vendorIds],
status: key
}
this.$loading(true, 'form')
let api = newForm.id ? updateVendorReceipt : createVendorReceipt
api(newForm).then(() => {
this.$loading(false, 'form')
this.$sm(`${this.form.id ? '修改成功!' : '新增成功!'}`)
//
if (!newForm.id) {
this.$EventBus.$emit('handleResetLive', 'contract-corporateReceipts')
}
history.back()
}).catch(() => {
this.$loading(false, 'form')
})
}).catch((err) => {
this.$loading(false, 'form')
if (err && err.length > 0 && err[0].name) {
if (err[0].name === 'amount') {
this.$fm(err[0].message)
}
const fieldElement = this.$refs.form.$el.querySelector(`[name="${err[0].name}"]`);
const fieldHeight = fieldElement.offsetHeight;
const scrollHeight = fieldHeight + 50; // 50px
this.$refs.form.scrollToField(err[0].name, scrollHeight);
}
})
})
},
handleSetAccessId(id) {
this.accessId = id
},
handleInitForm() {
this.typeStr = this.$route.query.type
//
this.$EventBus.$emit('handleAddLive', 'contract-receipts')
if (this.$route.query.id) {
this.$loading(true, 'loadingSb')
let api = getVendorReceipt
api(this.$route.query.id).then((res) => {
this.form = {
...(res.data || {}),
receiptBankIds: Array.isArray(res.data.receiptBankIds) && res.data.receiptBankIds.length ? Number(res.data.receiptBankIds[0]) : null,
vendorIds: Array.isArray(res.data.vendorIds) && res.data.vendorIds.length ? Number(res.data.vendorIds[0]) : null
}
this.fileList = res.data.files || []
this.isAuthorised = res.data.isAuthorised
this.$nextTick(() => {
this.$refs.BottomBtn.handleFilterBtnList()
})
}).finally(() => {
this.$loading(false, 'loadingSb')
})
}
},
handleInitList() {
this.$loading(true)
return new Promise((resolve) => {
Promise.all([
getVendorPage({ pageNo: 1, pageSize: 999 }),
getBankAccountInfoPage({ pageNo: 1, pageSize: 999 })
]).then(responses => {
//
this.allGysList = (responses[0].data.list || []).map(item => {
return {
id: item.id,
title: item.vendorName
}
});
this.allBankList = (responses[1].data.list || []).map(item => {
return {
id: item.id,
title: `${item.bankName}-${item.bankAccount}`
}
});
resolve()
}).catch(error => {
//
console.error('Error:', error);
});
})
}
},
}
</script>
<style scoped lang="scss">
@import '~@/assets/style/common/form.scss';
</style>

@ -146,6 +146,18 @@ export default {
icon: 'refund-o',
show: this.permission_btns.includes('procurement:payApply:list')
},
{
route: '/corporateReceipts',
title: '对公收款',
icon: 'friends-o',
show: this.permission_btns.includes('bs:vendor-receipt:query')
},
{
route: '/corporatePayment',
title: '对公付款',
icon: 'friends-o',
show: this.permission_btns.includes('bs:vendor-payment:query')
},
],
title: '合同审批'
},

@ -169,7 +169,7 @@ export default {
}
this.moreLoading = true
this.$loading(true, 'tableLoading')
let filterArr = ['QUOTATION_SHEET']
let filterArr = ['QUOTATION_SHEET', 'SUPPLIER_CONTRACT_XD']
getMyNotifyMessagePage(query).then(res => {
let resList = (res.data && res.data.list || [])
if (['init', 'refresh'].includes(val)) {

Loading…
Cancel
Save