5 changed files with 1449 additions and 2 deletions
-
19src/api/erf/erf.js
-
750src/views/modules/erf/approvalCycleReport.vue
-
2src/views/modules/erf/components/expApplyForm.vue
-
2src/views/modules/erf/expApplyList.vue
-
678src/views/modules/erf/sampleCycleReport.vue
@ -0,0 +1,750 @@ |
|||||
|
<template> |
||||
|
<div class="mod-config approval-cycle-report-page"> |
||||
|
<!-- 查询条件表单 --> |
||||
|
<el-form :inline="true" label-position="top" class="query-form"> |
||||
|
<el-form-item label="申请单号"> |
||||
|
<el-input |
||||
|
v-model="queryHeaderData.applyNo" |
||||
|
placeholder="请输入申请单号" |
||||
|
clearable |
||||
|
style="width: 150px"> |
||||
|
</el-input> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="事业部"> |
||||
|
<el-select |
||||
|
v-model="queryHeaderData.buNo" |
||||
|
placeholder="请选择" |
||||
|
clearable |
||||
|
style="width: 120px"> |
||||
|
<el-option label="全部" value=""></el-option> |
||||
|
<el-option label="RFID" value="RFID"></el-option> |
||||
|
<el-option label="RF" value="RF"></el-option> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="试验类型"> |
||||
|
<el-select |
||||
|
v-model="queryHeaderData.experimentType" |
||||
|
placeholder="请选择" |
||||
|
clearable |
||||
|
style="width: 120px"> |
||||
|
<el-option label="全部" value=""></el-option> |
||||
|
<el-option label="High Risk" value="High Risk"></el-option> |
||||
|
<el-option label="Low Risk" value="Low Risk"></el-option> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="申请人"> |
||||
|
<el-input |
||||
|
v-model="queryHeaderData.creatorName" |
||||
|
placeholder="请输入申请人姓名" |
||||
|
clearable |
||||
|
style="width: 120px"> |
||||
|
</el-input> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="发起日"> |
||||
|
<el-date-picker |
||||
|
v-model="queryHeaderData.submitStartDate" |
||||
|
type="date" |
||||
|
format="yyyy-MM-dd" |
||||
|
value-format="yyyy-MM-dd" |
||||
|
placeholder="开始日期" |
||||
|
style="width: 140px"> |
||||
|
</el-date-picker> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="至"> |
||||
|
<el-date-picker |
||||
|
v-model="queryHeaderData.submitEndDate" |
||||
|
type="date" |
||||
|
format="yyyy-MM-dd" |
||||
|
value-format="yyyy-MM-dd" |
||||
|
placeholder="结束日期" |
||||
|
style="width: 140px"> |
||||
|
</el-date-picker> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="审批完成日"> |
||||
|
<el-date-picker |
||||
|
v-model="queryHeaderData.allApproveStartDate" |
||||
|
type="date" |
||||
|
format="yyyy-MM-dd" |
||||
|
value-format="yyyy-MM-dd" |
||||
|
placeholder="开始日期" |
||||
|
style="width: 140px"> |
||||
|
</el-date-picker> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="至"> |
||||
|
<el-date-picker |
||||
|
v-model="queryHeaderData.allApproveEndDate" |
||||
|
type="date" |
||||
|
format="yyyy-MM-dd" |
||||
|
value-format="yyyy-MM-dd" |
||||
|
placeholder="结束日期" |
||||
|
style="width: 140px"> |
||||
|
</el-date-picker> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="审批周期(天)"> |
||||
|
<el-input |
||||
|
v-model="queryHeaderData.cycleDaysMin" |
||||
|
placeholder="最小值" |
||||
|
style="width: 90px"> |
||||
|
</el-input> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="至"> |
||||
|
<el-input |
||||
|
v-model="queryHeaderData.cycleDaysMax" |
||||
|
placeholder="最大值" |
||||
|
style="width: 90px"> |
||||
|
</el-input> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label=" " style="margin-top: -11px"> |
||||
|
<el-button @click="getDataList('Y')" type="primary" class="search-btn" plain>查询</el-button> |
||||
|
<el-button @click="resetQuery()" plain class="reset-btn">重置</el-button> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
|
||||
|
<!-- 统计摘要 --> |
||||
|
<div class="summary-bar" v-if="dataList.length > 0"> |
||||
|
<span>共 <b>{{ totalPage }}</b> 条记录,</span> |
||||
|
<span>已全部审批完成 <b>{{ allApprovedCount }}</b> 条,</span> |
||||
|
<span>审批中 <b>{{ totalPage - allApprovedCount }}</b> 条</span> |
||||
|
<span v-if="avgCycleDays !== null">,已完成平均审批周期 <b>{{ avgCycleDays }}</b> 天</span> |
||||
|
</div> |
||||
|
|
||||
|
<!-- 数据表格 --> |
||||
|
<el-table |
||||
|
ref="dataTable" |
||||
|
@row-click="handleRowClick" |
||||
|
highlight-current-row |
||||
|
:data="dataList" |
||||
|
v-loading="dataListLoading" |
||||
|
border |
||||
|
class="data-table" |
||||
|
style="width: 100%;" |
||||
|
:height="tableHeight"> |
||||
|
|
||||
|
<el-table-column |
||||
|
prop="applyNo" |
||||
|
label="申请单号" |
||||
|
width="100" |
||||
|
align="center" |
||||
|
header-align="center" |
||||
|
show-overflow-tooltip> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column |
||||
|
prop="title" |
||||
|
label="试验名称" |
||||
|
min-width="150" |
||||
|
align="left" |
||||
|
header-align="center" |
||||
|
show-overflow-tooltip> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column |
||||
|
prop="buName" |
||||
|
label="事业部" |
||||
|
width="60" |
||||
|
align="center" |
||||
|
header-align="center"> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column |
||||
|
prop="experimentType" |
||||
|
label="试验类型" |
||||
|
width="80" |
||||
|
align="center" |
||||
|
header-align="center"> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column |
||||
|
prop="creatorName" |
||||
|
label="申请人" |
||||
|
width="70" |
||||
|
align="center" |
||||
|
header-align="center"> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column |
||||
|
prop="submitTime" |
||||
|
label="发起日" |
||||
|
width="100" |
||||
|
align="center" |
||||
|
header-align="center"> |
||||
|
<template slot-scope="scope"> |
||||
|
{{ formatDate(scope.row.submitTime) }} |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<!-- 技术经理审批 --> |
||||
|
<el-table-column |
||||
|
label="技术经理审批" |
||||
|
header-align="center" |
||||
|
align="center"> |
||||
|
<el-table-column |
||||
|
prop="techManagerName" |
||||
|
label="审批人" |
||||
|
width="70" |
||||
|
align="center" |
||||
|
header-align="center" |
||||
|
show-overflow-tooltip> |
||||
|
<template slot-scope="scope"> |
||||
|
{{ scope.row.techManagerName || '-' }} |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column |
||||
|
prop="techApproveTime" |
||||
|
label="审批时间" |
||||
|
width="150" |
||||
|
align="center" |
||||
|
header-align="center"> |
||||
|
<template slot-scope="scope"> |
||||
|
<span :class="scope.row.techApproveTime ? '' : 'pending-text'"> |
||||
|
{{ scope.row.techApproveTime || '待审批' }} |
||||
|
</span> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<!-- 生产经理审批 --> |
||||
|
<el-table-column |
||||
|
label="生产经理审批" |
||||
|
header-align="center" |
||||
|
align="center"> |
||||
|
<el-table-column |
||||
|
prop="prodManagerName" |
||||
|
label="审批人" |
||||
|
width="70" |
||||
|
align="center" |
||||
|
header-align="center" |
||||
|
show-overflow-tooltip> |
||||
|
<template slot-scope="scope"> |
||||
|
{{ scope.row.prodManagerName || '-' }} |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column |
||||
|
prop="prodApproveTime" |
||||
|
label="审批时间" |
||||
|
width="150" |
||||
|
align="center" |
||||
|
header-align="center"> |
||||
|
<template slot-scope="scope"> |
||||
|
<span :class="scope.row.prodApproveTime ? '' : 'pending-text'"> |
||||
|
{{ scope.row.prodApproveTime || '待审批' }} |
||||
|
</span> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<!-- 质量经理审批 --> |
||||
|
<el-table-column |
||||
|
label="质量经理审批" |
||||
|
header-align="center" |
||||
|
align="center"> |
||||
|
<el-table-column |
||||
|
prop="qualManagerName" |
||||
|
label="审批人" |
||||
|
width="70" |
||||
|
align="center" |
||||
|
header-align="center" |
||||
|
show-overflow-tooltip> |
||||
|
<template slot-scope="scope"> |
||||
|
{{ scope.row.qualManagerName || '-' }} |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column |
||||
|
prop="qualApproveTime" |
||||
|
label="审批时间" |
||||
|
width="150" |
||||
|
align="center" |
||||
|
header-align="center"> |
||||
|
<template slot-scope="scope"> |
||||
|
<span :class="scope.row.qualApproveTime ? '' : 'pending-text'"> |
||||
|
{{ scope.row.qualApproveTime || '待审批' }} |
||||
|
</span> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column |
||||
|
prop="allApproveTime" |
||||
|
label="审批完成时间" |
||||
|
width="150" |
||||
|
align="center" |
||||
|
header-align="center"> |
||||
|
<template slot-scope="scope"> |
||||
|
<span v-if="scope.row.allApproveTime"> |
||||
|
{{ scope.row.allApproveTime }} |
||||
|
</span> |
||||
|
<span v-else class="pending-text">审批中</span> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column |
||||
|
prop="approvalCycleDays" |
||||
|
label="审批周期(天)" |
||||
|
width="130" |
||||
|
align="center" |
||||
|
header-align="center"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-tag |
||||
|
v-if="scope.row.approvalCycleDays !== null && scope.row.approvalCycleDays !== undefined" |
||||
|
:type="getCycleDaysTagType(scope.row.approvalCycleDays)" |
||||
|
size="small"> |
||||
|
{{ scope.row.approvalCycleDays }} 天 |
||||
|
</el-tag> |
||||
|
<span v-else class="pending-text">-</span> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column |
||||
|
prop="isAllApproved" |
||||
|
label="审批状态" |
||||
|
width="100" |
||||
|
align="center" |
||||
|
header-align="center"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-tag |
||||
|
:type="scope.row.isAllApproved ? 'success' : 'warning'" |
||||
|
size="small"> |
||||
|
{{ scope.row.isAllApproved ? '已全部审批' : '审批中' }} |
||||
|
</el-tag> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
|
||||
|
<!-- 分页组件 --> |
||||
|
<el-pagination |
||||
|
@size-change="sizeChangeHandle" |
||||
|
@current-change="currentChangeHandle" |
||||
|
:current-page="pageIndex" |
||||
|
:page-sizes="[10, 20, 50, 100]" |
||||
|
:page-size="pageSize" |
||||
|
:total="totalPage" |
||||
|
layout="total, sizes, prev, pager, next, jumper" |
||||
|
style="margin-top: 20px; text-align: right;"> |
||||
|
</el-pagination> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { getApprovalCycleReportList } from '@/api/erf/erf' |
||||
|
|
||||
|
export default { |
||||
|
name: 'ApprovalCycleReport', |
||||
|
|
||||
|
data() { |
||||
|
return { |
||||
|
// 查询条件 |
||||
|
queryHeaderData: { |
||||
|
applyNo: '', |
||||
|
buNo: '', |
||||
|
experimentType: '', |
||||
|
creatorName: '', |
||||
|
submitStartDate: '', |
||||
|
submitEndDate: '', |
||||
|
allApproveStartDate: '', |
||||
|
allApproveEndDate: '', |
||||
|
cycleDaysMin: null, |
||||
|
cycleDaysMax: null, |
||||
|
status: '', |
||||
|
page: 1, |
||||
|
limit: 20 |
||||
|
}, |
||||
|
|
||||
|
// 数据列表 |
||||
|
dataList: [], |
||||
|
|
||||
|
// 分页参数 |
||||
|
pageIndex: 1, |
||||
|
pageSize: 20, |
||||
|
totalPage: 0, |
||||
|
dataListLoading: false, |
||||
|
|
||||
|
// 表格高度 |
||||
|
tableHeight: 500 |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
computed: { |
||||
|
/** |
||||
|
* 已全部审批完成的记录数 |
||||
|
*/ |
||||
|
allApprovedCount() { |
||||
|
return this.dataList.filter(item => item.isAllApproved).length |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 已完成记录的平均审批周期(天) |
||||
|
*/ |
||||
|
avgCycleDays() { |
||||
|
const completedList = this.dataList.filter( |
||||
|
item => item.isAllApproved && item.approvalCycleDays !== null |
||||
|
) |
||||
|
if (completedList.length === 0) { |
||||
|
return null |
||||
|
} |
||||
|
const total = completedList.reduce((sum, item) => sum + item.approvalCycleDays, 0) |
||||
|
return Math.round(total / completedList.length) |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
activated() { |
||||
|
this.getDataList() |
||||
|
this.calculateTableHeight() |
||||
|
}, |
||||
|
|
||||
|
mounted() { |
||||
|
this.calculateTableHeight() |
||||
|
window.addEventListener('resize', this.calculateTableHeight) |
||||
|
}, |
||||
|
|
||||
|
beforeDestroy() { |
||||
|
window.removeEventListener('resize', this.calculateTableHeight) |
||||
|
}, |
||||
|
|
||||
|
methods: { |
||||
|
/** |
||||
|
* 获取审批周期报表列表 |
||||
|
* |
||||
|
* @param {string} flag - 'Y'表示重置到第一页 |
||||
|
*/ |
||||
|
getDataList(flag) { |
||||
|
if (flag === 'Y') { |
||||
|
this.pageIndex = 1 |
||||
|
} |
||||
|
|
||||
|
this.queryHeaderData.page = this.pageIndex |
||||
|
this.queryHeaderData.limit = this.pageSize |
||||
|
|
||||
|
this.dataListLoading = true |
||||
|
|
||||
|
getApprovalCycleReportList(this.queryHeaderData).then(({data}) => { |
||||
|
this.dataListLoading = false |
||||
|
if (data && data.code === 0) { |
||||
|
this.dataList = data.page.list || [] |
||||
|
this.totalPage = data.page.totalCount || 0 |
||||
|
} else { |
||||
|
this.dataList = [] |
||||
|
this.totalPage = 0 |
||||
|
this.$message.error(data.msg || '查询失败') |
||||
|
} |
||||
|
}).catch(error => { |
||||
|
this.dataListLoading = false |
||||
|
this.$message.error('查询异常') |
||||
|
}) |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 重置查询条件 |
||||
|
*/ |
||||
|
resetQuery() { |
||||
|
this.queryHeaderData = { |
||||
|
applyNo: '', |
||||
|
buNo: '', |
||||
|
experimentType: '', |
||||
|
creatorName: '', |
||||
|
submitStartDate: '', |
||||
|
submitEndDate: '', |
||||
|
allApproveStartDate: '', |
||||
|
allApproveEndDate: '', |
||||
|
cycleDaysMin: null, |
||||
|
cycleDaysMax: null, |
||||
|
status: '', |
||||
|
page: 1, |
||||
|
limit: 20 |
||||
|
} |
||||
|
this.getDataList('Y') |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 行点击事件 |
||||
|
*/ |
||||
|
handleRowClick(row) { |
||||
|
this.$refs.dataTable.setCurrentRow(row) |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 分页大小改变 |
||||
|
*/ |
||||
|
sizeChangeHandle(val) { |
||||
|
this.pageSize = val |
||||
|
this.pageIndex = 1 |
||||
|
this.getDataList() |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 当前页改变 |
||||
|
*/ |
||||
|
currentChangeHandle(val) { |
||||
|
this.pageIndex = val |
||||
|
this.getDataList() |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 计算表格高度 |
||||
|
*/ |
||||
|
calculateTableHeight() { |
||||
|
this.$nextTick(() => { |
||||
|
const windowHeight = window.innerHeight |
||||
|
const queryFormHeight = 160 |
||||
|
const paginationHeight = 60 |
||||
|
const summaryBarHeight = 40 |
||||
|
const otherHeight = 100 |
||||
|
this.tableHeight = windowHeight - queryFormHeight - paginationHeight - summaryBarHeight - otherHeight |
||||
|
}) |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 格式化日期显示(只显示日期部分,不显示时间) |
||||
|
* |
||||
|
* @param {string|Date} dateTime - 日期时间字符串或Date对象 |
||||
|
* @returns {string} 格式化后的日期字符串 |
||||
|
*/ |
||||
|
formatDate(dateTime) { |
||||
|
if (!dateTime) { |
||||
|
return '' |
||||
|
} |
||||
|
const str = String(dateTime) |
||||
|
// 截取日期部分(yyyy-MM-dd) |
||||
|
return str.substring(0, 10) |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 根据审批周期天数获取标签颜色 |
||||
|
* 1天以内:绿色(高效) |
||||
|
* 0-2天:蓝色(正常) |
||||
|
* 3-7天:橙色(偏慢) |
||||
|
* 7天以上:红色(过慢) |
||||
|
* |
||||
|
* @param {number} days - 审批周期天数 |
||||
|
* @returns {string} Element UI tag类型 |
||||
|
*/ |
||||
|
getCycleDaysTagType(days) { |
||||
|
if (days <= 1) { |
||||
|
return 'success' |
||||
|
} else if (days <= 2) { |
||||
|
return 'primary' |
||||
|
} else if (days <= 7) { |
||||
|
return 'warning' |
||||
|
} else { |
||||
|
return 'danger' |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style scoped> |
||||
|
.approval-cycle-report-page { |
||||
|
padding: 0; |
||||
|
} |
||||
|
|
||||
|
.query-form { |
||||
|
margin-bottom: 10px; |
||||
|
} |
||||
|
|
||||
|
.summary-bar { |
||||
|
margin-bottom: 10px; |
||||
|
padding: 8px 12px; |
||||
|
background-color: #f0f9ff; |
||||
|
border: 1px solid #b3d8ff; |
||||
|
border-radius: 4px; |
||||
|
font-size: 13px; |
||||
|
color: #606266; |
||||
|
} |
||||
|
|
||||
|
.summary-bar b { |
||||
|
color: #409EFF; |
||||
|
font-size: 15px; |
||||
|
} |
||||
|
|
||||
|
.pending-text { |
||||
|
color: #C0C4CC; |
||||
|
font-style: italic; |
||||
|
} |
||||
|
|
||||
|
.data-table { |
||||
|
background-color: #fff; |
||||
|
} |
||||
|
|
||||
|
/* 数据表格样式 */ |
||||
|
.data-table { |
||||
|
background-color: #FFFFFF; |
||||
|
border-radius: 4px; |
||||
|
} |
||||
|
|
||||
|
.data-table >>> .el-table__header-wrapper th { |
||||
|
background-color: #F5F7FA !important; |
||||
|
color: #333333; |
||||
|
font-weight: 600; |
||||
|
font-size: 16px; |
||||
|
border-color: #EBEEF5; |
||||
|
padding: 10px 0; |
||||
|
height: auto; |
||||
|
} |
||||
|
|
||||
|
/* 固定列表头也使用相同背景色 */ |
||||
|
.data-table >>> .el-table__fixed-header-wrapper th { |
||||
|
background-color: #F5F7FA !important; |
||||
|
color: #333333; |
||||
|
font-weight: 600; |
||||
|
font-size: 16px; |
||||
|
border-color: #EBEEF5; |
||||
|
padding: 8px 0; |
||||
|
height: auto; |
||||
|
} |
||||
|
|
||||
|
.data-table >>> .el-table__header-wrapper .cell { |
||||
|
text-align: center; |
||||
|
padding: 0 10px; |
||||
|
//line-height: 2; |
||||
|
overflow: hidden; |
||||
|
text-overflow: ellipsis; |
||||
|
white-space: nowrap; |
||||
|
font-size: 13px !important; |
||||
|
} |
||||
|
|
||||
|
.data-table >>> .el-table__fixed-header-wrapper .cell { |
||||
|
text-align: center; |
||||
|
padding: 0 10px; |
||||
|
//line-height: 2; |
||||
|
overflow: hidden; |
||||
|
text-overflow: ellipsis; |
||||
|
white-space: nowrap; |
||||
|
} |
||||
|
|
||||
|
.data-table >>> .el-table__body-wrapper td { |
||||
|
border-color: #EBEEF5; |
||||
|
padding: 8px 0; |
||||
|
font-size: 16px; |
||||
|
color: #606266; |
||||
|
height: auto; |
||||
|
} |
||||
|
|
||||
|
/* 固定列数据行也使用相同样式 */ |
||||
|
.data-table >>> .el-table__fixed-body-wrapper td { |
||||
|
border-color: #EBEEF5; |
||||
|
padding: 8px 0; |
||||
|
font-size: 16px; |
||||
|
color: #606266; |
||||
|
height: auto; |
||||
|
} |
||||
|
|
||||
|
.data-table >>> .el-table__body-wrapper .cell { |
||||
|
padding: 0 10px; |
||||
|
//line-height: 2; |
||||
|
overflow: hidden; |
||||
|
text-overflow: ellipsis; |
||||
|
white-space: nowrap; |
||||
|
font-size: 13px !important; |
||||
|
line-height: 18px; |
||||
|
height: 18px; |
||||
|
} |
||||
|
|
||||
|
.data-table >>> .el-table__fixed-body-wrapper .cell { |
||||
|
padding: 0 10px; |
||||
|
//line-height: 2; |
||||
|
overflow: hidden; |
||||
|
text-overflow: ellipsis; |
||||
|
white-space: nowrap; |
||||
|
} |
||||
|
|
||||
|
/* 操作列链接样式 - 统一蓝色样式 */ |
||||
|
.data-table >>> .el-table__body-wrapper a { |
||||
|
text-decoration: none; |
||||
|
cursor: pointer; |
||||
|
font-size: 13px; |
||||
|
color: #409EFF !important; |
||||
|
white-space: nowrap; |
||||
|
} |
||||
|
|
||||
|
.data-table >>> .el-table__body-wrapper a:hover { |
||||
|
color: #66B1FF !important; |
||||
|
text-decoration: underline; |
||||
|
} |
||||
|
|
||||
|
.data-table >>> .el-table__body tr:hover > td { |
||||
|
background-color: #F5F7FA !important; |
||||
|
} |
||||
|
|
||||
|
.data-table >>> .el-table__body tr.current-row > td { |
||||
|
background-color: #ECF5FF !important; |
||||
|
} |
||||
|
.data-table >>> .el-tag--small { |
||||
|
height: 18px; |
||||
|
line-height: 16px; |
||||
|
} |
||||
|
/* 查询表单样式 */ |
||||
|
.query-form { |
||||
|
background-color: #FFFFFF; |
||||
|
padding: 15px 15px 5px 15px; |
||||
|
border-radius: 4px; |
||||
|
} |
||||
|
|
||||
|
.query-form >>> .el-form-item__label { |
||||
|
color: #333333; |
||||
|
font-size: 13px; |
||||
|
padding-bottom: 5px; |
||||
|
} |
||||
|
|
||||
|
.query-form >>> .el-input__inner { |
||||
|
height: 32px; |
||||
|
line-height: 32px; |
||||
|
border-radius: 4px; |
||||
|
border: 1px solid #DCDFE6; |
||||
|
font-size: 13px; |
||||
|
} |
||||
|
|
||||
|
.query-form >>> .el-input__inner::placeholder { |
||||
|
color: #C0C4CC; |
||||
|
font-size: 13px; |
||||
|
} |
||||
|
|
||||
|
.query-form >>> .el-select .el-input__inner { |
||||
|
border-radius: 4px; |
||||
|
} |
||||
|
|
||||
|
.query-form >>> .el-date-editor .el-input__inner { |
||||
|
border-radius: 4px; |
||||
|
} |
||||
|
/* 按钮样式 - 扁平化风格 */ |
||||
|
.query-form >>> .el-button { |
||||
|
height: 32px; |
||||
|
padding: 0 15px; |
||||
|
font-size: 13px; |
||||
|
border-radius: 4px; |
||||
|
} |
||||
|
/* 查询按钮 - 蓝色扁平 */ |
||||
|
.search-btn { |
||||
|
background-color: #ECF5FF; |
||||
|
border-color: #B3D8FF; |
||||
|
color: #409EFF; |
||||
|
} |
||||
|
|
||||
|
.search-btn:hover { |
||||
|
background-color: #409EFF; |
||||
|
border-color: #409EFF; |
||||
|
color: #FFFFFF; |
||||
|
} |
||||
|
|
||||
|
/* 重置按钮 - 灰色扁平 */ |
||||
|
.reset-btn { |
||||
|
background-color: #F5F7FA; |
||||
|
border-color: #D3D4D6; |
||||
|
color: #606266; |
||||
|
} |
||||
|
|
||||
|
.reset-btn:hover { |
||||
|
background-color: #909399; |
||||
|
border-color: #909399; |
||||
|
color: #FFFFFF; |
||||
|
} |
||||
|
</style> |
||||
@ -0,0 +1,678 @@ |
|||||
|
<template> |
||||
|
<div class="mod-config sample-cycle-report-page"> |
||||
|
<!-- 查询条件表单 --> |
||||
|
<el-form :inline="true" label-position="top" class="query-form"> |
||||
|
<el-form-item label="申请单号"> |
||||
|
<el-input |
||||
|
v-model="queryHeaderData.applyNo" |
||||
|
placeholder="请输入申请单号" |
||||
|
clearable |
||||
|
style="width: 150px"> |
||||
|
</el-input> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="事业部"> |
||||
|
<el-select |
||||
|
v-model="queryHeaderData.buNo" |
||||
|
placeholder="请选择" |
||||
|
clearable |
||||
|
style="width: 120px"> |
||||
|
<el-option label="全部" value=""></el-option> |
||||
|
<el-option label="RFID" value="RFID"></el-option> |
||||
|
<el-option label="RF" value="RF"></el-option> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="试验类型"> |
||||
|
<el-select |
||||
|
v-model="queryHeaderData.experimentType" |
||||
|
placeholder="请选择" |
||||
|
clearable |
||||
|
style="width: 120px"> |
||||
|
<el-option label="全部" value=""></el-option> |
||||
|
<el-option label="High Risk" value="High Risk"></el-option> |
||||
|
<el-option label="Low Risk" value="Low Risk"></el-option> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="申请人"> |
||||
|
<el-input |
||||
|
v-model="queryHeaderData.creatorName" |
||||
|
placeholder="请输入申请人姓名" |
||||
|
clearable |
||||
|
style="width: 120px"> |
||||
|
</el-input> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="创建时间"> |
||||
|
<el-date-picker |
||||
|
v-model="queryHeaderData.createStartDate" |
||||
|
type="date" |
||||
|
format="yyyy-MM-dd" |
||||
|
value-format="yyyy-MM-dd" |
||||
|
placeholder="开始日期" |
||||
|
style="width: 140px"> |
||||
|
</el-date-picker> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="至"> |
||||
|
<el-date-picker |
||||
|
v-model="queryHeaderData.createEndDate" |
||||
|
type="date" |
||||
|
format="yyyy-MM-dd" |
||||
|
value-format="yyyy-MM-dd" |
||||
|
placeholder="结束日期" |
||||
|
style="width: 140px"> |
||||
|
</el-date-picker> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="期望完成时间"> |
||||
|
<el-date-picker |
||||
|
v-model="queryHeaderData.expectedFinishStartDate" |
||||
|
type="date" |
||||
|
format="yyyy-MM-dd" |
||||
|
value-format="yyyy-MM-dd" |
||||
|
placeholder="开始日期" |
||||
|
style="width: 140px"> |
||||
|
</el-date-picker> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="至"> |
||||
|
<el-date-picker |
||||
|
v-model="queryHeaderData.expectedFinishEndDate" |
||||
|
type="date" |
||||
|
format="yyyy-MM-dd" |
||||
|
value-format="yyyy-MM-dd" |
||||
|
placeholder="结束日期" |
||||
|
style="width: 140px"> |
||||
|
</el-date-picker> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="实际完成时间"> |
||||
|
<el-date-picker |
||||
|
v-model="queryHeaderData.actualFinishStartDate" |
||||
|
type="date" |
||||
|
format="yyyy-MM-dd" |
||||
|
value-format="yyyy-MM-dd" |
||||
|
placeholder="开始日期" |
||||
|
style="width: 140px"> |
||||
|
</el-date-picker> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="至"> |
||||
|
<el-date-picker |
||||
|
v-model="queryHeaderData.actualFinishEndDate" |
||||
|
type="date" |
||||
|
format="yyyy-MM-dd" |
||||
|
value-format="yyyy-MM-dd" |
||||
|
placeholder="结束日期" |
||||
|
style="width: 140px"> |
||||
|
</el-date-picker> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="周期差异(天)"> |
||||
|
<el-input |
||||
|
v-model="queryHeaderData.cycleDifferenceMin" |
||||
|
placeholder="最小值" |
||||
|
:controls="false" |
||||
|
style="width: 100px"> |
||||
|
</el-input> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="至"> |
||||
|
<el-input |
||||
|
v-model="queryHeaderData.cycleDifferenceMax" |
||||
|
placeholder="最大值" |
||||
|
:controls="false" |
||||
|
style="width: 100px"> |
||||
|
</el-input> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label=" " style="margin-top: -11px"> |
||||
|
<el-button @click="getDataList('Y')" type="primary" class="search-btn" plain>查询</el-button> |
||||
|
<el-button @click="resetQuery()" plain class="reset-btn">重置</el-button> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
|
||||
|
<!-- 数据表格 --> |
||||
|
<el-table |
||||
|
ref="dataTable" |
||||
|
@row-click="handleRowClick" |
||||
|
highlight-current-row |
||||
|
:data="dataList" |
||||
|
v-loading="dataListLoading" |
||||
|
border |
||||
|
class="data-table" |
||||
|
style="width: 100%;" |
||||
|
:height="tableHeight"> |
||||
|
|
||||
|
<el-table-column |
||||
|
prop="applyNo" |
||||
|
label="申请单号" |
||||
|
width="100" |
||||
|
align="center" |
||||
|
header-align="center" |
||||
|
show-overflow-tooltip> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column |
||||
|
prop="title" |
||||
|
label="试验名称" |
||||
|
min-width="150" |
||||
|
align="left" |
||||
|
header-align="center" |
||||
|
show-overflow-tooltip> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column |
||||
|
prop="buName" |
||||
|
label="事业部" |
||||
|
width="80" |
||||
|
align="center" |
||||
|
header-align="center"> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column |
||||
|
prop="experimentType" |
||||
|
label="试验类型" |
||||
|
width="100" |
||||
|
align="center" |
||||
|
header-align="center"> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column |
||||
|
prop="creatorName" |
||||
|
label="申请人" |
||||
|
width="100" |
||||
|
align="center" |
||||
|
header-align="center"> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column |
||||
|
prop="expectedFinishDate" |
||||
|
label="期望完成日期" |
||||
|
width="120" |
||||
|
align="center" |
||||
|
header-align="center"> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column |
||||
|
prop="actualFinishDate" |
||||
|
label="实际完成日期" |
||||
|
width="120" |
||||
|
align="center" |
||||
|
header-align="center"> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column |
||||
|
prop="cycleDifference" |
||||
|
label="周期差异(天)" |
||||
|
width="140" |
||||
|
align="center" |
||||
|
header-align="center"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-tag |
||||
|
:type="getCycleDifferenceTagType(scope.row.cycleDifference)" |
||||
|
size="small"> |
||||
|
{{ formatCycleDifference(scope.row.cycleDifference) }} |
||||
|
</el-tag> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column |
||||
|
prop="finalStatusDesc" |
||||
|
label="样品状态" |
||||
|
width="100" |
||||
|
align="center" |
||||
|
header-align="center"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-tag |
||||
|
:type="getFinalStatusTagType(scope.row.finalStatus)" |
||||
|
size="small"> |
||||
|
{{ scope.row.finalStatus }} |
||||
|
</el-tag> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column |
||||
|
prop="finalQuantity" |
||||
|
label="入库数量" |
||||
|
width="100" |
||||
|
align="center" |
||||
|
header-align="center"> |
||||
|
<template slot-scope="scope"> |
||||
|
{{ scope.row.finalQuantity || '-' }} |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column |
||||
|
prop="createTime" |
||||
|
label="创建时间" |
||||
|
width="160" |
||||
|
align="center" |
||||
|
header-align="center"> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column |
||||
|
prop="status" |
||||
|
label="状态" |
||||
|
width="80" |
||||
|
align="center" |
||||
|
header-align="center"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-tag :type="getStatusTagType(scope.row.status)" size="small"> |
||||
|
{{ scope.row.status }} |
||||
|
</el-tag> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
|
||||
|
<!-- 分页组件 --> |
||||
|
<el-pagination |
||||
|
@size-change="sizeChangeHandle" |
||||
|
@current-change="currentChangeHandle" |
||||
|
:current-page="pageIndex" |
||||
|
:page-sizes="[10, 20, 50, 100]" |
||||
|
:page-size="pageSize" |
||||
|
:total="totalPage" |
||||
|
layout="total, sizes, prev, pager, next, jumper" |
||||
|
style="margin-top: 20px; text-align: right;"> |
||||
|
</el-pagination> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { getSampleCycleReportList } from '@/api/erf/erf' |
||||
|
|
||||
|
export default { |
||||
|
name: 'SampleCycleReport', |
||||
|
|
||||
|
data() { |
||||
|
return { |
||||
|
// 查询条件 |
||||
|
queryHeaderData: { |
||||
|
applyNo: '', |
||||
|
buNo: '', |
||||
|
experimentType: '', |
||||
|
creatorName: '', |
||||
|
createStartDate: '', |
||||
|
createEndDate: '', |
||||
|
expectedFinishStartDate: '', |
||||
|
expectedFinishEndDate: '', |
||||
|
actualFinishStartDate: '', |
||||
|
actualFinishEndDate: '', |
||||
|
cycleDifferenceMin: null, |
||||
|
cycleDifferenceMax: null, |
||||
|
status: '已完成', // 默认查询已完成的申请单 |
||||
|
page: 1, |
||||
|
limit: 20 |
||||
|
}, |
||||
|
|
||||
|
// 数据列表 |
||||
|
dataList: [], |
||||
|
|
||||
|
// 分页参数 |
||||
|
pageIndex: 1, |
||||
|
pageSize: 20, |
||||
|
totalPage: 0, |
||||
|
dataListLoading: false, |
||||
|
|
||||
|
// 表格高度 |
||||
|
tableHeight: 500 |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
activated() { |
||||
|
this.getDataList() |
||||
|
this.calculateTableHeight() |
||||
|
}, |
||||
|
|
||||
|
mounted() { |
||||
|
this.calculateTableHeight() |
||||
|
window.addEventListener('resize', this.calculateTableHeight) |
||||
|
}, |
||||
|
|
||||
|
beforeDestroy() { |
||||
|
window.removeEventListener('resize', this.calculateTableHeight) |
||||
|
}, |
||||
|
|
||||
|
methods: { |
||||
|
/** |
||||
|
* 获取样品完成周期报表列表 |
||||
|
* |
||||
|
* @param {string} flag - 'Y'表示重置到第一页 |
||||
|
*/ |
||||
|
getDataList(flag) { |
||||
|
if (flag === 'Y') { |
||||
|
this.pageIndex = 1 |
||||
|
} |
||||
|
|
||||
|
this.queryHeaderData.page = this.pageIndex |
||||
|
this.queryHeaderData.limit = this.pageSize |
||||
|
|
||||
|
this.dataListLoading = true |
||||
|
|
||||
|
getSampleCycleReportList(this.queryHeaderData).then(({data}) => { |
||||
|
this.dataListLoading = false |
||||
|
if (data && data.code === 0) { |
||||
|
this.dataList = data.page.list || [] |
||||
|
this.totalPage = data.page.totalCount || 0 |
||||
|
} else { |
||||
|
this.dataList = [] |
||||
|
this.totalPage = 0 |
||||
|
this.$message.error(data.msg || '查询失败') |
||||
|
} |
||||
|
}).catch(error => { |
||||
|
this.dataListLoading = false |
||||
|
this.$message.error('查询异常') |
||||
|
}) |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 重置查询条件 |
||||
|
*/ |
||||
|
resetQuery() { |
||||
|
this.queryHeaderData = { |
||||
|
applyNo: '', |
||||
|
buNo: '', |
||||
|
experimentType: '', |
||||
|
creatorName: '', |
||||
|
createStartDate: '', |
||||
|
createEndDate: '', |
||||
|
expectedFinishStartDate: '', |
||||
|
expectedFinishEndDate: '', |
||||
|
actualFinishStartDate: '', |
||||
|
actualFinishEndDate: '', |
||||
|
cycleDifferenceMin: null, |
||||
|
cycleDifferenceMax: null, |
||||
|
status: '已完成', |
||||
|
page: 1, |
||||
|
limit: 20 |
||||
|
} |
||||
|
this.getDataList('Y') |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 行点击事件 |
||||
|
*/ |
||||
|
handleRowClick(row) { |
||||
|
this.$refs.dataTable.setCurrentRow(row) |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 分页大小改变 |
||||
|
*/ |
||||
|
sizeChangeHandle(val) { |
||||
|
this.pageSize = val |
||||
|
this.pageIndex = 1 |
||||
|
this.getDataList() |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 当前页改变 |
||||
|
*/ |
||||
|
currentChangeHandle(val) { |
||||
|
this.pageIndex = val |
||||
|
this.getDataList() |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 计算表格高度 |
||||
|
*/ |
||||
|
calculateTableHeight() { |
||||
|
this.$nextTick(() => { |
||||
|
const windowHeight = window.innerHeight |
||||
|
const queryFormHeight = 150 |
||||
|
const paginationHeight = 60 |
||||
|
const otherHeight = 100 |
||||
|
this.tableHeight = windowHeight - queryFormHeight - paginationHeight - otherHeight |
||||
|
}) |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 格式化周期差异显示 |
||||
|
*/ |
||||
|
formatCycleDifference(days) { |
||||
|
if (days === null || days === undefined) { |
||||
|
return '-' |
||||
|
} |
||||
|
if (days === 0) { |
||||
|
return '准时' |
||||
|
} else if (days > 0) { |
||||
|
return `延期 ${days} 天` |
||||
|
} else { |
||||
|
return `提前 ${Math.abs(days)} 天` |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 获取周期差异标签颜色 |
||||
|
*/ |
||||
|
getCycleDifferenceTagType(days) { |
||||
|
if (days === null || days === undefined) { |
||||
|
return 'info' |
||||
|
} |
||||
|
if (days === 0) { |
||||
|
return 'success' |
||||
|
} else if (days > 0) { |
||||
|
return 'danger' // 延期显示红色 |
||||
|
} else { |
||||
|
return 'success' // 提前显示绿色 |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 获取样品状态标签颜色 |
||||
|
*/ |
||||
|
getFinalStatusTagType(status) { |
||||
|
const typeMap = { |
||||
|
'正常入库': 'success', |
||||
|
'报废': 'danger' |
||||
|
} |
||||
|
return typeMap[status] || 'info' |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 获取状态标签颜色 |
||||
|
*/ |
||||
|
getStatusTagType(status) { |
||||
|
const typeMap = { |
||||
|
'草稿': 'info', |
||||
|
'已下达': 'primary', |
||||
|
'已批准': 'success', |
||||
|
'生产中': 'warning', |
||||
|
'样品确认': 'warning', |
||||
|
'已完成': 'success', |
||||
|
'已取消': 'danger', |
||||
|
'已驳回': 'danger' |
||||
|
} |
||||
|
return typeMap[status] || 'info' |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style scoped> |
||||
|
.data-table { |
||||
|
background-color: #fff; |
||||
|
} |
||||
|
|
||||
|
.data-table { |
||||
|
background-color: #fff; |
||||
|
} |
||||
|
|
||||
|
/* 数据表格样式 */ |
||||
|
.data-table { |
||||
|
background-color: #FFFFFF; |
||||
|
border-radius: 4px; |
||||
|
} |
||||
|
|
||||
|
.data-table >>> .el-table__header-wrapper th { |
||||
|
background-color: #F5F7FA !important; |
||||
|
color: #333333; |
||||
|
font-weight: 600; |
||||
|
font-size: 16px; |
||||
|
border-color: #EBEEF5; |
||||
|
padding: 10px 0; |
||||
|
height: auto; |
||||
|
} |
||||
|
|
||||
|
/* 固定列表头也使用相同背景色 */ |
||||
|
.data-table >>> .el-table__fixed-header-wrapper th { |
||||
|
background-color: #F5F7FA !important; |
||||
|
color: #333333; |
||||
|
font-weight: 600; |
||||
|
font-size: 16px; |
||||
|
border-color: #EBEEF5; |
||||
|
padding: 8px 0; |
||||
|
height: auto; |
||||
|
} |
||||
|
|
||||
|
.data-table >>> .el-table__header-wrapper .cell { |
||||
|
text-align: center; |
||||
|
padding: 0 10px; |
||||
|
//line-height: 2; |
||||
|
overflow: hidden; |
||||
|
text-overflow: ellipsis; |
||||
|
white-space: nowrap; |
||||
|
font-size: 13px !important; |
||||
|
} |
||||
|
|
||||
|
.data-table >>> .el-table__fixed-header-wrapper .cell { |
||||
|
text-align: center; |
||||
|
padding: 0 10px; |
||||
|
//line-height: 2; |
||||
|
overflow: hidden; |
||||
|
text-overflow: ellipsis; |
||||
|
white-space: nowrap; |
||||
|
} |
||||
|
|
||||
|
.data-table >>> .el-table__body-wrapper td { |
||||
|
border-color: #EBEEF5; |
||||
|
padding: 8px 0; |
||||
|
font-size: 16px; |
||||
|
color: #606266; |
||||
|
height: auto; |
||||
|
} |
||||
|
|
||||
|
/* 固定列数据行也使用相同样式 */ |
||||
|
.data-table >>> .el-table__fixed-body-wrapper td { |
||||
|
border-color: #EBEEF5; |
||||
|
padding: 8px 0; |
||||
|
font-size: 16px; |
||||
|
color: #606266; |
||||
|
height: auto; |
||||
|
} |
||||
|
|
||||
|
.data-table >>> .el-table__body-wrapper .cell { |
||||
|
padding: 0 10px; |
||||
|
//line-height: 2; |
||||
|
overflow: hidden; |
||||
|
text-overflow: ellipsis; |
||||
|
white-space: nowrap; |
||||
|
font-size: 13px !important; |
||||
|
line-height: 18px; |
||||
|
height: 18px; |
||||
|
} |
||||
|
|
||||
|
.data-table >>> .el-table__fixed-body-wrapper .cell { |
||||
|
padding: 0 10px; |
||||
|
//line-height: 2; |
||||
|
overflow: hidden; |
||||
|
text-overflow: ellipsis; |
||||
|
white-space: nowrap; |
||||
|
} |
||||
|
|
||||
|
/* 操作列链接样式 - 统一蓝色样式 */ |
||||
|
.data-table >>> .el-table__body-wrapper a { |
||||
|
text-decoration: none; |
||||
|
cursor: pointer; |
||||
|
font-size: 13px; |
||||
|
color: #409EFF !important; |
||||
|
white-space: nowrap; |
||||
|
} |
||||
|
|
||||
|
.data-table >>> .el-table__body-wrapper a:hover { |
||||
|
color: #66B1FF !important; |
||||
|
text-decoration: underline; |
||||
|
} |
||||
|
|
||||
|
.data-table >>> .el-table__body tr:hover > td { |
||||
|
background-color: #F5F7FA !important; |
||||
|
} |
||||
|
|
||||
|
.data-table >>> .el-table__body tr.current-row > td { |
||||
|
background-color: #ECF5FF !important; |
||||
|
} |
||||
|
|
||||
|
.data-table >>> .el-tag--small { |
||||
|
height: 18px; |
||||
|
line-height: 16px; |
||||
|
} |
||||
|
|
||||
|
/* 查询表单样式 */ |
||||
|
.query-form { |
||||
|
background-color: #FFFFFF; |
||||
|
padding: 15px 15px 5px 15px; |
||||
|
border-radius: 4px; |
||||
|
} |
||||
|
|
||||
|
.query-form >>> .el-form-item__label { |
||||
|
color: #333333; |
||||
|
font-size: 13px; |
||||
|
padding-bottom: 5px; |
||||
|
} |
||||
|
|
||||
|
.query-form >>> .el-input__inner { |
||||
|
height: 32px; |
||||
|
line-height: 32px; |
||||
|
border-radius: 4px; |
||||
|
border: 1px solid #DCDFE6; |
||||
|
font-size: 13px; |
||||
|
} |
||||
|
|
||||
|
.query-form >>> .el-input__inner::placeholder { |
||||
|
color: #C0C4CC; |
||||
|
font-size: 13px; |
||||
|
} |
||||
|
|
||||
|
.query-form >>> .el-select .el-input__inner { |
||||
|
border-radius: 4px; |
||||
|
} |
||||
|
|
||||
|
.query-form >>> .el-date-editor .el-input__inner { |
||||
|
border-radius: 4px; |
||||
|
} |
||||
|
/* 按钮样式 - 扁平化风格 */ |
||||
|
.query-form >>> .el-button { |
||||
|
height: 32px; |
||||
|
padding: 0 15px; |
||||
|
font-size: 13px; |
||||
|
border-radius: 4px; |
||||
|
} |
||||
|
/* 查询按钮 - 蓝色扁平 */ |
||||
|
.search-btn { |
||||
|
background-color: #ECF5FF; |
||||
|
border-color: #B3D8FF; |
||||
|
color: #409EFF; |
||||
|
} |
||||
|
|
||||
|
.search-btn:hover { |
||||
|
background-color: #409EFF; |
||||
|
border-color: #409EFF; |
||||
|
color: #FFFFFF; |
||||
|
} |
||||
|
|
||||
|
/* 重置按钮 - 灰色扁平 */ |
||||
|
.reset-btn { |
||||
|
background-color: #F5F7FA; |
||||
|
border-color: #D3D4D6; |
||||
|
color: #606266; |
||||
|
} |
||||
|
|
||||
|
.reset-btn:hover { |
||||
|
background-color: #909399; |
||||
|
border-color: #909399; |
||||
|
color: #FFFFFF; |
||||
|
} |
||||
|
</style> |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue