Browse Source

feat(home): 添加验货审核待办功能和PO列表筛选排序

- 在首页待办清单中添加验货请求审核卡片
- 实现验货审核待办数量统计和跳转功能
- 为验货申请列表添加PO号筛选搜索功能
- 实现CRD日期排序功能和重置筛选按钮
- 优化PO列表显示逻辑和数据过滤处理
- 修复待办清单标题错别字问题
master
qiankanghui 4 days ago
parent
commit
c46728c0ea
  1. 46
      src/views/common/home.vue
  2. 102
      src/views/modules/inspection/inspectionRequestList.vue
  3. 2
      src/views/modules/inspection/myTodoList.vue

46
src/views/common/home.vue

@ -5,7 +5,7 @@
<div class="tech-backdrop">
<div class="tech-frame">
<header class="tech-header tech-header--simple">
<h1 class="tech-header__title">办清单</h1>
<h1 class="tech-header__title">办清单</h1>
</header>
<div class="home-reminders">
@ -39,6 +39,16 @@
<div class="home-reminder-card__count">{{ myPerformanceScoreCount }}</div>
<div class="home-reminder-card__hint">{{ myPerformanceScoreCount > 0 ? '' : 'Null' }}</div>
</div>
<div
v-show="homeTileShow.inspectionAudit"
class="home-reminder-card tech-card"
:class="{ 'is-clickable': inspectionAuditCount > 0, 'tech-card--active': inspectionAuditCount > 0 }"
@click="onInspectionAuditClick">
<div class="tech-card__grid" aria-hidden="true"></div>
<div class="home-reminder-card__title">Inspection Request Audit</div>
<div class="home-reminder-card__count">{{ inspectionAuditCount }}</div>
<div class="home-reminder-card__hint">{{ inspectionAuditCount > 0 ? '' : 'Null' }}</div>
</div>
</div>
</div>
</div>
@ -49,6 +59,7 @@
import {searchSysLanguagePack} from "../../api/sysLanguage";
import { supplierDocExpireReminder, supplierContractRequestExpireReminder } from '@/api/srm/srmSupplier.js'
import { myPerformanceScoreReminder } from '@/api/supplierPerformance/myPerformanceEvaluateRequest.js'
import { searchInspectionRequestHeaderList } from '@/api/inspection/inspectionRequestHeader.js'
export default {
data(){
@ -59,10 +70,12 @@ export default {
contractExpireReminderCount: 0,
contractExpireReminderIds: [],
myPerformanceScoreCount: 0,
inspectionAuditCount: 0,
homeTileShow: {
supplierDocExpire: true,
contractRequestExpire: true,
myPerformanceScore: true,
inspectionAudit: true,
},
/** 代办卡片悬停外圈脉冲(双环);false 时无任何脉冲描边 */
homeCardPulseEnabled: false,
@ -78,6 +91,9 @@ export default {
onMyPerformanceScoreClick () {
this.goMyPerformanceScoreList()
},
onInspectionAuditClick () {
this.goInspectionAuditList()
},
loadDocExpireReminder () {
const site = this.$store.state.user.site
supplierDocExpireReminder({ site }).then(({ data }) => {
@ -141,6 +157,26 @@ export default {
}
})
},
loadInspectionAuditReminder () {
const site = this.$store.state.user.site
// 使
const params = {
page: 1,
limit: 1, //
status: 'Confirmed', //
site: site
}
searchInspectionRequestHeaderList(params).then(({ data }) => {
if (data && data.code === 0 && data.page) {
this.inspectionAuditCount = data.page.totalCount || 0
}
}).catch(() => {})
},
goInspectionAuditList () {
if (!this.inspectionAuditCount) return
//
this.$router.push({ name: 'inspection-inspectionRequestAudit' })
},
languageRefresh(){
console.log("欢迎使用 旭捷管理系统!!!")
},
@ -180,6 +216,9 @@ export default {
if (this.homeTileShow.myPerformanceScore) {
this.loadMyPerformanceScoreReminder()
}
if (this.homeTileShow.inspectionAudit) {
this.loadInspectionAuditReminder()
}
},
watch: {
'homeTileShow.supplierDocExpire'(v) {
@ -196,6 +235,11 @@ export default {
if (v) {
this.loadMyPerformanceScoreReminder()
}
},
'homeTileShow.inspectionAudit'(v) {
if (v) {
this.loadInspectionAuditReminder()
}
}
},

102
src/views/modules/inspection/inspectionRequestList.vue

@ -237,8 +237,37 @@
<!-- 步骤2批量选择PO -->
<div class="po-section">
<div class="section-title">批量选择PO</div>
<!-- PO号筛选和排序工具栏 -->
<div class="po-toolbar">
<!-- 搜索框 + 按钮组放在一起 -->
<div style="display: flex; align-items: center; gap: 8px; flex: 0 0 auto;">
<!-- 搜索框 -->
<div style="width: 180px;">
<el-input
v-model="poSearchKeyword"
placeholder="请输入PO号筛选"
size="mini"
clearable
@input="filterPoList">
<i slot="prefix" class="el-input__icon el-icon-search"></i>
</el-input>
</div>
<!-- CRD日期排序按钮 -->
<el-button type="primary" icon="el-icon-sort" @click="toggleCrdSort">
CRD日期排序
</el-button>
<!-- 重置筛选按钮 -->
<el-button type="primary" @click="resetPoFilter" v-if="poSearchKeyword || crdSortOrder">
重置筛选
</el-button>
</div>
</div>
<el-table
:data="poList"
:data="filteredPoList"
border
size="small"
table-layout="fixed"
@ -279,7 +308,8 @@
header-align="center"
align="center"
width="160"
>
sortable
:sort-method="(a, b) => sortCrdDate(a, b)">
<template slot-scope="scope">
<el-date-picker
v-model="scope.row.crd"
@ -399,6 +429,9 @@ export default {
]
},
poList: [],
filteredPoList: [],
poSearchKeyword: '',
crdSortOrder: '',
selectedPoList: [],
//
uploadDialogVisible: false,
@ -914,12 +947,15 @@ export default {
shipMethod: item.shipMethod || '',//
crd: item.crd ? item.crd.split(' ')[0] : ''
}))
this.filteredPoList = [...this.poList]
} else {
this.poList = []
this.filteredPoList = []
this.$message.info('该供应商暂无可申请验货的PO')
}
}).catch(() => {
this.poList = []
this.filteredPoList = []
this.$message.error('加载PO列表失败')
})
},
@ -929,6 +965,68 @@ export default {
this.selectedPoList = selection
},
// PO
filterPoList () {
let result = [...this.poList]
if (this.poSearchKeyword) {
const keyword = this.poSearchKeyword.toLowerCase()
result = result.filter(item =>
item.orderRef1 && item.orderRef1.toLowerCase().includes(keyword)
)
}
if (this.crdSortOrder) {
result.sort((a, b) => {
const dateA = a.crd || ''
const dateB = b.crd || ''
if (!dateA && !dateB) return 0
if (!dateA) return this.crdSortOrder === 'asc' ? -1 : 1
if (!dateB) return this.crdSortOrder === 'asc' ? 1 : -1
if (this.crdSortOrder === 'asc') {
return dateA.localeCompare(dateB)
} else {
return dateB.localeCompare(dateA)
}
})
}
this.filteredPoList = result
},
// CRD
toggleCrdSort () {
if (!this.crdSortOrder) {
this.crdSortOrder = 'asc'
} else if (this.crdSortOrder === 'asc') {
this.crdSortOrder = 'desc'
} else {
this.crdSortOrder = ''
}
this.filterPoList()
},
//
resetPoFilter () {
this.poSearchKeyword = ''
this.crdSortOrder = ''
this.filteredPoList = [...this.poList]
},
// CRD
sortCrdDate (a, b) {
const dateA = a.crd || ''
const dateB = b.crd || ''
if (!dateA && !dateB) return 0
if (!dateA) return -1
if (!dateB) return 1
return dateA.localeCompare(dateB)
},
//
handleInspectQtyChange (row, value) {
console.log('验货数量变化:', row.orderRef1, value)

2
src/views/modules/inspection/myTodoList.vue

@ -2,7 +2,7 @@
<div class="my-todo-container">
<!-- 页面标题 -->
<div class="page-header">
<h2 class="page-title">我的QC人员</h2>
<h2 class="page-title">我的QC人员</h2>
<p class="page-desc">对于QC人员查看到自己的待验货的申请单</p>
</div>

Loading…
Cancel
Save