【update 首页】首页样式及高级搜索

This commit is contained in:
danshihao
2024-06-26 18:59:58 +08:00
parent e40a403d16
commit 87c76abddc
58 changed files with 1043 additions and 416 deletions
+5 -3
View File
@@ -1,4 +1,4 @@
import { downFile, getAction, postAction } from './manage' import { downFile, getAction, postAction, postDownFile } from './manage'
// 获取检索历史数据 // 获取检索历史数据
const getSearchHistoryData = (params) => getAction('/home/lawsHomeNormalSearchHistory/page', params) const getSearchHistoryData = (params) => getAction('/home/lawsHomeNormalSearchHistory/page', params)
// 根据id删除检索历史 // 根据id删除检索历史
@@ -44,7 +44,8 @@ const exportGeneralSearch = (params) => downFile('/home/lawsHomeSearch/normalSea
const getAdvancedSearchAll = (params) => postAction('/home/lawsHomeSearch/getAdvancedSearchAll', params) const getAdvancedSearchAll = (params) => postAction('/home/lawsHomeSearch/getAdvancedSearchAll', params)
// 高级检索-条款 // 高级检索-条款
const getAdvancedSearchClause = (params) => postAction('/home/lawsHomeSearch/getAdvancedSearchClause', params) const getAdvancedSearchClause = (params) => postAction('/home/lawsHomeSearch/getAdvancedSearchClause', params)
// 高级检索-导出
const exportAdvancedSearch = (params) => postDownFile('/home/lawsHomeSearch/advancedSearchExportExcel', params)
export { export {
getSearchHistoryData, getSearchHistoryData,
deleteSearchHistoryById, deleteSearchHistoryById,
@@ -65,5 +66,6 @@ export {
getTodoList, getTodoList,
exportGeneralSearch, exportGeneralSearch,
getAdvancedSearchAll, getAdvancedSearchAll,
getAdvancedSearchClause getAdvancedSearchClause,
exportAdvancedSearch
} }
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 812 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 781 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1017 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 436 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 B

+68 -19
View File
@@ -2,9 +2,10 @@
module.exports = { module.exports = {
// 一般检索 // 一般检索
generalSearch: { generalSearch: {
generalSearch: 'General search',
advancedSearch: 'Advanced Search', advancedSearch: 'Advanced Search',
homePage: 'Home', homePage: 'Home',
searchHistory: '检索历史', searchHistory: 'Search History',
queryCondition: 'Query Condition', queryCondition: 'Query Condition',
retrievalMode: 'Retrieval Mode', retrievalMode: 'Retrieval Mode',
resourceType: 'Resource Type', resourceType: 'Resource Type',
@@ -17,32 +18,80 @@ module.exports = {
standardState: 'Standard State', standardState: 'Standard State',
standardGradeClassification: 'Standard Grade Classification', standardGradeClassification: 'Standard Grade Classification',
all: 'All', all: 'All',
implementationDate: 'Release Date' implementationDate: 'Release Date',
standardStatusSet: 'Standard state settings',
viewText: 'View Text',
exportName: 'General retrieval export',
fullSearch: 'full-text searching',
foreignStandard: 'Foreign standards and regulations',
enterpriseStandard: 'Enterprise standards',
notIncludeAbolishedStandard: 'Excluding abolishment standards',
includeAbolishedStandard: 'Including abolishment standards'
}, },
// 高级搜索 // 高级搜索
advancedSearch: { advancedSearch: {
standardNum: '标准号', standardNum: 'Standard number',
standardName: '标准名称', standardName: 'Standard Name',
releaseDate: '发布日期', releaseDate: 'Release Date',
materialDate: '实施日期', materialDate: 'Implementation Date',
standardStatus: '标准状态' standardStatus: 'Standard State',
newProduceMaterialDate: 'Implementation date of new production vehicles',
newAttestationMaterialDate: 'Implementation date of new certified vehicle',
storageConditions: 'Storage conditions',
unfoldConditions: 'Unfold conditions',
retrieveCategories: 'Retrieve categories',
standardType: 'STANDARD',
all: 'whole',
foreignStandards: 'Foreign standards and regulations',
enterpriseStandards: 'Enterprise standards',
term: 'term',
termNo: 'Clause number',
termTitle: 'Clause Title',
termContent: 'Clause content',
applicableComponents: 'Applicable components',
newProduceVehiclesImplementationDate: 'Implementation date of new production vehicles',
newAuthVehiclesImplementationDate: 'Implementation date of new certified vehicle',
registrationDate: 'Registration date',
keywords: 'keywords',
responsibleDepartment: 'Responsible department',
responsibleDepartmentModule: 'Responsible department professional module',
relatedDepartments: 'Related departments',
relatedDepartmentModule: 'Related department professional module',
applications: 'Applications',
powerType: 'Power Type',
professionalField: 'Professional field',
configurationRequirements: 'Configuration requirements',
exportName: 'Advanced retrieval export',
standard: 'standard'
}, },
// 快捷入口 // 快捷入口
quickEnter: { quickEnter: {
quickEnter: '快捷入口', quickEnter: 'Quick entrance',
menuManage: '菜单管理', menuManage: 'Menu management',
custom: '自定义', custom: 'custom',
optionModules: '可选模块', optionModules: 'Option Modules',
personalDisplayModule: '个人展示模块', personalDisplayModule: 'Personal Display Module',
itemUnit: '', itemUnit: 'term',
itemsUnit: '', itemsUnit: 'term',
listEmpty: '列表为空', listEmpty: 'List is empty',
pleaseEnterSearchContent: '请输入搜索内容', pleaseEnterSearchContent: 'Please enter search content',
maxSelectedNine: '最多选择9个模块' maxSelected: 'Select up to 14 modules',
newFunction: 'New features'
}, },
// 待办任务 // 待办任务
todoTask: { todoTask: {
todoTask: '待办任务', todoTask: 'To Do Tasks',
more: '更多' more: 'more'
},
// 友情链接
friendLink: {
friendLink: 'Friendship link',
more: 'more'
},
// 检索
retrieval: {
titleSearch: 'Title search',
fullSearch: 'full-text searching',
advancedSearch: 'Advanced Search'
} }
} }
+48 -3
View File
@@ -2,7 +2,8 @@
module.exports = { module.exports = {
// 一般检索 // 一般检索
generalSearch: { generalSearch: {
advancedSearch: '高级搜索', generalSearch: '一般检索',
advancedSearch: '高级检索',
homePage: '首页', homePage: '首页',
searchHistory: '检索历史', searchHistory: '检索历史',
queryCondition: '查询条件', queryCondition: '查询条件',
@@ -20,7 +21,12 @@ module.exports = {
implementationDate: '实施日期', implementationDate: '实施日期',
standardStatusSet: '标准状态设置', standardStatusSet: '标准状态设置',
viewText: '查看文本', viewText: '查看文本',
exportName: '一般检索导出' exportName: '一般检索导出',
fullSearch: '全文检索',
foreignStandard: '外来标准法规',
enterpriseStandard: '企业标准',
notIncludeAbolishedStandard: '不包含废止标准',
includeAbolishedStandard: '包含废止标准'
}, },
// 高级搜索 // 高级搜索
advancedSearch: { advancedSearch: {
@@ -28,7 +34,35 @@ module.exports = {
standardName: '标准名称', standardName: '标准名称',
releaseDate: '发布日期', releaseDate: '发布日期',
materialDate: '实施日期', materialDate: '实施日期',
standardStatus: '标准状态' standardStatus: '标准状态',
newProduceMaterialDate: '新生产车实施日期',
newAttestationMaterialDate: '新认证车实施日期',
storageConditions: '收起条件',
unfoldConditions: '展开条件',
retrieveCategories: '检索类别',
standardType: '标准类型',
all: '全部',
foreignStandards: '外来标准法规',
enterpriseStandards: '企业标准',
term: '条款',
termNo: '条款号',
termTitle: '条款标题',
termContent: '条款内容',
applicableComponents: '适用零部件',
newProduceVehiclesImplementationDate: '新生产车实施日期',
newAuthVehiclesImplementationDate: '新认证车实施日期',
registrationDate: '注册日期',
keywords: '关键字',
responsibleDepartment: '责任部门',
responsibleDepartmentModule: '责任部门专业模块',
relatedDepartments: '关联部门',
relatedDepartmentModule: '关联部门专业模块',
applications: '适用车型',
powerType: '动力类型',
professionalField: '专业领域',
configurationRequirements: '配置需求',
exportName: '高级检索导出',
standard: '标准'
}, },
// 快捷入口 // 快捷入口
quickEnter: { quickEnter: {
@@ -48,5 +82,16 @@ module.exports = {
todoTask: { todoTask: {
todoTask: '待办任务', todoTask: '待办任务',
more: '更多' more: '更多'
},
// 友情链接
friendLink: {
friendLink: '友情链接',
more: '更多'
},
// 检索
retrieval: {
titleSearch: '标题检索',
fullSearch: '全文检索',
advancedSearch: '高级检索'
} }
} }
@@ -89,27 +89,27 @@ module.exports = {
}, },
// 标准主计划 // 标准主计划
standardMasterPlan: { standardMasterPlan: {
standardNumber: '标准编号', standardNumber: 'standard number',
standardName: '标准名称', standardName: 'Standard Name',
standardStatus: '标准状态', standardStatus: 'Standard State',
applicableMarket: '适用市场', applicableMarket: 'Applicable markets',
informationInput: '信息输入', informationInput: 'Information input',
textStorage: '文本入库', textStorage: 'Text storage',
importNotification: '导入通知', importNotification: 'Import Notification',
interpretationOfRegulations: '法规解读', interpretationOfRegulations: 'Interpretation of regulations',
regulatoryPromotion: '法规宣贯', regulatoryPromotion: 'Regulatory promotion',
marketRegulationListUpdate: '市场法规清单更新', marketRegulationListUpdate: 'Market Regulation List Update',
regulatoryComplianceInvestigation: '法规符合性排查', regulatoryComplianceInvestigation: 'Regulatory compliance investigation',
generalDocumentRectificationPlan: '通用文件整改计划', generalDocumentRectificationPlan: 'General Document Rectification Plan',
vehicleModelRectification: '车型整改', vehicleModelRectification: 'Vehicle model rectification',
isItRelatedTo: '是否涉及', isItRelatedTo: 'Is it related to',
responsiblePerson: '责任人', responsiblePerson: 'person responsible',
plannedCompletionDate: '计划完成日期', plannedCompletionDate: 'Planned completion date',
actualFinishingDate: '实际完成日期', actualFinishingDate: 'actual finishing date',
deliverables: '交付物', deliverables: 'Deliverables',
pcrNumber: 'PCR编号', pcrNumber: 'PCR number',
rectifyFinishingDate: '整改完成日期', rectifyFinishingDate: 'Completion date of rectification',
viewMarketList: '查看市场清单', viewMarketList: 'View market list',
viewTroubleshootingResults: '查看排查结果' viewTroubleshootingResults: 'View troubleshooting results'
} }
} }
@@ -10,6 +10,7 @@ module.exports = {
submitQuestion: '提交问题', submitQuestion: '提交问题',
standardCatalogue: '标准目录', standardCatalogue: '标准目录',
clauseLabel: '条文标签', clauseLabel: '条文标签',
translation: '译文',
clauseNumber: '条文号', clauseNumber: '条文号',
clauseTitle: '条文标题', clauseTitle: '条文标题',
regulatoryRequirementsType: '法规要求类型', // 法规要求类型 regulatoryRequirementsType: '法规要求类型', // 法规要求类型
+25 -34
View File
@@ -3,14 +3,26 @@
<!-- <first-stage-card></first-stage-card>--> <!-- <first-stage-card></first-stage-card>-->
<!-- </div>--> <!-- </div>-->
<div class="all-wrapper"> <div class="all-wrapper">
<!-- 检索和预警 --> <a-row :gutter="20">
<search-and-warning-card class="flex-item search-warning-wrapper"></search-and-warning-card> <a-col :span="24" class="mb-20">
<!-- 友情链接 --> <!-- 检索 -->
<friend-link-card class="flex-item friend-link-wrapper"></friend-link-card> <retrieval-card></retrieval-card>
<!-- 快捷入口 --> </a-col>
<quick-enter-card class="flex-item quick-enter-wrapper"></quick-enter-card> <a-col :span="24" class="mb-20">
<!-- 待办任务 --> <!-- 快捷入口 -->
<to-do-task-card class="flex-item to-do-task-wrapper"></to-do-task-card> <quick-enter-card></quick-enter-card>
</a-col>
<a-col :span="10" class="mb-20">
<!-- 待办任务 -->
<to-do-task-card class="mb-20"></to-do-task-card>
<!-- 友情链接 -->
<friend-link-card></friend-link-card>
</a-col>
<a-col :span="14" class="mb-20">
<!-- 预警 -->
<search-and-warning-card></search-and-warning-card>
</a-col>
</a-row>
</div> </div>
</template> </template>
@@ -20,10 +32,11 @@ import SearchAndWarningCard from './modules/SearchAndWarningCard'
import QuickEnterCard from './modules/QuickEnterCard' import QuickEnterCard from './modules/QuickEnterCard'
import FriendLinkCard from './modules/FriendLinkCard' import FriendLinkCard from './modules/FriendLinkCard'
import ToDoTaskCard from './modules/ToDoTaskCard' import ToDoTaskCard from './modules/ToDoTaskCard'
import RetrievalCard from '@views/dashboard/modules/RetrievalCard'
export default { export default {
name: 'Analysis', name: 'Analysis',
components: { ToDoTaskCard, FriendLinkCard, QuickEnterCard, SearchAndWarningCard }, components: { RetrievalCard, ToDoTaskCard, FriendLinkCard, QuickEnterCard, SearchAndWarningCard },
// components: { FirstStageCard }, // components: { FirstStageCard },
methods: {} methods: {}
} }
@@ -33,36 +46,14 @@ export default {
@import '~@assets/less/common.less'; @import '~@assets/less/common.less';
.all-wrapper { .all-wrapper {
display: flex; padding-top: 20px;
flex-direction: column;
height: calc(100vh - 83px);
flex-wrap: wrap;
} }
.flex-item { .flex-item {
margin: 10px; margin: 10px;
} }
// 检索和预警 .mb-20 {
.search-warning-wrapper { margin-bottom: 20px;
width: calc(70% - 20px);
height: calc(100% - 20px - 162px);
} }
// 快捷入口
.quick-enter-wrapper {
width: calc(30% - 20px);
height: 306px;
}
// 友情链接
.friend-link-wrapper {
width: calc(70% - 20px);
height: 142px;
}
// 待办任务
.to-do-task-wrapper {
//grid-area: ToDoTask;
width: calc(30% - 20px);
height: calc(100% - 346px);
}
/deep/ .top-wrapper { /deep/ .top-wrapper {
display: flex; display: flex;
align-items: center; align-items: center;
+41 -20
View File
@@ -2,12 +2,16 @@
<a-card :bordered="false"> <a-card :bordered="false">
<a-spin :spinning="loading"> <a-spin :spinning="loading">
<div class="top-wrapper"> <div class="top-wrapper">
<span class="left-p"><i class="iconfont icon-link left-icon"></i>友情链接</span> <span class="left-p"><i class="iconfont icon-link left-icon"></i>{{$t('dashboard.friendLink.friendLink')}}</span>
<span class="right-p" @click="moreLink" v-has="'dashboard:friendShipLInk:linkManage'">链接管理<i class="iconfont icon-right"></i></span> <span class="right-p" @click="moreLink" v-has="'dashboard:friendShipLInk:linkManage'">{{$t('dashboard.friendLink.more')}}<i class="iconfont icon-right"></i></span>
</div> </div>
<div class="content-wrapper"> <div class="content-wrapper">
<div class="content-div" v-for="item in dataSource" :key="item.id" @click="clickLink(item)"> <div class="content-div" v-for="item in dataSource" :key="item.id" @click="clickLink(item)">
{{ item.name }} <img class="icon-img" :src="dataSource.logo || defaultLogo" :alt="item.name">
<a-tooltip placement="top">
<template slot="title">{{ item.name }}</template>
<p>{{ item.name }}</p>
</a-tooltip>
</div> </div>
</div> </div>
</a-spin> </a-spin>
@@ -21,8 +25,16 @@ export default {
name: 'FriendLinkCard', name: 'FriendLinkCard',
data () { data () {
return { return {
loading: true, defaultLogo: require('@/assets/image/dashboard/friendship-link.png'),
dataSource: [], loading: false,
dataSource: [
{ name: '奇瑞官网' },
{ name: '奇瑞官网' },
{ name: '奇瑞官网' },
{ name: '奇瑞官网' },
{ name: '奇瑞官网' },
{ name: '奇瑞官网' }
],
url: { url: {
list: '/sys/lawsFriendlyLinks/list' list: '/sys/lawsFriendlyLinks/list'
} }
@@ -64,24 +76,33 @@ export default {
.content-wrapper { .content-wrapper {
display: grid; display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr; grid-template-columns: repeat(6, 1fr);
grid-gap: 20px;
margin-top: 12px; margin-top: 12px;
} }
.content-div { .content-div {
height: 62px;
padding: 16px;
line-height: 30px;
box-shadow: 0px 0px 8px 0px rgba(0,0,0,0.1);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 16px;
font-family: PingFang SC-Regular, PingFang SC, sans-serif;
font-weight: 400;
color: @primary-color;
text-align: center;
background-image: url('../../../assets/image/dashboardLinkBack.png');
cursor: pointer; cursor: pointer;
text-align: center;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin: auto;
.icon-img {
border-radius: 8px;
width: 64px;
height: 64px;
margin-bottom: 2px;
}
p {
height: 28px;
line-height: 28px;
margin: 0;
color: #333333;
text-align: center;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
} }
</style> </style>
@@ -103,9 +103,9 @@ export default {
}, },
// 确定 // 确定
handleOk () { handleOk () {
// 最多选择9个模块 // 最多选择14个模块
if (this.targetKeys.length > 9) { if (this.targetKeys.length > 14) {
this.$message.warning(this.$t('dashboard.quickEnter.maxSelectedNine')) this.$message.warning(this.$t('dashboard.quickEnter.maxSelected'))
return return
} }
// 如果进来的值和提交的值一样不提示操作成功 // 如果进来的值和提交的值一样不提示操作成功
+26 -56
View File
@@ -3,7 +3,7 @@
<a-spin :spinning="loading"> <a-spin :spinning="loading">
<div class="top-wrapper"> <div class="top-wrapper">
<p class="left-p"><i class="iconfont icon-rukou left-icon"></i>{{ this.$t('dashboard.quickEnter.quickEnter') }}</p> <p class="left-p"><i class="iconfont icon-rukou left-icon"></i>{{ this.$t('dashboard.quickEnter.quickEnter') }}</p>
<p class="right-p" @click="menuManage" v-has="'dashboard:quickEnter:menuManage'"><i class="iconfont icon-settings"></i>{{ this.$t('dashboard.quickEnter.menuManage') }}</p> <p class="right-p" @click="menuManage" v-has="'dashboard:quickEnter:menuManage'"><i class="iconfont icon-settings" style="font-size: 20px;"></i></p>
</div> </div>
<div class="content-wrapper"> <div class="content-wrapper">
<div class="content-div" v-for="item in dataSource" :key="item.id" @click="handleTo(item.url)"> <div class="content-div" v-for="item in dataSource" :key="item.id" @click="handleTo(item.url)">
@@ -14,8 +14,12 @@
<p>{{ item.name }}</p> <p>{{ item.name }}</p>
</a-tooltip> </a-tooltip>
</div> </div>
<div class="plus-div" @click="menuManage" v-if="dataSource.length < 9" v-has="'dashboard:quickEnter:menuManage'"> <div class="plus-div" @click="menuManage" v-if="dataSource.length < 14" v-has="'dashboard:quickEnter:menuManage'">
<a-icon type="plus" class="text-primary-color" /> <img class="icon-img" :src="require('@assets/image/dashboard/quickEnter/plus.png')" :alt="$t('dashboard.quickEnter.newFunction')">
<a-tooltip placement="top">
<template slot="title">{{ $t('dashboard.quickEnter.newFunction') }}</template>
<p>{{ $t('dashboard.quickEnter.newFunction') }}</p>
</a-tooltip>
</div> </div>
</div> </div>
</a-spin> </a-spin>
@@ -84,7 +88,7 @@ export default {
// { iconName: 'a-fagui1', name: '国内法规' }, // { iconName: 'a-fagui1', name: '国内法规' },
// { iconName: 'a-moxingkuaisuchaifen1', name: '征求意见' }, // { iconName: 'a-moxingkuaisuchaifen1', name: '征求意见' },
// { iconName: 'jiaoseguanli', name: '角色管理' }, // { iconName: 'jiaoseguanli', name: '角色管理' },
// { iconName: 'wenda1', name: '我的问答' } { src: require(`@/assets/image/dashboard/quickEnter/new-process.png`), name: '新建流程' }
] ]
} }
}, },
@@ -102,7 +106,7 @@ export default {
// 如果能找到菜单名,就用对应图标 // 如果能找到菜单名,就用对应图标
const findMap = map.find(m => m.id === item.id || m.name === item.name) const findMap = map.find(m => m.id === item.id || m.name === item.name)
if (findMap) { if (findMap) {
item.src = require(`@/assets/image/dashboard/${findMap.srcName}.png`) item.src = require(`@/assets/image/dashboard/quickEnter/${findMap.srcName}.png`)
} }
return item return item
}) })
@@ -135,73 +139,39 @@ export default {
<style scoped lang="less"> <style scoped lang="less">
.content-wrapper { .content-wrapper {
//display: flex;
//flex-direction: row;
//flex-wrap: wrap;
//justify-content: space-between;
display: grid; display: grid;
grid-template-columns: repeat(auto-fill, calc((100% - 20px) / 3)); margin-top: 12px;
grid-gap: 10px; grid-template-columns: repeat(auto-fill, calc(100% / 14));
grid-auto-flow: row;
margin-top: 10px; & > .content-div,
& > div { & > .plus-div {
//width: 100px; padding: 9px 16px 0;
//height: 100px;
min-height: 50px;
border-radius: 8px 8px 8px 8px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
}
.content-div {
// (总高度 - 内边距 - 标题 - 上下边距) / 3
height: calc((306px - 48px - 31px - 20px) / 3);
cursor: pointer; cursor: pointer;
background: rgba(213,44,38,0.08);
.icon-img { .icon-img {
width: 27px; border-radius: 8px;
} width: 52px;
.iconfont { height: 52px;
font-size: 27px; margin-bottom: 12px;
color: @primary-color;
} }
p { p {
width: 90%; height: 24px;
line-height: 24px;
margin: 0;
color: #333333;
text-align: center; text-align: center;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
margin-bottom: 0;
font-size: 16px;
font-family: PingFang SC, PingFang SC, sans-serif;
font-weight: 400;
color: #000000;
line-height: 28px;
}
}
.plus-div {
// (总高度 - 内边距 - 标题 - 上下边距) / 3
height: calc((306px - 48px - 31px - 20px) / 3);
cursor: pointer;
border: 1px dashed @primary-color;
box-sizing: border-box;
.anticon {
font-size: 28px;
} }
} }
} }
.text-primary-color { .text-primary-color {
color: @primary-color color: #666666;
}
@media screen and (max-width: 1366px) {
.content-wrapper {
.content-div {
p {
font-size: 14px;
}
}
}
} }
</style> </style>
@@ -0,0 +1,142 @@
<template>
<!-- 搜索区域 -->
<div class="search-wrapper">
<a-select class="resource-type-select" v-model="resourceType">
<a-select-option value="all">{{ $t('dashboard.generalSearch.all')}}</a-select-option>
<a-select-option v-for="item in resourceTypeOptions" :key="item.value" :value="item.value" :title="item.title">
{{ item.title }}
</a-select-option>
</a-select>
<a-input class="search-input" v-model="searchValue" :placeholder="$t('pleaseEnter')" @pressEnter="searchInputEnter">
<a-icon slot="prefix" type="search" style="color: #0064FA;" />
</a-input>
<div class="btn-box">
<a-button type="primary" icon="search" @click="toSearchWindow('title')">{{ $t('dashboard.retrieval.titleSearch') }}</a-button>
<a-button type="primary" icon="search" @click="toSearchWindow('fullText')">{{ $t('dashboard.retrieval.fullSearch') }}</a-button>
<a-button type="primary" class="btn-ghost" ghost @click="toAdvancedSearch"><img :src="require('@/assets/image/icon/super-search.png')" alt='' class="btn-icon">{{ $t('dashboard.retrieval.advancedSearch') }}</a-button>
</div>
</div>
</template>
<script>
import { ajaxGetDictItems } from '@api/api'
export default {
name: 'RetrievalCard',
data () {
return {
resourceTypeOptions: [], // 资源类型下拉框数据
resourceType: 'all', // 资源类型
searchValue: '' // 检索内容
}
},
mounted () {
this.initResourceTypeOptions()
},
methods: {
// 获取资源类型下拉框数据
initResourceTypeOptions () {
ajaxGetDictItems('resource_type').then(res => {
if (res.success) {
this.resourceTypeOptions = res.result
}
})
},
// 点击跳转到一般检索页
toSearchWindow (type) {
const { href } = this.$router.resolve({
path: '/generalSearch',
query: {
type: type,
resourceType: this.resourceType,
searchValue: this.searchValue
}
})
window.open(href, '_blank')
},
// 点击跳转到高级检索页
toAdvancedSearch () {
const { href } = this.$router.resolve({
path: '/advancedSearch'
})
window.open(href, '_blank')
},
// 回车跳标题检索
searchInputEnter () {
const { href } = this.$router.resolve({
path: '/generalSearch',
query: {
type: 'title',
resourceType: this.resourceType,
searchValue: this.searchValue
}
})
window.open(href, '_blank')
}
}
}
</script>
<style lang="less" scoped>
@height: 56px;
.search-wrapper {
width: 80%;
margin: 0 auto;
display: grid;
grid-template-columns: 102px 1fr auto;
grid-gap: 10px;
& > .resource-type-select {
flex: 0 0 102px;
color: @primary-color;
/deep/.ant-select-arrow svg {
fill: @primary-color;
}
/deep/.ant-select-selection--single {
height: @height;
border-color: @primary-color;
}
/deep/.ant-select-arrow {
right: 20px;
}
/deep/.ant-select-selection__rendered {
line-height: @height;
margin-left: 20px;
margin-right: 34px;
}
}
& > .search-input {
flex: auto;
//margin-left: 10px;
/deep/.ant-input-prefix {
left: 24px;
}
/deep/.ant-input {
padding-left: 40px;
height: @height;
border-color: @primary-color;
}
}
.btn-box .ant-btn {
flex: 138px;
height: @height;
&:not(:first-child) {
margin-left: 10px;
}
}
}
.btn-icon {
margin-right: 8px;
vertical-align: top;
}
@media screen and (max-width: 1366px) {
@height: 42px;
}
</style>
@@ -1,35 +1,19 @@
<template> <template>
<a-card :bordered="false"> <!-- 预警区域 -->
<!-- 搜索区域 --> <div class="warning-wrapper">
<div class="search-wrapper"> <!-- tab切换 -->
<a-select class="resource-type-select" v-model="resourceType"> <a-tabs type="card" class="card-tabs" @change="warningTabChange" size="large">
<a-select-option value="all">{{ $t('dashboard.generalSearch.all')}}</a-select-option> <a-tab-pane v-for="item in tabList" :key="item.key" :tab="item.name"></a-tab-pane>
<a-select-option v-for="item in resourceTypeOptions" :key="item.value" :value="item.value" :title="item.title"> </a-tabs>
{{ item.title }} <!--这里的scroll.y必须有后面用媒体查询进行样式覆盖-->
</a-select-option> <div class="table-warpper">
</a-select>
<a-input v-model="searchValue" :placeholder="$t('pleaseEnter')" @pressEnter="searchInputEnter"></a-input>
<a-button type="primary" @click="toSearchWindow('title')">标题检索</a-button>
<a-button type="primary" @click="toSearchWindow('fullText')">全文检索</a-button>
<a-button type="primary" ghost @click="toAdvancedSearch">高级检索</a-button>
</div>
<!-- 预警区域 -->
<div class="warning-wrapper">
<!-- tab切换 -->
<div class="tab-wrapper">
<div class="tab-div" :class="warningTab === 'newCarType' ? 'curr-tab' : ''" @click="warningTabChange('newCarType')">新车型实施预警</div>
<div class="tab-div" :class="warningTab === 'carInProduction' ? 'curr-tab' : ''" @click="warningTabChange('carInProduction')">在产车实施预警</div>
<div class="tab-div small-tab-div" :class="warningTab === 'enStandardImplement' ? 'curr-tab small-curr-tab' : ''" @click="warningTabChange('enStandardImplement')">最新发布企标</div>
<div class="tab-div small-tab-div" :class="warningTab === 'enStandardPublish' ? 'curr-tab small-curr-tab' : ''" @click="warningTabChange('enStandardPublish')">最新实施企标</div>
</div>
<!--这里的scroll.y必须有后面用媒体查询进行样式覆盖-->
<a-table <a-table
ref="table" ref="table"
size="middle" size="middle"
:rowKey="(_, index) => index" :rowKey="(_, index) => index"
class="table" class="table"
:scroll="{ x: '100%', y: '40vh' }" :scroll="{ x: '100%', y: '40vh' }"
:columns="columns" :columns="showColumns"
:dataSource="dataSource" :dataSource="dataSource"
:pagination="ipagination" :pagination="ipagination"
@change="handleTableChange" @change="handleTableChange"
@@ -58,132 +42,221 @@
</template> </template>
</a-table> </a-table>
</div> </div>
</a-card> </div>
</template> </template>
<script> <script>
import { ajaxGetDictItems } from '@/api/api'
import { getAction } from '@api/manage' import { getAction } from '@api/manage'
import { StandardSource } from '@/enums/commonEnums' import { StandardSource } from '@/enums/commonEnums'
const warningColumns = [
{
title: '来源',
align: 'left',
dataIndex: 'source_dictText',
width: 60,
scopedSlots: { customRender: 'text' }
},
{
title: '标准号',
align: 'left',
dataIndex: 'standardNumber',
width: 120,
scopedSlots: { customRender: 'standard' }
},
{
title: '标准名称',
align: 'left',
dataIndex: 'standardName',
width: 180,
scopedSlots: { customRender: 'standard' }
},
{
title: '新车型实施日期',
align: 'left',
dataIndex: 'newModelImplementationDate',
width: 100,
scopedSlots: { customRender: 'text' }
}
]
const enStandardColumns = [
{
title: '企标编号',
align: 'left',
dataIndex: 'standardNumber',
width: 60,
scopedSlots: { customRender: 'enStandard' }
},
{
title: '企标名称',
align: 'left',
dataIndex: 'standardName',
width: 60,
scopedSlots: { customRender: 'enStandard' }
},
{
title: '标准状态',
align: 'left',
dataIndex: 'standardState_dictText',
width: 60,
scopedSlots: { customRender: 'text' }
},
{
title: '发布日期',
align: 'left',
dataIndex: 'releaseDate',
width: 60,
scopedSlots: { customRender: 'text' }
},
{
title: '实施日期',
align: 'left',
dataIndex: 'implementationDate',
width: 60,
scopedSlots: { customRender: 'text' }
}
]
export default { export default {
name: 'SearchAndWarningCard', name: 'SearchAndWarningCard',
data () { data () {
return { return {
resourceTypeOptions: [], // 资源类型下拉框数据 tabList: [
resourceType: 'all', // 资源类型 { key: 'lastStorageStandards', name: '最新入库标准' },
searchValue: '', // 检索内容 { key: 'marketUpdates', name: '市场更新情况' },
warningTab: 'newCarType', // 预警当前tab { key: 'lastStorageEnterpriseStandard', name: '最新入库企标' },
{ key: 'latestInterpretationStandards', name: '最新解读标准' },
{ key: 'implementStandards', name: '将实施标准' }
],
warningTab: '', // 预警当前tab
loading: false, loading: false,
columns: [ columns: [
{
title: this.$t('serialNumber'),
dataIndex: '',
key: 'rowIndex',
width: 60,
align: 'center',
customRender: function (t, r, index) {
return parseInt(index) + 1
}
},
{ {
title: '来源', title: '来源',
align: 'left', align: 'left',
dataIndex: 'source_dictText', dataIndex: 'source_dictText',
width: 60, width: 60,
scopedSlots: { customRender: 'text' } scopedSlots: { customRender: 'text' },
show: () => {
return [
this.tabList[0].key,
this.tabList[4].key
].includes(this.warningTab)
}
}, },
{ {
title: '标准号', title: '标准号',
align: 'left', align: 'left',
dataIndex: 'standardNumber', dataIndex: 'standardNumber',
width: 120, width: 120,
scopedSlots: { customRender: 'standard' } scopedSlots: { customRender: 'standard' },
show: () => {
return [
this.tabList[0].key,
this.tabList[2].key,
this.tabList[3].key,
this.tabList[4].key
].includes(this.warningTab)
}
}, },
{ {
title: '标准名称', title: '标准名称',
align: 'left', align: 'left',
dataIndex: 'standardName', dataIndex: 'standardName',
width: 180, width: 180,
scopedSlots: { customRender: 'standard' } scopedSlots: { customRender: 'standard' },
show: () => {
return [
this.tabList[0].key,
this.tabList[2].key,
this.tabList[3].key,
this.tabList[4].key
].includes(this.warningTab)
}
}, },
{ {
title: '新车型实施日期', title: '解读信息',
align: 'left', align: 'left',
dataIndex: 'newModelImplementationDate', dataIndex: 'interpretingInformation',
width: 180,
scopedSlots: { customRender: 'text' },
show: () => {
return [
this.tabList[3].key
].includes(this.warningTab)
}
},
{
title: '新生产车实施日期',
align: 'left',
dataIndex: 'newProduceModelImplementationDate',
width: 140,
scopedSlots: { customRender: 'text' },
show: () => {
return [
this.tabList[0].key
].includes(this.warningTab)
}
},
{
title: '新认证车实施日期',
align: 'left',
dataIndex: 'newAuthenticationModelImplementationDate',
width: 140,
scopedSlots: { customRender: 'text' },
show: () => {
return [
this.tabList[0].key,
this.tabList[4].key
].includes(this.warningTab)
}
},
{
title: '发布日期',
align: 'left',
dataIndex: 'releaseDate',
width: 100, width: 100,
scopedSlots: { customRender: 'text' } scopedSlots: { customRender: 'text' },
show: () => {
return [
this.tabList[2].key
].includes(this.warningTab)
}
},
{
title: '实施日期',
align: 'left',
dataIndex: 'implementationDate',
width: 100,
scopedSlots: { customRender: 'text' },
show: () => {
return [
this.tabList[2].key
].includes(this.warningTab)
}
},
{
title: '标准状态',
align: 'left',
dataIndex: 'status_dictText',
width: 100,
scopedSlots: { customRender: 'text' },
show: () => {
return [
this.tabList[0].key,
this.tabList[2].key,
this.tabList[4].key
].includes(this.warningTab)
}
},
{
title: '代替标准编号',
align: 'left',
dataIndex: 'standardNumber2',
width: 100,
scopedSlots: { customRender: 'text' },
show: () => {
return [
this.tabList[2].key
].includes(this.warningTab)
}
},
// 市场更新情况start
{
title: '国家/地区',
align: 'left',
dataIndex: 'country',
width: 100,
scopedSlots: { customRender: 'text' },
show: () => {
return [
this.tabList[1].key
].includes(this.warningTab)
}
},
{
title: '清单编号',
align: 'left',
dataIndex: 'listNumber',
width: 100,
scopedSlots: { customRender: 'text' },
show: () => {
return [
this.tabList[1].key
].includes(this.warningTab)
}
},
{
title: '清单名称',
align: 'left',
dataIndex: 'listName',
width: 100,
scopedSlots: { customRender: 'text' },
show: () => {
return [
this.tabList[1].key
].includes(this.warningTab)
}
},
{
title: '清单版本',
align: 'left',
dataIndex: 'listVersion',
width: 100,
scopedSlots: { customRender: 'text' },
show: () => {
return [
this.tabList[1].key
].includes(this.warningTab)
}
},
{
title: '驾驶位置',
align: 'left',
dataIndex: 'drivingPosition',
width: 100,
scopedSlots: { customRender: 'text' },
show: () => {
return [
this.tabList[1].key
].includes(this.warningTab)
}
} }
// 市场更新情况end
], ],
showColumns: [],
dataSource: [], dataSource: [],
/* 分页参数 */ /* 分页参数 */
ipagination: { ipagination: {
@@ -198,26 +271,16 @@ export default {
total: 0 total: 0
}, },
url: { url: {
newModelWarningList: '/laws/localTool/standardEarlyWarning/newModelImplementation', list: '/laws/localTool/standardEarlyWarning/newModelImplementation'
inProductionWarningList: '/laws/localTool/standardEarlyWarning/onTheProduction',
enStandardImplementList: '/laws/localTool/standardEarlyWarning/latestImplementEs',
enStandardPublishList: '/laws/localTool/standardEarlyWarning/latestReleaseEs'
} }
} }
}, },
mounted () { mounted () {
this.initResourceTypeOptions() // 默认选中第一个
this.loadData(1) this.warningTabChange(this.tabList[0].key)
// this.loadData(1)
}, },
methods: { methods: {
// 获取资源类型下拉框数据
initResourceTypeOptions () {
ajaxGetDictItems('resource_type').then(res => {
if (res.success) {
this.resourceTypeOptions = res.result
}
})
},
// 回车跳标题检索 // 回车跳标题检索
searchInputEnter () { searchInputEnter () {
const { href } = this.$router.resolve({ const { href } = this.$router.resolve({
@@ -252,19 +315,9 @@ export default {
// 预警tab切换 // 预警tab切换
warningTabChange (value) { warningTabChange (value) {
this.warningTab = value this.warningTab = value
this.dataSource = [] this.showColumns = this.columns.filter(col => col.show ? col.show() : true).map(item => {
if (value === 'newCarType') { return Object.assign({}, item, { show: undefined })
this.columns.splice(1, this.columns.length - 1, ...warningColumns) })
this.columns[4].title = '新车型实施日期'
this.columns[4].dataIndex = 'newModelImplementationDate'
} else if (value === 'carInProduction') {
this.columns.splice(1, this.columns.length - 1, ...warningColumns)
this.columns[4].title = '在产车实施日期'
this.columns[4].dataIndex = 'onTheProductionDate'
} else {
// 是企标实施预警或企标发布预警
this.columns.splice(1, this.columns.length - 1, ...enStandardColumns)
}
this.loadData(1) this.loadData(1)
}, },
// 跳转详情 // 跳转详情
@@ -314,16 +367,8 @@ export default {
params.columns = 'createTime' params.columns = 'createTime'
params.order = 'desc' params.order = 'desc'
this.loading = true this.loading = true
let url = '' // TODO: 暂时没有对接接口
if (this.warningTab === 'newCarType') { let url = this.url.list
url = this.url.newModelWarningList
} else if (this.warningTab === 'carInProduction') {
url = this.url.inProductionWarningList
} else if (this.warningTab === 'enStandardImplement') {
url = this.url.enStandardImplementList
} else {
url = this.url.enStandardPublishList
}
getAction(url, params).then((res) => { getAction(url, params).then((res) => {
if (res.success) { if (res.success) {
this.dataSource = res.result.records || res.result this.dataSource = res.result.records || res.result
@@ -344,18 +389,40 @@ export default {
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
.search-wrapper {
display: grid;
grid-gap: 10px;
grid-template-columns: 96px 200px 88px 88px 88px;
}
.resource-type-select {
width: 96px;
}
// 预警容器 // 预警容器
.warning-wrapper { .warning-wrapper {
padding: 24px 0; height: calc(100vh - 406px);
}
// tab样式
.card-tabs {
/deep/.ant-tabs-bar {
margin-bottom: 0;
}
/deep/&.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab {
border: none;
margin-right: 10px;
border-radius: 8px 8px 0 0;
position: relative;
&:not(.ant-tabs-tab-active) {
background-color: rgba(255, 255, 255, 0.6);
}
&.ant-tabs-tab-active::after {
content: '';
display: block;
position: absolute;
bottom: 0;
width: 40px;
height: 1px;
background-color: @primary-color;
left: 50%;
transform: translateX(-50%);
}
}
} }
// 预警tab切换 // 预警tab切换
.tab-wrapper { .tab-wrapper {
@@ -364,35 +431,25 @@ export default {
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
} }
.tab-div { // 表格样式
cursor: pointer; .table-warpper {
width: 176px; // 内容高度 = 该部分整体高度 - tab高度
height: 32px; height: calc(100% - 44px);
background: rgba(245, 245, 245, 0.60); background-color: #fff;
color: #4E5969; padding: 20px;
text-align: center;
line-height: 32px; /deep/.ant-table-placeholder {
font-size: 16px; border-bottom: none;
font-family: PingFang SC-Regular, PingFang SC, sans-serif; }
font-weight: 400;
/deep/ .ant-table-thead > tr > th {
background-color: #fff;
}
} }
.small-tab-div { @media screen and (max-width: 1366px) {
width: 156px; .warning-wrapper {
} height: calc(100vh - 226px);
.curr-tab { }
width: 176px;
height: 44px;
line-height: 42px;
border-top: 2px solid @primary-color;
color: @primary-color;
box-sizing: border-box;
font-weight: 500;
//transition-property: width,height,border-top;
//transition-duration: 0.1s;
//transition-timing-function: ease-in;
}
.small-curr-tab {
width: 156px;
} }
// 通过媒体查询覆盖表格高度 // 通过媒体查询覆盖表格高度
.table /deep/ .ant-table-scroll .ant-table-body { .table /deep/ .ant-table-scroll .ant-table-body {
+57 -30
View File
@@ -9,7 +9,10 @@
<div class="content-item" v-for="item in dataSource" :key="item.id" @click="handleToDetail(item)"> <div class="content-item" v-for="item in dataSource" :key="item.id" @click="handleToDetail(item)">
<a-tooltip placement="top"> <a-tooltip placement="top">
<template slot="title">{{item.prcName}}</template> <template slot="title">{{item.prcName}}</template>
<p>{{ item.prcName }}</p> <div class="content-item-img">
<img :src="require('@/assets/image/icon/todo.png')" alt="todo">
</div>
<p class="content-item-text">{{ item.prcName }}</p>
</a-tooltip> </a-tooltip>
</div> </div>
</div> </div>
@@ -31,7 +34,7 @@ export default {
} }
}, },
created () { created () {
this.getTodoTask() // this.getTodoTask()
}, },
methods: { methods: {
// 获取待办任务 // 获取待办任务
@@ -166,49 +169,73 @@ export default {
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
@size: 48px;
.content-wrapper { .content-wrapper {
margin-top: 10px; margin-top: 10px;
height: calc(100vh - 346px - 200px); height: calc(100vh - 700px);
overflow-y: auto; overflow-y: auto;
.content-item { .content-item {
cursor: pointer; cursor: pointer;
word-break: break-all;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-family: PingFang SC, PingFang SC, sans-serif; font-family: PingFang SC, PingFang SC, sans-serif;
font-weight: 400; font-weight: 400;
color: #1D2129; color: #1D2129;
position: relative; position: relative;
font-size: 16px; font-size: 16px;
line-height: 48px; line-height: @size;
height: 48px; height: @size;
border-bottom: 1px solid #E5E6EB; border-radius: 10px;
text-indent: 18px; border: 1px solid #EAEAEA;
} margin-bottom: 8px;
.content-item::before { padding-left: @size;
position: absolute;
top: 50%; .content-item-img {
left: 0; border: 1px solid #EAEAEA;
transform: translateY(-50%); border-radius: 10px;
display: block; position: absolute;
content: ''; width: @size;
background-color: #86909C; height: @size;
width: 6px; left: 0;
height: 6px; top: 0;
border-radius: 50%; font-size: 0;
img {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
width: 50%;
height: 50%;
}
}
.content-item-text {
margin: 0 12px;
word-break: break-all;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
} }
} }
@media screen and (max-width: 1366px) { @media screen and (max-width: 1366px) {
.content-wrapper { @size: 40px;
height: calc(100vh - 306px - 200px); .content-wrapper {
height: calc(100vh - 506px);
.content-item { .content-item {
line-height: 40px; font-size: 14px;
height: 40px; line-height: @size;
font-size: 14px; height: @size;
} padding-left: @size;
.content-item-img {
width: @size;
height: @size;
}
.content-item-text {
margin: 0 12px;
}
}
} }
} }
</style> </style>
+343 -25
View File
@@ -3,14 +3,16 @@
<a-spin :spinning="loading"> <a-spin :spinning="loading">
<!-- 一般检索和高级检索的tab切换 --> <!-- 一般检索和高级检索的tab切换 -->
<div class="tab-wrapper"> <div class="tab-wrapper">
<span class="tab-title" @click="clickGeneralSearch">一般检索</span> <!--一般检索-->
<span class="tab-title tab-title-curr">高级检索</span> <span class="tab-title" @click="clickGeneralSearch">{{ $t('dashboard.generalSearch.generalSearch') }}</span>
<a @click="handleToggleChange">{{ toggleSearchStatus ? '收起条件' : '展开条件' }}</a> <!--高级检索-->
<span class="tab-title tab-title-curr">{{ $t('dashboard.generalSearch.advancedSearch') }}</span>
<a @click="handleToggleChange">{{ toggleSearchStatus ? $t('dashboard.advancedSearch.storageConditions') : $t('dashboard.advancedSearch.unfoldConditions') }}</a>
</div> </div>
<a-divider>检索类别</a-divider> <a-divider>{{ $t('dashboard.advancedSearch.retrieveCategories') }}</a-divider>
<div class="filter-area-div" ref="filterArea"> <div class="filter-area-div" ref="filterArea">
<a-row :gutter="24" class="filter-row"> <a-row :gutter="24" class="filter-row">
<a-col :md="2" class="label-col"><span class="search_label">标准类型</span></a-col> <a-col :md="2" class="label-col"><span class="search_label">{{ $t('dashboard.advancedSearch.standardType') }}</span></a-col>
<a-col :md="18" class="option-col"> <a-col :md="18" class="option-col">
<div v-for="item in standardTypeOptions" :key="item.value" class="option-div" :class="currStandardType === item.value ? 'option-curr' : ''" @click="standardTypeChange(item.value)"> <div v-for="item in standardTypeOptions" :key="item.value" class="option-div" :class="currStandardType === item.value ? 'option-curr' : ''" @click="standardTypeChange(item.value)">
{{ item.label }} {{ item.label }}
@@ -60,9 +62,12 @@
</template> </template>
<!-- 日期区间 --> <!-- 日期区间 -->
<template v-else-if="[FieldType.DATE_SINGLE.value, FieldType.DATE_MORE.value].includes(item.fieldShowType)"> <template v-else-if="[FieldType.DATE_SINGLE.value, FieldType.DATE_MORE.value].includes(item.fieldShowType)">
<a-range-picker v-model="queryParam[item.dbFieldName]" <j-range-picker v-model="queryParam[item.dbFieldName]"
format="YYYY-MM-DD" value-format="YYYY-MM-DD" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
@change="onChange(item.dbFieldName)"></a-range-picker> @change="onChange(item.dbFieldName)"></j-range-picker>
<!--<a-range-picker v-model="queryParam[item.dbFieldName]"-->
<!-- format="YYYY-MM-DD" value-format="YYYY-MM-DD"-->
<!-- @change="onChange(item.dbFieldName)"></a-range-picker>-->
</template> </template>
<!-- 字典单选框 --> <!-- 字典单选框 -->
<template v-else-if="item.fieldShowType === FieldType.OPTION_SINGLE.value"> <template v-else-if="item.fieldShowType === FieldType.OPTION_SINGLE.value">
@@ -126,7 +131,13 @@
<a-button icon="search" type="primary" @click="searchQuery" :loading="loading" v-has="'dashboard:advancedSearch:search'">{{ $t('query') }}</a-button> <a-button icon="search" type="primary" @click="searchQuery" :loading="loading" v-has="'dashboard:advancedSearch:search'">{{ $t('query') }}</a-button>
<a-button icon="reload" type="primary" ghost style="margin-left: 8px" @click="searchReset" :loading="loading">{{ $t('reset') }}</a-button> <a-button icon="reload" type="primary" ghost style="margin-left: 8px" @click="searchReset" :loading="loading">{{ $t('reset') }}</a-button>
</div> </div>
<div class="table-wrapper"> <div class="table-operator">
<!--导出-->
<a-button icon="upload" type="primary" ghost @click="handleExportXls($t('dashboard.advancedSearch.exportName'), '.xlsx')">
{{ $t('export') }}
</a-button>
</div>
<div class="table-wrapper" v-if="currStandardType !== '4'">
<j-table <j-table
:can-drag="true" :can-drag="true"
:scroll="{x: '100%'}" :scroll="{x: '100%'}"
@@ -148,6 +159,39 @@
</j-table> </j-table>
</div> </div>
<!-- 条款列表 -->
<div v-else class="term-wrapper">
<div class="left-wrapper">
<div class="left-header">{{ $t('dashboard.advancedSearch.standard') }}</div>
<div class="left-body" v-if="dataSource && dataSource.length">
<!--<a-tree :tree-data="dataSource" :replaceFields="{title: 'standardNumber', key: 'standardId'}"></a-tree>-->
<div class="left-child" :class="{active:item.standardId === currStandardId}" v-for="item in dataSource" :key="item.standardId" @click="handleClickStandar(item)">{{item.standardNumber}}</div>
</div>
<a-list v-else :data-source="[]"></a-list>
</div>
<div class="table-wrapper">
<j-table
:can-drag="true"
:scroll="{x: '100%'}"
ref="table"
rowKey="id"
:columns="clauseColumns"
:dataSource="clauseDataSource"
:pagination="ipagination"
@change="handleTableChange">
<template v-slot:toDetail="{text, record}">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ text || text === 0 ? text : global.emptyLine }}</template>
<a v-if="text && ( record.detailFlag === undefined || record.detailFlag === true )" class="link-a" @click="filePreview(record)">{{ text }}</a>
<div v-else-if="text && record.detailFlag === false" class="table-text">{{ text }}</div>
<div v-else class="table-text">{{ global.emptyLine }}</div>
</a-tooltip>
</template>
</j-table>
</div>
</div>
</a-spin> </a-spin>
</a-card> </a-card>
</template> </template>
@@ -163,7 +207,7 @@ import {
getEnterStandardList, getEnterStandardList,
getDomesticStandardQuery, getDomesticStandardQuery,
getOverseasStandardQuery, getOverseasStandardQuery,
getEnterStandardQuery getEnterStandardQuery, getAdvancedSearchAll, getAdvancedSearchClause, exportAdvancedSearch
} from '@/api/dashboard' } from '@/api/dashboard'
import JTable from '@/components/jero/JTable' import JTable from '@/components/jero/JTable'
import { import {
@@ -177,10 +221,11 @@ import Vue from 'vue'
import { ACCESS_TOKEN } from '../../../store/mutation-types' import { ACCESS_TOKEN } from '../../../store/mutation-types'
import { previewPdf } from '../../../utils/previewPdf' import { previewPdf } from '../../../utils/previewPdf'
import { kkFilePreview } from '../../../utils/kkFilePreview' import { kkFilePreview } from '../../../utils/kkFilePreview'
import JRangePicker from '@comp/JDatePicker'
export default { export default {
name: 'AdvancedSearch', name: 'AdvancedSearch',
components: { JTable }, components: { JRangePicker, JTable },
data () { data () {
return { return {
FieldType, FieldType,
@@ -188,10 +233,14 @@ export default {
toggleSearchStatus: true, // 检索条件的展开和收起,false收缩状态 toggleSearchStatus: true, // 检索条件的展开和收起,false收缩状态
currStandardType: '1', currStandardType: '1',
standardTypeOptions: [ standardTypeOptions: [
{ label: '外来标准', value: StandardSource.FOREIGN.value }, // 全部
// { label: '国内标准法规', value: StandardSource.DOMESTIC.value }, { label: this.$t('dashboard.advancedSearch.all'), value: 'all' },
// { label: '海外标准法规', value: StandardSource.OVERSEAS.value }, // 外来标准法规
{ label: '企业标准', value: StandardSource.ENTERPRISE.value } { label: this.$t('dashboard.advancedSearch.foreignStandards'), value: StandardSource.FOREIGN.value },
// 企业标准
{ label: this.$t('dashboard.advancedSearch.enterpriseStandards'), value: StandardSource.ENTERPRISE.value },
// 条款
{ label: this.$t('dashboard.advancedSearch.term'), value: '4' }
], ],
labelCol: { labelCol: {
xl: 8, xl: 8,
@@ -208,6 +257,16 @@ export default {
categoryTreeList: [], // 组织机构下拉框数据 categoryTreeList: [], // 组织机构下拉框数据
queryParam: {}, queryParam: {},
columns: [ columns: [
{ // 序号
title: this.$t('serialNumber'),
dataIndex: '',
key: 'rowIndex',
align: 'center',
width: 80,
customRender: function (t, r, index) {
return parseInt(index) + 1
}
},
{ // 标准号 { // 标准号
title: this.$t('dashboard.advancedSearch.standardNum'), title: this.$t('dashboard.advancedSearch.standardNum'),
align: 'center', align: 'center',
@@ -222,13 +281,13 @@ export default {
dataIndex: 'standard_name', dataIndex: 'standard_name',
scopedSlots: { customRender: 'toDetail' } scopedSlots: { customRender: 'toDetail' }
}, },
{ // 发布日期 // { // 发布日期
title: this.$t('dashboard.advancedSearch.releaseDate'), // title: this.$t('dashboard.advancedSearch.releaseDate'),
align: 'center', // align: 'center',
width: 180, // width: 180,
dataIndex: 'release_date', // dataIndex: 'release_date',
scopedSlots: { customRender: 'text' } // scopedSlots: { customRender: 'text' }
}, // },
{ // 实施日期 { // 实施日期
title: this.$t('dashboard.advancedSearch.materialDate'), title: this.$t('dashboard.advancedSearch.materialDate'),
align: 'center', align: 'center',
@@ -236,6 +295,20 @@ export default {
dataIndex: 'implementation_date', dataIndex: 'implementation_date',
scopedSlots: { customRender: 'text' } scopedSlots: { customRender: 'text' }
}, },
{ // 新生产车实施日期
title: this.$t('dashboard.advancedSearch.newProduceMaterialDate'),
align: 'center',
width: 180,
dataIndex: 'new_product_impl_date',
scopedSlots: { customRender: 'text' }
},
{ // 新认证车实施日期
title: this.$t('dashboard.advancedSearch.newAttestationMaterialDate'),
align: 'center',
width: 180,
dataIndex: 'new_auth_impl_date',
scopedSlots: { customRender: 'text' }
},
{ // 标准状态 { // 标准状态
title: this.$t('dashboard.advancedSearch.standardStatus'), title: this.$t('dashboard.advancedSearch.standardStatus'),
align: 'center', align: 'center',
@@ -244,6 +317,135 @@ export default {
scopedSlots: { customRender: 'text' } scopedSlots: { customRender: 'text' }
} }
], ],
// 条款表格
clauseColumns: [
{ // 序号
title: this.$t('serialNumber'),
dataIndex: '',
key: 'rowIndex',
align: 'center',
width: 80,
customRender: function (t, r, index) {
return parseInt(index) + 1
}
},
{ // 条款号
title: this.$t('dashboard.advancedSearch.termNo'),
align: 'center',
width: 180,
dataIndex: 'item_num',
scopedSlots: { customRender: 'text' }
},
{ // 条款标题
title: this.$t('dashboard.advancedSearch.termTitle'),
align: 'center',
width: 180,
dataIndex: 'item_title',
scopedSlots: { customRender: 'text' }
},
{ // 条款内容
title: this.$t('dashboard.advancedSearch.termContent'),
align: 'center',
width: 180,
dataIndex: 'item_content',
scopedSlots: { customRender: 'text' }
},
{ // 适用零部件
title: this.$t('dashboard.advancedSearch.applicableComponents'),
align: 'center',
width: 180,
dataIndex: 'applicable_components',
scopedSlots: { customRender: 'text' }
},
{ // 新生产车实施日期
title: this.$t('dashboard.advancedSearch.newProduceVehiclesImplementationDate'),
align: 'center',
width: 180,
dataIndex: 'new_production_implementation',
scopedSlots: { customRender: 'text' }
},
{ // 新认证车实施日期
title: this.$t('dashboard.advancedSearch.newAuthVehiclesImplementationDate'),
align: 'center',
width: 180,
dataIndex: 'new_cer_implement_date',
scopedSlots: { customRender: 'text' }
},
{ // 注册日期
title: this.$t('dashboard.advancedSearch.registrationDate'),
align: 'center',
width: 180,
dataIndex: 'registration_date',
scopedSlots: { customRender: 'text' }
},
{ // 关键字
title: this.$t('dashboard.advancedSearch.keywords'),
align: 'center',
width: 180,
dataIndex: 'keywords',
scopedSlots: { customRender: 'text' }
},
{ // 责任部门
title: this.$t('dashboard.advancedSearch.responsibleDepartment'),
align: 'center',
width: 180,
dataIndex: 'responsible_department',
scopedSlots: { customRender: 'text' }
},
{ // 责任部门专业模块
title: this.$t('dashboard.advancedSearch.responsibleDepartmentModule'),
align: 'center',
width: 180,
dataIndex: 'responsible_module',
scopedSlots: { customRender: 'text' }
},
{ // 关联部门
title: this.$t('dashboard.advancedSearch.relatedDepartments'),
align: 'center',
width: 180,
dataIndex: 'related_department',
scopedSlots: { customRender: 'text' }
},
{ // 关联部门专业模块
title: this.$t('dashboard.advancedSearch.relatedDepartmentModule'),
align: 'center',
width: 180,
dataIndex: 'related_module',
scopedSlots: { customRender: 'text' }
},
{ // 适用车型
title: this.$t('dashboard.advancedSearch.applications'),
align: 'center',
width: 180,
dataIndex: 'applications',
scopedSlots: { customRender: 'text' }
},
{ // 动力类型
title: this.$t('dashboard.advancedSearch.powerType'),
align: 'center',
width: 180,
dataIndex: 'power_type',
scopedSlots: { customRender: 'text' }
},
{ // 专业领域
title: this.$t('dashboard.advancedSearch.professionalField'),
align: 'center',
width: 180,
dataIndex: 'domain_area',
scopedSlots: { customRender: 'text' }
},
{ // 配置需求
title: this.$t('dashboard.advancedSearch.configurationRequirements'),
align: 'center',
width: 180,
dataIndex: 'configuration_requirements',
scopedSlots: { customRender: 'text' }
}
],
// 条款数据
clauseDataSource: [],
// 条款中当前选择标准
currStandardId: '',
dataSource: [], dataSource: [],
/* 分页参数 */ /* 分页参数 */
ipagination: { ipagination: {
@@ -284,6 +486,16 @@ export default {
this.getDataListFunc = getEnterStandardList this.getDataListFunc = getEnterStandardList
this.getFormFunc = getEnterpriseStandardAddForm this.getFormFunc = getEnterpriseStandardAddForm
this.getDocumentInfoFunc = getEnterpriseStandardInfoById this.getDocumentInfoFunc = getEnterpriseStandardInfoById
} else if (val === 'all') {
this.getQueryConditionFunc = getDomesticStandardQuery
this.getDataListFunc = getAdvancedSearchAll
this.getFormFunc = getEnterpriseStandardAddForm
this.getDocumentInfoFunc = getEnterpriseStandardInfoById
} else if (val === '4') {
this.getQueryConditionFunc = getDomesticStandardQuery
this.getDataListFunc = getAdvancedSearchClause
this.getFormFunc = getEnterpriseStandardAddForm
this.getDocumentInfoFunc = getEnterpriseStandardInfoById
} }
this.getSearch() this.getSearch()
// this.loadData(1) // this.loadData(1)
@@ -297,6 +509,55 @@ export default {
this.queryParam.standard_state = this.defaultStandardStatus this.queryParam.standard_state = this.defaultStandardStatus
}, },
methods: { methods: {
// 导出
handleExportXls (fileName, fileSuffix = '.xls') {
if (!fileName || typeof fileName !== 'string') {
fileName = '导出文件'
}
const param = this.getQueryParams()
param.standardType = this.currStandardType
if (this.selectedRowKeys && this.selectedRowKeys.length > 0) {
param.selections = this.selectedRowKeys.join(',')
}
// 加一个大的提示
const modalLoading = this.$info({
title: this.$t('tips'),
content: <span>{this.$t('exportTip')}
<a-spin size="small" /></span>,
keyboard: false
})
// 把知道了这个按钮去掉
this.$nextTick(() => {
document.getElementsByClassName('ant-modal-confirm-btns')[0].style = 'display:none'
})
exportAdvancedSearch(param).then((data) => {
if (!data) {
this.$message.warning(this.$t('fileDownloadFail'))
return
}
if (typeof window.navigator.msSaveBlob !== 'undefined') {
window.navigator.msSaveBlob(new Blob([data], { type: 'application/vnd.ms-excel' }), fileName + fileSuffix)
} else {
const url = window.URL.createObjectURL(new Blob([data], { type: 'application/vnd.ms-excel' }))
const link = document.createElement('a')
link.style.display = 'none'
link.href = url
link.setAttribute('download', fileName + fileSuffix)
document.body.appendChild(link)
link.click()
document.body.removeChild(link) // 下载完成移除元素
window.URL.revokeObjectURL(url) // 释放掉blob对象
}
}).finally(() => {
// 销毁这个提示
modalLoading.destroy()
})
},
// 条款中点击标准,替换列表数据
handleClickStandar (standard) {
this.currStandardId = standard.standardId
this.clauseDataSource = standard.clauseList
},
// 点击一般检索 // 点击一般检索
clickGeneralSearch () { clickGeneralSearch () {
this.$router.push({ this.$router.push({
@@ -362,6 +623,10 @@ export default {
let manuscriptName = '' // 记录找到哪个稿件就找到文件了 let manuscriptName = '' // 记录找到哪个稿件就找到文件了
// 按照过程稿件顺序寻找文件 // 按照过程稿件顺序寻找文件
for (const formItem of processManuscript) { for (const formItem of processManuscript) {
// 只查看发布稿的文件
if (formItem.dbFieldName !== 'publish_of_original') {
continue
}
const keyId = formItem.dbFieldName const keyId = formItem.dbFieldName
const keyName = formItem.dbFieldName + '_dictText' const keyName = formItem.dbFieldName + '_dictText'
if (!detailData[keyId]) continue if (!detailData[keyId]) continue
@@ -486,8 +751,12 @@ export default {
if (!this.getQueryConditionFunc || typeof this.getQueryConditionFunc !== 'function') { if (!this.getQueryConditionFunc || typeof this.getQueryConditionFunc !== 'function') {
return return
} }
const params = { const params = {}
module: this.currStandardType // 获取查询条件列表,全部、外部、条款就传moduleValue,企标module
if (this.getQueryConditionFunc === getDomesticStandardQuery) {
params.moduleValue = this.currStandardType
} else {
params.module = this.currStandardType
} }
this.loading = true this.loading = true
this.getQueryConditionFunc(params).then((res) => { this.getQueryConditionFunc(params).then((res) => {
@@ -495,7 +764,9 @@ export default {
this.searchList = res.result this.searchList = res.result
// 标准状态特殊处理成多选 // 标准状态特殊处理成多选
const standardStateIndex = this.searchList.findIndex(item => item.dbFieldName === 'standard_state') const standardStateIndex = this.searchList.findIndex(item => item.dbFieldName === 'standard_state')
this.searchList[standardStateIndex].fieldShowType = FieldType.OPTION_MORE.value if (standardStateIndex !== -1) {
this.searchList[standardStateIndex].fieldShowType = FieldType.OPTION_MORE.value
}
this.getOptionsData() // 获取下拉数据 this.getOptionsData() // 获取下拉数据
} }
}).finally(() => { }).finally(() => {
@@ -552,6 +823,10 @@ export default {
this.getDataListFunc(params).then((res) => { this.getDataListFunc(params).then((res) => {
if (res.success) { if (res.success) {
this.dataSource = res.result.records || res.result this.dataSource = res.result.records || res.result
// 标准类型是条款时,默认回显第一个标准的条款
if (this.dataSource.length && this.currStandardType === '4') {
this.handleClickStandar(this.dataSource[0])
}
if (res.result.total) { if (res.result.total) {
this.ipagination.total = res.result.total this.ipagination.total = res.result.total
} else { } else {
@@ -596,6 +871,8 @@ export default {
this.queryParam.standard_state = this.defaultStandardStatus this.queryParam.standard_state = this.defaultStandardStatus
} }
this.dataSource = [] this.dataSource = []
this.clauseDataSource = []
this.currStandardId = ''
this.ipagination.total = 0 this.ipagination.total = 0
} }
} }
@@ -676,6 +953,47 @@ export default {
} }
.table-wrapper { .table-wrapper {
margin-top: 20px; //margin-top: 20px;
}
// 条款
.term-wrapper {
display: flex;
.left-wrapper {
width: 200px;
.left-header {
margin-bottom: 4px;
background-color: rgba(0, 100, 250, 0.08);
height: 40px;
padding: 10px 20px;
border-radius: 8px 8px 0 0;
font-size: 16px;
font-weight: bold;
}
.left-body {
//max-height: 300px;
//overflow-y: auto;
.left-child {
cursor: pointer;
padding: 10px 20px;
border-bottom: 1px solid rgba(0, 100, 250, 0.08);
transition: all .3s;
&:hover,
&.active {
background-color: rgba(0, 100, 250, 0.08);
}
}
}
}
.table-wrapper {
margin-left: 20px;
flex: auto;
width: calc(100% - 220px);
}
} }
</style> </style>
+13 -9
View File
@@ -19,7 +19,7 @@
<!-- 首页 --> <!-- 首页 -->
<a class="search-link" @click="clickHomePage">{{ $t('dashboard.generalSearch.homePage') }}</a> <a class="search-link" @click="clickHomePage">{{ $t('dashboard.generalSearch.homePage') }}</a>
<!-- 检索历史 --> <!-- 检索历史 -->
<a class="search-link" @click="clickSearchHistory" v-has="'dashboard:generalSearch:searchHistory'">{{ $t('dashboard.generalSearch.searchHistory') }}</a> <!--<a class="search-link" @click="clickSearchHistory" v-has="'dashboard:generalSearch:searchHistory'">{{ $t('dashboard.generalSearch.searchHistory') }}</a>-->
</div> </div>
</div> </div>
<!-- 筛选区域 --> <!-- 筛选区域 -->
@@ -35,7 +35,7 @@
<a-col :md="4" class="operator-col"> <a-col :md="4" class="operator-col">
<div class="right-btns"> <div class="right-btns">
<!-- 导出 --> <!-- 导出 -->
<a-button icon="upload" type="primary" ghost @click="handleExportXls($t('dashboard.generalSearch.exportName'))"> <a-button icon="upload" type="primary" ghost @click="handleExportXls($t('dashboard.generalSearch.exportName'), '.xlsx')">
{{ $t('export') }} {{ $t('export') }}
</a-button> </a-button>
</div> </div>
@@ -178,21 +178,21 @@ export default {
toggleSearchStatus: false, // 检索条件收缩还是展开, false收缩状态 toggleSearchStatus: false, // 检索条件收缩还是展开, false收缩状态
// 检索方式可选择项 // 检索方式可选择项
retrievalModeOptions: [ retrievalModeOptions: [
{ key: '1', label: '全文检索' }, { key: '1', label: this.$t('dashboard.retrieval.fullSearch') },
{ key: '2', label: '标题检索' } { key: '2', label: this.$t('dashboard.retrieval.titleSearch') }
], ],
retrievalModeCurrent: '1', // 检索方式当前选中项 retrievalModeCurrent: '1', // 检索方式当前选中项
// 资源类型可选择项 // 资源类型可选择项
resourceTypeOptions: [ resourceTypeOptions: [
{ key: 'all', label: '全部' }, { key: 'all', label: this.$t('dashboard.generalSearch.all') },
{ key: '1', label: '外来标准法规' }, { key: '1', label: this.$t('dashboard.generalSearch.foreignStandard') },
{ key: '3', label: '企业标准' } { key: '3', label: this.$t('dashboard.generalSearch.enterpriseStandard') }
], ],
resourceTypeCurrent: 'all', // 资源类型当前选中项 resourceTypeCurrent: 'all', // 资源类型当前选中项
// 标准状态设置可选择项 // 标准状态设置可选择项
standardStatusSetOptions: [ standardStatusSetOptions: [
{ key: '1', label: '不包含废止标准' }, { key: '1', label: this.$t('dashboard.generalSearch.notIncludeAbolishedStandard') },
{ key: '2', label: '包含废止标准' } { key: '2', label: this.$t('dashboard.generalSearch.includeAbolishedStandard') }
], ],
standardStatusSetCurrent: '1', // 标准状态设置当前选中项 standardStatusSetCurrent: '1', // 标准状态设置当前选中项
selectOptions: {}, // 其他筛选条件 selectOptions: {}, // 其他筛选条件
@@ -632,6 +632,10 @@ export default {
let manuscriptName = '' // 记录找到哪个稿件就找到文件了 let manuscriptName = '' // 记录找到哪个稿件就找到文件了
// 按照过程稿件顺序寻找文件 // 按照过程稿件顺序寻找文件
for (const formItem of processManuscript) { for (const formItem of processManuscript) {
// 只查看发布稿的文件
if (formItem.dbFieldName !== 'publish_of_original') {
continue
}
const keyId = formItem.dbFieldName const keyId = formItem.dbFieldName
const keyName = formItem.dbFieldName + '_dictText' const keyName = formItem.dbFieldName + '_dictText'
if (!detailData[keyId]) continue if (!detailData[keyId]) continue