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

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"
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">
<j-ellipsis :value="text" :length="18"></j-ellipsis>
</template>
@@ -135,7 +143,7 @@ export default {
align: 'center',
dataIndex: 'contractNum',
width: 280,
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'projectName' }
}, {
title: '合同名称',
align: 'center',
@@ -197,6 +205,15 @@ export default {
contractId: id
}
})
},
toContractDetail(id) {
console.log(id)
this.$router.push({
path: '/contractManagement/ExpenditureContractDetail',
query: {
revenueId: id
}
})
}
}
}
@@ -146,8 +146,8 @@
<div>
<a-row>
<a-col :xxl="6" :xl="8" :sm="12">
<a-form-item label="应金额" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入应金额"
<a-form-item label="应金额" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入应金额"
v-decorator="['accountsReceivableAmount',validatorRules.accountsReceivableAmount]"
:maxLength='50'
@blur="addZero"
@@ -201,22 +201,23 @@
@change="e => {e.target.value = (e.target.value + '').trim()}"></a-input>
</a-form-item>
</a-col>
<a-col :xxl="6" :xl="8" :sm="12">
<a-form-item label="是否打包" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag v-decorator="['pack', validatorRules.pack]"
:triggerChange="true"
placeholder="请选择是否打包"
dictCode="yn"
@change="packageChange"/>
</a-form-item>
</a-col>
<a-col :xxl="6" :xl="8" :sm="12">
<a-form-item label="打包年份" :labelCol="labelCol" :wrapperCol="wrapperCol" v-if="isPackage">
<j-year-date style="width:100%"
placeholder="请选择打包年份"
v-decorator="['packYear',validatorRules.packYear]"></j-year-date>
</a-form-item>
</a-col>
<!-- 2021-10-18需求变更去掉-->
<!-- <a-col :xxl="6" :xl="8" :sm="12">-->
<!-- <a-form-item label="是否打包" :labelCol="labelCol" :wrapperCol="wrapperCol">-->
<!-- <j-dict-select-tag v-decorator="['pack', validatorRules.pack]"-->
<!-- :triggerChange="true"-->
<!-- placeholder="请选择是否打包"-->
<!-- dictCode="yn"-->
<!-- @change="packageChange"/>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<!-- <a-col :xxl="6" :xl="8" :sm="12">-->
<!-- <a-form-item label="打包年份" :labelCol="labelCol" :wrapperCol="wrapperCol" v-if="isPackage">-->
<!-- <j-year-date style="width:100%"-->
<!-- placeholder="请选择打包年份"-->
<!-- v-decorator="['packYear',validatorRules.packYear]"></j-year-date>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
</a-row>
</div>
</div>
@@ -659,7 +660,7 @@ export default {
callback('请输入签订合同总金额')
break
case 'accountsReceivableAmount':
callback('请输入应金额')
callback('请输入应金额')
break
case 'noTaxAmount':
callback('请输入未税金额')
@@ -6,28 +6,46 @@
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<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-input placeholder="请输入合同编号" v-model="queryParam.contractNum" :maxLength='50'></a-input>
</a-form-item>
</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-input placeholder="请输入合同名称" v-model="queryParam.contractName" :maxLength='50'></a-input>
</a-form-item>
</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-input placeholder="请输入关联项目" v-model="queryParam.projectName" :maxLength='50'></a-input>
</a-form-item>
</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">
<j-dict-select-tag v-model="queryParam.status" placeholder="请选择合同状态"
<j-dict-select-tag v-model="queryParam.status"
placeholder="请选择合同状态"
dictCode="revenue_contract_status"/>
</a-form-item>
</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">
<j-date
placeholder="请选择开始日期"
@@ -88,7 +106,7 @@
@change="handleTableChange"
class="j-table-force-nowrap">
<!-- 项目名称 待审核状态为红色-->
<!-- 项目名称 -->
<template slot="projectName" slot-scope="text, record">
<j-ellipsis
@click="toRevenueContractDetail(record.id, record.contractNum)"
@@ -133,10 +151,11 @@ import RevenueContractAduitModule from './modules/RevenueContractAduitModule'
import JDate from '../../../components/tools/JDate'
import { RangeDateMixin } from '../../../mixins/RangeDateMixin'
import { archiveRevenueContract } from '../../../api/incomePaymentsApi'
import JYearDate from '../../../components/jero/JYearDate'
export default {
name: 'RevenueContractList',
components: { PageHeaderTitle, RevenueContractAduitModule, JDate },
components: { PageHeaderTitle, RevenueContractAduitModule, JDate, JYearDate },
mixins: [JeroListMixin, RangeDateMixin],
data() {
return {
@@ -233,12 +252,15 @@ export default {
width: 200,
scopedSlots: { customRender: 'action' }
}
]
],
isPackage: false // 是否打包,控制打包年份显隐
}
},
methods: {
searchQuery() {
this.lastQueryParam = { ...this.queryParam }
searchReset() {
this.lastQueryParam = {}
this.queryParam = {}
this.isPackage = false
this.loadData(1)
},
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="请输入已收金额"
v-decorator="['amountReceived',validatorRules.amountReceived]"
:maxLength='50'
:disabled="true"
@blur="addZero"
@change="amountReceivedChange"></a-input>
</a-form-item>
@@ -208,7 +209,7 @@
<a-col :xxl="6" :xl="8" :sm="12">
<a-form-item label="是否打包" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag v-decorator="['pack', validatorRules.pack]"
:triggerChange="true"
:trigger-change="true"
placeholder="请选择是否打包"
dictCode="yn"
:disabled="isSaved"
@@ -449,10 +450,15 @@ export default {
add() {
this.title = '新建收入合同'
this.$refs.installmentForm.initInstallmentList([])
// 税率默认为6
// 税率默认为6,已收金额默认为0
let obj = {
rate: 6,
amountReceived: '0.00'
}
this.$nextTick(() => {
this.form.setFieldsValue({ rate: 6 })
this.form.setFieldsValue(pick(obj, 'rate', 'amountReceived'))
})
this.amountReceivedNum = 0
this.rateNum = 6 / 100
},
edit(id) {