| src/pages/consumablesLogistics/stockReport/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages/inventoryManagement/stockReport/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/utils/ruoyi.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/pages/consumablesLogistics/stockReport/index.vue
@@ -74,15 +74,13 @@ </view> <view v-else class="no-data">暂无数据</view> </view> <up-popup :show="showDatePicker" mode="bottom" @close="showDatePicker = false"> <up-datetime-picker v-model="dateValue" :mode="datePickerMode" :show="showDatePicker" @confirm="onDateConfirm" @cancel="showDatePicker = false" /> </up-popup> <up-datetime-picker v-model="dateValue" :mode="datePickerMode" :show="showDatePicker" @confirm="onDateConfirm" @cancel="showDatePicker = false" /> </view> </template> @@ -90,7 +88,6 @@ import { ref, reactive, toRefs, computed, watch } from "vue"; import dayjs from "dayjs"; import PageHeader from "@/components/PageHeader.vue"; import { formatDateToYMD } from "@/utils/ruoyi"; import { onShow, onReachBottom } from "@dcloudio/uni-app"; import { getConsumablesInReportList, getConsumablesInInAndOutReportList } from "@/api/consumablesLogistics/consumablesIn.js"; import { @@ -207,6 +204,23 @@ getList(); }; const toPickerTimestamp = (val, target) => { if (!val) return Date.now(); let parsed; if (target === "startMonth" || target === "endMonth") { parsed = dayjs(`${val}-01`).valueOf(); } else { parsed = dayjs(val).valueOf(); } return Number.isNaN(parsed) ? Date.now() : parsed; }; const formatPickerDate = (value, isMonth) => { const parsed = dayjs(value); if (!parsed.isValid()) return ""; return parsed.format(isMonth ? "YYYY-MM" : "YYYY-MM-DD"); }; const openDatePicker = (target) => { datePickerTarget.value = target; let val = ""; @@ -215,13 +229,18 @@ else if (target === "endMonth") val = searchForm.value.endMonth; else if (target === "startDate") val = searchForm.value.startDate; else if (target === "endDate") val = searchForm.value.endDate; dateValue.value = val ? new Date(val).getTime() : Date.now(); dateValue.value = toPickerTimestamp(val, target); showDatePicker.value = true; }; const onDateConfirm = (e) => { const isMonth = datePickerTarget.value === "startMonth" || datePickerTarget.value === "endMonth"; const str = isMonth ? dayjs(e.value).format("YYYY-MM") : formatDateToYMD(e.value); const str = formatPickerDate(e.value, isMonth); if (!str) { showDatePicker.value = false; uni.showToast({ title: "日期格式无效", icon: "none" }); return; } if (datePickerTarget.value === "single") { searchForm.value.singleDate = str; showDatePicker.value = false; @@ -262,6 +281,9 @@ searchForm.value.endDate = today.format("YYYY-MM-DD"); searchForm.value.startDate = today.subtract(6, "day").format("YYYY-MM-DD"); } if (!datePickerTarget.value) { dateValue.value = toPickerTimestamp(searchForm.value.singleDate, "single"); } }; watch( @@ -277,6 +299,8 @@ fetchStockRecordTypeOptions(); }); initDefaultDates(); onReachBottom(() => loadMore()); const goBack = () => uni.navigateBack(); src/pages/inventoryManagement/stockReport/index.vue
@@ -80,15 +80,13 @@ <view v-else class="no-data">暂无数据</view> </view> <up-popup :show="showDatePicker" mode="bottom" @close="showDatePicker = false"> <up-datetime-picker v-model="dateValue" :mode="datePickerMode" :show="showDatePicker" @confirm="onDateConfirm" @cancel="showDatePicker = false" /> </up-popup> <up-datetime-picker v-model="dateValue" :mode="datePickerMode" :show="showDatePicker" @confirm="onDateConfirm" @cancel="showDatePicker = false" /> </view> </template> @@ -96,7 +94,6 @@ import { ref, reactive, toRefs, computed, watch } from 'vue' import dayjs from 'dayjs' import PageHeader from '@/components/PageHeader.vue' import { formatDateToYMD } from '@/utils/ruoyi' import { onShow } from '@dcloudio/uni-app' import { getStockInventoryReportList, @@ -216,6 +213,23 @@ getList() } const toPickerTimestamp = (val, target) => { if (!val) return Date.now() let parsed if (target === 'startMonth' || target === 'endMonth') { parsed = dayjs(`${val}-01`).valueOf() } else { parsed = dayjs(val).valueOf() } return Number.isNaN(parsed) ? Date.now() : parsed } const formatPickerDate = (value, isMonth) => { const parsed = dayjs(value) if (!parsed.isValid()) return '' return parsed.format(isMonth ? 'YYYY-MM' : 'YYYY-MM-DD') } const openDatePicker = (target) => { let val = '' datePickerTarget.value = target @@ -236,13 +250,18 @@ val = searchForm.value.endDate break } dateValue.value = val ? new Date(val).getTime() : Date.now() dateValue.value = toPickerTimestamp(val, target) showDatePicker.value = true } const onDateConfirm = (e) => { const isMonth = datePickerTarget.value === 'startMonth' || datePickerTarget.value === 'endMonth' const str = isMonth ? dayjs(e.value).format('YYYY-MM') : formatDateToYMD(e.value) const str = formatPickerDate(e.value, isMonth) if (!str) { showDatePicker.value = false uni.showToast({ title: '日期格式无效', icon: 'none' }) return } if (datePickerTarget.value === 'single') { searchForm.value.singleDate = str @@ -286,6 +305,9 @@ searchForm.value.endDate = today.format('YYYY-MM-DD') searchForm.value.startDate = today.subtract(6, 'day').format('YYYY-MM-DD') } if (!datePickerTarget.value) { dateValue.value = toPickerTimestamp(searchForm.value.singleDate, 'single') } } watch( @@ -302,6 +324,8 @@ fetchStockRecordTypeOptions() }) initDefaultDates() const goBack = () => uni.navigateBack() </script> src/utils/ruoyi.js
@@ -234,16 +234,36 @@ let date; // 处理:如果是时间戳,先转为Date对象 if (typeof dateSource === 'number') { date = new Date(dateSource); const timestamp = dateSource.toString().length === 10 ? dateSource * 1000 : dateSource; date = new Date(timestamp); } // 处理:如果是Date对象,直接使用 else if (dateSource instanceof Date) { date = dateSource; } // 处理:如果是字符串,做兼容转换 else if (typeof dateSource === 'string') { const raw = dateSource.trim(); if (!raw) return ''; if (/^[0-9]+$/.test(raw)) { const n = parseInt(raw, 10); const timestamp = raw.length === 10 ? n * 1000 : n; date = new Date(timestamp); } else { // iOS / 部分 WebView 对 YYYY-MM-DD 兼容较差,统一转 / const normalized = raw .replace(new RegExp(/-/gm), '/') .replace('T', ' ') .replace(new RegExp(/\.[\d]{3}/gm), ''); date = new Date(normalized); } } // 异常情况:返回空 else { return ''; } if (!(date instanceof Date) || Number.isNaN(date.getTime())) return ''; // 补零函数:确保月/日是两位数 const padZero = (num) => num.toString().padStart(2, '0');