b6fed6892a
- 新增复用 mixin organization-search.js,封装树形组织搜索功能,自动识别不同架构 - 替换合同管理、运输能力(司机/车辆/船舶)、费用模块的所属组织搜索使用树形下拉组件 - 将自定义搜索表单中所属组织 input 替换为 el-tree-select,支持树节点选中并写回名称 - 防止不同页面间组织数据相互覆盖,mixin 内部树数据命名为 organizationTreeOptions - 修复项目补录页面业务部门错用全宽样式,恢复半宽显示,调整注释避免误读 - 各相关页面组件中引入并使用 mixin,调用接口加载组织树数据,保障搜索功能一致性
112 lines
3.4 KiB
Vue
112 lines
3.4 KiB
Vue
<template>
|
|
<section class="bill-payment-search">
|
|
<el-form :model="query" label-position="right" label-width="88px" @submit.prevent>
|
|
<div class="bill-payment-search__grid">
|
|
<el-form-item label="单据号">
|
|
<el-input v-model="query.paymentNo" clearable placeholder="请输入" />
|
|
</el-form-item>
|
|
<el-form-item label="使用部门">
|
|
<el-tree-select
|
|
:model-value="query.deptName"
|
|
:data="organizationTreeOptions"
|
|
node-key="id"
|
|
check-strictly
|
|
filterable
|
|
clearable
|
|
render-after-expand
|
|
style="width: 100%"
|
|
placeholder="请选择 所属组织"
|
|
:props="{ label: 'label', value: 'id', children: 'children' }"
|
|
@update:model-value="val => { query.deptName = findOrgById(val)?.rawLabel || val }"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item label="付款日期">
|
|
<el-date-picker
|
|
v-model="query.paymentDateRange"
|
|
type="daterange"
|
|
unlink-panels
|
|
clearable
|
|
value-format="YYYY-MM-DD"
|
|
range-separator="~"
|
|
start-placeholder="年/月/日"
|
|
end-placeholder="年/月/日"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item label="单据状态">
|
|
<el-select v-model="query.approvalStatus" clearable placeholder="请选择">
|
|
<el-option
|
|
v-for="item in approvalStatusOptions"
|
|
:key="item.value"
|
|
:label="item.label"
|
|
:value="item.value"
|
|
/>
|
|
</el-select>
|
|
</el-form-item>
|
|
</div>
|
|
<div class="bill-payment-search__actions">
|
|
<el-button type="primary" :loading="loading" @click="$emit('search')">查询</el-button>
|
|
<el-button @click="$emit('reset')">重置</el-button>
|
|
<el-tooltip :content="expanded ? '折叠' : '展开'" placement="top">
|
|
<el-button text @click="expanded = !expanded">
|
|
<el-icon><component :is="expanded ? ArrowUp : ArrowDown" /></el-icon>
|
|
</el-button>
|
|
</el-tooltip>
|
|
</div>
|
|
</el-form>
|
|
</section>
|
|
</template>
|
|
|
|
<script>
|
|
import { ArrowDown, ArrowUp } from '@element-plus/icons-vue';
|
|
import { approvalStatusOptions } from '@/api/payment/billPayment';
|
|
import organizationSearch from '@/mixins/organization-search';
|
|
|
|
export default {
|
|
name: 'BillPaymentSearch',
|
|
mixins: [organizationSearch],
|
|
props: {
|
|
query: { type: Object, required: true },
|
|
loading: { type: Boolean, default: false },
|
|
},
|
|
emits: ['search', 'reset'],
|
|
data() {
|
|
return { ArrowDown, ArrowUp, expanded: false, approvalStatusOptions };
|
|
},
|
|
mounted() {
|
|
this.loadOrganizationOptions();
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.bill-payment-search {
|
|
padding: 12px 12px 4px;
|
|
background: #fff;
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
|
|
}
|
|
.bill-payment-search__grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
gap: 8px 24px;
|
|
}
|
|
.bill-payment-search :deep(.el-form-item) {
|
|
margin-bottom: 8px;
|
|
}
|
|
.bill-payment-search :deep(.el-input),
|
|
.bill-payment-search :deep(.el-select),
|
|
.bill-payment-search :deep(.el-date-editor) {
|
|
width: 100%;
|
|
}
|
|
.bill-payment-search__actions {
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
gap: 8px;
|
|
margin-bottom: 8px;
|
|
}
|
|
@media (max-width: 1200px) {
|
|
.bill-payment-search__grid {
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
}
|
|
}
|
|
</style>
|