diff --git a/component/public/calendar.vue b/component/public/calendar.vue index 47c6f5d..a1a99fb 100644 --- a/component/public/calendar.vue +++ b/component/public/calendar.vue @@ -2,21 +2,31 @@ - {{ year }}年{{ month + 1 }}月 - - 上个月 - 下个月 + + + + {{ year }}年{{ month + 1 }}月 + + + + + + {{ day }} - + {{ cell.dateText }} {{ cell.lunarText }} @@ -31,66 +41,182 @@ } from 'vue'; import solarlunar from 'solarlunar'; // npm install solarlunar + // 初始当前年月 const now = new Date(); const year = ref(now.getFullYear()); - const month = ref(now.getMonth()); + const month = ref(now.getMonth()); // 0-based - // 单选选中 key - const selectedKey = ref(null); + // 选中开始 / 结束 key (格式: YYYY-MM-DD) + const startKey = ref(null); + const endKey = ref(null); - // 星期一到星期日 + // 把年月日转成便于比较的数字 YYYYMMDD + function toDateNumber(y, m, d) { + // m 是 0-base + const mm = m + 1; + return y * 10000 + mm * 100 + d; + } + + // 格式化 key(m 0-base => 输出两位) + function formatKey(y, m, d) { + const mm = String(m + 1).padStart(2, '0'); + const dd = String(d).padStart(2, '0'); + return `${y}-${mm}-${dd}`; + } + + // 星期一..日(与之前一致) const weekdays = ['一', '二', '三', '四', '五', '六', '日']; + // 计算某月第一天是周几(调整为 Monday = 0) const firstWeekdayOfMonth = (y, m) => { - const d = new Date(y, m, 1).getDay(); - return (d + 6) % 7; + const d = new Date(y, m, 1).getDay(); // 0 (Sun) - 6 (Sat) + return (d + 6) % 7; // 转成 Monday=0 .. Sunday=6 }; - const cells = computed(() => { + // 生成 6*7 (42) 个格子的 cells(包含前后月份) + function buildCells(y, m) { const list = []; - const prevMonthDate = new Date(year.value, month.value, 0); - const prevYear = prevMonthDate.getFullYear(); - const prevMonth = prevMonthDate.getMonth(); - const prevTotal = prevMonthDate.getDate(); - const startOffset = firstWeekdayOfMonth(year.value, month.value); + // 上个月信息 + const prevDate = new Date(y, m, 0); // 上个月最后一天 + const prevYear = prevDate.getFullYear(); + const prevMonth = prevDate.getMonth(); + const prevTotal = prevDate.getDate(); + + const startOffset = firstWeekdayOfMonth(y, m); + + // 前置填充 for (let i = 0; i < startOffset; i++) { const day = prevTotal - startOffset + i + 1; const lunar = solarlunar.solar2lunar(prevYear, prevMonth + 1, day); + const dateNumber = toDateNumber(prevYear, prevMonth, day); list.push({ key: `prev-${prevYear}-${prevMonth + 1}-${day}`, dateText: day, - lunarText: lunar.dayCn, + lunarText: lunar ? lunar.dayCn : '', prev: true, next: false, + year: prevYear, + month: prevMonth, + day, + dateNumber, }); } - const totalDays = new Date(year.value, month.value + 1, 0).getDate(); + + // 当前月 + const totalDays = new Date(y, m + 1, 0).getDate(); for (let d = 1; d <= totalDays; d++) { - const lunar = solarlunar.solar2lunar(year.value, month.value + 1, d); + const lunar = solarlunar.solar2lunar(y, m + 1, d); + const dateNumber = toDateNumber(y, m, d); list.push({ - key: `${year.value}-${month.value + 1}-${d}`, + key: formatKey(y, m, d), dateText: d, - lunarText: lunar.dayCn, + lunarText: lunar ? lunar.dayCn : '', prev: false, next: false, + year: y, + month: m, + day: d, + dateNumber, }); } + + // 尾部补位到 42 + const need = 42 - list.length; + for (let i = 1; i <= need; i++) { + const nd = new Date(y, m + 1, i); + const ny = nd.getFullYear(); + const nm = nd.getMonth(); + const lunar = solarlunar.solar2lunar(ny, nm + 1, i); + const dateNumber = toDateNumber(ny, nm, i); + list.push({ + key: `next-${ny}-${nm + 1}-${i}`, + dateText: i, + lunarText: lunar ? lunar.dayCn : '', + prev: false, + next: true, + year: ny, + month: nm, + day: i, + dateNumber, + }); + } + return list; + } + + // 当前视图的 cells + const cells = computed(() => buildCells(year.value, month.value)); + + // start/end 转成数值便于比较 + const startNumber = computed(() => { + if (!startKey.value) return null; + const [y, m, d] = startKey.value.split('-').map(Number); + return toDateNumber(y, m - 1, d); + }); + const endNumber = computed(() => { + if (!endKey.value) return null; + const [y, m, d] = endKey.value.split('-').map(Number); + return toDateNumber(y, m - 1, d); }); - function isSelected(key) { - return selectedKey.value === key; + // 判断是否 start / end + function isStart(key) { + return startKey.value === key; } + function isEnd(key) { + return endKey.value === key; + } + + // 判断是否在范围内(包含边界) + function isInRange(dateNumber) { + if (!startNumber.value || !endNumber.value) return false; + return dateNumber >= startNumber.value && dateNumber <= endNumber.value; + } + const emit = defineEmits(["datachange"]); // 定义事件名 + // 选择日期逻辑:支持任意先后顺序的两次点击来形成区间 function selectDate(cell) { - if (cell.prev) { - return + // console.log("ZZZZ",isInRange(cell.dateNumber)) + if (cell.prev || cell.next) return + const key = formatKey(cell.year, cell.month, cell.day); + const num = cell.dateNumber; + + // 如果没有选 start -> 设为 start + if (!startKey.value) { + startKey.value = key; + endKey.value = null; + return; } - selectedKey.value = cell.key; - // 触发导出事件或回调 - console.log('Selected date:', cell.key); + + // 已有 start 但无 end + if (startKey.value && !endKey.value) { + // 如果第二次选择晚于或等于 start -> 设为 end + if (num >= startNumber.value) { + endKey.value = key; + // console.log("开始,结束", startKey.value, endKey.value) + emit("datachange", { + start: startKey.value, + end: endKey.value, + }); + return; + } + // 如果第二次选择早于 start -> 把早的设为 start,晚的设为 end(即交换) + endKey.value = startKey.value; + startKey.value = key; + // console.log("开始,结束", startKey.value, endKey.value) + emit("datachange", { + start: startKey.value, + end: endKey.value, + }); + return; + } + + // 已有 start 和 end,再次点击任意日期 -> 以该日期作为新的 start,清除 end + startKey.value = key; + endKey.value = null; } + // 年/月 切换 function prevMonth() { if (month.value === 0) { year.value--; @@ -108,89 +234,97 @@ month.value++; } } + + function prevYear() { + year.value--; + } + + function nextYear() { + year.value++; + } \ No newline at end of file diff --git a/pages.json b/pages.json index 03adf89..80f91a6 100644 --- a/pages.json +++ b/pages.json @@ -182,6 +182,13 @@ "navigationStyle": "custom" } + }, + { + "path": "pages/Warehouse/paymoney", + "style": { + "navigationStyle": "custom" + } + }, { "path": "pages/Warehouse/procurecart", diff --git a/pages/NursingNew/component/nurse/index.vue b/pages/NursingNew/component/nurse/index.vue index 39cd5e5..f47dd24 100644 --- a/pages/NursingNew/component/nurse/index.vue +++ b/pages/NursingNew/component/nurse/index.vue @@ -27,9 +27,9 @@ + :src="item.izSelected==`Y`?item.netPicFocus: item.netPic" /> + :style="item.izSelected==`Y`?{color:`rgb(54, 159, 239)`}:{}"> {{item.tagName}} @@ -62,9 +62,9 @@ + :src="item.izSelected==`Y`?item.netPicFocus: item.netPic" /> + :style="item.izSelected==`Y`?{color:`rgb(54, 159, 239)`}:{}"> {{item.tagName}} @@ -420,7 +420,7 @@ @@ -824,15 +824,15 @@ const bodytarget = ref([]); const facetarget = ref([]); const addbody = (index : number) => { - if (bodyTagList.value[index].izSelected == '1') { + if (bodyTagList.value[index].izSelected == 'Y') { // console.log("///",bodyTagList.value[index]) // return - bodyTagList.value[index].izSelected = '0'; + bodyTagList.value[index].izSelected = 'N'; } else { let targetNumber = 0; bodyTagList.value.forEach((element : any) => { - if (element.izSelected == '1') { + if (element.izSelected == 'Y') { targetNumber++ } }) @@ -845,18 +845,18 @@ }) return } else { - bodyTagList.value[index].izSelected = '1'; + bodyTagList.value[index].izSelected = 'Y'; } } saveAll() } const addface = (index : number) => { - if (emotionTagList.value[index].izSelected == '1') { - emotionTagList.value[index].izSelected = '0' + if (emotionTagList.value[index].izSelected == 'Y') { + emotionTagList.value[index].izSelected = 'N' } else { let targetNumber = 0; emotionTagList.value.forEach((element : any) => { - if (element.izSelected == '1') { + if (element.izSelected == 'Y') { targetNumber++ } }) @@ -869,7 +869,7 @@ }) return } else { - emotionTagList.value[index].izSelected = '1'; + emotionTagList.value[index].izSelected = 'Y'; } } saveAll() @@ -1796,7 +1796,7 @@ serviceDuration: allobject.serviceDuration, positioning: saveEditIndex.value.index0.toString(), positioningLong: saveEditIndex.value.index1.toString(), - izPackage: '1', + izPackage: 'Y', previewFile: "", previewFileSmall: "", immediateFile: "", @@ -1942,7 +1942,7 @@ endTime: formattedEnd, positioning: saveEditIndex.value.index0.toString(), positioningLong: saveEditIndex.value.index1.toString(), - izPackage: '0', + izPackage: 'N', previewFile: allobject.previewFile, previewFileSmall: allobject.previewFileSmall, serviceDuration: allobject.serviceDuration, @@ -1996,12 +1996,12 @@ let info = [] bodyTagList.value.forEach((element : any) => { - if (element.izSelected == '1') { + if (element.izSelected == 'Y') { info.push(element) } }) emotionTagList.value.forEach((element : any) => { - if (element.izSelected == '1') { + if (element.izSelected == 'Y') { info.push(element) } }) @@ -2103,14 +2103,14 @@ emotionTagListLook.value = [] bodyTagListLook.value = [] res.result.emotionTagList.forEach((res : any) => { - if (res.izSelected == '1') { + if (res.izSelected == 'Y') { emotionTagListLook.value.push(res.netPic) } }) bodyTagList.value = res.result.bodyTagList // console.log("zzzz",res.result.bodyTagList) res.result.bodyTagList.forEach((res : any) => { - if (res.izSelected == '1') { + if (res.izSelected == 'Y') { bodyTagListLook.value.push(res.netPic) } }) @@ -2214,7 +2214,7 @@ endTime: "", positioning: "", positioningLong: "", - izPackage: '0', + izPackage: 'N', previewFile: "", previewFileSmall: "", serviceDuration: "", diff --git a/pages/Warehouse/Warehouse.vue b/pages/Warehouse/Warehouse.vue index d320607..07bfaec 100644 --- a/pages/Warehouse/Warehouse.vue +++ b/pages/Warehouse/Warehouse.vue @@ -34,7 +34,7 @@ - + @@ -61,8 +61,15 @@ const housedex = ref(-1); const housactive = (index : number) => { + console.log("点击哪个了",index) if (index > 5) { return } if(housedex.value == index){ + if (housedex.value == 0) { + navurl.value = 'pages/Warehouse/paymoney' + uni.navigateTo({ + url: '/' + navurl.value + }) + } if (housedex.value == 1) { navurl.value = 'pages/procurement/material' uni.navigateTo({ diff --git a/pages/Warehouse/api/lunpan.js b/pages/Warehouse/api/lunpan.js index 8bad07f..a865cba 100644 --- a/pages/Warehouse/api/lunpan.js +++ b/pages/Warehouse/api/lunpan.js @@ -135,4 +135,19 @@ export const updateWarehouserEnabled = (params) => { method: 'post', data: params, }) +} +//获得采购人 +export const getCgrLis = () => { + return request({ + url: `${uni.getStorageSync('serverUrl')}/api/pad/invoicing/getCgrList`, + method: 'get' + }) +} + +//获得采购人 +export const getGysList = () => { + return request({ + url: `${uni.getStorageSync('serverUrl')}/api/pad/invoicing/getGysList`, + method: 'get' + }) } \ No newline at end of file diff --git a/pages/Warehouse/finish.vue b/pages/Warehouse/finish.vue index d78a551..3fe62b1 100644 --- a/pages/Warehouse/finish.vue +++ b/pages/Warehouse/finish.vue @@ -199,7 +199,7 @@ + style="width: 95%;height: 0.5rpx;background-color: #eff1f3;margin-top: 10rpx;margin-bottom: 5rpx;"> @@ -322,7 +322,7 @@ - + diff --git a/pages/Warehouse/paymoney.vue b/pages/Warehouse/paymoney.vue new file mode 100644 index 0000000..4a8061c --- /dev/null +++ b/pages/Warehouse/paymoney.vue @@ -0,0 +1,2636 @@ + + + + + \ No newline at end of file diff --git a/pages/Warehouse/picking.vue b/pages/Warehouse/picking.vue index 4a8061c..6ddbd16 100644 --- a/pages/Warehouse/picking.vue +++ b/pages/Warehouse/picking.vue @@ -1,8 +1,11 @@