From 8d328322a979cd07ca9b701106abef25822116e5 Mon Sep 17 00:00:00 2001 From: zhongwenkai <3478244299@qq.com> Date: Fri, 26 Jun 2026 17:12:09 +0800 Subject: [PATCH] =?UTF-8?q?style:=20=E7=BB=B4=E4=BF=AE=E5=8D=95=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E6=A1=86=E6=A0=B7=E5=BC=8F=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/locales/zh-CN.js | 4 + src/pages_function/pages/moldRepair/index.vue | 472 ++++++++++++++++-- 2 files changed, 428 insertions(+), 48 deletions(-) diff --git a/src/locales/zh-CN.js b/src/locales/zh-CN.js index 7a3dcd5..8ca231c 100644 --- a/src/locales/zh-CN.js +++ b/src/locales/zh-CN.js @@ -1368,6 +1368,10 @@ export default { editTitle: '编辑模具维修', detailTitle: '模具维修详情', repairTitle: '维修处理', + allStatus: '维修状态', + searchPlaceholder: '搜索维修单号', + startTime: '开始日期', + endTime: '结束日期', basicInfo: '基本信息', repairObject: '维修对象', repairCode: '维修单编号', diff --git a/src/pages_function/pages/moldRepair/index.vue b/src/pages_function/pages/moldRepair/index.vue index 0ca6576..449350f 100644 --- a/src/pages_function/pages/moldRepair/index.vue +++ b/src/pages_function/pages/moldRepair/index.vue @@ -3,30 +3,124 @@ - - + + + + {{ selectedStatusLabel }} + + + - - - {{ selectedStatusLabel }} - + + + + + + + + + - - {{ t('functionCommon.reset') }} + + + + + {{ t('functionCommon.moreFilter') }} + + + + + {{ t('moldRepair.basicInfo') }} + + + + {{ t('moldRepair.repairCode') }} + + + + {{ t('moldRepair.repairName') }} + + + + {{ t('moldRepair.moldCode') }} + + + + {{ t('moldRepair.moldName') }} + + + + {{ t('moldRepair.acceptedBy') }} + + + + {{ t('moldRepair.status') }} + + + {{ drawerStatusLabel }} + + + + + + + + {{ t('moldRepair.requireDate') }} + + + + + + + + + + {{ t('moldRepair.finishDate') }} + + + + + + + + + + {{ t('moldRepair.confirmDate') }} + + + + + + + + + + {{ t('functionCommon.reset') }} + {{ t('functionCommon.confirm') }} + + + + [ - { label: t('functionCommon.all'), value: '' }, { label: t('moldRepair.statusPending'), value: '0' }, { label: t('moldRepair.statusPassed'), value: '1' }, { label: t('moldRepair.statusRejected'), value: '2' } ]) -const statusLabels = computed(() => statusOptions.value.map((item) => item.label)) +const statusLabels = computed(() => [t('moldRepair.allStatus'), ...statusOptions.value.map((item) => item.label)]) const statusPickerIndex = computed(() => { + if (selectedStatus.value === '') return 0 const index = statusOptions.value.findIndex((item) => item.value === selectedStatus.value) - return index >= 0 ? index : 0 + return index >= 0 ? index + 1 : 0 }) const selectedStatusLabel = computed(() => { + if (selectedStatus.value === '') return t('moldRepair.allStatus') const current = statusOptions.value.find((item) => item.value === selectedStatus.value) - return current ? current.label : t('functionCommon.all') + return current ? current.label : t('moldRepair.allStatus') +}) + +// 抽屉内单据状态 +const drawerStatusOptions = computed(() => [ + { label: t('moldRepair.orderStatusPending'), value: '0' }, + { label: t('moldRepair.orderStatusDone'), value: '1' } +]) +const drawerStatusLabels = computed(() => [t('moldRepair.status'), ...drawerStatusOptions.value.map(i => i.label)]) +const drawerStatusIndex = computed(() => { + if (filterDrawerStatus.value === '') return 0 + const idx = drawerStatusOptions.value.findIndex(i => i.value === filterDrawerStatus.value) + return idx >= 0 ? idx + 1 : 0 +}) +const drawerStatusLabel = computed(() => { + if (filterDrawerStatus.value === '') return t('moldRepair.status') + const cur = drawerStatusOptions.value.find(i => i.value === filterDrawerStatus.value) + return cur ? cur.label : t('moldRepair.status') }) +const filterPopupRef = ref(null) +const filterMoldCode = ref('') +const filterMoldName = ref('') +const filterAcceptedBy = ref('') +const filterRepairCode = ref('') +const filterRepairName = ref('') +const filterDrawerStatus = ref('') +const filterRequireDate = ref([]) +const filterFinishDate = ref([]) +const filterConfirmDate = ref([]) + onLoad(async () => { initialized.value = true await fetchList(true) @@ -162,12 +285,23 @@ async function fetchList(reset) { try { const keyword = searchKeyword.value.trim() + const reqDateArr = Array.isArray(filterRequireDate.value) ? filterRequireDate.value : [] + const finDateArr = Array.isArray(filterFinishDate.value) ? filterFinishDate.value : [] + const confDateArr = Array.isArray(filterConfirmDate.value) ? filterConfirmDate.value : [] const params = { pageNo: pageNo.value, pageSize: pageSize.value, - repairCode: keyword || undefined, + repairCode: filterRepairCode.value || keyword || undefined, + repairName: filterRepairName.value || undefined, moldId: selectedMoldId.value || undefined, - repairStatus: selectedStatus.value === '' ? undefined : selectedStatus.value + repairStatus: selectedStatus.value === '' ? undefined : selectedStatus.value, + status: filterDrawerStatus.value || undefined, + moldCode: filterMoldCode.value || undefined, + moldName: filterMoldName.value || undefined, + acceptedBy: filterAcceptedBy.value || undefined, + requireDate: reqDateArr.length === 2 ? [reqDateArr[0] + ' 00:00:00', reqDateArr[1] + ' 23:59:59'] : undefined, + finishDate: finDateArr.length === 2 ? [finDateArr[0] + ' 00:00:00', finDateArr[1] + ' 23:59:59'] : undefined, + confirmDate: confDateArr.length === 2 ? [confDateArr[0] + ' 00:00:00', confDateArr[1] + ' 23:59:59'] : undefined } const res = await getMoldRepairPage(params) const page = normalizePageData(res) @@ -229,16 +363,47 @@ async function resetFilters() { searchKeyword.value = '' selectedStatus.value = '' selectedMoldId.value = '' + filterRepairCode.value = '' + filterRepairName.value = '' + filterDrawerStatus.value = '' + filterMoldCode.value = '' + filterMoldName.value = '' + filterAcceptedBy.value = '' + filterRequireDate.value = [] + filterFinishDate.value = [] + filterConfirmDate.value = [] activateKeywordFocus() await fetchList(true) } function onStatusFilterChange(event) { const index = Number(event?.detail?.value || 0) - selectedStatus.value = statusOptions.value[index]?.value ?? '' + if (index === 0) { + selectedStatus.value = '' + } else { + selectedStatus.value = statusOptions.value[index - 1]?.value ?? '' + } + fetchList(true) +} + +function openFilterDrawer() { + filterPopupRef.value?.open() +} + +function confirmFilterDrawer() { + filterPopupRef.value?.close() fetchList(true) } +function onDrawerStatusChange(event) { + const index = Number(event?.detail?.value || 0) + if (index === 0) { + filterDrawerStatus.value = '' + } else { + filterDrawerStatus.value = drawerStatusOptions.value[index - 1]?.value ?? '' + } +} + function canEdit(item) { return !isProcessedRepair(item?.repairStatus) } @@ -372,58 +537,269 @@ function textValue(value) { } .filter-bar { - display: grid; - grid-template-columns: minmax(0, 1fr) 150rpx 96rpx; + padding: 18rpx 14rpx 20rpx; + background: #f3f4f6; +} + +.filter-row { + display: flex; align-items: center; - gap: 14rpx; - padding: 18rpx 4rpx 20rpx; + gap: 18rpx; } -.keyword-box, -.status-box, -.reset-filter-btn { +.search-row { + margin-top: 18rpx; +} + +.quick-row > picker { + min-width: 0; + flex: 1; +} + +.keyword-wrap, +.status-filter, +.icon-filter-btn { height: 66rpx; - background: #ffffff; border: 1rpx solid #d9dde5; + background: #ffffff; box-sizing: border-box; - display: flex; - align-items: center; } -.keyword-box { - padding: 0 20rpx; +.keyword-wrap { + min-width: 0; + flex: 1; + display: flex; + align-items: center; } .keyword-input { width: 100%; + height: 64rpx; + padding: 0 20rpx; font-size: 26rpx; color: #374151; } -.status-box { - justify-content: space-between; - padding: 0 18rpx; +.placeholder { + color: #a8adb7; } -.status-box-text, -.placeholder { - font-size: 26rpx; +.status-filter { + min-width: 0; + flex: 1; + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 18rpx 0 26rpx; } -.status-box-text { +.status-filter-text { + min-width: 0rpx; + flex: 1; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 26rpx; color: #374151; } -.placeholder { +.status-filter-text.placeholder { color: #a8adb7; } -.reset-filter-btn { +.icon-filter-btn { + width: 66rpx; + flex: 0 0 66rpx; display: flex; align-items: center; justify-content: center; + border-color: transparent; + background: transparent; +} + +/* ====== 筛选抽屉 ====== */ +::deep(.repair-filter-popup.right .uni-popup__content-transition) { + transform: none !important; +} + +.filter-drawer { + width: 630rpx; + height: calc(100vh - var(--status-bar-height)); + margin-top: var(--status-bar-height); + background: #f5f5f7; + display: flex; + flex-direction: column; + overflow: hidden; + border-radius: 28rpx 0 0 28rpx; +} + +.drawer-header { + height: 104rpx; + padding: 18rpx 34rpx 0; + background: #ffffff; + display: flex; + align-items: center; + justify-content: flex-start; + box-sizing: border-box; +} + +.drawer-title { + color: #1f2937; + font-size: 34rpx; + line-height: 1.3; + font-weight: 700; +} + +.drawer-body { + flex: 1; + min-height: 0; + padding-bottom: 40rpx; + box-sizing: border-box; +} + +.drawer-actions { + height: 126rpx; + padding: 18rpx 28rpx 24rpx; + box-sizing: border-box; + display: flex; + align-items: center; + gap: 0; + background: #ffffff; + box-shadow: 0 -8rpx 24rpx rgba(17, 24, 39, 0.06); +} + +.drawer-action { + flex: 1; + height: 72rpx; + display: flex; + align-items: center; + justify-content: center; + font-size: 28rpx; + font-weight: 600; + border: 2rpx solid #174b78; + box-sizing: border-box; +} + +.drawer-action.reset { + border-radius: 12rpx 0 0 12rpx; + background: #ffffff; + color: #174b78; +} + +.drawer-action.confirm { + border-radius: 0 12rpx 12rpx 0; + background: #174b78; + color: #ffffff; +} + +.drawer-section { + margin-bottom: 18rpx; + padding: 28rpx 28rpx 30rpx; + border-radius: 24rpx; + background: #ffffff; + box-sizing: border-box; +} + +.drawer-section-head { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 24rpx; +} + +.drawer-section-title { + font-size: 32rpx; + line-height: 1.3; + color: #1f2937; + font-weight: 700; +} + +.drawer-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 22rpx 20rpx; +} + +.drawer-field { + min-width: 0; +} + +.drawer-field-wide { + grid-column: 1 / -1; +} + +.drawer-label { + display: block; + margin-bottom: 12rpx; font-size: 24rpx; + line-height: 1.3; color: #4b5563; + font-weight: 500; +} + +.drawer-input { + width: 100%; + min-height: 74rpx; + border: 0; + border-radius: 8rpx; + background: #f7f8fb; + box-sizing: border-box; + padding: 0 18rpx; + font-size: 26rpx; + color: #111827; + text-align: center; +} + +.drawer-input-text { + font-size: 26rpx; + color: #111827; +} + +.drawer-input-text.placeholder { + color: #a8adb7; +} + +.drawer-date { + width: 100%; + min-height: 74rpx; + border: 0; + border-radius: 8rpx; + background: #f7f8fb; + box-sizing: border-box; + display: flex; + align-items: center; + padding: 0 12rpx; +} + +.drawer-date :deep(.uni-date), +.drawer-date :deep(.uni-date-editor), +.drawer-date :deep(.uni-date-editor--x), +.drawer-date :deep(.uni-date-x) { + width: 100%; +} + +.drawer-date :deep(.uni-date-editor), +.drawer-date :deep(.uni-date-editor--x), +.drawer-date :deep(.uni-date-x) { + min-height: 74rpx; +} + +.drawer-date :deep(.uni-date-editor--x), +.drawer-date :deep(.uni-date-x) { + border: 0; + padding: 0; + background: transparent; +} + +.drawer-date :deep(.uni-date-range) { + display: flex; + align-items: center; +} + +.drawer-date :deep(.uni-date__x-input) { + text-align: center; + font-size: 26rpx; + color: #111827; } .list-scroll {