master
lynn 6 months ago
parent 724fc1d02b
commit 71e2ea93b9

@ -1224,7 +1224,9 @@ export default {
}
//
if (this.form.postPaymentForm && this.form.postPaymentForm !== this.originalPostPaymentForm) {
if (this.form.postPaymentForm === '') {
submitData.contract_template_id = ''
} else if (this.form.postPaymentForm && this.form.postPaymentForm !== this.originalPostPaymentForm) {
submitData.contract_template_id = this.form.postPaymentForm
}
} else {

@ -359,43 +359,17 @@ export default {
assurance_expire: ''
},
rules: {
number: [{
required: true,
message: '必填'
}],
date: [{
required: true,
message: '必填'
}],
supply: [{
required: true,
message: '必填'
}],
carryDepartment: [{
required: true,
message: '必填'
}],
money: [{
required: true,
message: '必填'
},
{
pattern: /^\d+(\.\d+)?$/,
message: '必须为数字'
}
number: [{ required: true, message: '必填' }],
date: [{ required: true, message: '必填' }],
supply: [{ required: true, message: '必填' }],
carryDepartment: [{ required: true, message: '必填' }],
money: [
{ required: true, message: '必填' },
{ pattern: /^\d+(\.\d+)?$/, message: '必须为数字' }
],
time: [{
required: true,
message: '必选'
}],
guaranteeMoney: [{
required: true,
message: '必填'
}],
guaranteeYear: [{
required: true,
message: '必填'
}]
time: [{ required: true, message: '必选' }],
guaranteeMoney: [],
guaranteeYear: []
},
isShow: false,
@ -486,13 +460,13 @@ export default {
//
sign() {
if (this.signList.length == 0) {
{/* if (this.signList.length == 0) {
Message({
type: 'error',
message: '该项目未设置付款计划,请设置付款计划后保存'
})
return false
}
} */}
const signMoneyTotal = this.signList.reduce((pre, cur) => (pre + Number(cur.money || 0)), 0)
if (signMoneyTotal !== Number(this.form.money)) {
@ -544,9 +518,9 @@ export default {
this.contract = res
Object.assign(this.form, res)
if (res.start_date && res.end_date) {
this.form.time = [res.start_date, res.end_date]
this.form.time = [res.start_date, res.end_date]
} else {
this.form.time = []
this.form.time = []
}
this.form.carryDepartment = res.carry_department
this.form.guaranteeMoney = res.guarantee_money
@ -554,6 +528,14 @@ export default {
this.form.is_assurance = res.is_assurance === 1
this.form.assurance_expire = res.assurance_expire
this.form.assurance_money = res.assurance_money
//
if (res.contract_type !== 160) {
this.rules.guaranteeMoney = [{ required: true, message: '必填' }]
this.rules.guaranteeYear = [{ required: true, message: '必填' }]
} else {
this.rules.guaranteeMoney = []
this.rules.guaranteeYear = []
}
console.log(this.form)
},
deleteContractSign(row) {

@ -5,45 +5,45 @@
<template v-slot:normalContent>
<div class="base-info">
<div class="base-info-title">项目基本信息</div>
<div class="base-info-item">
<div class="base-info-item" v-if="contractConfig.projectName">
<div class="base-info-item-title">项目名称</div>
<div class="base-info-item-content">{{ detail.name }}</div>
</div>
<div class="base-info-item">
<div class="base-info-item" v-if="contractConfig.projectType">
<div class="base-info-item-title">项目类型</div>
<div class="base-info-item-content">{{ typeFormatter(detail.type) }}</div>
</div>
<div style="display: flex;justify-content: space-between;">
<div class="base-info-item" style="flex-basis: 50%">
<div class="base-info-item" style="flex-basis: 50%" v-if="contractConfig.purchaseWay">
<div class="base-info-item-title">采购形式</div>
<div class="base-info-item-content">{{ detail.purchase_way?detail.purchase_way.value:'无' }}</div>
</div>
<div class="base-info-item" style="flex-basis: 50%">
<div class="base-info-item" style="flex-basis: 50%" v-if="contractConfig.purchaseType">
<div class="base-info-item-title">采购方式</div>
<div class="base-info-item-content">{{ detail.purchase_type?detail.purchase_type.value:'无' }}</div>
</div>
</div>
<div style="display: flex;justify-content: space-between;">
<div class="base-info-item" style="flex-basis: 50%">
<div class="base-info-item" style="flex-basis: 50%" v-if="detail.date">
<div class="base-info-item-title">签订时间</div>
<div class="base-info-item-content">{{ detail.date }}</div>
</div>
<div class="base-info-item" style="flex-basis: 50%">
<div class="base-info-item" style="flex-basis: 50%" v-if="detail.start_date && detail.end_date">
<div class="base-info-item-title">服务时间</div>
<div class="base-info-item-content">{{ detail.start_date }}{{ detail.end_date }}</div>
</div>
</div>
<div class="base-info-item">
<div class="base-info-item" v-if="contractConfig.budgetPlan">
<div class="base-info-item-title">项目预算</div>
<div class="base-info-item-content">{{ moneyFormat(detail.plan_price) }}</div>
<div class="base-info-item-unit">()</div>
</div>
<div class="base-info-item">
<div class="base-info-item" v-if="contractConfig.fund_channel">
<div class="base-info-item-title">资金渠道</div>
<div class="base-info-item-content">{{ moneyWayFormatter(detail.money_way_detail) }}</div>
</div>
</div>
<div class="link-budget-plan">
<div class="link-budget-plan" v-if="contractConfig.budgetPlan">
<div class="link-budget-plan-title">关联预算计划</div>
<xy-table :height="260" :table-item="linkBudgetPlanTable" :show-index="false" :list="detail.plans">
<template v-slot:btns>
@ -142,6 +142,15 @@ export default {
},
data() {
return {
contractConfig:{
projectName:0,
projectType:0,
purchaseWay:0,
purchaseType:0,
budgetPlan:0,
budgetPrice:0,
fund_channel:0
},
window: {
width: 0,
height: 0,
@ -416,7 +425,13 @@ export default {
this.detail.log = this.detail.log.reverse()
}
console.log(this.detail)
this.contractConfig.projectName = res.contract_category.project_name
this.contractConfig.projectType = res.contract_category.project_type
this.contractConfig.purchaseWay = res.contract_category.purchase_way
this.contractConfig.purchaseForm = res.contract_category.purchase_form
this.contractConfig.budgetPlan = res.contract_category.budget_plan
this.contractConfig.budgetPrice = res.contract_category.budget_price
this.contractConfig.fund_channel = res.contract_category.fund_channel
const plan = await getContractSign({
contract_id: id
})
@ -481,26 +496,27 @@ export default {
}
.sign-info {
margin-top: 10px;
&-title {
@extend .link-budget-plan-title;
margin-bottom: 0;
}
&-item {
@extend .base-info-item;
margin-top: 5px;
&-title {
@extend .base-info-item-title;
}
&-content {
@extend .base-info-item-content;
}
&-unit {
@extend .base-info-item-unit;
}
}
&-title + .sign-info-item {
margin-top: 0;
}
}
.pay-plan {

@ -76,7 +76,11 @@
label="款项类型"
width="120"
align="center"
/>
>
<template slot-scope="scope">
{{ paymentType[scope.row.type] || '未知' }}
</template>
</el-table-column>
<el-table-column
prop="apply_money"
label="申请金额"
@ -351,7 +355,11 @@
label="款项类型"
width="120"
align="center"
/>
>
<template slot-scope="scope">
{{ paymentType[scope.row.type] || '未知' }}
</template>
</el-table-column>
<el-table-column
prop="is_end"
label="是否最后一笔"
@ -871,9 +879,10 @@ export default {
//
percentPay() {
const total = this.totalMoney()
if (!total || !this.contract || !this.contract.money || isNaN(total) || isNaN(this.contract.money)) {
if (!total || !this.contract || !this.contract.money || isNaN(total) || isNaN(this.contract.money) || Number(this.contract.money) === 0) {
return '0%'
}
console.log('total', total, this.contract.money)
const percent = (total / this.contract.money) * 100
return isNaN(percent) ? '0%' : percent.toFixed(2) + '%'
},
@ -1108,6 +1117,7 @@ export default {
audit_money: this.paymentRegistrationForm.audit_money ? this.paymentRegistrationForm.audit_money : 0,
end_time: this.paymentRegistrationForm.end_time,
is_check: this.paymentRegistrationForm.isCheck ? 1 : 0,
act_date: this.paymentRegistrationForm.act_date,
// HTML
forms: this.forms,
other_data: this.contract.contract_template?.contract_template_fields || []
@ -1473,8 +1483,20 @@ export default {
input.addEventListener('blur', this.calculateTotal)
})
// total
const totalInput = dom.querySelector('input[data-field="total"]')
if (totalInput) {
totalInput.removeEventListener('input', (e) => this.updateUpperCaseFromTotal(e, dom))
totalInput.removeEventListener('change', (e) => this.updateUpperCaseFromTotal(e, dom))
totalInput.removeEventListener('blur', (e) => this.updateUpperCaseFromTotal(e, dom))
totalInput.addEventListener('input', (e) => this.updateUpperCaseFromTotal(e, dom))
totalInput.addEventListener('change', (e) => this.updateUpperCaseFromTotal(e, dom))
totalInput.addEventListener('blur', (e) => this.updateUpperCaseFromTotal(e, dom))
}
//
this.calculateTotal()
// this.calculateTotal()
}, 100)
},
caculateRoadDay() {
@ -1486,7 +1508,7 @@ export default {
const s = new Date(sdate)
const e = new Date(edate)
//
const roadDay = Math.floor((e - s) / (1000 * 60 * 60 * 24))
const roadDay = Math.floor((e - s) / (1000 * 60 * 60 * 24)) + 1
console.log('roadDay', sdate, edate, roadDay)
const roadDayInput = this.$refs.mainTable.querySelector('input[data-field="roadDay"]')
if (roadDayInput) {
@ -1532,7 +1554,7 @@ export default {
const wanInput = dom.querySelector('input[data-field="wTotal"]')
if (wanInput) {
wanInput.value = wanTotal===0?'':wanTotal
wanInput.value = wanTotal===0?'0':wanTotal
}
let qianTotal = 0
@ -1544,7 +1566,7 @@ export default {
const qianInput = dom.querySelector('input[data-field="qTotal"]')
if (qianInput) {
qianInput.value = qianTotal===0?'':qianTotal
qianInput.value = qianTotal===0?'0':qianTotal
}
let baiTotal = 0
@ -1556,7 +1578,7 @@ export default {
const baiInput = dom.querySelector('input[data-field="bTotal"]')
if (baiInput) {
baiInput.value = baiTotal===0?'':baiTotal
baiInput.value = baiTotal===0?'0':baiTotal
}
let shiTotal = 0
@ -1568,7 +1590,7 @@ export default {
const shiInput = dom.querySelector('input[data-field="sTotal"]')
if (shiInput) {
shiInput.value = shiTotal===0?'':shiTotal
shiInput.value = shiTotal===0?'0':shiTotal
}
let yuanTotal = 0
@ -1580,7 +1602,7 @@ export default {
const yuanInput = dom.querySelector('input[data-field="yTotal"]')
if (yuanInput) {
yuanInput.value = yuanTotal===0?'':yuanTotal
yuanInput.value = yuanTotal===0?'0':yuanTotal
}
let jiaoTotal = 0
@ -1592,7 +1614,7 @@ export default {
const jiaoInput = dom.querySelector('input[data-field="jTotal"]')
if (jiaoInput) {
jiaoInput.value = jiaoTotal===0?'':jiaoTotal
jiaoInput.value = jiaoTotal===0?'0':jiaoTotal
}
let fenTotal = 0
@ -1604,11 +1626,12 @@ export default {
const fenInput = dom.querySelector('input[data-field="fTotal"]')
if (fenInput) {
fenInput.value = fenTotal===0?'':fenTotal
fenInput.value = fenTotal===0?'0':fenTotal
}
// console.log('fenTotal', wanTotal, qianTotal, baiTotal, shiTotal, yuanTotal, jiaoTotal, fenTotal)
this.otherTotal = wanTotal * 10000 + qianTotal * 1000 + baiTotal * 100 + shiTotal * 10 + yuanTotal + jiaoTotal * 0.1 + fenTotal * 0.01
this.otherTotal = this.otherTotal.toFixed(2)
// console.log('this.otherTotal', this.otherTotal)
this.total = 0
// amount
const amountInputs = dom.querySelectorAll('input[data-field^="amount"]')
@ -1620,16 +1643,11 @@ export default {
//
const totalInput = dom.querySelector('input[data-field="total"]')
if (totalInput) {
totalInput.value = this.total.toFixed(2)
// total
totalInput.removeEventListener('input', (e) => this.updateUpperCaseFromTotal(e, dom))
totalInput.removeEventListener('change', (e) => this.updateUpperCaseFromTotal(e, dom))
totalInput.removeEventListener('blur', (e) => this.updateUpperCaseFromTotal(e, dom))
totalInput.addEventListener('input', (e) => this.updateUpperCaseFromTotal(e, dom))
totalInput.addEventListener('change', (e) => this.updateUpperCaseFromTotal(e, dom))
totalInput.addEventListener('blur', (e) => this.updateUpperCaseFromTotal(e, dom))
if (this.total===0) {
this.total = parseFloat(totalInput.value) || 0
} else {
totalInput.value = this.total.toFixed(2)
}
}
//
@ -1652,15 +1670,8 @@ export default {
const upperCaseInput = dom.querySelector('input[data-field="upperCaseAmount"]')
if (totalInput && upperCaseInput) {
const total = parseFloat(totalInput.value) || 0
upperCaseInput.value = numberToChinese(total)
}
let wanTotal = 0
const wanInput = dom.querySelector('input[data-field="wTotal"]')
if (wanInput) {
wanTotal = parseFloat(wanInput.value) || 0
upperCaseInput.value = numberToChinese(wanTotal)
this.total = parseFloat(totalInput.value) || 0
upperCaseInput.value = numberToChinese(this.total)
}
},

@ -354,7 +354,7 @@ export default {
}
//
this.calculateTotal()
// this.calculateTotal()
},
caculateRoadDay() {
const sdateInput = this.$refs.printtable.querySelector('input[data-field^="sdate"]')
@ -365,7 +365,7 @@ export default {
const s = new Date(sdate)
const e = new Date(edate)
//
const roadDay = Math.floor((e - s) / (1000 * 60 * 60 * 24))
const roadDay = Math.floor((e - s) / (1000 * 60 * 60 * 24)) + 1
console.log('roadDay', sdate, edate, roadDay)
const roadDayInput = this.$refs.printtable.querySelector('input[data-field="roadDay"]')
if (roadDayInput) {
@ -385,7 +385,7 @@ export default {
const wanInput = dom.querySelector('input[data-field="wTotal"]')
if (wanInput) {
wanInput.value = wanTotal===0?'':wanTotal
wanInput.value = wanTotal===0?'0':wanTotal
}
let qianTotal = 0
@ -397,7 +397,7 @@ export default {
const qianInput = dom.querySelector('input[data-field="qTotal"]')
if (qianInput) {
qianInput.value = qianTotal===0?'':qianTotal
qianInput.value = qianTotal===0?'0':qianTotal
}
let baiTotal = 0
@ -409,7 +409,7 @@ export default {
const baiInput = dom.querySelector('input[data-field="bTotal"]')
if (baiInput) {
baiInput.value = baiTotal===0?'':baiTotal
baiInput.value = baiTotal===0?'0':baiTotal
}
let shiTotal = 0
@ -421,7 +421,7 @@ export default {
const shiInput = dom.querySelector('input[data-field="sTotal"]')
if (shiInput) {
shiInput.value = shiTotal===0?'':shiTotal
shiInput.value = shiTotal===0?'0':shiTotal
}
let yuanTotal = 0
@ -433,7 +433,7 @@ export default {
const yuanInput = dom.querySelector('input[data-field="yTotal"]')
if (yuanInput) {
yuanInput.value = yuanTotal===0?'':yuanTotal
yuanInput.value = yuanTotal===0?'0':yuanTotal
}
let jiaoTotal = 0
@ -445,7 +445,7 @@ export default {
const jiaoInput = dom.querySelector('input[data-field="jTotal"]')
if (jiaoInput) {
jiaoInput.value = jiaoTotal===0?'':jiaoTotal
jiaoInput.value = jiaoTotal===0?'0':jiaoTotal
}
let fenTotal = 0
@ -457,7 +457,7 @@ export default {
const fenInput = dom.querySelector('input[data-field="fTotal"]')
if (fenInput) {
fenInput.value = fenTotal===0?'':fenTotal
fenInput.value = fenTotal===0?'0':fenTotal
}
let otherTotal = wanTotal * 10000 + qianTotal * 1000 + baiTotal * 100 + shiTotal * 10 + yuanTotal + jiaoTotal * 0.1 + fenTotal * 0.01
@ -722,14 +722,15 @@ export default {
const orientation = this.printOrientation || 'portrait';
const margin = orientation === 'portrait'
? '2mm 10mm 10mm 2mm'
? '10mm 10mm 10mm 2mm'
: '10mm 10mm 10mm 10mm';
const win = window.open('', '_blank')
//
const isPortrait = orientation === 'portrait';
const pageWidth = isPortrait ? 210 : 297;
const scale = 0.8;
const translateX = ((pageWidth - pageWidth * scale) / 2).toFixed(2) + 'mm';
const pageWidth = isPortrait ? 280 : 297;
const scale = 0.9;
const offset = 7;
const translateX = ((pageWidth - pageWidth * scale) / 2+offset).toFixed(2) + 'mm';
win.document.write(`
<html>

@ -242,7 +242,7 @@
</template>
</template>
<template v-if="scope.row.is_simple === 1&&scope.row.status === 1">
<template v-if="scope.row.is_simple === 1&&scope.row.is_end === 0">
<Button
class="slot-btns-item"
size="small"
@ -1035,12 +1035,36 @@ export default {
list: [], //
total: 0,
//
table: [{
table: [
{
label: '合同分类',
width: 120,
prop: 'contract_category.category',
fixed: 'left',
align: 'center',
formatter: (row) => this.categoryIdNameMap?.[row.contract_category?.category] || ''
},
{
label: '事务类型',
width: 120,
prop: 'contract_category.work_type',
fixed: 'left',
align: 'center',
formatter: (row) => this.categoryIdNameMap?.[row.contract_category?.work_type] || ''
},
{
label: '合同类型',
width: 120,
prop: 'contract_category.contract_type',
fixed: 'left',
align: 'center',
formatter: (row) => this.categoryIdNameMap?.[row.contract_category?.contract_type] || '-'
},{
label: '项目名称',
width: 380,
width: 120,
prop: 'name',
fixed: 'left',
align: 'left'
align: 'center'
},
{
label: '采购形式',
@ -1246,6 +1270,9 @@ export default {
label: '支付占比',
width: 140,
customFn: (row) => {
if (Number(row.money) === 0) {
return '0%'
}
const per = ((((row.fund_log_total) / row.money) || 0) * 100)?.toFixed(2) || 0
return `${per}%`
}
@ -1561,6 +1588,8 @@ export default {
window.onfocus = () => {
this.getContracts(false, true)
}
this.getCategoryOptions();
this.getContracts();
},
destroyed() {
window.onfocus = null
@ -1979,6 +2008,7 @@ export default {
},
//
async getContracts(is_export, noloading = false) {
const res = await getContract({
page_size: this.select.pageSize,
page: this.select.pageIndex,
@ -2910,6 +2940,8 @@ export default {
//
this.updateTypeOptions()
// id-name
this.categoryIdNameMap = this.parseIdNameMap(res.map)
} catch (error) {
console.error('获取分类配置失败:', error)
this.$message.error('获取分类配置失败')
@ -3475,6 +3507,16 @@ export default {
} finally {
this.loading = false
}
},
// id-name
parseIdNameMap(list, map = {}) {
list.forEach(item => {
map[item.id] = item.name || item.value;
if (item.children && item.children.length) {
this.parseIdNameMap(item.children, map);
}
});
return map;
}
}
}

@ -166,6 +166,53 @@
<printFundApproval ref="printFundApproval" />
<detailPaymentRegistration ref="detailPaymentRegistration" @success="getFundLogs" />
<printPaymentForm ref="printPaymentForm" />
<el-dialog :visible.sync="showOtherPaymentsDialog" title="同一支出记录下的其他付款记录" width="742px">
<el-table
:data="otherPayments"
height="400"
border
:show-summary="true"
:summary-method="getOtherPaymentsSummary"
>
<el-table-column type="index" label="序号" width="60" align="center" />
<el-table-column prop="type" label="款项类型" width="120" align="center">
<template slot-scope="scope">
{{ paymentType[scope.row.type] || '未知' }}
</template>
</el-table-column>
<el-table-column prop="apply_money" label="申请金额" width="120" align="center">
<template slot-scope="scope">
{{ priceFormat(scope.row.apply_money) }}
</template>
</el-table-column>
<el-table-column prop="act_money" label="实际金额" width="120" align="center">
<template slot-scope="scope">
{{ priceFormat(scope.row.act_money) }}
</template>
</el-table-column>
<el-table-column prop="created_at" label="创建时间" width="160" align="center">
<template slot-scope="scope">
{{ parseTime(scope.row.created_at) }}
</template>
</el-table-column>
<el-table-column label="事后支付表格" width="120" align="center">
<template slot-scope="scope">
<el-button
v-if="scope.row.contract && (scope.row.contract.forms || scope.row.contract.before_forms)"
type="text"
size="small"
@click="showPostPaymentForm(scope.row)"
>查看</el-button>
<span v-else>-</span>
</template>
</el-table-column>
</el-table>
</el-dialog>
<el-dialog :visible.sync="postPaymentFormDialogVisible" title="事后支付表格" width="800px">
<div v-html="currentPostPaymentForm"></div>
</el-dialog>
</div>
</template>
@ -263,6 +310,8 @@ export default {
pageSize: 10,
is_auth: 1,
status: '',
showOtherPaymentsDialog: false,
otherPayments: [],
table: [
{
prop: 'summary',
@ -273,10 +322,16 @@ export default {
},
{
label: '项目名称',
minWidth: 250,
prop: 'contract.name',
minWidth: 200,
align: 'left',
fixed: 'left'
customFn: (row) => {
return (
<div style="cursor: pointer; color: #2d8cf0;" onClick={() => this.handleShowOtherPayments(row)}>
{row.contract?.name || '-'}
</div>
)
}
},
{
label: '付款申请金额(元)',
@ -381,7 +436,15 @@ export default {
else return '已审核'
}
}
]
],
paymentType: {
0: '预付款',
1: '进度款',
2: '结算款',
3: '质保金'
},
postPaymentFormDialogVisible: false,
currentPostPaymentForm: null
}
},
mounted() {
@ -398,6 +461,13 @@ export default {
this.getMoneyWay()
},
methods: {
parseTime(time) {
return parseTime(new Date(time), '{y}-{m}-{d}')
},
priceFormat(value) {
if (!value) return '0.00'
return Number(value).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,')
},
summaryMethod({ columns, data }) {
const fn = (prop) => this.selections.reduce((pre, cur) => pre + Number(cur[prop]), 0).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,')
return columns.map((column, index) => {
@ -640,6 +710,92 @@ export default {
console.error('打印错误:', err)
this.$Message.error('打印失败,请重试')
}
},
async handleShowOtherPayments(row) {
// row.contract_idID
const res = await getFundLog({ contract_id: row.contract_id, page: 1, page_size: 999 })
this.otherPayments = res.data
this.showOtherPaymentsDialog = true
},
showPostPaymentForm(row) {
// div forms
const tempDiv = document.createElement('div')
tempDiv.innerHTML = row.forms
this.replaceControls(tempDiv)
this.currentPostPaymentForm = tempDiv.innerHTML
this.postPaymentFormDialogVisible = true
},
replaceControls(element) {
const inputs = element.getElementsByTagName('input')
Array.from(inputs).forEach(input => {
if (input.type === 'checkbox' || input.type === 'radio') {
if (input.type === 'radio') {
const name = input.name
const checkedRadio = element.querySelector(`input[type="radio"][name="${name}"]:checked`)
if (checkedRadio) {
const td = checkedRadio.closest('td')
if (td) {
const hiddenDiv = td.querySelector('div[style*="display: none"]')
if (hiddenDiv) {
hiddenDiv.textContent = checkedRadio.value
}
}
}
}
return
}
const span = document.createElement('span')
let displayText = input.value || ''
if (input.type === 'date') {
displayText = input.value ? new Date(input.value).toLocaleDateString() : ''
}
span.textContent = displayText
const style = window.getComputedStyle(input)
span.style.cssText = style.cssText
;[
'width',
'height',
'padding',
'margin',
'font',
'fontSize',
'fontFamily',
'lineHeight',
'verticalAlign',
'border',
'background',
'color',
'boxSizing'
].forEach(key => {
span.style[key] = style[key]
})
span.style.whiteSpace = 'normal'
span.style.wordBreak = 'break-all'
input.parentNode.replaceChild(span, input)
})
},
getOtherPaymentsSummary({ columns, data }) {
const sums = []
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '合计'
return
}
if (column.property === 'apply_money' || column.property === 'act_money') {
const values = data.map(item => Number(item[column.property]))
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr)
if (!isNaN(value)) {
return prev + curr
} else {
return prev
}
}, 0).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,')
} else {
sums[index] = ''
}
})
return sums
}
}
}

@ -172,7 +172,7 @@
placeholder="请选择资金列支渠道"
@change="moneyWayChange"
>
<el-option v-for="item in planTypes" :value="item.id" :label="item.value" />
<el-option v-for="item in planTypes" :key="item.id" :value="item.id" :label="item.value" />
</el-select>
</div>
</div>
@ -181,9 +181,7 @@
<Input v-model="plansSelect.name" search enter-button=" " placeholder="搜索预算计划.." @on-search="getBudgets" />
<div class="contract-add-plan" style="min-width: 300px;">
<template v-if="paymentRegistrationForm.plan.length > 0">
<template v-for="item in paymentRegistrationForm.plan">
<Tag closable color="primary" @on-close="delPlan(item)">{{ item.label }}</Tag>
</template>
<Tag v-for="item in paymentRegistrationForm.plan" :key="item.plan_id" closable color="primary" @on-close="delPlan(item)">{{ item.label }}</Tag>
</template>
</div>
<xy-table
@ -225,7 +223,8 @@ import {
getBudget
} from '@/api/budget/budget'
import {
detailContract
detailContract,
editorContract
} from '@/api/contract/contract'
import {
Message
@ -491,6 +490,10 @@ export default {
this.payment.map(item => {
total += Number(item.act_money)
})
// 0
if (!this.contract.money || Number(this.contract.money) === 0) {
return 0
}
return ((total / this.contract.money) * 100).toFixed(2) || 0
},
@ -555,7 +558,13 @@ export default {
money_way_id: this.paymentRegistrationForm.moneyWay.toString(),
contract_plan_act_links: this.paymentRegistrationForm.plan,
is_end: this.paymentRegistrationForm.isLast ? 1 : 0
}).then(res => {
}).then(async res => {
//
await editorContract({
id: this.contract.id,
money_way_id: this.paymentRegistrationForm.moneyWay.toString(),
contract_plan_links: this.paymentRegistrationForm.plan
})
this.$emit('refresh')
this.isShow = false
Message({

Loading…
Cancel
Save