lijingjia 3 weeks ago
commit 6875d25b35

@ -16,10 +16,15 @@ const bankList = ref([])
import { Tag } from 'ant-design-vue'
export const columns: BasicColumn[] = [
{
title: '结算单号',
title: '申请单号',
dataIndex: 'applicationNO',
width: 100,
},
{
title: '结算单号',
dataIndex: 'settlementNO',
width: 100,
},
{
title: '状态',
dataIndex: 'isLocked',
@ -238,8 +243,8 @@ export const searchFormSchema: FormSchema[] = [
}
},
{
field: 'applicationNO',
label: '申请单号',
field: 'number',
label: '业务编号',
colProps: { span: 4 },
component: 'Input'
},
@ -1398,7 +1403,7 @@ export const freeColum: BasicColumn[] = [
},
{
title: '结算金额',
dataIndex: 'settlementAmount',
dataIndex: 'applyAmount',
width: 100,
},
{

@ -122,7 +122,7 @@
<script lang="ts" setup>
import { ref, onMounted, defineComponent, nextTick, watchEffect, watch } from 'vue'
import {
InvoiceSettlementSave, InvoiceSettlementGet,
InvoiceSettlementSave, InvoiceSettlementGet,PaymentFreeSettlementGetFees,
PaymentSettlementGetList, PaymentSettlementDeleteDetail, PaymentFreeSettlementGet,
GeneralInvoiceGet, PaymentFreeSettlementSave
} from '../api'
@ -272,14 +272,14 @@ function ClickLast(type) {
if (indexQuery == 0) {
createMessage.warning('已经是第一条了')
} else {
go("/invoiceIssueDetail?id=" + list[indexQuery - 1].id + '&type=' + route.query.type)
go("/feeSettlementDetail?id=" + list[indexQuery - 1].id + '&type=' + route.query.type)
}
}
if (type == 'last') {
if (indexQuery == list.length - 1) {
createMessage.warning('已经是最后一条了')
} else {
go("/invoiceIssueDetail?id=" + list[indexQuery + 1].id + '&type=' + route.query.type)
go("/feeSettlementDetail?id=" + list[indexQuery + 1].id + '&type=' + route.query.type)
}
}
})
@ -323,6 +323,23 @@ function handleClick(record) {
}
})
}
if (route.query.type == 'free') {
setSelectedRowKeys([record.id])
const data = {
items: [{
id: record.businessId,
businessType: record.businessType,
customerId: record.customerId
}],
queryCondition: ''
}
PaymentFreeSettlementGetFees(data).then(res => {
if (res.succeeded) {
setTableData1(res.data.items)
}
loading.value = false
})
}
}
const invoiceTableRef = ref(null) as any

@ -44,7 +44,7 @@
</template>
<template v-if="column.dataIndex == 'amount'">
<a-input-number @change="onSelectChangeDetail" :precision="2" size="small" :controls="false"
:max="record.restAmount" v-model:value="record.amount" />
:max="record.maxRestAmount" v-model:value="record.restAmount" />
</template>
</template>
<template #footer>
@ -112,12 +112,12 @@
</a-spin>
</div>
</a-modal>
<a-modal width="400px" @cancel="exchangeFlag = false" @ok="handleSureExhange" :visible="exchangeFlag"
<a-modal width="500px" @cancel="exchangeFlag = false" @ok="handleSureExhange" :visible="exchangeFlag"
title="币别汇率折算">
<div>
<div v-for="(item, index) in exchangarr" :key="index">
<div style="margin-bottom: 15px;margin-top: 10px">
<span class="bold" style="margin-right: 10px;width:46px;display: inline-block">1{{ item.currencyTo
<span class="bold" style="margin-right: 10px;width:66px;display: inline-block">1{{ item.currencyTo
}}
=</span>
<a-input-number :addon-after="item.currencyFrom" :precision="4" size="small" :controls="false"
@ -202,7 +202,8 @@ const [registerTable1, { getSelectRows: getSelectRowsDetail, setTableData }] = u
pagination: false,
striped: false,
rowSelection: {
onChange: onSelectChangeDetail
onChange: onSelectChangeDetail,
fixed: true,
},
maxHeight: '900',
bordered: true,
@ -314,6 +315,9 @@ const onRowClick = (record, index) => {
}
PaymentFreeSettlementGetFees(data).then(res => {
if (res.succeeded) {
res.data.items.forEach(item=>{
item.maxRestAmount = item.restAmount
})
setTableData(res.data.items)
}
loading.value = false
@ -554,8 +558,8 @@ function handleSureExhange() {
list.forEach(item => {
item.originalCurrency = item.currency
item.currency = currency.value
item.originalAmount = item.amount
item.amount = Number((Number(item.amount) * Number(item.exchangeRate)).toFixed(2))
item.originalAmount = item.restAmount
item.restAmount = Number((Number(item.restAmount) * Number(item.exchangeRate)).toFixed(2))
})
emits('updateListFree', list, currency.value)
}
@ -645,7 +649,7 @@ function onSelectChangeDetail() {
if (route.query.type == 'free') {
totalAmount.value = 0
list.forEach(item => {
totalAmount.value += Number(item.amount)
totalAmount.value += Number(item.restAmount)
})
}
}

@ -57,7 +57,7 @@
<span class="iconfont icon-dingdan"></span>
新建发票结算
</a-button>
<a-button v-repeat type="link" >
<a-button v-repeat type="link">
<span class="iconfont icon-dingdan"></span>
生成凭证
</a-button>
@ -91,7 +91,7 @@
</template>
<script setup lang="ts">
import { ref, reactive, onMounted, defineExpose, computed } from 'vue'
import { PaymentSettlementGetList,PaymentSettlementDelete,PaymentSettlementSetLock } from './api.js'
import { PaymentSettlementGetList, PaymentSettlementDelete, PaymentSettlementSetLock } from './api.js'
import { BasicTable, useTable, TableAction } from '/@/components/Table'
import { formatParams } from '/@/hooks/web/common'
import { columns, searchFormSchema, detailColumns, feeColumns, feeColumnsSum } from './columns'
@ -100,7 +100,7 @@ import { SvgIcon } from '/@/components/Icon'
const { createMessage } = useMessage()
import { useGo } from '/@/hooks/web/usePage'
const go = useGo()
const [registerTable, { reload, setLoading, getSelectRows, getRawDataSource }] = useTable({
const [registerTable, { reload, setLoading, getSelectRows, getForm }] = useTable({
api: async (p) => {
const res: API.DataResult = await PaymentSettlementGetList(p)
return new Promise((resolve) => {
@ -108,7 +108,23 @@ const [registerTable, { reload, setLoading, getSelectRows, getRawDataSource }] =
})
},
beforeFetch: (p) => {
return formatParams(p)
const data = formatParams(p)
data.otherQueryCondition = {}
if (getForm().getFieldsValue().number) {
data.otherQueryCondition.number = getForm().getFieldsValue().number
}
let queryData1 = [] as any
if (formatParams(p).queryCondition) {
queryData1 = JSON.parse(formatParams(p).queryCondition)
}
let i = queryData1.length
while (i--) {
if (queryData1[i].FieldName === 'number') {
queryData1.splice(i, 1)
}
}
data.queryCondition = JSON.stringify(queryData1)
return data
},
columns,
formConfig: {

@ -1384,7 +1384,7 @@ export const freeColum: BasicColumn[] = [
},
{
title: '结算金额',
dataIndex: 'settlementAmount',
dataIndex: 'applyAmount',
width: 100,
},
{

@ -122,7 +122,7 @@
<script lang="ts" setup>
import { ref, onMounted, defineComponent, nextTick, watchEffect, watch } from 'vue'
import {
InvoiceSettlementSave, InvoiceSettlementGet,
InvoiceSettlementSave, InvoiceSettlementGet,PaymentFreeSettlementGetFees,
PaymentSettlementGetList, PaymentSettlementDeleteDetail, PaymentFreeSettlementGet,
GeneralInvoiceGet, PaymentFreeSettlementSave
} from './api'
@ -239,7 +239,7 @@ function updateListFreeLeft(arr, currency,arrQuery) {
tabStore.closeTabByKey(fullPath, router)
let type = route.query.type
setTimeout(() => {
go(`/feeSettlementDetail?id=${res.data.id}&type=${type}`)
go(`/paymentSettlementFree?id=${res.data.id}&type=${type}`)
}, 50)
} else {
getDetail()
@ -273,14 +273,14 @@ function ClickLast(type) {
if (indexQuery == 0) {
createMessage.warning('已经是第一条了')
} else {
go("/invoiceIssueDetail?id=" + list[indexQuery - 1].id + '&type=' + route.query.type)
go("/paymentSettlementFree?id=" + list[indexQuery - 1].id + '&type=' + route.query.type)
}
}
if (type == 'last') {
if (indexQuery == list.length - 1) {
createMessage.warning('已经是最后一条了')
} else {
go("/invoiceIssueDetail?id=" + list[indexQuery + 1].id + '&type=' + route.query.type)
go("/paymentSettlementFree?id=" + list[indexQuery + 1].id + '&type=' + route.query.type)
}
}
})
@ -324,6 +324,23 @@ function handleClick(record) {
}
})
}
if (route.query.type == 'free') {
setSelectedRowKeys([record.id])
const data = {
items: [{
id: record.businessId,
businessType: record.businessType,
customerId: record.customerId
}],
queryCondition: ''
}
PaymentFreeSettlementGetFees(data).then(res => {
if (res.succeeded) {
setTableData1(res.data.items)
}
loading.value = false
})
}
}
const invoiceTableRef = ref(null) as any
@ -359,7 +376,7 @@ function updateList(arr, currency) {
tabStore.closeTabByKey(fullPath, router)
let type = route.query.type
setTimeout(() => {
go(`/feeSettlementDetail?id=${res.data.id}&type=${type}`)
go(`/paymentSettlementFree?id=${res.data.id}&type=${type}`)
}, 50)
} else {
getDetail()
@ -388,7 +405,7 @@ function updateListFree(arr, currency) {
tabStore.closeTabByKey(fullPath, router)
let type = route.query.type
setTimeout(() => {
go(`/feeSettlementDetail?id=${res.data.id}&type=${type}`)
go(`/paymentSettlementFree?id=${res.data.id}&type=${type}`)
}, 50)
} else {
getDetail()
@ -419,7 +436,7 @@ function handleSave() {
tabStore.closeTabByKey(fullPath, router)
let type = route.query.type
setTimeout(() => {
go(`/feeSettlementDetail?id=${res.data.id}&type=${type}`)
go(`/paymentSettlementFree?id=${res.data.id}&type=${type}`)
}, 50)
} else {
getDetail()
@ -437,7 +454,7 @@ function handleSave() {
tabStore.closeTabByKey(fullPath, router)
let type = route.query.type
setTimeout(() => {
go(`/feeSettlementDetail?id=${res.data.id}&type=${type}`)
go(`/paymentSettlementFree?id=${res.data.id}&type=${type}`)
}, 50)
} else {
getDetail()

@ -44,7 +44,7 @@
</template>
<template v-if="column.dataIndex == 'amount'">
<a-input-number @change="onSelectChangeDetail" :precision="2" size="small" :controls="false"
:max="record.restAmount" v-model:value="record.amount" />
:max="record.maxRestAmount" v-model:value="record.restAmount" />
</template>
</template>
<template #footer>
@ -112,12 +112,12 @@
</a-spin>
</div>
</a-modal>
<a-modal width="400px" @cancel="exchangeFlag = false" @ok="handleSureExhange" :visible="exchangeFlag"
<a-modal width="500px" @cancel="exchangeFlag = false" @ok="handleSureExhange" :visible="exchangeFlag"
title="币别汇率折算">
<div>
<div v-for="(item, index) in exchangarr" :key="index">
<div style="margin-bottom: 15px;margin-top: 10px">
<span class="bold" style="margin-right: 10px;width:46px;display: inline-block">1{{ item.currencyTo
<span class="bold" style="margin-right: 10px;width:66px;display: inline-block">1{{ item.currencyTo
}}
=</span>
<a-input-number :addon-after="item.currencyFrom" :precision="4" size="small" :controls="false"
@ -202,7 +202,8 @@ const [registerTable1, { getSelectRows: getSelectRowsDetail, setTableData }] = u
pagination: false,
striped: false,
rowSelection: {
onChange: onSelectChangeDetail
onChange: onSelectChangeDetail,
fixed: true,
},
maxHeight: '900',
bordered: true,
@ -314,6 +315,9 @@ const onRowClick = (record, index) => {
}
PaymentFreeSettlementGetFees(data).then(res => {
if (res.succeeded) {
res.data.items.forEach(item=>{
item.maxRestAmount = item.restAmount
})
setTableData(res.data.items)
}
loading.value = false
@ -555,8 +559,8 @@ function handleSureExhange() {
list.forEach(item => {
item.originalCurrency = item.currency
item.currency = currency.value
item.originalAmount = item.amount
item.amount = Number((Number(item.amount) * Number(item.exchangeRate)).toFixed(2))
item.originalAmount = item.restAmount
item.restAmount = Number((Number(item.restAmount) * Number(item.exchangeRate)).toFixed(2))
})
emits('updateListFree', list, currency.value)
}
@ -642,11 +646,12 @@ function init() {
}
const totalAmount = ref(0)
function onSelectChangeDetail() {
console.log('list', 111)
const list = getSelectRowsDetail()
if (route.query.type == 'free') {
totalAmount.value = 0
list.forEach(item => {
totalAmount.value += Number(item.amount)
totalAmount.value += Number(item.restAmount)
})
}
}

@ -84,7 +84,7 @@ export const searchFormSchema: FormSchema[] = [
},
},
{
field: 'applicationNO',
field: 'number',
label: '编号',
component: 'Input',
colProps: { span: 4 },
@ -125,7 +125,7 @@ export const columns: BasicColumn[] = [
},
{
title: '所属分部',
dataIndex: 'orgName',
dataIndex: 'saleDeptName',
width: 100,
align: 'left',
},

@ -96,18 +96,18 @@
</div>
</div>
</a-modal>
<a-modal width="400px" @cancel="exchangeFlag = false" @ok="handleSureExhange" :visible="exchangeFlag"
<a-modal width="500px" @cancel="exchangeFlag = false" @ok="handleSureExhange" :visible="exchangeFlag"
title="币别汇率折算">
<div v-for="(item, index) in exchangeData" :key="index">
<div style="margin-bottom: 15px;margin-top: 10px">
<span class="bold" style="margin-right: 10px;width:46px;display: inline-block">1{{ item.currencyTo
<span class="bold" style="margin-right: 10px;width:66px;display: inline-block">1{{ item.currencyTo
}}
=</span>
<a-input-number addon-after="RMB" :precision="4" size="small" :controls="false"
v-model:value="item.reverseRate" />
</div>
<div>
<span class="bold" style="margin-right: 10px;width:46px;display: inline-block">1RMB =</span>
<span class="bold" style="margin-right: 10px;width:66px;display: inline-block">1RMB =</span>
<a-input-number :addon-after="item.currencyTo" :precision="4" size="small" :controls="false"
v-model:value="item.rate" />
</div>

@ -29,7 +29,7 @@
</a-tooltip>
<a-tooltip placement="top" :mouseEnterDelay="0.5">
<template #title>
<span>删除</span>
<span>提交审核</span>
</template>
<span class="ds-action-svg-btn">
<a-popconfirm title="确定提交审核吗?" @confirm="handleApply" ok-text="" cancel-text="">
@ -39,7 +39,7 @@
</a-tooltip>
<a-tooltip placement="top" :mouseEnterDelay="0.5">
<template #title>
<span>删除</span>
<span>撤销审核</span>
</template>
<span class="ds-action-svg-btn">
<a-popconfirm title="确定撤销审核吗?" @confirm="handleWithdraw" ok-text="" cancel-text="">
@ -76,7 +76,8 @@
<span v-else>{{ record.currency }}</span>
</template>
<template v-if="column.dataIndex == 'applicationNO'">
<span style="cursor: pointer"><span><span @click="copyNo($event, record.applicationNO)" class="iconfont icon-fuzhi11"></span>{{ record.applicationNO }}</span></span>
<span style="cursor: pointer"><span><span @click="copyNo($event, record.applicationNO)"
class="iconfont icon-fuzhi11"></span>{{ record.applicationNO }}</span></span>
</template>
<template v-if="column.dataIndex == 'statusText'">
<span v-if="record.status == 0" class="ds-blue-tag">
@ -125,7 +126,7 @@ import { formatParams } from '/@/hooks/web/common'
import { useAppStore } from '/@/store/modules/app'
const appStore = useAppStore()
//
const [registerTable, { reload, getPaginationRef, getSelectRows, getRawDataSource }] = useTable({
const [registerTable, { reload, getForm, getSelectRows, getRawDataSource }] = useTable({
title: '',
api: async (p) => {
const res: API.DataResult = await GetList(p)
@ -135,7 +136,23 @@ const [registerTable, { reload, getPaginationRef, getSelectRows, getRawDataSourc
},
//
beforeFetch: (p) => {
return formatParams(p)
const data = formatParams(p)
data.otherQueryCondition = {}
if (getForm().getFieldsValue().number) {
data.otherQueryCondition.number = getForm().getFieldsValue().number
}
let queryData1 = [] as any
if (formatParams(p).queryCondition) {
queryData1 = JSON.parse(formatParams(p).queryCondition)
}
let i = queryData1.length
while (i--) {
if (queryData1[i].FieldName === 'number') {
queryData1.splice(i, 1)
}
}
data.queryCondition = JSON.stringify(queryData1)
return data
},
columns,
formConfig: {
@ -154,7 +171,7 @@ const [registerTable, { reload, getPaginationRef, getSelectRows, getRawDataSourc
indexColumnProps: {
width: 60,
},
id:'44',
id: '44',
canResize: true,
immediate: true,
actionColumn: {
@ -176,7 +193,7 @@ const copyNo = (e, v) => {
e.stopPropagation()
navigator.clipboard.writeText(v)
createMessage.success("复制成功")
}
}
//
function FnDel() {
let ids = []

@ -28,7 +28,7 @@ const FeeRangeList = [
]
export const searchFormSchema: FormSchema[] = [
{
field: 'mblno:hblno:bookingNO:customerNo',
field: 'number',
label: '编号检索',
component: 'Input',
colProps: { span: 4 },
@ -608,9 +608,25 @@ export const applySearch: FormSchema[] = [
},
{
label: '申请类型',
component: 'Input',
component: 'Select',
colProps: { span: 4 },
field: 'feeType',
field: 'mode',
componentProps: {
options: [
{
label: '普通发票',
value: '0',
},
{
label: '电子发票',
value: '1',
},
{
label: '纸质发票',
value: '2',
},
],
},
},
]

@ -60,11 +60,11 @@
</div>
</div>
</a-modal>
<a-modal width="400px" @cancel="exchangeFlag = false" @ok="handleSureExhange" :visible="exchangeFlag"
<a-modal width="500px" @cancel="exchangeFlag = false" @ok="handleSureExhange" :visible="exchangeFlag"
title="币别汇率折算">
<div v-for="(item, index) in exchangarr" :key="index">
<div style="margin-bottom: 15px;margin-top: 10px">
<span class="bold" style="margin-right: 10px;width:46px;display: inline-block">1{{ item.currencyTo
<span class="bold" style="margin-right: 10px;width:66px;display: inline-block">1{{ item.currencyTo
}}
=</span>
<a-input-number addon-after="RMB" :precision="4" size="small" :controls="false"

@ -115,7 +115,7 @@ import { useMessage } from '/@/hooks/web/useMessage'
const { createMessage } = useMessage()
import { useGo } from '/@/hooks/web/usePage'
const go = useGo()
const [registerTable, { reload, setLoading, getSelectRows, getRawDataSource }] = useTable({
const [registerTable, { reload, setLoading, getSelectRows, getForm }] = useTable({
api: async (p) => {
const res: API.DataResult = await GeneralInvoiceGetList(p)
invoiceAmount.value = res.data.invoiceAmount
@ -125,7 +125,23 @@ const [registerTable, { reload, setLoading, getSelectRows, getRawDataSource }] =
})
},
beforeFetch: (p) => {
return formatParams(p)
const data = formatParams(p)
data.otherQueryCondition = {}
if (getForm().getFieldsValue().number) {
data.otherQueryCondition.number = getForm().getFieldsValue().number
}
let queryData1 = [] as any
if (formatParams(p).queryCondition) {
queryData1 = JSON.parse(formatParams(p).queryCondition)
}
let i = queryData1.length
while (i--) {
if (queryData1[i].FieldName === 'number') {
queryData1.splice(i, 1)
}
}
data.queryCondition = JSON.stringify(queryData1)
return data
},
columns,
formConfig: {
@ -229,27 +245,32 @@ function GoDetailed(row) {
.SvgImg {
width: 12px;
}
.main{
.main {
flex-direction: column;
}
.calc {
position: fixed;
display: flex;
bottom: 10px;
margin-left: 20px;
.title {
font-size: 14px;
font-weight: 700;
}
.count {
font-size: 14px;
font-weight: 700;
color: #257AFA;
}
.box {
background: #F5F9FC;
margin-left: 10px;
padding: 0 5px;
}
}
}
</style>

@ -843,7 +843,6 @@ const columns = [
const [registerTable, { reload, setProps, getForm, getSelectRows, setColumns, setLoading }] = useTable({
api: async (p) => {
const res: API.DataResult = await GetPageAsync(p)
console.log(res)
return new Promise((resolve) => {
res.data.forEach((item) => {
if (item.recvUserList) {

Loading…
Cancel
Save