This commit is contained in:
guochunsi
2026-02-25 10:38:40 +08:00
parent 64558dc496
commit 959f913927
2 changed files with 117 additions and 143 deletions

View File

@@ -80,7 +80,6 @@
display: flex; display: flex;
align-items: center; align-items: center;
flex-wrap: wrap; flex-wrap: wrap;
gap: 10px;
} }
.header-right { .header-right {

View File

@@ -1,120 +1,126 @@
<template> <template>
<div class="titlerelation-page"> <div class="page-cards">
<div class="page-wrapper"> <div class="page-wrapper">
<!-- 内容区最上搜索其次标题+按钮再下方表格 --> <!-- 筛选卡片 -->
<div class="content-block"> <el-card v-show="showSearch" class="search-card" shadow="never">
<!-- 最上搜索区 --> <search-form
<div v-show="showSearch" class="content-block__filter"> :model="search"
<search-form ref="searchFormRef"
:model="search" :show-filter-title="false"
ref="searchFormRef" @keyup-enter="handleFilter"
@keyup-enter="handleFilter" >
> <template #default="{ visible }">
<template #default="{ visible }"> <template v-if="visible">
<template v-if="visible"> <el-form-item label="姓名" prop="realName">
<el-form-item label="姓名" prop="realName"> <el-input
<el-input v-model="search.realName"
v-model="search.realName" clearable
clearable placeholder="请输入姓名"
placeholder="请输入姓名" class="filter-input"
class="filter-input" />
</el-form-item>
<el-form-item label="工号" prop="teacherNo">
<el-input
v-model="search.teacherNo"
clearable
placeholder="请输入工号"
class="filter-input"
/>
</el-form-item>
<el-form-item label="审核状态" prop="state">
<el-select
v-model="search.state"
clearable
placeholder="请选择审核状态"
class="filter-select"
>
<el-option
v-for="item in professionalState"
:key="item.value"
:label="item.label"
:value="item.value"
/> />
</el-form-item> </el-select>
<el-form-item label="工号" prop="teacherNo"> </el-form-item>
<el-input <el-form-item label="职称" prop="professionalTitleConfigId">
v-model="search.teacherNo" <el-select
clearable v-model="search.professionalTitleConfigId"
placeholder="请输入工号" clearable
class="filter-input" filterable
placeholder="请选择职称"
class="filter-select"
>
<el-option
v-for="item in professionalTitleList"
:key="item.id"
:label="item.professionalTitle"
:value="item.id"
/> />
</el-form-item> </el-select>
<el-form-item label="审核状态" prop="state"> </el-form-item>
<el-select <el-form-item label="专业技术职务" prop="majorStation">
v-model="search.state" <el-select
clearable v-model="search.majorStation"
placeholder="请选择审核状态" clearable
class="filter-select" filterable
> placeholder="请选择专业技术职务"
<el-option class="filter-select"
v-for="item in professionalState" >
:key="item.value" <el-option
:label="item.label" v-for="item in majorStationList"
:value="item.value" :key="item.id"
/> :label="item.majorStationName"
</el-select> :value="item.id"
</el-form-item> />
<el-form-item label="职称" prop="professionalTitleConfigId"> </el-select>
<el-select
v-model="search.professionalTitleConfigId"
clearable
filterable
placeholder="请选择职称"
class="filter-select"
>
<el-option
v-for="item in professionalTitleList"
:key="item.id"
:label="item.professionalTitle"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="专业技术职务" prop="majorStation">
<el-select
v-model="search.majorStation"
clearable
filterable
placeholder="请选择专业技术职务"
class="filter-select"
>
<el-option
v-for="item in majorStationList"
:key="item.id"
:label="item.majorStationName"
:value="item.id"
/>
</el-select>
</el-form-item>
</template>
</template>
<template #actions>
<el-form-item>
<el-button type="primary" @click="handleFilter" icon="Search">查询</el-button>
<el-button @click="resetQuery" icon="Refresh">重置</el-button>
</el-form-item> </el-form-item>
</template> </template>
</search-form> </template>
</div> <template #actions>
<el-form-item>
<el-button type="primary" @click="handleFilter" icon="Search">查询</el-button>
<el-button @click="resetQuery" icon="Refresh">重置</el-button>
</el-form-item>
</template>
</search-form>
</el-card>
<!-- 其次左侧按钮右侧 RightToolbar --> <!-- 列表内容卡片 -->
<div class="content-block__header"> <el-card class="content-card" shadow="never">
<div class="header-actions"> <template #header>
<div class="action-group"> <div class="card-header">
<el-button <span class="card-title">
v-if="hasAuth('professional_professionaltitlerelation_add')" <el-icon class="title-icon"><Medal /></el-icon>
type="primary" 职称关系
icon="FolderAdd" </span>
@click="handleAdd" <div class="header-actions">
>新增</el-button> <div class="action-group">
<el-button <el-button
v-if="hasAuth('professional_teacherbase_export')" v-if="hasAuth('professional_professionaltitlerelation_add')"
type="warning" type="primary"
plain icon="FolderAdd"
icon="Download" @click="handleAdd"
@click="handleDownLoadWord" >新增</el-button>
:loading="exportLoading" <el-button
>导出信息</el-button> v-if="hasAuth('professional_teacherbase_export')"
</div> type="warning"
<div class="header-right"> plain
<RightToolbar icon="Download"
v-model:showSearch="showSearch" @click="handleDownLoadWord"
@queryTable="getDataList" :loading="exportLoading"
/> >导出信息</el-button>
</div>
<div class="header-right">
<RightToolbar
v-model:showSearch="showSearch"
@queryTable="getDataList"
/>
</div>
</div> </div>
</div> </div>
</div> </template>
<!-- 再下方表格 --> <!-- 表格 -->
<el-table <el-table
ref="tableRef" ref="tableRef"
:data="state.dataList" :data="state.dataList"
@@ -223,7 +229,7 @@
@current-change="currentChangeHandle" @current-change="currentChangeHandle"
@size-change="sizeChangeHandle" @size-change="sizeChangeHandle"
/> />
</div> </el-card>
</div> </div>
<!-- 材料预览图片直接显示PDF 在组件内部 dialog 中显示 --> <!-- 材料预览图片直接显示PDF 在组件内部 dialog 中显示 -->
@@ -258,6 +264,7 @@ import {
import { getProfessionalTitleList } from '/@/api/professional/rsbase/professionaltitlelevelconfig' import { getProfessionalTitleList } from '/@/api/professional/rsbase/professionaltitlelevelconfig'
import { getMajorStationList } from '/@/api/professional/rsbase/professionalmajorstation' import { getMajorStationList } from '/@/api/professional/rsbase/professionalmajorstation'
import { defineAsyncComponent } from 'vue' import { defineAsyncComponent } from 'vue'
import { Medal } from '@element-plus/icons-vue'
// 子组件 // 子组件
const TeacherNameNo = defineAsyncComponent(() => import('/@/components/TeacherNameNo/index.vue')) const TeacherNameNo = defineAsyncComponent(() => import('/@/components/TeacherNameNo/index.vue'))
const AuditState = defineAsyncComponent(() => import('/@/components/AuditState/index.vue')) const AuditState = defineAsyncComponent(() => import('/@/components/AuditState/index.vue'))
@@ -469,17 +476,7 @@ onMounted(async () => {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.titlerelation-page { @import '/@/assets/styles/page-cards.scss';
padding: 12px;
min-height: 100%;
background: var(--el-bg-color-page, #f5f6f8);
}
.page-wrapper {
display: flex;
flex-direction: column;
gap: 0;
}
/* 筛选:内容区最上方,无上外边距;与下方标题栏间距用 margin-bottom */ /* 筛选:内容区最上方,无上外边距;与下方标题栏间距用 margin-bottom */
.content-block__filter { .content-block__filter {
@@ -527,29 +524,7 @@ onMounted(async () => {
} }
} }
.header-actions { /* header-actions / action-group / header-right 的基础布局来自 page-cards.scss */
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 12px;
width: 100%;
}
/* 按钮间距按规范 10px与 RightToolbar 区隔 */
.action-group {
display: flex;
align-items: center;
flex-wrap: wrap;
}
.header-right {
display: flex;
align-items: center;
gap: 8px;
padding-left: 12px;
// border-left: 1px solid var(--el-border-color-lighter);
}
/* 表格 */ /* 表格 */
.titlerelation-table { .titlerelation-table {