大写金额

master
lion 2 days ago
parent f645540906
commit b21278dfb6

@ -287,17 +287,20 @@ export function numberToChinese(num) {
for (let i = 0; i < groups.length; i++) {
const section = groups[i]
if (section === 0) {
if (result) needZero = true
if (groups.slice(i + 1).some(g => g > 0)) {
needZero = true
}
continue
}
const sectionStr = convertSection(section)
let prefix = sectionStr + bigUnits[i]
if (needZero) {
const prefix = sectionStr + bigUnits[i]
if (needZero && result) {
result = prefix + '零' + result
needZero = false
} else {
const lower = groups.slice(0, i).reduce((sum, g, idx) => sum + g * Math.pow(10000, idx), 0)
const padZero = i > 0 && lower > 0 && section < 1000
// 低位段不足千位,或高位段整百/整千结尾且低位非空时,需补「零」
const padZero = i > 0 && lower > 0 && (lower < 1000 || (section >= 100 && section % 100 === 0))
result = prefix + (padZero ? '零' : '') + result
}
}

@ -35,7 +35,7 @@
<!-- Post-payment Form -->
<div v-else-if="currentForm === 'post'" ref="printtable" class="payment-form">
<!-- 财务审核表内容放到事后支付表头部 -->
<!-- 财务审核表内容放到事后支付表头部仅预览不参与保存/打印 -->
<table class="finance-review-table no-print">
<tr>
<th colspan="2" class="finance-header-row">合同信息</th>
@ -68,7 +68,7 @@
<td colspan="2">{{ fundLog && fundLog.remark || '-' }}</td>
</tr>
</table>
<div v-if="getForms" :key="formsRenderKey" v-html="getForms" />
<div v-if="getForms" ref="formsContent" :key="formsRenderKey" v-html="getForms" />
<div v-else class="no-form-message">暂无事后支付表格内容</div>
</div>
</div>
@ -182,6 +182,9 @@ export default {
try {
this.fundLog = null
const res = await detailFundLog({ id })
if (res && res.forms) {
res.forms = this.stripFinanceReviewTable(res.forms)
}
this.fundLog = res
this.formsRenderKey += 1
} catch (error) {
@ -190,6 +193,17 @@ export default {
throw error
}
},
/** 移除 forms 中误保存的合同信息表(历史数据兼容) */
stripFinanceReviewTable(html) {
if (!html || typeof html !== 'string') return html
const wrapper = document.createElement('div')
wrapper.innerHTML = html
wrapper.querySelectorAll('.finance-review-table').forEach(el => el.remove())
return wrapper.innerHTML
},
getFormContentDom() {
return this.$refs.formsContent || this.$refs.printtable
},
handleCancel() {
this.isShow = false
},
@ -316,7 +330,7 @@ export default {
this.syncAllUppercase(dom)
},
syncFormDomToHtml() {
const dom = this.$refs.printtable
const dom = this.getFormContentDom()
if (!dom || !this.fundLog) return
const templateFields = this.fundLog.other_data
const inputs = dom.querySelectorAll('input, select, textarea')
@ -351,13 +365,13 @@ export default {
input.setAttribute('value', input.value)
}
})
this.fundLog.forms = dom.innerHTML
this.fundLog.forms = this.stripFinanceReviewTable(dom.innerHTML)
},
async syncAndSave() {
if (!this.fundLog || !this.fundLog.id) {
throw new Error('缺少付款登记数据')
}
const dom = this.$refs.printtable
const dom = this.getFormContentDom()
if (dom) {
this.syncAllUppercase(dom)
this.syncFormDomToHtml()
@ -918,20 +932,23 @@ export default {
},
async print() {
try {
const sourceDom = this.getFormContentDom()
if (!sourceDom) {
this.$Message.error('暂无可打印内容')
return
}
const tempContainer = document.createElement('div')
tempContainer.style.position = 'absolute'
tempContainer.style.left = '-9999px'
tempContainer.style.top = '-9999px'
document.body.appendChild(tempContainer)
const originalContent = this.$refs['printtable'].cloneNode(true)
const originalContent = sourceDom.cloneNode(true)
tempContainer.appendChild(originalContent)
//
const financeTable = tempContainer.querySelector('.finance-review-table')
if (financeTable) {
financeTable.remove()
}
//
tempContainer.querySelectorAll('.finance-review-table').forEach(el => el.remove())
this.replaceControls(tempContainer)
@ -958,8 +975,9 @@ export default {
return Number(val).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,')
},
printHtml() {
// HTML
const dom = this.$refs.printtable
// /
const formsDom = this.getFormContentDom()
const dom = formsDom || this.$refs.printtable
if (dom) {
this.syncAllUppercase(dom)
//
@ -1019,15 +1037,12 @@ export default {
})
}
// 使HTML
// 使HTML
const printNode = document.createElement('div')
printNode.innerHTML = dom.innerHTML
printNode.innerHTML = dom ? dom.innerHTML : ''
//
const financeTable = printNode.querySelector('.finance-review-table')
if (financeTable) {
financeTable.remove()
}
//
printNode.querySelectorAll('.finance-review-table').forEach(el => el.remove())
//
this.replaceControls(printNode)

Loading…
Cancel
Save