diff --git a/src/api/srm/srmSupplier.js b/src/api/srm/srmSupplier.js index 92c4b11..c1fd3ea 100644 --- a/src/api/srm/srmSupplier.js +++ b/src/api/srm/srmSupplier.js @@ -2,6 +2,8 @@ import { createAPI } from '@/utils/httpRequest.js' export const searchSrmSupplierList = data => createAPI('/srmSupplier/searchSrmSupplierList', 'POST', data) +export const supplierDocExpireReminder = data => createAPI('/srmSupplier/supplierDocExpireReminder', 'POST', data || {}) +export const supplierContractRequestExpireReminder = data => createAPI('/srmSupplier/supplierContractRequestExpireReminder', 'POST', data || {}) export const searchSupplierGroupRequestList = data => createAPI('/srmSupplier/searchSupplierGroupRequestList', 'POST', data) export const getSupplierGroupRequestList = data => createAPI('/srmSupplier/getSupplierGroupRequestList', 'POST', data) export const createNewSupplierRequest = data => createAPI('/srmSupplier/createNewSupplierRequest', 'POST', data) diff --git a/src/views/common/home.vue b/src/views/common/home.vue index 3ae1d22..f764fb2 100644 --- a/src/views/common/home.vue +++ b/src/views/common/home.vue @@ -1,70 +1,363 @@ - + 100% { + transform: translate(-50%, -50%) scale(1.28); + opacity: 0; + border-color: rgba(56, 189, 248, 0); + } +} + +.tech-card__grid { + position: absolute; + inset: 0; + z-index: 0; + border-radius: inherit; + opacity: 0.35; + background-image: + linear-gradient(rgba(148, 163, 184, 0.12) 1px, transparent 1px), + linear-gradient(90deg, rgba(148, 163, 184, 0.08) 1px, transparent 1px); + background-size: 18px 18px; + pointer-events: none; +} + +.tech-card--active { + border-color: rgba(14, 165, 233, 0.42); + box-shadow: + 0 0 0 1px rgba(56, 189, 248, 0.12), + 0 6px 20px rgba(15, 23, 42, 0.08), + 0 0 20px rgba(14, 165, 233, 0.08); +} + +.home-reminder-card.is-clickable { + cursor: pointer; +} + +.tech-card.is-clickable:hover { + transform: translateY(-4px); + border-color: var(--tech-border-hover); + box-shadow: + 0 0 0 1px rgba(56, 189, 248, 0.2), + 0 8px 28px rgba(15, 23, 42, 0.08), + 0 0 32px rgba(56, 189, 248, 0.12); +} +.home-reminder-card__title { + position: relative; + z-index: 3; + font-size: 14px; + font-weight: 600; + color: #334155; + line-height: 1.45; +} + +.home-reminder-card__count { + position: relative; + z-index: 3; + font-size: 36px; + font-weight: 800; + font-variant-numeric: tabular-nums; + margin-top: 14px; + line-height: 1; + color: var(--home-count-color); +} + +.home-reminder-card:not(.tech-card--active) .home-reminder-card__count { + color: var(--home-count-muted); +} + +.home-reminder-card__hint { + position: relative; + z-index: 3; + font-size: 11px; + margin-top: 12px; + color: #64748b; + letter-spacing: 0.06em; + opacity: 0.95; +} + +.home-reminder-card__meta { + font-size: 12px; + color: #64748b; + margin-top: 6px; +} + diff --git a/src/views/modules/srmSupplier/supplierContractRequest.vue b/src/views/modules/srmSupplier/supplierContractRequest.vue index fd0a41b..3d66182 100644 --- a/src/views/modules/srmSupplier/supplierContractRequest.vue +++ b/src/views/modules/srmSupplier/supplierContractRequest.vue @@ -466,13 +466,35 @@ export default { this.requestModelData.supplierNo = this.requestModelData.supplierNo.toUpperCase() } }, + '$route.query.contractExpireRequestIds'(val, oldVal) { + if (val === oldVal) return + if (this._suppressContractExpireRouteWatch) { + this._suppressContractExpireRouteWatch = false + return + } + this.loadMainOrReminder() + } }, mounted() { this.$nextTick(() => { this.height = window.innerHeight - 220; + this.loadMainOrReminder() }) }, methods: { + loadMainOrReminder () { + const raw = this.$route.query.contractExpireRequestIds + if (raw !== undefined && raw !== null && String(raw).trim() !== '') { + const ids = String(raw).split(',').map(s => parseInt(s.trim(), 10)).filter(n => !isNaN(n)) + if (ids.length) { + this.$set(this.searchData, 'contractRequestIdList', ids) + this.pageIndex = 1 + this.getMainData({ clearReminderIdFilterAfter: true }) + return + } + } + this.getMainData() + }, // 获取基础数据列表S getBaseList(val, type) { this.tagNo = val @@ -505,7 +527,8 @@ export default { } } }, - getMainData(){ + getMainData (opts) { + const clearReminderIdFilterAfter = opts && opts.clearReminderIdFilterAfter === true this.searchData.limit = this.pageSize this.searchData.page = this.pageIndex getContractRequestList(this.searchData).then(({data}) => { @@ -514,6 +537,13 @@ export default { this.pageIndex = data.page.currPage this.pageSize = data.page.pageSize this.totalPage = data.page.totalCount + if (clearReminderIdFilterAfter) { + this.$delete(this.searchData, 'contractRequestIdList') + const q = Object.assign({}, this.$route.query) + delete q.contractExpireRequestIds + this._suppressContractExpireRouteWatch = true + this.$router.replace({ name: this.$route.name, query: q, params: this.$route.params }) + } } this.dataListLoading = false }) diff --git a/src/views/modules/srmSupplier/supplierList.vue b/src/views/modules/srmSupplier/supplierList.vue index ad8530c..1c2d127 100644 --- a/src/views/modules/srmSupplier/supplierList.vue +++ b/src/views/modules/srmSupplier/supplierList.vue @@ -1099,9 +1099,33 @@ export default { mounted () { this.$nextTick(() => { this.height = (window.innerHeight - 220) / 2 + this.loadMainOrReminder() }) }, + watch: { + '$route.query.docExpireSupplierIds'(val, oldVal) { + if (val === oldVal) return + if (this._suppressDocExpireRouteWatch) { + this._suppressDocExpireRouteWatch = false + return + } + this.loadMainOrReminder() + } + }, methods: { + loadMainOrReminder () { + const raw = this.$route.query.docExpireSupplierIds + if (raw !== undefined && raw !== null && String(raw).trim() !== '') { + const ids = String(raw).split(',').map(s => parseInt(s.trim(), 10)).filter(n => !isNaN(n)) + if (ids.length) { + this.$set(this.searchData, 'supplierIdList', ids) + this.pageIndex = 1 + this.getMainData({ clearReminderIdFilterAfter: true }) + return + } + } + this.getMainData() + }, getBaseList (val, type) { this.tagNo = val this.$nextTick(() => { @@ -1156,7 +1180,8 @@ export default { this.currentSupplier.deliveryTerm = val.DeliveryTermID } }, - getMainData () { + getMainData (opts) { + const clearReminderIdFilterAfter = opts && opts.clearReminderIdFilterAfter === true this.searchData.limit = this.pageSize this.searchData.page = this.pageIndex searchSrmSupplierList(this.searchData).then(({data}) => { @@ -1165,14 +1190,31 @@ export default { this.pageIndex = data.page.currPage this.pageSize = data.page.pageSize this.totalPage = data.page.totalCount - // 判断是否全部存在数据 + this.$nextTick(() => { + if (this.$refs.mainTable) { + this.$refs.mainTable.clearSelection() + } + this.mainTableSelections = [] + }) + if (clearReminderIdFilterAfter) { + this.activeName = 'documents' + } + //判断是否全部存在数据 if (this.mainDataList.length > 0) { - // 设置选中行 + //设置选中行 this.$refs.mainTable.setCurrentRow(this.mainDataList[0]) this.changeData(this.mainDataList[0]) - } else { + + }else { this.changeData(null) } + if (clearReminderIdFilterAfter) { + this.$delete(this.searchData, 'supplierIdList') + const q = Object.assign({}, this.$route.query) + delete q.docExpireSupplierIds + this._suppressDocExpireRouteWatch = true + this.$router.replace({ name: this.$route.name, query: q, params: this.$route.params }) + } } this.dataListLoading = false })