feat(contract-manage): 将付款比例设置提示改为tooltip展示
- 付款比例设置区块标题后添加问号图标悬浮提示,替换原红色文字说明 - 编辑弹窗、详情弹窗、合同变更页统一使用el-tooltip + el-icon-question-filled组件 - 移除contract-manage.vue中原有.red tip提示及相应样式 feat(temporary-credit-limit): 优化临时额度申请界面及校验规则 - 增加新增/编辑/查看临时额度申请标题,覆盖默认菜单注入标题 - 所有表单字段统一设置placeholder为“请输入/请选择”无字段名 - 搜索栏占位符统一为“请输入/请选择”,与其他模块一致 - 临时额度申请有效期至字段增加“必须晚于当前日期”日期校验规则 - 增添futureDateRule通用校验规则,支持多种日期格式即时触发验证 feat(project-apply): 新增资金使用风险快速筛选及风险提示 - 项目申请列表增加资金使用风险列,显示高风险/中风险标签 - 新增资金使用风险快速筛选区,可点击标签筛选项目风险等级 - 提供资金使用风险阈值配置,支持中风险≥80%、高风险≥90% - 调整页面样式及交互,优化风险筛选体验 - 新增后端接口getFundRiskStats,用于获取风险统计数据并实时刷新
This commit is contained in:
@@ -63,7 +63,12 @@
|
||||
</section>
|
||||
|
||||
<section class="change-section">
|
||||
<div class="dialog-section-title">付款比例设置</div>
|
||||
<div class="dialog-section-title">
|
||||
付款比例设置
|
||||
<el-tooltip content="非必填;配置付款比例时,合计必须等于100%。" placement="top">
|
||||
<el-icon style="margin-left: 4px; color: #909399; cursor: pointer"><el-icon-question-filled /></el-icon>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
<el-table :data="paymentRatioRows" border class="change-table">
|
||||
<el-table-column type="index" label="序号" width="70" />
|
||||
<el-table-column prop="paymentTerm" label="付款笔数" min-width="180" />
|
||||
|
||||
@@ -425,10 +425,14 @@
|
||||
|
||||
<section class="contract-manage-form__section contract-manage-form__section--panel">
|
||||
<div class="contract-manage-form__section-head">
|
||||
<div class="dialog-section-title">付款比例设置</div>
|
||||
<div class="dialog-section-title">
|
||||
付款比例设置
|
||||
<el-tooltip content="非必填;配置付款比例时,合计必须等于100%。" placement="top">
|
||||
<el-icon style="margin-left: 4px; color: #909399; cursor: pointer"><el-icon-question-filled /></el-icon>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
<el-button type="primary" plain @click="addPaymentRatio">添加</el-button>
|
||||
</div>
|
||||
<p class="contract-manage-form__tip">非必填;配置付款比例时,合计必须等于100%。</p>
|
||||
<el-table :data="paymentRatioRows" border>
|
||||
<el-table-column type="index" label="序号" width="80" align="center" />
|
||||
<el-table-column prop="paymentTerm" label="付款笔数" min-width="180" align="center" />
|
||||
@@ -740,7 +744,12 @@
|
||||
</section>
|
||||
|
||||
<section class="contract-manage-form__section contract-manage-form__section--panel">
|
||||
<div class="dialog-section-title">付款比例设置</div>
|
||||
<div class="dialog-section-title">
|
||||
付款比例设置
|
||||
<el-tooltip content="非必填;配置付款比例时,合计必须等于100%。" placement="top">
|
||||
<el-icon style="margin-left: 4px; color: #909399; cursor: pointer"><el-icon-question-filled /></el-icon>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
<el-table :data="detailPaymentRatioRows" border>
|
||||
<el-table-column type="index" label="序号" width="80" align="center" />
|
||||
<el-table-column prop="paymentTerm" label="付款笔数" min-width="180" align="center" />
|
||||
@@ -2892,8 +2901,4 @@ export default {
|
||||
white-space: normal;
|
||||
line-height: 1.2;
|
||||
}
|
||||
.contract-manage-form__tip {
|
||||
color: #ff0000 !important;
|
||||
font-size: 12px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -58,6 +58,40 @@
|
||||
{{ displayStatus(row, 'approvalStatus') }}
|
||||
</template>
|
||||
|
||||
<template #header>
|
||||
<div class="project-apply-page__risk-search">
|
||||
<span class="project-apply-page__risk-label">
|
||||
资金使用风险
|
||||
<el-tooltip placement="top" effect="dark">
|
||||
<template #content>
|
||||
<div>中风险:项目资金额度使用率 ≥ 80%</div>
|
||||
<div>高风险:项目资金额度使用率 ≥ 90%</div>
|
||||
<div>使用率 = 已使用资金 / 项目资金使用额度 × 100%</div>
|
||||
</template>
|
||||
<i class="el-icon-question project-apply-page__risk-help" />
|
||||
</el-tooltip>
|
||||
</span>
|
||||
<el-check-tag
|
||||
v-for="item in fundRiskTagOptions"
|
||||
:key="item.value"
|
||||
:checked="fundRiskScope === item.value"
|
||||
@change="changeFundRiskScope(item.value)"
|
||||
>
|
||||
{{ item.label }}({{ fundRiskStats[item.statKey] || 0 }})
|
||||
</el-check-tag>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template #fundUseRisk="{ row }">
|
||||
<el-tag v-if="row.fundUseRisk === 'high'" type="danger">
|
||||
{{ row.fundUseRiskName || '高风险' }}
|
||||
</el-tag>
|
||||
<el-tag v-else-if="row.fundUseRisk === 'medium'" type="warning">
|
||||
{{ row.fundUseRiskName || '中风险' }}
|
||||
</el-tag>
|
||||
<span v-else class="project-apply-page__risk-none">-</span>
|
||||
</template>
|
||||
|
||||
<template #menu="{ row, index }">
|
||||
<el-link
|
||||
type="primary"
|
||||
@@ -975,6 +1009,12 @@ export default {
|
||||
data: [],
|
||||
query: {},
|
||||
allDept: 0,
|
||||
fundRiskScope: '',
|
||||
fundRiskStats: { high: 0, medium: 0, none: 0 },
|
||||
fundRiskTagOptions: [
|
||||
{ label: '高风险', value: 'high', statKey: 'high' },
|
||||
{ label: '中风险', value: 'medium', statKey: 'medium' },
|
||||
],
|
||||
page: {
|
||||
pageSize: 10,
|
||||
pageSizes: [10, 20, 50, 100],
|
||||
@@ -1342,12 +1382,14 @@ export default {
|
||||
...params,
|
||||
...this.query,
|
||||
allDept: this.allDept,
|
||||
...(this.fundRiskScope ? { fundUseRisk: this.fundRiskScope } : {}),
|
||||
})
|
||||
.then(res => {
|
||||
const result = res.data.data || {};
|
||||
this.page.total = result.total || 0;
|
||||
this.data = result.records || [];
|
||||
this.selectionClear();
|
||||
this.refreshFundRiskStats({ ...params, ...this.query, allDept: this.allDept });
|
||||
})
|
||||
.finally(() => {
|
||||
this.loading = false;
|
||||
@@ -1355,6 +1397,7 @@ export default {
|
||||
},
|
||||
searchReset() {
|
||||
this.query = {};
|
||||
this.fundRiskScope = '';
|
||||
this.page.currentPage = 1;
|
||||
this.onLoad(this.page);
|
||||
},
|
||||
@@ -1364,6 +1407,18 @@ export default {
|
||||
this.onLoad(this.page, params);
|
||||
done();
|
||||
},
|
||||
// 切换「资金使用风险」快速筛选:再次点击已选中项则取消筛选
|
||||
changeFundRiskScope(value) {
|
||||
this.fundRiskScope = this.fundRiskScope === value ? '' : value;
|
||||
this.page.currentPage = 1;
|
||||
this.onLoad(this.page, this.query);
|
||||
},
|
||||
refreshFundRiskStats(params) {
|
||||
this.api.getFundRiskStats(params).then(res => {
|
||||
const stats = res.data?.data || {};
|
||||
this.fundRiskStats = { ...this.fundRiskStats, ...stats };
|
||||
});
|
||||
},
|
||||
selectionChange(list) {
|
||||
this.selectionList = list;
|
||||
},
|
||||
@@ -2474,8 +2529,40 @@ export default {
|
||||
.project-apply-page-form {
|
||||
min-height: 100%;
|
||||
margin-bottom: 60px;
|
||||
//padding: 20px 24px 92px;
|
||||
//background: #f5f6fa;
|
||||
}
|
||||
|
||||
.project-apply-page {
|
||||
&__risk-search {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
margin-top: 8px;
|
||||
margin-bottom: 16px;
|
||||
|
||||
:deep(.el-check-tag) {
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
&__risk-label {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
color: #606266;
|
||||
font-weight: 600;
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
&__risk-help {
|
||||
margin-left: 4px;
|
||||
color: #a8abb2;
|
||||
cursor: help;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
&__risk-none {
|
||||
color: #c0c4cc;
|
||||
}
|
||||
}
|
||||
|
||||
.project-apply-dialog__footer {
|
||||
|
||||
@@ -50,11 +50,13 @@
|
||||
</el-tag>
|
||||
</template>
|
||||
|
||||
<template #projectName-label>项目额度信息</template>
|
||||
|
||||
<template #projectName-form>
|
||||
<el-select
|
||||
v-model="selectedProjectId"
|
||||
class="temporary-credit-limit-page__field"
|
||||
placeholder="请选择项目"
|
||||
placeholder="请选择"
|
||||
filterable
|
||||
clearable
|
||||
:loading="projectLoading"
|
||||
@@ -75,7 +77,7 @@
|
||||
<el-input
|
||||
v-model="form.applyLimit"
|
||||
class="temporary-credit-limit-page__field"
|
||||
placeholder="请输入申请临时额度"
|
||||
placeholder="请输入"
|
||||
:disabled="dialogReadonly"
|
||||
@input="handleAmountInput"
|
||||
/>
|
||||
@@ -822,7 +824,7 @@ export default {
|
||||
.el-form-item__label {
|
||||
height: auto !important;
|
||||
line-height: 18px;
|
||||
padding-top: 7px; // 视觉补偿:让单行 label 仍接近 input 中线
|
||||
//padding-top: 7px; // 视觉补偿:让单行 label 仍接近 input 中线
|
||||
}
|
||||
|
||||
// 强制必填星号垂直居中于行盒,与第一行汉字字符中心同基线(关键)
|
||||
@@ -841,4 +843,8 @@ export default {
|
||||
.el-form-item--default .el-form-item__label {
|
||||
height: auto !important;
|
||||
}
|
||||
.el-dialog .avue-form{
|
||||
padding: 16px 16px 4px !important;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user