[需求变更]-支出合同详情、去掉支出合同的是否打包、收入合同新增查询条件

This commit is contained in:
zhaoxiao
2021-10-25 16:38:16 +08:00
parent 32dff804d1
commit 977eae1f39
5 changed files with 482 additions and 34 deletions
@@ -0,0 +1,392 @@
<template>
<div>
<page-header-title :is-level-one="false" :img-for-icon="IconImg" level-two-title="支出合同详情"></page-header-title>
<a-spin :spinning="loading">
<a-card :bordered="false">
<!-- 主体信息-->
<div>
<div class="part-title">
<div class="part-title-text">主体信息</div>
</div>
<div class="detail" v-if="mainInfoShowList.length > 0">
<div class="detail-item"
v-for="(item, index) in mainInfoShowList"
:key="index">
<a-row>
<a-col :sm="10" :xs="24" class="detail-item-title">{{ item.title }}:</a-col>
<a-col :sm="14" :xs="24" v-if="item.fieldName === 'rate'">{{ detailData[item.fieldName] }}%</a-col>
<a-col :sm="14" :xs="24" v-else>{{ detailData[item.fieldName] }}</a-col>
</a-row>
</div>
</div>
<a-empty v-else></a-empty>
</div>
<a-divider></a-divider>
<!-- 日期节点-->
<div>
<div class="part-title">
<div class="part-title-text">日期节点</div>
</div>
<div class="detail" v-if="dateNodeShowList.length > 0">
<div class="detail-item" v-for="(item, index) in dateNodeShowList"
:key="index">
<a-row>
<a-col :sm="10" :xs="24" class="detail-item-title">{{ item.title }}:</a-col>
<a-col :sm="14" :xs="24">{{ detailData[item.fieldName] }}</a-col>
</a-row>
</div>
</div>
<a-empty v-else></a-empty>
</div>
<a-divider></a-divider>
<!-- 账款信息-->
<div>
<div class="part-title">
<div class="part-title-text">账款信息</div>
</div>
<div class="detail" v-if="accountInfoShowList.length > 0">
<div class="detail-item" v-for="(item, index) in accountInfoShowList"
:key="index">
<a-row>
<a-col :sm="10" :xs="24" class="detail-item-title">{{ item.title }}:</a-col>
<a-col :sm="14" :xs="24">{{ detailData[item.fieldName] }}</a-col>
</a-row>
</div>
</div>
<a-empty v-else></a-empty>
</div>
<a-divider></a-divider>
<!-- 其他信息-->
<div>
<div class="part-title">
<div class="part-title-text">其他信息</div>
</div>
<div class="detail" v-if="otherInfoShowList.length > 0">
<div class="detail-item all-line" v-for="(item, index) in otherInfoShowList"
:key="index">
<a-row>
<a-col :sm="3" :xs="24" class="detail-item-title">{{ item.title }}:</a-col>
<a-col :sm="21" :xs="24">111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111</a-col>
</a-row>
</div>
</div>
<a-empty v-else></a-empty>
</div>
<a-divider></a-divider>
<!-- 分期信息-->
<div>
<div class="part-title">
<div class="part-title-text">分期信息</div>
</div>
<a-row class="detail" v-for="(item, index) in detailData.listInstallment" :key="item.id">
<a-col :xxl="4" :xl="8" :sm="12" class="detail-item">
<a-row>
<a-col :sm="10" :xs="24" class="detail-item-title">{{ index + 1 }}阶段:</a-col>
<a-col :sm="14" :xs="24">{{ item.phaseName }}</a-col>
</a-row>
</a-col>
<a-col :xxl="4" :xl="8" :sm="12" class="detail-item">
<a-row>
<a-col :sm="10" :xs="24" class="detail-item-title">{{ index + 1 }}阶段应收:</a-col>
<a-col :sm="14" :xs="24">{{ item.accountsReceivableAmount }}</a-col>
</a-row>
</a-col>
<a-col :xxl="4" :xl="8" :sm="12" class="detail-item">
<a-row>
<a-col :sm="10" :xs="24" class="detail-item-title">{{ index + 1 }}阶段应收时间:</a-col>
<a-col :sm="14" :xs="24">{{ item.accountsReceivableTime }}</a-col>
</a-row>
</a-col>
<a-col :xxl="4" :xl="8" :sm="12" class="detail-item">
<a-row>
<a-col :sm="10" :xs="24" class="detail-item-title">{{ index + 1 }}阶段实收:</a-col>
<a-col :sm="14" :xs="24">{{ item.paidAmount }}</a-col>
</a-row>
</a-col>
<a-col :xxl="4" :xl="8" :sm="12" class="detail-item">
<a-row>
<a-col :sm="10" :xs="24" class="detail-item-title">{{ index + 1 }}阶段实收时间:</a-col>
<a-col :sm="14" :xs="24">{{ item.paidTime }}</a-col>
</a-row>
</a-col>
</a-row>
</div>
<a-divider></a-divider>
<!-- 存档信息-->
<div>
<div class="part-title">
<div class="part-title-text">存档信息</div>
</div>
<div class="detail" v-if="detailData.listArchive && detailData.listArchive.length > 0">
<div class="detail-item" v-for="(item, index) in detailData.listArchive"
:key="index">
<a-row>
<a-col :sm="6" :xs="24">{{ item.createBy }}</a-col>
<a-col :sm="6" :xs="24">{{ item.createTime }}</a-col>
<a-col :sm="6" :xs="24">{{ item.contractStatus_dictText }}</a-col>
</a-row>
</div>
</div>
<a-empty v-else></a-empty>
</div>
<a-divider></a-divider>
<!-- 审核记录-->
<div>
<div class="part-title">
<div class="part-title-text">审核记录</div>
</div>
<div class="aduit-text" v-if="detailData.listAudit && detailData.listAudit.length > 0">
<div v-for="(item, index) in detailData.listAudit"
:key="index">
<a-row>
<a-col :sm="6" :xs="24">{{ item.createBy }}</a-col>
<a-col :sm="6" :xs="24">{{ item.createTime }}</a-col>
<a-col :sm="6" :xs="24">{{ item.contractStatus_dictText }}</a-col>
<a-col :sm="6" :xs="24">{{ item.explainRemarks }}</a-col>
</a-row>
</div>
</div>
<a-empty v-else></a-empty>
</div>
<!-- 状态非已存档显示-->
<template v-if="detailData.status < 5">
<a-divider></a-divider>
<!-- 编辑、审核、存档-->
<div>
<div class="part-title">
<div class="part-title-text">操作</div>
</div>
<div class="operator-btn">
<a-button
type="primary"
@click="handleEdit(detailData.id, detailData.contractNum)"
v-if="detailData.status === 1 || detailData.status === 4"
v-has="'revenueContract:edit'">
编辑
</a-button>
<a-button
type="primary"
@click="handleAudit(detailData.id)"
v-if="detailData.status === 2"
v-has="'revenueContract:aduit'">
审核
</a-button>
<a-button
type="primary"
@click="handleArchive(detailData.id)"
v-if="detailData.status === 3"
v-has="'revenueContract:archive'">
存档
</a-button>
</div>
</div>
</template>
</a-card>
</a-spin>
</div>
</template>
<script>
import PageHeaderTitle from '../../../components/layouts/PageHeaderTitle'
import IconImg from '@/assets/imgs/icon/icon_revenue_contract.png'
import { getExpenditureContractById } from '../../../api/incomePaymentsApi'
export default {
name: 'ExpenditureContractDetail',
components: { PageHeaderTitle },
data() {
return {
IconImg,
loading: false,
detailData: {},
// 主体信息
mainInfoList: [
{
fieldName: 'contractNum',
title: '合同编号'
}, {
fieldName: 'contractName',
title: '合同名称'
}, {
fieldName: 'signedCompanyTemporaryName',
title: '签订单位'
}, {
fieldName: 'signedContactsTemporaryName',
title: '签订联系人'
}, {
fieldName: 'opening_dictText',
title: '是否开口'
}, {
fieldName: 'principalName',
title: '负责人'
}, {
fieldName: 'departmentName',
title: '部门名称'
}, {
fieldName: 'contractAmount',
title: '签订合同总金额'
}, {
fieldName: 'rate',
title: '税率'
}, {
fieldName: 'noTaxAmount',
title: '未税金额'
}
],
// 日期节点
dateNodeList: [
{
fieldName: 'contractDate',
title: '合同签订日期'
}, {
fieldName: 'terminationDate',
title: '合同终止日期'
}, {
fieldName: 'contractTimePoints',
title: '合同约定主要时点'
}
],
// 账款信息
accountInfoList: [
{
fieldName: 'accountsReceivableAmount',
title: '应付金额'
}, {
fieldName: 'amountReceived',
title: '已收金额'
}, {
fieldName: 'amountReceived',
title: '未收金额'
}, {
fieldName: 'accountStatus_dictText',
title: '赊账状态'
}
],
// 其他信息
otherInfoList: [
{
fieldName: 'contractPaymentTimes',
title: '合同约定付款次数'
}
// {
// fieldName: 'pack_dictText',
// title: '是否打包'
// }, {
// fieldName: 'packYear',
// title: '打包年份'
// }
]
}
},
computed: {
// 主体信息,去掉没有数据的字段
mainInfoShowList() {
return this.mainInfoList.filter(item => this.detailData[item.fieldName] && this.detailData[item.fieldName] !== '') || []
},
// 日期节点
dateNodeShowList() {
return this.dateNodeList.filter(item => this.detailData[item.fieldName] && this.detailData[item.fieldName] !== '') || []
},
// 账款信息
accountInfoShowList() {
return this.accountInfoList.filter(item => this.detailData[item.fieldName] && this.detailData[item.fieldName] !== '') || []
},
// 其他信息
otherInfoShowList() {
return this.otherInfoList.filter(item => this.detailData[item.fieldName] && this.detailData[item.fieldName] !== '') || []
}
},
mounted() {
this.initDetailData(this.$route.query.revenueId)
},
methods: {
initDetailData() {
this.loading = true
let param = {
id: this.$route.query.revenueId
}
getExpenditureContractById(param).then(res => {
if (res.success) {
this.detailData = res.result
// this.detailData.pack = this.detailData.pack === 1 ? '是' : this.detailData.pack === 0 ? '否' : ''
} else {
// 添加异常判断,防止消息进入详情无法正常获取数据造成卡死及控制台报错
this.$message.warn(res.message)
}
}).finally(() => {
this.loading = false
})
},
operatorOk() {
this.initDetailData()
},
/**
* 编辑
* @param id
* @param contractNum
*/
handleEdit(id, contractNum) {
this.$router.push({
path: '/contractManagement/RevenueContractModule',
query: {
revenueId: id
}
})
}
}
}
</script>
<style scoped lang="less">
@import '~@assets/less/common.less';
.detail {
display: flex;
padding: 0 20px;
flex-wrap: wrap;
&-item {
width: 25%;
min-width: 280px;
padding-top: 10px;
color: #2F3133;
word-break: break-all;
&-title {
color: #999999;
text-align: right;
}
}
}
.all-line {
width: 100%!important;
}
.ant-divider-horizontal {
margin: 20px 0;
}
.operator-btn {
margin-top: 10px;
button {
margin-right: 8px;
}
}
.aduit-text {
color: #2F3133;
padding: 0 20px;
}
</style>
@@ -75,6 +75,14 @@
@change="handleTableChange" @change="handleTableChange"
class="j-table-force-nowrap"> class="j-table-force-nowrap">
<template slot="projectName" slot-scope="text, record">
<j-ellipsis
class="primary-color"
@click="toContractDetail(record.id)"
:value="text"
:length="18"></j-ellipsis>
</template>
<template slot="text" slot-scope="text"> <template slot="text" slot-scope="text">
<j-ellipsis :value="text" :length="18"></j-ellipsis> <j-ellipsis :value="text" :length="18"></j-ellipsis>
</template> </template>
@@ -135,7 +143,7 @@ export default {
align: 'center', align: 'center',
dataIndex: 'contractNum', dataIndex: 'contractNum',
width: 280, width: 280,
scopedSlots: { customRender: 'text' } scopedSlots: { customRender: 'projectName' }
}, { }, {
title: '合同名称', title: '合同名称',
align: 'center', align: 'center',
@@ -197,6 +205,15 @@ export default {
contractId: id contractId: id
} }
}) })
},
toContractDetail(id) {
console.log(id)
this.$router.push({
path: '/contractManagement/ExpenditureContractDetail',
query: {
revenueId: id
}
})
} }
} }
} }
@@ -146,8 +146,8 @@
<div> <div>
<a-row> <a-row>
<a-col :xxl="6" :xl="8" :sm="12"> <a-col :xxl="6" :xl="8" :sm="12">
<a-form-item label="应收金额" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form-item label="应付金额" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入应收金额" <a-input placeholder="请输入应付金额"
v-decorator="['accountsReceivableAmount',validatorRules.accountsReceivableAmount]" v-decorator="['accountsReceivableAmount',validatorRules.accountsReceivableAmount]"
:maxLength='50' :maxLength='50'
@blur="addZero" @blur="addZero"
@@ -201,22 +201,23 @@
@change="e => {e.target.value = (e.target.value + '').trim()}"></a-input> @change="e => {e.target.value = (e.target.value + '').trim()}"></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :xxl="6" :xl="8" :sm="12"> <!-- 2021-10-18需求变更去掉-->
<a-form-item label="是否打包" :labelCol="labelCol" :wrapperCol="wrapperCol"> <!-- <a-col :xxl="6" :xl="8" :sm="12">-->
<j-dict-select-tag v-decorator="['pack', validatorRules.pack]" <!-- <a-form-item label="是否打包" :labelCol="labelCol" :wrapperCol="wrapperCol">-->
:triggerChange="true" <!-- <j-dict-select-tag v-decorator="['pack', validatorRules.pack]"-->
placeholder="请选择是否打包" <!-- :triggerChange="true"-->
dictCode="yn" <!-- placeholder="请选择是否打包"-->
@change="packageChange"/> <!-- dictCode="yn"-->
</a-form-item> <!-- @change="packageChange"/>-->
</a-col> <!-- </a-form-item>-->
<a-col :xxl="6" :xl="8" :sm="12"> <!-- </a-col>-->
<a-form-item label="打包年份" :labelCol="labelCol" :wrapperCol="wrapperCol" v-if="isPackage"> <!-- <a-col :xxl="6" :xl="8" :sm="12">-->
<j-year-date style="width:100%" <!-- <a-form-item label="打包年份" :labelCol="labelCol" :wrapperCol="wrapperCol" v-if="isPackage">-->
placeholder="请选择打包年份" <!-- <j-year-date style="width:100%"-->
v-decorator="['packYear',validatorRules.packYear]"></j-year-date> <!-- placeholder="请选择打包年份"-->
</a-form-item> <!-- v-decorator="['packYear',validatorRules.packYear]"></j-year-date>-->
</a-col> <!-- </a-form-item>-->
<!-- </a-col>-->
</a-row> </a-row>
</div> </div>
</div> </div>
@@ -659,7 +660,7 @@ export default {
callback('请输入签订合同总金额') callback('请输入签订合同总金额')
break break
case 'accountsReceivableAmount': case 'accountsReceivableAmount':
callback('请输入应收金额') callback('请输入应付金额')
break break
case 'noTaxAmount': case 'noTaxAmount':
callback('请输入未税金额') callback('请输入未税金额')
@@ -6,28 +6,46 @@
<div class="table-page-search-wrapper"> <div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery"> <a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row> <a-row>
<a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-col :xl="8" :lg="9" :md="10" :sm="24">
<a-form-item label="合同编号" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form-item label="合同编号" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入合同编号" v-model="queryParam.contractNum" :maxLength='50'></a-input> <a-input placeholder="请输入合同编号" v-model="queryParam.contractNum" :maxLength='50'></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-col :xl="8" :lg="9" :md="10" :sm="24">
<a-form-item label="合同名称" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form-item label="合同名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入合同名称" v-model="queryParam.contractName" :maxLength='50'></a-input> <a-input placeholder="请输入合同名称" v-model="queryParam.contractName" :maxLength='50'></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-col :xl="8" :lg="9" :md="10" :sm="24">
<a-form-item label="关联项目" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form-item label="关联项目" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入关联项目" v-model="queryParam.projectName" :maxLength='50'></a-input> <a-input placeholder="请输入关联项目" v-model="queryParam.projectName" :maxLength='50'></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-col :xl="8" :lg="9" :md="10" :sm="24">
<a-form-item label="合同状态" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form-item label="合同状态" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag v-model="queryParam.status" placeholder="请选择合同状态" <j-dict-select-tag v-model="queryParam.status"
placeholder="请选择合同状态"
dictCode="revenue_contract_status"/> dictCode="revenue_contract_status"/>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :xl="10" :lg="11" :md="12" :sm="24"> <!-- 需求变更-->
<a-col :xl="8" :lg="9" :md="10" :sm="24">
<a-form-item label="是否打包" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag v-model="queryParam.pack"
placeholder="请选择是否打包"
dictCode="yn"
@input="packageChange"/>
</a-form-item>
</a-col>
<a-col :xl="8" :lg="9" :md="10" :sm="24">
<a-form-item label="打包年份" :labelCol="labelCol" :wrapperCol="wrapperCol" v-if="isPackage">
<j-year-date style="width:100%"
placeholder="请选择打包年份"
v-model="queryParam.packYear"></j-year-date>
</a-form-item>
</a-col>
<!-- /需求变更-->
<a-col :xl="10" :lg="12" :md="12" :sm="24">
<a-form-item label="创建时间" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form-item label="创建时间" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-date <j-date
placeholder="请选择开始日期" placeholder="请选择开始日期"
@@ -88,7 +106,7 @@
@change="handleTableChange" @change="handleTableChange"
class="j-table-force-nowrap"> class="j-table-force-nowrap">
<!-- 项目名称 待审核状态为红色--> <!-- 项目名称 -->
<template slot="projectName" slot-scope="text, record"> <template slot="projectName" slot-scope="text, record">
<j-ellipsis <j-ellipsis
@click="toRevenueContractDetail(record.id, record.contractNum)" @click="toRevenueContractDetail(record.id, record.contractNum)"
@@ -133,10 +151,11 @@ import RevenueContractAduitModule from './modules/RevenueContractAduitModule'
import JDate from '../../../components/tools/JDate' import JDate from '../../../components/tools/JDate'
import { RangeDateMixin } from '../../../mixins/RangeDateMixin' import { RangeDateMixin } from '../../../mixins/RangeDateMixin'
import { archiveRevenueContract } from '../../../api/incomePaymentsApi' import { archiveRevenueContract } from '../../../api/incomePaymentsApi'
import JYearDate from '../../../components/jero/JYearDate'
export default { export default {
name: 'RevenueContractList', name: 'RevenueContractList',
components: { PageHeaderTitle, RevenueContractAduitModule, JDate }, components: { PageHeaderTitle, RevenueContractAduitModule, JDate, JYearDate },
mixins: [JeroListMixin, RangeDateMixin], mixins: [JeroListMixin, RangeDateMixin],
data() { data() {
return { return {
@@ -233,12 +252,15 @@ export default {
width: 200, width: 200,
scopedSlots: { customRender: 'action' } scopedSlots: { customRender: 'action' }
} }
] ],
isPackage: false // 是否打包,控制打包年份显隐
} }
}, },
methods: { methods: {
searchQuery() { searchReset() {
this.lastQueryParam = { ...this.queryParam } this.lastQueryParam = {}
this.queryParam = {}
this.isPackage = false
this.loadData(1) this.loadData(1)
}, },
toRevenueContractDetail(id, contractNum) { toRevenueContractDetail(id, contractNum) {
@@ -314,6 +336,16 @@ export default {
}) })
} }
}) })
},
/**
* 打包状态修改
*/
packageChange(value) {
if (value === '1') {
this.isPackage = true
} else {
this.isPackage = false
}
} }
} }
} }
@@ -163,6 +163,7 @@
<a-input placeholder="请输入已收金额" <a-input placeholder="请输入已收金额"
v-decorator="['amountReceived',validatorRules.amountReceived]" v-decorator="['amountReceived',validatorRules.amountReceived]"
:maxLength='50' :maxLength='50'
:disabled="true"
@blur="addZero" @blur="addZero"
@change="amountReceivedChange"></a-input> @change="amountReceivedChange"></a-input>
</a-form-item> </a-form-item>
@@ -208,7 +209,7 @@
<a-col :xxl="6" :xl="8" :sm="12"> <a-col :xxl="6" :xl="8" :sm="12">
<a-form-item label="是否打包" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form-item label="是否打包" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag v-decorator="['pack', validatorRules.pack]" <j-dict-select-tag v-decorator="['pack', validatorRules.pack]"
:triggerChange="true" :trigger-change="true"
placeholder="请选择是否打包" placeholder="请选择是否打包"
dictCode="yn" dictCode="yn"
:disabled="isSaved" :disabled="isSaved"
@@ -449,10 +450,15 @@ export default {
add() { add() {
this.title = '新建收入合同' this.title = '新建收入合同'
this.$refs.installmentForm.initInstallmentList([]) this.$refs.installmentForm.initInstallmentList([])
// 税率默认为6 // 税率默认为6,已收金额默认为0
let obj = {
rate: 6,
amountReceived: '0.00'
}
this.$nextTick(() => { this.$nextTick(() => {
this.form.setFieldsValue({ rate: 6 }) this.form.setFieldsValue(pick(obj, 'rate', 'amountReceived'))
}) })
this.amountReceivedNum = 0
this.rateNum = 6 / 100 this.rateNum = 6 / 100
}, },
edit(id) { edit(id) {