style(billing-plan-editor): 使用 SectionCard 包裹计费方案编辑区块

- 引入 SectionCard 组件包裹计费方案显示和编辑区域
- 为默认方案信息添加带提示的 Info 图标和 Tooltip
- 优化模板缩进和结构,提升可读性

feat(contract-manage): 优化合同管理搜索和操作栏体验

- 允许签约类型字段作为搜索条件且支持排序和提示
- 将签约类型从快捷搜索区移动到标准搜索表单中
- 废除冗余的 contractSignType 状态,使用表单绑定自动处理
- 调整搜索栏快捷筛选区域顺序,实现与按钮组的视觉统一

fix(contract-manage): 修正底部操作栏文案及按钮显示逻辑

- 底部操作栏将“关闭”文案修改为“取消”,符合统一规范
- 草稿编辑页底部按钮增加[暂存/提交临时/提交正式],一致新增页操作
- 按钮样式调整,采用右侧对齐并使用按键间距12px替代gap

style(contract-manage-change): 统一变更页底部操作栏样式和交互

- 底部操作栏使用固定悬浮布局,避免内容被遮挡
- 调整按钮顺序为[取消][提交],并修改“关闭”为“取消”
- 增加统一的按钮间距与操作栏背景和阴影样式
- 为页面容器添加底部内边距,保障悬浮栏空间

style(contract-manage): 修复“合同文件”标题样式加粗问题

- 补充 scoped 样式,利用 :deep 影响子组件中标题的字体加粗和颜色

fix(customer-archive): 调整文本行高以优化显示效果

- 将内容文本的行高从18px调整为16px,提升视觉紧凑度

style(customer-archive): 调整必填项标签布局

- 删除因padding造成的标签视觉错位,确保label与控件垂直居中对齐
This commit is contained in:
2026-08-28 14:56:37 +08:00
parent 704c3093d7
commit 99d6284a58
6 changed files with 170 additions and 93 deletions
+32 -22
View File
@@ -33,16 +33,7 @@
</template>
<template #search-menu>
<div v-show="searchExpanded" class="contract-manage-page__expiry-search">
<span>签约类型</span>
<el-select v-model="contractSignType" clearable placeholder="请选择">
<el-option
v-for="item in signTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<div class="contract-manage-page__expiry-search">
<el-check-tag
v-for="item in expiryTagOptions"
:key="item.value"
@@ -55,7 +46,7 @@
</template>
<template #contractName="{ row }">
<el-link v-if="row.contractName" type="primary" @click.stop="openDetail(row)">
<el-link v-if="row.contractName" type="primary" class="contract-name-cell" @click.stop="openDetail(row)">
{{ row.contractName }}
</el-link>
<span v-else>-</span>
@@ -492,8 +483,8 @@
</el-form>
<div class="contract-manage-page__footer">
<el-button @click="closeForm">关闭</el-button>
<template v-if="formMode === 'add'">
<el-button @click="closeForm">取消</el-button>
<template v-if="formMode === 'add' || isDraftEdit">
<el-button
type="primary"
plain
@@ -1111,7 +1102,6 @@ export default {
page: { currentPage: 1, pageSize: 10, pageSizes: [10, 20, 50, 100], total: 0 },
selectionList: [],
searchExpanded: false,
contractSignType: '',
contractExpiryScope: '',
contractExpiryStats: { all: 0, within30: 0, within90: 0, over90: 0, expired: 0 },
expiryTagOptions: [
@@ -1215,6 +1205,10 @@ export default {
formMode() {
return this.$route.query.mode === 'edit' ? 'edit' : 'add';
},
// 草稿(approvalStatus=draft)编辑页:按钮与新增页一致(暂存/提交临时/提交正式)
isDraftEdit() {
return this.formMode === 'edit' && this.form.approvalStatus === 'draft';
},
formPageTitle() {
return this.$route.query.name || `${this.formMode === 'edit' ? '编辑' : '新增'}合同管理`;
},
@@ -1397,7 +1391,6 @@ export default {
const query = this.normalizeSearch({
...params,
...this.query,
...(this.contractSignType ? { signType: this.contractSignType } : {}),
...(this.contractExpiryScope ? { expireScope: this.contractExpiryScope } : {}),
});
this.api
@@ -1421,7 +1414,6 @@ export default {
},
searchReset() {
this.query = {};
this.contractSignType = '';
this.contractExpiryScope = '';
this.page.currentPage = 1;
this.onLoad(this.page);
@@ -2103,11 +2095,13 @@ export default {
align-items: center;
flex-wrap: wrap;
gap: 8px;
padding-top: 8px;
margin-right: 8px;
}
.el-select {
width: 180px;
}
// 将 #search-menu slot 容器(即"时间段快捷筛选"排到查询 / 重置 / 收起之前
// .avue-form__menu 本身就是 flex + flex-end,整组内容自然靠右,无需额外推挤
:deep(.avue-crud__search .avue-form__menu > .contract-manage-page__expiry-search) {
order: -1;
}
&__footer {
@@ -2119,13 +2113,17 @@ export default {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 8px;
min-height: 64px;
box-sizing: border-box;
padding: 12px 24px;
background: #fff;
border-top: 1px solid #eff1f7;
box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.06);
// 统一 12px 间距,与全站底部操作栏(去 gap,由相邻按钮 margin 提供)一致
.el-button + .el-button {
margin-left: 12px;
}
}
&__flow {
@@ -2144,6 +2142,17 @@ export default {
gap: 8px;
}
// 搜索区域白底卡片包裹
:deep(.avue-crud__search) {
background-color: #fff;
border-radius: 6px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
:deep(.avue-crud__search:not(.el-card)) {
padding: 12px 12px 4px;
}
&--form {
min-height: 100%;
padding-bottom: 72px;
@@ -2180,7 +2189,8 @@ export default {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
> .dialog-section-title {
> .dialog-section-title,
:deep(.dialog-section-title) {
margin-bottom: 20px;
color: #303133;
font-size: 16px;