|
@ -103,11 +103,11 @@ |
|
|
:config-button="false" |
|
|
:config-button="false" |
|
|
:columns="[ |
|
|
:columns="[ |
|
|
{ name: 'endDate', label: '财报日期', format: Formater.dateOnly() }, |
|
|
{ name: 'endDate', label: '财报日期', format: Formater.dateOnly() }, |
|
|
{ name: 'type', label: '报表类型' }, |
|
|
{ name: 'type', label: '报表类型', format: Formater.dictionary(dictFinanceTypeCd) }, |
|
|
{ name: 'sort', label: '报表类别' }, |
|
|
{ name: 'sort', label: '报表类别', format: Formater.dictionary(dictFinanceSortTypeCd) }, |
|
|
{ name: 'auditedInd', label: '是否审计' }, |
|
|
{ name: 'auditedInd', label: '是否审计', format: Formater.dictionary(dictFinanceStatusCd) }, |
|
|
{ name: 'caliber', label: '报表口径' }, |
|
|
{ name: 'caliber', label: '报表口径', format: Formater.dictionary(dictCaliberCd) }, |
|
|
{ name: 'currency', label: '报表币种' }, |
|
|
{ name: 'currency', label: '报表币种', format: Formater.dictionary(dictCurrencyTypeCd) }, |
|
|
{ name: 'userNo', label: '经办人' }, |
|
|
{ name: 'userNo', label: '经办人' }, |
|
|
{ name: 'remarks', label: '备注' }, |
|
|
{ name: 'remarks', label: '备注' }, |
|
|
{ |
|
|
{ |
|
@ -148,7 +148,7 @@ |
|
|
<q-splitter v-model="state.finReportDetailSplitterModel" disable style="height: 100%"> |
|
|
<q-splitter v-model="state.finReportDetailSplitterModel" disable style="height: 100%"> |
|
|
<template #before> |
|
|
<template #before> |
|
|
<q-tabs v-model="state.finReportDetailTab" vertical indicator-color="amber" active-color="amber"> |
|
|
<q-tabs v-model="state.finReportDetailTab" vertical indicator-color="amber" active-color="amber"> |
|
|
<q-tab name="fz" icon="message" label="报表附注信息" /> |
|
|
<q-tab name="fz" icon="message" label="报表基本信息" /> |
|
|
<q-tab v-if="state.finReportType === FinanceReportType.QYL" name="qylzcfz" icon="currency_yen" label="企业类资产负债表" /> |
|
|
<q-tab v-if="state.finReportType === FinanceReportType.QYL" name="qylzcfz" icon="currency_yen" label="企业类资产负债表" /> |
|
|
<q-tab v-if="state.finReportType === FinanceReportType.QYL" name="qylxjl" icon="money" label="企业类现金流量表" /> |
|
|
<q-tab v-if="state.finReportType === FinanceReportType.QYL" name="qylxjl" icon="money" label="企业类现金流量表" /> |
|
|
<q-tab v-if="state.finReportType === FinanceReportType.QYL" name="qylsy" icon="remove_circle_outline" label="企业类损益表" /> |
|
|
<q-tab v-if="state.finReportType === FinanceReportType.QYL" name="qylsy" icon="remove_circle_outline" label="企业类损益表" /> |
|
@ -513,6 +513,7 @@ |
|
|
() => { |
|
|
() => { |
|
|
state.otherDone = true; |
|
|
state.otherDone = true; |
|
|
state.step = RatingStep.PJBG; |
|
|
state.step = RatingStep.PJBG; |
|
|
|
|
|
stepClick(RatingStep.PJBG); |
|
|
} |
|
|
} |
|
|
" |
|
|
" |
|
|
> |
|
|
> |
|
@ -663,8 +664,10 @@ |
|
|
<q-item-label>{{ dtl['INDEX_NAME'] }}</q-item-label> |
|
|
<q-item-label>{{ dtl['INDEX_NAME'] }}</q-item-label> |
|
|
<q-item-label caption> {{ dtl['INDEX_VALUE'] }} </q-item-label> |
|
|
<q-item-label caption> {{ dtl['INDEX_VALUE'] }} </q-item-label> |
|
|
</q-item-section> |
|
|
</q-item-section> |
|
|
<q-item-section side> |
|
|
<q-item-section v-if="!Tools.isEmpty(dtl['INDEX_SCORE'])" side> |
|
|
<q-chip :clickable="false" :ripple="false" color="green" text-color="white"> {{ dtl['INDEX_SCORE'] }} </q-chip> |
|
|
<q-chip :clickable="false" :ripple="false" color="green" text-color="white"> |
|
|
|
|
|
{{ Round(dtl['INDEX_SCORE'], 2) }} |
|
|
|
|
|
</q-chip> |
|
|
</q-item-section> |
|
|
</q-item-section> |
|
|
</q-item> |
|
|
</q-item> |
|
|
</template> |
|
|
</template> |
|
@ -691,8 +694,10 @@ |
|
|
<q-item-label>{{ dtl['INDEX_NAME'] }}</q-item-label> |
|
|
<q-item-label>{{ dtl['INDEX_NAME'] }}</q-item-label> |
|
|
<q-item-label caption> {{ dtl['TEXT'] }} </q-item-label> |
|
|
<q-item-label caption> {{ dtl['TEXT'] }} </q-item-label> |
|
|
</q-item-section> |
|
|
</q-item-section> |
|
|
<q-item-section side> |
|
|
<q-item-section v-if="!Tools.isEmpty(dtl['INDEX_SCORE'])" side> |
|
|
<q-chip :clickable="false" :ripple="false" color="green" text-color="white"> {{ dtl['INDEX_SCORE'] }} </q-chip> |
|
|
<q-chip :clickable="false" :ripple="false" color="green" text-color="white"> |
|
|
|
|
|
{{ Round(dtl['INDEX_SCORE'], 2) }} |
|
|
|
|
|
</q-chip> |
|
|
</q-item-section> |
|
|
</q-item-section> |
|
|
</q-item> |
|
|
</q-item> |
|
|
</template> |
|
|
</template> |
|
@ -705,7 +710,7 @@ |
|
|
<template #after> |
|
|
<template #after> |
|
|
<div> |
|
|
<div> |
|
|
<div class="text-center"> |
|
|
<div class="text-center"> |
|
|
<q-chip outline color="lime" text-color="white" :clickable="false" :ripple="false"> 评级调整项得分详情 </q-chip> |
|
|
<q-chip outline color="lime" text-color="white" :clickable="false" :ripple="false"> 评级调整项详情 </q-chip> |
|
|
</div> |
|
|
</div> |
|
|
<q-list v-if="state.reportAdjustScoreDtl" padding> |
|
|
<q-list v-if="state.reportAdjustScoreDtl" padding> |
|
|
<template v-for="(values, key, a) in state.reportAdjustScoreDtl" :key="a"> |
|
|
<template v-for="(values, key, a) in state.reportAdjustScoreDtl" :key="a"> |
|
@ -717,9 +722,6 @@ |
|
|
<q-item-label>{{ dtl['INDEX_NAME'] }}</q-item-label> |
|
|
<q-item-label>{{ dtl['INDEX_NAME'] }}</q-item-label> |
|
|
<q-item-label caption> {{ dtl['TEXT'] }} </q-item-label> |
|
|
<q-item-label caption> {{ dtl['TEXT'] }} </q-item-label> |
|
|
</q-item-section> |
|
|
</q-item-section> |
|
|
<q-item-section side> |
|
|
|
|
|
<q-chip :clickable="false" :ripple="false" color="green" text-color="white"> {{ dtl['INDEX_SCORE'] }} </q-chip> |
|
|
|
|
|
</q-item-section> |
|
|
|
|
|
</q-item> |
|
|
</q-item> |
|
|
</template> |
|
|
</template> |
|
|
<q-separator /> |
|
|
<q-separator /> |
|
@ -928,6 +930,7 @@ import { |
|
|
FinanceReportProjectType, |
|
|
FinanceReportProjectType, |
|
|
Round, |
|
|
Round, |
|
|
} from './CustRating.ts'; |
|
|
} from './CustRating.ts'; |
|
|
|
|
|
import RatingLevel from './RatingLevel.vue'; |
|
|
|
|
|
|
|
|
const $q = useQuasar(); |
|
|
const $q = useQuasar(); |
|
|
const gc = Environment.getConfigure(); |
|
|
const gc = Environment.getConfigure(); |
|
@ -1044,10 +1047,10 @@ const opFormat = (value, row) => { |
|
|
financeReportDetailDialogRef.value.show(); |
|
|
financeReportDetailDialogRef.value.show(); |
|
|
state.finReportFz = []; |
|
|
state.finReportFz = []; |
|
|
state.finReportFz.push({ label: '财务报表截至日期', value: row['endDate'] }); |
|
|
state.finReportFz.push({ label: '财务报表截至日期', value: row['endDate'] }); |
|
|
state.finReportFz.push({ label: '是否经过审计', value: row['auditedInd'] }); |
|
|
state.finReportFz.push({ label: '是否经过审计', value: row['auditedInd'], format: Formater.dictionary(dictFinanceStatusCd) }); |
|
|
state.finReportFz.push({ label: '财务报表类别', value: row['sort'] }); |
|
|
state.finReportFz.push({ label: '财务报表类别', value: row['sort'], format: Formater.dictionary(dictFinanceTypeCd) }); |
|
|
state.finReportFz.push({ label: '财务报表口径', value: row['caliber'] }); |
|
|
state.finReportFz.push({ label: '财务报表口径', value: row['caliber'], format: Formater.dictionary(dictCaliberCd) }); |
|
|
state.finReportFz.push({ label: '财务报表币种', value: row['currency'] }); |
|
|
state.finReportFz.push({ label: '财务报表币种', value: row['currency'], format: Formater.dictionary(dictCurrencyTypeCd) }); |
|
|
nextTick(() => { |
|
|
nextTick(() => { |
|
|
state.finReportDetailDialogContentHeight = financeReportDetailDialogRef.value.getContent().offsetHeight - 33; |
|
|
state.finReportDetailDialogContentHeight = financeReportDetailDialogRef.value.getContent().offsetHeight - 33; |
|
|
}); |
|
|
}); |
|
@ -1261,7 +1264,19 @@ const loadFirstResult = () => { |
|
|
state.qualitativeShowInfo.push({ label: '定量得分', value: Round(res.data.quanScore, 2) }); |
|
|
state.qualitativeShowInfo.push({ label: '定量得分', value: Round(res.data.quanScore, 2) }); |
|
|
state.qualitativeShowInfo.push({ label: '定性得分', value: Round(res.data.qualScore, 2) }); |
|
|
state.qualitativeShowInfo.push({ label: '定性得分', value: Round(res.data.qualScore, 2) }); |
|
|
state.qualitativeShowInfo.push({ label: '得分', value: Round(res.data.modelScore, 2) }); |
|
|
state.qualitativeShowInfo.push({ label: '得分', value: Round(res.data.modelScore, 2) }); |
|
|
state.qualitativeShowInfo.push({ label: '等级', value: res.data.modelLevel }); |
|
|
state.qualitativeShowInfo.push({ |
|
|
|
|
|
label: '等级', |
|
|
|
|
|
value: res.data.modelLevel, |
|
|
|
|
|
format: () => { |
|
|
|
|
|
return { |
|
|
|
|
|
componentType: RatingLevel, |
|
|
|
|
|
attrs: { |
|
|
|
|
|
level: res.data.modelLevel, |
|
|
|
|
|
dense: true, |
|
|
|
|
|
}, |
|
|
|
|
|
}; |
|
|
|
|
|
}, |
|
|
|
|
|
}); |
|
|
} |
|
|
} |
|
|
}) |
|
|
}) |
|
|
.catch((error) => { |
|
|
.catch((error) => { |
|
@ -1375,9 +1390,36 @@ const loadRatingOverturn = () => { |
|
|
state.otherInfo.push({ label: '定量得分', value: Round(res.data.quanScore, 2) }); |
|
|
state.otherInfo.push({ label: '定量得分', value: Round(res.data.quanScore, 2) }); |
|
|
state.otherInfo.push({ label: '定性得分', value: Round(res.data.qualScore, 2) }); |
|
|
state.otherInfo.push({ label: '定性得分', value: Round(res.data.qualScore, 2) }); |
|
|
state.otherInfo.push({ label: '模型得分', value: Round(res.data.modelScore, 2) }); |
|
|
state.otherInfo.push({ label: '模型得分', value: Round(res.data.modelScore, 2) }); |
|
|
state.otherInfo.push({ label: '模型等级', value: res.data.modelLevel }); |
|
|
state.otherInfo.push({ |
|
|
state.otherInfo.push({ label: '调整后等级', value: res.data.adjLevel }); |
|
|
label: '模型等级', |
|
|
state.otherInfo.push({ label: '准入建议', value: res.data.accessLevel }); |
|
|
value: res.data.modelLevel, |
|
|
|
|
|
format: () => { |
|
|
|
|
|
return { |
|
|
|
|
|
componentType: RatingLevel, |
|
|
|
|
|
attrs: { |
|
|
|
|
|
level: res.data.modelLevel, |
|
|
|
|
|
dense: true, |
|
|
|
|
|
}, |
|
|
|
|
|
}; |
|
|
|
|
|
}, |
|
|
|
|
|
}); |
|
|
|
|
|
state.otherInfo.push({ |
|
|
|
|
|
label: '调整后等级', |
|
|
|
|
|
value: res.data.adjLevel, |
|
|
|
|
|
format: () => { |
|
|
|
|
|
return { |
|
|
|
|
|
componentType: RatingLevel, |
|
|
|
|
|
attrs: { |
|
|
|
|
|
level: res.data.adjLevel, |
|
|
|
|
|
dense: true, |
|
|
|
|
|
}, |
|
|
|
|
|
}; |
|
|
|
|
|
}, |
|
|
|
|
|
}); |
|
|
|
|
|
state.otherInfo.push({ |
|
|
|
|
|
label: '准入建议', |
|
|
|
|
|
value: res.data.accessLevel, |
|
|
|
|
|
}); |
|
|
state.otherInfoAdjLevel = res.data.adjLevel; |
|
|
state.otherInfoAdjLevel = res.data.adjLevel; |
|
|
} |
|
|
} |
|
|
}) |
|
|
}) |
|
@ -1420,11 +1462,59 @@ const loadRatingReport = async () => { |
|
|
state.reportCustRatingInfo.push({ label: '定量得分', value: Round(resp.data.quanScore, 2) }); |
|
|
state.reportCustRatingInfo.push({ label: '定量得分', value: Round(resp.data.quanScore, 2) }); |
|
|
state.reportCustRatingInfo.push({ label: '定性得分', value: Round(resp.data.qualScore, 2) }); |
|
|
state.reportCustRatingInfo.push({ label: '定性得分', value: Round(resp.data.qualScore, 2) }); |
|
|
state.reportCustRatingInfo.push({ label: '模型得分', value: Round(resp.data.modelScore, 2) }); |
|
|
state.reportCustRatingInfo.push({ label: '模型得分', value: Round(resp.data.modelScore, 2) }); |
|
|
state.reportCustRatingInfo.push({ label: '模型级别', value: resp.data.modelLevel }); |
|
|
state.reportCustRatingInfo.push({ |
|
|
state.reportCustRatingInfo.push({ label: '调整项级别', value: resp.data.adjLevel }); |
|
|
label: '模型级别', |
|
|
state.reportCustRatingInfo.push({ label: '初始级别', value: resp.data.initLevel }); |
|
|
value: resp.data.modelLevel, |
|
|
|
|
|
format: () => { |
|
|
|
|
|
return { |
|
|
|
|
|
componentType: RatingLevel, |
|
|
|
|
|
attrs: { |
|
|
|
|
|
level: resp.data.modelLevel, |
|
|
|
|
|
dense: true, |
|
|
|
|
|
}, |
|
|
|
|
|
}; |
|
|
|
|
|
}, |
|
|
|
|
|
}); |
|
|
|
|
|
state.reportCustRatingInfo.push({ |
|
|
|
|
|
label: '调整项级别', |
|
|
|
|
|
value: resp.data.adjLevel, |
|
|
|
|
|
format: () => { |
|
|
|
|
|
return { |
|
|
|
|
|
componentType: RatingLevel, |
|
|
|
|
|
attrs: { |
|
|
|
|
|
level: resp.data.adjLevel, |
|
|
|
|
|
dense: true, |
|
|
|
|
|
}, |
|
|
|
|
|
}; |
|
|
|
|
|
}, |
|
|
|
|
|
}); |
|
|
|
|
|
state.reportCustRatingInfo.push({ |
|
|
|
|
|
label: '初始级别', |
|
|
|
|
|
value: resp.data.initLevel, |
|
|
|
|
|
format: () => { |
|
|
|
|
|
return { |
|
|
|
|
|
componentType: RatingLevel, |
|
|
|
|
|
attrs: { |
|
|
|
|
|
level: resp.data.initLevel, |
|
|
|
|
|
dense: true, |
|
|
|
|
|
}, |
|
|
|
|
|
}; |
|
|
|
|
|
}, |
|
|
|
|
|
}); |
|
|
state.reportCustRatingInfo.push({ label: '上一次建议级别', value: resp.data.spLevel }); |
|
|
state.reportCustRatingInfo.push({ label: '上一次建议级别', value: resp.data.spLevel }); |
|
|
state.reportCustRatingInfo.push({ label: '最终认定级别', value: resp.data.finalLevel }); |
|
|
state.reportCustRatingInfo.push({ |
|
|
|
|
|
label: '最终认定级别', |
|
|
|
|
|
value: resp.data.finalLevel, |
|
|
|
|
|
format: () => { |
|
|
|
|
|
return { |
|
|
|
|
|
componentType: RatingLevel, |
|
|
|
|
|
attrs: { |
|
|
|
|
|
level: resp.data.finalLevel, |
|
|
|
|
|
dense: true, |
|
|
|
|
|
}, |
|
|
|
|
|
}; |
|
|
|
|
|
}, |
|
|
|
|
|
}); |
|
|
state.reportCustRatingInfo.push({ label: '违约概率', value: resp.data.pd ? resp.data.pd + '%' : '' }); |
|
|
state.reportCustRatingInfo.push({ label: '违约概率', value: resp.data.pd ? resp.data.pd + '%' : '' }); |
|
|
state.reportCustRatingInfo.push({ label: '客户经理', value: resp.data.managerName }); |
|
|
state.reportCustRatingInfo.push({ label: '客户经理', value: resp.data.managerName }); |
|
|
state.reportCustRatingInfo.push({ label: '评级发起日期', value: resp.data.startTime }); |
|
|
state.reportCustRatingInfo.push({ label: '评级发起日期', value: resp.data.startTime }); |
|
@ -1614,18 +1704,39 @@ defineExpose({ |
|
|
hide, |
|
|
hide, |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
const dictOverturnType = await DictionaryTools.fetch('OVERTURN_TYPE'); |
|
|
const dictionaryArr = await DictionaryTools.fetch([ |
|
|
|
|
|
'OVERTURN_TYPE', |
|
|
|
|
|
'CustomerSizeCd', |
|
|
|
|
|
'REGISTERED_TYPE', |
|
|
|
|
|
'GOVER_FINANCE_TYPE', |
|
|
|
|
|
'GOVER_FINANCE_SIGN', |
|
|
|
|
|
'REGISTRATION_CD', |
|
|
|
|
|
'NATION_CD', |
|
|
|
|
|
'MEMBER_TYPE_CD', |
|
|
|
|
|
'FinanceTypeCd', |
|
|
|
|
|
'FinanceSortTypeCd', |
|
|
|
|
|
'FinanceStatusCd', |
|
|
|
|
|
'CaliberCd', |
|
|
|
|
|
'CurrencyTypeCd', |
|
|
|
|
|
]); |
|
|
|
|
|
const dictOverturnType = dictionaryArr['OVERTURN_TYPE']; |
|
|
const optionsOverturnType = Options.dictionary(dictOverturnType); |
|
|
const optionsOverturnType = Options.dictionary(dictOverturnType); |
|
|
const dictCustomerSize = await DictionaryTools.fetch('CustomerSizeCd'); |
|
|
const dictCustomerSize = dictionaryArr['CustomerSizeCd']; |
|
|
const dictRegisteredType = await DictionaryTools.fetch('REGISTERED_TYPE'); |
|
|
const dictRegisteredType = dictionaryArr['REGISTERED_TYPE']; |
|
|
const dictGoverFinanceType = await DictionaryTools.fetch('GOVER_FINANCE_TYPE'); |
|
|
const dictGoverFinanceType = dictionaryArr['GOVER_FINANCE_TYPE']; |
|
|
const dictGoverFinanceSign = await DictionaryTools.fetch('GOVER_FINANCE_SIGN'); |
|
|
const dictGoverFinanceSign = dictionaryArr['GOVER_FINANCE_SIGN']; |
|
|
const dictRegistrationCd = await DictionaryTools.fetch('REGISTRATION_CD'); |
|
|
const dictRegistrationCd = dictionaryArr['REGISTRATION_CD']; |
|
|
const dictNationCd = await DictionaryTools.fetch('NATION_CD'); |
|
|
const dictNationCd = dictionaryArr['NATION_CD']; |
|
|
const dictMemberTypeCd = await DictionaryTools.fetch('MEMBER_TYPE_CD'); |
|
|
const dictMemberTypeCd = dictionaryArr['MEMBER_TYPE_CD']; |
|
|
|
|
|
const dictFinanceTypeCd = dictionaryArr['FinanceTypeCd']; |
|
|
|
|
|
const dictFinanceSortTypeCd = dictionaryArr['FinanceSortTypeCd']; |
|
|
|
|
|
const dictFinanceStatusCd = dictionaryArr['FinanceStatusCd']; |
|
|
|
|
|
const dictCaliberCd = dictionaryArr['CaliberCd']; |
|
|
|
|
|
const dictCurrencyTypeCd = dictionaryArr['CurrencyTypeCd']; |
|
|
|
|
|
|
|
|
const RatingStatusEnum = await EnumTools.fetch('irbs.cust.rating.enums.RatingStatus'); |
|
|
const enumArr = await EnumTools.fetch(['irbs.cust.rating.enums.RatingStatus', 'irbs.cust.rating.enums.RatingProcessStatus']); |
|
|
const RatingProcessStatusEnum = await EnumTools.fetch('irbs.cust.rating.enums.RatingProcessStatus'); |
|
|
const RatingStatusEnum = enumArr['irbs.cust.rating.enums.RatingStatus']; |
|
|
|
|
|
const RatingProcessStatusEnum = enumArr['irbs.cust.rating.enums.RatingProcessStatus']; |
|
|
</script> |
|
|
</script> |
|
|
|
|
|
|
|
|
<style scoped lang="css"> |
|
|
<style scoped lang="css"> |
|
|